John Resig annotates original jQuery source code - <AUTHOR> http://genius.com/5088475 <comment><USER2> Very neat content, but does it have to be formatted like this? I respect that it preserves the original file, but it makes it very difficult to read. Comments added to the source code would serve much better for the purposes of understanding the code.

This tool makes it impossible to read the annotation and the source code at the same time. Clicking on 'set' for example, about 20-30 lines in, lets you read the annotation, but not the function. You have to hide the annotation to read the code.

Wouldn't inline/multiline comments be so much better than this?

Edit: Citation/example: [http://i.imgur.com/CHOFGML.png](http://i.imgur.com/CHOFGML.png)

<comment><USER3> This formatting style for annotated sources always seems to work so well: [http://robflaherty.github.io/jquery-annotated- source/docs/01...](http://robflaherty.github.io/jquery-annotated- source/docs/01-core.html)

<comment><USER4> Indeed, that side-by-side annotated style is great. For those who would like to create similar pages, the original program is Docco[0], a Javascript project. However it's been ported over to many other languages and can be found in these projects:

\- Pycco[1] Python

\- Rocco[2] Ruby

\- Shocco[3] POSIX Shell

\- Many more, as found here[4]

Note each of these projects support highlighting different languages. For example, the Pycco[1] project uses the Pygments library for language handling, and thus supports many different languages. Others, like Shocco[3] only support one language (Shell in the case of Shocco).

[0] - [http://jashkenas.github.io/docco/](http://jashkenas.github.io/docco/)

[1] - [https://github.com/fitzgen/pycco](https://github.com/fitzgen/pycco)

[2] - [http://rtomayko.github.io/rocco/rocco.html](http://rtomayko.github.io/rocco/rocco.html)

[3] - [http://rtomayko.github.io/shocco/](http://rtomayko.github.io/shocco/)

[4] - [http://jashkenas.github.io/docco/#partners-in- crime-](http://jashkenas.github.io/docco/#partners-in-crime-)

<comment><USER5> I agree, Docco-style docs are really easy to read.

I built srcco, a Docco-style doc generator that links every variable, function, etc. within your project to its definition (similar to sourcegraph.com -- full disclosure: I work at Sourcegraph), to demonstrate how to build things on top of our free/open source language analysis framework, srclib[0].

You might find it interesting (the links in the code have white backgrounds): [http://sourcegraph.github.io/srcco/srcco.go.html](http://sourcegraph.github.io/srcco/srcco.go.html)

It only works for Go because the only Go toolchain keeps track of comment ranges (because srcco removes the comments from the source code), but it wouldn't be too hard to add comment ranges to the other toolchains. If you are interested in language analysis for languages like Java, Python, Haskell, or Javascript, I would be happy to help you make your first contribution. Ping me: email@example.com.

[0] - [https://srclib.org/](https://srclib.org/)

</comment></comment></comment></comment><comment><USER6> It's very kind of John to mention my first jQuery plugin in the notes.

Unfortunately, it was not a very good plugin and probably set a bad precedent.

Like so many new jQuery developers, I went "Chaining? Whoa. Chain all the things!"

So I attached the plugin to $.fn, not thinking about the fact that what the plugin did had very little to do with the current element selection.

I may have been the first to make this mistake, but at least I wasn't the last. :-)

Perhaps I redeemed myself by coming up with the idea to use $.prototype for plugin methods instead of copying the method references by looping through $.fn (we kept $.fn as an alias of $.prototype for compatibility). So a $(...) call became a lot faster.

<comment><USER7> I suspect a lot of the "unnecessary chaining" that occurs is really a problem of people (A) making something that requires jQuery and they don't want to think about how to ensure that dependency, while (B) liking the idea of associating their little thing with a big-name project.

Then you get things like $("#target").MakeBobsFancyBoxWidget()

</comment></comment><comment><USER8> What surprises me is the lack of comments in the original file. This leads to e.g.:

        this._get(i).$$tmpFunc = f;
        this._get(i).$$tmpFunc(i);
        this._get(i).$$tmpFunc = null;

with the comment (from now):

 _So this may look crazy — it certainly does to me! Why not just do: f.call(this._get(i))? If I remember correctly, and I just did some double- checking and I think this is the case, but IE 5 didn't support .call()! The original version of jQuery event worked back to IE 5… I can hardly believe._

I personally hate coming across snippets of code like this (usually from myself ): ). What do I do here? Can I just replace this with .call? Why did he not do .call? Performance? Or just MSIE5 (if I ever figure that out in the first place).

All my respect to mr. Resig, of course! What an almost legendary piece of software. Just interesting to see that this commentless programming is something of all pedigrees.

And a note to people saying "learn from this," please also learn that without the original author and rapgenius, we would never have understood that part. Or at least I wouldn't.

<comment><USER9> Also with all my respects to mr. Resig, but this is not really code to learn from. It's full of bad habits and it's hard to read. Poorly named, mostly uncommented and pretty hacky.

Not really judging, it was just a bunch of handy hacks he had for personal use.

Another reason it's hard to follow is of course: writing a CSS selector is not a trivial task, and that with all the browser quirks workarounds. I'm sure getting it working properly wasn't a walk in the park.

That said, he often talks about how he wanted to make the code look "cute" by making it as compact as possible and to save weight. Although weigh matters a lot in the web, the source code is a terrible place to optimize. Instead, write readable code, with sensible names, and then compact it with tools.

<comment><USER10> > and then compact it with tools.

Did we have minification tools back then?

<comment><USER9> Jepp: [http://www.crockford.com/javascript/jsmin.html](http://www.crockford.com/javascript/jsmin.html)

</comment></comment></comment></comment><comment><USER11> The annotations are also a great reminder of how programming used to be not so long ago. It's hard to imagine having to search Internet Archive for your own source code in this age of Github:

[http://genius.com/5088475](http://genius.com/5088475)

> Note: This may not be the first first code released, but it appears to be > the earliest copy that we've found, so far. This is a copy that was indexed > by the Internet Archive on Feb 3rd 2006, so about 2.5 weeks after the > initial release. It's very likely that a few things changed in that time > period and I'll try to make a note of some of those, that I can remember, > inline.

</comment><comment><USER12> I'm sorry, but this has to be said. This guy loves exclamation points! Almost every paragraph features one. It reminds me of a great Seinfeld episode:

Jake: Well, maybe I don't use my exclamation points as haphazardly as you do.

Elaine: You don't think that someone having a baby warrants an exclamation point.

Jake: Hey, I just chalked down the message. I didn't know I was required to capture the mood of each caller.

Elaine: I just thought you would be a little more excited about a friend of mine having a baby.

Jake: Ok, I'm excited. I just don't happen to like exclamation points.

<comment><USER13> That's just negation in JS.

<comment><USER12> Well played.

</comment></comment></comment><comment><AUTHOR> John also spoke at the March Code Genius. You can check out his full talk here: [https://www.youtube.com/watch?v=H4sSldXv_S4](https://www.youtube.com/watch?v=H4sSldXv_S4)

</comment><comment><USER14> Anyone else already find the XSS in genius.it?

Edit: wow, the whole thing is seriously broken. Emailing them now.

Edit 2: It's not as broken as I thought, and these guys are quick to reply and try to figure things out. To be clear, I haven't gotten it to run arbitrary JS, just include arbitrary HTML, which isn't as dangerous.

<comment><AUTHOR> Let us know this'd be very helpful! firstname.lastname@example.com

<comment><USER15> BTW would really love to link to a particular annotation.

<comment><USER14> I noticed it when [http://genius.com/5104616](http://genius.com/5104616) was broken where John included the <div> tag.

</comment></comment></comment></comment><comment><USER16> Though Resig's anecdotes are fun and interesting to read, it doesn't help that much with understanding the actual source code. Here's a better version in terms of readability and depth:

[https://robflaherty.github.io/jquery-annotated- source/](https://robflaherty.github.io/jquery-annotated-source/)

[https://robflaherty.github.io/jquery-annotated- source/docs/0...](https://robflaherty.github.io/jquery-annotated- source/docs/01-core.html)

Sadly, no longer updated since jQuery 1.6.2 which was released in 2011.

<comment><USER17> Out of curiosity, do you know of any other ubiquitous projects that have had a similar treatment?

<comment><USER18> Backbone, Marionette and Underscore all have annotated source like this linked on their project websites.

</comment></comment></comment><comment><USER19> Wow, makes me feel a little better that he had 75 open source projects before he had a 'hit'. :)

<comment><USER20> where did you see that ?

<comment><USER21> It was stated in one of his annotation

</comment></comment></comment><comment><USER22> Maybe I missed the release announcement on this genius.it thing but thats the real story

[http://genius.it/https://news.ycombinator.com/item?id=933629...](http://genius.it/https://news.ycombinator.com/item?id=9336297)

</comment><comment><USER23> If you're a new or relatively new developer I highly recommend reading through things like this. All too often developers get in the habit of writing a lot of code without also reading what other more experienced developers have written.

</comment><comment><USER24> Amazing that it has been more than nine years since the original release (Jan 14, 2006)!

How long did it take for John to write this initial version? Any idea?

<comment><USER25> I don't have exact records but based upon what I was inspired by, and what else I was working on at the time, it roughly equates to the fall of 2005. I was in college at the time and taking classes so I was working on it on-and- off as my schedule allowed. I finished it up over winter break and went with some friends to BarCamp NYC 2006 and released it there.

<comment><USER24> Thanks John, always good to hear straight from the horse's mouth!

</comment></comment></comment><comment><USER26> on mobile: i only see the code. sigh. why even serve me a different page? I'm running full blown Firefox.

</comment><comment><USER27> So glad jQuery came along and became what it is. Scary to think of a world where it was just bundled alongside Prototype. For those not versed in Prototype, those were dark days (at least for me).

<comment><USER28> I always kind of wished that MooTools had won out in their battle to overtake Prototype's crown. It had a much more sensible namespace, and focused much more on solidly structured code over "how short can I make this".

</comment></comment><comment><USER29> Is there a list of other source code annotations on Genius? Their "tech" section of the web site is full of crappy startup news and doesn't even link to this gem.

</comment><comment><USER30>
      if ( !b )
        for ( var j in a )
          this.style[j] = a[j];
      else
        this.style[a] = b;

_I really dis-liked having unnecessary braces. This… unfortunate… style preference plagued us for quite a while and caused all sorts of avoidable logic errors._

I really wish this kind of coding was removed completely from some languages.

</comment><comment><USER31> I found myself wishing this was a screencast.

<comment><USER32> Paul Irish has done a few videos where he walks through some of the jQuery code: [http://www.paulirish.com/2010/10-things-i-learned-from- the-j...](http://www.paulirish.com/2010/10-things-i-learned-from-the-jquery- source/)

<comment><USER21> I can't believe that article was five years ago already! >.>

</comment></comment></comment><comment><USER21> Anyone knows if there are outdated sites that still using early versions of jQuery? =))

<comment><USER25> I don't have any links off-hand but I know that there was a Nintendo.com sub- site that was using a pre-1.0 version of jQuery. Even though the overall code quality is rather low it did have decent browser support - unless browsers actively begin breaking their APIs (unlikely) those old versions of jQuery will probably keep working forever!

</comment></comment><comment><USER33> I've archived the original 2005 jquery script (aka jselect) [https://github.com/daniellmb/jquery- archive](https://github.com/daniellmb/jquery-archive)

</comment><comment><USER34> Firefox 36, OS X. This doesn't seem to be working for me at all.

</comment><comment><USER35> I would actually like this in an IDE. Visual Studio kind of does this with header comments but it would be great to be able to show/hide comments with links, rich text,...

<comment><USER36> Vim's folding doesn't do this out-of-the-box, but you can set it up to do so. Clickable links aren't doable, though copying and opening in a browser tab is something like seven keystrokes on my current setup.

<comment><USER37> In modern Vim (with netrw), you can type `gx` when the cursor is over a URL to open it in your browser.

</comment></comment></comment><comment><USER38> What's the standard the Genius uses to perform annotations? Anybody know?

</comment><comment><USER39> It's 500'ing for me, anyone else seeing this?

</comment><comment><USER40> would love to see a frontend framework that uses jQuery syntaxes only.</comment>


5 year old uses $150 prosthetic hand thanks to 3d printing - <AUTHOR> http://hackaday.com/2013/02/08/3d-printed-prosthetic-hand-helps-out-for-about-150/#more-94217

<comment><USER2> This is awesome, brightened my day. Thanks for sharing.</comment>


Abu Dhabi Bets on Food Delivery Boom with Investment in Glovo - <AUTHOR> https://www.bloomberg.com/news/articles/2019-12-19/abu-dhabi-bets-on-food-delivery-boom-with-investment-in-glovo <comment><USER2> I wonder whether this constitutes a golden age of wealth transfer from oil states to the average persons pocket. Food delivery is notoriously difficult to make any money in with few market players able to turn anything resembling a profit in this area, however consumers get to enjoy effectively subsidised services at a great discount. This surely has to come crashing down when interest rates rise.</comment>


Etude for iPad is out - <AUTHOR> http://etudeapp.com/

<comment><USER2> It looks lovely, and I'll probably grab it (especially at that price). However, as an Etude for iPhone user, I have to say - you really need to get some more scores into the store. At the moment, months after launch, you still only have material from 21 composers. Everyone I've shown it to loves it, but it's a really hard sell with such a limited selection. I've no problem with paying for sheet music, and I'd probably pay _more_ for the convenience of this format - it just needs to be there!

<comment><AUTHOR> Also, it's free if you bought the iPhone version.

<comment><USER2> That, I didn't realise. Great value :). Almost too great - I'd have paid for an upgrade!

</comment></comment></comment><comment><USER3> I can see how this could be convincingly better than the analogue equivalent, and worth buying an iPad for (if I still had a piano):

* Is page-turning easy? With paper you have to carefully dog-ear the sheet music so that you can grab the corner and turn the page without breaking flow. A simple one-finger swipe or tap would be less disruptive to playing.

* On-demand sheet music purchase is a great idea, if the catalogue is comprehensive enough. It would be great to be able to go from hearing a great piece on the radio to having the score in front of you in minutes.

I assume you need music to be converted so that you can support the synthesiser and simulated keyboard. To bootstrap, can you take existing sheet music unconverted (just scanned, say) and display it without those features? TBH I'm not sure I see the utility of watching the keypresses anyway (maybe because I haven't tried it).

* As well as hearing a synthesised version of the piece, what about a link from the score to world-renowned recordings, to stream or purchase? I'd often struggle to learn some passages that seemed boring or repetitive, but to hear the same passage played with fluency and passion would be very motivating.

<comment><USER3> Also, it bugs me that it's Etude and not Étude, but I'm probably alone in that :)

<comment><USER4> Yeah, you are, because accents are often left off of capital letters in French.

<comment><USER3> Huh, didn't know that, but you're right (<http://en.wikipedia.org/wiki/French_alphabet#Diacritics>). I declare myself out-pedanted :)

<comment><USER3> Metacomment: I find it amusing that I got more upvotes for providing attribution for a refutation of my own minor criticism of Etude than for my original comment actually discussing Etude.

I guess I'm being rewarded for admitting and embracing my own wrongness!

</comment></comment></comment></comment></comment><comment><USER5> I've heard about Etude several times on HN, but only in reference to iP* - does anyone know if there are plans for an Android app?

</comment><comment><USER6> Is there anyway to tap to reposition the cursor and play? Loops? A/B?

<comment><USER7> I would love this - it would be an essential feature for practicing difficult sections.

<comment><USER8> Indeed the first thing that I tried was to pinch-spread across a section in hopes that that would turn the width I had specified into a looped playback region.

Going to have some fun with this. Bravo!

</comment></comment></comment><comment><USER9> Awesome work on both the iPhone and iPad version :) I've been grumbling at everyone and their mother telling me about Etude because it's not an app for me, but it's certainly one I will and have recommended to friends that want to learn how to play a real piano. (And it's not for me only because I may suck, but I've been banging away at a piano for over ten years and can sight read most of the pieces in Etude in my sleep. Understandably I am not the audience for this app, a PDF reader with metronome is more suited to my needs... :) )

</comment><comment><USER10> Beautiful app. I've always wanted to learn how to play the piano, and this just lowered the barrier to entry by a mile. Thanks for making it.

</comment><comment><USER11> So does the app hear what Im playing and turn the page automatically for me? Huge pain-point for piano players.

</comment><comment><USER7> I've been holding off because of the reviews complaining about lag. Do those apply to the iPad version as well?

<comment><AUTHOR> Not sure. I think these people might have been using old phones with lots of other stuff running.

<comment><USER12> works great on my iPad.

</comment></comment></comment><comment><USER13> The price is a steal. Sure, Xelements is cool, but this completely is reason alone to buy the iPad. Congrats and hope that some day soon orchestras could have this.

</comment><comment><USER14> Did anyone else notice how the blue-ish marker lags behind the actual position of the piece during playback? Having that in a demo is kind of ridiculous...

</comment><comment><USER15> Sorry to nitpick, but the sound in the video is off! It's driving me crazy!

This almost makes me want to get an iPad... almost.

<comment><AUTHOR> Yeah, ffmpeg screwed that up. The h264 and flash versions play correctly.

I wish Firefox would just fall back to the flash version rather than going "Oh, it's not Ogg. I guess I'll just give up."

<comment><USER16> Also happens to me in Chrome.

I love the video but I would love it more as a lightbox closer to iPad size.

</comment></comment></comment><comment><USER17> Big congratulations! This alone is a reason to buy the iPad.

</comment><comment><USER18> Very cool, any chance you will be adding drums? :)

</comment><comment><USER19> beautiful app. bought, admired, and getting all nostalgic (I used to be a concert violinist but I stopped playing about 8 years ago)

</comment><comment><USER6> Why can't we practice on the piano in Etude?

<comment><AUTHOR> The reason the keyboard in the current UI is there is so you can see most of the keys and play the piece on a real instrument.

If I made it playable, people would just complain it's too small.

A new "practice mode" is coming in an upcoming update that gives you a big enough keyboard and lets you practice one hand of the piece.

</comment></comment><comment><USER20> is there a video of this iPad app somewhere? I just tried searching on youtube but couldn't find anything.

<comment><AUTHOR> There's a video on the front page.

</comment></comment><comment><USER21> Congratulations Dan!

</comment><comment><USER22> Good job!

</comment><comment><USER23> Congrats!</comment>


Lambda School's ISAs are being sold off to investors - <AUTHOR> https://twitter.com/dhh/status/1227297801341550592 <comment><USER2> A more recent thread with more comments: [https://news.ycombinator.com/item?id=22313379](https://news.ycombinator.com/item?id=22313379)</comment>


Librevault: Open source zero-knowledge peer-to-peer file sync - <AUTHOR> https://librevault.com/ <comment> Ar-Curunir I wish people would stop using the phrase "zero knowledge" willy nilly. It has a specific meaning within cryptography.

<comment><USER2> Yeah... I kept looking for the way this is ZK. Do they just mean that the files are encrypted on their servers and so they can't read them?

I understand accidentally stepping on a term from an adjacent field, but using it this way for a product that presumably is crypto-centric is a bit of a red flag.

<comment><USER3> I have no server infrastructure. ZK in this context means, that you can create an encrypted share. But, I think, it is not an appropriate term here.

</comment></comment></comment><comment><USER4> Can you describe your file encryption procedure? In the Meta::Chunk class the 'encrypt' function only computes AES-CBC with no MAC, but there are calls to compute_strong_hash at other points in the library. There are references to a (non-cryptographic) Rabin hash as well as SHA2-224 and SHA3-224 in these functions - which is used for ciphertext authenticity and integrity?

<comment><USER3> During the indexing procedure, the value of SHA3-224(AES256(data)) is computed for each chunk.

Then, the list of these hashes is placed into Meta structure. After that, this Meta is ECDSA-signed using a EC point, decoded from A-type secret.

Any other type of secret contain the public part of EC point and can verify the signature.

<comment><USER4> So is there a per-chunk MAC, or do you rely on the signed hashes of ciphertext for the integrity and authenticity of each chunk?

<comment><USER3> Actually, there is per-chunk HMAC support in the protocol and present revisions add HMAC for each chunk into Meta: [https://github.com/Librevault/librevault- common/blob/master/...](https://github.com/Librevault/librevault- common/blob/master/src/Meta_s.proto#L68)

This HMAC is computed over plaintext chunks and used to determine, if we already have this chunk in database (because of random IV we get different hash of ciphertext every time), not for verification.

And what is wrong about verifying integrity and authenticity by hash-then- sign?

<comment><USER4> Maybe nothing, but it's just kind of a weird, nonstandard way of doing things. Also it's not immediately obvious to me that your method meets modern security definitions like IND-CCA2.

</comment></comment></comment></comment></comment><comment><USER5> Please add some basic instructions on how to use this on a local network.

I tried the following:

1\. Download app and install

2\. "Add folder" new key, select folder I want to sync. Ok. Folder did not then appear in the list as expected. It should it appear in the window straight away, right?

3\. I then installed the software on another computer.

4\. On other computer clicked 'Open URL' and added "lvlt:<secret_key_from_step_2_above>". OK. This did nothing either.

Where am I going wrong. Please add a basic getting started to your site which shows the basic steps to add a folder on one computer and then set up another computer to sync the folder down onto.

Looks like a great little app. thx in advance for your assistance.

</comment><comment><USER6> Sounds awesome. I think your website could use an explanation of the term "zero-knowledge".

<comment><USER3> Thank you for advice. This revision of the website is a stub, it does not contain any useful information, just some general words. It will be heavily reworked soon.

Also, I will add the comparison table with Syncthing, BTSync and some cloud storages, like Dropbox.

<comment><USER4> Have you thought about just not using the phrase "zero knowledge" at all?

<comment><USER3> I don't use it on GitHub page. It updates more frequently than the site. The next revision of the website will contain a new motto, but I have to make a new motto first.

</comment></comment></comment></comment><comment><USER7> Very nice. It seems a lot less janky than Syncthing (web UI, constant process restarts)

<comment><USER8> SyncTrayzor (windows client implementing synching) is pretty nice. It runs as a tray icon but when you click it, it loads like a native app even though it's a web app (similar to electron)

<comment><USER3> But it is still a web ui, not a native one. Also, SyncTrayzor itself is not cross-platform, so Linux users have to install syncthing-inotify for watching the directories for changes.

<comment><USER8> It's network compatible with and syncthing clients. Syncthing is an open standard with dozens of client apps.

</comment></comment></comment></comment><comment><USER9> Looks great! Any plans to document the synchronization protocol?

I've been using SyncThing but it lacks the main feature I need, which is to selectively synchronize only certain files to other devices.

<comment><USER3> Yes. The protocol is pretty stable now, it hasn't been changed for a while and has necessary extension points, so I can add more features in the future. I will publish the protocol specification in two weeks.

</comment></comment><comment><USER10> Are there any plans for a headless server. I'm still looking for a good way to sync my NAS to my desktop.

<comment><USER3> It is headless by design. GUI and synchronization daemon are separate applications, that communicate using the WebSocket protocol. So, you can install your sync daemon to NAS and you are good.

But to let you control the daemon via the net, I am making Web UI, that will enable you to fully control synchronization process from your browser.

</comment></comment><comment><USER11> Something I just noticed after testing Librevault today... Extremely low CPU/power consumption. Nice!!!

</comment><comment><USER12> How does it compare to syncthing et al?

<comment><USER3> There are certain differences between Librevault and Syncthing now:

* Librevault is simpler for the end user. From my perspective, Syncthing doesn't aim to be user-friendly. More like geek-only solution.

* Librevault supports adding a folder by key, like BTSync. And also, it supports a URL scheme for adding a new folder just by clicking it in the browser: [https://librevault.com/blog/lvlt-scheme/](https://librevault.com/blog/lvlt-scheme/)

* inotify, fsevents, kqueue and ReadDirectoryChangesW support out of the box. Syncthing requires you to install a separate third-party plugin for this.

* DHT support, so it doesn't need any trackers for peer discovery. DHT is Mainline DHT, so it can connect to BitTorrent clients and ask them for peers. It means, that Librevault can participate in the world's largest distributed peer discovery network and will not suffer the lack of DHT nodes.

Also, it has a proper (!) desktop UI inspired by BitTorrent Sync 1.3.

</comment></comment><comment><USER13> Geez, that's what I am exactly working on off-work, slowly but the idea is nearly 100% identical.

<comment><USER14> Heh, me as well ([https://github.com/rakoo/rakoshare](https://github.com/rakoo/rakoshare)) although I've been trying other technologies and combinations lately, slowing the development a lot.

</comment></comment><comment><USER15> Looks interesting I am looking for a new private file sync application. Any plans for Arch Linux (Can build it myself but find AUR easier) and android?

<comment><USER3> Yes, I am planning versions for Arch and Fedora soon. Android version is in plans, too, but I need to make desktop version stable first.</comment></comment>


How Sinclair Broadcasting puts a partisan tilt on trusted local news - <AUTHOR> http://www.pbs.org/newshour/bb/sinclair-broadcasting-puts-partisan-tilt-trusted-local-news/ <comment><AUTHOR> Unfortunately, HN policy prohibits my changing this title.

PBS did a good report on this development: Sinclair Media is the biggest owner of local TV news (reaches over a third of homes across the nation), and are working towards a merger to control a bigger share yet. However, they are pushing out certain talking points (and other things that have been criticized) across all these stations (these are illustrated in the PBS report).</comment>


Is Protonmail Down? - <AUTHOR> https://mail.protonmail.com/login <comment><AUTHOR> I get 503 on web application and no new emails upload in mobile app despite the incoming notifications.</comment>


What has AngularJS ever done for us? - <AUTHOR> http://www.jokecamp.com/blog/what-has-angularjs-ever-done-for-us/ <comment><USER2> I'll tell what the Romans didn't give us, they didn't give us decent documentation, that's what!

</comment><comment><USER3> Rails had the same civilising effect, and the same mild backlash when people eventually grew out of it.

Heavy but well thought out frameworks, we salute you! (Even if we don't use you for new projects anymore.)

</comment><comment><USER2> Angular is not a framework, it's a very naughty boy. Now piss off. (Actual quote from Sergey Brin)

<comment><USER4> Any proof?

</comment></comment><comment><USER5> Single page apps are the problem. Angular made a bad idea more achievable. For this it deserves blame, not praise.

Everything else falls out from that: if you don't try to pull off a gigantic SPA, you don't need all the rest of the crap on the client side because your given unit of UI is much smaller than the entire app.

People will eventually look at angular the way they look at J2EE. "Great community support, corporate standard, lots of documentation, no one ever got fired..."

<comment><USER6> > Great community support, corporate standard, lots of documentation, no one > ever got fired...

Is this a bad thing?

</comment></comment><comment><USER7> Author here. I do like AngularJS but I believe you can swap "the Romans" for many different languages and frameworks. Sort of a tools versus getting things done argument.

</comment><comment><USER8> You can get great dependency injection with steal.js [http://stealjs.com/](http://stealjs.com/)

CanJS [http://canjs.com/](http://canjs.com/) can do single page apps, data- binding, and is modular, though it takes a little more configuration than Angular. You might appreciate its ability to be configured though.

You don't need Angular and all its troubles!

</comment><comment><USER9> Dependency Injection and Modularity are not the same thing. Modularity implies swappability, whereas Angular typically involves a "controllers space" or silo'd services.

AngularAMD is interesting. It's really nice to load jQuery on a per-route basis, where I can isolate module dependencies and generally think of plugins to my applications from an external perspective. RequireJS facilitates an ecosystem where plugins AND modules exist side by side. AngularJS doesn't account for _plugins_ (and "pages" are interesting combinations of modules and plugins which also can sit on the same level), which sit on the same level as modules.</comment>


Ca-certificates: removal of SPI CA - <AUTHOR> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=796208 <comment><USER2> Related to this, the Debian nss package removed the SPI CA today, in version 2:3.21-1:

[https://lists.debian.org/debian-devel- changes/2015/11/msg025...](https://lists.debian.org/debian-devel- changes/2015/11/msg02509.html)

This has been planned for a while now. Between Let's Encrypt and StartCom, Debian and SPI don't need to run a CA anymore, especially not a CA that only Debian systems trust. Several Debian sites used to use SPI certificates, back when HTTPS seemed like an optional nicety. These days, every connection should use HTTPS, so Debian sites need to use certificates that all browsers trust, which they can easily do now.

SPI actually got an offer to cross-sign their root so that all browsers would trust it, but the consensus was that SPI didn't want to take on that risk given the availability of multiple other free CAs.

<comment><USER3> With the practicality of something that only worked on Debian systems aside...

 _> Between Let's Encrypt and StartCom ..._

What do we have?

StartCom doesn't allow their free certificates to be used for commercial purposes and will hold you to ransom if you need to revoke it (eg. after a major vulnerability which exposes private keys).

Let's Encrypt only issue certificates that are valid for 90 days[0] because they want you to automate renewal by having your server automatically run their script which needs root privileges, and they use Google as the gatekeeper of who is allowed a certificate[1].

We are still short an option that issues certificates that are valid for 1+ years, which can be revoked at any time, can be used for any purpose and doesn't pass every request to a corporation for approval.

[0] [https://letsencrypt.org/2015/11/09/why-90-days.html](https://letsencrypt.org/2015/11/09/why-90-days.html)

[1] [https://letsencrypt.org/2015/10/29/phishing-and- malware.html](https://letsencrypt.org/2015/10/29/phishing-and-malware.html)

<comment><USER2> > Let's Encrypt only issue certificates that are valid for 90 days[0] because > they want you to automate renewal by having your server automatically run > their script which needs root privileges

That script is FOSS; you can see exactly what it wants to do. And it uses a documented protocol ("ACME"), so you can write and run your own script if you want, using several different ways to prove you control the server. The script provided by Let's Encrypt mostly serves as a proof of concept and a simple implementation for some common cases; various alternatives already exist that integrate will with various server software.

> and they use Google as the gatekeeper of who is allowed a certificate[1].

> [1] [https://letsencrypt.org/2015/10/29/phishing-and- > malware.html](https://letsencrypt.org/2015/10/29/phishing-and-malware.html)

I've never once seen a report of a site finding itself on that list without actually serving malware; I don't see any obvious basis for such a complaint.

> doesn't pass every request to a corporation for approval.

Let's Encrypt is run by "Internet Security Research Group (ISRG)"; quoting [https://letsencrypt.org/isrg/](https://letsencrypt.org/isrg/) : "ISRG is a California public benefit _corporation_ ". And personally, since I don't particularly want to see any trusted CA run by only one person, just about any CA will be a corporation of some kind. "corporation" is not a dirty word.

<comment><USER3> _> That script is FOSS; you can see exactly what it wants to do._

Any method of automatically renewing certificates, regardless of what script it used, is going to require the privileges needed to alter the certificate file. The only way to not run it as root would mean the certificate is editable by a non-root user. I don't want any script, no matter how open or free or vetted, to have the ability to alter the certificate on the server.

 _> I've never once seen a report of a site finding itself on that list without actually serving malware; I don't see any obvious basis for such a complaint._

It should not up to Google to decide if I get to secure my site or not, nor should Google be being informed every time I obtain or renew a certificate.

 _> "corporation" is not a dirty word._

Third-party corporation is what I meant. If I have decided to get a certificate from Let's Encrypt (or any other CA) that should be between me and them, Google, or any other third-party, shouldn't have anything to do with it.

<comment><USER4> > nor should Google be being informed every time I obtain or renew a > certificate.

Let's Encrypt actually log all certificates they issue to a number of public logs, including those operated by Google. See the "Certificate Transparency" section of their site which explains this, and provides a link to a tool where you can examine all such certificates: [https://letsencrypt.org/certificates/](https://letsencrypt.org/certificates/)

</comment></comment></comment></comment></comment><comment><USER5> Does anyone know of a tool for Windows and OSX that will audit all the certificates installed on a machine and tell you which ones are removed, compromised, or generally unrecognized?

<comment><USER6> Are there certificates that are "generally unrecognized" and are shipped by the two biggest OSs in use? That seems like an oxymoron.

<comment><USER7> You mean like the one Dell included?

<comment><USER8> Two actually! :)

</comment></comment></comment></comment><comment><USER9> Somewhat related, RedHat is working on sorting out the mess we're in regarding what certificates are shipped in various open/free software distributions and programs:

[http://seclists.org/oss-sec/2015/q4/374](http://seclists.org/oss- sec/2015/q4/374)

Whole text (but this is just the start of the thread, click through to read a handful of replies on the OSS-SEC list):

      Announcing https://github.com/RedHatProductSecurity
      /Certificates-Shipped/ From: Kurt Seifried
      <kseifried () redhat com>
      Date: Tue, 24 Nov 2015 21:38:35 -0700

      [1] https://github.com/RedHatProductSecurity/
      Certificates-Shipped/

      The idea is to create a comprehensive list of
      shipped certs/keys/etc by open source
      vendors/distributions/projects so that:

      1) we have a list of secrets maintained by
      external parties that we rely upon
      2) we can audit them and make sure we
      should be trusting them
      3) also spot changes more easily (since the
      existing corpus is available)

      I'm guessing there are some surprises
      waiting for us.

      --
      Kurt Seifried -- Red Hat -- Product Security
      (...)

[1] Split to avoid long unbreakable line in pre-text-box on hn:

[https://github.com/RedHatProductSecurity/Certificates- Shippe...](https://github.com/RedHatProductSecurity/Certificates-Shipped/)

Also submitted to hn seperately here:

[https://news.ycombinator.com/item?id=10630736](https://news.ycombinator.com/item?id=10630736)

</comment><comment><AUTHOR> Recently issued SHA-1 cert from this root: [https://www.ssllabs.com/ssltest/analyze.html?d=members.spi-i...](https://www.ssllabs.com/ssltest/analyze.html?d=members.spi- inc.org)

</comment><comment><USER10> When I was at Debconf 15 I tried looking at the schedule on my phone. It was confusing to have my Android phone complain about the debconf.org certificate, while my Debian laptop was fine with it.

</comment><comment><AUTHOR> FWIW, Ubuntu appears to inherit this cert from upstream.

<comment><USER11> I will remove it in our next updates.

<comment><AUTHOR> Thank you.

</comment></comment></comment><comment><USER12> A sensible move.</comment>


Do Developers Love Legalese? - <AUTHOR> http://blog.programmableweb.com/2012/05/25/developers-love-legalese/ <comment><USER2> Close on the heels of "bizarro incomprehensible homemade TOS/license" is using a standard license that doesn't match the ecosystem -- for example, using straight GPL rather than the Ruby License for a Ruby gem. If your license doesn't match the rest of the tools, many will choose an alternative if it's available.

(nothing against the GPL... just using it as an example).</comment>


Malcolm Gladwell: history will remember Bill Gates, forget Steve Jobs - <AUTHOR> http://www.theverge.com/2012/6/8/3072368/malcolm-gladwell-bill-gates-steve-jobs-legacy

<comment><USER2> He's right in that we won't remember either solely for the money the made. But Steve Jobs will be remembered along the lines of people like Thomas Edison. And he'll probably be studied in business classes for a very long time, both for the smart and not so smart moves.</comment>


What's so hard about histograms? - <AUTHOR> https://tinlizzie.org/histograms/ <comment><USER2> What a beautiful presentation!

Tangentially: I am really enjoying the book "All of Statistics" as a reference for better understanding things like histograms, kernel density functions, etc, and their parameters.

[https://www.amazon.com/All-Statistics-Statistical- Inference-...](https://www.amazon.com/All-Statistics-Statistical-Inference- Springer/dp/0387402721)

<comment><USER3> Aren't you refererring to "All of non-parametric statistics"? [https://www.amazon.com/All-Nonparametric-Statistics- Springer...](https://www.amazon.com/All-Nonparametric-Statistics-Springer- Texts/dp/0387251456/ref=pd_sim_14_2?_encoding=UTF8&pd_rd_i=0387251456&pd_rd_r=A80KVD50R9SXCVJR2ZF9&pd_rd_w=kMY5a&pd_rd_wg=pdqY8&psc=1&refRID=A80KVD50R9SXCVJR2ZF9) Either way I can't recommend these books enough, really opened my eyes to the inner workings of statistics in a rigorous yet accessible way.

<comment><USER2> Just ordered that one too :-).

I am actually most interested non-parametric statistics, especially to "reformulate" as many statistical tests as possible using a small number of robust primitives (like the bootstrap.) More pointers in that direction would be very welcome :-)

Tangent to a tangent: The other most enjoyable stats book I have found is "Statistical Modeling: A Fresh Approach" [http://www.mosaic- web.org/go/StatisticalModeling/](http://www.mosaic- web.org/go/StatisticalModeling/)

</comment></comment></comment><comment><USER4> If you're interested in histograms, I highly recommend _" Expressing complex data aggregations with Histogrammar"_ by Jim Pivarski, where he talks about how for decades histograms have been used in unique ways to do amazing things in high energy physics (HEP, arguably the original Big Data field in compsci):

[https://www.youtube.com/watch?v=mB4Chl0ly-g](https://www.youtube.com/watch?v=mB4Chl0ly-g)

One thing early on is that HEP histograms treats histograms as a kind of _accumulator_ that can stream in data (because the amount of data processed was typically too big to load into RAM all at once), instead of a chart. From that starting point you can add, divide, multiply histograms with histograms to build crazy things.

The results are no longer really histograms of course, but it's fun to see how something that we just think of as a chart can be (ab)used like that.

</comment><comment><USER5> Kernel density plots should be preferred to histograms in nearly all cases. Histograms can be seen as a kernel density plot with a uniform kernel that has been sampled. Since a kernel density plot with a uniform kernel has unbounded frequency content, this sampling introduces _aliasing_ , which is why you get all of these strange effects when adjusting the bin width and offset. In fact, if the distribution of your data happens to be a sine wave, then the histogram will also be a sine wave, but, due to aliasing, it may have a different frequency and phase.

For a kernel density plot with a Gaussian kernel, the kernel size does effect the result, but the situation is much better than with histograms for two reasons:

1\. The kernel density plot varies smoothly as the kernel size changes, and so there is greater confidence that you have seen the whole story by only looking at a few kernel sizes.

2\. You can construct a kernel density plot with a larger kernel given only a kernel density plot with a smaller kernel. Since the convolutions of two Gaussians produces a new Gaussian with a variance equal to the sum of the input variances, you only have to convolve the small-kernel plot with another Gaussian to produce the large-kernel plot. This, again, means that you have more confidence that you've seen the whole story by looking at only a few kernel sizes.

As a side note, there is technically a 1:1 relationship between 1D datasets and kernel density plots with a Gaussian kernel, and so in theory you don't lose any information by constructing the kernel density plot. In practice, however, you _do_ lose information due to limited precision.

</comment><comment><USER6> When you think you want to plot a histogram, it's often a better idea to plot a (empirical) cumulative distribution [0] instead. You don't have to worry about how to select your bin limits and you can usually put several in the same plot for comparison without making it unreadable due to overlap.

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

<comment><USER7> I like using cumulative distributions because they make small changes in the data a little more obvious. e.g. if all the buckets are 10 but there's a section where they're 11, that difference will show up in a cumulative distribution as a bend in an otherwise straight line, which in my opinion is a much easier difference to see

<comment><USER8> isn't seeing a little hump in a pdf clearer?

</comment></comment></comment><comment><USER9> Is there a way to read this decently on mobile?

I've tried Firefox reading mode as well as pocket but they both cut off large parts of the text.

</comment><comment><USER10> In my introductory programming class, we teach a few basic forms of chart visualization. By far, students struggle the most with Histograms. Even more frustrating, they love line plots and attempt to use them everywhere. Despite my explanations that you can almost _always_ use histograms, and you can almost _never_ use line plots! Yet they go with what they find more intuitive...

<comment><USER11> Depends what you're doing I'd say. In physics based modeling, which is used more in e.g. engineering, line plots are often very useful. When examining noisy real world data, not so much.

</comment></comment><comment><USER12> Got me curious about non 1D histograms [https://www.r-bloggers.com/5-ways-to- do-2d-histograms-in-r/](https://www.r-bloggers.com/5-ways-to-do-2d-histograms- in-r/)

</comment><comment><USER13> The History of Histograms (vldb paper) [http://www.vldb.org/conf/2003/papers/S02P01.pdf](http://www.vldb.org/conf/2003/papers/S02P01.pdf)

</comment><comment><USER14> Unfortunate that they're talking about distributions and yet the very first example they use ("The paintings of Bob Ross") isn't a distribution.

</comment><comment><USER15> > We notice that you're not using the Google Chrome browser. You're welcome to > try continuing—but if some parts of the essay are rendering or behaving > strangely, please try Chrome instead.

what a world

<comment><USER16> 20 years ago we had the "this site works best in Internet Explorer" buttons on way too many sites. Plus ça change...

That said, the site works just fine in Firefox, Edge and even IE11 too. So, if anything, the message is a sign of sloppiness in not even bothering to check.

<comment><USER17> And Safari. Also, it's not very responsive (at least for mobile)</comment></comment></comment>


Why I care about Firefox OS fading away - <AUTHOR> https://gist.github.com/SunboX/1fb5a3ebc520e4facf47 <comment><USER2> IMO the bigger reason to lament the loss of competition here is the app model: Firefox OS was pushing for "apps" to be web apps. That seemed a lot more open to me than pushing for apps to be proprietary (Android, iOS, Windows, etc.). As great as mobile devices are, their walled gardens stifle creativity, privacy, and choice.

<comment><USER3> Apple was pushing for "apps" to be web apps when they first released the iPhone as well [1], with Steve Jobs going as far as to say that native apps would potentially "damage the phone system". It wasn't until after the iphone was jailbroken, and people kept insisting on more powerful development choices that they started on their app store. People have been saying that webapps are the future for a decade now. At this point, I have to say it's never going to happen.

[1] [http://www.apple.com/pr/library/2007/06/11iPhone-to- Support-...](http://www.apple.com/pr/library/2007/06/11iPhone-to-Support- Third-Party-Web-2-0-Applications.html)

<comment><USER4> I think that one day, web apps by default could work, but before that can happen the web must see sweeping change.

The lackluster performance and high resource usage associated with web apps is a direct consequence of the complex patchwork nature of each component involved. Quite simply, the web was not designed to be used the way we're using it, and evolving standards have made browser rendering engines horrifically complex (and in some cases convoluted).

What's needed is a fundamental reimagining of HTML, CSS, and the DOM at minimum with little to no regard for legacy. In the 90s, we didn't know what we needed but now the picture is crystal clear. Should we use this knowledge to design a new web, I'm positive that the result would be just as open as the web is now while performing tens or hundreds of times better — it'd likely be good enough to make web apps competitive with native apps under a far wider set of circumstances.

<comment><USER5> You'll have to explain why in details, not at a high level. In particular the fact that a replacement could perform "tens or hundreds of times better" is an extraordinary claim.

CSS has tons of problems, but almost every replacement for CSS that I've seen proposed would almost certainly have worse performance characteristics than CSS, optimally implemented, would. Most of them kill parallelism and kill opportunities for optimal GPU usage—they're proposed cures that are worse than the disease. The problem is mostly that browsers don't implement CSS as well as they could due to legacy, not that the technologies are fundamentally flawed (though this is not to say that they're not improvable, far from it).

To create a better architecture, you first need to have an in-depth understanding of what the problems in CSS actually are. Otherwise, you'll just trade one set of mistakes for another. (In particular, a CSS replacement that optimizes for Web developer productivity will _not_ necessarily have acceptable performance characteristics—too often, people assume that "easy to develop in" implies "runs fast", which in fact these concerns are often in direct opposition.)

<comment><USER6> can't wait for servo "strict mode" css!!

</comment></comment></comment></comment></comment><comment><USER7> I don't want to sound like the know-it-all smartass here, but from the moment Firefox OS was announced I gave it a negligible probably of amounting to anything and was really baffled that Mozilla decided to focus their efforts in that direction.

I don't think they appreciated just how brutal and unforgiving the smartphone market is. Apple makes money on it, but they spend billions on R&D and billions more on marketing. Samsung makes money, but a lot less than they used to and only because they own their entire component pipeline and _also_ spend billions on marketing. Google makes money, because they own the operating system that 80% of the phones use and use it to push people to their wide array of services. Everyone else is breaking even at best, and hemorrhaging cash at worst. Think how many billions Sony and Microsoft and Nokia and Palm and Blackberry spent on their smartphone efforts only to get shoved to the sidelines. This is a market where you've gotta pay _big_ in order to play; to be honest it was downright silly of Mozilla to expect that they could get a foot in the door.

<comment><USER8> Isn't this basically the same argument as that Debian can't make any inroad into servers because IBM and Microsoft spend untold sums on R&D and marketing?

What has been killing Firefox OS (and nearly everything else Mozilla does outside of Firefox) is their peculiar abhorrence for _anybody else_ writing anything in native code.

<comment><USER9> No, what is making or killing a mobile OS is whether some key apps are available or not. Many people don't really mind using an OS or the other, but they absolutely need eg. WhatsApp. The unwillingness or WhatsApp to write a mobile web app - or to let a 3rd party do it - made more damages to FirefoxOS than anything else writing in the comments so far.

<comment><USER8> But that's true of any platform ever. You need third party developers to either target your platform or a platform your platform is compatible with (like the JVM).

Mozilla wants to use the web as that platform _exclusively_ , which is fine if everybody is _already_ making everything for the web _and_ there is nothing of importance you can do with native code that you can't do from the web. But neither of those is true so their strategy fails.

<comment><USER5> > Mozilla wants to use the web as that platform exclusively, which is fine if > everybody is already making everything for the web and there is nothing of > importance you can do with native code that you can't do from the web. But > neither of those is true so their strategy fails.

There are things you can do on iOS that you can't do on Android (e.g. Apple Pay), and vice versa (e.g. Google Now). iOS fails the "there is nothing of importance you can do on Android that you can't do on iOS" test, and Android fails the "there is nothing of importance you can do on iOS that you can't do on Android" test. Yet here we are, with two successful platforms.

I think the truth is a lot more nuanced, and in particular I think the emphasis on "native code" is a convenient red herring. (Android isn't really native code for anything but games, and iOS Objective-C is technically native code, but that Smalltalky object system is not up to C++-level performance, so the distinction doesn't mean much.)

<comment><USER8> > iOS fails the "there is nothing of importance you can do on Android that you > can't do on iOS" test, and Android fails the "there is nothing of importance > you can do on iOS that you can't do on Android" test. Yet here we are, with > two successful platforms.

At which point you have to ask whether the missing things are actually that important.

> I think the truth is a lot more nuanced, and in particular I think the > emphasis on "native code" is a convenient red herring.

"Native code" in this context is as distinguished from aggressively sandboxed javascript received over the network in real-time. It's not only about performance. It's about the app still working where there is no wireless signal, or being able to read or write device-wide settings or files, or make a VPN work, etc.

<comment><USER5> > At which point you have to ask whether the missing things are actually that > important.

Right. And the choice of programming language isn't.

> "Native code" in this context is as distinguished from aggressively > sandboxed javascript received over the network in real-time... It's about > the app still working where there is no wireless signal, or being able to > read or write device-wide settings or files, or make a VPN work, etc.

Firefox OS had all of those capabilities (maybe excluding VPN depending on your definition--but if your definition of "making a VPN work" excludes Firefox OS it excludes iOS apps too). Firefox OS was based on locally installed apps.

<comment><USER8> > Right. And the choice of programming language isn't.

The platform isn't just the language.

> Firefox OS was based on locally installed apps.

Then I have no idea what we're talking about.

So the point of Firefox OS was supposed to be what, you make the UI using HTML and javascript but then it runs locally and exposes system call wrappers through javascript?

That's not actually so bad of a concept, but then you have the opposite problem. Nothing that does anything you can't do in a traditional web page is portable outside of Firefox OS so you have no user base to attract developers.

It seems like they're trying to compete with _Android_ when they should be trying to compete with _Java_. Make a runtime that runs the Firefox OS apps on Debian and Android and Windows. That would be interesting.

<comment><USER5> > That's not actually so bad of a concept, but then you have the opposite > problem. Nothing that does anything you can't do in a traditional web page > is portable outside of Firefox OS so you have no user base with which to > attract developers.

Yes, I'd agree that is/was much more of a problem than the technology stack itself.

> Make a runtime that runs the Firefox OS apps on Debian and Android and > Windows. That would be interesting.

There is such a thing: [https://developer.mozilla.org/en- US/Marketplace/Options/Open...](https://developer.mozilla.org/en- US/Marketplace/Options/Open_web_apps_for_desktop)

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER3> The death of FirefoxOS was inevitable, because of two words that the supporters dread. Native Apps. If your problem did not match the things that Javascript was good at, you were completely out of luck. Every other platform has a way of writing your app in different languages. The iphone has native swift and cocoa, plus javascript, plus lua, plus a whole host of other choices. Android has java, javascript, and anything else that can be run via jni. Windows has WinRT, which doesn't offer native code, but does offer anything that can be run under the CLR -- C++, C#, Javascript, etc. Firefox OS's sticking with just javascript meant that it was hamstrung from the start, with much less ability to create apps that really stood out, leaving it to wallow in mediocrity.

<comment><USER5> There aren't any substantive differences between the CLR and the minified JS+asm.js model (or, even more so, the minified JS+Web Assembly model).

There _are_ differences, but they're details. CLR IL is quite high level.

In general, I feel people oversimplify the "Web vs. native" performance debate to differences in programming languages, because programming languages are easy to tell apart (unlike for example rendering stacks) and it's easy to benchmark them. But I probably wouldn't even put the JS vs. Obj-C or JS vs. Java dichotomy in the top 5 reasons for any performance difference.

<comment><USER3> There are rather substantive differences. For starters, the CLR doesn't have to be the IL anymore; since Roslyn and the WinRT framework, you can compile down to native code. However, the most important things are what the CLR gives to the developer that Javascript doesn't.

Syntax-wise, the CLR's threading is much more flexible -- you can have your workers talk to each other directly when that's the most convenient way of doing things, instead of the Web Workers model where everything has to pass through the main thread. The CLR also supports more than two number types, which is useful in a number of situations, such as art programs, where most if not all of your actions are going to be against smaller types. Web Assembly fixes some of these problems, like providing reasonable number types, but at the same time, ignores other flaws that still exist, like a lack of vector types, which is something nearly every modern processor has and uses for improved performance.

The problem with Javascript, and its various extensions and adjuncts is that it still suffers from the same walled-off mindset that it has for the past fifteen years. Numbers are numbers and you're crazy if you want anything other than these beautiful 64 bit floats, a compact, easy to parse bytecode format is an affront to the open web, even if the alternative is a hack that is just as unreadable, and threading will just lead to programs crashing. Javascript may be fine if you're delivering a web page, but the tools it gives make it woefully unusable for near anything else.

<comment><USER5> Nope. asm.js as implemented in Firefox supports native integers and SIMD. SharedArrayBuffer gives you threads--but honestly this is a red herring, with apps barely making any use of multicore and iPhones being limited to 2 cores anyway. Web Assembly gives you 64 bit ints.

"Compact, easy to parse bytecode" is also irrelevant. JS is easy to parse. And the parser is such a tiny part of a JS engine it doesn't matter at all in practice for complexity. It's an aesthetic concern.

The actual performance problems Web apps hit have nothing at all to do with any of the areas you describe anyway. You think the Facebook app is making heavy use of custom SIMD or multicore? The SIMD support in Firefox gets barely any use because apps can't find a use for it. Apple isn't adding cores to their phones because apps aren't using them. And so on.

<comment><USER10> Apps barely making use of multicore? Maybe in your web world.

We would not have been able to ship the apps we've shipped were it not for being able to exploit shared state concurrency.

... and yes, I think the Facebook app is making heavy use of multicore and SIMD; multicore directly, and SIMD by way of the heavily optimized native frameworks shipped with the device.

I've previously made of NEON to get ideal performance out of critical path file decoding on lower end devices, where having those additional CPU cycles available made the difference between stuttering and smooth UI.

Stop trying to fit native apps into a box you've defined to match your web- centric experience, where low expectations are simply the norm.

<comment><USER5> If apps were using multicore all over the place, the hardware vendors would have responded by increasing the number of cores on the CPU as they planned to. Instead, they didn't, because people aren't using it.

I don't see any particular use the Facebook app would possibly have for multicore. Image and video decoding perhaps, but browsers already multithread those.

The point about native frameworks making use of SIMD applies equally to the SIMD that the browser engine components internally use.

Finally, I've been writing native code almost exclusively for the past five years.

<comment><USER11> In this context threading is less about making maximum use of multiple cores and more about "never blocking the main/UI thread". Even on a single core device you usually need to start offloading heavy computation to a background thread to keep the UI responsive.

Even today I'll run into websites that lock up a browser tab because they're running a whole mess of Javascript soup (typically jQuery). I know we were promised WebWorkers like 5 years ago but does anyone actually use them?

<comment><USER5> Yes, I fully agree that this is one of the biggest problems. Web developers don't treat Web Workers like they treat Blocks in Objective-C, and this is causing performance problems. On the engine side, we have to figure out how to make workers and off-main-thread work just as easy to use as in Objective-C and Java--I believe this is doable with effort.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER12> My main problem with all these "well, it failed" alternative operating systems for phones are: I couldn't even buy them in the first place. I tried, but there was no hardware available in my region that ran on my network etc. The closest thing we've got is the nexus, but what we need is a 'standard' (de- facto or otherwise) phone like x86 PCs had to be in order for linux to take off.

<comment><USER13> >in order for linux to take off

We need Linux on the Web!

[https://linuxontheweb.appspot.com](https://linuxontheweb.appspot.com)

<comment><USER14> That isn't Linux.

</comment></comment></comment><comment><USER15> I don't really care. And that makes me sad.

I was really excited about Firefox OS when Mozilla was announcing it. I've been playing for years with free smartphones like Neo Freerunner, GTA04 and (surprisingly free) Nokia N900, and the situation on Android market was far from being good for me. I still cannot really change my phone without downgrading my user experience. Firefox OS offered me some hope.

Unfortunately, it turned out that Firefox OS was just Android-me-too, without much of added benefits when it comes to user freedom. Sure, the development model was more like baazar than cathedral, but how did it matter if most of the Firefox OS devices out there were as blocked and closed as Android ones?

Mozilla even had a certification program you needed to pass in order to use Firefox OS brand with your device - and guess what? Closed crap like ZTE Open was passing the certifications. Mozilla was basically endorsing devices you had to break into in order to be free to use them as you wish. How is that different from Android?

I had high hopes, but Firefox OS disappointed me.

</comment><comment><USER16> I managed to get a developer phone with Firefox OS at a dev conference. I can say that hands down it's the worst phone I've ever tried using. I used it as my primary phone for a week and the operating system made me avoid doing anything. Making a phone call was the most pleasant, but if I had to send a text or try and use one of the apps I just found myself locking the phone. The webapp as a phone app idea was just really unpleasant especially if you had limited connectivity.

I admire Mozilla for trying, but that OS would have taken a miracle to get it working in a good fashion.

<comment><USER17> I seriously considered buying a ZTE - until I checked out user reviews online. The os is universally hated.

</comment></comment><comment><USER18> > "Tier 3"

What's the down-up bunny ears? Does this mean anything or just a typo?

<comment><USER19> Quotation marks are done differently in different languages [1]. The author of the article is André Fiedler [2], and he's from Saxony/Germany, where they apparently use, what you called down-up bunny ears [3].

[1] [https://en.wikipedia.org/wiki/Quotation_mark#Summary_table_f...](https://en.wikipedia.org/wiki/Quotation_mark#Summary_table_for_all_languages)

[2] [https://github.com/SunboX](https://github.com/SunboX)

[3] [https://en.wikipedia.org/wiki/Quotation_mark#German_.28Germa...](https://en.wikipedia.org/wiki/Quotation_mark#German_.28Germany_and_Austria.29)

</comment></comment><comment><USER20> The bigger question is What will happen to those who has Firefox OS shipped like Panasonic TV. ( Actually that is likely to be the only popular Devices using it )

At first they say Firefox OS isn't going away and it will support IoT, so development will continue. Panasonic even made a PR just so people don't freak out and stop buying their TV set.

Now it is moved to Tier 3 support...

I really don't know whether i should blame Mozilla or Panasonic on this one.

</comment><comment><USER21> > Let's say Android does not implement the new cool feature

If there is enough demand for it, someone can do a Kickstarter, raise enough money, build it and push it into Android. Or some other company can fork Android, add the cool new feature and steal Android's market share.</comment>


Ask HN: Good Delicious Alternative? - <AUTHOR> Soon Delicious will be down. So what good alternatives you know?<p>I am trying right know https://raindrop.io . It looks really promising. Of course we have http://pinboard.io, but ui is too ugly for me. <comment><USER2> try [https://www.pearltrees.com/](https://www.pearltrees.com/) I've been using it for a few years and am a pro member for almost 3 years straight. Good organiser - visual, pro versions got option to archive web pages too. And good way to find human curated related 'pearls'.

</comment><comment><USER3> Try TagPacker. Nice design, great browser plugin, and it's free.

</comment><comment><USER4> If all you want is simplicity, try diigo.</comment>