A bad workman blames his tools - <AUTHOR> http://www.jgc.org/blog/2010/02/bad-workman-blames-his-tools.html <comment><USER2> Indeed, it turns out not to have been a compiler bug, according to a comment on the original article: <http://esr.ibiblio.org/?p=1705#comment-248245>

<comment><USER3> but that doesn't mean that esr retracted his BS.

<comment><USER4> To be perfectly honest, I think it'd make sense to ban ESR's stuff here, because (a) when speaking of technical matters, it's usually wrong, often offensively so and (b) it just degenerates into stuff where we're all complaining about things that are, to most of us, obvious.

Simply put, a competent programmer reading ESR's posts quickly and correctly comes to the conclusion that he's just not a very good programmer. It feels a bit gratuitous to keep driving that home publicly.

<comment><USER5> It would have taken me a lot longer to become familiar and comfortable with this culture if not for esr's help. A hard rule like "no esr" would throw the baby out with the bathwater. HN's shower has a drain.

</comment></comment></comment></comment><comment><USER6> Having been a blamer of tools, I would rather say "A good workman who blames his tools fixes the tools or gets better tools"

The statement _This is, simply put, appalling advice._ regarding the advice to try lowering the optimization level to see if the heisenberg goes away. The headline here uses the word "blame" but the referenced article has a headline of _When you see a heisenbug in C, suspect your compiler's optimizer_.

Having written a couple of compilers and used many, I agree with the advice to "suspect" the optimization level. Try the lower level, but keep in mind that it could either be a lucky rearrangement of your particular code or a bug in the optimizer.

The -O3 level is widely held to be risky. To me, this means that there is risk of bad code generated, not risk of the resulting program being too fast.

I think the realistic estimate of the probability of errors in gcc is either 1.0 or approaches 1.0, and with -O3 it is not lower.

Yes, lots of people compile lots of programs with gcc and g++, but every shop I have seen has a set of coding standards that suggest or demand avoidance of certain features.

There is a test of a program or specification that gives you a choice between 1) Obviously no deficiencies or 2) No obvious deficiencies. Doesn't seem to me that gcc/g++ (or any other competing compiler) fits either of these criteria.

<comment><USER7> Some of us don't quite have the luxury of fixing our tools (MSVC++ I'm looking at you). Considering the sheer complexity of languages like C++, it's unsurprising that there will be problems here.

I've been a blamer of tools as well, but I've convinced myself that it's ultimately wasted effort to do so. Better to simply come to terms with the fact that there do exist bad tools, that they ought to be avoided when reasonable, and that they should be used with care when necessary.

<comment><USER6> Yes, tools as big as C compilers and C++ compilers are pretty hard to fix, but then there was an effort to "fix" this by starting LLVM and clang, etc. One might argue that pg is "fixing" lisp by starting arc, and that Rick Hickey is fixing Java (and some say Lisp) by starting Clojure. In my case, i "fixed" fortran by getting into compilers and learning other languages.

So really "fixed" in this note I guess translates as "moved away from".

</comment></comment></comment><comment><USER8> Corollary 1: A good workman uses tools that make it easier to diagnose his own mistakes, since that's what most problems are. Valgrind is a beautiful example.

Corollary 2: Tools that don't help you catch your mistakes are, in fact, bad tools, and shouldn't be used.

<comment><USER9> I understand the point, but I think corollary 2 is a bit too strongly worded. Sometimes tools don't help you catch your mistakes but are fantastically useful for other things. The fact that the assembler does exactly what you tell it to is a prime example.

I think it could probably be re-worded as "use the safest tool you can to get the job done."

