Lego ISS - <AUTHOR> http://www.collectspace.com/news/news-012120a-lego-international-space-station.html <comment><USER2> I built the Saturn V model a couple of years ago when it came out - a lot of fun and it now stands in pride of place in the corner of my office.

This model intrigues me, but it would be a b*tch to store/display once made though... I wonder why LEGO didn't just respond to the plethora of customer requests to make the LUT (tower) for the Saturn V model? It would have been just as many parts and would have complemented the rocket model.

<comment><USER3> I would absolutely buy a set for the tower. Like you I bought and built the rocket, and have it on display in my apartment, but having it stand vertically next to a tower would be so much cooler than the little stilts it's on right now. Sounds like a fun weekend project though, do you know of any good unofficial instructions?

<comment><USER4> In absence of a tower, how about this display solution: [https://old.reddit.com/r/lego/comments/eo2ufs/my_attempt_at_...](https://old.reddit.com/r/lego/comments/eo2ufs/my_attempt_at_a_lego_saturn_v_display/)

<comment><USER5> Another angle from further down that thread: [https://external- preview.redd.it/mmt_drJQ7vWZi6Uu-DHLx5JaUTp...](https://external- preview.redd.it/mmt_drJQ7vWZi6Uu- DHLx5JaUTpVmu6X_2BAh_qYHto.jpg?auto=webp&s=1dd063e571d5e2005a4598b2a23959c287ad9ffc)

</comment></comment></comment></comment><comment><USER6> A bit too small imho. Go big or go home. I want a space shuttle big enough for lego figures, and same scale space station.

<comment><USER7> At about 1:40, the ISS would be about 2.5 meters by 1.8 meters. I doubt they would sell many, unless it were made of Lego Duplo.

<comment><USER8> Pretty sure that would be the physically largest retail set ever sold if they did the minifig scale of 1:45 (ish) [0]. Looks like they might be making it roughly microfig scale judging by the scale of the included microfigs vs the rest. I'd rather maybe double the current size for more detail and chances for little greeble details but this size does make it easy to justify even with my current set backlog.

[0] It's a little messy because minifigs are quite squat and wide compared to their height.

<comment><USER9> > _microfig_

Had to look that up[0], since I haven't closely been keeping up with LEGO since my childhood, and for now lack children of my own to renew interest. Interesting concept, but it doesn't look like they're still "officially" used?

EDIT: Oh, the article states that this set comes with two microfigs. My bad, I should pay closer attention next time!

[0] [https://lego.fandom.com/wiki/Microfigure](https://lego.fandom.com/wiki/Microfigure)

<comment><USER8> I was wrong about the name the wiki seems to call what's included in the ISS set Nanofigures. Though it seems like places use both nanofig and microfig interchangeably since microfigs are discontinued.

[https://rebrickable.com/parts/90398/minifig-trophy- statuette...](https://rebrickable.com/parts/90398/minifig-trophy-statuette/)

[https://lego.fandom.com/wiki/Nanofigure](https://lego.fandom.com/wiki/Nanofigure)

[https://www.firestartoys.com/Shop/LEGO-Minifigures/LEGO- Nano...](https://www.firestartoys.com/Shop/LEGO-Minifigures/LEGO- Nanofigures.html)

<comment><USER10> So they're about 1:125-140. And this set is about 1:225.

Also that shuttle is absolutely not to scale. It's about 1:400.

<comment><USER8> Ah yeah I was just eyeballing it and the nanofigs did seem a bit big. It's tricky because going up just double size probably doesn't give them much chance to add more detail the way people would want and 4x would make it way too large and expensive.

</comment></comment></comment></comment></comment></comment></comment><comment><USER11> Wow. I grew up in the early 80's building Lego Space sets -- all Lego men in spacesuits and shapeships and space stations, but all fictional.

It kind of blows my mind a bit to see a real-life space station built with Legos now.

I mean, I know they've had a space shuttle and rocket sets for a while, but those were still just somehow fundamentally "earth-bound". (And Lego never did make a Skylab set.)

But a space _station_... for some reason that just feels more properly futuristic in a way. And in a Lego set, almost like fiction finally coming to life somehow.

</comment><comment><USER12> Based on the price per kg to get to iss, how much would it cost to send this up there and have it gently placed into a parallel orbit with candarm2?

<comment><USER13> Are 'parallel orbits' actually possible without active station keeping? (Thinking of _Seveneves_ ).

<comment><USER14> No. The orbital plane must intersect the (bary)center of Earth.

If you took that model and placed it to the right of ISS, with matching altitude and velocity vectors, then half the orbital period later, you'd find it somewhere to the left of the station.

If you want to keep two things close together in orbit for a while without active stationkeeping, your best bet is placing one ahead or behind of the other. Though in real life, they'll eventually drift their separate ways too, due to lots of small influences like solar pressure, residual air drag, gravitational pull of other bodies in the system, etc.

<comment><USER15> Wouldn't there be considerable slipstream from the trace atmosphere? Aft, slightly higher than the stations center of mass there should be a point were the slower angular speed of the minimally higher orbit would cancel out with the slipstream effect, until the next stationkeeping burn. I wonder how much it would start spinning from the uneven application of trace atmosphere in that time.

Might make a fun public experiment, try getting "the internet" to voice their predictions, kind of like everybody was commenting on the color of the dress. In any case I fully expect a kit to eventually make it up there but I doubt that it will see any EVA.

</comment></comment></comment></comment><comment><USER16> My son and I love building lego together, especially the robotic type, but I often worry about the tremendous amounts of plastic waste being created with every lego sold. I guess it pales in comparison to plastic bottles, but still. We are turning the earth into a giant trash heap.

<comment><USER17> Lego last long and are repurposable. I personally think they are not really meant to be built according to instructions in the long term. It's the same way a framework is not meant to do a todo app. It's something the kid does on first pass when learning how the system works, before starting on the actual cool stuff.

<comment><USER8> There's kind of two types of sets made today the play sets for kids and display sets for adult collectors. I do agree though that LEGO isn't really plastic waste because most of it doesn't get thrown out and kids collections get reused and resold to collectors and are relatively rarely thrown out.

</comment></comment></comment><comment><USER18> I wonder, have they confused the (big) radiators with (small) solar panels? It certainly looks so in the box package!

<comment><USER8> Nope looks pretty much dead on to me. See [0] for the real ISS vs [1] for the box art. The relative scales are a little off due to the available pieces (the larger radiators are pretty big compared to the solar arrays).

[0] [https://upload.wikimedia.org/wikipedia/commons/8/81/Internat...](https://upload.wikimedia.org/wikipedia/commons/8/81/International_Space_Station_TCS.png)

[1] [http://www.collectspace.com/images/news-012120g-lg.jpg](http://www.collectspace.com/images/news-012120g-lg.jpg)

<comment><USER18> Ah, I stand corrected, thank you. My mental image of the ISS was somewhat distorted, it seems. And I had no idea the main solar panels could pivot to align with the large radiators!

(For instance, here we can see both solar panels not completely aligned: [https://duckduckgo.com/?q=iss+radiator&t=ffab&ia=images&iax=...](https://duckduckgo.com/?q=iss+radiator&t=ffab&ia=images&iax=images&iai=http%3A%2F%2Fglobal.fncstatic.com%2Fstatic%2Fmanaged%2Fimg%2Ffn2%2Fvideo%2F051013_serrie_iss_640.jpg))

<comment><USER8> I didn't know the smaller radiators existed at all TBH. Makes sense though since they're on the same structure as the solar panels it would ensure those are basically always in the shade more or less since the solar panels will want to align perpendicular to the sun. As for the solar panels they can rotate each individually around it's long axis and the group of 4 at each end as a unit around the long axis of the truss.

</comment></comment></comment></comment><comment><USER19> It's great to see Lego innovating in this way, I wonder how much less business they do nowadays given the proliferation of mobile/digital gaming and social media keeping the new generations pretty occupied!

<comment><USER20> I'd much rather see them skip some of these gimmicky adult collector initiatives and get back to some of their core themes. They are so overwhelmed with licensed IP that they are nearly a merchandising wing of Disney at present.

<comment><USER21> I agree. As a kid the fun in Lego was to make specific things out if generic shapes. The special sets sounded like amazing before you got them, but turn into just more Lego once you had done the recomende constructions.

Lego robotics was a good indication, again generic pieces you can use you imagination to build specific things.

<comment><USER10> Unless you really mind the solar panel texture, this set seems to be almost entirely nice generic pieces.

</comment></comment></comment></comment><comment><USER22> So, when do we get a SpaceX kit??

<comment><USER23> [https://ideas.lego.com/projects/1abc6458-52e8-4e7d-a04c-04ba...](https://ideas.lego.com/projects/1abc6458-52e8-4e7d-a04c-04ba917b6e5b)

Needs 800 more supporters to reach the 10k threshold.

</comment></comment><comment><USER24> Oh wow a lego story makes it to the frontpage of HN :)

Not my fav lego set, but I guess some people really like it

I'm more excited about the upcoming LEGO Ideas pirate creek set

<comment><USER3> Oh there's been LEGO on here before alright: [https://news.ycombinator.com/item?id=14253672](https://news.ycombinator.com/item?id=14253672)

I bought that set and loved every minute of building it. Highly recommended!

</comment></comment><comment><USER25> Used to have a KNex model of the ISS when growing up, it was great for someone who was dreaming of going to space :)

</comment><comment><USER26> I desperately want this but would have nowhere to display it. Does anyone know what the production lengths of Lego Ideas sets are? Am I likely to be able to buy this in a year or two, or is this going to be the only opportunity?

<comment><USER27> Buy it now,put the box under your bed and once you have where to display, you'll do.

<comment><USER28> And even if you forget about it, say 20 years :), you might have a nice investment laying under the bed.

<comment><USER29> Do lego sets appreciate?

<comment><USER8> Generally yes. More for the collector sets like the older UCS Millenium Falcon (though the price for that might have fallen since the new one was released).

</comment></comment></comment></comment></comment><comment><USER30> I wonder if it was designed with strong attachment points for hanging it from the ceiling.

</comment><comment><USER31> I just wish it was to-scale with the LEGO Space Shuttle I had as a kid.

</comment><comment><USER32> my first thought was : please let me add real solar cells on this and make it a "light + sound" revival unit

</comment><comment><USER33> Side note: I love web design like this over the huge amount of white space + magenta gradients in contemporary react apps that take 9 seconds to load. The modern web app, what monster have we created!

<comment><USER34> Ok, some responsive design wouldn't exactly hurt (zooming in one-handed on my phone on a shaky bus took me longer than a bloated "modern" web site would take to load), but I definitely agree with your sentiment. No cookie warnings, no full-screen popups, no sluggish animations and yes, no huge margins that turn my rather large phone screen into a 3310.

<comment> _-___________-_ I didn't find it difficult to use one-handed at all. Double-tapped on the text which zoomed it to perfect reading width, then double-tapped again to zoom out and double-tapped on the images to have a look at those. Not sure what phone you're using but I think those gestures are universal?

<comment><USER34> I was using the WebView in Materialistic (Android HN reader app) which is known to be rather janky. The double tap gesture just zooms to some fixed value there and I had to manually adjust it. Not a big deal and even less so with most browsers' intelligent zooming or various "reading views", but still, being readable by default is a substantially better experience.</comment></comment></comment></comment>


FOAM: New JavaScript Framework by Google Engineers - <AUTHOR> https://github.com/foam-framework/foam <comment><USER2> This is a bold take on a problem that a lot of people have written away as reinventing the wheel. But color me impressed!

Unlike almost every other Javascript framework we've so far seen, FOAM makes the data model the primary entity in the system, which is a good idea. In the typical UI-driven development of web applications, the data model often gets modified without much thought and causes cascading complexity across the rest of the system. A lot of the convoluted UI code that I've written could've been kept simple by keeping the data model sane by finding and utilizing equivalences, making implied meaning explicit by extracting names, and normalizing/denormalizing the data appropriately. A data-structure driven development approach should help a lot here.

FOAM also implements another item from my wishlist: being able to see all the UI representation of any given piece of data in one place. It achieves this by keeping all possible templates for a piece of data directly in its object. ([http://foam-framework.github.io/foam/tutorial/4-templates/](http://foam- framework.github.io/foam/tutorial/4-templates/))

In general, this looks like the most declarative (as in, define your business requirements instead of writing imperative code) way of building web applications that I've seen yet. I would like to see what new ideas this library can bring into the 'Perfect UI Framework' conversation, but past experience makes me skeptical of any implementation that overly relies on metaprogramming. Metaprogramming can take us maybe 50% of the way home, but programming unfortunately is often an art in the minutiae. UI code is especially prone to this problem: things that have to deal with humans cannot be absolutely symmetrical all the time, which is where any overly declarative approach to building software breaks down. I often look back to this quote by DHH as a reminder of the dangers in generalization:

        On the surface, the dream of components sounds great
        and cursory overviews of new projects also appear to be
        "a perfect fit". But they never are. Reuse is hard.
        Parameterized reuse is even harder. And in the end,
        you're left with all the complexity of a swiss army
        knife that does everything for no one at great cost
        and pain.
        - DHH ca. 2005

Also, template based UI frameworks are IMO a relic of the past, of which I'm convinced by the way templates are defined imperatively using code in React. In templating, the UI is a String, but UI should be Code because code is awesome.

<comment><USER3> I'd love to see a mature app written this way (and I mean that genuinely, without sarcasm) and look at their project timeline, war stories, etc.

My gut feeling is that the 'frameworks are for prototypes, libraries are for production' camp is closest to the money, but (a) I have no actual data and (b) different approaches to frameworks will have different outcomes.

<comment><USER4> Just compare number of well-known production apps written using React & Angular.

<comment><USER5> How? Where can I see such a comparison? Is it obvious to you which there are more of? It isn't to me.

</comment></comment></comment></comment><comment><USER6> One thing you notice right off the bat: Its very slow. It takes about 2s on my machine to load the TodoMVC example. Thats about as long as it takes to load my GMail inbox. Thats pretty horrible for whats supposed to be the "Hello World" of JS frameworks. I didnt dig in what actually takes so long, but it seems like it has still some way to go.

I find it interesting that after Angular this would the second (3rd if you count GWT) JS framework released by Google with pretty bad performance characteristics (if it actually is made be Google).

<comment><USER7> If you load it off of the TodoMVC site, it loads much faster than the AngularJS version. If you load it from GitHub then it is slow because that isn't a packaged/built version (it's just loading directly from the repository) and is loading all of the individual models separately. We have a 'BuildApp' tool which can package applications for production, which doesn't happen when you load directly from GitHub.

FOAM doesn't require a build step, which is why it can be run directly out of the Git repository, but that method isn't representative of production performance.

</comment></comment><comment><USER8> I use Google's Javascript framework. GWT? No, the other one. Polymer? No, the other one! AngularJS? No, the other one!!

<comment><USER9> Closure Library?

<comment><USER10> No, the other one!

<comment><USER11> Google Gears?

<comment><USER12> Google Dart?

</comment></comment></comment></comment></comment><comment><USER13> > FOAM is a full-stack Reactive MVC Meta-Programming framework.

Inevitably reminds me of this: [http://html9responsiveboilerstrapjs.com/](http://html9responsiveboilerstrapjs.com/)

I understand MVC, but what is reactive meta-programming exactly?

<comment><USER14> Simplifying -

Reactive:

The display automatically changes when some data changes

eg [http://foam- framework.github.io/foam/foam/index.html?model=f...](http://foam- framework.github.io/foam/foam/index.html?model=foam.demos.ReactiveClocks)

the one clock moves when you move the other

Meta-programming:

The writing of computer programs with the ability to treat programs as their data. Examples of meta-programming include Lisp-macros and C++ Templates. FOAM does this through code-generation, but for Javascript, it does this mainly by dynamically creating prototypes as maps of functions.

The above is a bit cut and pasted - I have not fully figured what FOAM does

The reactive bit is quite cool in Meteor.js because if you change something in the database then any page displaying it updates on all clients simplifying things like chat apps. I have not figured if FOAM does that of if the "full- stack" bit includes the server side and database code like it does on Meteor. Anyone know?

<comment><USER15> It is very 'batteries included'. The demos use data islands and localstorage. You'd hook your DAO to something like Firebase instead. The Tutorial has a bug where it refers to DetailView it should be foam.ui.DetailView or something like that.

</comment></comment></comment><comment><USER16> Doesn't seem to actually be by Google. Perhaps the title could be changed to "by a Google Engineer"?

<comment><USER17> I was at EmpireJS where this was announced and they said they had a team of Googlers working on it, and showed a few production Google apps built using it.

<comment><USER18> Interesting. Can you offer any details on which production Google apps were presented?

</comment></comment></comment><comment><USER19> Just today I was thinking "there's not enough ajavaScript frameworks.", and BANG! Google solves my problem. Nice.

</comment><comment><USER20> I'm not sure this framework is endorsed by Google. I can't find "by Google" on the home page nor about page.

<comment><USER21> [https://github.com/foam- framework/foam/blob/master/core/Boot...](https://github.com/foam- framework/foam/blob/master/core/BootstrapModel.js#L3)

<comment><USER22> Curiouser: [https://github.com/foam- framework/foam/blob/b75af78303f15826...](https://github.com/foam- framework/foam/blob/b75af78303f15826c71ee4a35d99208637838b82/js/node/dao/JSModelFileDAO.js#L138)

</comment></comment></comment><comment><USER23> It's about time more people starts using ES6 class constructors instead of rolling their class definition hack. This is how it's done in the calculator demo:

       CLASS({
          name: 'Calc'

With babeljs you can use ES6 syntax like this:

       class Calc {
       }

<comment><USER24> Crockford talks about the bad features added to ES6, one of them class which he said is most requested by Java developers programming javascript.At the end of the talk he show way how to move out of classes/new in javascript [https://www.youtube.com/watch?v=PSGEjv3Tqo0&feature=youtu.be...](https://www.youtube.com/watch?v=PSGEjv3Tqo0&feature=youtu.be&t=308)

<comment><USER25> Can you give a short gist of why they're bad and why should one move out of classes/new? What is the alternative?

<comment><USER26> From the video:

        function constructor(spec) {
          let {member} = spec,
              {other}  = other_constructor(spec),
              method   = function () {
                // accesses member, other, method, spec
              };

          return Object.freeze({
              method,
              other,
          });
        }

<comment><USER25> That looks pretty interesting and flexible on one hand, on the other, I don't see why it's better than classes. Is it just more explicit?

</comment></comment></comment></comment></comment><comment><USER27> Five clicks in and I'm still not sure what it really is/does...

<comment><USER22> This presentation might help a bit: [https://docs.google.com/presentation/d/1KQkRJOiEBDktgFSa3qle...](https://docs.google.com/presentation/d/1KQkRJOiEBDktgFSa3qlehLFwtogssKbnaHBrZ26mWtk/pub#slide=id.g38d220eec_01236)

There is so much stuff in the source tree - including what looks like a complete UI layer - that I'm having a hard time grokking it from that direction.

Phrases like "can be used to generate code for any language or platform" and "FOAM is "written in itself"" make me want to understand what's going on first and how it solves whatever problems it sets out to solve rather than trashing it out of hand based on initial aesthetic impressions.

</comment></comment><comment><USER28> On the demos page

[http://foam-framework.github.io/foam/foam/demos/DemoCat.html](http://foam- framework.github.io/foam/foam/demos/DemoCat.html)

All the links to "Source" take me to GitHub 404.

I would suggest this is the most important part of showcasing a new project.

<comment><USER29> Until this is fixed, the source files for the demos are available here: [https://github.com/foam- framework/foam/tree/master/demos](https://github.com/foam- framework/foam/tree/master/demos)

</comment></comment><comment><USER30> It does not seem a new thing, rather an old one just migrated it to Github.

It has 8,474 commits. The first commit (and also the first issue on Google code) dates back to Jul 30th 2012. And it was just the first public release, not an empty commit (43 files).

(first issue: [https://code.google.com/p/foam- framework/issues/detail?id=1](https://code.google.com/p/foam- framework/issues/detail?id=1) )

</comment><comment><USER31> Regardless of how good it is, the presentation could and should be improved. Quick to grasp examples, an explanation telling me _which problems this project solves_ and as a bonus how it compares to other frameworks. All of this should be on the GitHub readme frontpage. Poor presentation is like a 0.01 multiplier for your amount of potential users. It's easy to avert your eyes from this but it's almost as important as the quality of the product itself.

</comment><comment><USER32> A first glance of the docs I see the components aspire to a declarative style (being defined entirely in JSON). I'm wondering though, why not use composition[1] instead of inheritance? I need to take a better look to see how view composition would work in FOAM.. But I can tell from experience with Backbone, that using composition instead of inheritance improves code structure and increases maintainability. If composition was a first-class construct (like they made extendsModel), it would get a lot of issues out of the way.

[1] [http://en.wikipedia.org/wiki/Composition_over_inheritance](http://en.wikipedia.org/wiki/Composition_over_inheritance)

<comment><USER33> Actually it's one of their principles: [http://foam- framework.github.io/foam/principles/#composition...](http://foam- framework.github.io/foam/principles/#composition-is-better-than-inheritance)

Currently all I see in demos is lonely rendered "f" symbol and slow as hell loading... [https://github.com/foam- framework/foam/issues/295](https://github.com/foam-framework/foam/issues/295)

</comment></comment><comment><USER34> They say it's reactive, but this is how they explained "reactive": [https://foam- framework.github.io/foam/foam/apps/overflow/Ove...](https://foam- framework.github.io/foam/foam/apps/overflow/Overflow.html#q12) and [https://github.com/foam- framework/foam/wiki/KeyConcepts#reac...](https://github.com/foam- framework/foam/wiki/KeyConcepts#reactive-programming)

</comment><comment><USER35> looking at the todo example, i was perplexed by the way templates are inlined through comments:

[https://github.com/foam- framework/foam/blob/master/apps/todo...](https://github.com/foam- framework/foam/blob/master/apps/todo/Todo.js)

it led me to discover that the full text of a function can be reflected through .toString() ...

i'm not sure i'd be happy to see this approach widely adopted though. it feels like a language hack, like _maybe_ js needs a multiline literal string..

<comment><USER36> In case this is not already widely known, ES6 has that:

        var multiline = `line 1
        line 2
        line 3`;

</comment></comment><comment><USER37> Use of ES6 classes would have been nice and I'd prefer to work with simple javascript objects to hold data vs rich model objects ([http://foam- framework.github.io/foam/tutorial/2-model/](http://foam- framework.github.io/foam/tutorial/2-model/)).

I don't think this is the framework for me.

</comment><comment><USER38> interesting look, example documentation a bit spotty (pages missing eg: [http://foam-framework.github.io/foam/foam/demos/](http://foam- framework.github.io/foam/foam/demos/) & others), rest of the docs ok.

What do I see? It's language centric, that's good and bad. The good bit is you can with a very small JS lib write code to generate a dynamic page. The bad bit: as the language grows and rusts, you have to chase down the removed features. Much easier to grasp in concept and execution than Angular.

Loved this bit in the calc demo source, testing: [https://github.com/foam- framework/foam/blob/master/apps/acal...](https://github.com/foam- framework/foam/blob/master/apps/acalc/Tests.js)

Q. Is foam an attempt to create a framework for Mobile Apps?

</comment><comment><USER39> Another "higher performance" framework! At least dont throw these phrases around.

<comment><USER7> We have benchmarks (using queries extracted from real Google apps) that show that our query-optimizing caching layer speeds up IndexedDB performance by a factor of 100.

See: [https://github.com/foam- framework/foam/blob/master/demos/pho...](https://github.com/foam- framework/foam/blob/master/demos/photo.js)

Also, load the Empire.js presentation and then press the '+' button on the bottom right. This will load and run all 25 slides at once, at which point you'll have over 20k data-bindings, both one- and two-way, 7k objects, 6k of which are currently being animated.

See: [http://foam- framework.github.io/foam/foam/index.html?model=f...](http://foam- framework.github.io/foam/foam/index.html?model=foam.demos.empire.Preso)

We are capable of handling this many data-bindings efficiently because we don't rely on a digest/diff cycle. Since we generate the JS prototypes from our models, we are able to install hooks into the generated property getters and setters so that we can receive update notifications.

Also notice that our GMail client can perform searches on the keystroke.

I lead the FOAM project at Google.

</comment></comment><comment><USER7> Video of the FOAM Empire.js presentation is now available at:

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

</comment><comment><USER40> Seems similar to this: [http://jsblocks.com](http://jsblocks.com)

</comment><comment><USER41> Would someone mind very simply explaining how this relates to (or differs from) Angular?

</comment><comment><USER42> It seems every week there is a new javascript framework.

<comment><USER43> [http://xkcd.com/927/](http://xkcd.com/927/)

</comment></comment><comment><USER44> This sounds a lot like Microsoft's TypeScript.

</comment><comment><USER15> Good God it's beautiful

</comment><comment><USER45> > FOAM is a full-stack Reactive MVC Meta-Programming framework.

5 years ago I would have thought that this would have been the title of the tech section of Onion article ...

<comment><USER46> And hackernews wasn't full of snarky one liners. Did you even read further than that before you just had to get your comedy 'out there'?

<comment><USER45> I did. After reading the whole page I was not able to determine what it does ...

Edit: Also 5 years ago HN was even fuller with snarky one liners and eyebrow dismissals.

<comment><USER46> My apologies. I had a knee jerk reaction to what I though was wanton pessimism.

Having read the docs now I'm more inclined to subscribe to your initial onion theory.

</comment></comment></comment></comment><comment><USER47> It's been like 5 seconds since last new JavaScript framework was released. I really started to worry, so thanks for this post.</comment>


Tickets Now Available to Chirp - the Official Twitter Developer Conference - <AUTHOR> http://chirp.twitter.com/sign_up.html <comment><AUTHOR> Hope loads of people with the means to do so can sponsor hungry developers to attended via scholarship tickets.</comment>


The beginners guide to starting web development - <AUTHOR> http://joshhornby.co.uk/blog/devs-toolkit/

<comment><USER2> You should touch up on Sublime's Package Installer. With it, it completely trumps Coda (with exception to the CSS GUI).

<comment><AUTHOR> Thanks I will check it out. Like I say I hope to do a few more blog posts around this topic. Feel there isn't anything like it on the web.

Also thinking about maybe a course to help teach younger/new web developers.</comment></comment>


Two Kinds of Tech Debt and How to Pay It Down - <AUTHOR> https://blog.kylegalbraith.com/2018/10/22/two-kinds-of-tech-debt-and-how-to-pay-it-down/ <comment><USER2> At my company we also always talk about two kinds of tech debt but in a totally different way: (1) "bad" code debt is basically high interest where the longer you wait the refactor story grows and grows and gets scarier and scarier. (2) "good" is interest free or low interest debt which you should defer paying as long as possible so you can focus on more important immediate things. This is usually achievable when the thing you are ignoring can be neatly encapsulated and doesn't affect the rest of your code as the codebase grows and evolves.

Usually we talk about this distinction when deciding to defer work for hypothetical scaling. For example we had an app that required HIPAA compliance and had a chat feature, since we were initially deploying to a few hundred users for a pilot and our main short term goals were about learning/validating we just build it using polling since none of the other sockets based alternatives were easily HIPAA compliant. It worked great for the pilot and took like 2hrs to implement and because it was so simple we were able to evolve the chat experience really quickly with different features as we got feedback.

</comment><comment><USER3> One of the things about technical debt that I have seen is a lack of a real accounting system that at least ballparks the costs in real dollars.

Countless acquisitions happen where technical due diligence is not performed, and acquirers realize later on they have wildly underestimated the cost.

<comment><USER4> And that's probably why this doesn't happen.

If you have bookkeeping that shows that you're a bad acquisition target you go out of business and are considered a failure. If you don't then you get bought by someone idealistic and you're considered something of a success.

<comment><USER3> Sure - it's something you can sweep under the rug by not having any accountability on it.

<comment><USER4> Yeah, I'm not saying I agree with it, I just comprehend how it happens.

</comment></comment></comment></comment><comment><USER5> Another scenario is when an acquisition occurs for the data a company has collected and so the codebases are quietly retired. In that situation there's still _some_ value in paying down _some_ technical debt - security updates on libraries and whatnot - but there's a point at which the decommissioning effort becomes the primary driver.

</comment><comment><USER6> You can take advantage of the reusability part of software development to pay down technical debt in a way that's impossible with traditional debt.

Developers and businesses should have a well-maintained toolbox, library, or framework that they use for just about everything they work on. The longer you use the same toolbox, the better the tools will get; just improve them a little bit every time you use them and deploy those improvements to as many projects as possible.

This gets hard to do in environments that are always chasing the new thing.

</comment><comment><USER7> missing the concept of tech depreciation, if your codebase has a debt of 2000 codedollars and a value of 10000 codedollars, those value codedollars are probably depreciating over time and moving to the debt column.

</comment><comment><USER8> "There are two kinds of people in the world, those who believe there are two kinds of people and those who don't."

\- Robert Benchley

EDIT: just to be clear I'm very skeptical there are only two kinds of technical debt...

<comment><USER9> > EDIT: just to be clear I'm very skeptical there are only two kinds of > technical debt...

The author acknowledges this in the article:

      "Of course, there are more than two types of tech debt, but I think the two we talk about here cover a lot of ground."</comment></comment>


OpenFastPath Technical Overview - <AUTHOR> http://www.openfastpath.org/index.php/service/technicaloverview/ <comment><USER2> For a moment I thought it was about Unisys mainframes...</comment>


Frameworks Round 6 - <AUTHOR> http://www.techempower.com/blog/2013/07/02/frameworks-round-6/ <comment><USER2> I'm really surprised at the performance of C#... honest no-flame question: how is possible it that Python is beating C#? I've been out of the .NET world for several years, almost a decade, but I always assumed they would be at Java level performance.

edit add: This is really fantastic work

<comment><USER3> I guess you need to change the Hardware to "Win" to see it shining.

<comment><USER4> Indeed, mono performance isn't great. That is the problem with C#, you need ultimately to run it on IIS for web platform deployment, sadly under anything else it is rather slow.

Also these tests are a bit unfair, as I think they give benefit in some areas to frameworks that cache by default, rather than by request.

Ultimately, what I want to know is total cost, that means hardware, licenses / support agreements, development time, developer ease of hiring.

That isn't to say these aren't interesting, but they are rather apples to oranges. As I posted in the other flamebate thread about MS stack > *, I have set a note in my calandar to help improve the example for MVC.Net ([https://news.ycombinator.com/item?id=5976540](https://news.ycombinator.com/item?id=5976540)). Hopefully I will be able to come then when not in an exclusive agreement, they suck I know, but it pays my mortgage!

<comment><USER5> I missed your later reply in that other thread. If the node.js implementation is caching results from the database, it should be modified to _not_ do so. The original implementation did not, but it has seen several updates from node.js SMEs. Can you point to what makes you suspect that it is caching? The requirements do not allow for caching [1]. Future test types (perhaps in Round 7) _will_ allow for caching, but none of the present test types allow for it.

[1] [http://tewebdev.techempower.com/benchmarks/#section=code](http://tewebdev.techempower.com/benchmarks/#section=code)

</comment></comment></comment></comment><comment><USER6> Finally! I was disappointed when this round was postponed.

I couldn't wait to see how well my framework (Jester; [https://github.com/dom96/jester](https://github.com/dom96/jester)) performed, not only because it was my framework but also because it is written in Nimrod. I am a bit disappointed by the results but at least there is a lot of room to improve now, I didn't have much time to properly implement concurrency for Jester so I opted for just spawning a couple of processes which is definitely not ideal.

I hope that Round 7 will go better for Jester. In the meantime I hope that you will check out the Nimrod programming language ([http://nimrod- code.org](http://nimrod-code.org)) despite the results that my framework achieved.

To the team that carried out these benchmarks, thank you!

<comment><USER5> Finally indeed! In future rounds, I hope that we can spend less time trying to resolve problems--if there are problems, we'll just post the results and move on to the next round. Better to keep iterating, and allow the experts who work with each framework resolve issues as they come up.

Thanks very much for contributing Jester to the test! I really appreciate your spirit and hope to see it improve in Round 7 as well. I'm looking forward to seeing the next pull request. :)

<comment><USER6> Indeed, although people may be disappointed if their framework fails and they have to wait another month for another round of results, but then I suppose the next round will come a lot quicker if you have less issues to fix.

No problem at all. Thank you for merging my process spawning silliness. You will definitely see a lot more improvements from me :)

EDIT: A little issue I just noticed: the jester "Front-end server" is shown as "None" when in fact it's "nginx".

<comment><USER7> I think they would be less disappointed if it meant a consistent schedule. These benchmarks are really a lot of fun, not sure if they change hearts and minds, but they are beautiful and fun.

I think being time-boxed rather than implementation-boxed make sense. If you miss a month, you got 30 days to fix it.

Also, they could only "update" the test rules quarterly or every 6 months, give the authors a bit of time to respond.

</comment></comment></comment></comment><comment><USER5> Thanks for posting this, amarsahinovic.

This is the latest round of our ongoing project to benchmark the performance of fundamental services provided by modern web application frameworks. With the continued contributions of the developer community, the number of frameworks and platforms included is now 74! Round 6 also adds the often- requested plaintext test with HTTP pipelining (thanks in large part to William Glozer of Wrk fame).

The results web site also now includes a "framework overhead" tab that allows you to compare a framework versus its underlying platform. This was originally conceived by a Hacker News user named goodwink [1].

Like the round before, Round 6 gave us some technical challenges, including a period where we were unable to collect any latency data. Today, some problems persist, such as the Dart test (yes, there is server-side Dart) failing to complete for most of the tests. However, rather than continue to defer Round 6, we've decided it's better to move forward and use the round-over-round progression to iterate, fix, and improve. No problem that exists today is set in stone.

To that end, as always, I would love to hear any feedback, advice, questions, criticism, and especially contributions. And we hope you find this information helpful!

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

<comment><USER8> Luminus appears to be a clojure framework, not a php framework.

Thanks again for posting these tests.

<comment><USER5> Oops! My mistake in classifying. Many apologies to fans of Luminus. I've just corrected this.

</comment></comment></comment><comment><USER9> I've followed yogthos' work on Luminus since the beginning.

It doesn't merit mention independently of Compojure. It's just some sane defaults for pedagogical reasons for getting started writing web apps on top of Compojure. It adds nor removes no runtime or anything else. As it currently exists, it's a Leiningen project template generator. That's about it.

Luminus is isomorphic, for the purposes of a benchmark, with Compojure.

I'm sure yogthos will be flattered when I tell him his web app templating thingy was included though.

<comment><USER5> Sunglasses! Good to see a familiar name.

Incidentally, yogthos should be aware that Luminus was included: [https://github.com/TechEmpower/FrameworkBenchmarks/pull/293](https://github.com/TechEmpower/FrameworkBenchmarks/pull/293)

</comment></comment><comment><USER10> Disturbing results since I so frequently have used Sinatra for hosting REST APIs for customer projects. Rethink needed.

For my own projects I use Clojure + Compojure and more recently added Node.js (often with Meteor) and was pleased to see that they benchmark well. One thing I especially like about Compojure with the Hiccup HTML generating library is that I see syntax errors immediately in the editor. I suppose that Scalatra with embedded HTML would provide the same benefit.

<comment><USER11> Maybe benchmark it yourself? I think something is amiss, it should easily 'hello, world' at 2x higher rate than Rails. Poked around the setup a little a while back but nothing jumped out.

Hunches: it's either going through webrick or not running with RACK_ENV production

<comment><USER5> Unicorn, nginx, production environment.

[https://github.com/TechEmpower/FrameworkBenchmarks/blob/mast...](https://github.com/TechEmpower/FrameworkBenchmarks/blob/master/sinatra/setup_ruby.py#L18)

</comment></comment></comment><comment><USER12> Wonderful, thanks for the continuous updates. I hope you will keep gaining momentum around this initiative; having a solid community-supported set of benchmarks which routinely improves would be a true asset.

By the way, I would like to offer a UX suggestion: it would be nice if you could select one or more frameworks and have them highlighted in the result listings, so as to be able to notice their relative position at a glance.

<comment><USER5> Thanks for the feedback. The highlight is a good idea and I've created an issue for the suggestion [1]. I'll try to get that added in time for the next round.

[1] [https://github.com/TechEmpower/FrameworkBenchmarks/issues/35...](https://github.com/TechEmpower/FrameworkBenchmarks/issues/359)

</comment></comment><comment><USER13> Honest question: Why are most of the frameworks that I know of in bottom half? When does speed becomes relevant?

<comment><USER14> Three reasons as to the hierarchy:

1) Most popular frameworks you would encounter run on higher level dynamic languages such as PHP, Ruby or Python. These languages are a decent bit slower than performance optimized languages. The languages towards the top are all C, Java, Go, etc.

2) The frameworks towards the top are generally lower level - they do less automatic 'magic' than the more popular frameworks that handle things like validation automatically.

3) In general, it's more likely you will have heard of older frameworks than newer ones. The frameworks towards the top are generally all less than 2 years old (excluding Java servlets which have just always been decent). This means they make use of newer designs such as non-locking and asynchronous connection handling.

When does speed become relevant? It's actually always relevant as soon as your product gets traction. For example, 1 server at the top of that chart may be able to handle the same load as 10 servers towards the bottom. If you're using a framework at the bottom and paying heavily for 10 servers, you could increase your startups runway substantially by swapping. However, swapping may cost more in engineer-hours than the servers.

Basically, the relevance of speed is directly related to your margin. If your margin is high (investment banking maybe?), then speed is almost irrelevant, you can afford a whole building of servers. If you're competing heavily on mass market web apps, speed is fairly critical as you can out price competition.

<comment><USER13> Thank you for great response.

But for me all this seems quite biased towards small Frameworks/Platforms. I will hardly ever serve one JSON response form full stack framework. If I just made some C server that would do those tasks very well it would be first in this list but very far of anything of value.

Albert Einstein once wrote, "Everybody is a genius. But if you judge a fish by its ability to climb a tree, it will live its whole life believing that it is stupid."

<comment><USER15> There is no evidence that Einstein ever wrote or said that [1].

[1] [http://quoteinvestigator.com/2013/04/06/fish- climb/](http://quoteinvestigator.com/2013/04/06/fish-climb/)

</comment></comment></comment></comment><comment><USER16> Thanks for continuing to do these. As far as I know, no one else is doing something like this in such a comprehensive way.

</comment><comment><USER17> An honest confession from someone inspired by these comparisons. I've been following these benchmarks very closely right from round one and ever since I've been waiting to see my favorite framework, Ruby on Rails perform decently to some extent. I waited till the last round to see some improvements and while I DID see some marginal improvements, it wasn't as expected.

This then provoked me to do some basic math. Imagine a real world startup scenario wherein you need to your application to deliver API responses (JSON) or even ordinary HTTP responses. If you use a framework from the bottom of the list (like Rails), then you may be able to serve, say, 'X' customers on your site using your application at a time. Now, if you use something from the top of the list, you may be able to serve roughly about 20 times (20X) more number of customers on a single server. This not only means less cost, it also means you can worry about scaling and stuff much much later than you would have to, unlike on a low performant framework.

For this reason, I decided to conduct an experiment for myself. Pick up a framework from the top of the benchmarks and experiment with the learning curve and the language. Well, after carefully evaluating, I decided JAVA wasn't for me (too much of a beast). But Scala seemed to hit the sweet spot with excellent language (1 line of Scala = 10 lines of Java on an average) features along with the trust of the JVM.[1]

So, I chose Scala and started experimenting with it. I started with the play framework and was not fond of certain decisions that were made within the framework. Also, the play framework is nothing like Ruby on Rails (but it claims to be so) and was more of self-serve and also quite heavy for my taste. Hence, I went even farther up the list and chose Scalatra. Generally, framework selection is a matter of personal preference and each one should choose whatever aligns with their philosophy. For me, it was scalatra.

Frankly, I haven't been able to ship out features at the speed at which I used to, with Rails, but there was something very important that I learnt too - Don't get comfortable with full stack frameworks without understanding what goes underneath. Rails suddenly seemed like an enemy to me because it was doing everything so magically that I literally had NO IDEA until I had to implement them myself with Scalatra. For example, do you know what AES-GCM is? Do you know HOW the secure cookie store in Rails works? What algorithm it uses?? Do you know you have to change the secret pretty often??? Do you know how authentication in Rails (Devise) works??? Can you build it from scratch???? I knew none of these, until I had to implement them myself for my application on top of Scalatra. It was seriously a pain because for the first one week, I did absolutely nothing, in terms of progress with features. But later, I started loving this way of development rather than relying on 'magic' frameworks. Now 'magic' seems scary for me because I cannot actually see what's happening underneath.

So, to cut a long story short, Should you choose the fastest framework? Or should you follow the 'ship it first' policy with an average framework??

My advice - Start with a full stack framework, something like Rails or Django, but also in parallel, try to understand how every bit of your framework works and try to implement it into a micro framework based on something from the top of the benchmarks (like Go, Scala, etc.). Most importantly LEARN. Something new everyday! And slowly shift your development towards these high performant frameworks as and when you see fit.

This is just based on my experience :)

[1] 1 JVM = 10 Thins, Source: [http://www.slideshare.net/pcalcado/from-a- monolithic-ruby-on...](http://www.slideshare.net/pcalcado/from-a-monolithic- ruby-on-rails-app-to-the-jvm)

<comment><USER18> I had similar ambitions, and I wanted to play with the top performers, so I started looking at the Java (gemini) ecosystem.

And after an hour of surfing I remembered why I didn't follow through the last time I had this idea. The Java ecosystem is complex, I mean really complex.

Here are some of the terms I came by that look like I should grasp before trying to make something: servlet (various versions), servlet container (resin, tomcat, jetty, ...) , OSGi, jar, war, wab, jboss, glassfish, java standard/enterprise edition, where are classes being imported from, configuration files for different containers, JNDI, classpath...

Are there any resources for Java like [http://mirnazim.org/writings/python- ecosystem-introduction/](http://mirnazim.org/writings/python-ecosystem- introduction/) for Python or [http://www.phptherightway.com/](http://www.phptherightway.com/) for PHP that would help someone to start navigating all those java-isms?

"Getting started" article for developing web applications with gemini would also be helpful.

<comment><USER19> Hi gog,

I'm sorry you spent time trying to get started with Gemini, because it's our internal framework that isn't released yet. That would have been frustrating for you!

From our "Motivations" section: [http://www.techempower.com/benchmarks/#section=motivation](http://www.techempower.com/benchmarks/#section=motivation) "Why include this Gemini framework I've never heard of?" We have included our in-house Java web framework, Gemini, in our tests. We've done so because it's of interest to us. You can consider it a stand-in for any relatively lightweight minimal-locking Java framework. While we're proud of how it performs among the well-established field, this exercise is not about Gemini. We routinely use other frameworks on client projects and we want this data to inform our recommendations for new projects.

<comment><USER18> Thank you,

now I understand why I couldn't find anything useful on this page [http://www.eclipse.org/gemini/web/](http://www.eclipse.org/gemini/web/) :)

Nevertheless I am still looking for good resources on getting started with Java (ecosystem wise, not the language itself).

<comment><USER2> Have you considered starting with Grails? It's a much easier jump into the "java-ish" world. The main benefit is you can choose to run a grails application and rely on java jars for when you need performance boosts.

<comment><USER20> We've been using Groovy internally for a few years for prototyping and experimentation. I thought about slowly introducing Grails as an alternative to Spring for some projects. My experience was that it vaguely reminded me of Rails but needed a lot more polish. I had a huge issue trying to chase down archaic stacktraces and found that there is little developer momentum pushing it forward. I usually found myself googling and reading random blogs to figure out simple things I couldn't infer from the docs. Where as Rails magically makes things work, I found that a lot of times Grails made things magically not work. I wouldn't personally suggest it for anything customer facing.

<comment><USER21> You could use JRuby and Rails if you need the JVM.

Groovy's OK for wraparounds testing and/or running Java classes, what it was originally intended for, bringing closures and terser list/map syntax (altho JRuby et al have those too). It's all rather slooooow though. Grails uses Groovy's MOP which was added later, but I don't use them much. I toyed with Groovy's interceptors and categories when they were added, even wrote notes on them, but they broke in the upgrade from 1.5 to 1.6. There's a lot of such cruft in Groovy which just lapses from version to version through lack of use and support. They brought in AST transforms to get programmers to extend Groovy's functionality, but when they do, the Groovy managers wil swipe the code and pass it off as their own in the next version of Groovy (e.g. Groovy++ written by Alex Tkachman was cloned as the static compilation in Groovy 2.0 and the static traits in the upcoming Groovy 2.2).

tldr... Use grOOvy for quickies handling Java classes, and for Grails where it's required, but look at a serious programming language for anything larger.

<comment><USER20> I would much prefer using JRuby/Rails but we have a bus factor of 1 with Ruby :(.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER22> For such a young language, I'm really surprised by the performance of Go there. Quite awesome.

<comment><USER23> Round 4 of these tests is what triggered my dive into Go this past month, and it has been a revelation. If you add in the concurrency capabilities, the language simplicity, and nice balance between overly terse syntax (Python one liners...) and overly verbose typed languages (Java), the whole package is even more impressive.

The only real thing I think it is missing is a "high productivity" application framework like Rails to elevate it from "damn, I'm impressed" to "it would be ill advised to use almost anything else".

</reluctant fanboy rave>

<comment><USER24> Have you tried modern ML-style languages? e.g: Haskell, OCaml, F#?

They also combine the nice conciseness of Python, with great concurrency (better than Go) and a lot more safety (less late night crashes).

<comment><USER25> With respect, and I say this having experimented with Haskell, OCaml, any many other functional languages as well, just, no. Those languages come at a MUCH higher mental cost than go. Go is wonderful because writing it doesn't feel like I'm attempting a CompSci doctoral thesis. I can also say I have yet to see the Go runtime crash, and I am using in production.

I also challenge your "better concurrency" claim.

<comment><USER24> What do you mean by "mental cost" here? Cost of initial learning? Then I agree... But learning a language is an O(1) cost that takes a few weeks to a few months. We program with the language for many years.

I never said the Go runtime will crash, but your programs will, because of unsafe nullability, mutability in the concurrently shared state, and various other problems in Go.

Better concurrency in Haskell: In addition to having light-weight threads like Go and channels like Go, Haskell also has software transactional memory which Go lacks. Haskell also has `par` annotations on pure expressions that allow parallelization with guaranteed lack of effect on program semantics. Haskell also has data parallelism.

<comment><USER23> Haskell (and most of the other languages mentioned) is exceptionally clever. This, above all else, is it's downfall. For me, especially when tasked with building a high productivity development team, clever code is a ticking time bomb. It's easy to write, but hard to maintain and modify. It requires more mental ram to analyze any given piece of code, and is much more difficult for multiple programmers to contribute to. It's tiny, to be sure, but, again, I think that is negative, not a positive. Maximum clarity is not minimal code.

Go, on the other hand, is not clever. It's boring as hell, honestly. This is a Very Good Thing® when it comes to building out a dev team, and I feel, the single biggest reason Google put the resources into creating it.

As for the crashing, of course I see some dangerous areas. Educating developers on avoiding a small regions of pitfalls is much easier than managing a team of clever coders though.

<comment><USER24> I disagree that Haskell is "clever". I think Haskell is "smart".

Using "Maybe a" when you have a nullable value is smart, not "clever". It aids maintenance and readability, not hampers it.

Using pattern matching is the same.

Haskell builds on mathematicaly simplicity, which makes things hard to grasp at first. This may be mistaken for cleverness.

Unless I'm misunderstanding you -- can you give an example of something clever in Haskell?

<comment><USER23> I'm not a haskell expert (obviously), but the time it takes me to parse things like this is time I would rather spend reading 5-10x the number of lines and getting the meaning right away.

      let loeb x = fmap ($ loeb x) x in
      loeb [ (!!5), const 3, liftM2 (+) (!!0) (!!1), (*2) . (!!2), length, const 17]

(btw, I have no idea what the hell this does. Something to do with spreadsheets, apparently. I found it on [http://www.haskell.org/haskellwiki/Blow_your_mind](http://www.haskell.org/haskellwiki/Blow_your_mind), which has enough cleverness to make me want to cry)

I've seen cleaner and more readable code in production haskell, but this sort of thing happens enough that I'm very cautious.

<comment><USER26> I think the first paragraph of the page linked explains why that code is so impenetrable. You will not have to read or write Haskell like that, ever. Good find though! On a similar note, the Haskell community is amazing. You can learn absolutely everything between the Haskell wiki, freenode irc and hackage. How great is it that EVERY lib/package/framework is documented on hackage in exactly the same format? Very great. Coming back to JavaScript is a bummer :(

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER27> How are certain languages _so_ much faster even when pulling from the database? Surely the database would be the bottleneck here? Surely if it's something cool the driver is doing, that could be implemented in other drivers?

Also, why are some frameworks on there a bunch of times (e.g. ASP MVC)?

<comment><USER28> > Surely the database would be the bottleneck here?

The idea that "it doesn't matter which language you use because DB would be your bottleneck" might have been true 10 years ago but it's definitely not true anymore.

Latest versions of MySQL and Postgresql are extremely fast. They are written in C/C++ and heavily optimized. MySQL serving data from RAM can easily do 500K+ rps on a commodity server. Even if you need to go to disks there are $200 SSD's that give you almost 100K IOPS. Put a few of them in a RAID and you're getting hundreds of thousands of IOPS for very little money.

In all likelihood application code written in Ruby/Python/PHP with frameworks piled on top of abstractions is going to be orders of magnitude slower than the DB server written in C that has undergone 15+ years of heavy optimizations.

<comment><USER27> Ok, but say we use vanilla Python WSGI with a psycopg2 (C Python PostgreSQL extension) directly. Will this come close to the performance of the C++ framework thing?

<comment><USER28> I'd say a vanilla Python application without ORM would perform similar to a flask app without ORM. According to [http://www.techempower.com/benchmarks/#section=data-r6&hw=i7...](http://www.techempower.com/benchmarks/#section=data-r6&hw=i7&test=db)

flask (on Gunicorn): 6,138

flask (on PyPy): 8,167

Django + ORM : 4,026

cpoll-cppsp : 114,711

So while a light weight Python app without ORM might be 50% faster than a full-blown Django app, it's still almost 20 times slower than a C++ app.

That shouldn't be surprising, by all accounts Python is at least an order of magnitude slower than C++.

You could speed up your Python program by running PyPy. According to the benchmark that gives it a 30% speed boost, which is in line with my experience. Another way is to deploy on uWSGI or Meinheld instead of Gunicorn.

No matter what you do, Python will not be close to the speed of C++. But what really matters is: is it fast enough for your need?

</comment></comment></comment></comment><comment><USER29> i would really like to see how CFML engines (Railo, Adobe ColdFusion) and frameworks (FW/1, CFWheels, ColdBox) stack up in this comparison.

FD: I contribute to CFWheels

<comment><USER5> We'd love to receive these test cases as pull requests if you have the time to contribute them. :)

[https://github.com/TechEmpower/FrameworkBenchmarks](https://github.com/TechEmpower/FrameworkBenchmarks)

<comment><USER29> checking out the documentation now. is there a google group or some place I can post questions to if I need help?

<comment><USER5> Indeed!

[https://groups.google.com/forum/?fromgroups=#!forum/framewor...](https://groups.google.com/forum/?fromgroups=#!forum/framework- benchmarks)

</comment></comment></comment></comment><comment><USER30> I would love to see how the Goliath async server (Ruby version of Node.js is one way of looking at it - [http://goliath.io](http://goliath.io)) performs, as I've recently started looking into it for a part of a project.

<comment><USER31> I was just about to post this. And will the next round be tested on Rails 4.0?

<comment><USER32> The best way to ensure Goliath is tested is to submit a pull request.

We'd rather test Rails 4 than obsolete versions of Rails: [https://github.com/TechEmpower/FrameworkBenchmarks/issues/35...](https://github.com/TechEmpower/FrameworkBenchmarks/issues/352)

</comment></comment></comment><comment><USER33> The play-slick results seem to be missing. Was there some sort of problem?

<comment><USER5> I had not named it uniquely. I've changed its name to "play-slick." Thanks for pointing that out!

<comment><USER34> Thanks for updating that. I noticed that the Slick version seems to outperform the regular Anorm version in most tests. Do you have any insight into why that might be? I figured it would've been the other way around.

</comment></comment></comment><comment><USER35> Can anyone explain why the "gemini" framework with an ORM outperforms raw servlets/queries in almost all the cases?

What kind of optimizations are done ?

<comment><USER5> Evab, Gemini is our in-house framework [1] that we've included in these tests for our own learning experience. We're not obsessed with performance, but we do try to avoid problems that are easily avoided. :) For instance, where possible, we have used Java's concurrent data structures and reduced the use of locks.

A difference in these tests is that we have our own connection pool. Speed was not a main objective when we wrote it--it's so old that if my memory is correct, it predates the availability of the connection pool that now ships with the MySQL driver, which is what we've used in the Servlet tests. Nevertheless, my conjecture is that perhaps it's just a tad quicker at selecting an idle connection. Incidentally, for a while in an earlier round, the Go guys had an alternate test implementation that used a concurrent queue for connections and it performed fantastically. We've been toying with changing Gemini to do the same at some point.

For the benchmarks project, we classified ORMs as "raw" (no ORM), micro, or full. In Gemini, we have a micro ORM. The following are examples of its use in the test code [2]:

        // Get all rows from Fortunes table.
        final List<Fortune> fortunes = store.list(Fortune.class);

        // Get a random World row.
        worlds[i] = store.get(World.class, random.nextInt(DB_ROWS) + 1);

        // Run a batch of updates from a List of entity objects.
        store.putAll(Arrays.asList(worlds));

"Micro ORM" is loosely defined, but we've applied it to ORM options that offer some abstraction over plain old SQL, but aren't as comprehensive as the standard-bearers. For example, while we have a data structure that represents relationships, we do not have a higher-level query language that traverses relationships automatically nor any similar mechanism for easy relationship traversal. It turns out that across all of these frameworks, there are dozens of what we are calling Micro ORMs.

Getting back to your question, the Gemini ORM does leverage a few tricks for performance such as ReflectASM for object creation and prepared statements for queries. But there isn't a whole lot of fancy work going on.

It's not glamorous, but the most important high-performance elements we make use of in Gemini are the JVM platform and Java's concurrent data structures. As demonstrated by the likes of Undertow (the web server component of JBoss WildFly), mind-boggling performance is available on the JVM.

[1] [https://groups.google.com/d/msg/framework- benchmarks/p3PbUTg...](https://groups.google.com/d/msg/framework- benchmarks/p3PbUTg-Ibk/fOjQMxESEJ0J)

[2] [https://github.com/TechEmpower/FrameworkBenchmarks/blob/mast...](https://github.com/TechEmpower/FrameworkBenchmarks/blob/master/gemini/Source/hello/home/handler/HelloHandler.java)

</comment></comment><comment><USER36> Does anyone have more info on "cpoll-cppsp"? Hearing about it for the first time, it seems to be smoking all the other frameworks.

<comment><USER37> I was actually just checking it out for myself.

[http://sourceforge.net/projects/cpollcppsp/](http://sourceforge.net/projects/cpollcppsp/)

[https://github.com/xaxaxa/workspace/](https://github.com/xaxaxa/workspace/)

Seems to be a C++ framework with dynamics in the form of C++ code using an ASP style for embedding into the resource.

</comment></comment><comment><USER38> i don't see any mention of uwsgi or gevent in these benchmarks. Deploying Python apps without properly configuring the container/webserver will skew the results considerably (probably applicable to a couple of other entries as well).

</comment><comment><USER28> cpoll-cppsp made huge performance gains from round 5 to 6. For example multiple queries went from 1,872 rps in round 5 to 7,252 in round 6. What caused that?

Also what happened to cpoll-cppsp in the plaintext test? Its performance there took a deep dive.

<comment><USER5> I know that the contributor of those tests made several changes. We weren't able to identify why it fails dramatically on the plaintext test, but I suspect it's a combination of the two unique characteristics of that test: the use of HTTP pipelining and higher client-side concurrency. My guess is that the pipelining in particular is causing problems.

<comment><USER7> I really hope you guys start doing more in-depth high-concurrency testing. This is a huge risk / problem with _many_ frameworks and kits. It seems to be a blackhole in your tests for some reason, which is a shame because the are so well done in other regards.

Having a framework which falls down horribly at high concurrency is something people need to know about -- in how they structure and design applications and how they structure deploys. It can also help them pick frameworks that fit them better (some frameworks will do great at high concurrency, some won't).

Can't wait till you start adding high concurrency (which should NOT require any code changes from the implementation providers, you add a zeroes to the concurrency.. 100, 1000, 10000 tests).

</comment></comment></comment><comment><USER39> Nice, Some solutions are quite fast , but as soon as the database needs to perform heavy stuffs , well the perfs decrease dramatically. The really bottleneck seems to be the database in most cases. However ,some frameworks are basically quite slow.

</comment><comment><USER40> What about Cobol on COGS?</comment>


Federal Reserve: Facebook Libra "cannot go forward" without addressing concerns - <AUTHOR> https://decrypt.co/7825/fed-chairman-facebooks-libra-cannot-go-forward-without-addressing-serious-concerns <comment><USER2> Powell is caving into pressure from Maxine Waters - the wimp.

</comment><comment><USER3> Golly, I wonder why all governments hate this thing.

</comment><comment><USER4> Fuck the regulators, build a brand new economy!</comment>


Whisky from a German Glen? The E.U. Won't Drink to That - <AUTHOR> https://www.nytimes.com/2018/06/07/business/scotch-whisky-glen-ecj-europe.html <comment><USER2> See also the Canadian distillery[1] using the "Glen Breton Rare" label. Located in Glenville, Nova Scotia ("New Scotland") I feel like they have a bit of legitimacy to their name.

[1] [https://en.wikipedia.org/wiki/Glenora_Distillers](https://en.wikipedia.org/wiki/Glenora_Distillers)

<comment><USER3> Glen Breton? That sounds like it's simultaneously from Scotland and Bretagne. Sounds like the EU court would disapprove, but I notice it's available here. Apparently their labelling does make it clear it's from Canada rather than Scotland. Maybe that helps? But then the German brewer should be able to do the same.

</comment></comment><comment><USER4> "The term 'glen,' a Gaelic word that means 'narrow valley,' is not specifically included in that protection."

Well, the Scottish Gaelic word is actually gleann, and glen in Manx (a Gaelic language) actually means clean. Glen is an English borrowing of a generally Celtic word (compare Welsh glyn and Cornish glynn; both Brythonic languages, not Gaelic). In fact, the only modern Celtic language where the word is spelled glen is Breton, which is spoken in France.

</comment><comment><USER5> The contention is not whether it can be called whisky/whiskey but whether it can be marketed under a name containing "Glen" as that word evokes Scotland.

It seems like a cheap attempt to cash in by the Germans. If their stuff is good, let it stand on its own merits.

<comment><USER6> Quite. They even admit to it being a "pun" on the name of the local town, rather than merely 'named after'.

</comment></comment><comment><USER3> Wait, does this article call Belgian frites "a local variation of French fries"? That's fighting words!

It's a local variation of Dutch patat, of course.

</comment><comment><USER7> Good luck telling Wisconsin cheese heads they can't call cheese what they've been calling it for decades.

<comment><USER8> I don't think Wisconsin is in the EU.

<comment><USER9> But they would like to sell their products there.

<comment><USER3> If they want to sell it in a particular market, they have to obey the rules of that market. The EU market is a very attractive market, but with very strict standards.

This is basically the source of most EU-US trade disputes. The US wants to sell to the EU according to US standards, and the EU won't allow it.

</comment></comment></comment></comment><comment><USER10> Related; these guys got away with it (but it's not a brand, just a specific bottling): [https://www.masterofmalt.com/whiskies/svenska- eldvatten/sven...](https://www.masterofmalt.com/whiskies/svenska- eldvatten/svenska-eldvatten-glenn-blended-scotch-whisky/)

This independent bottler also has a rum called "WeiRon", named after a famous Gothenburgian actor, Weiron Holmberg.

This kind of lame pun-based humour is considered a Gothenburg stereotype in Sweden, so you could say that these guys are pushing it to its limit.

</comment><comment><USER11> Kind of misleading headline, since it suggests the ECJ already forbid the use, where it merely said that's possible that it is misleading.

</comment><comment><USER12> I personally find the European food labeling rules to be strange.

But I'm an American, and we have our own strange rules too.

<comment><USER13> Come on, the spirit if the law in the EU is not to make labelings misguiding.

I don't think you can have both really - someone will always be in a weaker position. But I would rather know that if I am paying for a bottle of champaigne - I am paying for what it is, rather than for some designer drugs.

<comment><USER14> The problem though is you can easily imagine the correct conditions for producing the food/drink can be found (or artifically constructed) in any variety of places; the us protects a companies branding, but its very strange (to me at least) to protect a location's branding. Particularly on a _type_ of production style.

If it ain't produced like wisconsin cheese, then fine, you shouldnt call it that, but if it's more or less equivalent, then who the hell cares if it was made in wisconsin versus ohio?

<comment><USER15> But Champagne is a region in France. Wine made using the same method is known as "Methode Champenoise" (or, less commonly, "Cremant"). You can use either of those on your "Champagne" made elsewhere, but if it's not from the Champagne region you can't call it Champagne.

Seems reasonable enough to me.

Edit: That said, the case in OP does seem unreasonable - if they were attempting to use the word "Scotch" then it might be a different matter but I don't see why "Glen" should be protected.

<comment><USER16> Appellation protection is the lamest form of protection.

Nothing is special because it comes from a certain lat/long. Despite the fierce objections of sommeliers, "terroir" is cargo-cult pseudoscience.

Not being able to call bubbly wine "champagne" is like not being able to call a disc of ground beef between a sliced bun a "hamburger" because it wasn't grilled in Hamburg, Germany or not being able to call pizza "pizza" if it wasn't baked in Pisa, Italy.

Also out: Frankfurters, Vienna sausages, California rolls, Buffalo wings, baked Alaska, Worcestershire sauce, Mississippi mud pies, Peking duck, and Mayonnaise not made in Frankfurt, Vienna, California, Buffalo, Alaska, Worcestershire, Mississippi, Beijing, and Mayenne, respectively.

And forget about selling Monterey Jack cheese not made in Monterey, California.

<comment><USER17> Even in the EU, not every origin name is protected. For instance, Gouda cheese may be produced anywhere, the Dutch were unable to get that name protected.

</comment></comment></comment></comment></comment></comment><comment><USER18> Since Germany/Deutschland has an 'e' shouldn't it be "whiskey"?

<comment><USER11> Maybe according to some language theory, but not how it's used here, the standard German word is "Whisky". If "Whiskey" is used at all, then only as an exception when referring to stuff where the makers refer to it as such, so Irish or American Whiskey. (e.g. you might see a category "Whisky & Whiskey" in online shops...)

The local distilleries all use "Whisky" as far as I know.

</comment></comment><comment><USER19> It's been quite a few years that articles such as this one have been coming out, how could the americans possibly still be surprised by European food regulations?

Glen Buchenbach does not sound German and is pretty obviously named like that to try and associate its brand with Scottish brands, just as the Commission said.

>The European Court of Justice said on Thursday that a German distiller's use of the term "glen" could mislead or confuse customers about the origins of its beverage, potentially suggesting it was a product of Scotland.

</comment><comment><USER20> Only a few months until the UK drops out of the EU, and then this will be completely legal.

<comment><USER21> I don't think you are correct in saying this. Brexit negotiations are ongoing, and I haven't seen any indications that either side is interested in dropping this aspect of regulation; but one thing worth bearing in mind is that the UK has relatively fewer of these designations in comparison to the EU, and thus you could argue has less to lose. But I very much doubt it will come to that, and I think it would be a loss for both sides if it did.</comment></comment>


Hamburger Casserole Recipes FTW (lessons learned: ebook publishing) - <AUTHOR> http://www.whattofix.com/blog/archives/2011/02/hamburger-casse-1.php

<comment><USER2> Another mistake: not clearly linking your book in the article in case people who read the article were interested in the book. I spent five minutes skimming up and down trying to find a link to the book because I was interested, but I couldn't find one.

I came here to write this comment when it finally occurred to me that your image might link to the book itself.

Edit: A preview or something might be nice, too -- I'm not exactly enthusiastic about buying it as an eBook without a preview after you talked about all of the formatting/OCR errors...

Edit: I am completely dumb. I missed the link in the introduction.</comment>


Show HN: UK Salary comparison site - <AUTHOR> http://salarygraph.co.uk

<comment><AUTHOR> I created this site as a demo of my data-visualisation skills for a job application. Any feedback much appreciated!

</comment><comment><USER2> I have the same opinion as many people in this thread:

The interface is clear, the results well presented, the process self- explaining. Great work.

As a criticism would be needed to balance all that positiveness, maybe the background is not up to the rest of the interface.

<comment><AUTHOR> Appreciate the feedback. I'd definitely like to work on the background. The wood texture is a bit of a cop out really.

</comment></comment><comment><USER3> This reported my percentile versus my age group as in the 100th percentile. This is flattering, however, you can't score in the 100th percentile.

Other than that, this is a flawless execution in my opinion. Clear data representation and very intuitive to use.

<comment><AUTHOR> I opted to put anything 'off the charts' as 100th - maybe I should make this clearer? Congratulations on the salary, though!

<comment><USER3> Lol thanks, although it's not that really an 'off the charts' type of salary. I think making this clearer would be much more helpful :)

Edit: One more little snag: I encountered 'Percentile: 73th' - just need to change the suffix cases :)

<comment><AUTHOR> Thanks for that... I'd even written a digitSuffix function but managed to forget "rd"!

</comment></comment></comment></comment><comment><USER4> Flawless and clear presentation, instant results. Sorry, can't see anything wrong with it so can't offer constructive feedback. Maybe ditch the background? Seems so out of place.

Sadly it reminds me how badly I'm doing.

<comment><AUTHOR> Thanks, very kind!

</comment></comment><comment><AUTHOR> To save HNers some time, I'd guess a lot of us will be in the 'software professional' occupation category.

<comment><USER5> Thanks, was looking for "programmer", "developer", "web developer". No go on all of them so I came back to the comments to see what everyone else had put!</comment></comment>


Remember the guy who gave his employees a $70,000 minimum wage? - <AUTHOR> http://www.slate.com/blogs/moneybox/2015/10/23/remember_dan_price_of_gravity_payments_who_gave_his_employees_a_70_000_minimum.html <comment><USER2> Can I get a tl;dr?

<comment><USER3> from right near the end:

"Six months after Price's announcement, Gravity has defied doubters. Revenue is growing at double the previous rate. Profits have also doubled. Gravity did lose a few customers: Some objected to what seemed like a political statement that put pressure on them to raise their own wages; others feared price hikes or service cutbacks. But media reports suggesting that panicked customers were fleeing have proved false. In fact, Gravity's customer retention rate rose from 91 to 95 percent in the second quarter."</comment></comment>


The Chevy Volt of airplanes, the Volta Volare, is ready to fly - <AUTHOR> http://www.extremetech.com/extreme/127981-the-chevy-volt-of-airplanes-the-volta-volare-is-ready-to-fly <comment><USER2> > Volta Volare says low maintenance costs will be a big attraction.

That was my first thought -- would it extend the mileage achievable before needing an inspection/overhaul (for a/the combustion engine)?

Still, vaporware until I can buy one.</comment>


Ask HN: Folks with RSI, what area did you go into or how did you overcome it? - <AUTHOR> My RSI(pain in my pectorals and arms) has recently gotten worst, is dragging me into depression and has me fearing for my future.
I'm not sure I can go on like this and have been looking for lifestyle alternatives.
I'd love to hear what those in the community who have had to deal with RSI did to overcome their condition or what others think would be good alternative career paths without much typing. I'm open to _anything_.
My profile in some keywords: web and network security analyst, love to cook, love sport and yoga, python programmer, structured thinker, philosophy geek, love explaining stuff, I like to think I have a way with words(German, Spanish and English). If you have any ideas or remarks I'm pretty interested in reading them :). <comment><USER2> I was diagnosed with cubital tunnel (tennis elbow) after a multi-month stretch of intense coding. I became seriously concerned when I started feeling needle stabs in my hands at random points in the day. Doctor told me I needed surgery. I managed to dodge that, but it wasn't simple. I had to commit to paying attention to my hands 24/7 for months. Once I made up my mind, it wasn't really hard, just continuously inconvenient.

Here's what it involved:

Self-massage and stretching before, during after typing and throughout the day. Mostly improvised, but this video "Essential Hand Stretches For Guitarists" [https://www.youtube.com/watch?v=TSrfB7JIzxY](https://www.youtube.com/watch?v=TSrfB7JIzxY) helped a lot.

One keyboard on my desk, another on my lap. One mouse on my desk, another below the desk on a pedestal on my left-hand side. Constantly switched between them to cut down on repetition.

Hunt-and-peck typing with my fingers hanging loose as if my hands were paralyzed. Similar minimal-contact, minimal wrist-effort use of the mouse.

Don't let my forearm rest on anything ever.

Stopped wearing rings or my watch.

Lots of breaks. Lots of getting up and walking around.

It has been 10 years and my hands still don't like typing a whole lot. But, I never typed nearly as much as I did that one year. I haven't had any significant problems since that recovery.

<comment><AUTHOR> Thank you very much, that sounds quite encouraging.

What do you mean by "hunt-and-peck typing?" Like, using only your index fingers and moving your hand from your arm over the keyboard?

<comment><USER2> Yep. Moving my whole arm and mostly using my middle finger. Typing like a zombie with my arms out and my hands hanging loose.

</comment></comment></comment><comment><USER3> 1) Consumed plain gelatin daily as a supplement (mixed in hot water, added apple juice) to support my tendons and ligaments. Did this for a year or two.

2) Cleaned my keyboard regularly with peroxide.

3) I have heard resistance training can help.</comment>