Safari Push Notifications - <AUTHOR> https://developer.apple.com/notifications/safari-push-notifications/ <comment><USER2> Safari is my #1 browser to download chrome. It seems to always fall behind the HTML5 features that matters most. For example, WebRTC lets developers integrate real time audio/video/data awesomeness into websites and its readily available in firefox and chrome, but not safari.

<comment><USER3> > _For example, WebRTC lets developers integrate real time audio /video/data > awesomeness into websites and its readily available in firefox and chrome, > but not safari._

And how does WebRTC matters for everyday use at the moment?

I haven't seen anything that is not a tech-demo or similar relying on it.

It would be nice to have it in Safari too (and I use Chrome myself), but it's hardly a deal breaker (or even relevant).

<comment><USER4> Arguably, it is because the lack of browser support that makes WebRTC "not matter for everyday use". We would see a lot more use if IE and Safari would implement it. And not only for video conferencing (such as [https://appear.in](https://appear.in)), but also for multiplayer gaming, filesharing, audio recording+++

</comment></comment></comment><comment><USER5> Now we just need a standard for this, as not many people use Safari in Mac (compared to others as a whole).

<comment><USER6> That's really really not possible if you understand the basics of how this works. This is NOT a browser API, this is an API for Apple's own cloud push notification infrastructure.

This technology can ONLY work with a giant third-party server doing the legwork.

</comment></comment><comment><USER7> This is truly a good step forward. I am not sure why it's called Safari Push Notification. As per their docs, it is primarily an OS function. So technically it should be possible to do this using Chrome on Mac as well. However, it is possible they bundle it with Safari. Then they can have push notifications in Windows as well.

<comment><USER8> How do you anticipate getting the push token from Chrome if not via the Safari-specific JavaScript APIs?

<comment><USER7> That's a good point. Then why do they need OS support? Why not run a simple background service when Safari is installed and make it cross-platform.

<comment><USER8> Apple does not consider cross-platform features to be in their interest: they make money on hardware, and consider quality software to be a feature of that hardware. Safari itself is not cross-platform: it was temporarily distributed for Windows, but it has not been updated in a year and a half; you can't add a cross-platform background service to a web browser that is only distributed bundled with an operating system ;P. (As far as I understand, Safari for Windows mostly existed just to get web developers to support Safari better, but as they've now gained so much marketshare they discontinued that project.)

<comment><USER9> > [Safari] was temporarily distributed for Windows

Meaning from June of 2007 to this day. 6 years is temporary for a browser as much as living on earth feels temporary for a human.

<comment><USER8> No. I specifically stated it has not been updated for a year and a half. I guess if you only care about "can I download a version from the web page" you are technically correct as you quote me using the word "distributed", but it is the kind of technically correct that isn't very constructive ;P.

<comment><USER9> > the kind of technically correct that isn't very constructive

Fair enough.

That's not to say Apple won't ever update Safari for Windows, but I too won't hold my breath. Apple's software offerings for Windows haven't been great for a long time (QuickTime and FileMaker used to be great on Windows, but that was back in the 90s). Recently, instead of offering a native version of iWork for Windows, Apple has opted to build it as a web app. That might be appreciated by Linux desktop users, but it isn't a hopeful sign of Apple creating quality native apps for Windows.

I would love for Apple to build good versions of QuickTime X, iTunes, and Safari for Windows >7\. As it stands now, the software Apple has for Windows feel outdated and are way too sluggish.

</comment></comment></comment></comment></comment></comment></comment><comment><USER10> If you think you want to do this in the future, then get your corporate D-U- N-S number and corporate Apple developer account. Things can go wrong in this process, there are horror stories of it taking many weeks.

</comment><comment><USER11> Will and won't this encourage spam from websites in the form of advertisements etc.? I hope this has some form of authentication barrier. Presently, I prefer desktop notifications from Chrome via Chime on websites I have signed in. - [http://chimeapp.com/](http://chimeapp.com/)

<comment><USER12> I up-voted because I've noticed a dramatic increase in the number of auth requests as I browse websites. In most cases the website authors are just trying to be helpful, but the bar is pretty high for me to sign up for push notifications. For most websites, I prefer to get email, if anything at all. Push notifications are the kind of thing I'm only going to use for transactional matters.

The problem (for me) is that no one seems to be able to run a push service without abusing it. I can't sign up for weather alerts without being bombarded with useless information, much less a Mac news-site.

</comment></comment><comment><USER13> If you want to see an example, check out Redfin:

[http://blog.redfin.com/blog/2013/10/redfin-introduces-new- in...](http://blog.redfin.com/blog/2013/10/redfin-introduces-new-instant- notifications-in-apple-safari-os-x-mavericks.html)

</comment><comment><USER14> Considering all the time we spent trying to defeat pop-ups, this is just a step back for many more advertisements. The push notifications on the mobile is already bad, especially on Android, it can get much more worse on a web browser.

<comment><USER15> From the "Notification Programming Guide for Websites"[1]:

        > Opting In to Notifications
        >
        > Users must opt in to receive notifications. The opt-in process only occurs
        > once per domain. The presentation of asking for permission is identical
        > for all website notifications. In fact, the permission policy that
        > a user chooses for push notifications applies to local notifications.

It goes on to say that "users can adjust their notification preferences in Safari preferences and System Preferences".

[1]: [https://developer.apple.com/library/mac/documentation/Networ...](https://developer.apple.com/library/mac/documentation/NetworkingInternet/Conceptual/NotificationProgrammingGuideForWebsites/UserExperience/UserExperience.html#//apple_ref/doc/uid/TP40013225-CH10-SW7)

</comment></comment><comment><USER16> So correct me if I'm wrong, but this ONLY works if you have Mavericks, correct? If so, why is it called Safari Push Notifications? Safari doesn't have to be running for them to work.

Unless you don't have to be using Mavericks, and it works with the latest version of Safari (assuming you have it launched) regardless of OS (Windows, OSX v*, etc), and Mavericks is only required when you don't have Safari running.

<comment><USER15> Yes, this only works if you have Mavericks. It is called Safari Push Notifications because it's a push notification feature provided by Safari, to distinguish it from OS X's more general support for push notifications.

Safari also supports the "Web Notifications" specification[1], which allows a website to post a notification while it is open in Safari. This has been supported for a few releases now and is also available in some other browsers. I believe Gmail can make use of this to call attention to new emails while open in a background tab.

[1]: <[https://dvcs.w3.org/hg/notifications/raw- file/tip/Overview.h...](https://dvcs.w3.org/hg/notifications/raw- file/tip/Overview.html>)

</comment></comment><comment><USER17> Its interesting that Safari doesn't need to be on for these to work. I wonder if it will launch my browser of choice (Chrome) when I click on one of these.

<comment><USER18> It doesn't. FF is my default browser. If I click on a notification from the NY Times, it opens in Safari.

</comment></comment><comment><USER19> Apple must need to know who you are as soon as you log in for this to work. Presumably this only works if you have some kind of Apple account. Do Macs call home each time a user logs into a Mac? If so, are Mac users generally aware and OK with this?

<comment><USER20> Yes. It's optional, but most users use an iCloud account that sync their address book, calendar, etc.

Just like Microsoft and Google.

<comment><USER15> As far as I'm aware, iCloud accounts aren't required for push notifications. The push notification system identifies devices by an opaque token that isn't tied to any user-identifiable information.

Edit: The Apple Push Notification Service documentation at [https://developer.apple.com/library/ios/documentation/Networ...](https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html#//apple_ref/doc/uid/TP40008194-CH100-SW9) talks about the architecture and seems to match my recollection.

</comment></comment></comment><comment><USER21> Why not just make it a Mac feature as opposed to a Safari feature? This feels a little like Microsoft trying to integrate IE into Windows.

<comment><USER22> I think even most of Microsoft's critics agree that the criticism over integrating IE and Windows was pointless. Basically every major desktop and mobile OS does the same thing these days.

Also, Safari is only released on OS X. So I'm not sure what your first sentence really means either.

</comment></comment><comment><USER23> fuck you apple! To see this video you need safari browser, a registered account and then it is also buggy the video seek is broken

</comment><comment><USER24> What a weird feeling I get when seeing this.

It looks so cool but pisses me off at the same time.

I hope I get a way to turn this off easily of at least filter it's content.

<comment><USER25> Why does it piss you off? It's only there because you've chosen to.

<comment><USER26> Look at the domain name, clearly it's an evil ploy from the devil incorporate.</comment></comment></comment>


Facts That Distinguish Laravel PHP Framework from Other PHP Frameworks - <AUTHOR> Laravel is one of the easiest open source frameworks that has taken the PHP community by storm. The Framework is first of all open source, and it has numerous great features, as well as a lot of extensions, and an overall elegant feel about it. It makes the PHP development process even secure and more productive because it accelerates the development process by providing highly secure authentication tools and enabling dynamic use everywhere: bit.ly/2WKSIm5 <comment><USER2> You lie with a first sentence man :/</comment>


Ask HN: Did your website get the HN/Reddit hug? What did you do? - <AUTHOR> Just curious, for the typical HN/Reddit traffic spike what does it take to survive? Interested in both raw numbers or broader strategies. If you shrugged it off no problem, what does your architecture look like? If not, what did you do afterwards if anything? <comment><USER2> I had some blog posts on the front page a couple years ago. My blog is an unmodified WordPress install on the smallest Linode (at the time, that was 512MB RAM). No caching plugins or CDN, every page was served live from the database. Got >20K visits over the course of a few hours, 800+ active concurrent visits according to live web stats. It didn't cause any problems, load wasn't even high. All you need is a sane nginx/apache configuration.

</comment><comment><USER3> My site [http://goalkicker.com/](http://goalkicker.com/) (Free Programming Books) was featured front page on Reddit and HN last month; 2TB used within 24 hours, 150,000 unique IP addresses. No issues with hosting/downtime nor any noticeable effect on performance nginx + php

Source: [https://news.ycombinator.com/item?id=16186329](https://news.ycombinator.com/item?id=16186329) and [https://www.reddit.com/r/programming/comments/7rgz78/a_lot_o...](https://www.reddit.com/r/programming/comments/7rgz78/a_lot_of_free_pdfs_about_programming_from_stack/)

<comment><USER4> Your eBooks look great, what framework do you use for generating them? I see you use "3-Heights(TM) PDF Optimization Shell 188.8.131.52 ([http://www.pdf- tools.com)"](http://www.pdf-tools.com\)"), but what do you use to generate the layout?

</comment></comment><comment><USER5> I've had several blogs trend very well.

I built the site with Jekyll and run a single EC2 instance and never saw double digit load averages.

I also ran a Facebook advertising campaign for this site[2] which is sitting on S3 with Cloudfront in front. I've load tested that to over 2,000 connections per second, which I expect would exceed the most popular blogs.

If I was worried about bandwidth costs, I would use a $10 Cloudflare plan.

Every one of these "hug of death" discussions ends up tracing back to some bloated Wordpress theme. I continue to be shocked at the way it still occurs.

[0] [https://lolware.net/2017/07/04/amp- bloat.html](https://lolware.net/2017/07/04/amp-bloat.html) [1] [https://lolware.net/2016/11/17/requesting_bank_login.html](https://lolware.net/2016/11/17/requesting_bank_login.html) [2] [https://getcryptolocker.com](https://getcryptolocker.com)

</comment><comment><USER6> This blog post on my website was on the Hacker News front page for a few hours and there were no problems at all: [https://bjoernkw.com/2016/04/03/accounting- in-2016/](https://bjoernkw.com/2016/04/03/accounting-in-2016/)

My website runs on WordPress with WP Super Cache, Autoptimize and a few server-side as well as client-side optimizations. Nothing special though but pretty standard measures. Caching is particularly helpful to make sure the database gets hit as little as possible.

</comment><comment><USER7> I avoid this problem entirely by keeping static content static--and hosted via CDN.

The same approach goes for dynamic (database-backed content)--cache the ever- loving shit out of it.

</comment><comment><USER8> I've had exposure to these hugs for a variety of websites. I'm not sure how it started but people I had helped with traffic isues started referring others to me.

Anyway I got a glimpse of a pattern in a lot of these sites. So decided to build a tool that would help in these situations with a few tweaks depending on the stack.

That's when I came up with Cachoid[0] as a way to get some provisioning automation.

[0] [https://www.cachoid.com](https://www.cachoid.com)

</comment><comment><USER9> Can you share your stack? The answer really depends: static blog/website, put it on github pages and you're good. AWS, build everything with autoscaling groups, set min=max=what is needed, but still you can easily scale up/down when needed. Etc.

<comment><USER3> Hi Ecesena! Done, see above :)

<comment><USER9> I don't see _your_ arch. Anyway, I remain of my ideas of the autoscaling groups for non-static content. For static, there seems to be plenty of examples.</comment></comment></comment>


Practicing Elixir or any programming language - <AUTHOR> https://ericdouglas.github.io/2017/08/24/practicing-the-elixir-language/ <comment><USER2> I always find it interesting how people learn so differently. Personally, I learn a language by building something in it. I want a _feel_ for it, before digging deep and learning about theory. I only do that stuff _much_ later, after I'm relatively proficient in the language.

This is probably why I wasn't very good at picking up musical instruments. I was never satisfied learning at a slow pace and only being able to play "twinkle twinkle little star". Programming is perfect for me because you can build things before you really know what you are doing.

<comment><USER3> Spoken languages are like that too. A 3 year old doesn't know what verbs are. They just speak.

Another interesting thing is how people forget their path to personal journey regarding learning. "I did `y`, but you should do `x` because now that I look back I should have done `x`." "But, but, you did `y`! "Yes, but `x` is the way to go."

You mentioned musical instruments: great topic. The very best musicians have always been around music, sometimes not even being able to read music. There is no clear path, the only clear thing about this is the time + effort regarding learning something well: just have to put in the time.

<comment><USER4> > Spoken languages are like that too. A 3 year old doesn't know what verbs > are. They just speak.

Not sure how you meant this to be understood, but a 3 year old definitely knows that there are different word classes that behave differently. They don't know that they're called verbs, nouns, adjectives, etc. but they do correctly (to a large enough extent) use grammar applying specifically to the different word classes.

</comment></comment></comment><comment><USER5> personally i think algorithm or hacker rank-like problems are probably a poor way to actually pick up a new language.

pass one for me is usually "read all the books that are needed to cover the main parts of the language, toolchain, frameworks, idioms, etc and make sure to type in the code as you go." for elixir this means all the pragprog books and probably one book on OTP/beam.

second pass is once that surface level knowledge has been exposed and digested immediately start trying to solve real problems with the thing, using said books and code written above, in addition to language docs, as a primary reference, the internet (stack overflow, etc) as a secondary reference only when absolutely necessary.

if you don't have the first part of dedicated learning and wide exposure (without a motivating problem per se) you inevitably end up doing the lazily evaluated "stack overflow driven development" since you haven't been exposed to the breadth of the language, frameworks, etc systematically. in other words, you don't know what you don't know. the first part also sets you up to have some working examples you built yourself (with the help of books and documentation) as handy references that you are comfortable with since you've been in that code.

if you don't have the second part of solving a real problem you never actually form the skills that come from applying the tool to a real problem with no hand holding.

i think academic algorithmic problems are kind of the worst of both worlds. they don't really give you a systematic way of being exposed to the APIs and language quickly, and they also aren't real motivating problems so you end up probably only really learning a narrow scope of things that are practically useful for building stuff.

<comment><AUTHOR> > "if you don't have the first part of dedicated learning and wide exposure > (without a motivating problem per se) you inevitably end up doing the lazily > evaluated "stack overflow driven development" since you haven't been exposed > to the breadth of the language, frameworks, etc systematically. in other > words, you don't know what you don't know."

Totally agree. I'm doing exactly this. But instead of only read books and type the code, I'm also after each section of the resource (doc || book), practicing code challenges :)

</comment></comment><comment><USER6> I actually really enjoy doing katas on [https://www.codewars.com/](https://www.codewars.com/), especially when I'm ramping up on a language.

You solve a short problem, and then immediately see how other people solved it. I'll frequently write something and then see a solution that uses a library function I wasn't aware of, or a solution that's similar but better follows the language conventions.

It's really helpful to solve something short and get immediate feedback on it. You aren't learning how to write big programs with the language, but it's still useful at first.

<comment><USER7> I do that with Exercism and Elixir. It's pretty awesome.

<comment><USER6> been meaning to try exercism for a while, thanks for the reminder

</comment></comment></comment><comment><USER8> I learn programming languages today the way I learned my first one. I have (what is now an ancient) copy of the old DEC book, "101 BASIC Computer Games" and I port some of those games to the new language. Sometimes I add bells and whistles and it's not porting attempting to be true to the original; but they offer small enough problems to get at least the syntax under my fingers and some of the larger ones can start to give me a sense of how I'll need to think should I try something serious.

And the first language I learned was... well BASIC... but it was on the VIC-20 & later C-64; but that still required a translation as the PDP-11 BASIC was rather different that was was on the Commodore machines.

</comment><comment><USER9> I would like to mention [http://exercism.io](http://exercism.io) . It has unit tests written also

<comment><USER10> Yes, I've used exercism to broaden my knowledge and I've recommended the site to friends and colleagues who wanted to learn programming.

You mentioned tests: on exercism you don't write unit tests by yourself, the tests are only for you to check your solution. It certainly helps to see how tests can be written in any language, but you aren't forced into a strict TDD style.

The best feature on exercism for me is to be able to see the other solutions and learn from them.

<comment><AUTHOR> In HR you can see other solutions as well

</comment></comment></comment><comment><USER11> For Clojure I'd recommend ... [http://www.4clojure.com/](http://www.4clojure.com/)

Follow some of the top-code-golfers, get all the tests passing, and then marvel at how concise other people were able to make their solutions. Fun and educational.

Edit: bonus, got nerdsniped.. Clojure solution - [https://gist.github.com/minikomi/4e42de3643118b5381c4d7e70a1...](https://gist.github.com/minikomi/4e42de3643118b5381c4d7e70a179095)

</comment><comment><USER12> Great article, thanks!

I'm not an expert Alchemist by any means, but whenever I see a `cond`, I try to see if it can be refactored out using pattern matching (after I was picked up on the same thing during an interview!)

       defp formatted_hour("AM", "12"),  do: "00"
       defp formatted_hour("AM", hours), do: hours
       defp formatted_hour("PM", "12"),  do: "12"
       defp formatted_hour("PM", hours), do: 12 + String.to_integer(hours)

<comment><USER13> I agree though one thing I would caution is it is good practice to always return the same type from a function even though it is an untyped language. The whole thing can be boiled down even more if pattern matching is used in parsing the initial string.

      def convert(<<h::bytes-size(2)>> <> ":" <>
                  <<m::bytes-size(2)>> <> ":" <>
                  <<s::bytes-size(2)>> <> <<period::bytes-size(2)>>) do
       "#{formatted_hour(h,period)}:#{m}:#{s}"
      end

      defp formatted_hour(hours,"PM"), do: "#{String.to_integer(hours) + 12}"
      defp formatted_hour("12","AM"), do: "00"
      defp formatted_hour(hours, "AM"), do: hours

<comment><USER12> Good point! If you're going to pattern match in the initial string then who even needs the second function?

        def convert("12:" <> <<m::bytes-size(2)>> <> ":" <> <<s::bytes-size(2)>> <> "AM") do
          "00:#{m}:#{s}"
        end

        def convert(<<h::bytes-size(2)>> <> ":" <> <<m::bytes-size(2)>> <> ":" <> <<s::bytes-size(2)>> <> "PM") do
          h = 12 + String.to_integer(h)
          "#{h}:#{m}:#{s}"
        end

        def convert(<<h::bytes-size(2)>> <> ":" <> <<m::bytes-size(2)>> <> ":" <> <<s::bytes-size(2)>> <> "AM") do
          "#{h}:#{m}:#{s}"
        end

Whether that's an improvement or not is another matter :)

<comment><AUTHOR> Crazy stuff! :D

I'm wondering how our future-self would feel about such cleverness haha

</comment></comment></comment></comment><comment><USER14> I am a fan of [http://www.rubykoans.com](http://www.rubykoans.com) for Ruby. I am thinking about developing something similar using the Go playground for that language, and maybe an alternative for Rust.

Where I'd want to stretch it is some data structure and algorithm exercises, maybe even some design patterns. I'd love to be able to have a common environment where I can start to learn any one of multiple languages using similar exercises.

<comment><USER15> I would love something like that for Go. Just recently completed Python Koans and it was a good way to get into TDD.

</comment></comment><comment><USER16> for me, when I'm learning some new language or tech I start off with whatever basic info / tutorials that are available, play around with a few mini projects (like algorithms), but the most important thing, LET OTHER PEOPLE SEE YOUR CODE, for me that often involved trying to answer questions on stackoverflow and posting on codereview, for instance when I was learning ramda I posted a simple solution for fizzbuzz - [https://codereview.stackexchange.com/questions/108449/fizzbu...](https://codereview.stackexchange.com/questions/108449/fizzbuzz- in-javascript-using-ramda) for review and followed up on other peoples variations and it helped a lot.

when I thought I was too rusty on regex I went and tried to answer as many regex questions on stackoverflow

The great thing about stackoverflow is it presents real world problems that are often not straightforward. Even if you can't solve it, someone else more than likely will and you will have an "aha!"

</comment><comment><USER17> So his approach is to go through hackerrank exercises to learn the language.

Anyone familiar with hackerrank able to comment on that vs say project Euler?

<comment><USER18> I would say that Hacker Rank helps with learning syntax of a language. I'm not sure if it helps greatly with learning how to implement framework type ideas or large programs.

Hacker Rank is best at teaching algorithms & problem solving. I did a couple the other day & at first I thought they looked difficult. After breaking them down & thinking about them, they surprisingly weren't all that hard.

<comment><USER17> The very definition of software :-)

</comment></comment></comment><comment><USER19> I don't practice nor learn languages. I prefer concepts. I get "the book", skip the very first chapters that only talk about syntax, go straight for the unique features that make the language interesting (for a Clojure book, I'd go straight to protocols, agents, etc.), wrap my head around them and then maybe skim a popular repo hoping to read some idiomatic code.

</comment><comment><USER20> Semi-OT, but I really want to steal whatever slick CSS you used to get that full page load then slam-in sidebar.

<comment><USER21> Here is a link to the actual CSS used on the blog post. [https://github.com/ericdouglas/ericdouglas.github.io/blob/ma...](https://github.com/ericdouglas/ericdouglas.github.io/blob/master/css/main.css)

I'm gonna try pointing to the relevant CSS, but be warned, I am not a CSS wizard. I am also probably not a smart man, posting about CSS on HN while not being a wizard.

The relevant classes seem to be .sidebar, .sidebar-toggle, .motion-element, and .posts-expand, the last of which seems to control the transforms and durations. This is where my knowledge breaks down, since I'm not sure how they .sidebar or .motion-element trigger .posts-expand or any of the other animation CSS. Hopefully someone can help fill in the rest! ¯\\_(ツ)_/¯

</comment></comment><comment><USER22> How hard is it to design your page without javascript needing to be enabled?

I now can't be bothered to see what you have to say. It is not worth my while.

<comment><USER23> That 'reveal' is definitely overkill - in a world where shaving off 10s of milliseconds in load time helps engagement, adding 100s of milliseconds of unnecessary pause before content does seem a little silly.

That said, 'has javascript' is a reasonable assumption for most websites these days. Most people outside the HackerNews echo chamber wouldn't dream of turning it off, but then I suppose this blog _is_ aimed at the HackerNews audience (among others).

<comment><AUTHOR> Thanks for your comment. I'll fix this.

</comment></comment></comment><comment><USER24> > Why algorithms?

> Because this kind of problem is an interesting way to put yourself searching > all the API of the language in order to solve the challenge in the more > elegant/concise way you currently can.

Bullcrap. APIs are either going to be irrelevant for solving an algorithm, or will simply do the job for you. "Implementing an algorithm" usually means writing it from scratch using simple data structures, primitives and basic flow control constructs.

<comment><AUTHOR> I agree with you.

But I believe that solving this kind of challenges forces one in a good way to know more about what the language has to offer, while keeping motivated to learn its constructs before being able to create real apps.

The goal is practicing a new language.

<comment><USER20> I'm using the [cryptopals challenges]([https://cryptopals.com/](https://cryptopals.com/)) to learn java ATM, seems like a good approach because they pretty quickly force you to do stuff that expose important parts of the language ("how do I get bytes out of a string?" "how do I do i/o?" "how do I xor two strings?" "how do I find a crypto library and use it?")

I think this kind of thing is more useful than hackerrank or euler-style problems, at least if you're learning a language in a paradigm you already know? If you can hack together a binary search in one functional language you can probably do it in another one pretty easily. Though might be more challenging moving from one paradigm to another.</comment></comment></comment>


Whatever happened to Winamp? - <AUTHOR> https://rocknerd.co.uk/2017/02/05/whatever-happened-to-winamp-which-you-can-still-download-by-the-way/ <comment><USER2> Still use it. You can pry it from my cold dead hands. The dual media library / playlist workflow is much nicer to use than iTunes (not to mention the latter becoming a bloated horrible piece of utter crap). It plays much nicer with network shares and other 'get out of the way and just let me point you at a directory of music' situations.

The UI is much nicer than Foobar - but could definitely use a little tweaking (but not a lot!).

I also used to really enjoy the skins, although these days the skinning scene is practically dead, and the default skin with Winamp Classic colours is pretty OK.

Oh how I hope active development can resume once again, and that it doesn't screw with the player too much.

<comment><USER3> iTunes has got to be the worst piece of software shipped by Apple. The bloat has gotten worse over the years, takes ages to load and I have no clue how anything works with its utterly non-intuitive UI. They should have just kept it as a simple music player and put the purchases/radio/everythingelse options on a different app.

<comment><USER4> Am I the only one who finds iTunes just fine on macOS? Of course it could use being split into 2-3 apps (like they did with iBooks) but it's hardly as bad as the echo chamber makes it out to be. On Windows, sure.

I think they should at least split the video functionality into a "TV" app, as they have started to do on iOS.

<comment><USER5> It's far superior on MacOS, performance is way better and it's integrated into the OS.

<comment><USER6> Yea, just in a way there's no easy way to assign the play button to launch Spotify instead.

</comment></comment></comment></comment></comment><comment><USER7> For those looking for a quick dose of nostalgia, I wrote a reimplementation of Winamp 2.9, which you can load in your browser: [https://jordaneldredge.com/projects/winamp2-js/](https://jordaneldredge.com/projects/winamp2-js/)

It even supports skins (just drag the .zip/.wsz file over the player).

<comment><USER8> Nice! I wish you had a button to show it in 2X or 4X size. Winamp looks tiny now, but back in 2000 everyone had low resolution screens, so Winamp had to be tiny or it would fill up the whole screen.

<comment><USER7> It does! Winamp had a "double" mode, and I've reproduced it faithfully. Try clicking the tiny "D" to the left of the visualization area.

</comment></comment></comment><comment><USER9> Winamp has seemingly reached its final version and it still does the job just as well as for the past 20 odd years. Even more so than its defunct competotor Sonique [https://en.wikipedia.org/wiki/Sonique_(media_player)](https://en.wikipedia.org/wiki/Sonique_\(media_player\))

Part of this longevity has no doubt to do with Windows' lasting APIs.

For the most part Winamp is able to do so as not much has changed when it comes to music listening on computers. For example audio cards are fundamentally the same devices they used to be decades ago and basic I/O workflow has not changed either. Same goes for the majority of music file formats with which Winamp is natively compatible.

What I do miss is Winamp's vast library of plugins (visualisation, tools, file format compatibility and countless others). To my knowledge the ability to source plugins today has gotten harder as the library hasn't carried over to the new website/owners. For me this is where Foobar2000 closes the gap. Unfortunately Archive.org is not the remedy in such situations where Winamp.com/robots.txt disallowed fetching of the plugin binaries. Example: [http://web.archive.org/web/20120505234347/http://download.nu...](http://web.archive.org/web/20120505234347/http://download.nullsoft.com/customize/component/2009/3/6/P/_WideSound_DSP_plugin_2.exe)

<comment><USER10> Sonique - that brings back a flood of memories. Winamp though is one of the first apps I install on a fresh copy of Windows.

Check out Sonique's shaped skins, not just squares: [https://en.wikipedia.org/wiki/Sonique_(media_player)#/media/...](https://en.wikipedia.org/wiki/Sonique_\(media_player\)#/media/File:Media_player_sonique-1.95.png)

<comment><USER9> Yes the shaped skins with the notion of "big" "medium" and "small" window sizes are quite unique notion to Sonique. Personally I have not seen this 3 way size concept in other applications (it was very handy utility at the time when screen space was small).

</comment></comment></comment><comment><AUTHOR> OP here. Inspired by [https://news.ycombinator.com/item?id=13559415](https://news.ycombinator.com/item?id=13559415) \- I thought a short subjective history would be useful and interesting. (Sources all linked inline.)

I posted to my Facebook asking "does anyone still use this thing?" and a whole pile of people enthusiastically responded that they're still on Winamp 20 years later. Amazing the goodwill software can generate just by _not sucking_ ...

<comment><USER11> It did more than not suck. Lots of software sucked by just not being good at what it was supposed to do. That got ignored.

Winamp _radically not sucked_ by being basically the only piece of software in that space that didn't try to turn your computer and your love of music against you while you were using it. It doubled down on that pile of win by being highly competent at what it set out to do as well. That rightfully earned _much_ love.

A lesson a great many web service companies could learn from today.

<comment><AUTHOR> oh God, RealPlayer. I'd suppressed the memories.

That said, Real's open-source version, Helix Media Player, was _not awful_ (and didn't have the same tentacular behaviour).

<comment><USER12> Remember why they made is virtually impossible to download directly from their side, for reasons I can't recall? That was awesome.

</comment></comment></comment></comment><comment><USER13> > I first played an MP3 in late 2000. Some J-Pop thing called "Forces", I > forget who by, that I didn't think much of (though it was catchy enough I > can still remember the chorus).

That is with almost absolute certainly this track by Susumu Hirasawa, one of the few musicians to have produced truly unique music (and who's still at it):

[https://www.youtube.com/watch?v=NkYYYew8CUI](https://www.youtube.com/watch?v=NkYYYew8CUI)

<comment><AUTHOR> Yep, that's the one!

<comment><USER14> What the heck, this really is incredibly catchy. It's already been lodged in my head for 3 days.

<comment><AUTHOR> it was lodged in my head for 16 years, count yourself lucky

<comment><USER14> Let's see in 16 years..

</comment></comment></comment></comment></comment><comment><USER15> I wonder why foobar2000 isn't mentioned more often. It's a great and customizable player. It replaced winamp for me (~2010).

<comment><USER16> Foobar is mentioned everywhere. While it's not my player of choice, it has been considered one of the best, most lightweight and customizable players for a long time in pretty much any discussion about audio players for Windows.

<comment><USER17> Yeah I use it now, I just wish it was updated one more time to add some OS- level polish to it (like getting taskbar integration on Windows 7 an above without a plugin).

The actual look of the application doesn't bother me, since usually I'll be working on something else that needs the screen space.

<comment><USER18> There has been some interesting work on the Foobar 2000 "Mobile App", including a version of Foobar 2000 in the Windows 10 Store. It's interesting to see the work done on that version. Supposedly there was going to be a Patreon or Kickstarter to push that work even further but I don't recall what happened there or didn't follow it well enough.

Also, I think that effort was before the modern Windows desktop "bridge" and it would be interesting to see an attempt at a "best of all worlds" version for the Windows 10 Store that supported all of the Desktop features and all of the "Mobile" features (such as Windows 8+ background audio controls).

<comment><USER19> according to wikipedia there are a windows phone, ios and android versions out right now.

</comment></comment></comment></comment></comment><comment><USER20> I loved Winamp back in the day. It might be the only software that I get nostalgic over (thus far).

Winamp introduced me to SHOUTcast, and I spent many hours listening to SomaFM's Groove Salad :)

Thank you, Nullsoft!

</comment><comment><USER21> I remember the exact moment when it died for me. It was when they added phone- home functionality and unique player ID when it moved from 2.x to 3.0.

When I called them out on this on the forums (this was still a fairly new and egregious thing back then) the devs told me to put up with it or go use something else. So I did.

</comment><comment><USER22> Here is a 3 min video of Justin Frankel(the creator of winamp) [https://www.youtube.com/watch?v=qj6qaVoDIZg](https://www.youtube.com/watch?v=qj6qaVoDIZg)

Currently he is developing an DAW named Reaper. It's one of the cheapest DAW out there.

<comment><USER23> REAPER is such amazing quality software. In my makeshift studio/music room there is a spare machine with an 8-in/8-out sound card, just to record some drum tracks and so forth. The machine is an _Athlon Thunderbird 1400 with 512 MB of RAM and Windows 2000._ REAPER runs flawlessly, rock stable, fast as any other DAW you'd care to name on a modern system. It's a recent version; I see now that the very latest one doesn't support Windows 2000 anymore but it did as late as maybe a year ago.

The full version is a nine megabyte download. It has pretty much all the same features of Cubase, Pro Tools, Logic etc. and is way ahead in terms of customizability.

REAPER must be some of the most well-written and likeable software out there currently. It's just refreshing to see such thought and care being put into a program. It's very affordable, too. I recommend it wholeheartedly whenever someone asks me about how to start recording music with a PC.

<comment><USER24> Could use slightly more streamlined UI though. A lot of important functionality is hidden behind manual.

(Recording. Mastering is rather fine.)

</comment></comment></comment><comment><USER25> I canceled a $10/month Spotify subscription because their player wasn't close to parity with players like WinAmp and wasn't even moving in that direction.

<comment><AUTHOR> I am a happy Spotify user and ... it's still easier to find a song quickly by Googling "song name" "artist" site:youtube.com .

<comment><USER26> If you do that multiple times a day, give DuckDuckGo a shot:

"song name" "artist" !yt

Takes you right to the YouTube results.

<comment><USER27> Chrome is smart. If I just type "y" and then tab, it automatically goes to youtube search.

<comment><USER28> You can do similar things on firefox with search engine keywords. I have mine setup for video so "video <search terms>" in the address bar will go to youtube. But you could bind it to just y if you wanted.

</comment></comment></comment></comment></comment><comment><USER29> Still whippin' that llama's ass?

<comment><USER30> Poor llama

</comment></comment><comment><USER31> Since no one else mentioned Quintessential media player, I'm here to name it.. Its one of the dozens of winamp clones, but IMHO, the only one that actually ended up slightly better (although the default skin is miserable). Its still around [http://www.quinnware.com/](http://www.quinnware.com/) but hasn't had a release in 8 years now, although it does run on recent versions of windows (hello win32!, still kicking!) although its one of those apps that windows tries to manage by moving its plugins/etc into the users directory because its trying to write into "Program Files".

Anyway, if the author is hanging out on hacker news... Isn't it about time for a new release, even if its only to put the source code on github so those of us still using it can update it a bit?

</comment><comment><USER32> As of 2017, I'm using Winamp v5.66 on my Windows 10 box and am scrobbling songs since 2004 through Last FM's plugin for Winamp. Both do a great job for me!

</comment><comment><USER33> Winamp is still happily running on my Win7 laptop. I've always resisted iTunes-like software that tries to organize my music collection for me, primarily because I've already organized it myself and most apps fail to do it properly due to misread or incomplete tags. Winamp lets me do the following, which is all that I really want:

-1) Pull up the folder with the album I want to listen to.

-2) Right-click "Play in Winamp"

-3) Winamp starts, minimized, in my system tray so that it's out of my way

-4) I can control playback via media keys and get notifications with the Artist and Title whenever tracks switch, pause, end, etc.

That's really all I want, and Winamp still does it properly.

I painstakingly tried to keep Winamp when I moved to Linux, but my laptop's QHD+ screen was just too much for the non-DPI app in Wine. I eventually found Audacious ([http://audacious-media-player.org/](http://audacious-media- player.org/)), which lets me do everything I used to do in Winamp, and even has a Winamp 2.X skin.

<comment><USER19> Funny you would say that , I first grew miscontent with winamp when it made steps towards taking over my music collection with its winamp agent. Later left for no nonsense foobar2000 without any regrets.

</comment></comment><comment><USER34> Nowadays there's Vox music player for Mac which more or less mimics Winamp somewhat. There's not that much of selection for Mac outside of Spotify and iTunes so this is awesome:)

[https://vox.rocks/mac-music-player](https://vox.rocks/mac-music-player)

I'm not affiliated to Vox in any way but it's nice :)

</comment><comment><USER35> Winamp still remains my favorite media player of choice - the UI is minimal enough but isn't too minimal (Foobar), but isn't terrible (iTunes). It supports all the formats I care about and then some, and it is fast.

It's unfortunate that we haven't had a great alternative since then.

</comment><comment><USER36> Darren Owen, DrO, after 14-ish years, is still actively working on Winamp.

The project is called Wimamp Community Update Pack or WACUP and its in beta here: [https://getwacup.com/](https://getwacup.com/)

</comment><comment><USER37> What AOL did to Winamp, Lycos did to Sonique. Paid a lot of money for it and abandoned it. Althought Sonique was never that advanced.

Winamp was bought by a company in Berlin I believe. It will forever be remembered as the MP3 player that: \- Introduced several generations to shoutcast online radio. \- Was one of the only players that handled your 5,000+ song MP3 collection.

Still use it to this day and it works amazingly well with searching, filtering, and building playlists for massive collections. It's stable, not dead, and still in use by many. But because it's not releasing new versions every year the average music junkie might believe it to be dead.

<comment><USER19> This happens all the time, big players buy smaller ones and let them die or kill them. google does that all the time.

</comment></comment><comment><USER38> Foobar2000 is an awesome alternate to winAMP. There are a few winamp skins for it if you want a dose of nostalgia

<comment><USER39> I found that i have no interest in skins. I usually ran Winamp with its default look, and enjoyed Foobar2k with its default Win32 appearance.

But these days i have moved to Linux, where Deadbeef do the job quite well.

<comment><USER19> I moved from winamp to foobar2000 to deadbeef and I would not say deadbeef does the job quite well, it plays music sure but it's no foobar2000.

</comment></comment></comment><comment><USER40> Thanks for this! I wrote a music visualization plug-in for Winamp, and that side project helped me land my first job in the games industry. I love Winamp and still use when I want to play local mp3s.

</comment><comment><USER41> I would still use Winamp! It was a great piece of software...

... if I didn't stream all my music now.

</comment><comment><USER42> Still a happy user of Winamp 5.666 (released Dec 2013). I love the keyboard shortcuts.

</comment><comment><USER43> Still using winamp 5.0 with MEXP plugin: the best music library out there: [http://www.mexp.dk/](http://www.mexp.dk/)

</comment><comment><USER44> I haven't used WinAmp since I was in high school, but honestly how does it stack up against VLC? I can't imagine it is actually better than VLC these days.

<comment><USER26> Do you find that VLC stacks up as a daily driver audio player? Last I used it with playlists, etc. I felt like I was attempting to drive to the grocery store in an SR-71.

I haven't used Winamp in a while (does it have Wine support for "new "skins yet?) but I enjoy using qmmp as a comfy little player.

<comment><USER45> I don't for an audio quality reason. VLC is designed to play back video first and foremost, which means it has an actually quite excellent feature: it time stretches the audio to synchronize with whatever's playing.

I'm a musician, so I can hear this happening; music played through VLC sounds like it's going in and out of tune, like an old cassette deck but more subtle. (This is worse on Windows for whatever reason, Linux is much less audible.)

On Windows, I still run Media Player out of pure habit. It works, requires no installation, and generally sounds fine. I remember the good old days of Winamp though, that was my go-to player back in the day. Great media players seem harder to find now that the focus in the market is on internet streaming and less on local music.

<comment><AUTHOR> > I'm a musician, so I can hear this happening; music played through VLC > sounds like it's going in and out of tune, like an old cassette deck but > more subtle. (This is worse on Windows for whatever reason, Linux is much > less audible.)

I occasionally hear this on MP3s or Oggs (never FLACs) on the Android version (my phone media player of choice), but _never_ on the Desktop version. It's pretty obviously a bug, though I can't get it to happen with any reproducibility.

</comment></comment></comment></comment><comment><USER46> When I started moving to linux full time a few years ago, I was using XMSS [0] as a native winamp replacement - thought I'd mention it as no one else seems to have done yet.

[0] [http://www.xmms.org/](http://www.xmms.org/)

<comment><USER47> Audacious is basically the successor to this.

The lineage of forks is:

(Xmms -> Beep Media Player -> Audacious)

<comment><USER46> Thank you. Audacious I also used quite a lot, but it's been so long I completely forgot the name :)

</comment></comment></comment><comment><USER48> Finally found alternative - Clementine player for Windows, Linux, Mac OSX and even RaspberryPI

</comment><comment><USER49> Winamp is still my goto player since version 1. I could never find an alternative. During my days of ripping I used:

Audiograbber, Xing MP3 encoder, Winamp

When Winamp announced they were wrapping up I downloaded multiple copies and stashed all over the place, yard, garage and all.

</comment><comment><USER50> Nobody even remembers Sonique...

<comment><USER51> I do, but I think it didn't support all the nifty Winamp visualization I really liked.

</comment></comment><comment><USER52> Honestly I miss Milkdrop more than Winamp, there are other libraries out there that apparently have the same presets that Winamp had for it but they just arent the same :(

</comment><comment><USER53> MPC-HC for just listening to my playlists, MediaMonkey for library management of TBs.

</comment><comment><USER54> One thing - I just miss it. So much of nostalgia.

</comment><comment><USER55> I recently learned on Duck Go Bang: [http://duckgobang.com/](http://duckgobang.com/) that with the !oldapps bang you can find all sorts of old and archived software.

For example: !oldapps windows 7 winamp

</comment><comment><USER56> I have moved on to non-Windows OS for almost a decade now. But, Winamp is one of those rare softwares that I won't mind switching to Windows OS, just to use it.

</comment><comment><USER57> You can only kick the llama so many times before it kicks back.

</comment><comment><USER58> Winamp was (and still is) great software, but it's usefulness has run out. When was the last time you downloaded an mp3? For streaming video and podcasts I stick to VLC, but for music I've switched entirely to streaming apps like Spotify.

<comment><USER59> "usefulness has run out." It's usefulness hasn't run out for me. I use constantly every day.

"When was the last time you downloaded an mp3?" I download MP3s all the time.

I use WinAmp and I love using WinAmp. Just wanted to add a different perspective.

<comment><USER23> Seconded. I have an MP3 library of about 1000 ripped CD's, and also I occasionally buy MP3's on Bandcamp. A lot of this music is obscure and not available on any streaming service, and when it is, often it's a remastered/reissued/weird version I don't want. I care about getting the original CD master when possible because usually the "24-BIT DIGITAL REMASTERS" that Spotify have are ruined in terms of dynamic range.

So for me, Spotify is a hot mess with regards to what is there and what is not and what versions of the albums are available. Also, it wastes bandwidth which is a luxury for me (I live in the countryside and have only a 4G connection with a 100G data cap) and the kicker: it rips off artists by paying out rounding errors -- for most artists, orders of magnitudes less than they used to make from the conventional record industry, which itself was a total ripoff.

So when possible, I buy CD's directly from the artist/label and rip them, or I buy MP3's from Bandcamp. Then I play them in WinAmp.

<comment><USER16> > I care about getting the original CD master when possible because usually > the "24-BIT DIGITAL REMASTERS" that Spotify have are ruined in terms of > dynamic range.

This isn't exactly Spotify's fault. There are a lot of good remasters. It depends.

> So for me, Spotify is a hot mess with regards to what is there and what is > not and what versions of the albums are available.

Very true. All that stuff that isn't available for streaming would leave huge gaps in my collection. And for people that rely on streaming exclusively, it might be getting worse: Licensing deals end, favorite albums might disappear suddenly. Then you paid all those years and might end up with very little to show for it. Just remember how Netflix' catalog started to shrink. Is Spotify going to produce originals when that happens? Renting music is a bad idea.

> So when possible, I buy CD's directly from the artist/label and rip them, or > I buy MP3's from Bandcamp. Then I play them in WinAmp.

Great. However if you're already buying from bandcamp, why would you opt for the lossy MP3 versions of those releases?

<comment><USER23> _This isn 't exactly Spotify's fault. There are a lot of good remasters. It depends._

Point is, it doesn't let me choose. It arbitrarily selects one version of an album which is not necessarily the one I want.

 _Great. However if you 're already buying from bandcamp, why would you opt for the lossy MP13 versions of those releases?_

I can't hear the difference :) However, if I were to burn them out to CD-R, which I've done a couple of times, I would use the lossless version. I'm happy that I have the option.

<comment><USER60> > Point is, it doesn't let me choose. It arbitrarily selects one version of an > album which is not necessarily the one I want.

This is not spotify's fault btw. Some bands have original record and the remastered version available. It is decided by the label/band.

Some bands think the original version is flawed, hence why they remastered it. Others might have been forced a remaster on them by label, or simply know that fans value both versions.

<comment><USER61> He acknowledged that this may not be spotify's fault. Where the blame lies is completely orthogonal to whether or not it makes him not want to use the service.</comment></comment></comment></comment></comment></comment></comment>


Multi-Service Local Development Environment with Vagrant and Docker - <AUTHOR> http://devbandit.com/2015/05/29/vagrant-and-docker.html

<comment><USER2> Love the clear, concise example repo and informative explanation. Perfect introduction to start exploring this concept. Thank you for sharing, looking forward to more articles like this.</comment>


How to compress a large file into chunks - <AUTHOR> http://kstephens.co.uk/mac-osx-how-to-compress-a-large-file-into-chunks/

<comment><USER2> s/compress/split/</comment>


An algorithm to figure out your gender - <AUTHOR> http://boingboing.net/2014/09/01/twitter-uses-an-algorithm-to-f.html

<comment><USER2> The male-dominated follower data could also be explained if men tend to follow more people than women do -- even if the gender split of total users is roughly equal.</comment>


On Asm.js - <AUTHOR> http://acko.net/blog/on-asmjs/ <comment><USER2> I feel like PNaCl is the technically superior approach - define a stable set of LLVM bytecode and build an interface to run it in the browser. But the uptake is a problem, no other browser maker wants to adopt a big chunk of code controlled by Google, tailored to run optimally in Chrome.

So asm.js took a beeline - leveraging existing Javascript machinery for security/JIT and shoehorning a way to run executable LLVM on top of it. The fact that it's Javascript is just a detail, a legacy of the days when one vendor (Netscape) was able to push through a standard for running code in the browser.

In today's fragmented browser landscape I find it hard to believe a consensus could be reached again. Most of the major browser makers (Google, Microsoft, Apple) have their own platform agenda to push - in that context asm.js's compatibility with existing Javascript engines gives it the best chance of adoption.

But I agree, the hoops that had to be jumped through are a damned shame.

<comment><USER3> From a developer's perspective PNaCl and emscripten is almost the same to work with, the difference is just a couple of hundred lines of wrapper code (less then the differences betwenn iOS and Android wrapper code) and you need to find a higher abstraction layer for threaded code. And if the differences on the surface are so small, and the performance difference is acceptable as well (it is IMHO), I don't really care how the goal is achieved under the hood. Asm.js or PNaCl are not platform-lock-ins like DirectX or Flash. It's just POSIX + OpenGL with a handful of platform-specific functions, and practically the same code compiles on any other POSIXish + OpenGLish platform.

<comment> iso-8859-1 You're just considering the game-perspective, where you don't need anything but GL and sound. What about WebRTC? What about DOM manipulation? You can't do this from Emscripten very well.

<comment><USER3> It's actually really easy to build C interfaces to any Javascript API or lib. Since compiled code is just JS you can just directly call from C code into JS code and vice-versa. Most of emscripten's CRT wrapper is actually implemented in hand-written JS, as well as the OpenGL-to-WebGL wrapper. For an app which mainly needs to do DOM manipulation it is probably better to write it mostly in traditional JS and only implement the performance sensitive stuff in a C library compiled to JS. Best of both worlds...

</comment></comment></comment></comment><comment><USER3> What I miss in all those discussions regarding JS, asm.js and PNaCl is that the web is the best software distribution platform we have by a huge margin, this is really its overwhelming killer-feature. All the user needs is an URL. No "downloading", no installation, no special user permissions, no app shops, no gate keepers, no walled gardens, and everything is automatically multi-OS and multi-CPU-architecture. The web as a runtime platform may not be ideal, but the web as a "software distribution platform" rocks. For this I'm even happy to give up a few CPU cycles. And no platform should be tied to a specific language. The more choices there are, the better.

<comment><USER4> Have you actually shipped a complex codebase to the web? There are a TON of major issues which are just as bad:

Old problem: Downloading

New problem: Downloading. Large JS apps have to asynchronously load potentially very large codebases, _every time the app is loaded_

Old problem: Installation

New problem: Installation. What if the user has NoScript? AdBlock? Mobile Opera vs. Mobile Safari vs. Chromium vs. IE.

Old problem: Special User Permissions; gate keepers

New problem: Proxies. Websockets. Anti-virus software. On-machine firewalls. Corporate firewalls. "Special" toolbars and plugins that redirect the browser.

The web is not a "software distribution platform". It is not a "distribution platform", because code is retrieved on-demand and run, and there is no simple way to "cache" that locally and re-run it. (Chrome App Store does not count, because it is antithetical to the model you've described). It is not even software in the traditional sense that you mean, because everything is inherently client-server, so most of the app lives on the server or in the cloud.

<comment><USER5> None of the things you've listed are actually really problems, or have well- known solutions. HTTP caching solves the downloading problem for most classes of application. You can also run apps locally with app-cache and local storage (and in the future IndexedDB), though I'll grant that this isn't absolutely perfect today.

I don't understand your "installation" issue. A user with NoScript knows how to turn it off for a web application they want to use, and generally do so. They just want to retain control over JS execution. AdBlock is not related to actual application delivery, but revenue generation, somewhat orthogonal.

Having to support cross-platform quirks is also something that isn't unique to the web. If you support multiple versions of iOS for your app, you will hit similar issues. Not to mention if you wanted to actually be cross-platform and work anywhere other than iOS with the same app.

</comment></comment></comment><comment><USER6> Imagine there would be a language that would compile to proper bytecode (not JS), that would run on a standardized platform which is present on almost every computer, that is mature, sandboxed, and actually pretty fast. Oh, wait, that already exists and is called Java.

Java has gotten a bad rep lately due to some high-profile drive-by-malware bugs. But if the java codebase would have gotten the same intensive care that the webkit codebase got, this would no longer be an issue.

Many people remember java to be sloooow. When I first came into contact with it in school, that was certainly the case, but since a couple of years it has had a modern JIT that could easily rival native code.

Java applets are ugly, sure, but that is largely due to the decades old AWT, and the poor font support it used to have. With SWT, you can have native widgets (dunno if they work in Applets, but they are nice on the Desktop), and with antialiased drawing you can get the same results as with HTML5 canvas.

Java applets (and Flash, and Silverlight) died for marketing reasons, and political reasons. There were no _unsurmountable_ technical issues. The outcome is that we are stuck with "worse is better" for the foreseeable future, only max. 50% to 1% of the possible native performance, and a bunch of restrictions we only slowly realize what they mean (no sockets, no signed applications, no anonymous/serverless mashups, less hardware access than we used to have, suboptimal caching, suboptimal tooling like languages, debuggers, content creation tools (I haven't seen anything that can replace Flash for simple vector animations yet) and so on.

<comment><USER7> Asm.js is not Javascript. It's native code!

It's not a VM bytecode. It's assembly language, and the target machine is your native CPU. It is sandboxed by the browser. It is present on any computer with a browser and Javascript, which is more computers than have a browser and Java plugin, or any other plugin for that matter. Asm.js is less mature that Java, but it will grow up. It is currently supported by more browsers than Java, so even if it's crappier right now, it will eventually surpass and replace Java in the browser.

If you are thinking that asm.js is Javascript or is interpreted, you're thinking about it wrong. Think about it this way: Take an arbitrary executable. If you dissassemble it, you have some sort of assembly code. There are several different assembly language syntaxes, but they're all basically the same. Asm.js is basically just another assembly language, with two key differences.

The first difference between asm.js and any other assembly languages is that the only existing asm.js assemblers happen to assemble executables that are sandboxed by your browser. You can't do syscalls to use sockets or files or the Windows registry. You can't fork() or run non-asm.js executables. Still, if you can live with the "syscalls" that the browser gives you, you can run native code in any browser. The browser is your operating system.

The second difference between asm.js and other assembly languages is the really clever part! It is not just assembly. It is both valid assembly language that can be assembled to native machine code and also valid Javascript that can be executed by a Javascript VM -- and both ways of looking at it are _semantically equivalent_!

It's like being able to write a novel where the text is both valid English and valid Spanish at the same time, and the plot is the same no matter which language you speak.

So I lied. It is Javascript. But you shouldn't think of it that way. You write Javascript. Your compiler writes assembly language. Asm.js is assembly. The Javascript aspect is just a clever backwards compatibility hack. It could have been specified to have a more traditional and readable assembly language syntax, but then you'd need plugins and nobody reads assembly anyway. As is, it's machine code that happens to be able to run on any Javascript VM. This means you can deploy native machine code to any browser without a plugin. In the event that your browser is old and doesn't contain an asm.js assembler, that's ok! Your unmodified native code will still run, albeit more slowly, in a plain old Javascript VM such as everybody has had for years. Except lynx users.

The browser as an operating system is currently worse than a Java runtime plugin in that the browser has less functionality. However, browsers are currently better in that they have more penetration and a higher velocity of improvement. Long term, the browser as a full-featured operating system makes more sense than as a mere scriptable document viewer slash plugin container.

<comment> iso-8859-1 It's assembly language the same way LLVM bitcode is assembly langauge, which means IT ISN'T. It is also represented in text, which means that it is several times larger than it needs to be.

Another problem with Asm.js in practice is that it's used with Emscripten which doesn't define the syscalls you talk about. All the DOM/WebAudio/WebRTC/etc API's have to be redone in Emscripten's headers. GL was easy, because WebGL is so close to EGL and friends. But what about DOM manipulation? Emscripten can't really do this yet.

These two disadvantages happen to be problems solved in PNaCl, which has a compact bitcode (which doesn't pretend to be JavaScript) and a proper API (Pepper).

<comment><USER7> You are technically correct - the best kind of correct! While I was being a bit loose with my language, I don't think that changes the point.

So maybe it's not an assembly language or a bytecode, but that's a pretty unimportant distinction. Those are all intermediate representations (IR). A good browser will JIT your asm.js IR to machine code in much the same way that a good JVM will JIT your bytecode. An old browser will interpret it more slowly, but it will still work.

Asm.js may be crappy at the moment, but it will get better. It's an easily JITtable IR for the web that's already supported in all browsers, even the old ones. And the security is basically free since that's already being paid for. Yes, it's a bloated text encoding, but gzip is pretty effective. No, it doesn't have great compiler support yet, but Emscripten and equivalent will no doubt have lots of useful headers and emulation and translation libraries very soon. Asm.js is going to win for the same reason that Javascript won: everybody already has it.

<comment><USER8> Nitpick: asm.js is designed for AOT, not JIT, compilation.

A good browser will AOT asm.js, not JIT it.

(In other words: pre-compiled, not compiled on the fly. Consequence: immediately as fast as a JIT would have… eventually… made it, but initial pause while compiling.)

</comment></comment></comment></comment></comment><comment><USER9> This discussion is missing the simple point that the web is rapidly gaining all the flaws that Flash used to have, without the nice (for some) editing environment.

The web really isn't suited for app development at all, as the native mobile markets have demonstrated, while the viability of it as a document delivery platform diminishes every time the content gets hidden behind a massive layer of scripts.

<comment><USER10> > the web is rapidly gaining all the flaws that Flash used to have

False.

1\. Modern JavaScript vms are sandboxed, not native plugins with unending security holes.

2\. It's nearly all open standards and open source, not proprietary closed source controlled by one company. OpenGL, EcmaScript, W3, Mozilla, Chromium, blink, webkit.

3\. It works on mobile devices, flash doesn't.

4\. The tools are out there. Check out appcelerator or unity's tools.

5\. Flash never had the native performance or hardware acceleration that modern JavaScript has.

6\. Don't think Flash ever had the kind of momentum JavaScript has. Like has anyone ever made a derby.js for Flash? A sharejs? Compiled other languages to ActionScript? With source maps to help?

7\. Flash avoids all kinds of privacy settings and plugins in your browser. Flash gives you less control.

8\. Even Adobe has moved past Flash, these arguments are all done, why haven't you moved on?

<comment><USER6> I think there are a couple of misconceptions here:

> 1\. Modern JavaScript vms are sandboxed, not native plugins with unending > security holes. Flash _was_ sandboxed (just as Java). You were strongly > restricted in what you could access with ActionScript. Of course, the > security was poorly executed. I blame it on the fact that it was developed > in a different time, without the experience and tools we have today, and > that it was closed-source. Still, native plugins don't have to be inherently > insecure.

> 2\. It's nearly all open standards and open source, not proprietary closed > source controlled by one company. OpenGL, EcmaScript, W3, Mozilla, Chromium, > blink, webkit. True, but I'm starting to think "Open Standards" was a huge > Trojan horse. \- It lead to, or continued, a huge monopolization of > platforms. Only a few large companies are able to maintain modern browsers > (see the demise of Opera). This is bad, because they can push politically > motivated restrictions on their users. (Firefox has a whitelist to only > allow certain media codecs to play, although the system would support more. > I could modify the source for myself - I did - but it's of no use, as the > people visiting my sites won't be able to use it. I don't have the marketing > power of Mozilla or Google.) \- The "open" "web" platform limits what kinds > of apps you can write. You can't really write apps without an (accountable!) > central server. Without sockets, you have no Bittorrent, no P2P, no Tor, no > Instant Messaging... \- I think it also pacifies people who would otherwise > be worried about today's locked up platforms. "You can always write a web > app if you don't get in the app store."

> 3\. It works on mobile devices, flash doesn't. Which was a political > decision, not a technical one. There used to be thousands of free Flash > games, that would have ran with minimal porting on mobile devices. But Apple > couldn't control flash, they wouldn't get their 30% cut from Flash apps, and > they couldn't censor apps. So they forbid Flash on iOS, and crippled it on > OS X, which was one of the main reasons for its demise.

> 5\. Flash never had the native performance or hardware acceleration that > modern JavaScript has. Flash had support for native video playback before > HTML. It had 2D acceleration for animations before there was canvas, and > Shockwave Flash had 3D acceleration years before WebGL.

<comment><USER11> > True, but I'm starting to think "Open Standards" was a huge Trojan horse. - > It lead to, or continued, a huge monopolization of platforms. Only a few > large companies are able to maintain modern browsers (see the demise of > Opera).

Free-slash-open-source programs are like banks in this way. In principle, a bank that fails can always be shut down rather than bailed out, and this is what justifies the existence of private-sector banks. In principle, an open- source program can always be forked if you can't persuade the maintainers to make the changes that you want, and it's always been agreed that this is a central, essential requirement for a program to be considered free-slash-open. But some programs are, in practise, TBTF - Too Big To Fork. A program can be "big" not only by having a large codebase but also through network effects, such as having vast amounts of client software tied to one of its interfaces. The big-boy Web browsers are TBTF in both these ways. So if, for example, you're insulted by Google's decision to knife MathML (as everyone should be), it's relatively easy to roll a Chromium with MathML inside, but you'd still effectively be just maintaining a branch, because you'd have no hope of maintaining "your" browser independently if Google took the whole Chromium codebase in a direction you didn't like - and more importantly, good luck getting users to use your browser or developers to create MathML webpages to support it.

A second example of the phenomenon is the Gnome/KDE mess - _part_ of the reason that the Linux desktop sucks is that, even if you have a clear idea of how it could be better, it's still a whole lot of man-hours to spin up an alternative implementation, get apps customised for it, and so on. In general, an area is the domain of TBTF to the extent that you have to win a political persuasion battle or spend a truckload of your own money _before_ you can produce a viable implementation of your alternative idea.

The solution, to the extent that there is a solution, to these problems is a technical one: find a way to shrink large programs and/or break them up into small, reasonably independent ones. (Of course all social/political problems are technical problems in disguise just as all technical problems are social/political problems in disguise. ;) ) In the case of the web, this is why the vertically-integrated Web browser must go away [https://news.ycombinator.com/item?id=6720793](https://news.ycombinator.com/item?id=6720793) .

</comment></comment></comment></comment><comment><USER4> It's very simple - there is no magic here. asm.js is just a "pidgin instruction set architecture", to allow communication between an emerging set of VMs - the browser runtimes - and a compiler backend. (The front-ends are the LLVM front-ends.)

The article is exactly right in saying that it's a way to route around JS. Javascript fanboys should _not_ be praising asm.js, because it's a way to route around them. (Which is fine by me; JS is an abortion of a language that cannot die fast enough.)

I see asm.js as the Revenge of Compiled Languages. Coupled with generic interfaces for accessing underlying graphics and audio hardware, we're just right back where we started with Java applets. Write your apps in whatever language; run in the browser.

<comment><USER12> pwang, there are some people who actually enjoy coding in JS, believe me I am one of them.

One cool thing about JS is that you have runtimes for it in computers, tablets, phones, TVs and most current videogames so you can experiment and build stuff for a variety of hardware that no other language can reach as easily (of course you can reach anything with C but it is not easier).

Remember all that could be done in JS two years ago and all we could do now. Imagine by the end of the next year what we'll be able to.

I don't care if people are using LLVM to cross-compile other languages to the JS runtime, this kind of approach and research makes better runtimes and both camps benefit, the people who hate JS can use their fav language and those that enjoy JS end up with a better runtime.

<comment><USER13> I (not pwang) think it's an abortion of a language because the syntax, scoping and the language as are a whole is a pain to use. Sure, it runs on pretty much everything but that doesn't mean it's suddenly enjoyable to use. The only outstanding feature of JS is that it runs on lots of stuff but it need not be the only one.

As you say getting other languages to run is a good thing because those who don't like JS don't have to use it (or indirectly use it with stuff like Coffeescript).

<comment><USER12> just to be clear, I don't think that JS reason to be enjoyable is that it runs everywhere. I do enjoy the prototypical inheritance, I like the scope and the language in general. I don't like coffeescript but not due to a technical reason, its about personal taste, I'd rather work in JS. To each their own, the fact that we have a non-proprietary language that is available everywhere is a very good thing.

IMHO most people that do not enjoy JS is because they approach it from a mindset of an OOP programmer. People try to treat it like Java or approach it like a toy language to cook quick jQuery script then they feel frustrated. I am not saying that JS is everyones cup of tea but some people like me enjoy it.

</comment></comment></comment></comment><comment><USER14> This article neatly sums up my thoughts on asm.js. On the one hand, I really like the fact that Mozilla is doing a lot to promote Javascript (which I usually enjoy programming in). On the other, asm.js basically destroys any reason to write Javascript.

For someone interested in web-based gaming, it really discourages me from investing in Javascript-based tools, since the future _won't_ be hand-written Javascript. It's only a matter of time before a tool like Unity includes an asm.js export target.

<comment><USER15> That's a good thing.

We spend too much time developing languages instead of environments. Unity is a good environment for developing games. If your goal is to make a game you should use Unity (or whatever... GameMaker has an HTML5 export module; use that). Javascript has nothing to offer you to enhance your productivity and develop your game.

</comment></comment><comment><USER16> I'm very impressed by the Epic Citadel demo. But how do you debug a C/C++ program that has been converted to asm.js? Whats the current tooling like?

<comment><USER3> Usually I'm debugging a native "desktop build" of the code in VStudio or XCode since 99% of the bugs are not emscripten specific. But having said that: browsers are becoming a really good debugging platform as well. emscripten can emit source maps, which kinda lets you directly debug the C++ code in the browser (not as fluent as in a native debugger yet, since only code lines are mapped, not variables, but the potential is clear). Some WebGL related debugging tools are really good in the browser (e.g. Firefox' WebGL shader debugger or the WebGL inspector browser extension). Especially on OSX which doesn't have very good debugging tools for desktop GL the browser WebGL debugging tools are actually better then what's available as native tools (not as good as PIX or NVIDIA's NSight tool on Windows though).

<comment><USER16> Thanks! I was thinking specifically of bugs that occur in the browser target but not the native build.

Given your experience that "99% of the bugs are not emscripten specific", I'm very impressed with how emscripten can retain the semantics of the native code across the conversion and optimisation process. Obviously thats what any compiler does, but in this case the target environment seems to me to be much more complex than a physical cpu: threads, memory management, etc.

<comment><USER17> > in this case the target environment seems to me to be much more complex than > a physical cpu: threads, memory management, etc.

It compiles for a restricted subset of javascript. There are no threads (there are no threads in javascript itself in the first place), and it works around memory management (it sets up big typed arrays, and memory allocations are slices of that)

</comment></comment></comment></comment><comment><USER18> asm.js is brilliant because of the current situation we are in. However, the current situation we are in is silly, and can correctly be called a "tragedy of the commons."

Why? Well, for example, is JavaScript truly the best language we'd be able to create for browser scripting, or did it win by historical accident? (And I'm actually a _fan_ of Javascript programming!)

And beyond that, we'd all like something that gives us safe native-speed rendering control in the "sandbox". Silverlight was meant to, as was Flash/Flex. But those were proprietary, and we didn't want one company to have "control of the web." HTML 5 hasn't been what we hoped for.

So basically, we're one big, divided bureaucracy that is not making rational decisions (what big divided bureaucracy does?).

I guess what might happen is something new will eventually come along (who knows how long it will be) that actually displaces the web as we know it. It will be an adoption-tsunami, similar to what the web itself was, and therefore it will be able to ignore this series of historical accidents that we're chained to today.

</comment><comment><USER19> I agree, an Unreal Engine compiled to javascript doesn't make sense. It would make much more sense if it were compiled to some kind of bytecode (like NaCl). That will ultimately give you better performance, less loading time, etc.

However, maybe there are some libaries which compiled to asm.js are small enough that they can still run in a browser without asm.js support, e.g. an compression or an encryption algorithm compiled to javascript. Maybe that is the sweet spot for asm.js: You are still able to support Safari and IE though native javascript, but it's faster on Chrome and Firefox.

<comment><USER20> > I agree, an Unreal Engine compiled to javascript doesn't make sense.

That demo runs at 60 FPS in my browser, allowing me to casually spend more money on more video games. Your objections seem ideological, as opposed to perf benchmarks, distribution improvements or other quantifiable terms.

Can you expand on why it doesn't make sense?

<comment><USER21> Just make sure you don't refresh your browser cache after downloading a couple gigs of assets.

<comment><USER3> Well that has nothing to do with JS or asm.js, only how the game manages its assets. The Citadel demo needs to preload all data before it starts which is very easy to implement but is of course a suboptimal approach to asset loading, a proper game would only load what's really needed to start (4..5 MBytes max?), and from then on stream everything on demand in the background. It's about how much new data can be presented to the player per second, not how big the game data is overall. Asset sharing/reuse, data compression, procedural generation are all important topics for browser games in general, not just games running in asm.js.

</comment></comment></comment></comment><comment><USER22> >It means JavaScript has nothing to do with it, it's just the poison we ended up with, the bitter pill we supposedly have to swallow.

Yeah. That's right. If we could remake the web from the ground up, and had 100% buy-in from all the major parties (corps and devs) to implement and use the new common standard, JavaScript would not be the central language. But we can't. So welcome to reality.

</comment><comment><USER23> On an unrelated note, I absolutely love that site's header animation (like what you see if you scroll up and/or click "play").

<comment><USER24> Is _that_ why mobile Firefox kept crashing? Dammit, don't send that stuff to my phone if I didn't ask for it.

</comment></comment><comment><USER25> The citadel demo, if anyone's looking for it: [http://www.unrealengine.com/html5/](http://www.unrealengine.com/html5/)

The article seems pretty doomy regarding asm.js - is it really going to take off and become an unweildy/frozen standard? Or is it of interest only to people writing game engines in pure JS / vanilla browser technologies?

<comment><USER26> Honestly, I've got no idea what the OP was trying to say... I think they are implying that asm.js is _cool_ , but they're annoyed that it's being built on top of JS rather than from-scratch.

<comment><USER27> Second this. I get that they are saying - asm.js is cool, but it's on JS, so eugh.

Personally I'd love for a really low level language (statically typed, little if any magic, no-GC, multi-threaded) to work across all browsers, but I don't think browser vendors can just sit and say - here is the perfect cross browser language that will make all of net easy.

Perhaps the best strategy is to have low level strict language on top of which you build more easier to use constructs - which describes IMO both asm.js and PNaCl.

<comment><USER28> As the writer of the native compilers, I read the article as written from the kind of the developer who always developed in interpretative languages, who sees asm.js as "wrong" because "it's not the JavaScript he would write by hand.

And again. as the writer of the native compilers, I'm absolutely pro asm.js. I believe it's the best direction that JavaScript optimization can take, solving more hard problems elegantly. Including the fact that asm.js is a better representation than most of bytecodes (or even all). Seriously.

<comment><USER27> Interesting. Why do you consider that asm.js is a better representation than most bytecodes?

Don't get me wrong JS is awesome (and so is asm.js) but I think stuff like static typing and multi-threadedness are JavaScripts Achilles heel.

<comment><USER28> We've already tried native and bytecodes: ActiveX, Java, NaCl, Silverlight.

</comment></comment></comment></comment></comment></comment><comment><USER29> So Asm.js is a strict subset of Javascript, and the author is saying that Asm.js is only useful when you want to compile a C/C++/Whatever library into Javascript, and that it's not interesting for Javascript developers themselves. Then I wonder: why? Can't you write Asm.js code directly (instead of compiling to it)?

<comment><USER3> You can but it's a bit like writing inline assembly code. The code doesn't look very nice and you lose LLVM's optimizer passes which kick in before the JS code generation.

<comment><USER30> But you could take Brython or Pythonium and make a Python2asmjs compiler (as I suggested in their forum: [https://groups.google.com/forum/#!topic/brython/I7VoZNCiphI](https://groups.google.com/forum/#!topic/brython/I7VoZNCiphI))

This could be a chance to skip JS altogether.

<comment><USER31> That's the great hope. Instead of bringing Javascript to the server side to have a single-language workflow, you'll be able to bring the non-JS language of your choice to the client side.

</comment></comment></comment></comment><comment><USER32> > _" And this is really the biggest contradiction of them all. Tons of people > have invested countless hours to build these VMs, these new languages, these > compilers, these optimizations. Yet somehow, they all seem to agree that it > is impossible for them to sit down and define the most basic glue that binds > their platforms, and implement a shared baseline for their many innovations. > We really should aim higher than a language frozen after 10 days, thawing > slowly over 20 years."_

It's kind of hard to redesign an airplane in flight, and because of the way the web works, that's a problem that applies to browsers a lot more than some other pieces of software.

<comment><USER33> > It's kind of hard to redesign an airplane in flight

It is true that IE6 was 5 years in flight. However that has changed. Google replaces Chrome plane each 6 weeks.

JavaScript it is new IE6.

I really would like to see Dart in Chrome stable release. Sometime ago I thought that pure VM, like JVM, would be better. Now I think it is safer to leave scripts loaded as plain text. Just like HTML, CSS. It is hard to guess how whole web ecosystem would work with scripts loaded as bytecode.

</comment></comment><comment><USER34> Could we combine ASM.js and "native web libraries?" (see [https://github.com/samsquire/ideas#51-native-web- libraries](https://github.com/samsquire/ideas#51-native-web-libraries))

Compile some non-Javascript code. Create a package containing the native code. Serve ASM.js and the native web library.

This package is then installed in the browser and the browser switches to it when it detects code that is about to be used that matches the installed web library signature.

If the browser supports native web libraries, it uses that. Otherwise it falls back to ASM.js.

Either way, we gain performance and we can compile code natively AND to ASM.js.

</comment><comment><USER35> Windowx XP give me the blue screen of death, with Firefox 25.0.1

<comment><USER36> XP is end of life in 5 months so I would expect a lot more problems in the not so near future.

[http://www.microsoft.com/en- us/windows/enterprise/endofsuppo...](http://www.microsoft.com/en- us/windows/enterprise/endofsupport.aspx)

<comment><USER37> like gigantic botnets due to unpatched zero day exploits.

</comment></comment></comment><comment><USER38> Is it possible to compile Blink and run it using asm.js in Firefox? Then you could run Firefox inside of the Blink renderer, also in asm.js, and ...

<comment><USER39> One problem is that you can't do runtime code generation with Emscripten. V8 has no interpreter, so you would need a different JavaScript engine.

JavaScript engines can be run using asm.js. [https://github.com/jterrace/js.js](https://github.com/jterrace/js.js) is a SpiderMonkey port to Emscripten (with JIT disabled).

<comment><USER40> You can absolutely do runtime code generation, you'll just be generating javascript. If you generate asm.js compatible javascript you'll be effectively JITting native code on the fly (you're just jumping through some absurd hoops to do it).

There are some proof-of-concept projects out there that do runtime generation of JS on the fly for things like recompilation and such in the browser right now. I believe Shumway [1] does it (recompiling ActionScript VM bytecode to JS on the fly) and PyPy.js has an experimental JIT too [2]. The runtime library for my compiler JSIL also does a significant amount of runtime code generation to improve performance and reduce executable sizes [3].

[1] [https://blog.mozilla.org/research/2012/11/12/introducing- the...](https://blog.mozilla.org/research/2012/11/12/introducing-the-shumway- open-swf-runtime-project/)

[2] [http://www.rfk.id.au/blog/entry/pypy-js-poc- jit/](http://www.rfk.id.au/blog/entry/pypy-js-poc-jit/)

[3] [http://jsil.org/](http://jsil.org/) ; [https://github.com/sq/JSIL/blob/master/Libraries/JSIL.Unsafe...](https://github.com/sq/JSIL/blob/master/Libraries/JSIL.Unsafe.js#L1254) and others

</comment></comment></comment><comment><USER41> I don't see the problem with asm. It appears that Chrome and Opera support them too. It can only be a good thing. [https://blog.mozilla.org/futurereleases/2013/11/26/chrome- an...](https://blog.mozilla.org/futurereleases/2013/11/26/chrome-and-opera- optimize-for-mozilla-pioneered-asm-js/)

It doesn't require requires a plugin install like NaCl

<comment><USER42> The article links to that article, come on! Don't people read stuff anymore?

<comment><USER43> The linked website has an horrible animated background picture. Reading the text is almost impossible with IE 11. Screenshot: [http://postimg.org/image/46p2krx95/](http://postimg.org/image/46p2krx95/)

<comment><USER44> I hate to be that guy, but you're using IE.

On a serious note, you can't really blame people for not supporting a browser that needs hack for every single version.

Related: [http://www.paulirish.com/2011/browser-market-pollution- iex-i...](http://www.paulirish.com/2011/browser-market-pollution-iex-is-the- new-ie6/)

<comment><USER43> Ask the JQuery devs, Chrome causes them more troubles than all other modern browsers combined (IE9+, FF, Safari, etc).

I am well aware of the history and I hate IE < 10 too. I use FF as main development browser, and beside others of course Chrome and IE 11. The trouble comes when people only test their website with Chrome. I am using IE 11 as I have to at my workplace and it has by far the best UX (IMHO). FF still uses only one process and cannot handle my habit of using dozens or even hundreds of tabs in an optimal way.

</comment></comment></comment></comment></comment><comment><USER45> I am surprised that Dart is not mentioned as a comparison in any of the comments. It is also heralded as a better and more performant Javascript. Is it because the use-case of ASM more limited? I would imagine that DOM integration in ASM would be tricky so that would set Dart apart.

<comment><USER46> asm.js is not "a better JavaScript". It's not "JavaScript with better performance". In most senses that people would use, it's not even JavaScript, really.

asm.js is not a faster jQuery. It's not for doing yellow-flash alerts, or for more quickly selecting and manipulating DOM elements.

asm.js is a way to ship traditionally desktop-type software, including software which was originally written in a language like C or C++ and compiled into asm.js from that source, to a web browser, to be run in the web browser.

asm.js is (a subset of) JavaScript's syntax, used as a transport/intermediate representation for that code. It will execute just fine as JavaScript, and well-optimized JavaScript engines can do quite well with it (hence it is fully backwards-compatible, if not as fast, in a browser which supports JavaScript but not asm.js), but the intent is primarily to treat it as an IR, with the browser performing the final step of compiling that IR to native code before executing it as native code, rather than executing it as JavaScript.

</comment></comment><comment><USER47> I definitely recommend poking around the console on this site!

</comment><comment><USER48> UTF-8 is a legacy mechanism now?

</comment><comment><USER49> What would it take to get a standards board to approve a common VM for browsers?

I don't see this ever happening. They would in effect be eliminating themselves. They would have to find new jobs or even careers.

Once the VM is standardized, what about HTML/JS/CSS. Well who the hell wants to use those slow moving legacy technologies?

So the standardization now becomes for python, for C#, for scala and lisp ETC.(and their associated UI frameworks). Not controlled by the W3C at all - thus their extinction.

It's more than this though. The W3C has an agenda and it is not to advance technology, it is to slow it down. They want everything moving so slowly that standards can be followed across the board. They want JS/CSS/HTML to be the end all not just in the browser, but everywhere. I think that this should be pretty clear if you follow their trail going back 10-15 years.

It is like a socialist government in a way. The promise is to keep everything stable and let everyone be on equal footing (equal here because the technology moves so slowly that nobody can be left behind by it.) They have to kill and silence many revolutionists who want freedom along the way to do so but consider themselves justified in doing so. Meanwhile, in a neighboring free government with limited govt, people flourish. They have more ups and downs true, and mistakes are made along the way, but after 10 years the free country is wealthy and flourishing, while the socialist one is stagnant and poor.

Think of the mere opportunity of innovation that would exist if a language creator could sit down and create a new language and UI framework universally for browsers in a well established and supported way. This lack of freedom is stagnating innovation.

Let the people decide. Make a standardized VM and your HTML/JS/CSS stack and let the people vote with their choice of options that appear.

<comment><USER50> You are overestimating the power that the standards board has over what browser vendors choose to include in their software. What you are asking of them is not really in their power. Besides, if VMs can make the W3C irrelevant, then they will do so regardless of W3C's approval of any particular standard.

For what it's worth, we're already very close to the point where "a language creator can sit down and create a new language and UI framework universally for browsers".

<comment><USER49> _You are overestimating the power that the standards board has over what browser vendors choose to include in their software._

Mozilla and Google already want a VM as evidenced by their work. It would not take any convincing to get them there.

 _if VMs can make the W3C irrelevant, then they will do so regardless of W3C 's approval of any particular standard._

Now you're underestimating the power of an established standard. For something to really flourish, enterprise has to adopt it. Without a standard, this will not happen. This is a bit of chicken and the egg scenario.</comment></comment></comment>


Intel Memory Encryption Technologies [pdf] - <AUTHOR> https://software.intel.com/sites/default/files/managed/a5/16/Multi-Key-Total-Memory-Encryption-Spec.pdf <comment><USER2> Seems similar to the technologies already adopted by AMD's Ryzen (EPYC):

[https://www.anandtech.com/show/11551/amds-future-in- servers-...](https://www.anandtech.com/show/11551/amds-future-in-servers- new-7000-series-cpus-launched-and-epyc-analysis/3)

</comment><comment><USER3> I'd rather they opened up Intel CAT to consumer products to help protect against side channel attacks. Memory encryption isn't enough and doesn't address current exploits that are already being used against VM providers.

<comment><USER4> I'm not aware of any stories of side-channel attacks being executed in the wild. Do you have links to any such post-mortems?

<comment><USER5> The sorts of organizations which get targeted by attackers sophisticated enough to use side channel attacks generally don't publish post-mortems.

But I've heard enough through unofficial channels to be very very confident that such attacks are indeed taking place.

</comment></comment></comment><comment><USER6> Can someone explain the context here? Is the intended use for this to prevent a cold boot attack, or also provides protection against an active buffer overflow attack or something?

Intel ME can obviously still lookup this key..

<comment><USER7> VM isolation. Once the key is set, a subverted hypervisor won't be able to read other machines' memory. (Modulo side channels...)

</comment></comment><comment><USER8> too many interfaces for applications to control keys / entropy imo. risky considering attacks against previous low level interfaces. i'd prefer to see less control by/from applications. it's even stated in the spec there's a lot for the programmer to consider and implement to make it really secure. probarbly itl or "that bald guy who breaks all low level things" (forget his name, sorry guy!) will show how to subvert / break this when it gets implemented more widely.

in my eyes: a root mode hypervisor can break al lthe things for it's guests (nothing new, but no added benefit for that.) pconfig command might be used to influence system if BIOS is compromised early on. SOC vulnerabilities will break this for sure. (and they seem common enough _glares at ME_ ).

Ofcourse, can't complain that they try to add these kinds of layer. change has to start somewhere! :-)

</comment><comment><USER9> I'm going to keep posting this short tech report until people stop making new broken shit: [https://www.ssrc.ucsc.edu/Papers/wasptr-15-03.pdf](https://www.ssrc.ucsc.edu/Papers/wasptr-15-03.pdf)

</comment><comment><USER10> IBM z14 (released on July 17, 2017) comes to mind...</comment>