JVM JIT optimization techniques - <AUTHOR> https://advancedweb.hu/2016/05/27/jvm_jit_optimization_techniques/ <comment><USER2> It's interesting how most of the optimizations are only really available if you essentially write your programs in a functional style. That is, they all depend on the compiler being able to analyse the local scope to decide whether the state changes are confined enough that it can perform an optimization without changing behavior. If a reference escapes, even into a private, instance variable, the compiler will (admittedly, only based on the shallow analysis in this article), more or less give up, because it can't predict any more how that variable might be mutated from another scope.

<comment><USER3> Escape analysis is pretty damn capable if you can give it enough time to run.

<comment><USER4> The analysis is fine, but "escape analysis" is often conflated with stack allocation, and at this hotspot is actually really terrible. The constraints on allocating to the stack mean it happens very infrequently, even if the literal _escape_ analysis would permit it otherwise.

<comment><USER5> Calling it 'stack allocation' is confusing - object fields are replaced with scalars in the IR. The whole object is not allocated as it would have been on the heap but on the stack in the alloca sense.

But I don't think the constraints are that bad are they? Can you give examples? Modern compilers like Graal can even scalar replace objects if they will escape in the future.

<comment><USER6> Given that the HotSpot compilers are not Graal and HotSpot's scalar replacement optimisation is notoriously fragile, I think the original statement was fair. Once Java 9 rolls around and Graal is just a plugin instead of a whole separate VM build, it'll be less fair, and if Graal ever becomes the default compiler that replaces C2 then it'll be even more fair, but I guess that is years away at best.

The biggest constraint by far is the reliance on inlining. Inter-procedural escape analysis could potentially remove the need for value types in many places, but it doesn't seem like the JVM engineers believe that's feasible.

<comment><USER3> Hot spot is based on a relatively old paper at this point from what I remember and there are alternatives which purportedly perform better.

<comment><USER6> Can you name one?