</comment></comment><comment><USER10> Agreed, if you have a bug in a C program your first thought should not be that you're dealing with a problem in the compiler or standard libraries. However as you move farther down the chain, it's quite common to encounter bugs in open source code, especially in projects which have have a large body of "contributed" modules (I'm thinking of Drupal as a particular example, not to pick on that project, but I have found that the quality of contributed modules is generally not very good, excepting the modules that are widely used). Therefore I'd say that as a general rule, the likelihood of a finding bug in your "tools" is inversely proportional to the number of users your tools have.

</comment><comment><USER11> As my dad was fond of quoting:

"A worker uses his tools. A journeyman knows his tools. A craftsman makes his own tools."

</comment><comment><USER12> I love the way he describes "continuous integration, unit tests, assertions, static code analysis, memory checkers and debuggers" as "scar tissue." "Callouses" might be a better literal fit, but "scar tissue" feels right and true.

</comment><comment><USER13> Pragmatic Programmer has this covered: Select Isn't Broken

"It is rare to find a bug in the OS or the compiler, or even a third-party product or library. The bug is most likely in the application."

[http://www.pragprog.com/the-pragmatic- programmer/extracts/ti...](http://www.pragprog.com/the-pragmatic- programmer/extracts/tips)

</comment><comment><USER14> This is actually an example where valgrind _doesn't_ catch the bug. All it sees is a write to the stack, which is a perfectly reasonable thing to do as far as valgrind is concerned.

</comment><comment><USER15> But I also like to say "You can tell a worker by his tools". The choice of tools and how they are used tell a lot about the workman ( a programmer in particular ).

      - Do they use source control ?
      - Do they use unit tests ?
      - What kind of language + environment do they use ?
      - Do they have strong opinions about deficiencies of other tools, that they specifically refuse to use? (this shows experience perhaps).

</comment><comment><USER16> I'm really not surprised. I read the other article and immediately thought of the _select isn't broken_ story from The Pragmatic Programmer and at the various bugs I have encountered myself, especially in C and C++, where it would have been tempting to blame the tools, but int he end turned out to be memory issues or race conditions.

Blaming the compiler is an easy cop out and this proves that it rarely actually is the case. This guy is experienced and clever, but he still fell for the _its a compiler bug_ trap. I'm glad he found the real bug and, hopefully, learned his lesson.

I'll reiterate what I said in a comment to the other article - I think that there should be a universal law of programming in languages like C that says that you _must_ , at a minimum, _urn compiler warnings to maximum and make sure it compiles without any warning; run your program through tools such as valgrind and ensure it passes without error_. And if debugging information of optimizations make bugs appear/disappear then you need to double check everything - its probably a memory alignment issue.

</comment><comment><USER17> OK, I'm wondering if jgrahamc is sure of why that value is being overwritten in his example... According to this document ([http://developer.apple.com/mac/library/DOCUMENTATION/Develop...](http://developer.apple.com/mac/library/DOCUMENTATION/DeveloperTools/Conceptual/LowLevelABI/130-IA-32_Function_Calling_Conventions/IA32.html) ) there are 4 registers pushed onto the stack - ESI, EDI, EBX, and EBP - during a function call. Which means the attempt to write to ar[20] is actually blowing away a register saved on the stack by the function prolog, not an array allocated on the stack.

Of course, I've never disassembled MacOSX code, so maybe I'm forgetting something important. If anyone can correct me, I'd be very grateful!

<comment><AUTHOR>
            .text
      .globl _a
      _a:
            pushl   %ebp
            movl    %esp, %ebp
            pushl   %esi
            subl    $100, %esp
            call    L_getpid$stub
            movl    %eax, %ecx
            movl    $1808407283, -92(%ebp)
            movl    -92(%ebp), %eax
            imull   %ecx
            sarl    $3, %edx
            movl    %ecx, %eax
            sarl    $31, %eax
            movl    %edx, %esi
            subl    %eax, %esi
            movl    %esi, -76(%ebp)
            movl    -76(%ebp), %eax
            sall    $3, %eax
            addl    -76(%ebp), %eax
            addl    %eax, %eax
            addl    -76(%ebp), %eax
            movl    %ecx, %edx
            subl    %eax, %edx
            movl    %edx, -76(%ebp)
            cmpl    $0, -76(%ebp)
            sete    %al
            movzbl  %al, %eax
            movl    %eax, 8(%ebp)
            addl    $100, %esp
            popl    %esi
            leave
            ret
      .globl _main
      _main:
            pushl   %ebp
            movl    %esp, %ebp
            subl    $72, %esp
            movl    $0, -72(%ebp)
            call    _a
            movl    -72(%ebp), %eax
            leave
            ret

<comment><USER17> Yup, guess you're sure then ;) Though out of curiousity, have you actually looked at the stack when it's running? Also, I can see ESI and EBP being pushed onto the stack, but what's the missing third value? Update: Actually, even more intriguing, why is the stack shifted by 100 bytes for the a() function??? I would have expected it to be 72, as it was for the main() function, ie 64 bytes for the ar[16] and then 8 bytes for the two registers that are pushed onto the stack.

Sigh. I'd love to actually have the time to dig out my Intel opcode books and figure it out, that would be fun, but I have to get myself back into Javascript headspace for work tomorrow morning. I wonder how many layers there are between my Javascript code and processor opcodes...

<comment><USER18> The instruction ``call _a'' pushes the address of the next instruction onto the stack.

</comment></comment></comment></comment><comment><USER19> I think this is a good point. But there's a balance. Questioning tools (blame is borderline useless) can be useful of course.

I think it boils down to -- be humble about whatever context you're operating in -- so as to understand it and use it fully. But that doesn't mean one should stop questioning.

The fact that gcc doesn't warn about a lack of return values (without the appropriate -W flags) is pretty silly. Maybe if you're programming assembly as much as you are C, you don't have to worry about that. But most people who use gcc don't exactly know assembly (though they should!). The tool itself is fairly well-documented, but it's not perfect. Could be improved.

Actually, I don't know. Maybe it is good the way gcc and gdb require the programmer to step up and be more active about the whole process (and maybe learn assembly and how the machine is actually working). So I don't know the right approach. But there is a risk in just 'accepting' tools as they are. Hmm.

I think it's more like -- channel your problem with a tool into a better understanding of what's going on.

</comment><comment><USER20> Continuing:

A good workman doesn't use bad tools.

A good workman may curse his tools but he nevertheless still gets things done.

A good workman knows his tools well enough to know what they can and cannot do, and does not ask them to do what they cannot.

A good workman is humble and takes the effort to identify a problem before blaming a cause (whether it be the tools, himself, anomalous barometric pressure, or what-have-you).

</comment><comment><USER21> >In fact, it's a sign of a very poor or inexperienced programmer if their first thought on encountering a bug is to blame someone else.

Very true.

</comment><comment><USER22> Shorter version: a bad workman blames.

</comment><comment><USER23> Corollary (on second thought, Axiom):

Heisenbugs do not exist, computers are deterministic.

Things that do exist:

Pieces of code that I do not understand. Pieces of code that I have not read. Pieces of code that interact in ways which I do not expect.

<comment><USER24> >Heisenbugs do not exist

Perhaps in your universe.

In mine, I've seen video card temperature, random radio noise on an ungrounded component, and power line noise all totally screw with programs. Diagnosed to the point we could stimulate the errors through environmental changes. Dozens of more errors we think we have the solution to as being caused intermittent effects but can't repro reliably

Computers in theory are deterministic. In practice, they're machines in the world.

</comment></comment><comment><USER25> this topic came up not long ago, in a discussion related to php. i will stress it again: in programming and programming languages today, there aren't any bad tools - there are just bad workmen who can't (or simply refuse to) make do with the tools at hand.

the comparisons of "you can't cut a cake with a fork" et al. just doesn't apply here.

<comment><USER26> you're saying php is equivalent to lisp and haskell and erlang, riiiiight, ok....

<comment><USER26> If you can judge a man by the shine on his shoe, you can judge a developer by the syntax on is screen.

php is a 100 pound chain on the productivity of the entire industry. Companies that have embraced php also happen to be examples of companies that achieved way below their potential (yahoo and facebook).

It's funny that as we slay the beasts of perl and j2ee, we bring up another terrifying goul. It's probably why real engineers snicker when we call ourselves software 'engineers'.

</comment></comment></comment><comment><USER27> That is such a useful phrase. I'd hate to forget it. Here, could you write it down for me on the back of this postage stamp using this banana to write with? Thanks.</comment>


Climate change misinformation spreads online - <AUTHOR> https://www.carbonbrief.org/guest-post-how-climate-change-misinformation-spreads-online <comment><USER2> I actually think there is very little misinformation led climate denial around climate here in the UK. Plenty of people refuse to do anything. But that's a decision they've made despite being informed, not because of misinformation. I see evidence of the same attitude in the US, but I don't live there so I cannot really comment.

Many of us from a educated or stem background mistakenly think people get (large amounts of) information, digest it and then make the socially correct decision. But that isn't what happens. Most people make the decision that suits them personally, they do it within about 5 seconds of realizing a decision is necessary (long before they can have been given any real information). People then use any justification that fits the decision they already made in order to defend that decision.

I actually think most climate misinformation is a result of people's climate denial, not the other way around. People don't want to give up carbon so they spread useful BS that helped them justify keeping emissions. They do this because it makes them feel better about a decision they know has massive negative consequences, just like people share cat pictures: they are not sharing a picture of a cat they actually know, they're sharing "feels". "Feels" in the form of cat pictures spread, so do "feels" in the form of political humour or climate misinformation or vaccine denialism.

It is "feels" that have beaten facts, not lies. That's why more facts are not solving this issue. Climate misinformation is just a small subset of the many examples of this.

What we need now isn't more information or less mis-information (aka moderation of social media). It's celebrities endorsing emissions cuts. A Kardashian driving a Tesla or a photo of a single child that died from a climate driven disaster will convince more people to vote green than 1001 research papers or carefully structured arguments or expert interviews or statistics.

</comment><comment><USER3> "There is a negligible amount of literature about climate alarmism compared to climate scepticism, suggesting it is significantly less prevalent. As such, the focus for this article is on climate scepticism."

<comment><USER4> I also noticed that sentence. Circular reasoning out in the open.

I don't personally see over-alarmist info as being as prevalent or as effective as denialist info, in large part because simply prudently-alarmist info in line with scientific predictions has enough trouble getting traction, this was not the way to rationalize an exclusion of that topic from the article.

</comment></comment><comment><USER5> Sure. Right after covid scepticism is going well we will focus again on ignoring the science on the next major issue to save the economy

<comment><AUTHOR> When western countries were hit by the first COVID-19 wave (Italy, France, New York, etc.), seeing how irresponsible people were, I nearly lost all hope to fight Global Warming. If supposedly educated people can't behave responsibly when facing imminent danger, how are they going to behave responsibly in face of a distant, somewhat more abstract threat?

It's not even so much that these countries were unprepared - can't say I was expecting a pandemic like that one to happen. So I certainly didn't push, directly or indirectly, my elected representatives to prepare for one. It's the ruthless behavior of people ignoring warnings, casually carrying on as usual until it was too late. Governments had to wave the proverbial stick (read: fines) to get people to act responsibly. At least in France and, I believe, Italy.

So I lost much hope: if we couldn't react in time for COVID-19, we won't react in time for Global Warming. But I like to think of myself as an optimist: maybe COVID-19 could be the warning we need to take Global Warming seriously.

And then here we are. Now COVID-19 is more or less a known quantity, we know better how it spreads, how avoid it, its complications, etc. Masks and ventilators are aplenty. We found some medicines that help. We are better armed to deal with it in hospitals.

So we should be better off? Nope, we are all the way at the bottom of the pit. UK. Sweden. Brazil. Texas. And then Facebook. Twitter. It's getting worse, and it's getting worse faster. We, humans, are doubling down on killing ourselves.

So I'll keep wearing a mask, and traveling mostly by train/subway. But I don't have much hope.</comment></comment>


Ask HN: Is an open source SaaS model viable? - <AUTHOR> I recently created an open source project [1] (a tracking-free comment engine) that was well received. However, it requires setting up your own instance. Some users suggested that I should offer this as a SaaS and charge with a subscription model. The reason why the commercial closed-source solution (Disqus) exists is because it's easier - they charge money and offer this as a convenient service.
The entire project will always be open source. It's MIT license, so you can always fork your own copy. However I'm wondering if I should create a SaaS out of this that offers more advanced features (like comment moderation that works way better if offered as a SaaS)?
And if so, how should I figure out what should be the price? Does the open source SaaS model work? Any examples?
I've had a couple of people from venture firms reaching out to me about this. This is all very new to me, so I'd really appreciate some help here :)
[1] https://github.com/adtac/commento <comment><USER2> Yes, why not. Do it. Here are some suggestions:

1\. Put up a landing page asap explaining what commento does. Add 2 Call-to- Action buttons on it. One for "Download Free" which should take them to the github page. Second for "Host it for me" where take them to a signup page and get their credit card but offer a FREE trial for 7-30 days (you can experiment with this). Regardless of whether self hosted or saas, collect email address from everyone.

2\. Show a simple table on the landing page explaining the difference between self hosted and SAAS versions including feature differences. Remember that there will be 2 types of audience that you are targeting. One: developers who don't mind self hosting vs the second: non technical bloggers etc who just want a simple commenting system.

3\. Have a subscribe form somewhere that is not too intrusive. Manage your email list using this but don't spam please.

4\. Start writing blog posts on topics related to the pain points with comments including competitor's horror stories. Don't directly attack them but show why you are better.

5\. Go on twitter and type "disqus sucks" or "I hate disqus" etc. From the results, talk to those people and ask them if they are willing to try your free service.

6\. Google "disqus alternatives" and visit the top 10 articles that show up. See if there are any discussions on those articles that you can leverage. Find some adopters from there as well.

7\. Listen to your users carefully. But don't worry about haters. Ignore them. Only focus on constructive criticism and feedback.

8\. Get product hunted if you can (I never really cared about this but heard this can give you a temporary traffic spike)

Don't forget. You built something cool. But to turn it into a SAAS, you will have to do a lot more including the steps I mentioned to turn it into something sustainable and worth. You built it but they won't come unless you make an effort.

</comment><comment><USER3> Absolutely. The value is in the service you provide, not in the code.

Lets assume a potential competitor takes all your code and makes a carbon copy of what you're offering.

\- Will any of your customers jump ship? Probably not, there is no incentive if the service that you offer is good. \- Will 50% of new customers automatically go to them? Probably not, not unless they are better at marketing than you, are offering a better service, at a lower cost, etc. \- Will all of your customers that would pay for your service use your code and host it themselves? Probably not. The people who would host it themselves are probably a completely different demographic from those who are looking for a hosted solution.

Ultimately it all comes down to how good of a service you offer. If you charge $10 and give me a hosted solution that I can set up in minutes, there is no reason for me to spend hours of my own time setting up and configuring it only to have the exact same thing, just based on how much my time would be worth, if you're charging $10-15 dollars per month for this service, I would have to keep paying you every month for 2-3 years before I even break even on how much money I sacrifice by doing it myself.

There are dozens of products I pay for and use every day where the vast majority of what makes them up is completely open source. I can take all the code, and create everything that that product is, but why? I'm perfectly happy using that service. The creator keeps it updated, secure, takes care of the hosting etc. And I'm more than happy to support them financially.

</comment><comment><USER4> In general, business to business (B2B) open source can be viable. Perhaps the oldest company is Redhat - it is certainly the most widely known. For SaaS, there are a number of companies in B2B with open source: Docker, Discourse, Wordpress, MongoDB...and many others. So maybe a viable business can be built.

My random internet advice:

1\. Listen to your customers. They _say_ they want hosting. Ask for money to see if they really want it. Business's charge money. Viable businesses seek profits and do not rationalize charging less.

2\. Read and listen to Patrick "patio11" Mackenzie's back catalog of blogs and podcasts about building SaaS services. His advice is better than mine (the best of mine is mostly parroting him).

3\. In terms of investors, read Graham's essays. I'm not saying apply to YC. I am saying that they provide a take on startup landscape and founder friendly investment.

4\. Pricing: [https://news.ycombinator.com/item?id=1639712](https://news.ycombinator.com/item?id=1639712)

Good luck.

</comment><comment><USER5> Yes. That's a good idea. I would focus on on making it easy for customers to get up and running with the service before going crazy with the new features.

Here's some examples:

WordPress -> WordPress.com (For a monthly fee, you get an already set-up WP site instead of having to do it yourself or shop around for hosts)

Puppet -> Puppet Enterprise (For a monthly fee, they can manage your puppet stuff in their cloud)

Git -> GitHub (Slightly different in that GitHub didn't invent Git. For a monthly fee, you get private git repos)

If I was in your shoes, I'd start with $10/mo for essentially what Disqus does: a snippet you can add to your site to have comments without having to set up your own instance.

</comment><comment><USER6> > I've had a couple of people from venture firms reaching out to me about > this.

Wow. Indian VCs or VCs from the US? What was their pitch like?</comment>


What Python Fixes - <AUTHOR> http://paulgraham.com/pythonfix.html

<comment><USER2> Python is like a piano: anyone can sit down and tap out Three Blind Mice within a few minutes, but a virtuoso can play Rachmaninoff's Symphony No. 2.

The language is well designed; the barrier to entry is low; the language allows for progressive discovery of its advanced features; it is powerful and flexible enough to allow an arbitrary combination of imperative, object oriented and functional programming; and the large, mature ecosystem of third party libraries means it can already do about 80% of just about any problem you can think to throw at it.

<comment><USER3> Piano is actually somewhat notorious for being excessively baroque and difficult to play at the higher skill levels, the keyboard having been originally designed to play only in a single key with a different tuning system.

<comment><USER4> I didn't know that and that sounds interesting to me. Can you elaborate? (I know this is an article about Python, but I love pianos)

<comment><USER3> Sure. It's actually pretty interesting, and involves math.

<http://en.wikipedia.org/wiki/Just_intonation> <http://en.wikipedia.org/wiki/Equal_temperament> <http://en.wikipedia.org/wiki/Well_temperament>

Basically, when you play music aloud naturally with your voice or acoustic instruments where you have complete control of the pitch, people tend towards using whole numbers for representing harmony, like 3:2, since it sounds the best. Unfortunately there are 12 notes in an octave in the Western music system so you end up with bad ratios if you want to use instruments which are tuned to play anything more than a single key. If you are in complete control of your pitch, like with voice or violin or other stringed instruments, the all of the players can adjust their intonation on the fly when the keys change, and still keep the nice whole number ratios.

Enter church organs, which are huge, expensive, and can't be tuned while they're being played. But they're very nice and impressive. So they were tuned to play in only one key -- C. That's why the keys representing the scale of C major on a keyboard are all white, and the other (less important) notes are smaller black keys. You won't be pressing these very often, better to get them out of the way.

Then along came some math people who calculated tables of compromises that ended up giving a pretty decent sound to harmonies, but was laid out in a way so that you could play different keys without having to adjust your tuning or intonation. There were different systems, but they were referred to as having temperament. Hence the name "Well-Tempered Clavier" in the famous composition for keyboard instruments, which made ample use of the newfound ability to change keys whenever one pleases.

So now there are a bunch of keyboard players who can suddenly play in any key they want with the new tuning systems. But the keyboard layout is still same one used for playing only in C. That all happened hundreds of years ago, but we're still stuck with the original layout for keyboards.

<comment><USER4> Wow! That's fascinating. I'd lke to see more music related posts 'round here

<comment><USER2> This was posted to HN a month and a half ago:

<http://news.ycombinator.com/item?id=1283523>

</comment></comment></comment></comment></comment></comment><comment><USER5> Python is not static

Python is not monkey-patched

Python is not multiple coding styles

Python is not enterprise

Python is not overly verbose

Python is not overly concise

Python is not lacking in libraries

Python is not a dialect

Python is not manual memory management

Python is not hard to learn

Python is not a roadblock to writing code quickly

And really the only important issue: Python is not a pain to use.

<comment><USER6> Not all of these things are 100% true, but those that aren't are _true enough_ to make Python less painful to use than a lot of the alternatives.

Python is not multiple coding styles - not entirely true, but probably true enough.

Python is not monkey-patched - again not entirely true, but maybe true enough.

Python is not overly concise - mostly true, though I've seen abuses of array slicing and passing/storing/calling functions.

Python is not overly verbose - pretty much at the mercy of whoever is writing code, but again, seems to be true enough.

Python seems to be pretty good or good enough in a lot of ways, and deserves credit for this. The far-sighted view will recognize it as a local maxima, however.

(A "perfect" language is like a perfect predator. A tireless, scentless, invisible, silent, indestructible, ultra-fast killing machine would probably wreck its environment. Considered in the context of evolutionary change, it's practically impossible for such a thing to come about.)

<comment><USER5> I agree completely. Python isn't perfect but, for me, it solves the issues I listed. I don't like Java and Perl can be the Pit of Despair. I don't have to worry about 4.days working depending on if I loaded a library that loaded another library that properly patched the integer class and the Scheme/Lisp (perceived by me) clusterfuck of libraries, reader macros, slight incompatibilities etc is just non-existent.

I would drop python in an instant of a better language came along. For me, the question isn't what it fixes, but what it succeeds at. It makes my professional life less painful and that's really the only reason I need.

edit: Also would like to not that the original article seemed fairly pointless. It's not really saying anything of substance.

</comment></comment></comment><comment><USER7> Python fixes maintenance.

You know that sinking feeling when you crack open 3-year-old code written by your predecessor's predecessor and realize it's a load of garbage and that you'll never be able to fix the bug?

Yeah, well, with Python that doesn't happen. At least, not at all frequently.

Python forces you to spend a bit more time up-front and then saves you time each and every time you need to read, edit, or improve your code. People choose Python for the same reasons they choose good testing practices. Python's a mature language for mature developers who want to produce mature software.

<comment><USER8> > _well, with Python that doesn't happen. At least, not at all frequently._

That's a bold statement. It happened to me just last week.

The difference from Perl is that common tasks are standardized ... stuff like OOP is built-in, so you don't have to chose or stay in touch with several frameworks for doing OOP, and you could care less about integration issues between modules that use different OOP systems.

It also has a clean syntax, which makes (good code, written by good developers) readable ... but that's not what bugs me about Perl ... after all, why should you read text in some language (natural or not) if you haven't bothered to learn it?

That's about it. Otherwise I'm beginning to hate Python's limitations.

<comment><USER7> _> > well, with Python that doesn't happen. At least, not at all frequently._

 _> That's a bold statement. It happened to me just last week._

Look, different strokes for different folks: I'm not trying to suggest that _you_ should use Python; I'm explaining why _I_ do.

That said, anecdote ≠ data. Your cited experience doesn't match up with what I've seen in a decade as a Python developer, and, more importantly, it doesn't match up with the data I've seen [1] suggesting that Python code takes 1/2 to 1/4 as much time to maintain as other comparable languages.

When I choose Python, it's because I know that the vast majority of my time is spent maintaining code (mine and other people's), not writing new code. I choose Python because, of all the languages I've tried in my career, it's the one that makes this task easiest.

[1] To forestal the obvious questions: no none of this data is publicly available (at least to my knowledge). I can share some rough details -- contact me privately if you want them -- but you'll pretty much have to either believe that I'm reliable or decide that I'm full of shit. I don't much care either way -- again, this is about my choices, not evangelism.

<comment><USER9> >>> well, with Python that doesn't happen. At least, not at all frequently.

>> That's a bold statement. It happened to me just last week.

>Look, different strokes for different folks: I'm not trying to suggest that you should use Python; I'm explaining why I do.

You made a pretty definitive assertion, and when someone points out that they had an experience to the contrary you say "different strokes for different folks"? Seriously?

I like Python a lot. I've been using it for about 12 years now. My experience doesn't really line up with yours.

I've found that Python is _great_ for writing small (<2000 loc) programs. However, every single time I've seen a large project written in Python it's ended up collapsing under its own weight.

I'm sure I'll get flamed for saying this, but I think part of the problem is Python's dynamic nature. Python is the dynamic language I have the most experience with, so perhaps I'm over-generalizing, but the problem I've seen with large Python projects is that they get to a point where a major refactoring is needed and it's impossible to pull it off because of the dynamic nature of the language. Perhaps with 100% test coverage things would be easier, but in the real world that's rare/nonexistent. (Also, I find that more tests are necessary in Python than in a static language because you end up having to test a lot of the same things your static language would have been proving for you.) In the bigger Python projects I've seen they eventually rewrote the whole system in a static language.

</comment></comment></comment></comment><comment><USER10> For me, Python is the only language that addresses the _human_ side of programming well. You just plain make fewer mistakes with Python, and it's way easier to reload code into your brain after not looking at it for a while. The readability and obvious syntax has vastly more far reaching effects than one thinks it will when first learning it. It's amazing how much more productive one is in a language that is easy to read, easy to type, and easy to figure out what the most likely way to do something is. I reach for pdb more than a manual because most of the time I can guess what an api will be, and if not, 5 seconds of introspection reveals it. Ruby is well designed for computers, but Python is better designed for us fallible humans who have to type into computers. ;-)

<comment><USER10> Further to this, as fallible humans, we usually get the design wrong on the first try. The truly multi-paradigm nature of python has for me made it a really great language for refactoring and iteratively arriving on a good design. You can write proto-types really fast, and turn them into more formal architectures very smoothly.

</comment></comment><comment><USER11> I think that Python "fixes" reliance on language features. Sure, Python has a lot of neat features compared to say C# or Java, but as a dynamic language it really isn't anything _that_ great.

But Python is probably the best example in recent history of a language that made it big not because it was anything radically new or innovative, but because it has a great standard library and a solid, mature implementation.

<comment><USER12> Agreed. In many ways, Python is the most "boring" of the modern dynamic languages, in the sense that it trades exciting features and hip syntax for predictability and elegance. So it gets a lot of the productivity, conciseness, and power of other dynamic languages without nearly as much cognitive dissonance for people familiar with C or Java.

</comment></comment><comment><USER13> Obligatory: <http://norvig.com/python-lisp.html>

Python to me is the new world where any immigrant has a niche for whatever he seeks.

</comment><comment><USER14> SciPy+NumPy+MatplotLib == Matlab ($2k+) returns true for most applications

That's good enough for me to not bother with any other scripting language.

<comment><USER15> Sadly matlab still is much easier to use and understand for engineers, which is one of its, if not the, primary market(s).

<comment><USER16> I agree that numpy python programming is nowhere near matlab for ease of use.

I prefer using python for machine learning tho. I dislike the libraries written in matlab.

Is numpy+python faster than matlab?

<comment><USER15> To be honest I have no reason to conclude that one is faster than the other but I would hope that given its age and girth matlab is more optimized.

The main reason I say matlab is better for engineers is that its documentation is beyond amazing, if you think of something you need you search in the help browser and there is a good chance it is there with substantial information (something that is much harder with the math/science python libraries) also if you know a functions name you just type: help function and get plenty of information which helps when you forget how to use something and need a quick lookup.

I have done some things with scipy but nothing more than solving some odes and I must say even with all the pains of matlab with writing separate files to solve odes and other such things plus some syntax grievances it is still the easiest solution for me.

<comment><USER17> Since both (I assume) are calling the same BLAS and LAPACK libraries underneath the scripting niceness, it's likely they're very similar in speed.

<comment><USER18> Of course it depends what you're trying to do. I'm pretty sure that numpy/scipy have a lot more overhead than Matlab for everything that _isn't_ just a blas/lapack call, but I don't have the numbers to back it up.

I do know that I tried rewriting one of my C++ codes using scipy/numpy and it was about a hundred times slower for that particular task (which did happen to involve very large matrices, approaching the limits of memory).

<comment><USER19> From experience that kind of slowdown for pure numeric algorithms happens when your numpy/scipy code is structured in a way that it makes extra unnecessary copies.

</comment></comment></comment></comment></comment></comment></comment><comment><USER3> Python is a Lisp where the interface to everything is a domain-specific language that visually resembles simple imperative programming.

If Python has fixed anything, it has been because of its roots as a teaching language, with a culture for treating the structure of the language as a tool. Blur the lines between syntax and semantics, and your only option is to create things that can be expressed in both realms at the same time.

<comment><USER20> _Python is a Lisp_ \- I do not understand this. Howso?

<comment><USER3> Garbage collection, syntax modification, runtime code evaluation.

<comment><USER21> > syntax modification

Hmm, have I missed something? What features are you talking about?

<comment><USER3> I guess you do not know very much about Python.

<comment><USER22> Do you mean decorators? How about metaclasses?

</comment></comment></comment></comment></comment></comment><comment><USER23> Simple things are simple. Hard things are doable and still easy to read and maintain. Concise but not so much that it looks like line noise later. An application often has about as many characters as the pseudo-code used when designing it. The language syntax is so minimal and flexible that, unlike Ruby, you do not want to create a true DSL but rather plain old modules, functions and classes in order that you keep the readability & extensibility high by having a common language syntax.

<comment><USER24> Hmm. Python isn't a really big language, but it isn't as small as it used to be, not by far, and it never was as small or minimalistic as e.g. Scheme or Io.

</comment></comment><comment><USER25> Python could be improved a bit, just remove the damn underscore from it.

Everything else is love.

</comment><comment><USER21> To me as a Lisp user, Python breaks more than it fixes. Lexical scoping? Nope, can't have it. Code as data, data as code? Not really. Literals for data? Compilation to native code? Compiler/interpreter warnings? Warnings for name collisions when importing? Standard for the language? Nope.

And I don't really buy the argument that Python is simple and clean. It has multiple inheritance, metaclasses, operator overloading, decorators and whatnot. Also the type system is broken, a deriving class can define an overriding method that has incompatible signature, rendering isinstance powerless (yes, I know you probably shouldn't use isinstance much anyway, but dammit, it should at least mean something).

<comment><USER6> _And I don't really buy the argument that Python is simple and clean._

Yes, but consider the competition. Python is a significant margin above average, but this says as much about the sorry state of computer languages in general as it says about Python.

Heck, English is considered an "easy to learn" language among human languages, and _it's a mess!_

Really the problem is with human beings.

<comment><USER26> (More specifically, English is said to be "easy to learn, hard to master" (because as you say, it's a mess).)

</comment></comment></comment><comment><USER27> Wholeheartedly without trolling, but admittedly with some bitterness, and with much experience in Python, Perl, PHP, Java, C/++ and more, another thing that Python will fix for you is the problem of having a too fast processor on your deployment platform: Python effectively eliminates this problem in most cases, way better than most other languages will. There's always another side of every coin, and it shouldn't ever be ignored.

<comment><USER11> Bear in mind that this is only applicable if your code is very CPU-bound. If it's IO-bound as many applications are these days, then this is for all intents and purposes a non-issue.

<comment><USER28> This is a non-statement -- if the code is IO-bound, then of _course_ CPU performance is not a problem (except for things like, say, power usage, but we'll ignore that). The "power" of Python is to make code that should be IO- bound CPU-bound.

Speaking as someone who loves Python and uses it all the time, but has spent a lot of time learning to love Cython in recent months. A nice feature of Cython (psychologically speaking, at least) that is missing in Python is the power to say that dammit, certain constants are _constant_ , will never be changed, and can be inlined instead of having a hash table lookup every single time.

<comment><USER11> I think it's more accurate to say that it's a truism. Unfortunately, it's one that a lot of people forget.</comment></comment></comment></comment>


Music Theory: An Education from First Principles - <AUTHOR> http://www.lightnote.co/ <comment><USER2> A similar project: [https://www.teoria.com/en/tutorials/](https://www.teoria.com/en/tutorials/)

Focused more on practitioners. Includes exercises with MIDI/USB piano keyboards in the browser: [https://www.teoria.com/en/exercises/](https://www.teoria.com/en/exercises/)

These resources also can be useful:

1\. [https://www.musictheory.net/lessons](https://www.musictheory.net/lessons) (exercises included)

2\. [http://www.earbeater.com/online-ear- training](http://www.earbeater.com/online-ear-training) (ear training exercises)

3\. [https://www.iwasdoingallright.com/tools/ear_training/online/](https://www.iwasdoingallright.com/tools/ear_training/online/) (ear training)

4\. [https://trainer.thetamusic.com/](https://trainer.thetamusic.com/)

5\. [http://music.stackexchange.com/](http://music.stackexchange.com/)

N. Wikipedia is a good reference. E.g., [https://en.wikipedia.org/wiki/Glossary_of_musical_terminolog...](https://en.wikipedia.org/wiki/Glossary_of_musical_terminology)

If someone wants to try music, start with playing an instrument and then pick the theory. If in physics theory says how the world works, music theory is mostly about labeling things that sound good vs noise. And it's hard to get the words without playing first.

<comment><USER3> Great list. I would add hooktheory:

6\. [https://www.hooktheory.com/hookpad](https://www.hooktheory.com/hookpad) (interactive composition tool)

7\. [https://www.hooktheory.com/theorytab](https://www.hooktheory.com/theorytab) (searchable database of chord progressions in popular songs, playable in abovementioned tool)

They also sell an interactive music theory primer, which I've not read, but everything else there is free (and amazing).

</comment></comment><comment><USER4> I like this! I've always wanted to build a music theory textbook (like Laitz) where the examples could be played.

> When a song says that it is in the key of C Major, or D Minor, or A > Harmonic, etc. this is simply telling you which of the 12 notes are used in > this song.

Small nitpick, this is not accurate, C Major and A (natural) Minor have the same notes but different starting notes so they are different scales, and pieces written in them sound different from each other. It's one of those things that's slightly hard to explain if you don't sing/compose/play an instrument/read music but very obvious if you do.

<comment><USER5> > _Small nitpick, this is not accurate, C Major and A (natural) Minor have the > same notes but different starting notes so they are different scales, and > pieces written in them sound different from each other._

Only because they follow usual (classically derived) patterns about the chords played in each key (e.g. 1st, 4th, 5th etc, with are different in each key, and thus give different priority to each note of the scale).

One could play absolutely the same song in C major and A minor (same chords, not same relative chords) -- and it would sound 100% the same, the chords would just have different relationships with each key.

<comment><USER6> The chord relation 1st - 4th - 5th is derived from the natural overtone series every vibrating string or air column emits. Every human can deduce unconsciously the base key note of a song by hearing the song. This is a adaption to physical laws not a cultural convention.

<comment><USER5> > _This is a adaption to physical laws not a cultural convention._

Finding it nice to listen is the cultural convention. Other cultures enjoy microtonal works, or completely different harmonies just fine.

</comment></comment></comment></comment><comment><USER7> This is actually my side project. It's very much unfinished but if anyone has any feedback I'd love to hear it.

<comment><USER8> It's very western-focused, especially when you describe the chromatic scale as "modern music".

I would also lose the "from first principles" by-line. The pentatonic scale description was neat in that you talked about how frequencies that sound good together have certain clean ratios, but when you jumped to chromatic scale, there was nothing about how that was derived other than "filling in the blanks." I love the site in general, but the "from first principles" by-line implies a few things that are kinda missing. It's more accurate to call it a visual introduction to western music theory.

A while back this article popped up on HN: [https://arxiv.org/html/1202.4212v2](https://arxiv.org/html/1202.4212v2) That one dived more into the physics and math that derive different music systems. As I was reading it, I wanted some interactivity like this. So well done! There's a lot of detail in there that could give you ideas for additional visualizations. It was also criticized here on HN a bit for also failing short of it's "first principles" promise, so worth finding and reading that discussion too.

The other thought I have is make the notes keyboard-playable. A lot of the examples are around playing notes together, and shifting between them using a mouse is too slow.

Awesome site overall!

<comment><USER5> > _It 's very western-focused, especially when you describe the chromatic > scale as "modern music"._

99% of the music people write and listen to in the west is western-focused, and not even that adventurous at that, so this is a little moot point.

<comment><USER9> Sure, but even in western music the chromatic scale is considered to have been exhausted in the 20th century. Modern music has moved on to use other notes and sounds and in many cases is not even pitch-centric.

<comment><USER5> > _Sure, but even in western music the chromatic scale is considered to have > been exhausted in the 20th century._

Yeah, but by people like Schoenberg, Alban Berg, and the like, or the wilder jazz guys. Not exactly what most people enjoy with a cup of coffee.

> _Modern music has moved on to use other notes and sounds and in many cases > is not even pitch-centric._

I think that for e.g. electronic, dance, experimental music etc, the chromatic scale/classical harmony/etc. is still a good foundation -- the additional not pitch-centric focus is either in rhythm (which is orthogonal) or in sample/noise-based focus which usually just goes with "if it sounds good, it's ok" kind of approach.

So, not much micro-tonal or other approaches going on in practice.

<comment><USER10> It's out there if you open your eyes a bit. There is a TON of microtonality in blues guitar playing - they just don't use the $10 academic words for it.

<comment><USER11> Have any examples you could link to? I'm very curious to hear what that sounds like.

<comment><USER10> Just listen to any blues...there are string bends all over the place, and many of them aren't traditional western 12-tet intervals.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER12> This is excellent. The graphics and sounds are nicely done.

One thing that I don't see in it, but that I find fascinating, is that in western music each half step represents a ratio of the twelfth-root of two, in terms of frequency. That way 12 half steps (an octave) will double the frequency.

Certain notes within this are close, but not exactly, on a "simple ratio". It's just coincidental that it works out pretty good. (although you could make it work out just as good with something other than a 12 step scale....a 19-step scale has been used: [https://en.wikipedia.org/wiki/19_equal_temperament](https://en.wikipedia.org/wiki/19_equal_temperament) )

Anyway, I think that would fit in well with what you've done so far, but obviously, explained in the nice simple graphics that you seem very good at.

I also must say I love the way you use color, I have a music project of my own (that I'm hoping to debut very soon) that also uses color in a very similar way. Did you know that Isaac Newton fixated on 7 colors (ROYGBIV) because he thought there was a connection between the diatonic scale and colors? That's why indigo seems to have been promoted from some obscure color to one of the "basic" colors of the rainbow. (I prefer BOYGBPP, red-orange-yellow-green- blue-purple-pink)

<comment><USER13> > Certain notes within this are close, but not exactly, on a "simple ratio". > It's just coincidental that it works out pretty good.

It isn't coincidental. Equal temperament was a fork of just intonation.

<comment><USER12> Not sure what you are saying. It is chance how close they are. It works out fairly well in 12 tone scales, worse in most others. Is "coincidence" the wrong word? Maybe. But it didn't have to work out that way, luck or whatever you want to call it was involved.

<comment><USER13> Just intonation is based on intervals that are ratios of small whole numbers.

The 12-tone equal temperament scale is historically a development of just intonation (a "fork" in software terms).

So it's not a coincidence that 12-tone equal temperament intervals are close to ratios of small whole numbers.

</comment></comment></comment></comment><comment><USER14> Shameless plug: I wrote a book a couple years ago that people in this thread may find interesting: "Music for Geeks and Nerds". It's a short book that uses Python to teach music concepts:

[http://pedrokroger.net/mfgan/](http://pedrokroger.net/mfgan/)

</comment><comment><USER15> Nice. I've been thinking a lot about writing a interactive blog series of something similar (music fundamentals for CS people). It'll probably be a while before I start writing that though.

I think the biggest thing that's missing at the moment is a section on rhythm/time. I'm sure you have plans for that. Looking forward to seeing finished course.

</comment><comment><USER16> I wish this was even more "from first principles." I wish the "harmony" section would point out that the "simple ratios" they initially show both have powers of two in their denominators, and thus are just octave adjustments of the harmonic series. I wish the "chords" section would derive the major triad as the fundamental frequency combined with the first two (non-octave) frequencies in the harmonic series octave-adjusted down to be close to the fundamental.

<comment><USER17> Do you have any simple resources (similar to the OP link) to help learn a bit more of the math behind musical ratios?

<comment><USER16> Sadly, I really don't. I've picked it up over a long time, and I still probably have plenty of misconceptions and less-than-rigorous understandings.

<comment><USER17> The thing I don't quite understand is why many seem to argue that major chords aren't inherently more "consonant" than minor chords, and that it's just psychological/cultural, despite the mathematical consonance that seems to be inherent of major triads.

<comment><USER13> "Consonant" vs "dissonant" is subjective: it's a matter of perception, taste. The way you test the hypothesis "This chord is more consonant/more pleasant than that other chord" is by asking a lot of people. Just like "steak tastes better medium-rare than well-done". Physics & chemistry can inform the discussion but it cannot prove or refute the hypothesis.

</comment></comment></comment></comment></comment><comment><AUTHOR> I found this to be a way better resource than the "Music theory for nerds" article floating around a while ago.

</comment><comment><USER18> There's not a smidgen of principle in the jump from harmonic ratios to tempered tuning and standard scales and chords.

True first-principles music theory must (A) focus primarily on psychology over physics (B) not tell people that complex ratios sound bad but simply help people notice that they are _different_ from simple ratios (C) actually go through the full logic of how the tempered system is derived from chains of harmonic ratios adjusted to temper out commas. The easiest approach to the latter is to simply teach diatonic scales as harmonic ratios and not introduce temperament at all until much later.

Far far far from perfect but having the direction that this attempt is missing: [http://www.tallkite.com/AlternativeTunings.html](http://www.tallkite.com/AlternativeTunings.html)

Anyway, I'd write the ultimate thing if I ever found the time. There's at least some good elements to this attempt so far. It really needs to be licensed CC-BY-SA though so that people can adapt and contribute and improve to get it to where it's really good.

<comment><USER19> >Anyway, I'd write the ultimate thing if I ever found the time.

Sure you would...

Here's the thing, it's not that your criticism isn't valid, because I actually agree with it, but what's the point of finishing your remarks with "So anyway, this is why you're wrong and I'm right. Also, I would actually write the ultimate thing myself except I don't have the time."? Yeah, and I would write the ultimate language and compiler, if only I had the time, and I would invent fusion and cure cancer, if only I found the time. I mean, what's the point of remarks like those?

<comment><USER18> I meant more specifically: "I know how hard it is to get this sort aof thing optimally done. I've been considering doing this sort of thing for a long time, but it's a massive amount of work" programming languages and compilers. Which is to say, I acknowledge how hard it is to do this right. So, it's a statement of understnading along with a clarification that I'm someone with the knowledge to do this if only I had time, which I cannot say about

</comment></comment></comment><comment><USER20> I'm kind of late to the game in this thread, but my thought about theory is that it should start with physiology and technology. At each level we're reminded that we study the aspects of music that people have already invented, and that we may overlook a lot of important things, such as rhythm.

Physiology: Some of this may be speculative, but it seems likely that "harmonious" intervals, that have a superposition of harmonics, have a physiological effect.

Technology: The 12 tone scale could be described as a technology for tuning an instrument with harmonious intervals. Temperament is a technology for solving the problems of tuning primarily keyboard instruments.

Naturally, math is involved in understanding these things, as with many areas of science and technology.

I would talk about a handful of widely used instruments, such as keyboards, strings, winds, guitars, and drums.

Then you can begin to talk about scales, chords, melody, form, and so forth.

</comment><comment><USER21> This is absolutely fantastic. I have seen many musicists trying to explaing this with not much success, mainly because they dont understand the physics behind.

You explanation makes perfect sense and it is so clear and so well that once you read it you can remember it forever.

Thanks!

</comment><comment><USER22> Well done! It summarizes a lot of theory it took me months to puzzle out on my own.

One nit: At the top of each section there is a section title, at the bottom of each section, there is a "Next section" title, a description, and a next section button, and on the side there is a list of sections. Some of the titles are inconsistent from list to top of current and from bottom of current to top of next. It's a little confusing right now, and there are only a few sections; when there are more, it will be far more confusing. I don't have a suggestion as to how fix it, just pointing out the confusing inconsistency.

</comment><comment><USER23> Great idea! Just FYI I'm noticing a fair bit of static when playing the various tones. It's mostly at the beginning, which makes me think it's just due to the discontinuity at the beginning (maybe start the volume at zero and quickly increase?) But I'm getting blips of static in the middle of most tones as well, so there must be something else going on. Tried both Chrome and Firefox. I suppose this could be an artifact from my onboard sound card or something like that, but I haven't noticed anything similar elsewhere.

</comment><comment><USER24> This is nice, very nice. But it is quite disappointing that at least for everybody reading HN the whole "Music Theory" topic seems to be just a few concepts that can be learned in 1 or 2 hours.

<comment><USER25> I know right? I left some lengthy comments in the more interesting stuff in earlier threads...upvotes but no responses. Thanks but I'd actually like to have this discussion.

<comment><USER24> Are you a spambot?

</comment></comment></comment><comment><USER26> I'm good on music theory right up to time signatures. It seems like black magic to me, and often it is taught by just asking you to hear the beats and I just don't hear them.

<comment><USER27> Can you do metre? This is about as clear an example of 3/4 time (dactyls, in poetry) as you can get, I think:

 _RAINdrops on | ROSes and | WHISkers on | KITtens [beat] | BRIGHT copper | KETtles and | WARM woolen | MITtens [beat]_

Fast syncopated 4/4 (trochees) is Johnny B. Goode:

 _(deep) | DOWN in LOUsi|ANa CLOSE to|NEW or [BEAT beat] |LEANS [beat BEAT] way | BACK up IN the | WOODS aMONG the | EVer [BEAT beat] | GREENS [beat BEAT] there | STOOD..._

Okay, maybe not the best example. Other common times are just variations on those two.

</comment></comment><comment><USER28> Love this, it's the way i would want to learn.

</comment><comment><USER29> With Safari entirely unable to handle this page, I really feel like I'm missing out on the modern web with it for the first time.

</comment><comment><USER30> this is great but I there was recently an article that made the rounds on HN pointing out that what sounds 'Nice' to people not exposed to western music is very different from what sounds 'Nice' to westerners. This is a great site and people can learn a ton but its very western centric and it might be worth pointing that out early on.

<comment><USER31> Is there a resource for other styles? I'd love to learn about them.

</comment></comment><comment><USER32> Interesting, but too bad it's not much more than the basics. I struggle to find a good explanation of how harmony works, i.e. what they mean by the terms "resolution" or how chords are made, in short: how a musical piece is built.

My piano teacher's refusal to explain these to me is one of the reasons I lost interest in the instrument

</comment><comment><USER33> This is the perfect minimalist introduction to music theory. A similarly good explanation is in Daniel Levitin's "This is Your Brain on Music". It's first few chapters explain music theory to beginners in a really elegant way.

I previously thought music was composed without any rules.

</comment><comment><USER34> Inspired by this, I decided to write a JavaScript keyboard that only plays notes in the key you're in. [https://nickretallack.github.io/theme/](https://nickretallack.github.io/theme/)

</comment><comment><USER35> > The Major Chord is the most common chord. Whenever you're asked to play a > chord without specifying what type, then it's a Major chord.

Certainly not in modern pop music. By far the most common chord is power chord.

<comment><USER36> Power chords aren't actually chords, since they're only two notes.

<comment><USER37> That's kind of like saying a bathroom isn't a room :)

But they're also not major chords, they're fifths - E5, A5, etc, although I personally often add the octave to make it 3 notes.

</comment></comment></comment><comment><USER38> This is great! I found the more robust examples really useful, like the ones that show notes and triads in a key. I'd love to have something like this in the form of a VST or something usable in Ableton.

</comment><comment><USER39> If you are more into mechanical practice of notes reading I had created [http://notationtraining.com](http://notationtraining.com)

</comment><comment><USER40> So why do notes sound good together when the frequency ratios are simple? Needs a section on the inner ear, stereocilia, and how overtones affect them.

<comment><USER41> This is still an open question after multiple millennia. Some posit that it is innate and have primate studies to back it up. Others posit that it is a culturally learned phenomenon and have social studies to back it up.

</comment></comment><comment><USER42> Does anyone know of a music theory class that works with GNU Lilypond format files, as discussed on lilypondblog.org ? Thanks in advance !

</comment><comment><USER43> I disagree with the equivocation of "sound good" with consonant notes and "sound bad" with dissonant notes.

<comment><USER29> You're not alone: [http://www.smithsonianmag.com/smart-news/researchers- travel-...](http://www.smithsonianmag.com/smart-news/researchers-travel- amazon-learn-musical-taste-not-hardwired-180959804)

</comment></comment><comment><USER44> This is fantastic! Looking forward to the next one.

Can anyone suggest good resources in this vein that apply these basic principles to guitar?

</comment><comment><USER45> Love it. Thanks for sharing. Wish I had this when I had some music theory classes back in college.

</comment><comment><USER46> Thanks! Really enjoyed the tutorial

</comment><comment><USER47> FYI sound does not play in Firefox

<comment><USER48> Does in mine.

<comment><USER49> I'm having issues in Chrome. (Does quick speaker check), yeah my sound is good, but not working on the site right now.

</comment></comment></comment><comment><USER50> Software engineer here. Finding my creativity is drying up.. Whats the fastest/easiest way to learn a musical instrument at the highest possible level?

<comment><USER51> Get a good teacher and take weekly lessons for the first few months. Make sure your instrument is up to snuff. Make a habit of practicing at least 30 minutes a day of technically hard stuff. Most importantly, find an instrument (and music genre) that you love.

<comment><USER52> Follow sporkologist's advice and also read "The Talent Code" by Daniel Coyle. It will give insight into why some approaches to practice produce far better results than others.

<comment><USER51> Thanks for mentioning that book, I hadn't seen it before but it formalizes a lot of things that have helped me in the past. Also they mention the Finland educational system. Yeah I'll have to get a copy of this one.

</comment></comment></comment></comment><comment><USER53> Ctrl-- in firefox 45 to see Subscribe button. Apart this, thanks :)</comment>


Obama to Leno: 'We don't have a domestic spying program' - <AUTHOR> http://www.usatoday.com/story/theoval/2013/08/06/obama-talk-show-leno-letterman-nixon-clinton-arsenio-hall/2622767/

<comment><USER2> Obama is selling the lies with a smile and a nice surface to the American public. And Im so amazed it still seem to work. What is it with the president role that makes people believe what this person says?

<comment><USER3> I may be wrong but don't americans recite the names of all presidents every morning before class?

Or was that just some kind of pledge to the latest one?</comment></comment>


Show HN: PDF Otter – Fill in PDFs Online and API - <AUTHOR> https://www.pdfotter.com <comment><USER2> I work at a company that has a pretty comprehensive suite of PDF templates we fill out, so if you want some feedback from someone who would have been a perfect customer 3 years ago:

The biggest thing that costs us time is schema validation. We ended up building a tool that rejects uploads if the text fields don't match, or if you forget to include a radio option, etc. It also has "recommended" fields which issue warnings if they are not implemented.

Radio options, checkboxes, and images (for signatures) would be a welcome addition that I didn't see in the editor.

The documentation / online demo doesn't make it clear how I would go from fields -> API access (because how do I name the fields?).

[append]

An API endpoint to get the unfilled PDF template would also be good, especially if bundled with a client library that handled the call to pdftk. Some of our documents are HIPAA and I don't want to deal with having the client data leave our machines.

<comment><AUTHOR> This is great feedback. I really like your ideas on schema validation. We faced a similar problem at my last company and I have some thoughts to improve it with PDF Otter. Thank you!

</comment></comment><comment><AUTHOR> Hi HN. I built PDF Otter to solve a headache my last company faced. We needed to fill in PDF contracts repeatedly and there was no service out there that did that, so we had to build something in-house. We couldn't use [hello/docu]sign because sending users there lowered our conversion rates.

The PDF Otter API powers the PDF editor advertised on the homepage. The editor is simple but I think its better than similar services because you don't need to sign up/pay to fill-in and download your PDF. I think there's a lot of potential out there for apps built on the API. Feel free to reach out to me at mariusz [at] pdfotter [dot] com if you have any questions or ideas!

<comment><USER3> Any plans to allow inserting images (i.e. a signature)? Filling out PDFs is a huge pain for me and I'd love to replace it with this, but I need to insert handwritten signatures, not just text.

<comment><AUTHOR> Yes! I'll be adding a way to apply images to PDFs soon. Do you usually have an image of your signature handy on your computer or would you create one if the image feature was available? Another thought I had was maybe adding a "signature pad" where users can scribble their signature and I'd save it for them to use repeatedly. I'd love your thoughts on this.

<comment><USER3> I have an photo of a handwritten signature that I use in Adobe. They do a pretty good job of extracting the signature contours from the photo. I've also seen a (much crappier) version of this on my mobile banking app, for processing photos of checks. They basically just blow up the contrast until only the blackest part of the image remains. It looks awful, but it might be a good place to iterate from. If you implement something more sophisticated, it definitely makes sense to save it on the backend so you don't have to redo the (possibly expensive/slow) image processing operation every time.

A signature pad could work too; I think HelloSign has something like that. But it's not a great solution if you don't have a tablet, since it's _really_ hard to draw a proper signature with a mouse. Honestly, even just adding a "handwriting font" might be good enough for most circumstances. Most of the document signing services provide this, and it could be implemented very quickly with minimal changes to your API.

If I were you, I would probably start with a handwriting font, and add hand- drawn signature support afterward. I would also look into what the law says about this sort of thing. I know that services like HelloSign require that you authorize them to use your signature in a legally-binding manner. But I don't know if that regulation would apply to your service, since your service is a lot more bare-bones. For example, you don't store the PDFs indefinitely, and you don't coordinate any sort of multi-party signature operation; that all happens out-of-band. So you might be in the clear.

<comment><AUTHOR> Thanks for all this great info. We do have a font option called 'Dancing Script' available now which can make your text look like a signature. I'll do some more research on e-signatures, though. I assume there's more to it than just changing your text's font.

<comment><USER4> well, you should consider doing actual cryptographic signatures over the document, plus timestamping like via [https://opentimestamps.org/](https://opentimestamps.org/)

</comment></comment></comment></comment></comment></comment><comment><USER5> We (Quiki YC W17) are currently using Otter to make our entire contract/agreement process self service, and it's been great. I can answer any questions from a customer perspective.

</comment><comment><USER6> The forms extensions in PDF are a problem in FOSS software. I'm wondering if this tool does, or can export the downloaded (edited) PDF as PDF/A-2 (or PDF/A-3) conforming? Because a problem is having PDFs you've filled out that aren't archival documents; and further to that a nice option would be support for embedded digital signatures.

<comment><AUTHOR> Thanks for the ideas! The downloaded PDFs are not in a PDF/A format. I understand the need for a feature like this - I have used some government services that only allow submitted PDFs in archivable format. The commercial PDF->PDF/A libraries I came across are pretty pricey. Do you know of any open source alternatives?

<comment><USER6> I don't. If they don't exist or aren't really good (fast, well documented, good APIs, bindings available for various languages) then I think that's something that needs to be pitched to _hand waive_. Maybe the Free Software Foundation has ideas, or the Document Foundation, and then also various governments.

That so many governments use, and insist their citizens use PDFs, it's really not OK for us to have to depend on proprietary closed source software. I have zero problem with making a profit on great tools and infrastructure and services, but the foundation needs to be owned by the public.

</comment></comment></comment><comment><USER7> This is ridiculously cheap for the value this provides. 10x it!

<comment><USER8> Agreed. I'd start at 1,000 PDFs/month at $100 after a smaller free tier.

Actually, add a paid tier below that, 500 PDFs/m for $55.

</comment></comment><comment><USER9> I don't get it. What advantage does this service have over using a pdf library to insert additional text? Why do I need an external server for this text insertion task?

<comment><AUTHOR> You can use a library to insert text in a PDF but you need to figure out at what coordinates to position the text and how you want the text styled. If you are constantly adding PDF templates, this is cumbersome work. If you don't have a tool for figuring out the coordinates (like the editor on pdfotter.com), your developers will have to do this. The last company I worked at faced this exact problem and it took us hours to add PDF templates to the system.

<comment><USER10> You do have a strong competitor in this space. Adobe. Which is admittedly costly for the the pro version, but can't be ignored. Why use PDF otter over them?

<comment><AUTHOR> For filling in individual PDFs, yes, Adobe wins. However, I'm using the editor on my site to show off the PDF Otter API which helps you fill-in PDFs at scale. That's a tool that Adobe doesn't provide and how PDF Otter will earn money. I'm sorry that it's poorly advertised. I'm working on improving the homepage's copy and making it easier to transition from the demo to using the API.

</comment></comment></comment></comment><comment><USER11> This is something I expected smallpdf.com to have, since they have a great suite of pdf tools. I just checked and indeed they are running a beta on their Edit PDF feature now, which is similar to your editor. However the API aspect is a big plus on your side. The output from Smallpdf is more precise though.

</comment><comment><USER12> Raise the price and make the free tier run out at 500 total (not/month) PDFs. Send out emails asking for CC when users hit 250, 350, 400 etc. If they hit 500 + grace, cut service.

</comment><comment><USER13> It says it's secure.

No privacy policy. Nothing except "we delete your PDFs after 24 hours".

No security guarantee.

No performance bond.

(Do I expect that for free? No. But I expect the documentation to be there.)

</comment><comment><USER14> Love that you don't need a sign-in for the demo, had a co-worker ask me about a service to solve this exact problem last week.

<comment><AUTHOR> Thanks! That feature will never require sign-up. I think it's a good way to show off what the API can do.

<comment><USER14> Could also potentially monetize it by charging beyond X fills/mo using the browser version (tracked by IP so you group together offices).

Lots of small law offices, insurance agencies, etc. that I bet you could get using it.

Would also recommend lowering the free # of API usages to ~100 or something :)

</comment></comment></comment><comment><USER15> I've been after something like this for a while. It would be nice if you could position fields with x and y coords. So you can line things up easier.

Also being able to preview text settings as you create templates would be nice.

</comment><comment><USER16> Looks great, but where is your privacy notice? Contact information?

<comment><AUTHOR> Thanks! I'm working on drafting a privacy notice. You can contact us at email@example.com.

</comment></comment><comment><USER17> Tried it but the positioning was off by about 1 cm in the produced PDF.

You could add alignment tools for multiple fields - look at Inkscape for inspiration.

<comment><AUTHOR> Thanks for the suggestion on alignment. I've been hearing that feedback from other users and I'll add some tools for it.

I've tested the editor again because a 1cm offset is unacceptable. It looks like the field boxes (the transparent blue or orange rectangles you can drag and resize) appear in the correct spots on the PDF. If the text is too large to fit in the rectangle, we shrink it to fit. What might be going on is my backend is in disagreement with the frontend about what font size to use if we need to shrink the text. Then a larger than normal offset could appear on the right-hand side of the text. I'm working on fixing that. But rest assured that the field boxes are put in the correct place on the PDF.

</comment></comment><comment><USER18> Looks great! It would be _very_ helpful to be able to rename and delete templates, even if only on the web interface.

<comment><AUTHOR> Thanks Michael! I'll let you know when you can delete/rename templates (should be soon).

<comment><USER18> I see it live now. Awesome! Thanks :)

</comment></comment></comment><comment><USER19> This is fantastic, nice work. I can save myself from ever installing Acrobat again.

</comment><comment><USER20> Seems like a great service!

</comment><comment><USER6> What about an option to delete documents in less than 24 hours?

<comment><AUTHOR> Providing more flexibilty with deleting documents is on my roadmap but I can't get to it today. If there's a sensitive document you want deleted now, please reach out to me at mariusz [at] pdfotter [dot] com and I'll manually delete it.</comment></comment>


Show HN: Introducing igorox - <AUTHOR> https://igorox.com beta is live now. Igorox helps users to manage links in a better, efficient way. That includes bookmarks, portfolio, shareable collection; you name it! Users can store up to 10,000 links for free in up to 500 collections.<p>Any feature request or bug report is more than welcome! <comment><USER2> Add 'Show HN' to the beginning of the title and it will go to this page [https://news.ycombinator.com/show](https://news.ycombinator.com/show) That's where users present what they're working on and gather feedback (it also needs less upvotes).</comment>


A man who linked CO2 to climate change in 1895 - <AUTHOR> https://cloverly.com/blog/the-man-who-linked-co-to-climate-change/ <comment><USER2> Interesting quote from his Wikipedia page:

 _In 1884, based on this work, he submitted a 150-page dissertation on electrolytic conductivity to Uppsala for the doctorate. It did not impress the professors, among whom was Cleve, and he received a fourth-class degree, but upon his defense it was reclassified as third-class. Later, extensions of this very work would earn him the 1903 Nobel Prize in Chemistry.[5]

Arrhenius put forth 56 theses in his 1884 dissertation, most of which would still be accepted today unchanged or with minor modifications._

As someone who is just finishing their PhD, the above keeps me humble!

</comment><comment><USER3> The president of the US received a very convincing and thorough report about climate change on 1965.[1]

We've known for a very long time but humanity is not taking the issue seriously because we are idiots (collectively speaking). Just yesterday someone in congress asked Greta Thunberg "Why should we listen to science?" [2]

[1] [https://www.documentcloud.org/documents/3227654-PSAC-1965-Re...](https://www.documentcloud.org/documents/3227654-PSAC-1965-Restoring- the-Quality-of-Our-Environment.html)

[2] [https://twitter.com/Jumpsteady/status/1174407565876310016](https://twitter.com/Jumpsteady/status/1174407565876310016)

<comment><USER4> It's more complicated than that. I'd say the problem is not even scientific facts, but entirely political. The conclusions from my observations are:

1\. Many ordinary people around the world only cares about living a better life, they do not care, or even are hostile to the welfare of the people faraway. If a policy inevitably affects them personally, many would boycott all actual policies and refuse the take any responsibility, e.g. "they are taking away our X", X can be an incandescent lightbulb, a car, a job, or the national economy.

You can argue how an incandescent lightbulb have better overall environmental records in its entire lifecycle, it's a matter subjected to objective data and their interpretation, but it's not what I meant - People often react strongly without doing any evaluation. Last time, I saw a post about how eBay banned shipping vacuum tubes because they don't want to spend time distinguishing the restricted mercury rectifiers and unrestricted tubes, a bad decision for the buyers. The posters in the comment section literally replied something like, "the evil liberals are banning vacuum tubes! The 100% of the RoHS regulations is bullshit!"

If such things can trigger strong reactions among a group of people, imagine what would happen if one wants to implement a policy, for, e.g. refugee settlement, or climate.

The fact that the privileges elites are not affected and not accountable by a policy makes the issue worse. First it strengthens the People vs. Establishment image that can be exploited by propagandists, Second, not being affected personally encourages bad policies or bad executions.

2\. The political establishment has lost all credibility to many people. What is the reason for people to believe you when you have a government machine that has a long records of manipulating politics against foreign nations, conducting unethical human experiments, publishing media propaganda, ignoring the Constitute by setting up military base [0] in Guantanamo, establishing mass surveillance systems all over the world, and often acts in favor of private interests and other wrongdoings?

To many people, it means they would distrust the establishment entirely. If the governments spent millions of dollars on vaccination across the world, backed by WTO, to many people, why can't it be another huge conspiracy, e.g. mind control? Even if the establishment says "1 + 1 = 2", some people would see it as another huge conspiracy going on. Don't forget what I said before: You can argue rationally and even make good arguments, but people often react strongly without doing any evaluation.

And now the establishment is telling you that the global climate is in crisis and strong international efforts must be made globally. To many people, it instantly means an authoritarian or totalitarian "New World Order". It is backed by evidences from scientific findings, that are not intuitive, and not easily verified from personal experience, it would only make the people more suspicious. (Remember, in the 1920s, some high-profile physicists denied the existence of molecules, mainly because there was no "intuitive" way to see it yet. And ball lightning was not accepted until the 1970s. My point is that even the best people on evaluating evidence can reject something simply because it's not intuitive enough)

Also, "often acts in favor of private interests" is a bullet point. There are genuinely a lot of money to be made, a lot of interest to be gained, in the attempt of curbing climate change. It's entirely persuasive that a climate policy can be exploited in many malicious ways, and I'm sure at least one major corruption is not uncovered yet. Even if there isn't a huge conspiracy, smaller ones are bad enough, for example, the new-energy industry in China has a lot of bad actors, some of them only do it to get some subsidies, and others totally ignore the environmental regulations and creates highly toxic semiconductors waste, only to sell cheap solar panels.

Also, the hypocrisy of some elites - they are supposed to hold more responsibility over social issues, but some are actually the people who want to use the platform for personal benefits.

All of these don't do any good for PR. And not be mention that all of these can be weaponized by propagandists for different agendas, especially in the Internet age when information is readily available.

Finally, because of Observation No.1, "Many ordinary people do not care, or even are hostile to the welfare of the people faraway", even the "best" politicians selected by the people are likely to put the interest of one's nation above everything.

[0] Ironically, also because of Observation No.1, "Many ordinary people do not care, or even are hostile to the welfare of the people faraway", quite a few people think their government must be allowed to ignore the Constitution and continue the torture at Guantanamo.

3\. Most subjects of science are not intuitive. What is being written in popular science and most textbooks is merely a caricature of the subject, far from the full picture, but is considered "correct enough" to be a useful mental model (or physical model) for public consumption. For a simple example, an electric circuit is inherently an electromagnetic phenomenon, yet the fairy tale of "the flow of electron" is commonly used, it's an incomplete and flawed model even at DC. We use it because most people, myself included, are incapable of thinking the physical picture of vector calculus and solve PDE mentally, let alone Quantum Field Theory, not to mention the "truth" is only sometimes relevant and useful.

Thus, if someone wants to engage in denialism or create FUD, one could just write something that is largely relevant but out-of-context, and say "you are being fooled, everything you know is wrong"! I suspect many pseudoscientific subjects frequently use this technique (or fell into it).

The sensationalized scientific reporting by the media is another bad offender, when you exaggerate everything and publicized inaccurate or false facts (e.g. today's weather is hot because of global warming!), it can seriously backfire. Also, to be honest, some famous people on the subject of environment (not necessarily climate) have a tendency to be alarmists that exaggerate a potential risk due to psychological biases, want public awareness, or simply due to limited data or foresight.

All of it, only give more power to the denialism campaign.

The fact that many findings heavily require interpretation doesn't help as well. Historically, there have been some instances that an interest group downplaying the harmful effect of a certain substances, highly-respected institutions creating false and unrepeatable results for power or fame, etc. So, in the eye of a suspicious citizen, the entire body of search on climate science is a huge lie. For example, the Climate Gate scandal is largely about the internal power struggle of a dozen of researchers within a institution, but many people reinterpret it and see it as the "evidence" that the entire climate science is a huge lie.

* So, what is the end-game? I suspect...

1\. The result would be serious, a lot of people and places will suffer, but not as bad as the "the end of the world as we know it" painted by some sensationalized media in popular culture.

2\. Superpowers and their citizens refuse to take any responsibility. Just like how Gulf War is broadcasted on TV, as long as they are doing well, it doesn't matter.

3\. It's possible that the internal political corruptions do more harm than good and don't solve any real issues, but I hope not.

Currently, my belief is:

1\. A huge amount of funding should go to carbon extraction projects, maybe allow private fundings. It might be the projects that would face the least public resistance. But thinking again, maybe it's not a good idea, as some people may call it the evil climate control system by the globalists that actually manufactures climate changes and must be stopped (just like how AIDS/HIV deniers said the treatment itself is the cause). Its cost- effectiveness and energy efficiency is also doubtful. I'm not sure...

2\. Go nuclear. I'd love to see more AP1000 reactors. But thinking again, I'm not sure, maybe it's not a good idea. Although technically the system is sound, but the political resistance, strong pressure on safety, and mismanagement creates a lot of additional costs and safety risks. Not to mention the resistance of deep underground nuclear waste disposal repository is even higher, despite the fact that there are already thousands buckets of nuclear waste waiting for proper disposal, and without a repository, the risks for the environment is much more higher.

<comment><USER5> You nailed down the issues that surround the topic of climate change very well. I wish there were more people that would consider the points you mentioned.

About the proposed actions to take: I think we need to bet even more heavily on nuclear fusion. It seems to be the only thing that could make carbon extraction sting less.

<comment><USER4> > nuclear fusion.

Fully agree.

But the meme of nuclear fusion has been around for nearly 50 years, yet nowhere close for practical utilization due to a lot of unseen technical problems.

I can only hope that we'll be a bit more lucky this time. And that the projects won't be ruined due to political struggles.

<comment><USER6> While I would totally love to see nuclear fusion be an option, I am afraid the timeline simply does not fit the challenge. Realistically, we won't be able to have nuclear fusion production-ready under less than 20 years, and most probably ~40 years.

If we do nothing in the next 20 years, it's not 2 degrees we are looking at, but 4+ degrees. The difference will be millions vs billions of deaths.

</comment></comment></comment></comment></comment><comment><USER7> Arrhenius' descendant, Greta Thunberg, is leading a worldwide effort to keep global warming under 1.5 degrees. She has been nominated for the Nobel Peace Prize as well. Maybe there will be 2 Nobels in the family.

<comment><USER8> The Nobel Peace prize is a joke. Obama won it despite green-lighting the Afghanistan surge.

<comment><USER9> He won it BEFORE green lighting the Afghanistan surge.

<comment><USER8> Good point - the committee must be horrible at judging people. Obama had essentially no foreign policy accomplishments at the time that they awarded him, suggesting they gave it out simply as tacit disapproval of Bush.

</comment></comment></comment></comment><comment><USER10> After having tried to understand what made climate change skeptics skeptical, i've stumbled upon this graph (This is just one link, but i've seen it in a lot of places) :

[https://faculty.ucr.edu/~legneref/bronze/climate.htm](https://faculty.ucr.edu/~legneref/bronze/climate.htm) Which gives a very weird feeling about the scale of recent temperature change.

Since the planet have known huge temperature variations in the previous thousands of years ( long before humans emitted co2), and those kind of changes seem to be extremely cyclical, i must say i'm starting to wonder about the current general panic and human activity blaming.

Could anyone here more knowledgeable explain what's the counter-argument to this « it's cyclical and huge, and human have very little thing to do with it » skeptical argument ?

<comment><USER11> In terms of graphs, I think this one gives a good overview of how ridiculously precipitated everything is:

[https://xkcd.com/1732/](https://xkcd.com/1732/)

<comment><USER10> I know this graph as well, but i've always been suscipicious of the "hockey stick with multiple lines" in the end. Seems like it has been heavily critized as well :

[https://wattsupwiththat.com/2016/09/20/josh-takes-on- xkcds-c...](https://wattsupwiththat.com/2016/09/20/josh-takes-on-xkcds- climate-timeline/)

I'm pretty sure climate change is an extremely complex subject, but i must say the "simple" data tells a story that's so different from what seems to say the majority of professionals working in the field that it makes me a bit nervous.

<comment><USER11> Sorry, I'm tuning off. A quick browse of that site raises a ridiculous amount of "propaganda" red flags.

IME when it comes to climate change, where there's smoke, there's fire. It's tempting to let yourself go and get wrapped by a nice "it'll all work out because they're either wrong or lying" narrative. I certainly wish everyone on earth who says climate change is happening was either wrong or lying.

But the truth is hard and sucks hard. I remember even five years ago seeing an image of a French meteorologist doing the weather forecast for August 2050. high 30s / low 40s everywhere. I remember this vividly, the prospect shocked me.

Here's the image I'm talking about, alongside the _real_ french weather forecast for the last week of July 2019: [https://i.redd.it/c37bdoqu4nd31.jpg](https://i.redd.it/c37bdoqu4nd31.jpg)

Let it sink in that things are progressing off-the-charts rapidly.

</comment></comment></comment></comment><comment><USER12> _The Wizard and the Prophet_ , which I highly recommend, had a good section on the history of our worries about global warming. As per the article we've understood that increasing atmospheric CO2 would cause global warming for a very long time. What people thought for many decades, though, was that the CO2 we produced would mostly be absorbed by the oceans keeping the atmospheric concentration from getting too high. Figuring out that no, secondary effects would cause the oceans to re-emit that CO2 back into the atmosphere took many decades, into the 1960s I believe.

</comment><comment><USER13> Perchance inspired by [https://news.ycombinator.com/item?id=21015826](https://news.ycombinator.com/item?id=21015826) ? ;)

(Mostly linking it because it also contains a few other interesting dates around climate change. Basically, the oil knew in the 1970's that global warming would be a problem, and we've suspected it to be an issue since Arrhenius at least)

</comment><comment><USER14> Indeed, I was recently intrigued to learn for how long the connection between anthropogenic CO2 and global warming has been suggested. Someone recently post this short "note" in a newspaper from 1912: [https://i.redd.it/iay5mutszgg31.jpg](https://i.redd.it/iay5mutszgg31.jpg)

</comment><comment><USER15> In the excellent book _The Science of Life_ by HG Wells, GP Wells, and Julian Huxley (published in the 1930s) the authors mention that burning carbon would eventually warm the atmosphere. Interestingly, their solution to counteract this was to add mass around the equator. I don't remember if they said why this might work, though.

</comment><comment><USER16> I think one thing that everyone should know with respect to climate change is how simple it is to prove that increases in co2 cause increases in temperature. You can literally put some co2 and a thermometer in a bottle and watch the temperature climb. It's not some mysterious effect.

<comment><USER17> Sounds simple but it would be hard to get an accurate test. I mean, it's not a basic kitchen experiment, is it? And why is it that modifying such a small part of the atmosphere (0.04%) can cause such a huge problem?

<comment><USER18> It doesn't. The atmosphere is not a closed system as upper limit varies. The global temperature _strongly_ correlates to the sun's activity and our distance from it, and nearly not at all to anything else, other than cataclysmic events such as huge volcanoes, asteroid strikes, etc.

<comment><USER19> Not true. Very short term effects correlate to solar exposure, where CO2 effects have a built-in long-term filtering that stretches out the response time, averaging out shorter fluctuations.

Temperature is increasing not because of increased insolation, but because of increased retention.</comment></comment></comment></comment>


Apple Services a 'Joke' in India, Say Users as Company Loses More Market Share - <AUTHOR> https://www.macrumors.com/2018/01/30/indian-iphone-users-apple-maps/ <comment><USER2> None of Apple's software is best in class - regardless of the segment. Which isn't necessarily bad, so long as it's at least good enough. Increasingly it's not even good enough. Siri? I agree. It's not a joke - it's a toy. I've pretty much stopped using it because it's more an exercise of frustration than utility.

We could continue on with the iWork/iLife software suites which you quickly learn are typically best for casual use. What's sad is Apple has truly excellent hardware, it's too bad they don't have the software to match. That tells me their viewing themselves as a hardware company is deeply ingrained in their corporate culture and in their corporate DNA. Software is apparently a secondary concern.</comment>