Ask HN: Are there any solid arguments against SPAs in 2017? - <AUTHOR> <comment><USER2> The high level answer is "absolutely" and the more detailed answer is "it depends how you build them".

If built without server-side rendering, they're often obscenely slow. Browse the Modern Web™ on 2G and it's rage-inducing. A comment I made when this same question came up recently: [https://news.ycombinator.com/item?id=13212789](https://news.ycombinator.com/item?id=13212789)

If built poorly, all of the browser features you've come to rely on break. Like the back button. And links. And scrolling.

Does your website need to be accessible? Better remember to build that in too.

How about SEO? AMP? Browser history?

Most of this stuff works out of the box with traditional HTML and server-side rendered pages. So even though it's 2017, I think the question you should still ask yourself is, do you plan to re-implement all of this functionality? If not, 10MB of the hottest new JS framework may not be for you...

(And this is coming from someone who builds SPAs for clients for a living.)

<comment><USER3> The SPA frameworks and web APIs available to us now are pretty good - browserHistory as you mention, is available via `window.history.pushstate` and abstracted away for you in most SPA frameworks.

> If built poorly, all of the browser features you've come to rely on break

Alternatively phrased: "you may have to learn some new APIs"

But the SEO can be an issue (Google is not consistently executing AJAX) and render performance is definitely an issue.

I made [https://www.prerender.cloud/](https://www.prerender.cloud/) to address the SEO and rendering performance but that still doesn't make SPA the obvious choice.

Do you need a rich client experience? ( a UI that continuously updates to reflect the state of a data store, or more generally, a complicated UI that doesn't do a hard page refresh ) If yes, then SPA is the better solution.

If you just need a non-interactive set of pages (a blog), then a SPA probably isn't the answer.

> If not, 10MB of the hottest new JS framework may not be for you...

What hot new JS framework is 10MB? React is ~60kb gzipped

The auth frameworks (auth0.com or AWS Cognito) are large though, ~150KB gzipped. But with code splitting you can eliminate that from your main page. Or you can move the auth part of your app to a subdomain (app.example.com) and keep example.com lightweight w/out auth0/cognito)

<comment><USER4> > you may have to learn some new APIs

Yeah, but you have to then call those APIs. It's like buffer overflows, which can be prevented with trivial checking, but those checks have to be done everywhere, which is why they're still happening in 2017.

It would be actively difficult to break back, links, or scrolling with server side rendering. Even on good SPA I run into bugs I have to work around on a daily basis.

</comment></comment></comment><comment><USER5> I think SPAs make sense for a very limited set of applications. I worked on Grooveshark, which was an SPA by necessity - you don't want page refreshes breaking music playback. We had to do an insane amount of work to get initial load times down, and it was never as fast as we wanted it to be. Some things about an SPA were nice, your server side code can be very fast and very simple and scalable when you can rely on the client side to maintain state for example, but with that comes a lot of fragility and ultimately, a lot more work.

Working on a SPA can be lots of fun, so I'd consider it for a hobby project, but I wouldn't go the SPA route for a production app unless there were some very compelling reasons to do so.

<comment><USER6> Your bad experiences are not because SPA is a bad idea, but because you did it wrong. Once an app is loaded there's simply no reason to every throw it out and start over. Do native apps have to throw any data away every time they open a dialog, or change an aspect of the gui? No, because that is silly and stupid. The only reason page refreshes even exist is because the original design of the internet was for viewing documents. However that's not was the web is used for any longer, for the most part. The web is not simply for viewing documents. It's at least as much for running apps now. A good webapp loads ONCE and then simply makes ajax calls to get JSON from the server when it needs to re-render part of the screen or even most of the screen, but if you are still doing entire page refreshes in 2017, then i'm just sorry but you are clueless. That's just not the way to do it. Web development _is_ complicated, and I admit just reloading the entire page every time something happens _is_ easier, but that doesn't make it better. Like the old expression "anything worth doing is worth doing right". It applies here.

<comment><USER7> What is your favorite SPA? HN's experience on a mobile phone, loading pages when clicking links, is far superior to any SPA I know of. Compare HN to glitchy sites like Twitter or Reddit, where swipe from left back doesn't work without flashing.

If you are simply rendering content and don't require high degrees of in-page interactivity, your traditional web page centric app will be much better user experience.

SPA's for content dominant sites are often a crutch to work around slow backend. A full page refresh (with optional pre fetching of next click HTML) is vastly superior to SPA's and spinners while loading. Browsers are good at loading web pages.

<comment><USER6> Once your browser has loaded the page, it's always (and I mean 100% of the time) more efficient to get whatever data you need from your server in the form of JSON, and then use that json to update ONLY the part of the page that is changing. Even if your entire DOM tree is changing that's STILL no excuse to do a page reload. The only page reload that ever needs to happen is when the user first browses to your url.

<comment><USER7> Why do you think executing JavaScript to render a piece of content fetched from the server as JSON is _always_ more efficient?

Browsers are really efficient rendering HTML, so it all depends on how complex your JSON to DOM element transformation is. With async parsing / loading of JavaScript, your new page can be rendered before the JS is even loaded, so the extra initializaion per page view is hidden from the user.

Which site feels better, yours or Wikipedia?

<comment><USER6> My site is not finished, so you can't judge it by the experience. However, it is most definitely vastly superior to Wikipedia. meta64 is hierarchical like a directory tree, and can go to any depth. I haven't written the whitepaper yet, but my design makes wikipedia look like the ancient artifact it truly is compared to meta64.

All my API is fully JSON up and JSON down(REST-like), and is like a microservice api. The server is a service with an API. The javascript client is in control of rendering the data it gets from the server. I'm convinced that's the most efficient design.

<comment><USER8> Yoiks. 12 seconds until the first piece of content is displayed (compared to Wikipedia's 0.6s). That there (TTFC - Time to first content) is the perennial problem of client-side apps, the inability to get the first piece of content immediately to the user.

Since you say it's all JSON APIs, it should be trivial to build something on the server to server-render the initial page with content and serve that up while the rest of the application tries to download itself into the browser.

<comment><USER6> if I had minification on, your comparison would be apples-to-apples. I have it off for now, for debugging. Also my APP installs itself the first time you visit the page. Think of it as an APP INSTALL. Wikipedia is NOT an app, and has nothing to install.

<comment><USER8> Thinking of it as an app install feels like an anti-pattern. Like when you turn on the Xbox for a quick five minute play, and have to sit through a 15 minute update before you can even do anything. It's a bad user experience.

This approach was a commercial failure on the native platform level (those Office-like app suites with network install of components each time you needed them). It was also a commercial failure on the "build my desktop from scratch when I boot up" environments.

It yet another tick in the "does not belong in a browser" list.

Perhaps Single Page Applications need to run inside a window where there's no browser navigation bar, no url bar. Stripped down so far it's not actually a functioning browser. That feels very much like a native GUI library at that point. Except for that ludicrous notion of the app needing to be installed each time the chrome/window is launched.

I can't see how "install the app each time you land on this website" is competitive against native's "install this app once, and run many times" approach.

<comment><USER6> A well-designed web app will have a version number embedded in the filename(s) of the large file(s), (like the filename of a minified JavaScript file containing the entire app) so that upon first visit to the page the app is downloaded and "installed" (cached), but on subsequent visits your browser grabs the file from its local cache. This is really a seamless and excellent form of deployment, and when done correctly the browser only waits for new downloads when a new "version" of the app has been deployed to the server. So well written SPAs like meta64 do have the "install this app once, and run many times" behavior.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> SPAs don't bring major benefits but they certainly make the implementation complex.

Github is a good example of it. Server side renders are generally faster than when done using front-end framework.

I will just post this tweet from a google employee here : In my tests, a client-rendered SPA, + caching, + service worker, is still slower than an uncached server render

[https://twitter.com/jaffathecake/status/799199764558401536](https://twitter.com/jaffathecake/status/799199764558401536)

<comment><USER10> They pass the rendering to the clients allowing the server to serve more clients.

</comment></comment><comment><USER11> Here'a couple for starters.

1\. They don't work well in multiple browser tabs. Specifically if you're storing a lot of data in memory it gets duplicated between tabs. Perhaps shared workers might be a solution in the future, but not now.

2\. They allow designers to "enhance" the UI in new and wonderful ways, which isn't always good for user experience. It's like being tele-ported back to the windows native apps days. Plain old web apps forced simplicity and consistency in how things worked across the web. With spa's not so much.

3\. Harder to test/re-create error conditions because often state of an application isn't represented in the url. (though it can, with good app state storage/structure, actually be better I think)

4\. Harder to deploy new versions to apps sitting in users browser. So a user loads your wonderful spa app and leaves it open all day in their browser. You deploy an updated version mid day... how exactly does that user know to load the new version? In traditional web apps, updated versions are loaded on next page load.

5\. You have to do something for page loading indication, since the browser no longer gives any indication it's waiting on the server for new data.

</comment><comment><USER12> Yes.

Unnecessary complexity: [http://intercoolerjs.org/2016/05/19/back-to-the- future.html](http://intercoolerjs.org/2016/05/19/back-to-the-future.html)

API Churn/Security tradeoffs: [http://intercoolerjs.org/2016/02/17/api-churn- vs-security.ht...](http://intercoolerjs.org/2016/02/17/api-churn-vs- security.html)

REST was a magical idea, but not for JSON & SPAs: [http://intercoolerjs.org/2016/05/08/hatoeas-is-for- humans.ht...](http://intercoolerjs.org/2016/05/08/hatoeas-is-for-humans.html)

<comment><USER13> Very interesting! I'm trying the demos on [http://intercoolerjs.org/docs.html](http://intercoolerjs.org/docs.html) and noticed its a little slow to update the form (after the mouse enter demo).

Do you update only after the post succeeds?

<comment><USER12> Thanks!

The demos all use mockjax (great library: [https://github.com/jakerella/jquery- mockjax](https://github.com/jakerella/jquery-mockjax)) with an intentional slight delay to simulate a server round trip. Otherwise, it's just a DOM swap, which should be very fast.

</comment></comment></comment><comment><USER14> SPAs = Single Page Apps (not that everyone here wouldn't know that definition...but acronyms seriously suck ;). They create miscommunication and people who haven't been initiated yet are afraid to ask what it means. This one in particular has a lot of meanings: [http://www.acronymfinder.com/Information- Technology/SPA.html](http://www.acronymfinder.com/Information- Technology/SPA.html) (it likely means something completely different to a security person vs a network admin vs a front end dev.)

</comment><comment><USER15> SPA is just an architecture. The argument "against" SPAs is the same as any other tech - don't use the wrong tool for the job.

The right tool really depends on your specific use-case, and business situation...

</comment><comment><USER16> I make things so here's my perspective: SPAs are more complex which means more work and more problems.

One of the apps I'm building has one page that needs complex interactivity. So that's the only page which will have a vuejs/vuex-driven UI.

For the rest, Turbolinks gives me high performance for (almost) free.

So for someone like me who doesn't like typing more, spending more time and fixing more issues than absolutely necessary, SPAs are a no go for 2017.

</comment><comment><USER17> A poorly written SPA has worse usability than a poorly written Rails CRUD app, because your potential screw-up surface area is larger.

If you have a lot of experience writing SPAs and a team that's eager to learn, maybe you'll get everything right: server-side rendering, graceful error handling when the app plumbing fails, appropriate separation of server-side and client-side workloads, good performance on shitty connections, consistent behavior across browsers...

Personally, I enjoy using well-made SPAs, but often find myself fighting against many of them because there are so many considerations that go into making them right.

<comment><USER7> What is your favorite spa app?

</comment></comment><comment><USER18> I see, breaking back button and links is one problem with that is mentioned a lot with SPAs. However, with a good routing library can easily solve both of these, especially when targeting modern browsers, IE11+, Android 4+ and iOS 8+.

Even for older browsers, in "no-framework" setting, I have used [https://github.com/mtrpcic/pathjs](https://github.com/mtrpcic/pathjs) with a lot of success.

Getting scroll position to stay where you left is tricky, though. Has anybody posted some tricks on getting this right?

<comment><USER19> Most routers have a "onBeforeNavigate" hook that you can use to cache the scroll position. In that regard, it's not difficult... but where to cache it is a whole 'nother question!

</comment></comment><comment><USER20> Yes there are and I am a fan and built some - currently working at a bank as dev for rent - and they are doing it poorly ( I don't want to name the stack, because it's not responsible for a 4mb first page load + 1mb CSS - uncompressed ), it's their first big Js project and their cool 'kids' fresh from university... No server-side rendering and no-js fallback, concept copied from another bank... so glad I am out soon - it really makes my head hurt. I didn't think you can hurt an app so much by moving it do Spa, just for the sake of Spa. Most surprising, for me personally - UX issues, because they have no 'refresh'/change indicator and people don't expect things to change instantly - without page reload...

</comment><comment><USER21> Most SPAs I visit break swipe-right-to-go-back functionality on my iPad – and it's infuriating. GitHub and mobile Reddit are huge offenders of that one.

<comment><USER22> Man I spent ages trying to get swipe right to work in my web/cordova app (in particular dealing with both url routing and animated back/forward transitions), and I was confused why I could find so few articles or discussions about it. Perhaps many SPA's just don't bother?

Maybe I should dust off my blog and do something about this missing bit of arcane SPA lore.

<comment><USER21> I heard that this was a hard problem for Basecamp to solve with Turbolinks 5 as well. I'm sure a post on a good solution wouldn't hurt.

</comment></comment></comment><comment><USER23> Lots of arguments here against an SPA are along the lines of "it probably is the wrong answer to your requirement most of the time". Related question. When is it best to use an SPA? My hunch is that it's not purely about aesthetics but something functional like Grooveshark/soundcloud not stopping a song that's playing when changing the page. Just not sure what qualifies as needing an SPA.

</comment><comment><USER24> For me, perfect example why not move to SPA in 2017 is Freshbooks, I'm their active user and found that their new version(introduced recently) is slow, initial load slow (very), transitions between tabs is slow etc. Personally I dont see the reason they moved to SPA (they using Ember framework which I heard very optimized in compare other frameworks(not libraries as React))

<comment><USER25> There's a ton of sites that have moved to SPAs that shouldn't be. Three come to mind as I use them quite a bit: Walmart.ca, Fido.ca and Rogers.ca

Hell even Google cannot get SPAs right using their own framework [1]

[1] - [https://pbs.twimg.com/media/C0n-bqwWEAEV6eg.jpg:large](https://pbs.twimg.com/media/C0n-bqwWEAEV6eg.jpg:large)

</comment></comment><comment><USER26> I really like them - when they are done well, ie not obscenely slow.

Like most people, I hate it when something like an article or a wiki turns itself into an SPA for no reason. But I do find myself thinking that the space between "should be an SPA" and "should be a static site" is not very big.

</comment><comment><USER27> Don't use a SPA if you intend to get a lot of mobile traffic and/or all your site does is render articles or other text-based content.

<comment><USER28> If you intend to get single pageview mobile visits, sure. But if your mobile users are expected to interact at length with the page, then you get the benefits of an SPA.

<comment><USER29> I find most SPAs especially painful on mobile. HN is a great example that "classic" HTML pages can be very easy to navigate, independently of the screen size. It is very fast and behaves exactly as it should.

</comment></comment></comment><comment><USER30> Traditional applications are simpler implementation-wise and impose fewer demands on the client (in terms of performance, using the latest browser, etc).

</comment><comment><USER31> Twice as much code to write. Ok, maybe not twice as much, but it does seem like a lot more stuff needs done in the front end compared to just writing a fairly standard app in Django.

</comment><comment><USER32> 1) It's too hard. And I think this argument gets way less attention than it deserves. Most businesses these days win or lose based on agility and time to market. The more energy you spend innovating your tech stack, the less energy you have available to innovate your business model.

2) Javascript bloat. This is increasingly important as mobile gradually overtakes desktop, and cheap Android phones proliferate. The more client-side code, the more your performance is limited by your users' own crappy devices.

3) It's not trendy anymore. There was only one truly exemplary, popular SPA, and that was Gmail. Isomorphic/universal is the new hotness, and that requires server-side rendering.

4) The Stack Overflow Effect[1] didn't take. Every client-side framework is so painful that people can't wait to migrate their production apps to something different. So now there are dozens, probably hundreds of frameworks in production, and each community lacks the stability and size to allow newcomers to bootstrap quickly.

5) It's just bad UX. People still manage to get SPAs wrong in 2017. My bank just rolled out a new SPA interface to their suite of consumer budgeting tools, and didn't bother with the History API. Every time I navigate back, it takes me out of the suite entirely and I have to find my way back manually to where I was. I think this problem is a consequence of #1 and #4, though.

\</comment><comment></comment><comment></comment><comment></comment><comment>-

[1]: [http://svdictionary.com/words/stack-overflow- effect](http://svdictionary.com/words/stack-overflow-effect)

</comment><comment><USER33> Extra complexity. If you're building something simple, it's often quicker or easier to reason about if you just put it together with a basic web framework.

But if you're doing anything reasonably advanced or specifically need the "application-like" feel of an SPA, I don't think there are really any compelling arguments against it. _Maaaaaybe_ the size of the initial payload, but there are strategies to mitigate against that anyway.

<comment><USER34> Just to provide a counter point, I find it much simpler to work with SPAs. You can build a clean API which only deals with JSON, and ship a separate frontend which is deployed reliably to a CDN. I can see why 'one thing' would seem simpler than 'two things', but like functions and modules, often having more makes things simpler to grok.

<comment><USER33> I'd be inclined to agree with you _once_ the application has reached a certain level of complexity. If you're doing anything vaguely complicated around how you fetch/display/mutate your server data, then it can be a much cleaner pattern to keep a REST/GraphQL API separate from your client logic.

But on a super simple app (static site, basically), you have to deal with the overhead of the things that @aclimatt is referring to (browser history, routing, loading states etc) that basically come out of the box in your browser before you break them.

</comment></comment></comment><comment><USER35> HTML is easy and fun ...

      <h1 class="big"><% =topic %></h1>

vs

      function createTopic(strTopic) {
        var heading = document.createElement("h1");
        var topicText = document.createTextNode(strTopic);
        heading.appendchild(topicText);
        heading.setAttribute("class", "big");
        return heading;
      }

</comment><comment><USER36> Great question. Recently I decided against splitting my application into two different apps: backend and frontend. I landed on a simple Rails app with an internal API with webpack included for ES6/React/Mobx stuff.

[https://sergiotapia.me/using-webpack-and-react-in-a-rails- ap...](https://sergiotapia.me/using-webpack-and-react-in-a-rails- application-e195a0122f45#.14x1egh6n)

Best of both worlds.

The engineer in me loves the idea of them being separate. For performance, for technical reasons and for scalability.

The 9-to-5'er in me doesn't agree. I would spend too much time orchestrating. For example, saving user JWT tokens and having to handle requesting one for each api query. Too much time spent on things other than my core business problem.

With a simple Rails app, I can sign in my users with Devise, no brainer. And build out React stuff on HAML templates as needed.

</comment><comment><USER37> SPA is very broad. Static content work best when delivering only the minimal assets needed to render. Googles AMP does a very good job at this. Dynamic apps have a very different set of concerns. All SPAs aren't the same. Only the stateless, pure renders, like React and Vue, offer a compelling potential to unify the concerns of static content and apps that need to run across multiple platforms and network conditions. It comes at increased complexity and cost to maintain a multi-platform structure. If there's no business or consumer benefit there's not need to over engineer a solution to use a SPA.

</comment><comment><USER38> I'm surprised nobody has mentioned a big selling point of a well-built SPA: cross platform portability. The architecture of an SPA forces you to clearly separate backend and frontend, so that frontend web is effectively an independent client querying a backend API, just like a mobile app. With frameworks like react native, you can build your web app at the same time you build your mobile apps, realistically achieving 80%+ code reuse across platforms. When you're a small team trying to launch quickly and broadly, cross platform portability is very valuable.

</comment><comment><USER24> Some people migrate back from SPA [https://robots.thoughtbot.com/how-we- replaced-react-with-pho...](https://robots.thoughtbot.com/how-we-replaced- react-with-phoenix)

</comment><comment><USER39> They can be overkill. But usually aren't, even for a static site, if the site will be maintained or updated, or has a modicum of reused views, such as a gallery.

</comment><comment><USER40> Yes, basically it's much easier to work with and the tools/development experience are much better - which correlates to being able to deliver faster, sometimes much faster.

Time to market is often a very important metric for a web app.

However SPAs make for a smoother experience. Most client facing apps live or die based on the user experience, and there are very few Product Managers who'd agree to a full old-style multi-page app.

As far as I'm concerned there are only two scenarios where I'll prefer an old- style app over an SPA:

1\. when building internal apps for employees

2\. when time to production is extremely important.

<comment><USER7> What is your favorite SPA? Do you feel HN isn't smooth?

</comment></comment><comment><USER41> Many, the first of which is whether it needs to be a web app at all or a desktop one.

</comment><comment><USER6> [https://github.com/Clay-Ferguson/meta64](https://github.com/Clay- Ferguson/meta64) \--> is still a work in progress, but if you want to see a great example of modern architecture in a web app, check it out. Yes it's mine. It's running Google Polymer, JQuery, TypeScript, SpringBoot (with embedded Tomcat), Apache Oak JCR, and is a SPA that only updates the portion of the screen that changes. It never reloads the page. Full page reloads as a part of webapp architure has been totally obsolete and bad desing for at least 7 years now. SPAs are the best architecture for a lot of different reasons.

There is one part of it that is mildly interesting (on the site itself) which is the RSS reader capability here:

[http://meta64.com/?id=/rss/feeds](http://meta64.com/?id=/rss/feeds)

<comment><USER42> Visited your thing for half a minute.

\- Can't open any of the pages in a new tab.

\- Can't go back.

\- Can't close the page without an "unsaved changes" prompt even though I didn't interact with it at all.

\- Doesn't maintain state when restarting the browser or navigating through history.

\- Doesn't keep my scroll position when switching between tabs. Very painful if I clicked one accidentally.

\- Doesn't seem to be possible to focus or activate tabs via keyboard.

\- Takes 3 seconds to load on my network. This is mostly up to latency, but making 119 requests totalling nearly 3 MB with no design to speak of yet probably doesn't help.

\- Takes a further 7 seconds to start fading in (why does it fade in?) on my device (2012 MacBook Pro 13") on a cold start, 4 seconds if just hitting Enter in the address bar.

\- "Processing request" flashes on for a fraction of a second with an animated progress bar. How many progress states are there?

And it doesn't even do anything in this state except let you flip between tabs. If things that are _not_ this way are obsolete, I will gladly hang back and be obsolete with them.

But hey, the menu animation is very smooth!

<comment><USER6> There's nothing interesting on the site itself. It's a tool, i'm building. Like I said in the post the architecture is what I'm bragging about, not the app. The app is not tested, and all the things you mention don't surprise nor do they bother me. If you want to critique it, critique the code. I'm well aware what the state of the site itself is. Show me one issue in the code and I will thank you, but you won't find much fault there. :P

<comment><USER42> All the things I listed (and more) work by default. Your architecture broke them and didn't benefit the user as far as I could see. Maybe list such a benefit if you'd like to argue for it?

<comment><USER6> I showed you an F1 race car up on cinder blocks being worked on so you could see the engine design. You climb in, try to drive it away, and can't so you conclude the engine design is all wrong? Genius. It's not ready to drive yet (by the public), but that doesn't mean the architecture is wrong. The architecture is state-of-the-art.

<comment><USER42> Your metaphorical engine weighs a metric ton and it's very difficult to imagine how it'll develop into anything resembling a racer. I'd put more effort into the car analogies but they're making me physically ill.

> The architecture is state-of-the-art.

You should also probably back this statement up with something. Right now it appears to be a lot of self-horn-tooting.

But hey, sure, let's spend the same half-minute to talk about the code. I open to a random TypeScript file – thank goodness you're using TypeScript, because the JavaScript you've put under version control for some reason would make any non-vendor code in the language difficult to find in this time – [https://github.com/Clay- Ferguson/meta64/blob/d9f3740118e8099...](https://github.com/Clay- Ferguson/meta64/blob/d9f3740118e80999695dff226c851e444f0fc55d/src/main/resources/public/ts/dlg/UploadFromFileDropzoneDlg.ts).

      declare var Dropzone;

Oh okay I guess we're not using types here

      let config: Object = {
      ⋮
          var submitButton = document.querySelector("#" + thiz.id("uploadButton"));

This… this isn't how you reference elements in your "state-of-the-art" architecture, right?

      if (!submitButton) {
          console.log("Unable to get upload button.");
      }

      submitButton.addEventListener("click", function(e) {

I guess the state of the art means you can't use your browser's debugger. Or it's just for consistency given that you're circumventing the rest of the browser too.

      this.on("queuecomplete", function(file) {
          meta64.refresh();
      });

What? I have no idea what this does (`meta64` isn't declared, I guess because this file is allergic to modules. it also appears to be a singleton or global, neither of which particularly screams "good design" when named in reference to your app) but it looks like some kind of indiscriminate state update given that nothing is being passed to it. Maybe it's not that, but no time to find out. We're running out of seconds here.

Wait, back up a moment:

      submitButton.addEventListener("click", function(e) {
        //e.preventDefault();
        dropzone.processQueue();
      });

Isn't a major aspect of most of these fancy SPA frameworks that you don't have to do this?

      $("#" + this.id("dropzone-form-id")).dropzone(config);

> This… this isn't how you reference elements in your "state-of-the-art" > architecture, right?

oh no it is. Bonus points for kebab-case when the other two we've seen so far are camel. I'm nitpicking style because a meaningless literary device involving cars made me irritable. Sorry.

      let ret: boolean = false;
      for (let file of this.fileList) {
          if (file["name"].toLowerCase().endsWith(".zip")) {
              return true;
          }
      }
      return ret;

That was a useful variable! I would write this:

      return this.fileList.some(isZipFile);

and then probably not write this in the end because it's a filename check but we're here to talk about architecture or something, not that:

      const isZipFile = /\.zip$/i!test;

`!` is a macro for bound property access in my state-of-the-art architecture.

      runButtonEnablement = (dropzoneEvt: any): void => {
          if (dropzoneEvt.getAddedFiles().length > 0 ||
              dropzoneEvt.getQueuedFiles().length > 0) {
              $("#" + this.id("uploadButton")).show();
          }
          else {
              $("#" + this.id("uploadButton")).hide();
          }
      }

I would think a F1 racer ninja rockstar architecture would be able to bind the visibility of this button to some state. More bonus points for not using `toggle()` and the same select-by-id antipattern.

      $("#" + this.id("uploadPathDisplay")).html("Path: " + render.formatPath(attachment.uploadNode));

Select-by-id again. I've suppressed the urge to gag by this point. `.html()` instead of binding this to some appropriate component? Nothing new. Mysterious global `render` due to declaring things allergy? Par for the course.

Let me know if you would like a review of any other files so I can decline and spare my mental health thanks

<comment><USER6> F1 race car analogy still works: I show you an engine on the test stand, saying it's a good design, and you proceed to point out all the loose wires, duct taped electrical connections, and all the stuff that's there temporarily because it's on a test stand, or are details that simply haven't even been addressed yet. I stand by the 'state-of-the-art' claim, and you didn't find any unfinished work that was news to me. My todo list is 10x as long as your list, but the architecture itself is perfect. SpringBoot, JSON API from browser, JCR, Mongo, GooglePolymer, etc., and the way it is all combined is the best architure for a modern app. and ESPECIALLY the SPA aspect.

<comment><USER43> You asked for critique of your code. minitech gave it to you. How about you address these points instead of grinding on about your superiorness?

<comment><USER6> I bragged specifically about the state-of-the-art architecture. Architecture can be perfected months or even years before a codebase itself is production- ready, and free of all unimportant band-aids/short-cuts. I'm not going thru my todo list for you to explain why each thing on it hasn't been done yet. You guys are hilarious.

<comment><USER42> What definition of "architecture" are you using here? Is it at a very high level ("I'm using an SPA and an MV* JSON API")? If it is, I hate to break it to you, but that's how most of these things have already worked for ages.

<comment><USER6> I use the standard every-day definition of "architecture". You're right about JSON and SPAs really catching on finally. That's why I shared this post, and to help people out who've been brainwashed into thinking SPAs are bad. I hope some people also see the code and find out how awesome TypeScript is. Also the JCR. Lots of well kept secrets encapsulated in meta64.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER44> Because obfuscation of absolutely everything, so that the end user doesn't know what we're doing to them, is extremely lucrative!

</comment><comment><USER45> Not really. Swimming, bathing relaxing and spending nude time in saunas with other people will still be an important part of our daily life. :-P</comment>


Playing Fasttracker2 .XM files in JavaScript - <AUTHOR> http://www.a1k0n.net/2015/11/09/javascript-ft2-player.html <comment><USER2> Oh man. Huge flashback to downloading FastTracker 2 back in '93, excitedly hitting "play" on e.g. Chillzone.xm by Norfair (edit, actually that tune wasn't released yet in '93, but there were so many great tunes) and seeing 32 waveforms going at the same time, sending amazing sounds through the Pro Audio Spectrum 16 I had gently installed in my ZEOS 486 DX/2 66 MHz.

Amazing to see it all there in JS today...wow. Thanks for sharing the article.

(Wait...where is Nibbles?)

<comment><USER3> Makes me wonder if ScreamTracker3 is doable too.

<comment><USER4> Of course it is. It's actually a lot easier, as there are no envelopes and just one sample per instrument. Firehawk/TDA wrote this excellent player a while back: [http://mod.haxor.fi/Purple_Motion/2nd_pm.s3m](http://mod.haxor.fi/Purple_Motion/2nd_pm.s3m)

<comment><USER5> Damn, that playback is as good as I used to get on the old GUS.

</comment></comment></comment></comment><comment><USER6> Works great in Chrome without underruns.

(Is ScriptProcessorNode here to stay, though? Mozilla's documentation marked the feature as deprecated for quite some time now [1], suggesting the use of Audio Workers instead; in turn, the same documentation states that these are not yet implemented in any browser. At some point I got very confused about the one true way of generating audio using Javascript.)

[1] [https://developer.mozilla.org/en- US/docs/Web/API/ScriptProce...](https://developer.mozilla.org/en- US/docs/Web/API/ScriptProcessorNode)

<comment><USER4> It got renamed from JavaScriptNode to ScriptProcessor when it switched from webkitAudioContext to AudioContext, and it seems to be the best-supported way to do it. I don't see why not. But of course IE doesn't support it at all and I don't think iOS Safari does either (it's a big question mark on mozilla.org anyway)

<comment><USER7> iOS safari supports it just fine and has since it first came out.

[http://games.greggman.com/game/html5-bytebeat/](http://games.greggman.com/game/html5-bytebeat/)

The issue on mobile is you can only start playback of sounds in a user gesture event and I think on iOS the first sound can't be a ScriptProcessorNode (maybe that bug was fixed). I just play an oscillator for a moment to get things started. Once the first note is played it just all works.

I'd be surprised if they removed it at this point. Many many pages use it. Many many native->emscripten apps use it. I think just no one has updated MDN in a while. Unity->HTML5 uses it. Unreal->HTML5 uses it. Pico8->HTML5 uses it. Voxatron->HTML5 uses it.

<comment><USER4> edit: THANK YOU! That was the issue; I had to make a dummy oscillator. And, separately, there was a CSS issue which made the buttons black on black. Now it works on iOS.

</comment></comment></comment></comment><comment><USER8> This is awesome. I'm going to incorporate this into [http://Artpacks.org](http://Artpacks.org) soon, if you don't mind!

Now, only if there was a reliable JavaScript RIPScript interpreter. :)

<comment><USER4> Haha, sure, let me push some fixes to the github repo.

RIP script, OMG. I remember that. With HTML canvas, shouldn't be too hard, though it would be weirdly high-resolution.

<comment><USER9> I tried writing a RIPscript generator in javascript a few years ago. I thought it would be easy, but it's surprisingly not.

It's unfinished, but here it is if you'd like to try it out: [http://carl.gorringe.org/pub/code/javascript/RIPview/ripview...](http://carl.gorringe.org/pub/code/javascript/RIPview/ripview.html)

</comment></comment></comment><comment><USER10> Fasttracker was the program that made me understand I have not talent at all to compose music. :)

</comment><comment><USER11> Oh wow I spent so many nights playing and making MODs and chatting with my other nerd friends on BBSes of the day trying to share knowledge. This is truly a much-appreciated work of art! On another note, I think the people commenting in this thread would be really great together in a room somewhere with beer and computers. It's a very specific cross-section of both a skillset and a point in time.

</comment><comment><USER12> Awesome, fasttracker 2 and qbasic were the most formative programs of my youth. I'll upvote anything to do with fasttracker 2 all day.

</comment><comment><USER13> Great work. Nice smooth visuals too. Could you implement a html5 file reader to load any .xm file?

<comment><USER4> Yep. Just added drag-and-drop to the player window; drag a local .xm file onto it to load it. Only tested in Chrome.

</comment></comment><comment><USER14> OMG spent so many hours late at night in my teens on FastTracker 2. This is incredible. Now I'll have to dust off those floppies.

</comment><comment><USER15> So... Nibbles?

<comment><USER4> Sorry, haven't worked that in yet...</comment></comment>


Startup offers payday advances without the pesky loan-sharking - <AUTHOR> http://edition.cnn.com/2014/08/07/tech/innovation/startup-offers-payday-advances/index.html?hpt=hp_bn2

<comment><USER2> If I were an employer who employed a lot of lower-class people of the sort who might use this service (say, Wal-Mart) I'd be looking at this article and wondering "Why don't we just pay our employees every day?"

The extra costs would be minimal, surely, since it's just a bunch of automated money transfers. And it would make our company the employer of choice for minimum-wage schlubs with poor forward-planning capabilities everywhere.

<comment><USER3> Is that necessarily better?

I've never had a regular paycheque, by my understanding is that you'd setup your rent and other big bills to go through on a specific day to coincide with getting paid.

If you're paid 1/30 of your monthy salary each day, you're going to have to save up for these bills, and if you're behind, you'll still need some kind of advance.

A hybrid solution, where you can give your employer the dates and amounts of your big bills, and then the remainder is paid out daily, would actually seem pretty useful. Though much more complex.</comment></comment>


Mobile Ad Designed To Make it Look Like You Have a Speck of Dirt On Your Phone - <AUTHOR> https://i.imgur.com/VdYtNnv.png <comment><USER2> Something worthy of being labeled a Dark Pattern, [https://darkpatterns.org](https://darkpatterns.org)</comment>


Ask HN: How do you estimate a software project? - <AUTHOR> As the title says.
Sub-question: 1) How do you take all the factors in to account like budget, people, skill levels, geographic distribution (if it is distributed team), hourly rates, etc?
2) What is the best way to manage the project? JIRA, Google sheets, TODO List (!??). <comment><USER2> Well, this is all empirical but the main thing I take into account is Time. Like, if there is any new tech I need to learn, usually it's added into how much time I would spend building the app itself. Then I dig into the complexity of the app. I accumulate these in points and put into a scale of my hourly rate. For example, the highest I charged anyone for a very difficult project is 150/hr which I rate at a 10, the lowest for a simple project is 85/hr.

I add the factors together and see where it rates out of 10 then make the final price per hour.

I like being straight forward, so I use Trello for task management, Github for version control & Slack for communication between me & the client.

Hope this helps!!!</comment>


Healthcare Startup Oscar Raises $80 Million - <AUTHOR> http://www.forbes.com/sites/stevenbertoni/2014/05/14/disruptive-healthcare-start-up-oscar-raises-80-million-valuation-nears-1-billion/ <comment><USER2> I was really excited about this when I was shopping for insurance in April -- unfortunately they offer the same quality plans as the NY exchange. Not a single doctor from the 5-6 I've used in the past few years accepts any of their plans (or any of the exchange plans, for that matter).

</comment><comment><USER3> Oscar resells MagnaCare insurance, and they're not even the only ones on the NY exchange to do it. I wish they'd actually do something different in the insurance market, but Oscar is more of the same.

<comment><USER4> I think you're confusing an insurance company and a provider network. Magnacare is a provider network, not an insurance company.

</comment></comment><comment><USER5> > $80 million Series A round...Oscar had previously raised $75 million in seed > funding

Is that what counts as a seed round these days?!

<comment><USER6> depends on founders. Anything less than such numbers these guys would probably self-financed using their lunch money:

>Josh Kushner—whose VC fund has backed hot start ups like Spotify, Nasty Gal, ResearchGate, Codecademy, Warby Parker and Instagram—[...cut...]. With the goal of hacking Obamacare, Kushner built Oscar in-house with cofounders Kevin Nazemi (a former director at Microsoft's health care division) and Mario Schlosser (a data junkie who worked previously at Bridgewater Associates and McKinsey & Company ).

</comment></comment><comment><USER7> There is a lot of hate in this thread. I personally use Oscar, and while I have not had to use their plan yet, my experience with their support staff, and website have been the best I have had with any insurance provider/company/network.

They were responsive, helpful, and offer an affordable product with two things I really liked about their plan:

1) Free online consultations. I have vertigo and many times when I am sick, leaving the home to go to the doctor is hard due to my vertigo being magnified by other illnesses. This is a big convenience if I need it.

2) 4 free checkups a year with lab work through Quest paid included.

For $218/mo I am a happy customer.

</comment><comment><USER8> In case you missed it there was an article here yesterday describing their approach to simplicity through design:

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

</comment><comment><USER9> Having not heard of Oscar before, I was hoping this was related to the open source OSCAR EMR system.

Having said that, I'm happy to see any form of investment in health care startups.

</comment><comment><USER10> Never heard about them, I tried their website: [https://www.hioscar.com/](https://www.hioscar.com/) and I get a 403

<comment><USER11> These guys are insiders, with insider access to capital. Don't go looking for a great breakout product. You won't find it. The primary value they bring is their access to the elite networks and to money.

The $80 Million injection is a bet on this guy's network. Not on his product instincts. I'm sure he will buy the product people he needs.

</comment></comment><comment><USER12> (EDIT: I didn't know that in NYS since 1992 there was no age rating! This has nothing to do with ACA.)

It's cute how they quote without asking age; that way the quoted price (which seems to be for a 26 year old, if not younger) looks small; then they get your phone number.

It's what, 4x that for a 64 year old who smokes?

Seems like an example that no matter how clear the rules are, insurers will lie.

<comment><USER4> "Section 1557 of the Affordable Care Act prohibits discrimination in health care programs on the basis of race, color, national origin, sex, sex stereotypes, gender identity, age, or disability."

That is why they don't ask your gender, national origin, race, age, etc. It's irrelevant to the price.

(EDIT: wow, i didn't know that either about NYS! thanks for finding that and sharing )

<comment><USER12> (EDIT: WOW. It appears New York State, since 1992(!!!), has not allowed age rating. Unlike the other states.)

ACA plans are "age rated" (although only 3:1 from 26 to 64, unlike the true actuarial rate which is probably 6:1). It's not "discrimination" under the law. This effectively means young people subsidize old people. (a flat rate without age would be even more extreme, which would make plans essentially irrational for healthy <40 year olds)

NYS or NYC might be different; I know NY had some weird pre-ACA rules.

You used to be able to use gender (which was pretty universal; males were about 20-30% less than females even for plans which excluded childbirth); you can _still_ use smoking. You can do community rating under certain terms too, although it's fairly restricted, and generally just means some insurers don't issue in some parts of states.

IIRC health history was used mainly as buckets; the "best" individual plans required an essentially clean health history, or would exclude pre-existing conditions entirely. Various legal hacks over the past ~10y created various forms of guaranteed issue.

[http://ahip.org/Issues/Age-Rating.aspx](http://ahip.org/Issues/Age- Rating.aspx) has some info.

</comment></comment></comment><comment><USER13> If I understood the health insurance industry, I would LOVE to disrupt it. I loathe the current players so much its not even funny.

</comment><comment><USER14> To summarize the situation for those curious:

1) Oscar is a UX play on top of health insurance (they license a provider network, etc). 2) Building an insurance company is extremely difficult. 3) Successful insurance companies require huge capitalization, and are worth a lot of money. 3) They are not failing.

... Thus, lots of cash is needed.

</comment><comment><USER15> > "An attempt to bring the efficiency, transparency and design of consumer > Internet companies to the ugly, byzantine world of health insurance."

[https://www.hioscar.com/](https://www.hioscar.com/)

403 Forbidden - not quite there yet....</comment>


DotCloud Acquires Duostack - <AUTHOR> http://www.marketwire.com/press-release/dotcloud-acquires-duostack-expands-footprint-paas-market-further-one-platform-any-stack-1518315.htm?utm_source=Duostack+Beta+Users&utm_campaign=15ab8a0446-Duostack_Announcement_with_DotCloud5_24_2011&utm_medium=email

<comment><USER2> More discussion regarding the acquisition can be found over at <http://news.ycombinator.com/item?id=2580098></comment>


Homebrew — MacPorts driving you to drink? Try Homebrew - <AUTHOR> http://mxcl.github.com/homebrew/ <comment><USER3> Two other ideas worth considering:

GNU stow (<http://www.gnu.org/software/stow/>)

Rudix (<http://rudix.org/>)

Completely opposite approaches, but they're both worth looking at - <USER2> if you find MacPorts or Fink too much. (Stow takes an approach similar to Homebrew's use of 'cellar' + individual subdirectories for packages; Rudix provides precompiled binaries.) Rudix in particular is perfect if you just want one or two *nix items quick on a Mac.

</comment><comment><USER4> I currently use MacPorts... just wondering why I should switch?

<comment><USER5> FWIW, I was an early Homebrew user and even contributed a few recipes, but I moved back to MacPorts because (and no offense to mxcl, but it's kind of unavoidable) the author seems to do things with little understanding of the underlying system or justification.

Taking ownership of /user/local is completely utterly pointless and just plain bad advice. Copy-and-pasting optimization code from the Gentoo wiki is pointless. Binaries and libs are stripped without must justification, which will (did for me anyway) cause problems when compoing against the libs (eg, easy_install-ing anything against homebrew libs caused problems for me).

There has also been a lot of FUD spread about at the expense of MacPorts which I think is just low class. The anti-Macports complaints basically amount to "I don't understand this, so I'm going to say it's bad".

That said, it's written in ruby, uses github and the homepage is well done, so it will probably be wildly popular.

<comment><USER6> Just a side note but /usr does not actually stand for /user (although I often pronounce it that way when speaking). It's actually an initialism standing for UNIX System Resources.

<comment><USER7> You sure that isn't just a backronym? It seems highly unlikely given its peers (/etc, /lib, /bin, none of which are acronyms) and given the system it lives in, which I don't think used the word "resources" anywhere else.

When I google I mainly find drive-by assertions that it means "UNIX System Resources" (and sometimes "User Specific Resources"). The closest I can find to something real is:

<http://tldp.org/LDP/Linux-Filesystem-Hierarchy/html/usr.html>

</comment></comment></comment></comment><comment><USER8> I can't recommend homebrew enough - I've been burned by macports and fink in the past, and so I had reverted to the time tested "just compile stuff by hand". Homebrew strikes a good balance between the raw, do it yourself approach and something as big and intermingled as macports.

<comment><USER9> What problems did you have with MacPorts?

<comment><USER8> Frequently, when actually needing to compile other things (outside of macports), Macports would be pulled in "magically" and cause issues (such as gettext and Python-core). Frequent issues debugging strange issues when trying to port install things, etc.

Homebrew does just enough to work, and get the job done and attempts to "fit in" with the OS I already have, versus making it's own sandbox off to the side.

<comment><USER9> The problem with accidentally pulling in libraries seems unavoidable with Homebrew since it uses /usr/local. Is the lack of sandboxing what you think makes it better? This seems like exactly what you should be looking for.

While I agree that it would be nice to have seamless integration with the OS, having a completely separate installation helps with things like OS upgrades or when you need to use a different version of a library that is installed by the OS. Does Homebrew do anything to handle that kind of problem?

<comment><USER8> It _can_ use /usr/local - and you can set it up so that /usr/local comes before the rest of your system as you need to. Yes, an entirely self-contained sandbox avoids this, but most of the time, I don't want that.

Like I said in a previous comment, most of the time I'd find myself compiling things by hand into /usr/local anyway.

Please! Use the system's provided libraries. If I need something newer, I'll brew install it myself. For _me_ homebrew strikes a good balance between "compile it myself, damn it" and Macports/Fink. The formula are easy to hack and update (it's simple), and for the most part it just gets ourt of your way.

</comment></comment></comment></comment></comment><comment><USER10> this is #1 what drives me nuts about macports:

        $ port deps clojure-contrib
        Full Name: clojure-contrib @1.1.0
        Build Dependencies:   clojure
        Fetch Dependencies:   git-core
        $ port deps git-core
        Full Name: git-core @18.104.22.168+doc
        Runtime Dependencies: rsync, perl5, p5-error
        Library Dependencies: curl, zlib, openssl, expat, libiconv

with no possibility of skipping dependencies

<comment><USER11> Why don't you just edit the port to add a variant that lets you opt-out of those dependencies?

Poor package management isn't the fault of MacPorts; a Homebrew port could be just as poorly designed.

The "variants" infrastructure of MacPorts is one of my favorite parts of MacPorts, it definitely makes it easier to manage interdependencies IMHO.

<comment><USER12> Truth. Anyone capable of maintaining a homebrew setup has Sufficient skills to spend five minutes scanning the macports guide and tweaking the port files. OTOH, building clojure is te leas of the parents problems; he is in for anworld of painful surprise when he sees how screwed up packaging is. Have a clojure app? Include your own copy of clojure and clojure-contrib. Have a clojure editing mode? Do the same. Have a blog entry that mentions clojure? I think you need to download and squirrel away the jar files in those cases as well...

I ended up creating my own branch of the port tree for clojure bits just because of all the patching needed to avoid this "let me grab a copy of clojure for you" behavior.

<comment><USER10> Indeed. After looking at various package/dep schemes for clojure, I just gave up and created my own application and library templates and copy files around - at least the jar files are small enough that it doesn't really matter.

</comment></comment></comment></comment><comment><USER9> The title here and the quote at the bottom of the page say that it's better than MacPorts but there doesn't seem to be any comparison between them other than that. The only thing I've seen people use to say that it's better is that it's written in Ruby, but that doesn't seem like a big deal. Is there a comparison of the two somewhere? It seems like the problem people have with MacPorts is that it's been around longer so there have been more chances for things to go wrong.

<comment><USER13> I hated having to download 800mb of dependencies to install something simple. I already have Perl or lib(whatever); I don't need you to download it and install it.

I get the reliability argument (i.e., the only way to guarantee stuff builds right is to manage it yourself), but that's a problem with any platform where you might compile things alongside the package manager. So, let me manage that. I don't need a package manager to argue with me about what I want installed.

<comment><USER14> In addition to this argument, I think comparing them is almost like comparing apples and oranges. They both have their place on your system, but Macports is like a "lower gear" than Homebrew, and it takes a ton of time to do anything with it.

</comment></comment></comment><comment><USER15> There's been lots of in-depth discussion about the pros and cons of MacPorts or Homebrew on HN already:

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

<comment><USER3> And a more recent one (a lot of which ends up focused on /usr/local and sudo): <http://news.ycombinator.com/item?id=1095793>

</comment></comment><comment><USER16> I dream of the day when someone properly ports Portage (from Gentoo, the "emerge" thing) to Mac OS X.

I use MacPorts, and I've used a bunch of various package management systems, and portage is the only one that lets me maintain servers for > 5 years without reinstalling the whole thing, just upgrading the packages.

<comment><USER17> Sure, just use Gentoo Prefix. <http://www.gentoo.org/proj/en/gentoo- alt/prefix/>

</comment></comment><comment><USER18> So...Homebrew is MacPorts with simplified Portfiles and a smaller dependency graph?

</comment><comment><USER19> <spelling-nazi> s/compliments/complements/ </spelling-nazi>

The former changes the meaning of the sentence completely.

But otherwise looks great. I would give anything to completely ditch macports.

</comment><comment><USER20> Here's why I don't like MacPort. If I compile a much needed new library by hand, installing a program that depends on it shouldn't cause MacPort to download and recompile EVERYTHING by itself again instead of using what's already there in Apple or compiled. And why does MacPort have 20 times more dependencies than the same program in Fink? And since it's MACPort and there are only so many types of Macs, why aren't programs in binaries yet?

</comment><comment><USER21> A better way to use all those unix tools is to just run Ubuntu in a VM and develop there, or just replace MacOS with Ubuntu entirely.

<comment><USER14> Did ubuntu suddenly get TextMate support? Also, have they fixed the poor graphics acceleration issues? Didn't think so, go away troll.

<comment><USER21> That's cool if you're happy with OS X. It's just that I know many OS X devs who use ubuntu in a VM. I'm personally happy with a full install of Ubuntu and Emacs instead of textmate while others prefer OS X + textmate or emacs or vim or what have you, to each his/her own. I was just stating an alternative, I didn't know that was trolling.

<comment><USER22> In a MacOS X package management thread, your solution is "install ubuntu", and you didn't know that was trolling?

I'm very suspicious of your story.

</comment></comment></comment></comment><comment><USER23> I just installed homebrew a few weeks ago. Consider me a fan. It's extremely straight-forward, and has almost everything I'm looking for. It's easy to update, and easy to remove packages.

I might never boot back into Ubuntu.

</comment><comment><USER24> What I'd like to try sometime is NIX ( <http://nixos.org/nix/> ). Getting it to work well on OSX would be the trick.

Edit: They say it _should_ run on Mac OS X.

</comment><comment><USER25> Think of it as a framework to build things yourself. It's not strictly a replacement for MacPorts.

</comment><comment><USER26> Installing wget took about 20 seconds... brilliant.

<comment><USER27> Ah, but you _appreciate_ wget much more, if you wait through the amount of time it takes MacPorts to provide it ;-)

</comment></comment><comment><USER28> Website need formula -> formulae for pluralization.

<comment><USER29> How about formulæ? :-)

</comment></comment><comment><USER30> Has anyone here tried pkgsrc on OS X?

<comment><USER31> Yep. It's not bad. I cloned the [experimental git repository]([http://ftp.netbsd.org/pub/NetBSD/misc/repositories/git/pkgsr...](http://ftp.netbsd.org/pub/NetBSD/misc/repositories/git/pkgsrc)) to `/usr/pkgsrc` and was able to install most packages I tried. They seem to lag behind current versions quite a bit and some pieces of software I rely on for work weren't packaged (redis, mongo, etc.).

I used it for a few months but eventually switched over to homebrew because it's a nice simple system and packages most of the stuff I need.

You have to run a case-insensitive filesystem with pkgsrc (I was anyway) and, like macports, it does not use system libraries so pretty much everything needs to be rebuilt under `/usr/pkg`.

It was worth experimenting with. I might check back on it when I get my new MBP. They have [a lot of packages](<http://pkgsrc.se/>).</comment></comment>


Can You Put a Price on a Pitch? - <AUTHOR> https://www.protocol.com/newsletters/pipeline/can-you-put-a-price-on-a-pitch <comment><AUTHOR> Has anyone here been funded as a direct result of "paying to pitch" ?</comment>


Repl.it GFX: Native graphics development in the browser - <AUTHOR> https://repl.it/site/blog/gfx?ref=updates <comment><USER2> Repl.it co-founder here -- happy to answer questions :)

This is just coming out and lots of users are building impressive games; here is quick small sample of things I found interesting:

\- Super Mario: [https://repl.it/@JONASRAINS/SMOB3-Python](https://repl.it/@JONASRAINS/SMOB3-Python)

\- Pacman: [https://repl.it/@argthe1st/Pacman](https://repl.it/@argthe1st/Pacman)

\- Flappy Bird (hold space to fly): [https://repl.it/@rennecastro/FlappyBird](https://repl.it/@rennecastro/FlappyBird)

\- Dungeon game: [https://repl.it/@AbrahamTinajero/VOLTHEGAME-V-061](https://repl.it/@AbrahamTinajero/VOLTHEGAME-V-061)

\- LOVE2D Ant: [https://repl.it/@Essentuan/AntLove](https://repl.it/@Essentuan/AntLove)

\- Evolution simulator: [https://repl.it/@dumfing/OutpaceEvolution](https://repl.it/@dumfing/OutpaceEvolution)

\- Doom style 3D maze: [https://repl.it/@KatyaDelaney/GameJam-3DMAZE](https://repl.it/@KatyaDelaney/GameJam-3DMAZE)

I'm personally bullish on Pyxel -- the pico-8-like Python environment. Here is one of the example games running: [https://repl.it/@amasad/jumper](https://repl.it/@amasad/jumper) (make sure to check the sweet asset editor; instructions in the comment).

Also, I forgot to mention in the post but this works great with friends on Multiplayer -- you'll be able to interact with the same machine and output. Earlier this morning I watched YouTube with a bunch of random Twitter users: [https://twitter.com/amasad/status/1108804242393821184](https://twitter.com/amasad/status/1108804242393821184) ^^

<comment><USER3> How many people were working on repl.it before the first public release, and for how long?

I have been following Repl.it since it's first release. We were quite amazed when repl.it was released. We, a bunch of students, were building a project very similar to what repl.it was in it's initial days, during the same time period. we never managed to get our project to an usable stage, and eventually everyone abandoned it.

<comment><USER2> I started working on the idea behind repl.it in 2009 when I was in college and had trouble coding because of all the setup. With the help of a friend I eventually got something usable in 2011 and open sourced. The engine powered lots if other sited including Codecademy and Udacity.

I got back to working on repl.it in 2016 and my co-founders joined me.

</comment></comment></comment><comment><USER4> I just came here to say thank you for doing this team. When I wanted to teach my 5 year old how to type and do basic math, I did it in clojure using Repl.it

I may have biased it, but she found the experience more engaging than MIT Scratch (which is also very good).

When kids and newbies engage with a product so easily (think git before github), you suddenly vastly increase the userbase.

<comment><USER2> Thanks Danny! I think Scratch is probably the most impactful tool in getting more people into programming. We have nothing but respect for the team.

However, when we talk to some of the kids coming to Repl.it from Scratch they often say something along the lines of Scratch is an "adult's idea of what kids might like". I think some kids want to feel like hackers and like they're doing "the real thing."

To that end we're working on a framework that has similar semantics to Scratch but is actually Python: [https://github.com/replit/play](https://github.com/replit/play)

BTW: a 5 year old learning Clojure is fascinating. I hope you write about that sometime.

<comment><USER5> > _However, when we talk to some of the kids coming to Repl.it from Scratch > they often say something along the lines of Scratch is an "adult's idea of > what kids might like". I think some kids want to feel like hackers and like > they're doing "the real thing."_

I teach a low-impact, almost impossible to fail programming elective to HS students. We start with a fork of Scratch, and we eventually move to Python. The above is generally the response of my students as well. Scratch is a nice, gentle introduction, but then it becomes more tedious clicking through categories, dragging-and-dropping, and maintaining an organized environment with larger assignments. I'm inclined to agree. Also transferring concepts from Scratch to a terminal language doesn't click for most students. I'm still working on bettering my lesson plans in that aspect.

I do want to counter with something positive about these visual implementations though. I think boot strapping the course would be 10 times harder with just a terminal language.

<comment><USER6> Hey, you should definitely check out Python Play, the games/graphics library @amasad mentioned: [https://github.com/replit/play](https://github.com/replit/play)

It's uses similar language and a Scratch-like execution model, so you can do things like this:

        face = play.new_text('^.^', font_size=100)

        @face.when_clicked
        async def do():
            face.words = '*o*'
            await play.timer(seconds=1)
            face.words = '^.^'

</comment></comment></comment></comment><comment><USER7> Running the Chromium instance within the Chromium instance within the blog post worked better than expected!

<comment><USER2> How many levels deep did you get? I got 3 (excluding base reality) [https://imgur.com/a/Zuh9d78](https://imgur.com/a/Zuh9d78)

<comment><USER8> I got to three and was about to try four, but then the second one spontaneously combusted or something and reloaded itself.

</comment></comment></comment><comment><USER9> The screen that says "run your repl to see output" never changes when I hit run. Anyone else never seeing any actual graphics? I'm using Firefox on OSX 10.12.6.

<comment><USER10> Are you hitting the differently colored word "run" in the sentence on that screen, or are you clicking the play button above the code that's above that screen? I was doing the former at first, until I noticed that button. Also on Firefox, but Windows 10.

<comment><USER9> I'm hitting the play button. Something is definitely running, there's lots output in the little text console (at least initially)

<comment><USER2> Are you behind a firewall that blocks WebScokets? Try this: [https://www.websocket.org/echo.html](https://www.websocket.org/echo.html)

<comment><USER9> Interesting. That echo test fails for me in Firefox but works fine in Chrome. However the repl doesn't give me graphics in either browser.

<comment><USER2> Strange. Any error in devtools?

</comment></comment></comment></comment></comment></comment><comment><USER11> This is awesome! I see you have tkinter, but could you guys add tcl / tk as a language please! It'd be awesome to have tcl / tk apps on the web.

<comment><USER2> Here you go: [https://repl.it/@amasad/tcl-GUI](https://repl.it/@amasad/tcl- GUI)

We'll add it as a top-level language soon.

<comment><USER11> Woah! This is so cool! Thank you so much! Runs my Tetris clone perfectly ahaha.

[https://repl.it/@nickbarth/Tk-Tetris](https://repl.it/@nickbarth/Tk-Tetris)

</comment></comment></comment><comment><USER12> Why do the games run at super low FPS? Seems like 3 FPS or such. Mac Mojave, Firefox 67.0b3 64bit

<comment><USER13> This is why cloud development environments are a bad idea, instead companies should be focused on open source and client-side automated solutions.

<comment><USER2> I think that's a bit of a hastily generalization. We mentioned in the post (under Technology) that it's still beta quality.

More generally though we have millions of users that don't have the luxury of running a fancy local developer environment. Either they're on chromebooks or tablets or they don't have a computer altogether.

<comment><USER13> You don't need anything fancy to run a developer environment. Why not just build a local developer IDE app for Android, if you're the development experts? There are already self-hosted server solutions for development environments, and mobile developer applications for Android. The first thing you see on your website is "sign up" or "log in". Most of those "developers" are just getting started and will resent your products in a couple years. Just give them time.

<comment><USER14> For a Linux user, you can already build such a system yourself quite trivially by getting an FTP account, mounting it locally with curlftpfs, and then using SVN or CVS on the mounted filesystem. From Windows or Mac, this FTP account could be accessed through built-in software.

<comment><USER15> Like Dropbox? I'll just leave this here: [1]. The details are seldom easy.

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

</comment></comment></comment></comment></comment></comment><comment><USER16> Quite impressive, you can basically run anything on a VNC, this could even be used for automated browser testing and many other things! Congrats!

<comment><USER2> Yes, I think we preinstall chrome webdriver on the base image too!

<comment><USER17> Automated browser testing via repl would be awesome... and a pretty sizable biz model choice

</comment></comment></comment><comment><USER18> I'm really impressed by what this team is doing. When will we be running Word in multi player mode instead of Google Docs? Just half kidding.

<comment><USER19> [https://support.office.com/en-us/article/collaborate-on- word...](https://support.office.com/en-us/article/collaborate-on-word- documents-with-real-time-co-authoring-7dd3040c-3f30-4fdd-bab0-8586492a1f1d)

</comment></comment><comment><USER20> This reminds me a lot of the new X11 graphics support we have in [https://CoCalc.com](https://CoCalc.com) \-- [http://blog.sagemath.com/cocalc/2018/11/05/x11.html](http://blog.sagemath.com/cocalc/2018/11/05/x11.html)

</comment><comment> gjsman-1000 Chromium in Chrome? WTH? AWESOME!

Blew my mind.

<comment><USER2> How many levels deep did you get? I got 3 (excluding base reality) [https://imgur.com/a/Zuh9d78](https://imgur.com/a/Zuh9d78)

</comment></comment><comment><USER21> This is very cool. Any plans to support Elm lang in the future?

</comment><comment><USER22> Pretty sick! Hows it work? I'd love to be able to have Pygame stuff show up right in a web browser and not have it be wrapped by repl.it.

<comment><USER2> Coming soon. This will leverage our repl.run product which allows you to ship any app -- web, terminal, desktop, etc -- as a web page [https://repl.it/talk/announcements/BetaExplorers- Announcing-...](https://repl.it/talk/announcements/BetaExplorers-Announcing- replrun-publish-your-terminal-apps-as-websites/7802)

</comment></comment><comment><USER23> just awesome</comment>


Extracting text from an image using Ocropus - <AUTHOR> http://www.danvk.org/2015/01/09/extracting-text-from-an-image-using-ocropus.html <comment><USER2> Thanks for this. I tried using Tesseract over the weekend to extract text from a game screenshot and had no luck. The documentation for Tesseract is rather opaque; maybe I'll have better luck with Ocropus.

<comment><USER3> My main gripe with tesseract is how convoluted and lacking in documentation the training procedure is, which is critical to getting better results. I'll be sure to check out ocropus.

<comment><AUTHOR> You'll enjoy my follow-up post then, which talks about training: [http://www.danvk.org/2015/01/11/training-an-ocropus-ocr- mode...](http://www.danvk.org/2015/01/11/training-an-ocropus-ocr-model.html)

</comment></comment></comment><comment><USER4> I wonder if it's possible to remove the need for post-processing of the LSTM's output by integrating transcription into the neural network model directly.

<comment><AUTHOR> The first row of output from the Neural Net is a special "no character" output which effectively gives you the character segmentation. You can distinguish "aa" from "a" because the former shows up as "(no)a(no)a(no)" whereas the latter is "(no)a(no)". You can read more about this in the Ocropus paper: [http://www.helsinki.fi/~mpsilfve/ocr_course/materials/2008-b...](http://www.helsinki.fi/~mpsilfve/ocr_course/materials/2008-breuel- ocropus-open-source.pdf)

</comment></comment><comment><USER5> Slightly off-topic, but is anyone aware of an similarly capable library for hand-written text recognition, i.e. ICR?

<comment><AUTHOR> If you're able to provide enough training data, there's no reason Ocropus couldn't do this. If you're open to using a commercial OCR program, FineReader is excellent.

</comment></comment><comment><USER6> Are there any OCR/ICR open source projects that are actively being worked on that anyone knows about?

<comment><AUTHOR> Ocropus is fairly actively developed. Lots of commits in 2015: [https://github.com/tmbdev/ocropy/commits/master](https://github.com/tmbdev/ocropy/commits/master)</comment></comment>


Why Ethereum Is Much More Valuable Than Bitcoin: SoFi CEO - <AUTHOR> http://fortune.com/2017/07/19/bitcoin-ethereum-blockchain-sofi/ <comment><USER2> LOL!

Within 2 years you will be running smart contracts (literal ethereum style solidity) on the bitcoin blockchain, via RSK or other side chains.

Oh, and Ethereum is really poorly engineered... they are just moving fast and breaking things so whenever you point out a problem its planned to be fixed in a few months (which become years)

This is fine for Facebook and google, not fine for a blockchain.</comment>


Opportunity versus Outcomes - <AUTHOR> http://www.creators.com/opinion/thomas-sowell/opportunity-versus-outcomes.html <comment><AUTHOR> Vital discussion which needs to be had, especially with the recent events and announcements from many tech companies.</comment>


Where do you get your network equipment online? - <AUTHOR>

This may be too off-topic for HN, but if anyone has any info, it will be very appreciated. <comment><USER2> cdw.com

If you just want some switches and don't need something really high-end (read Cisco/Juniper) then dell has some options and they are much cheaper than the brand name stuff.</comment>


Show HN: Feedcast] Get recommendations of podcasts about startups - <AUTHOR> https://podcastrecommendations.weebly.com/ <comment><AUTHOR> I'm a huge fan of podcasts (listen every single day) but every time I tried to find a new one I had a really hard time, usually I'd ask friends or I'd see someone posting on social media but I was not getting good recommendations.

On the other hand, it's very easy to find new videos on Youtube. Most of the content that I consume on Youtube are recommended through the app which allows me to discover a lot of interesting content that I had no idea it existed.

In order to bring parity between discovering podcasts and the way we discover videos, we created Feedcast. Our first podcast recommendation category is podcasts about startups and we'll be adding more categories soon.

If you want to discover more podcasts about startups, check it out our app here:

iOS: [https://apps.apple.com/us/app/feedcast-podcast- community/id1...](https://apps.apple.com/us/app/feedcast-podcast- community/id1470003029)

Android: [https://play.google.com/store/apps/details?id=me.feedcast](https://play.google.com/store/apps/details?id=me.feedcast)

I'd love to get feedback and understand how we can make the app better for you! Feel free to comment here or send me an email at email@example.com

Hope to help you find more podcasts!!

</comment><comment><USER2> That's pretty cool, I listen to a lot of podcast about startups and struggle to find new ones! How does Feedcast compare with Apple Podcast or Spotify regarding recommendations?

</comment><comment><USER3> Love this new app that helps you find the best podcasts to listen to. Great idea! Looking forward to new categories!

</comment><comment><USER4> I downloaded the iOS app. It bears minimal features, but does what this post saids. I briefly browsed over the list, it looks appealing to me as a startup founder. I found the searching features of the built-in podcast app was limited for me discover useful channels. Plus that I don't want spend too much time on searching and verifying individual episodes. Having a list recommended for me is a big life saver. Way too go!</comment>


Anonymous Hacks Westboro Church. Bad Idea. - <AUTHOR> http://www.slate.com/blogs/future_tense/2012/12/17/anonymous_hacks_westboro_baptist_church_over_sandy_hook_picket_is_there.html

<comment><USER2> Usually "dont feed the Trolls" is the correct advice. But Ogres eat Trolls.</comment>


Ask HN: Is there anything you'd refuse to work on? - <AUTHOR> <comment><USER2> I was invited to work on a project implementing a country-wide firewall, of the sort used in Saudi Arabia to censor content from its citizens. I gave a very flat "no". Not a chance would I put my efforts into such a thing.

The company never hired me again. I would call it a mutual separation, since they went ahead and worked on that project without me, and I won't work for a company that is so greedy they'd throw morals and ethics to the wind on that kind of contract.

One staffer even admitted to me he felt icky about the whole thing. Why do it then? You sold out, bud.

</comment><comment><USER3> Probably JIRA, it's way too far gone as far as I can tell.

</comment><comment><USER4> For me it's military related projects. A professor once told me that more than half of mechanical engineers enter the defence/military industry....

It was then that I decided I didn't want to contribute to the mechanisation of war, wheather it be defence or offence...

</comment><comment><USER5> Gambling or games that are close to gambling. Anything promoting far right or other hateful ideologies.

</comment><comment><USER6> I suspect if you offered me enough money, I'd be able to rationalize anything. Even Jira...

<comment><AUTHOR> I suspect most of us would. Thanks for the sincere answer.

</comment></comment><comment><USER7> Things that kill on purpose or by accident.

<comment><USER8> I talked to this lady who worked in medical instruments. She was told {as basic standard wisdom) that she had to be prepared for her device killing someone - because that happens in medical devices. That doesn't make medical devices a bad thing to work on; it just means that it works out badly sometimes for some patients.

</comment></comment><comment><USER9> Loan sharking and debt collection

</comment><comment><USER10> any project that directly supports drug war efforts</comment>


MITRE launches challenge for fuzzy name matching - <AUTHOR> http://www.mitre.org/work/challenge/

<comment><AUTHOR> Interesting problem for those who've worked with record linkage or any fuzzy string work before.</comment>


Show HN: Canvas – Simple, Powerful Blog Publishing Platform - <AUTHOR> https://github.com/cnvs/canvas <comment><USER2> "Spark engagement and reader discussion on your blog with Disqus, the #1 way to build your audience."

See also [https://news.ycombinator.com/item?id=14170041](https://news.ycombinator.com/item?id=14170041)

</comment><comment><USER2> That seems beautiful, but why are all blog CMSes out there written in PHP?</comment>


Snowden releases information about Australian Intelligence gathering programs - <AUTHOR> http://www.theage.com.au/world/snowden-reveals-australias-links-to-us-spy-web-20130708-2plyg.html <comment><USER2> This is now getting so entirely overwhelming. It's like you're on the beach getting repeatedly smashed by waves that get bigger and bigger. There's nothing you can do to fight it, stop it, or move, and it just keeps coming. I feel so helpless with every new leak.

<comment><USER3> We can stop it, and redirect it.

Once the people start creating new laws, and getting them passed, we'll win. Currently, politicians hand us laws that are drafted by corporations & lobbyists, then we simply react.

It's all about us being more assertive.

<comment><USER4> We will win.

We already have the bill of rights. Creating new laws won't help us. It's too late for that. Maybe repealing some laws and executive orders might help... but what we're seeing is the symptom of something bigger than governments.

We need to see the cage and step out of it. Educating ourselves and honing our common sense will help us. Becoming self sufficient will help us.

<comment><USER3> There's still plenty of time to pass laws. Why would there be a time limit?

<comment><USER3> @jaekwon

You sound frustrated, as a lot of people are these days. Is it helping to be reactive to all of the things you mentioned? What if you instead were proactive, and defined a new law & helped promote it?

For instance, you mentioned illegal wars. What if we created a new law, that required a popular vote, yearly, to continue any war? That would be awesome, right? :)

Let's write some good laws, and get them passed.

<comment><USER4> >> You sound frustrated, as a lot of people are these days

You're still in the denial stage. I've been there. You've got a long ways to go. Keep reading about recent history. Next you'll get depressed...

I'm actually quite happy nowadays. Every day is a day full of purpose. I'm not reactive, I'm proactive. I see the patterns and I know what's coming. I know what needs to be done.

I agree with Lessig on one point and one point alone. Code is law.

Not saying we shouldn't try the traditional approach, though. Here's some good news:

\- [http://www.reddit.com/r/restorethefourth/comments/1htaqf/the...](http://www.reddit.com/r/restorethefourth/comments/1htaqf/there_is_an_important_senate_election_going_on/)

<comment><USER3> >> You're still in the denial stage. I've been there. You've got a long ways to go. Keep reading about recent history. Next you'll get depressed...

I'm sorry to hear you are dealing with depression.

>> I'm actually quite happy nowadays. Every day is a day full of purpose. I'm not reactive, I'm proactive.

Oh, well that's good.

</comment></comment></comment></comment></comment></comment></comment><comment><USER5> To me, much more concerning is Snowden's revelation that the British intelligence program 'Tempora' "saves everything":

"Tempora is the first 'I save everything' approach ('full take') in the intelligence world. It sucks in all data, no matter what it is, and which rights are violated by it. ... Right now, the system is capable of saving three days' worth of traffic [...]. 'Full take' means that the system saves everything. If you send a data packet and if makes its way through the UK, we will get it."

<comment><USER6> To me there's something of the "if a tree falls in a forest" koan here.

"If an agency caches the data but doesn't grep the data for anything related to me has my privacy been violated?"

I would be a lot more worried if it was a US and not a UK agency.

I would also be a lot more worried if it wasn't GCHQ, but was a police force.

There are other databases in the UK that are a lot more concerning to me. All the stuff that supermarkets collect on people with loyalty cards[1], all the medical databases, the misuse of criminal records bureau checking. (These last two have real world examples of real world harm being done to individuals. But perhaps GCHQ's doesn't because it's secret and the information is shared with weird routes.)

[1] Many years ago some friends and I had a loyalty card for "Ivor Trots". He only ever bought loo roll.

<comment> grey-area _If an agency caches the data but doesn 't grep the data for anything related to me has my privacy been violated?_

If it's stored indefinitely (as they have the ambition to do, and will soon have the ability), it doesn't matter if it is not used today, or in the past. What if at some point in your life you run for parliament, or your business strikes a prominent deal with a foreign power? At that point your records can be taken out and scrutinised by whoever has access to this data _at that point in time_ , and you won't even know, because it's secret. Information has a habit of spreading beyond the intended boundaries, and if it is collected in secret, we have no way of controlling that spread or controlling its use.

 _I would be a lot more worried if it was a US and not a UK agency._

You should be worried then, because this data is routinely shared with the NSA, seems to be collected under the remit of a joint program, and is probably stored indefinitely by several GCHQ partners where someone is judged to be of interest or enemy of the state/agency, the definition of which will of course vary with the agency.

 _I would also be a lot more worried if it wasn 't GCHQ, but was a police force._

I'd be surprised if access is not given the police on some level, given their participation in counter-terrorism activities, and there's nothing to stop a secret policy change giving more access, you wouldn't even know about it. So you should be worried.

 _There are other databases in the UK that are a lot more concerning to me._

Given that those databases exist online, and are probably transmitted regularly as backups etc as well as accessed via the internet, you can assume that all that data is also accessible by GCHQ partners and clients. The important difference though is that, as you point out, these databases are public, acknowledged to exist, and controlled by our existing law. If you want to you can challenge the use or collection of the data in a court, sometimes you can stop using these services, or ask to see all information collected on you, but no such options are available for information gathered and shared in the name of security.

What I find troubling here is that the only limit on the indefinite storage of all this material by GCHQ is technical, not legal or moral, and that limit will soon be overcome.

<comment><USER5> > _You should be worried then, because this data is routinely shared with the > NSA, seems to be collected under the remit of a joint program_

Exactly. Snowden says "If you send a data packet and if [sic] makes its way through the UK, _we_ will get it."

Given that Snowden is an NSA whisteblower, who's talking here about the "Five Eyes" intelligence alliance (U.S., U.K., Canada, Australia and New Zealand), this suggests pretty strongly that the "we" is the NSA.

</comment></comment></comment></comment><comment><USER7> I find the drip-feed of information a really interesting choice, though I'm curious of its efficacy versus the wikileaks style dump.

It keeps the news alive for a longer period of time, sure, but it also means fewer eyes are looking over it and connecting the dots between various different pieces of the revealed information.

Wouldn't it be better if everything was revealed at once, and the various investigative reporters out there all got to go through it independently and write up a cohesive summation of the results, instead of this two-three page exposé per day?

<comment><USER3> Would Breaking Bad be as good if every episode were released at once?

<comment><USER8> this isn't for the same reason, its because they learned from wikileaks that the publics ability to absorb information is limited. a lot of important issues were burried in the wikileaks' releases.

</comment></comment></comment><comment><USER9> The same O Globo article reported a list of priority targets of the NSA and they are basically the BRIC ( interestingly the population here did not gave a shit about knowing US spies on them) also Iran andsome other powerful countries. North Korea,.Cuba, Venezuela or Afghanistan are not on the priority list, making clear that the "terrorism" is just a misdirection, and that PRISM true purpose still is.intelligence for potential.enemies.in a.conventional war.

</comment><comment><USER10> This is funny, if you actually google the keyword X-Keyscore, you'll find job opportunities that matches the criteria of intelligence gathering. And if you look closely, you'll find out it's a company called Raytheon that's awarded the contract to execute these works. And they have main offices in these crucial locations, eg; Fort Meade, Australia etc. And that they do all these kind of intelligence works.

And ironically, Raytheon's scientist was the dude who invented microwave.

Edit: Found this post from Feb 27th. About X-Keyscore, [http://www.nowtheendbegins.com/blog/?tag=xkeyscore](http://www.nowtheendbegins.com/blog/?tag=xkeyscore) and the interesting snippet.

What happens next looks like a 21st-century data assembly line. At the NSA's headquarters in Fort Meade, Maryland, a program called Xkeyscore processes all intercepted electronic signals before sending them to different "production lines" that deal with specific issues. Here, we find another array of code names.

Pinwale is the main NSA database for recorded signals intercepts, the authors report. Within it, there are various keyword compartments, which the NSA calls "selectors." Metadata (things like the "To" and "From" field on an e-mail) is stored in a database called Marina. It generally stays there for five years. In a database called Maui there is "finished reporting," the transcripts and analysis of calls. (Metadata never goes here, the authors found.)

As all this is happening, there are dozens of other NSA signals activity lines, called SIGADS, processing data. There's Anchory, an all-source database for communications intelligence; Homebase, which lets NSA analysts coordinate their searches based on priorities set by the Director of National Intelligence; Airgap, which deals with missions that are a priority for the Department of Defense; Wrangler, an electronic intelligence line; Tinman, which handles air warning and surveillance; and more.

Lest you get confused by this swirl of code names and acronyms, keep this image in mind of the NSA as a data-analysis factory. Based on my own reporting, the agency is collecting so much information every day that without a regimented, factory-like system, analysts would never have the chance to look at it all. Indeed, they don't analyze much of it. Computers handle a chunk, but a lot of information remains stored for future analysis.

</comment><comment><USER11> I struggle to believe that GCHQ has the ability to store 3 or even 30 days worth of internet traffic flowing through the UK borders and also make reasonable sense of it all. It's such a mind boggling amount of data. I looked at some bandwidth graphs from places like LINX, which is just one of presumably many, and they are moving around a terrabyte a second - how can you possibly store, let alone sift through that kind of volume? 30 days at a terrabyte a second is nearly 3,000 petabytes of data. And that's just in one exchange. Is this kind of thing feasible? Facebook allegedly deals with 200PB of photo data - 3000PB is a lot more than that.

<comment><USER12> Three seconds of data at 1TB/s, will fit on the largest consumer hard drive (3TB). There are 3 x 86400 seconds in a day = 259200 seconds. Therefore three days' data requires 86400 drives. Cost of said drives is about $100 each, meaning the cost of disks to store 3 days of data is $8.64 million, which is negligible to the government. Even with multiple links at 1TB/s the problem is tractable.

<comment><USER13> Storing it really is the trivial and cheap part. There are other really hard problems to solve:

(1) Where do you place collection points so you get a full take of not only international traffic (moving across your borders) and domestic traffic (all traffic within your borders but that doesn't leave your borders) (2) Since the number of collection points is limited, that means there is a lot of data that has to be recorded at select points. How do you record that data to disk in real time? (3) How do you avoid the duplication of packets that travel through multiple collection points. (4) Lastly, the most difficult problem is figuring out how to query all that data and not end up with a haystack. When you have millions and millions of pieces of communication from people with no involvement in the criminal activity, then all that communication becomes noise.

<comment><USER12> 1) If it's your own country's traffic, at the choke point in the network, which you (ie. govt) have full control over, since they are domestic.

2) Since you already have 100,000 disks, run 5000 of them in parallel. Each disk interface does 200MB/s, for an aggregate of 1TB/s. If necessary, use fibre to transport data from the collection point to the storage point.

3) Don't. Record the lot.

4) Spend a billion on a super computer?

I think it comes down to the bandwidth of computers now vastly exceeding the bandwidth of human thought. It is now possible to record an person's entire life, with plenty of headroom to spare, to account for any attempt to overwhelm the recording system.

</comment></comment></comment></comment><comment><USER14> I thought Snowden had already released everything and it was up to the media to decide what will be released when?

<comment><USER15> Isn't that nitpicking? Snowden released some information through the Guardian.

<comment><USER16> Russia said it would grant him immunity under the condition there were no more leaks. So who is responsible for this leak is certainly relevant.

That said I could imagine this is enough for Russia to make their case either way.

<comment><USER17> I'm pretty sure Snowden has already refused asylum from Russia, he wouldn't be stuck in an airport otherwise.

</comment></comment></comment></comment><comment><USER18> This is... WOW..

</comment><comment><USER19> I thought we were clear of this shit.

<comment><USER16> I wonder what would cause you to say something so stupid.

When you say "this shit" do you mean the negative image the USA is gaining from this? Why on earth would you prefer to remain in ignorant bliss about these happenings?

<comment><USER20> I read that not as "stupid", but (perhaps incorrectly) as a fellow Australian finally admitting to themselves that we're fooling ourselves if we think we can point an laugh at USA's treatment of their citizens while hiding behind some expectation that our local government is treating us with any more respect.

The sad thing is, our government is no better, out intelligence service is just as amoral and unaccountable, and our civil liberty movement is ineffectual to the point of being invisible. Perhaps "ignorant bliss" was preferable…

<comment><USER21> Actually it is likely worse than the US, the US government spying would generally stay US government only. Whereas ours in Australia is likely accessible by US agencies.

<comment><USER20> Indeed, and given the NSA's unique interpretations of some fairly commonly understood english words (like for example "collect" and "no"), I have no doubt that they're capable of creative legal interpretations where they can look their elected representatives and (in theory) overseers in the eye and say "we're not spying on US citizens" \- claiming later if caught that it's "the least untruthful answer" \- when what they really meant was "we asked the Australians to spy on US citizens for us, and hand over everything they found. _We_ didn't engage in any spying."

On the plus side, while I have niggling doubts about whether GPG and encfs/OpenSSL/AES are really secure against the NSA - I'm reasonably sure that even if they've got practical attacks against them, they aren't likely to be sharing even the existence of them with ASIO. I'm as close to 100% certain as makes no difference that GPG/encfs are secure against even the most powerful Australian government agencies (which is to say, only as secure as anything that'd break easily with rubber hose cryptography…).</comment></comment></comment></comment></comment>


Drop the transitions, give realistic UI feedback on :active - <AUTHOR> http://bfred.it/notes/2014/give-realistic-ui-feedback-on-active/

<comment><AUTHOR> This is my first article, it's about something that has bothered me in the last few months: Transitions. It's easy to add them and as easy to forget to remove them where they are not needed.

Feel free to comment on it or call BS. I'm here to learn. :)

</comment><comment><USER2> I love it, and I hate all the UI candy that has crept into everyday existence. Give me instant feedback. It's sad that my 2.4ghz quad xeon feels slower than my old 7mhz Amiga 500 did.

</comment><comment><USER3> The second example how OS X has handled dropdown menus for some time now and it feels like a perfect compromise. Menus will pop in instantly, and fade away when they're dismissed.

<comment><AUTHOR> You're right! I hadn't realized [http://i.imgur.com/83usTG1.gif](http://i.imgur.com/83usTG1.gif)</comment></comment>


Ask HN: Why is everyone bashing Tim Cook? - <AUTHOR>

With the release of iPhone5 there are two things majorly in discussion :
1. No new features in overpriced iPhone5
2. Tim Cook is no show man.
But why do we need to compare two people? Two versions of the same things when compared seem fine. But why is everyone expecting Tim Cook, to deliver what SJ did? <comment><USER2> Because he's replacing someone who built the value of the company to obscene levels through showmanship (among other things)? There is a direct comparison, they have the same job at the same company.</comment>