<comment><USER5> Partial escape analysis is one [http://www.ssw.uni- linz.ac.at/Research/Papers/Stadler14/Stad...](http://www.ssw.uni- linz.ac.at/Research/Papers/Stadler14/Stadler2014-CGO-PEA.pdf)

<comment><USER6> Ah, I meant "alternatives to HotSpot" which is what the parent was implying.

I've read the Graal papers and part of the source code. So I am familiar with PEA. It's too bad that optimisation didn't make it into C2 yet. I wonder if it ever will.

<comment><USER5> Someone told me that Zing also does PEA, but I don't know that to be a fact.

<comment><USER5> Oh and I think JRockit might have done it as well.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER7> There is something about this site that absolutely destroys Firefox when scrolling. Expensive work in a scroll handler isn't good guys :(

<comment><USER8> I would not be too quick to blame the authors of the website. It seems likely to be the same Firefox bug as all the other cases of HN comments complaining about bad scrolling performance in Firefox: [https://bugzilla.mozilla.org/show_bug.cgi?id=1250947](https://bugzilla.mozilla.org/show_bug.cgi?id=1250947)

<comment><USER9> Bad link, I'm afraid... It's about a box-shadow glitch.

<comment><USER8> It's the correct link (if you read the last 15 or so comments, it'll be more obvious that there is a performance component to the issue).

<comment><USER10> It seems you're correct. Specifically, disabling this rule from the inspector instantly fixes the performance issue.

      .widewrapper.main {
        box-shadow: inset 1px 3px 1px -2px #ababab;
      }

</comment></comment></comment></comment></comment><comment><USER11> _for most of the time, many performance considerations are invisible from the higher abstraction levels, so you can concentrate writing simple, elegant and maintainable applications in Java, Scala, Kotlin or anything that runs on the JVM._

Funny statement, at least for Java. I don't know anyone who would say the majority of Java applications _aren 't_ huge, slow, memory-hogging beasts compared to equivalent native ones, and whose codebases are just as unoptimised for the perspective of the humans who have to work with them. That's mainly perception from when I briefly worked with Enterprise Java many years ago --- no one wrote "simple" or "elegant" Java applications, and stuffing as many design patterns and abstractions in as you could was considered "best practice".

There are certainly examples of simple and small Java applications (see [https://en.wikipedia.org/wiki/Java_4K_Game_Programming_Conte...](https://en.wikipedia.org/wiki/Java_4K_Game_Programming_Contest) ), and I've written a few, but the overwhelming culture seems to be that of anti-optimisation and bureaucratic excess. In some sense, it's almost like working _against_ or "challenging" the JVM's optimiser is the norm.

In my experience, a "simple, elegant" design --- which does _not_ necessarily mean "highly abstract" \--- tends to be very close to optimal anyway, with the compiler's optimiser doing the remaining work. That makes me wonder whether claiming a language/runtime/compiler has powerful optimisation abilities is actually a reflection of how much the typical source code in the language has to be "cleaned up" by the optimiser in order to be decently efficient.

Also, does anyone else notice the "Machine code" given for the JIT example is _completely unrelated_ to either the Java or bytecode? It's 16-bit realmode --- I recognise the access to the 40h segment, it seems to be timing-related, and a bit of Googling finds that it's actually part of an old TSR clock utility (with unknown source):

[http://assembly.happycodings.com/code24.html](http://assembly.happycodings.com/code24.html)

<comment><USER12> > I don't know anyone who would say the majority of Java applications aren't > huge, slow, memory-hogging beasts compared to equivalent native ones, and > whose codebases are just as unoptimised for the perspective of the humans > who have to work with them.

I would, and I've been developing in Java for over ten years now, after ten years of C/C++.

I think that your complaints have nothing to do with Java, and much to do with a coding style that became popular in the '90s. You could see the very same in C++ applications back then, but then Java took over. The big enterprise applications of the '90s and '00s reflect the prevailing mindset of the time. Java applications written today don't look like that.

> In my experience, a "simple, elegant" design --- which does not necessarily > mean "highly abstract" \--- tends to be very close to optimal anyway, with > the compiler's optimiser doing the remaining work. That makes me wonder > whether claiming a language/runtime/compiler has powerful optimisation > abilities is actually a reflection of how much the typical source code in > the language has to be "cleaned up" by the optimiser in order to be decently > efficient.

In that case I think your experience may be limited, or that you're unaware how big "the remaining work" may actually be, especially on modern hardware. HotSpot has proven extremely adept at running many different code styles very efficiently. HotSpot's next-gen compiler, Graal[1], is IMO the biggest breakthrough in compilation technology of the past decade. It runs Java faster than C2 (HotSpot's current compiler), Python faster than PyPy, and JS as fast as any other VM out there. It even has a C frontend, which, while not yet matching gcc, performs surprisingly well considering how little effort has been put into it.

This kind of work can be very important, namely, the ability to optimize code across different languages. A recent paper[2] found that re-writing parts of SQLite in Python (!), instead of the original C, can result in a 3x (!) performance boost when running in an application, as application and DBMS code can be optimized as one unit.

[1]: [https://wiki.openjdk.java.net/display/Graal/Publications+and...](https://wiki.openjdk.java.net/display/Graal/Publications+and+Presentations)

[2]: [http://arxiv.org/abs/1512.03207](http://arxiv.org/abs/1512.03207)

<comment><USER13> Well if Graal is faster why is it not made part JDK distribution.

<comment><USER12> As of JDK 9, Graal will be a pluggable JIT that you can opt to use (it's just a Java library). It is not the default JIT because it is still experimental and not productized yet.

</comment></comment></comment></comment><comment><USER14> Maybe a noob observation, but can anyone explain why the Lock Coarsening example is valid? Seems to me that locks on A with a lock on B in between is not equivalent to 2 locks on A and then one on B... Unless the programmer made a cognitive error the cases seem incomparable, unlike the other examples.

<comment><USER15> "Seems to me that locks on A with a lock on B in between is not equivalent to 2 locks on A and then one on B"

You're looking at:

        public void canNotBeMerged()

The locks can't be merged.

<comment><USER14> Yeah, but the semantics there refer to merged by an optimization? What's the point of having incomparable examples?

<comment><USER3> Just to demonstrate an example of invalid code?</comment></comment></comment></comment>


Hawaii official who sent false missile alert has been fired - <AUTHOR> https://www.theguardian.com/us-news/2018/jan/30/hawaii-missile-alert-error-false-alarm <comment><USER2> They got rid of the one employee least likely to make a mistake again.

It was hardly their fault either. "This is not a drill" was part of the phone message they received. Why the hell would you say that when it is a drill?

The whole thing was a fiasco from the top to the bottom and shows they haven't even remotely approached operations from the very simple premise of "Humans make mistakes". They didn't even have a runbook for handling the scenario of a message being accidentally sent out.

<comment><USER3> While I agree with you in principle, there's more to it than that.

There was another report that claimed that the employee suddenly refused to cooperate with any investigation to figure out what happened. It's likely their lawyers told them to stop talking, and that we don't know the full story here.

<comment><USER4> My take on "there's more to it" is that the employee had allegedly already caused two false alarms through his own actions.

The fact that he made a written statement then refused any other cooperation suggests to me that, rather than shirking his duty by this act, perhaps he knows better than to dig himself a hole by trying to be "helpful".

</comment></comment></comment><comment><USER5> They should blame the [1] software and issue a redesign

[1] [https://hackernoon.com/redesigning-hawaiis-emergy-alert- inte...](https://hackernoon.com/redesigning-hawaiis-emergy-alert-interface-in- the-open-91c6318a7045)

<comment><USER6> It has since came out that the alert was not sent in error due to bad design (in addition, that image has since been turned out to not be real), but the alert was sent on purpose due to the operator believing that an attack was imminent (due to a confusing drill message).

[https://www.washingtonpost.com/news/the- switch/wp/2018/01/30...](https://www.washingtonpost.com/news/the- switch/wp/2018/01/30/heres-what-went-wrong-with-that-hawaii-missile-alert-the- fcc-says/)

</comment></comment><comment><USER7> >Then a Facebook and Twitter message was put up on the emergency management agency's accounts. It was not until 8.24am that the corrective message was retweeted by the Hawaii governor, David Ige.

>The FCC report notes drily: "The governor has stated that he was unable to do this earlier because he did not know his Twitter password."

Moral of the story: Memorize your Twitter passwords if you're going to take office. Or just use something easy, like '1234' or 'password'.

<comment><USER8> Having an simple / easy-to-remember password on your Twitter account is a bad idea if you're a state governor. Or really, anyone.

The right answer here is, use a complex password (that you likely won't remember), and/or 2FA, and use a password safe that's available on your mobile device.

<comment><USER7> My suggestion of a '1234' password wasn't serious. Although they should at least memorize their passwords and not offload that onto assistants or whatever, although what you suggested is better.

</comment></comment></comment><comment><USER9> Previous discussions

[https://hn.algolia.com/?query=hawaii&sort=byDate&prefix&page...](https://hn.algolia.com/?query=hawaii&sort=byDate&prefix&page=0&dateRange=custom&type=story&dateStart=1517270400&dateEnd=1517356800)

</comment><comment><USER10> Little that they know that Hawaii itself is ours early warning system.

</comment><comment><AUTHOR> So the "bad UI" thing was fake news, it seems.

<comment><USER11> I really hate the term "fake news". It implies that someone created the whole story on purpose to deceive people. I think the "bad UI" thing was just someone trying to figure out what really happened and noticed that the webpage for the alerts was atrocious. They incorrectly thought that this could have been the reason for the mistake. By no means was it fake, rather it was simply a mistake. There's nothing malicious about that.

<comment><USER12> >I really hate the term "fake news". It implies that someone created the whole story on purpose to deceive people

No it just means someone published the story without proper fact checking.

<comment><USER13> Back in 2016 it meant fabricated news, usually about politics. Donald Trump started abusing the term not long after it was revealed that the fabricated news at the time was mostly successful in targeting his followers, presumably to dilute the term.

See [https://m.youtube.com/watch?v=XoLHF3Z9eMg](https://m.youtube.com/watch?v=XoLHF3Z9eMg) or Google "Jestin Coler"

<comment><USER12> I stand corrected.

</comment></comment></comment></comment></comment><comment><USER14> I can't help but feel betrayed clicking the link "guy ... has been fired" and then immediately reading "guy has resigned". That's not exactly the same thing.

<comment><USER15> Not the same person.

> The head of Hawaii's emergency management agency has resigned and a state > employee who sent out an false alarm of an imminent missile attack has been > fired

<comment><USER14> Okay, sorry for the noise, then. I'll try to write my comments after I read the article next time.</comment></comment></comment>


Europa: Browser-Based AudioWorklet Synth - <AUTHOR> https://www.propellerheads.se/europa <comment><USER2> Ah, Reason. Has such fun with that back in 2004 and interesting to see its still going now.

</comment><comment><USER3> Got Reason last year and love it! Europa is awesome. Why do I need it on the web on desktop?..

<comment><USER4> Well, one reason is that, unlike in Reason, you don't need a magnifying glass to use it on a higher-res display. Honestly. We are at Reason 10 and there is still no interface scaling or retina support.

A better question is: Why can't I have it in a VST? ReWire is a PITA.

<comment><USER5> Unless I'm missing something they are selling Europa as a VST/AU and I guess the web version is more of an interactive demo

<comment><USER4> Woah! I totally missed that. This is a first. And it's free for Reason 10 owners. The product key was already in my account when I logged in. And is has a scalable UI.

I wonder if this is a foretaste of things to come? Maybe Thor next? Please?

</comment></comment></comment></comment><comment><USER6> Excellent... but shame the latency absolutely sucks :( I guess that's some limitation of webAudio or something? no way you can play this live.

<comment><USER7> You need Chrome 66 or later, or launch Chrome 64+ with command line option --enable-blink-features=AudioWorklet otherwise you're probably getting a polyfill.

<comment><USER6> Tried that now... still lots of latency, if I pick sound with short attack so it should be punchy... then tap the keyboard fast, the sound is generated on the up after my finger has pressed the key. So it's pretty disorientating to actually perform on unless you are only interested in soft pads :P

To be fair this might just be linux on this machine, it's an old mac and I had only run software synths on it in OS X before (which were playable, but I know xnu has been tweaked with low latency audio in mind), maybe I need one of those special linux kernels to get low latency on this old thing.

</comment></comment></comment><comment><USER8> Loved Reason and my old maudio controller. Blew me away how solid their software ran on my underpowered computer.

<comment><USER9> Sadly those days are long gone. The current version of Reason is the least efficient DAW I have by a long margin, at least on my MacBook.

<comment><USER10> As a long-time Logic user who frankly has just never bothered to try anything else, is there anything I'm missing by not trying Reason?

<comment><USER9> There's a lot to like about Reason. The built-in instruments really hit a sweet spot between flexibility and ease of use. And the semi-modular design makes it easy to do things that are hard or downright impossible in more conventional DAWs. And there are some great rack extensions like Nostromo that don't really have any direct counterparts in the VST world.

I also like the way that the blocks method of arranging a song works.

Reason also has some serious shortcomings though like a very basic piano roll and, at least lately, very bad performance. I'm not sure what happened there because it used to be the most efficient DAW on my system by far but now it uses 2-3x the CPU that Logic or Live do, at least on my machine.</comment></comment></comment></comment>


Stack Overflow lets Facebook track users across their sites - <AUTHOR> https://meta.stackoverflow.com/questions/384864/stack-overflow-lets-facebook-track-us-across-their-sites?cb=1 <comment><USER2> I have a Facebook account, this creates limitations when it comes to blocking (e.g. I cannot use a DNS block/piHole).

What I found works for me is to use Multi-Account Containers with Facebook being forced-open in a specific container (that's only for Facebook) and then using Firefox's built in Content Blocking to block trackers in other containers (Content Blocking -> Custom -> In All Windows).

This allows you to use Facebook but makes it significantly harder for them to track you across other sites (via shadow accounts or your actual profile).

For example this works for Stackoverflow where I see:

> The resource at > "[https://graph.facebook.com/[xxxx]/picture?type=large"](https://graph.facebook.com/\[xxxx\]/picture?type=large") > was blocked because content blocking is enabled.

On mobile I simply don't install Facebook's apps and use the mobile web browser and still receive notifications via that.

<comment><USER3> > On mobile I simply don't install Facebook's apps and use the mobile web > browser and still receive notifications via that.

And you're also tracked across (basically) all websites, because they all have this "helpful" Like button embedded.

<comment><USER4> On Android, on Firefox you can add NoScript, PrivacyBadger, AdblockPlus (plenty of lists here [1]), and if you go all the way and root it, you can replace the hosts file [2]. I personally use zero FB products, and use NoRoot Firewall with global rule to block 31.13.x.x and a couple of other FB IP ranges. That also means that I exclude myself from WhatsApp and Instagram.

[1]: [https://filterlists.com/](https://filterlists.com/)

[2]: [https://someonewhocares.org/hosts/](https://someonewhocares.org/hosts/)

<comment><USER5> Why use AdBlock Plus (an advertising industry product) instead of uBlock Origin? It's compatible but massively more efficient.

</comment></comment></comment></comment><comment><USER6> I like self hosted avatars. From the title I thought SO purposefully lets Facebook track us, perhaps through a like button, but instead the complaint is that they don't have a domain blacklist on user avatars, which sounds silly to me.

I care about privacy but there are bigger fish to fry. This is not structural and hosting your own stuff (like your avatar) is a part of the old Internet I miss.

<comment><USER7> Is there a significant bandwidth advantage by allowing users to host their avatar image on 3rd party site rather than self-hosting it? I too am a believer in self-hosted content, but I don't have any site that gets any kind of traffic to worry about costs so I have no insight on if avatars add up to make this a thing.

</comment></comment><comment><USER8> Seems like it would be a good idea to add crossorigin="anonymous" referrerpolicy="origin" attributes to user-provided images. This would prevent any 3rd party tracking or referrer leaking.

<comment><USER9> One might reasonably argue that this should be the default.

<comment><USER10> The most popular browser is made by an ad targeting company.

It would be foolish of them to enable this by default.

</comment></comment></comment><comment><USER11> Install Privacy Badger.

"Privacy Badger automatically learns to block invisible trackers." [https://www.eff.org/privacybadger](https://www.eff.org/privacybadger)

</comment><comment><USER12> Stack Overflow does not honor Do Not Track [0] and in response to a question [1] indicated that they don't intend to do that either.

Tracking (including third-party tracking) seems like a feature.

[0] [https://en.wikipedia.org/wiki/Do_Not_Track](https://en.wikipedia.org/wiki/Do_Not_Track)

[1] [https://meta.stackexchange.com/questions/237062/does- stack-e...](https://meta.stackexchange.com/questions/237062/does-stack- exchange-have-an-official-policy-on-honoring-do-not-track-browser-s)

<comment><USER13> Safari has even removed Do Not Track because it can be used for fingerprinting.

[https://developer.apple.com/documentation/safari_release_not...](https://developer.apple.com/documentation/safari_release_notes/safari_12_1_release_notes#3130299)

</comment></comment><comment><USER14> Won't the privacy filterlists in uBlock Origin fix this?

<comment><USER15> You might like umatrix (same guy afaik). Change settings to load only first- party sites then unblock other sites as necessary.

<comment><USER16> Yeah I love umatrix. Sometimes it's awful and it takes an extra few minutes to figure out the magic combination of things to allow. Sometimes it breaks a page altogether and I use an un-Matrix'd Chrome as a last resort (which I wipe after use). But I think it's worth the hassle.

</comment></comment></comment><comment><USER17> I believe that one day boycott will help them reconsider these practices.

<comment><USER18> "One day boycott" reads as if the boycott lasts one day and that's it, you are back to normal, using the site, getting tracked. So I don't think I would be too scared if I were a business.

<comment><USER17> Yes, it does not work if it is not coordinated but if significant number of users stops the service at the same time then it will leave sizable tent in the revenue.

<comment><USER19> > sizable tent in the revenue.

I'm sorry. [http://imageenvision.com/450/24542-clip-art-graphic-of-a- fla...](http://imageenvision.com/450/24542-clip-art-graphic-of-a-flat-green- dollar-bill-cartoon-character-camping-with-a-tent-and-fire-by-toons4biz.jpg)

</comment></comment></comment></comment><comment><USER20> Of course, most all Web sites add in third-party tracking through HTTP requests, in one way or another. Offhand, HN is the only site that comes to mind as not doing that. (I've been working on anti-tracking for a long time, and my current hand-edited ruleset has over 10k rules, which I usually have to look at multiple times each day.)

</comment><comment><USER21> Firefox's containers really should be a standard browser feature at this point.

</comment><comment><USER22> That may be the "Microsoft buys GitHub" moment of StackOveflow: people realizing the power we gave to this private company and migrating to non- profit-managed website instead (like [https://framagit.org](https://framagit.org))

But I do not see a good alternative to StackOverflow available now.

</comment><comment><USER23> I noticed this last week in my umatrix blocked domains. Its pretty terrible. Hopefully this gets reverted and doesn't signify the downfall of stack exchange because its a super important resource on the internet.

</comment><comment><USER24> What options does a Safari user have to prepare for war on the web?

<comment><USER25> While Safari lacks in certain features, it's a reasonably mainstream browser which is a very good thing against browser fingerprinting. I use Safari combined with AdGuard to block cancer. It's not perfect but I think it's better than let's say Firefox (you'd get more "blocking" power thanks to better extensions like uBlock Origin, but you get fingerprinted very easily by trackers that slip through the blocking).

</comment></comment><comment><USER26> Collection of tools to protect privacy online.

[https://www.privacytools.io](https://www.privacytools.io)

</comment><comment><USER27> Just start saying really inappropriate things into the microphones that are not there... LOL</comment>


Ask HN: Simple Project Scheduling Software? - <AUTHOR>

I'm currently doing a 6-month project for a client.
We want to simply create a schedule where I put each component of the project, how long it will take estimated, including hopefully some sort of beta testing/fixing time.
Then I give the software a start date and it will spit out a schedule.
Then when things change/go wrong/go right in the future, I should be able to change a date or a duration, and it will re-calculate my dates.
Does anyone know of this sort of software? <comment><USER2> Microsoft Excel can do this (or Google docs if you prefer) assuming you setup the formulas to do the calculation. Pretty simple IMO. Some people prefer a more formal project system like Microsoft Project. A web app that is popular is Basecamp by 37signals.

If you have an existing app, you can try this: <http://www.projectcodemeter.com/cost_estimation/kop1.html></comment>


Hello HTTP/2, Goodbye SPDY - <AUTHOR> http://blog.chromium.org/2015/02/hello-http2-goodbye-spdy-http-is_9.html <comment><USER2> I got a copy of Paul-Henning Kamp's critique "HTTP/2.0 - The IETF is Phoning It In" off the ACM website before the link went dead. Here's a bit of what he said about it:

"Some will expect a major update to the world's most popular protocol to be a technical masterpiece and textbook example for future students of protocol design. Some will expect that a protocol designed during the Snowden revelations will improve their privacy. Others will more cynically suspect the opposite. There may be a general assumption of "faster." Many will probably also assume it is "greener." And some of us are jaded enough to see the "2.0" and mutter "Uh-oh, Second Systems Syndrome."

The cheat sheet answers are: no, no, probably not, maybe, no and yes.

If that sounds underwhelming, it's because it is.

HTTP/2.0 is not a technical masterpiece. It has layering violations, inconsistencies, needless complexity, bad compromises, misses a lot of ripe opportunities, etc. I would flunk students in my (hypothetical) protocol design class if they submitted it. HTTP/2.0 also does not improve your privacy. Wrapping HTTP/2.0 in SSL/TLS may or may not improve your privacy, as would wrapping HTTP/1.1 or any other protocol in SSL/TLS. But HTTP/2.0 itself does nothing to improve your privacy. This is almost triply ironic, because the major drags on HTTP are the cookies, which are such a major privacy problem, that the EU has legislated a notice requirement for them. HTTP/2.0 could have done away with cookies, replacing them instead with a client controlled session identifier. That would put users squarely in charge of when they want to be tracked and when they don't want to—a major improvement in privacy. It would also save bandwidth and packets. But the proposed protocol does not do this.

[He goes on to tear a strip off the IETF and the politics behind HTTP/2.0 ...]

<comment><USER3> Whatever PHK wants it to be, HTTP/2 is a great step forward from where we are today. Check this out: [https://http2.golang.org/gophertiles](https://http2.golang.org/gophertiles)

This is going to make the web so much faster, particular on mobile devices.

<comment><USER4> > Whatever PHK wants it to be, HTTP/2 is a great step forward from where we > are today.

A hugely bloated, binary protocol is better than the simple, text-based on we have today? I greatly disagree. HTTP/1.1 could use an update, but HTTP/2 was not the answer.

<comment><USER5> I wonder if anyone complaining about binary formats has ever written a high performance parser.

Particularly, HTTP's text format, is a mess. You can continue headers from one line to another. You can _embed comments into header values_. Seriously. Comments. In a protocol's messages. It's moronic and indefensible. Why anyone would prefer that is probably them thinking that text equals easy to implement or something like that.

<comment><USER4> I never said HTTP/1.1 is perfect. There are many possible optimizations and fixes possible, of which you've alluded to one.

</comment></comment></comment></comment></comment><comment><USER6> Looking forward to when HAProxy support for HTTP/2 lands since they refused to implement SPDY support.

Here's a list of common servers support for SPDY/HTTP2: [https://istlsfastyet.com/#server- performance](https://istlsfastyet.com/#server-performance)

<comment><USER7> Current HAProxy already supports the handshake of SPDY/HTTP2 via NPN and ALPN. You have to route to proper backends. You also need to provide a HTTP/1.1 fallback implementation for incapable clients. Once setup that works very well. I am using it for our blog ([https://blog.cloudno.de](https://blog.cloudno.de))

<comment><USER8> What about SSL Termination? Would it still work if I terminate?

<comment><USER7> In the described setup, HAProxy is doing SSL termination. See the gist for the cert and crypto parameters. This is getting a A+ from ssllabs.

<comment><USER8> Thank you!

</comment></comment></comment></comment></comment><comment><USER9> HTTP/2 might have version 2 syndrome.

Another better way would have been keep SPDY, as there is usefulness there, separate and then on HTTP/2, to incrementally get there, and use an iteration of something like AS2/EDIINT ([https://tools.ietf.org/html/rfc4130](https://tools.ietf.org/html/rfc4130)) which does encryption, compression and digital signatures on top of existing HTTP (HTTPS is usable as current but not required as it uses best compression/encryption currently available that the server supports). This standard still adheres to everything HTTP and hypertext transfer based and does not become a binary file format but relies on baked in MIME.

An iteration of that would have been better for interoperability, secure and fast. I have implemented it directly previously from RFC for an EDI product and it is used for sending all financial EDI/documents for all of the largest companies in the world Wal-mart, Target, DoD as well as most small and medium businesses with inventory. There are even existing interoperability testing centers setup for testing out and certifying products that do this so that the standard works for all vendors and customers. An iteration of this would have fit in as easily and been more flexible on the secure, compression and encryption side, and all over HTTP if you want as it encrypts the body.

<comment><USER10> I've used AS2 extensively (in EDI) and to be frank, fuck that. AS2 is a really bad version of HTTPS, you take HTTPS, you remove the auto-negotiation (email the certificates!), you disable certification CA checking (self-signed for all the things), and then you allow optional HTTPS on top of AS2 (which is a huge nightmare in its own right).

Imagine this scenario, two people want to interconnect, here's the process:

\- They insecurely email their public key (self-signed) and URL (no MitM protection)

\- You insecurely email your public key (self-signed) and URL

\- They have a HTTPS URL

\- Now the thing to understand about AS2 is that when you connect to THEM you give them a return URL to confirm receipt (MDN) of the transaction.

\- HTTPS becomes a giant clusterfuck in AS2 because people try to use standard popular HTTPS libraries (e.g. that do CA checking, domain checking, and other checks which are fine for typical web-browser-style traffic, but not for specialised AS2 traffic) but in the context of AS2 where certificates are often local self-signed (some even use this for HTTPS), and the URL is rarely correct for the certificate, they fall over all of the time.

\- Worse still some sites want to use either HTTP or HTTPS only, so when you connect to a HTTPS URL but give them a HTTP MDN URL sometimes they will work, sometimes they will try the HTTPS version of the URL then fall over and die, and other times they will error just because of the inconsistency.

Honestly I used AS2 for over five years, looking back, it would have saved everyone hundreds of man-hours to have just used HTTPS in the standard way and implement certificate pinning (e.g. "e-mail me the serial number," or heck just list it in your documentation).

The only major advantage of AS2 is the MDNs. However even there there exists massive inconsistency, some return bad MDNs for bad data, while others only return bad MDNs for bad transmission of data (i.e. they only check that what you send is what is received 1:1, so you could send them a series of 0s and get a valid MDN, because they check the data later and then email).

To be honest I hate MDN errors. They don't provide human-readable information in an understandable way. They're designed for automation which rarely exists in the wider world (between millions of different companies with hundreds of systems).

Give me an email template for errors any day, that way there can be a brief generic explanation and formatted data, to better explain things. The only thing MDNs do well is data consistency checking which is legitimately nice, however almost every EDI format I know has that in it already (i.e. segment counters, end segments, etc).

If I was to re-invent AS2, I'd just build the entire thing on standard HTTPS. No HTTP allowed, no hard coded certificates (i.e. you receive a public key the same way your web browser does), certificate pinning would be a key part, and scrap MDNs in place of a hash as a standard header in the HTTPS stream. Normal HTTP REST return codes would be used to indicate success (e.g. 200 OK/202 ACCEPTED, 400 Md5Mismatch/InvalidInput/etc).

That way nobody has to deconstruct an MDN to try and figure out the error. And handling a small handful of HTTP codes is much easier to automate than the information barriage an MDN contains anyway, it is both easier to automate, and easier for humans.

<comment><USER9> I wasn't saying use AS2 directly but an iteration of all the pain points of before solved, it is a decade old now. There are some things that wouldn't be needed and an iteration needed.

The things that AS/2 got right was that it rides on top of an existing infrastructure of MIME/HTTP. The other part is doing encryption/compression of any type specified by the server/client. And there is some benefit to encryption/compression/digital signing over plain HTTP.

HTTP/2 might be the first protocol for the web that isn't based on MIME for better or for worse. We are headed to a _binary protocol_ that is called Hypertext Transfer Protocol.

HTTP/2 looks more like TCP/UDP or small layer on top of it that you might build in multiplayer game servers. Take a look at the spec and look at all the binary blocks that look like file formats from '93: [https://http2.github.io/http2-spec/](https://http2.github.io/http2-spec/). It is a munging of HTTP/HTTPS/encryption in one big binary ball. It will definitely be more CPU intensive but I guess we are going live either way!

Plus AS2 was a huge improvement over nightly faxing of orders, large companies were doing this as late as 2003. AS1 (email based) and AS3 (FTP based) were available as well but HTTP with AS2 is what all fulfillment processes use now. And yes it has tons of problems but the core idea of encryption/compression/signatures/receipts over current infrastructure is nice. Everything else you mention exists and definitely are the bad parts though much of that wouldn't be needed in the core.

</comment></comment></comment><comment><USER11> SPDY came and went before I had to implement it. Phew.

On a serious note: it's nice to see ALNP being used in HTTP/2

<comment><USER12> ALNP has been used with SPDY for a while now. It one of the nice improvements that fell out of testing/iterating SPDY in public. The NPN approach was a bad idea since the client drove what got picked (With NPN, Server tells the client what other protocols it supports in the ServerHello and the client picks whatever it wants. ALNP reverses that.)

<comment><USER11> Sorry I didn't make it clear: that's my sentiment aswel. I'm glad it survived, so to speak.

</comment></comment></comment><comment><USER13> Are there any good reverse proxies out there that support HTTP/2? Right now I'm using varnish, but I'd love to switch over to something supporting this.

</comment><comment><USER14> Can someone explain to me the actual upside of header compression? I work on a fairly major educational site and calculating now our request + response headers comes out to 1,399 bytes. Gzipping them they come out to 1,421 bytes. A small net increase.

Am I missing something? Do some people have so many cookies that this makes a difference or something?

<comment><USER15> The header compression in HTTP 2.0 isn't based on gzip or something like that. The CRIME attack pretty much killed those approaches dead. It's more akin to differential updates for header during the lifetime of the connection. So if you request a lot of files with fairly similar headers you'll effectively only have to transmit the bulk of the header once while the other request will efficiently re-use the previously transmitted fields.

So to answer your question: Header compression as employed in HTTP 2.0 helps if you do many requests with similar headers on the same connection.

<comment><USER16> > So to answer your question: Header compression as employed in HTTP 2.0 helps > if you do many requests with similar headers on the same connection.

In general, HTTP/2.0 seems to be about improving things _if_ you do many requests over the same connection.

<comment><USER17> Doing many requests over the same connection is very common.

<comment><USER18> And one of the fundamental goals of HTTP/2 was to get clients to create only a single connection to a server.

</comment></comment></comment></comment></comment><comment><USER19> Unfortunately right now apache doesn't support HTTP/2 at all. There was a mod_spdy, but it's pretty much dead. Apache took it over from google some time ago, but since then nothing happened.

<comment><USER20> This is what happens when you let Google (or other big corporations) write internet-standards.

If it isn't community-driven, you can't expect it to be implemented in the places the big corp doesn't care for.

So in this case, Apache one of the major drivers for propelling the WWW may end up not supporting a "crucial" WWW-related standard, because the community was never invited.

If anyone still has any doubts why letting Google control internet-standards is bad, this is currently my best example.

Technically speaking, the internet is the result of what we come up with, when we all work together. Not working together will quickly end up as not working at all.

<comment><USER21> I think the reality here is, this is what happens when you let companies fight over a standard in private.

What I saw on the HTTP/2 mailing lists was "We have a new standard." "It demands SSL, but we don't want that." Then, SPDY is everywhere, let's use that.

Shortly after it was "Omg, we can't call it spdy, because then Microsoft's interests will be left behind and Google will have won. Let's abandon the mandatory SSL requirement and rename SPDY to HTTP2..."

I feel like we've all lost here.

We implemented SPDY at Twitter - the savings were fantastic and the browser performance, amazing. Google and FB did the same. It's nearly like, 800M users said it was great, can we move on now?

</comment></comment></comment><comment><USER22> Does anyone know if Cloudflare has plans to implement HTTP/2? RIght now they support SPDY.

I found the answer from their blog:

"Part of the service CloudFlare provides is being on top of the latest advances in Internet and web technologies. We've stayed on top of SPDY and will continue to roll out updates as the protocol evolves (and we'll support HTTP/2 just as soon as it is practical)."

<comment><USER23> Since CloudFlare is an OpenResty (nginx + lua) shop, they'll likely get it as soon as it's in nginx.

<comment><USER5> OpenResty does not include SPDY as there are incompatibilities with it and Lua. But I'm sure CloudFlare has the engineering resources in house to decide what they want to support and when :)

</comment></comment></comment><comment><USER24> Anybody know when nginx will support it?

<comment><USER25> They say it already does: "Right now, both the Apache and nginx web servers support HTTP/2" [http://moz.com/blog/http2-a-fast-secure-bedrock-for-the- futu...](http://moz.com/blog/http2-a-fast-secure-bedrock-for-the-future-of- seo)

The thinking is, I believe, that "SPDY/4 revision is based upon HTTP/2 wholesale" [http://http2.github.io/faq/](http://http2.github.io/faq/) and nginx already supports SPDY via ngx_http_spdy_module. [http://nginx.org/en/docs/http/ngx_http_spdy_module.html](http://nginx.org/en/docs/http/ngx_http_spdy_module.html) Version 3.1 though...

So it's either there or almost there.

<comment><USER24> Here's the related thread on the mailing list: [http://mailman.nginx.org/pipermail/nginx/2015-February/04658...](http://mailman.nginx.org/pipermail/nginx/2015-February/046583.html)

</comment></comment></comment><comment><USER26> Is HTTPS mandatory on HTTP/2 like it was on SPDY?

<comment><USER16> > Is HTTPS mandatory on HTTP/2 like it was on SPDY?

Not in terms of the protocol spec, but most major browser vendors have indicated that they only intend to support HTTP/2 in-browser over TLS connections, so in practice for typical, browser-targeting use cases, it looks like it will, at least initially.

<comment><USER27> That's so lame. It's so easy to set up a new website today, it's going to be a huge burden in the future. Some of us still make websites for fun, not as businesses. I guess I have to buy a cheap ssl certificate from some sleezy website every time I feel creative.

<comment><USER28> I'm puzzled, did you miss the announcement? The EFF, Mozilla, and others are creating a CA that will give free certs to everyone: [https://letsencrypt.org/](https://letsencrypt.org/)

<comment><USER29> Will they give out wildcard domain certificates?

<comment><USER26> No.

</comment></comment></comment></comment></comment></comment><comment><USER30> What happens if someone built a service based on it? Should they never trust browsers keeping alive even the shitty (in comparison to free and standardised HTTP/2) features? What's great about the web is that now 20 year old services still are working in the latest runtimes (browsers).

<comment><USER31> It is always risky to build a service based on something that is not yet standardized. SPDY was in progress to be standardized, but the process ended up with parts of it in HTTP2, making SPDY unnecessary, as I understand things.

It would be the _right_ thing for Google to remove SPDY at this point, otherwise it would be running a nonstandard protocol that other browsers do not, which can lead to fragmentation - as we saw just recently with an API that sadly Google has not removed despite it being nonstandard (FileSystem in the WhatsApp "Web" app).

edit: To clarify, I mean what Google is doing with SPDY sounds like the right thing. I don't mean it should remove it right now, I meant it was the right thing to do, right now, to announce it would be removed after a reasonable delay (and 1 year sounds reasonable).

<comment><USER32> To be fair Google did happily kill Gears when HTML5 became a viable [early draft] standard.

<comment><USER31> Agreed, Google did the right thing to remove Gears.

My concern is because, overall, Google has a bad track record in this area: FileSystem is still enabled, WebSQL is still enabled, PNaCl is still enabled edit: and H.264 was never removed despite announcing the intent to do so.

<comment><USER33> > PNaCl is still enabled

Eh? What is the spec competitor to PNaCl? asm.js is a cute trick but it still lacks threads which is easily one of the biggest features of PNaCl. So what actual viable alternatives are there to PNaCl?

<comment><USER31> We can discuss alternatives to PNaCl, but that isn't really the issue. Even if you have something you believe has no peer at the moment, that doesn't mean you can ship it without regards for the the standards process. It's still wrong for all the usual reasons.

Of course, not having a good alternative _might_ mean that the other parties in the standards process should take another look at it. But again, that's a totally separate issue from whether it is ok to just ignore the standards process and ship whatever you want, which is what Google is doing here.

<comment><USER33> > that doesn't mean you can ship it without regards for the the standards > process. It's still wrong for all the usual reasons.

What Google is doing with PNaCl _is_ the standards process. Standards start life by being not-standards that someone shipped and enough people liked to make it into a standard.

There is nothing wrong here, nothing whatsoever. This is exactly how the process should work. Design-by-committee standards suck. Standards that won through raw competition? Those are all the good ones.

<comment><USER31> While I agree with you that competition is crucial, and without experimentation we will get nowhere, it is worth remembering that IE6 and all of its specific behaviors "won" through "raw competition".

Often things win _not_ through fair competition. For example, WebSQL "won" on mobile because WebKit won on mobile, and WebKit happened to have WebSQL. If WebKit had had, say, the Audio Data API (which it did not), then the Audio Data API would have "won". Neither of those APIs won or would have won on its own merits, but because it was backed by the 800 pound gorilla in the space. (I chose Audio Data as an example because it is not in the same space as WebSQL, i.e. not competing with it, and was a nice API, that failed).

And the problem is that PNaCl will fragment the web, and already has. That's a serious problem - for everyone but Google.

<comment><USER16> > it is worth remembering that IE6 and all of its specific behaviors "won" > through "raw competition".

It is worth noting that the findings in the antitrust actions in the US over Microsoft's illegal and anti-competitive behavior in establishing IE's dominance indicate that that claim is, at best, misleading.

<comment><USER31> I would argue the opposite, in fact - that it shows what happens with pure unrestrained competition. Which leads to monopolies and other forms of competition suppression, ironically, of course.

Regardless, we don't need to agree on that point. There are plenty of other examples in tech (and outside) of things winning through "raw competition" that are just not that good.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER34> Well how about the fate of the cute little protocol called QUIC?

<comment><USER35> Maybe QUIC is the prototype for HTTP/4.

<comment><USER36> QUIC is not a replacement for HTTP; it works below it. See [https://docs.google.com/document/d/1lmL9EF6qKrk7gbazY8bIdvq3...](https://docs.google.com/document/d/1lmL9EF6qKrk7gbazY8bIdvq3Pno2Xj_l_YShP40GLQE/edit)

</comment></comment></comment><comment><USER37> Anybody aware of a good C++ server framework supporting most of HTTP/2, including websockets?

<comment><USER38> Facebook's proxygen has HTTP/2 support "in progress": [https://github.com/facebook/proxygen](https://github.com/facebook/proxygen)

<comment><USER37> Yes, but I believe they don't support websockets yet. At least, searching their github for "websockets" gives only two broken links.

UPDATE: I noticed somebody wrote websocket support [1], but it didn't get merged yet with the master.

[1] [https://github.com/kekekeks/proxygen](https://github.com/kekekeks/proxygen)

</comment></comment></comment><comment><USER39> Does somebody has good nginx configurations for HTTP/2? Good that browser go this directions but at the moment I have no clue on how to implement HTTP/2 (is there a SPDY fallback?) on my nginx server :(

</comment><comment><USER9> HTTP/2 is an ugly mess of taking something simple and making it more complex for minimal benefit. It could have been so much better than a binary mess.

As engineers, the ones that take simple concepts and add complexity, those are not engineers, those are meddlers.

It could be as long lived as XHTML.

I was hoping for more SCTP rather than a bunch of cludge on top of what is a pretty beautiful protocol in HTTP 1.1. Protocol designers of the past seemed to have a better long view mixed with simplicity focused on interoperability that you like to see from engineers.

<comment><USER40> For those slamming HTTP/2.0, how do they rate SPDY?

<comment><USER9> SPDY was great for Google and allowed them to change and take hold of HTTP/2.

It saved them lots of money I am sure in improved speed but at the trade-off of complexity and minimal adoption of the standard because it wasn't beneficial to everyone. HTTP/2 is a continuation of that effort by Google which I would do if I were them as well probably. But in the end both are not that big of improvements for what they take away.

Of course I use both but I don't think they will last very long until the next, it was too fast and there are large swaths of engineers that do not like being forced into something that has minimal benefits when it could have been a truly nice iteration.

HTTP/2 is really closer to SPDY and I wish they would have just kept it as SPDY for now. Let a little more time go by to see if that is truly useful enough to merge into HTTP/2\. HTTP/2 is essentially SPDY from Google tweaked and injected into HTTP/2 which has huge benefits for Google, so I understand where the momentum is coming from.

Google also controls the browser so it is much easier for them to be the lead now on web standards changes. We will have to use it if we like it or not. I don't like the heavy hand that they are using with their browser share, just like Microsoft of older days (i.e plugins killed off, SPDY, HTTP/2, PPAPI, NaCL etc)

</comment></comment></comment><comment><USER41> Google just loves exerting their power. It will take more than Chrome devs declaring it a done deal to make this happen. The browser is only half the issue. Web servers must get on board for this to matter. Obviously Safari, FireFox and IE have some say in this too.

<comment><USER3> Pretty much everyone in the industry is on-board with HTTP/2\. It's not just Google.

</comment></comment><comment><USER42> Hardly a surprise..

</comment><comment><USER43> @klapinat0r - welcome to the club. I was just about to say the same.

</comment><comment><USER44> I'm not ever supporting HTTP/2\. For something "monumental" enough to be called the whole second revision of HTTP, what have we really gained? A Google-backed "server push" mechanism and some minor efficiency additions? Add to that the fact that SPDY was pushed through as HTTP/2 because nothing else was ready.

Please.

Downvoters: although I don't usually do this, I'd ask you to enter into a discussion with me instead of just hitting the down arrow. Do you honestly think my discussion is worth being silenced?

<comment><USER45> If that doesn't convince you to support HTTP/2, then nothing will: [https://www.httpvshttps.com/](https://www.httpvshttps.com/) HTTP/1.1 is 5x-15x slower in this benchmark! These insane perf gains are possible only thanks to HTTP/2, specifically thanks to its support for multiplexing. Please read the spec and understand the technical implications before criticizing.

On some unrelated note: I found this tidbit of humor in the RFC draft ([https://tools.ietf.org/html/draft-ietf-httpbis- http2-16](https://tools.ietf.org/html/draft-ietf-httpbis-http2-16)):

      ENHANCE_YOUR_CALM (0xb):  The endpoint detected that its peer is
      exhibiting a behavior that might be generating excessive load.

<comment><USER46> Not really a fair benchmark. It's making tons of requests with tiny payloads, so that most browsers will hit a connection limit and requests will be queued up.

Heavily optimized pages like google.com use data urls or spritesheets for small images, and inline small css/javascript.

On the bright side, reducing the need to minimize request count will make our lives as developers a bit easier :-)

<comment><USER47> Many of the sites I visit frequently are exactly like that: tons of requests with tiny payloads.

The nytimes.com homepage makes 100+ requests to tiny images.

Same thing for the yahoo.com homepage.

An ebay.com listing page makes many requests to small thumbnails of items on sale.

And so on... This makes it a perfectly fair benchmark IMHO.

<comment><USER46> I don't know how you're assessing those pages, but bear in mind that

\- Counting images can be misleading, since well-optimized sites use spritesheets or data URIs.

\- If you're using something like Chrome's dev console to view requests, a lot of them are non-essential requests which are intentionally made after the page is functional.

\- HTTP connection caps are per host. The benchmark is making hundreds of requests to one host, whereas a real page might make a dozen requests to the main server, a dozen to some CDN for static files, and a dozen to miscellaneous third parties.

\- The benchmark is simulating an uncached experience; with a realistic blend of cached/uncached, HTTP 1 vs 2 performance would be much more comparable.

HTTP/2 is an improvement but if people expect a "5-15X" difference, they're in for a big disappointment.</comment></comment></comment></comment></comment>


HTML4 logo - <AUTHOR> http://dribbble.com/shots/104556-HTML-4-01-TRANSITIONAL-LOGO

<comment><USER2> I prefer the one from The Oatmeal, <http://theoatmeal.com/comics/state_web_winter>

Near the bottom. With the duct tape and nails.

<comment><USER3> that whole piece was great. kudos to him for the tumblr 503 error.

</comment></comment><comment><AUTHOR> You guys might also find this version of the HTML5 logo amusing: <http://dribbble.com/shots/104300-3d-HTML5-Animated-Gif>

</comment><comment><USER4> Needs to be more crooked. If the HTML 5 includes CSS3, then the HTML 4 badge needs to include all the CSS2 features that never got widespread support.

<comment><USER5> >then the HTML 4 badge needs to include all the CSS2 features that never got widespread support.

Yea, first it was NS4 that was non-compliant, then it was IE6 that was non- compliant.

<comment><USER5> <http://krijnhoetmer.nl/irc-logs/whatwg/20110123#l-626>

</comment></comment></comment><comment><USER6> It needs some rust

<comment><USER7> it needs to be brandishing a shiv</comment></comment>


On the Trail of the RoboCall King - <AUTHOR> https://www.wired.com/story/on-the-trail-of-the-robocall-king/ <comment><USER2> The article paraphrases TripAdvisor's anti-fraud guy:

"Better yet, what if, rather than ignoring robocalls, every American answered every call? If enough people pressed through to the call-center agents and toyed with them for hours, the enterprises would be deprived of sales and the robocallers driven into oblivion!"

This. Is there any science or math around this idea? What percentage of robocalls have to be just listening for the whole thing to collapse? It almost certainly doesn't have to be 100% of the people just listening. There has to be some limit on how many concurrent calls any particular robocalling jackwagon can make. What's that limit? How can we get this into existence?</comment>


Cold fusion is now possible? - <AUTHOR> https://ecat.com <comment><USER2> Wikipedia has a summary, [https://en.wikipedia.org/wiki/Energy_Catalyzer](https://en.wikipedia.org/wiki/Energy_Catalyzer). Unlikely to be true.

</comment><comment><USER3> Wow, that sounds to good to be ... the exact word escapes me at the moment.

</comment><comment><USER4> To quote Betteridge's law of headlines, "Any headline that ends in a question mark can be answered by the word no."</comment>


Usability hackers: Help us choose the right homepage layout. - <AUTHOR>

We're designing our web site and I'm in disagreement with my partner over how best to best represent the products benefits and features on the homepage.
I believe that the homepage shouldn't contain too much information, a brief sentence or two about each benefit with a link to another page with more info about the related feature - see wireframe - http://goo.gl/Bqj2B
He believes in more information available right there on the homepage and by using tabs the user doesn't even have to leave the page to decide whether he is interested in the software - See wireframe - http://goo.gl/g4Ub5
I'd really love to hear from other hackers which they would choose and why? This is the last piece of the puzzle before we launch our software. Thanks. <comment><USER2> The tabs look sleeker imo. And the users could switch between the benefits faster than having to click on a link, wait for the page to load, then go back to the home page, wait for that page to load, then click on another benefit. With the tabs visitors can get a decent amount of info without wasting time.

</comment><comment><USER3> If you go with the non-tab version, you could do an auto-scrolling page that has the sections of those 4 features lower down the page. This way everything is visible on one page.

<comment><USER4> I like non-tab version better as well. Could do auto-scrolling like maxdemarzi said or a horizontal slider, modal, etc</comment></comment>


Announcing Our First Rideshare Partnership with Lyft - <AUTHOR> https://firstname.lastname@example.com/announcing-our-first-rideshare-partnership-with-lyft-2c76071b926a <comment><USER2> It will be exceedingly interesting to see how the relationships in the mobility space develop and evolve. And of course the details would be interesting to know (e.g. who has access to the driving data, service data, etc.).

More broadly, however, we'll likely see many more relationships develop between:

1\. the multitude of smaller and relatively less capitalized self-driving companies (Drive.ai <i>only</i> raised ~$50 million in its last round) who may be more challenged to collect / simulate driving data

2\. the better capitalized competitors (GM, Waymo/Google, Bosch, Tesal etc.) who have more means to collect / create data

3\. those who have access to consumers (Uber, Lyft, Google/Waze/Maps, Ford/Chariot, GM cars & Cruise building it's own ride sharing app)

4\. fleet service companies (commercial and rental)

5\. freight services (UPS, Fedex, etc.)

6\. OEMs / Tier 1s / manufacturers with different strategies (Ford, GM, BMW, FCA, Continental, Bosch, ...)

It's a wild, mixed up, confused world out there. Very interesting to see from a business strategy perspective.</comment>


The Origin of the word Daemon (2002) - <AUTHOR> http://ei.cs.vt.edu/~history/Daemon.html <comment><USER2> A bit more about the etymology: δαίμων (daimon) in ancient greek is simply a god, or a divine spirit [1]. It appears earliest in the Iliad (1.222), and is probably related to the the root _da: "from PIE _dai-mon- "divider, provider" (of fortunes or destinies), from root *da- "to divide."[2]. Classical Latin trascribed it as daemon, because "ae" was pronounced "ai". Some years had passed, and Latin-speakers stated saying "e" instaed of "ai"[3], and writing "demon". English, as was mention in the article, borrowed the word twice, in both spellings.

I think that since there's a gap in the meaning and writing of the two words, we might as well pronounce them differently, and so I follow the Greek and say "dai-mon".

[1] LSJ Greek-English Lexicon: [http://www.perseus.tufts.edu/hopper/text?doc=Perseus%3Atext%...](http://www.perseus.tufts.edu/hopper/text?doc=Perseus%3Atext%3A1999.04.0057%3Aentry%3Ddai%2Fmwn) [2] [https://www.etymonline.com/word/demon?ref=etymonline_crossre...](https://www.etymonline.com/word/demon?ref=etymonline_crossreference) [3] [https://en.wikipedia.org/wiki/Latin_spelling_and_pronunciati...](https://en.wikipedia.org/wiki/Latin_spelling_and_pronunciation#Diphthongs)

</comment><comment><USER3> Very interesting. Here in Spain some people wrongly translate it as "demonio" which means "demon". However people with more knowledge strongly disencourage saying it and recommend to say "daemon" even when probably near no one really knowing where it comes from. I like the word daemon though.

Checking the oxford dictionary I can see that demon and daemon are indeed related, and that it could theoretically be translated in the same way. I prefer to say daemon though.

<comment><USER4> There seems to be a common misunderstanding here.

'Daemon' is just an alternate spelling of 'demon'. It's pronounced the same, means the same thing, and is simply the _same word_. Just as 'encyclopaedia' and 'encyclopedia' are the same word, or 'mediaeval' and 'medieval' are the same word.

<comment><USER5> Yes and no - they have the origin in the same word, but as the article point out the two spellings have acquired different connotations. So they are not exactly the same word anymore.

<comment><USER6> And since they are no longer the same word, the distinction is aided by difference in pronunciation.

I went looking for the Greek pronunciation of daemon/daimon, and this is what I found:

MP3: [http://media.studylight.org/lex/grk/1142g.mp3](http://media.studylight.org/lex/grk/1142g.mp3)

Source: [http://classic.studylight.org/lex/grk/view.cgi?number=1142](http://classic.studylight.org/lex/grk/view.cgi?number=1142)

The pronunciation of Kubernetes is also interesting.

MP3: [http://media.studylight.org/lex/grk/2942g.mp3](http://media.studylight.org/lex/grk/2942g.mp3)

Source: [http://classic.studylight.org/lex/grk/view.cgi?number=2942](http://classic.studylight.org/lex/grk/view.cgi?number=2942)

</comment></comment></comment></comment><comment><USER7> What the answer doesn't explain about Socrates is that his daemon, according to his own telling, was constantly monitoring since childhood what he said and did, and would often warn him against saying and doing certain things.

In philosophy, it is often pronounced (and written) "daimon," after the Greek, to avoid confusion with demons in Christian mythology.

</comment><comment><USER8> Me, I wonder about the relationship between Hindu devas, which are benevolent, and Zoroastrian daevas, which are basically demons. And then there's the Zoroastrian god Ahura Mazda vs Hindu asuras, which are demonic.

It's like Zoroastrianism just reversed the Hindu categories. I get that there's been millennia of bad blood, but this seems rather extreme.

And software demons are generally benevolent, not demonic. So does the usage come from Hinduism?

<comment><USER9> No, as mentioned it comes from Greek: [https://en.wikipedia.org/wiki/Daemon_(classical_mythology)](https://en.wikipedia.org/wiki/Daemon_\(classical_mythology\))

<comment><USER10> That doesn't mean it didn't come from Hinduism. The concept and word were in Greek when Homer was writing, around 800 - 700 BC, and Hinduism was coalescing around 1500 - 600 BC (it says on Wikipedia). Greek and Sanskrit are related languages, and the Greek word has a root in their common ancestor. We know there was cultural interchange between the Greek and Indian worlds. Indeed, it's probably a mistake to think of them as separate worlds; Europe and India seems quite distinct now, but there was a time when it was all just the fertile crescent and its hinterlands.

Admittedly, it's probably wrong to say it came from Hinduism per se. But it doesn't seem impossible that the Greek, Hindu, and Zoroastrian ideas are from the same root.

<comment><USER8> Yes, and what I wonder is how for Hindu/Greek they're benevolent, whereas for Zoroastrian/Christian they're malevolent.

Edit: Cut Roman from malevolent side because I'm not sure.

<comment><USER10> My impression is that for the Greeks, they were explanations for natural processes. Why does the wind blow suddenly? Demon. Why did that rock fall into the sea? Demon. Why did i remember to pack some cheese? Demon.

Some of what the world does is helpful, and some of it is harmful. So demons can be benevolent or malevolent.

I'm not sure about this, though.

</comment></comment></comment></comment></comment><comment><USER11> From 2011: [https://news.ycombinator.com/item?id=2691752](https://news.ycombinator.com/item?id=2691752)

</comment><comment><USER12> the origin of the world daemon is a lot older than 2002

<comment><USER13> The meaning of (2002) appended to an article title on HN is that the article was written / last significantly updated in 2002.</comment></comment>


Ask HN: recommendated approach for getting a homepage design on a budget? - <AUTHOR>

So far I've done the design myself for my site http://cookblast.com/
After doing a little experimenting with Stumbleupon ads, and having a horrible bounce rate (>90%), I think my homepage needs improvement.
My current plan is to use Elance, following patio11's example http://news.ycombinator.com/item?id=1551817
Any good alternatives to getting a nice design without much of a budget?
Any specific tips on how to improve my homepage would also be appreciated! <comment><USER2> What I've heard is that SU ads drive a huge amount of traffic with not-very- good conversion rates. @webwright has looked into this in the past. If you're on the Seattle Tech Startups mailing list, check out the March 2010 archives for more information.

Beyond that, I'm overwhelmed by the idea of searching over 16,000 cooking videos. It's likely that I'm not in your target demographic (28 year old single white male, rarely cook for myself), but I'm still not even sure where to start.

Do you know who your target user is? Do you know the pain points your product will solve for them? If not, try reading Steven Blank's Four Steps to the Epiphany. It might help you focus your development efforts.

<comment><AUTHOR> Yeah I wasn't expecting that much from SU, but I think I can do better.

Good point that I need to give more thought to marketing however!

</comment></comment><comment><USER3> You could always use themeforest.com Here's one that's food related: <http://themeforest.net/item/time-for-food/57351>

<comment><AUTHOR> Thanks, I'm aiming for something a little more specific to my site though.</comment></comment>


Free To Play Games Have Arrived on Steam - <AUTHOR> http://store.steampowered.com/news/5657/

<comment><AUTHOR> [http://venturebeat.com/2011/06/14/valves-steam-online- store-...](http://venturebeat.com/2011/06/14/valves-steam-online-store- launches-micro-transaction-games/)</comment>


Steve Jobs On Privacy [youtube] - <AUTHOR> http://www.youtube.com/watch?v=TGLxjppFqeA

<comment><USER2> Straight and simple - as always truly Apple!</comment>


Project Fi welcomes Android One, with the moto x4 - <AUTHOR> https://www.blog.google/products/project-fi/project-fi-welcomes-android-one-moto-x4/ <comment><USER2> "Google Android One Moto X Four". I guess we moving back to the days of names like "Samsung Galaxy S II Epic 4G Touch".</comment>


NASA Hands Elon Musk a Reality Check - <AUTHOR> https://www.theatlantic.com/science/archive/2019/10/elon-musk-jim-bridenstine-starship-commercial-crew/599218/ <comment><USER2> This article is kind of trash. It's trying to manufacture a conflict that isn't really happening. Relations between NASA and SpaceX is pretty cordial recently. Especially since their STS missions are running like clockwork.

I'm sure that NASA is as happy about the progress with Starship as SpaceX is. Not to mention the increased interest in space in general cause by SpaceX live streams and accomplishments.

</comment><comment><USER3> is this tech billionaire hunting season , the dude is landing rockets, over and over again . if anybody knows whats real about rockets i think its him . CLICK BAIT TRASH

</comment><comment><USER4> There have been thousands of anti Elon Musk fake news stories published ever since it emerged Elon was a donor of the republican party.</comment>


Interview with Steve Wozniak - <AUTHOR> http://news.bbc.co.uk/1/hi/programmes/click_online/7742797.stm

<comment><USER2> The really interesting bit of the interview was the fact that Woz is a user of "Cycorder", the video camera app installed via jailbreaking the iphone. Also he talks about the early years of Apple.</comment>


The "If By Whiskey" speech - <AUTHOR> http://en.wikipedia.org/wiki/Noah_S._Sweat

<comment><USER2> This is like an assembly language or machine code program that does two different things depending on the alignment with which you jump into it.

</comment><comment><USER3> Great article.

Also take a look at the article specifically about the speech : <http://en.wikipedia.org/wiki/If-by-whiskey> . The op's link is to the speech's author.

</comment><comment><USER4> I'm on a whiskey diet, I've lost three days already. - Tommy Cooper

</comment><comment><USER5> Summary: Alcohol can be a bad thing (excess), or a good thing (moderation), depending on how you look at it.

<comment><USER6> Alcohol does nothing at all if you 'look' at it--- to achieve excess or moderation (shudder) you have to 'drink' it...</comment></comment>


Kod, a new OS X "programmers' editor", open sourced - <AUTHOR> http://groups.google.com/group/kod-app/browse_thread/thread/8bc80d18932f5e99?pli=1

<comment><USER2> Just to make sure I am not overlooking something, the editor comes only as source code in a project that has multiple dependencies that are neither included in the available downloads nor listed in the documentation. A binary seems to not be available in any obvious location. Please correct me if I am mistaken about this: downloading the package and compiling reveals many missing files and leads to 1303 compile errors on the very latest versions of OS X and XCode.

<comment><USER3> You can get a binary at:

<http://kodapp.com/download/> (direct link)

<comment><USER2> Ah great, thanks. Spent the last hour trying to get it to compile.

</comment></comment></comment><comment><USER3> (Discussion at <http://news.ycombinator.com/item?id=2039573>)</comment>


Ask HN: Are there any ethical milk/egg suppliers or their vegan alternatives ? - <AUTHOR> Trying to go vegan and checking out if there are any ethical milk or egg products or vegan alternatives with the  same nutritional benefits of these two staple diet foods. Cheers! <comment><USER2> There are many kinds of eggs that are more ethical than the cheapest eggs.

For instance: free range eggs as well as other kinds of cage-free eggs which involve more confinement than free range but less than battery hens.

Egg-laying chickens are also a good agriculture project if you have much space at all. It is totally possible in a light urban environment, even if the neighbors don't like the noise, smells, etc. The taste of your own eggs from chickens that eat grass, weed seeds, bugs, worms, etc. puts supermarket eggs to shame.

<comment><AUTHOR> Thank you for your response :)</comment></comment>


Introducing Ractive.js: next-generation DOM manipulation - <AUTHOR> http://www.guardian.co.uk/info/developer-blog/2013/jul/24/ractive-js-next-generation-dom-manipulation

<comment><USER2> Library author here. Will try to answer any questions!

Edit: Direct link to the project homepage [http://ractivejs.org](http://ractivejs.org)

<comment><USER3> Ractive.js has some things in common with Facebook React, if you guys are interested in declarative DOM, react merits close study. React diverges from Ractive (and other databinding "things") by removing almost all mutation of models from the programming model, which removes a lot of complexity and is a pretty big deal.

[http://facebook.github.io/react/](http://facebook.github.io/react/)

edit: upon closer study, Ractive seems to be more similar to React than I first thought.

<comment><USER2> Definitely. Ractive has superficial similarities to Angular (e.g. Mustache templates) but is probably closer to React in concept. Poking under the hood of React is high on my todo list.

I'm interested to know what you mean by 'removing almost all mutation of models'?

<comment><USER3> from [1]: "In React, you simply update a component's state, and then render a new UI based on this new state. React takes care of updating the DOM for you in the most efficient way."

So you don't actually do DOM mutation yourself, nor do you "update" the DOM in response to events on models that changed. You think in terms of "pseudodom", not actual DOM, so if any state changes or an event fires you can just redraw all the pseudodom instead of worrying about finding the right place in the dom that you need to update.

[1] [http://facebook.github.io/react/docs/interactivity-and- dynam...](http://facebook.github.io/react/docs/interactivity-and-dynamic- uis.html)

Sorry, I don't mean to derail your thread.

<comment><USER2> Not at all, these discussions are useful. I think React and Ractive actually handle this in a similar way - Ractive maintains a 'parallel DOM' (which is basically the result of populating the parsed HTML template with data), and items within the parallel DOM are responsible for updating the real DOM as and when necessary.

So both React and Ractive are concerned with doing the least amount of DOM manipulation possible.

</comment></comment></comment></comment></comment><comment><USER4> Repo: [https://github.com/Rich-Harris/Ractive](https://github.com/Rich- Harris/Ractive)</comment>


Furniture for the introverted - <AUTHOR> http://www.economist.com/news/business/21685466-furniture-introverted-thinking-inside-box <comment><USER2> Instead of solving the problem or urban overpopulation, high real estate prices we are a new generation foolishly celebrating these kinds of toys that little by little is chipping away our personalities. The new generation is indeed globally slave labour.</comment>


Skim - A New Type of Messaging App - <AUTHOR> http://useskim.com/

<comment><USER2> For me, the history of my text messages is a feature, not a flaw. I'm assuming this is "Snapchat for texts." We've already seen that Snapchat can't guarantee that photos aren't saved. The same limitations will almost certainly apply to Skim. So will this be anything more than a crippled texting app?

</comment><comment><USER3> Your value proposition is rather unclear. Whom is this aimed at and what advantage do you offer them?

</comment><comment><USER4> So they point out a limitation of face to face communication, but instead of creating something that would remove this limitation, they artificially introduce it into another form of communication that didn't previously suffer from the same limitation? What a joke.

</comment><comment><USER5> It's generally a good idea to put labels on your input fields, or at least any indication of what's meant to go there; the placeholder is insufficient because the input is automatically focused. I had no idea so I just put in a series of swear words.

</comment><comment><USER6> Half a screenshot and half a description? Why would I give you my email address for that again?

</comment><comment><USER7> What's new about it? Is it just for mobile? I generally need a little more information before I'm gonna sign up for spam.

</comment><comment><USER8> What a garbage post, and website.</comment>


"Spooky Experiments That 'See' The Future" Follow Up - <AUTHOR> http://www.guardian.co.uk/commentisfree/2011/apr/23/ben-goldacre-bad-science

<comment><AUTHOR> Several months ago there was a discussion on HN about a published study that showed evidence of 'precognition.' <http://news.ycombinator.com/item?id=2068105> Since then three academics have recreated the experiment and shown no evidence of precognition.

Of course, this isn't really a surprising finding, so you likely won't hear about it in the same news outlets that wrote about the first study. :)</comment>


My first iPad game: Stats and lessons - <AUTHOR> http://whatupdave.com/post/5301971486/the-development-of-ibots-launch <comment><USER2> Very insightful... More liked the point where you described how you had to start cutting down on stuff so that you get to release it.... I think deciding on one feature and one feature only, developing it and throwing it out to the world is a good idea most of the times :

1\. Gives you an opportunity to test if people like what you have to offer

2\. You have a ton of features lined up in your head but based on user feedback you would know how to prioritize them

</comment><comment><USER3> Very cool. Am I the only one to like the original design better than the robot one?

</comment><comment><USER4> There's a gigantic difference in sales potential when you choose to make an iPad game (like the author did) and an iPhone game. The iPhone & iPod touch market is way, WAY bigger and has a much larger financial upside. If you want to make a game that can reach the largest audience of buyers, make it for iPhone, or universal, but not iPad only. The title of the submission is misleading.

<comment><AUTHOR> Thanks for pointing that out Mike, I've corrected the title.

You're right too, when I started development I'd just bought the iPad and there weren't a lot of quality games on the device. Especially games that weren't just scaled up iPhone games.

My reasoning was if I could get a decent game out in 3 months, even though there were less devices, I would have less competition for attention on the iPad.

<comment><USER5> While that might seem true, it's interesting how the web scene has played out.

When the iPod came out, there was an ecosystem of iPod-related websites that emerged that was distinct from the Apple/Mac web.

When the iPhone came out, another entire ecosystem developed. iPhone-specific sites. The existing iPod sites weren't the ones to gain popularity.

The iPad, however, didn't spawn a significant iPad-specific ecosystem of websites. Instead, it was absorbed within the Apple/iPhone sites, for whatever reason. As a result, I think iPad coverage is harder to come by and is a bit more mixed with everything else.

<comment><USER6> You think this is an underserved niche?

<comment><USER5> I don't. The lack of popular iPad-specific sites was not due to a lack of trying. There were several that tried. None of them gained a lot of traction.

</comment></comment></comment></comment></comment><comment><USER7> If anybody else wants to play around with 3d game development turbosquid ( briefly mentioned in the article) is a great way to start.

If you can spare it, play around with blender for a week and you should be able to make simple models (ships, guns, etc) and tweak more complex ones.

</comment><comment><USER8> As someone planning to build some iOS games as a side project, I really appreciate this info.

Some questions for you:

Have you considered offering your game for free for a limited time to get your game out there, so it can hopefully find some more coverage? If so, what made you decide to keep it a paid app?

Did you consider any other game dev tools, such as Unity?

Did you reach out at all to any mobile gaming sites or blogs to try to get coverage for your game? If so, did you have any luck?

<comment><AUTHOR> Not sure about offering it for free, it's a possibility. I may try a lite version of some type. That worked for Trainyard.

I briefly looked at Unity and thought it looked great but more suited to 3d games. I thought I could move faster with cocos2d but I can't comment on how true that is.

BTW I decided on 2d for two reasons: 1\. it's easier to develop 2\. I haven't found any 3d games I like!

I also hit up a whole bunch of forums, emailed a stack of review sites, most of which didn't reply, or they were charging for reviews. I got that one review I linked to which was great. I'm most definitely not a marketing guru!

</comment></comment><comment><USER9> Ah, how I despised the PS2 DEV TOOL. The only cool thing about it was the look on people's faces when they'd see it...right out of that scene in Aliens when Ripley walks in on the Queen.

<comment><AUTHOR> I got some peverse joy out of writing code that could chunk my 3d models, send them over the bus and coordinate the two co-processors. So many late nights....

</comment></comment><comment><USER6> The reference to Turbo Pascal brings back some highschool memories.</comment>


I think I found what I want to do, but who offers this job position? - <AUTHOR> Hello all!
So in short after almost 5-6 years of working, I think I might have found what I actaully want to do!
Background, I am a web developer, worked in startups and big corps and then started also my own startup which ended :)
The problem is that I get easily bored, I need constant engagement and I do not mean this in the same way that job adverts list this. I need problems!
Recently I had the experience to help a company with their problems in terms of legal and due to my previous experience I knew who to call etc.
But in the end this is what I want to do. Get a problem, solve it and move to the next one, this is why I thought I liked development.
Now is there even such a thing? Is there a title a position who deals with this?
Thanks a lot! <comment><USER2> > _Get a problem, solve it and move to the next one..._

This sounds like what freelancers/consultants do. A company hires them to solve a specific problem, and when it's done, they get a contract at another company.

The downside of this way of life is that you constantly need to look for work and sell yourself. The upside is the variety of experience you get and being your own boss.

If you search HN articles for "freelancer", "freelancing", "consulting", etc., you'll find lots of threads in which people have asked how to get into this kind of work.

There are also full-time employees who have development jobs like this (solving problems and moving on to another project), but those are pretty rare in my experience. Companies that have products/systems to support generally find value in having someone who developed a product continuing to work on it for a while (at least until they can transfer their knowledge to others).

<comment><AUTHOR> Ye I am not much into freelancing / consulting due to the environment ( I like coworkers ).

I thought actually outside of web development. Do companies need people like that?

<comment><USER3> Large consulting firms do not have those drawbacks.

</comment></comment></comment><comment><USER4> You'll need define the type and scope of the problems you like better.

Most software development could be considered problem solving "user has problem x, let's solve it by coding y", even if you're just gluing frameworks together you're solving someone's problem. Other problems are more like bugs, in which case support developer might be more your speed. Support developer is a rarely seen job title these days but still very much exists.

In my current role I'm somewhat on the support side and sometimes get some really gnarly bugs that require weeks and some creative approaches to solve. I love doing this because it's like being paid to solve fun puzzles, but other peoples definition of problem solving is to be creating my problems :)</comment>


JQuery.fn.each vs. jQuery.fn.quickEach   - <AUTHOR> http://jsperf.com/jquery-each-vs-quickeach#run

<comment><USER2> You don't always need a jQuery object in the loop, and providing one encourages people to do slow things. For example, if you want to see if a check box is checked, `this.checked` is 100 times faster [<http://jsperf.com/bens-test>] than `$(this).is(":checked")`. (Sorry about the lame name, I was hanging out with Ben Alman after the jQuery Conference, it was late, and I was tired).

If you do need a jQuery object, you can use James Padolsey's trick by keeping your own single-item jQuery object outside the `.each()` and update/reuse it inside.

<comment><USER3> While I agree, the thing that jQuery does, and this was outlined a long while ago in a presentation is that different browsers have different behaviors sometimes for some of the most simple things. Querying is one of those, and the list goes on. Sometimes there are just browser bugs! Frameworks like jq and others ensure a consistent behavior between different browsers.

Also note, native browser calls will always be faster. JQ gives you some major power though. It is always best to optimize the big parts of your performance with jq and other frameworks getting the logic correct, then these micro optimizations can be made, including this iterator and your this.checked. However for a general use case, this iterator is exactly what people need as it solves the 70% case.

</comment></comment><comment><USER4> Judging by one of the forks, it may not make much of a difference in real- world usage:

<http://jsperf.com/jquery-each-vs-quickeach/9>

<comment><USER5> The difference may not be as dramatic as the original example, but a 10-25% performance increase isn't too shabby.

<comment><USER4> True - reworded my post a bit to clarify.

</comment></comment></comment><comment><USER6> Did not expect the page to start running the benchmark, let alone before the page finished loading.

</comment><comment><USER7> I am impressed by the Chrome 13 results

        292,938 vs. 51,740

that is almost x6 faster, and almost as twice as my current chrome (11)

</comment><comment><USER8> Causes FF 3.6.16 on Ubuntu 10.10 to crash.

<comment><USER9> As others have mentioned, the page loads a Java applet. That'd be my first guess at the cause of the crash.

</comment></comment><comment><USER10> Why is this page asking to load Java?

<comment><USER11> Looks like it's loading a high resolution timer called nano.jar. <http://benchmarkjs.com/></comment></comment>


Klipper:News consumption app which summarizes content - <AUTHOR> http://klipperapp.com

<comment><USER2> I do not like the shade of blue. Though, works like killer. Good stuff!

<comment><AUTHOR> Thanks, we have had quite a lot of feedback on the blue! :D, hope the color does not take away from the summaries.

</comment></comment><comment><USER3> Very neatly done and surprisingly accurate !! Loved the Api !!

<comment><AUTHOR> Thanks!</comment></comment>