Ask HN: How important are ergonomics to you? - <AUTHOR>

In an never ending race to improve myself and my productivity i also think alot about the perfect hardware, software and enviroment. I bet many of you do aswell. I probably think way to much about this which isnt good for my productivity in the first place, just like surfing on HN and similar sites, but have to do what it takes to feel comfortable.
I currently use a pretty powerful Windows 7 box with Dual 24" Dell IPS Screens. In ergonomic terms, this is very good.
* Both displays have the same size, resolution and DPI
* Both screens upper corner is where my eyes look at when i sit in front of it comfortably
* Both screens are about an arm length away
* i can move the keyboard around
* my chair is prolly not perfect, but i dont have the money for one of those airon chairs yet
Sitting in front of this setup all day, i feel its important to think about such stuff. Yet i see alot of people here or elsewhere (like Facebook or other startup) offices that work from a Laptop all day which is something i think about doing since i hate syncing my workspace data and logins/bookmarks etc on seperate machines. So i find the thought of having everything i work on with me all the time very compelling. I also want to change back to Mac only (i had a MBP last year), just so you know.
The drawbacks of this approach for me:
* i am used to having 2 large Displays for years, will a Laptop + external screen hinder my productivity (although the latest 15" MBPs have a 1680x1050 resoultion which is almost the res of my Dells)
* a Laptop + external screen have hugely different size and DPI, which is not ergonomic
* plugging in all the external stuff all the time if i want to show something to somebody or stuff like that speaks against a Laptop only solution and for something like a mac mini + 2 displays and a macbook air 13". Best of both worlds basically, but again the need to discipline yourself and sync all the relevant data to have everything in place
So id like to know what the folks here think about that, as i just cant decide on whether to go with a 15" MBP for everything or a 13" Air + mac mini/pro. I dont like iMacs, having them with a second screen doesnt really fit, glossy displays arent ergonomical and MBP + external screen does the same for me.
thanks in advance. Now i should prolly get back to work ;) <comment><USER2> It's very important for us all, i dare to say its even more important for people doing creative work (which in my opinion includes programming).

One thing people must pay attention when they get stuff is that it doesn't help you if you get something that do not fit your body's ergonomics needs. Just because an HelloWorld chair helped someone to relief his back pain doesn't mean it will work for you.

<comment><AUTHOR> yes thats right, however there are some suggestions for an ergonomic workplace which i have pointed out above and working only on a laptop is definatly not as ergonomic as working on a Desktop. Still many people on here seem to prefer laptop only.

</comment></comment><comment><USER3> If you want to use a notebook your main computer I think a docking station is a must. The problem is that, if you want to go with a macbook you there are no really decent docking options for it.</comment>


Ask HN: What are your hobbies? - <AUTHOR> Mine are running, art, writing, investing, and playing poker. <comment><USER2> Climbing mountains. I like to scare myself once in a while in the mountains, so the next time I am sitting at my computer I am very happy to be in such a safe place, doing such a safe thing. When I lose focus, I go back to the mountains until all I want to do is code again.

<comment><USER3> I have been training to start doing this again. I have been out of shape for the last 2 years(health complications), but used to boulder all the time. It both scares the hell out of you and clears your mind absolutely. Often I would find myself able to nail problems as soon as I returned that I had been spinning on for hours before.

</comment></comment><comment><USER4> 'Old' (solderable) electronics / 80s computers, beer brewing, walking (a lot) (in nature/mountains), wearables (my biggest annoyance in life is that I cannot code while walking in nature; I do not like sitting (or walking behind) my computer), reading (as well, would rather do that walking and often do, but very constrained => in places I know well and where I will probably not run into other people / dogs etc).

Edit: Most of my work is my hobby as well; coding, starting companies, convincing great people, working with great people. When all is running smooth it's like a hobby. And for a while the hard times are fun as well to get sharp again.

<comment><USER5> Have you done any interesting projects with wearables? With Raspberry Pi becoming more mainstream it seems there's a lot of potential for hobbyist wearables, from simple devices to augmented reality projects.

<comment><USER4> I have experimented a lot with stuff I have and wearables are coming closer to interesting use. For instance I picked up a second hand Twiddler one hand keyboard/mouse and with some practice I can program with it a bit. Then hooking that up to a rooted smartphone with Linux seems to work fine. Allowing me to 'program' a bit while walking, but of course with the phone on my left wrist and Twiddler in right hand, it doesn't allow for very stable viewing/typing. Best would be augmented reality, where the augmented part is a projected, stable screen on the right-middle side of my right eye with a usable resolution (so not Recon). Then programming I think about the issue for a while and then write code; this seems to match that model particularly well and it's actually how I work at home. I stand in front of 'something' (can be a tv or window or ...) and my laptop is on my right on a standing table. I contemplate the problem and move my concentration to the right to the screen when I found a 'solution'. I think this would work well. However, there are no augmented reality devices ready for this. I tried a few and they gave me headaches or were quite uncomfortable.

Guess it's waiting for Glass or something to hurry the .... up. But that'll probably be disappointing as well; seems we are quite far removed from this. So for now I'm focusing on the software side, like having a live/reactive, predictive programming language which can be used almost only with alphanum chars. I have a lispy (but it would work with all lisps which don't have syntactic sugar) which predicts the parentheses well enough to almost never having to type them. This helps with entering code faster with one handed keyboards and voice (which I think is a dead end btw). However the issue which always arises is editing code, not adding code. That is also something you can reason about and try to solve without having the actual hardware, so it's something i'm working on. When I have time (i'm in a startup, unrelated to this hobby right now), I will blog about everything. I promised myself this will be before the end of the year ;)

</comment></comment></comment><comment><USER6> Anyone play golf? I love it.

I also enjoy riding my motorcycle, reading literature, weightlifting, photography, and playing Battlefield 2.

I am learning to play piano and chess.

<comment><USER7> How did you learn to play golf? I've wanted to learn for some time but don't know where to start.

<comment><USER6> I've messed around with golf for about a year or two before getting serious this summer. Lessons made the biggest improvement. After I had a rough idea from the lessons, reading really made me understand the hows and whys.

This should help you on your way: If there are any golf courses around you, check their clubhouses for a local pro. There's usually someone around giving lessons.

This is where you _need_ to spend the most money. Buy 5 or 10 lessons. Learn the fundamentals first, dont worry about distance, worry about contact.

Do this instead of a "craigslist deal". You'll be sure to get sound advice from someone who really understands the game.

For clubs, buy used or secondhand. These will last you until you either fall in love with the game or give it up and something else.

Suggested reading would include:

        Five Lessons: The Modern Fundamentals of Golf — Ben Hogan
        Harvey Penick's Little Red Book: Lessons And Teachings From A Lifetime In Golf — Harvey Penick
        Golf My Way: The Instructional Classic — Jack Nicklaus

</comment></comment></comment><comment><USER8> Olympic-style weightlifting. It's taught me an awful lot about the power of diligent practice.

<comment><USER9> I second Olympic lifts. Also teaches the tradeoffs of doing something correctly.

<comment><USER10> I third this. Also teaches the benefits of persistence and dedication.

</comment></comment></comment><comment><USER11> Math and my toy OS. A little lame for a programmer, but you do what you love, right?

</comment><comment><USER12> Playing with may daugther (drawing, puzzle, disney videos, video games, etc.). Reading (just some pages to sleep). Playing video game (specialy when Blizzard have a new game).

</comment><comment><USER13> Kubb - the lack of tech in this simple lawn game continually re-teaches me focus and strategic thinking.

Beer brewing - always rewards patience and deliberateness.

</comment><comment><USER14> It's always cool to see how multifaceted everyone is! Ok mine are playing Celtic fiddle and everything foodie-related.

</comment><comment><USER15> Shooting, Rifles, films, and Photographs.

</comment><comment><USER16> Cooking. There's something extremely relaxing about mindlessly chopping stuff up and then frying it in oil :)

<comment><USER3> Same here. I love food and experimenting with flavors, but honestly doing prep work is some of the most relaxing things in the world. And when I bought myself a decent couple of knives(Shun's pairing, chefs, bread and a Global boning) my mind was blown. Oddly, this led to me finding grocery shopping relaxing as well (I live near Whole Foods flagship store) and I walk in, find something fresh and wander around trying to piece together a meal.

</comment></comment><comment><USER17> Singing/Recording/Editing, Reading books(non-fiction), Running(Yeah I run for fun), Web/Graphics Designing, Sports(Badminton/Cricket/Football), Photography(from last few months), sketching & painting, cooking/eating, and sometimes meeting & chatting nonsense with close old friends.

</comment><comment><USER18> My non-software hobbies are mountain biking and working on old porsches.

</comment><comment><USER19> Weight training - currently doing 5/3/1 Fly fishing for trout. I find this the best for stress-relief. Beautiful countryside, gorgeous fish. Used to box as well, but haven't for a few years.

</comment><comment><USER20> Surfing.

Ever since I picked it up when I moved to Hawaii it superceded all of my other hobbies. The payoff for improvement is so great, and even if you don't have a great session, you're out in the ocean.

</comment><comment> bulte-rs In the lucky position to have programming as a hobby (and not as a full-time occupation).

That next to enjoying time with my wife and kid; reading and playing tennis.

</comment><comment><USER21> MMA (BJJ, Sambo, Judo, MMA-orientated striking). Reading, Graphic Design, Friends. Friends are my favorite hobby.

<comment><USER22> I practice Yoseikan, which is similar to BJJ/MMA. I often get weird looks from people because they don't expect it from me. I just love how hard your brain has to work during a match (not to mention body), and how different the way you use your mind is. Martial arts is about so much more than beating the crap out of each other, there's so much tactics, strategy and psychology involved. Glad to find a fellow MMA'er here on HN!

</comment></comment><comment><USER23> Flying planes

</comment><comment><USER24> Juggling, guitarr playing, programming, sailing, backpacking, trekking and african drumming.

</comment><comment><USER25> Tennis (obsession maybe), photography, reading fiction, New Girl TV show (don't judge me).

</comment><comment><USER26> Exercising at the gym, playing chess, playing tennis and swimming when I can.

</comment><comment><USER9> I paint and play competitive beach(and indoor) volleyball. I also meditate.

</comment><comment><USER27> I am a salsa performance dancer and I used to play cello more often.

</comment><comment><USER28> Squash, riding my motorcycle, hiking, started with arduino recently

</comment><comment><USER29> Digital Video Post Processing! See the originaltrilogy.com forum.

</comment><comment><USER30> Kayaking, fishing, hiking....generally outdoors type stuff.

</comment><comment><USER31> Historical wargames!

<comment><USER20> I love old Avalon Hill games. One of my dormant projects is working on a networked Russian Campaign so that I can play against my dad.

</comment></comment><comment><USER32> Bicycle touring, camping, and my game-inventing club.

</comment><comment><USER3> What kind of art are you into and/or making?

</comment><comment><USER33> rock climbing

</comment><comment><USER34> Carp Fishing

</comment><comment><USER35> Caveing! :) And mountaineering!

</comment><comment><USER36> Olympic weightlifting

Coding (i don't in my job)

</comment><comment><USER37> Badminton and Astronomy. :-)

</comment><comment><USER38> Learning. Applying. Tech.

</comment><comment><USER39> biking, badminton, myth busting and watching the mythbusters!

</comment><comment><USER40> Russian language

</comment><comment><USER41> Muay Thai

</comment><comment><USER42> pr0n

</comment><comment><USER43> chess, reading books.</comment>


GitHub Login on Parse.com - <AUTHOR> http://blog.parse.com/2012/10/24/github-login-on-parse-com/

<comment><USER2> It's always smart to assign a password to your account. Github was down just the other day. Keep a password assigned to your account just in case. By the way, I think github is a great single sign on for hacker related services. People who use parse are usually already logged in on GitHub... Right?

</comment><comment><USER3> Implementing GitHub login is no more valuable than offering Facebook login. It ties things to a single identity provider and limits the number of people who can use it (ie: no FB/GH account, no ability to use it).

Why not implement Mozilla Persona instead?

<comment><USER4> Because what the hell is Mozilla Persona? The Parse user base and the GitHub user base overlap a lot.

<comment><USER5> Arguably, Persona and Parse more than overlap: the supported user base of Persona is a proper superset of Parse's actual _and_ potential user bases. :)

Persona works with any email address, and it's completely decentralized (albeit with a temporary, centralized fallback for bootstrapping)</comment></comment></comment>


France passes law to ban all oil and gas production by 2040 - <AUTHOR> https://www.seattletimes.com/business/france-passes-law-to-ban-all-oil-and-gas-production-by-2040/ <comment><USER2> [https://www.discoverfrance.net/France/DF_resources.shtml](https://www.discoverfrance.net/France/DF_resources.shtml):

 _"Deposits of petroleum are almost nonexistent, and natural gas reserves discovered (1951) at Lacq in the Pyrenées are now nearly exhausted."_

<comment><USER3> And as the article states: "it is largely symbolic since oil and gas produced in France accounts for just 1 percent of domestic consumption"

I don't understand who/what this "ban" is for actually. If the current oil/gas production is that ridiculous, ban it in 5 years, won't change much anyway, but that would make a nice statement/publicity. Doing this in 20+ years, why?

Also, if they had taken the "matter" seriously, they could have banned all refineries as well. but that would be a risky move, Total is quite large in France's industry (actually n°2 by revenue - [https://fr.wikipedia.org/wiki/Classement_des_plus_grandes_en...](https://fr.wikipedia.org/wiki/Classement_des_plus_grandes_entreprises_françaises_en_2016)).

On a positive note however, this may be a small part of a bigger plan: Paris seems to have plans for a ban on petrol cars by 2030 ([http://www.telegraph.co.uk/news/2017/10/12/paris-ban- petrol-...](http://www.telegraph.co.uk/news/2017/10/12/paris-ban-petrol-cars- city-2030-pollution-crackdown/)) and France seems to have plans for a ban on petrol cars by 2040 ([http://www.telegraph.co.uk/news/2017/07/06/france-ban- petrol...](http://www.telegraph.co.uk/news/2017/07/06/france-ban-petrol- diesel-vehicles-2040/))

</comment></comment><comment><USER4> And I'll pass a law to ban poverty by 2525.</comment>


Can the world make the chemicals it needs without oil? - <AUTHOR> https://www.sciencemag.org/news/2019/09/can-world-make-chemicals-it-needs-without-oil <comment><USER2> Why would we care about oil being an industrial feedstock, though?

If you quit feeding cars and power plants with oil derivations, the _VAST_ majority of your CO2 problems go away. And, because the rate of consumption will drop through the floor, we would have enough oil to last centuries or more.

</comment><comment><USER3> Removing fossil fuels won't solve co2 problem. Agriculture, animal husbandry, building heating, industrial power all are major contributers.

It's lazy to think driving Tesla's will cure climate change. Our biggest problem is agriculture. We are cutting forest to grow crops and feed animals which emit methane .it's a triple whammy. Losing a carbon sink, increasing co2 production in the supply chain and also increasing co2 in the value chain.

We need to eat and farm better

<comment><USER4> Whens the last time you looked up real numbers? Transportation contributes vastly more than livestock to co2 release.

<comment><USER5> You have to look beyond CO2 emissions to assess climate change impact. The IPCC land use report from this past August does exactly this [1]. The associated reporting is also quite good [2].

The grandparent is right: cutting down forest to grow cattle feed is a triple whammy.

1\. [https://www.ipcc.ch/report/srccl/](https://www.ipcc.ch/report/srccl/)

2\. [https://www.theatlantic.com/science/archive/2019/08/how- thin...](https://www.theatlantic.com/science/archive/2019/08/how-think-about- dire-new-ipcc-climate-report/595705/)

</comment></comment></comment><comment><USER6> Didn't understand the point of the plant in Norway making synthetic fuels using water power for cars. When the cars burn the fuel, the CO2 in it will still be part of the atmosphere and increase the temperature. So what's the advantage over using fossil fuel? I can see it making sense to just move away from fossil fuel, as when you worry it running out or being too expensive or funds crazies. But it doesn't seem to be useful for helping the climate.

<comment><USER7> Fossil fuel reintroduces sequestered carbon into the atmosphere and biosphere. This results in a net addition of carbon to the biosphere.

Synthesized fuels from atmospheric or oceanic carbon take _currently resident_ carbon from the biosphere, convert it to fuel, and reintroduce it to the biosphere. _There is no net addition of carbon to the system._

Keep in mind that this _only_ works if you're sourcing carbon _from the biosphere_. As a contrast, earlier suggestions to synthesize hydrocarbon fuels from sources such as limestone, made in the 1960s, would _also_ increase total biospheric carbon, and would _not_ be carbon neutral.

The problem with fossil fuels is the _scale_ of carbon dioxide being added to the atmosphere, about 32 gigatons per year ([http://www.iea.org/newsroomandevents/news/2015/march/global-...](http://www.iea.org/newsroomandevents/news/2015/march/global- energy-related-emissions-of-carbon-dioxide-stalled-in-2014.html)). Reducing that, or turning the net _negative_ , is what we have to do. Jeffrey S. Dukes, "Burning Buried Sunshine" (2003) is an excellent reference to the rates of fossil fuel formation and utilisation ([https://dge.carnegiescience.edu/DGE/Dukes/Dukes_ClimChange1....](https://dge.carnegiescience.edu/DGE/Dukes/Dukes_ClimChange1.pdf)). We're burning oil at roughly 5 million times the rate at which it first accumulated.

Before humans relied on fossil fuels, virtually all energy we used came from plant energy, via either human or animal muscles, or in some instances, fire. Small additional amounts were contributed by wind and water power, a minuscule amount by geothermal energy. A phenomenal exploration of human history through the lens of energy is Vaclav Smil's _Energy and Civilization_ (2017), or Manfred Weissenbacher's _Sources of Power_ (2009) which divides all of history into five eras: hunter-gatherer, agriculture, coal, oil & gas, and the post- oil world.

As Gregory Clark notes in _A Farewell to Alms_ , there are effectively two periods to human history: Before and after 1800, typically given as the start of the Industrial Revolution.

Back to synfuels: the principle advantage of these is that _liquid hydrocarbon fuels are phenomenally useful_ They're long-term stable, extraordinarily energy dense, largely safe, can be utilised across and extreme range of scales, in engines ranging from a few watts to 100 MW output, and across all modes of transport: road, rail, canal, sea, air, and rockets. If sourced from non-fossil carbon, they could remain useful, though attempts to do so have not proved economical or scalable to date.

</comment></comment><comment><USER8> Yes. It requires a lot more (thermal) energy for synthesis, which can be readily provided by nuclear power.

</comment><comment><USER9> Companies like Lego are already using so-called "green plastic", polyethylene produced from sugarcane ethanol. It's still polyethylene, though (non biodegradable).

</comment><comment><USER10> Why do we need to not use oil for chemical production? They aren't necessarily producing CO2 being adapted to other forms.

<comment><USER10> To clarify, I'm assuming oil that is used as inputs for the chemical's synthesis, not any energy used for the synthesis.

EVs will devalue oil in the short run since it reduces demand. But then again, oil has been so heavily exploited that easy-to-get oil is long gone, so if EVs drop demand below a threshold, then oil production will fall off a cliff.

Crossing my fingers and hoping!</comment></comment>


Barliman – real-time program synthesis to make the programmer's life easier - <AUTHOR> https://github.com/webyrd/Barliman <comment><USER3> This is dangerous. Instead of acquiring understanding, a tool like this lets the programmer just write the code which passes tests. Without the deep understanding of algorithm you can't write sufficiently full tests which assess program's correctness. TDD wouldn't save here, because instead of being a tool of discipline it becomes a list of instructions for codegen.

Would anyone want to ride in a car or fly in a plane written by set of sporadic tests? I wouldn't risk it.

<comment><USER4> Of course nobody should write production software with this, that's why the project loudly says that this is a PROTOTYPE. It is experimental software.

These kinds of tools are the future IMO. It's a higher layer of abstraction. Most programmers have no idea how their programs are actually executed--we write in a high-level language and rely on voodoo to execute it, without a "deep understanding" of how it's really executed, and without writing instruction-level tests. And it works _great_. I don't see how this is theoretically different, it's just a higher level of abstraction. Of course, its utility greatly depends on the practicality of its implementation (which includes performance)...

> it becomes a list of instructions for codegen

That describes exactly the everyday programming languages that we all use.

<comment><USER3> You don't need understanding of all deeper levels, you just have to know the system til the first non-leaky abstraction.

Concrete concepts are a good foundation of correct code, no matter how high level they are.

</comment></comment></comment><comment><USER5> I've felt for awhile that it's a matter of time before we end up with a development environment that - given a collection of tests - <USER2> automatically generate a program which passes all the tests. Barliman looks like a really cool step in that direction, even with its stated limitations.

<comment><USER6> isn't that called prolog

<comment><USER7> Prolog can (sometimes) "reverse execute" a specification, not generalize from examples. It's like saying "a cat has a round face and pointy ears" versus "look at these cat pictures". (Versus "draw an oval and then draw two triangles at the top...")

<comment><USER8> But generalising from examples has been a research topic in the Prolog community since at least the early 80s. The field is called inductive logic programming ([https://en.wikipedia.org/wiki/Inductive_logic_programming](https://en.wikipedia.org/wiki/Inductive_logic_programming)).

</comment></comment></comment></comment><comment><USER9> This seems like a real-time / on-line version of MagicHaskeller: [http://nautilus.cs.miyazaki-u.ac.jp/~skata/MagicHaskeller.ht...](http://nautilus.cs.miyazaki-u.ac.jp/~skata/MagicHaskeller.html)

<comment><USER10> This thing is so smart.

Add a 'z' to the end of the first example and it figures out it needs to 'reverse . drop 1 . reverse' to take a character off the end.

Imagine if it could learn on every open source Haskell codebase on GitHub and then learn in real time while people type.

</comment></comment><comment><USER11> This looks pretty awesome. Does anyone have good book/lecture/paper/course that deals with program synthesis and the algorithms behind them.

<comment><USER12> Barliman is written in miniKanren[0], a logic/relational programming system built by Daniel Friedman[1], Will Byrd[2] & Oleg Kiselyov[3]. There are implementations of miniKanren in languages other than Scheme, one of the prominent being Clojure[4].

To oversimplify, in the miniKanren world programs are written using relational logic, wherein there are "variables" and then certain "relationships" between the variables. That is the program specification. Now we can run the specification and allow miniKanren to generate one or more variables that satisfy the relations. Thus a miniKanren program can have more than one answers. One interesting side-effect of this kind of an abstraction is that programs can also be run backwards to generate more programs that satisfy certain relations. That's pretty much what's happening with Barliman.

[0] [http://minikanren.org/](http://minikanren.org/) [1] [https://en.wikipedia.org/wiki/Daniel_P._Friedman](https://en.wikipedia.org/wiki/Daniel_P._Friedman) [2] [http://webyrd.net/](http://webyrd.net/) [3] [http://okmij.org/ftp/](http://okmij.org/ftp/) [4] [https://github.com/clojure/core.logic](https://github.com/clojure/core.logic)

<comment><USER13> Some of you might recognize Daniel Friedman as the author of The Little Schemer. If you liked that book, you might check out The Reasoned Schemer. Short, accessible, and a bit mindbending, it offers a compelling introduction to logic programming that culminates in the "invention" of a Prolog-like DSL from basic Scheme primitives. Terrific little book. [https://mitpress.mit.edu/books/reasoned- schemer](https://mitpress.mit.edu/books/reasoned-schemer)

</comment></comment></comment><comment><USER14> This combined with a robust type system should be nice. I thought it would be a solid direction which would've happened but didn't. One of my uni courses was ILP (long time ago indeed) and that seemed to have merit with faster computers, more advanced algorithms and heuristics. After that I saw Hoogle when I learned Haskell; seems combining these things can make something powerful. I was going to post MagicHaskeller here as well but gergoerdi did that already.

</comment><comment><USER15> This looks pretty cool! However, I think it would be annoying to have the tests automatically running as you're typing. What happens if you accidentally create an infinite loop or run something dangerous?

<comment><USER16> Stop at x time. What else is dangerous?

<comment><USER15> I was thinking of overwriting files or removing database items. I know it's pretty easy to minimize, it just could be a problem if it isn't.

<comment><USER16> Fair enough, indeed I would advise to use with caution around data that needs to be kept safe from deletion. I think of this as a nice idea for experimenting forms of coding like spikes, but wouldn't run something like this against a production database or my root file system.

</comment></comment></comment></comment><comment><USER17> Attach a program that can evaluate and define test parameters... I'm looking at a core of my replacement >.<</comment>


Quite applications you don't use to release your brain memory space - <AUTHOR> https://www.waterflowon.com/blog?category=1&article=40

<comment><USER2> Dear mods:

The OP's title and some of its text has a typo: The word "Quite" ought to be "Quit." I suggest it would be appropriate to fix the title here on HN whether the author fixes it on the blog post or not.

<comment><AUTHOR> Thank you I am not native English speaker. I may made some mistake that I don't know by myself.</comment></comment>


GDPR: Cookies and the Browsers That Store Them – Comments and Questions - <AUTHOR> Now that we have GDPR, at this point shouldn't browsers just disable all cookies by default and ask users every time a cookie is set if they want a cookie set or not with a standard warning/notice and give web developers the ability to set an additional description of who the cookie is from and what it is used for to go along with the standard notice?
With this browser change the law should change as well so us developers don't have to muck with educating users. I think it's too much forced education. Educate from the source.
I am also curious who receives the fine money? Say a US company is sued by EU, I believe the money should go back to the US Government since it's within their jurisdiction not Europe. If not this then it's kind of a tax funnel to suck money out of other countries into the EU. <comment><USER2> I tried to opt out of tracking in some GDPR form yesterday, and it wouldn't let me do it because my browser doesn't support third party cookies. So ironically, you need cookies to track who doesn't want to be tracked.

As to your specific question, do you realize what a PITA that would be to manually accept every single cookie in your browser? It's bad enough clicking through the GDPR forms on every single site I visit.

A much better solution would be to actually respect the DNT (do not track) header. If I have DNT enabled, why do I need to open a form and deselect 100 trackers on every website? I've already said I do not want to be tracked; that should be sufficient to automatically opt me out of all tracking.

<comment><AUTHOR> I agree it would be annoying, but not as annoying as what we have now. This is why I suggested one consistent ui across all websites is a better solution vs every site having their own random individual solution when they all have the same requirements. Do Not Track is not effective because you leave the trust in the website owner vs your own control via the browser. It seems the GDPR is suggesting that this is a necessary evil but it still puts the trust outside of the user's power.</comment></comment>


So, you want to hire me? My response to recruiter spam. - <AUTHOR> http://blog.jazzychad.net/recruit.html <comment><USER2> Perhaps "I am not currently looking for a job" will suffice? Or maybe ignore the mail?

I am working with a startup and the office is in a large shopping complex. As a result, almost every other day you have someone coming to pitch you stuff or give you a flyer.

So I was in the office one day and a person came in. One of the employees was quite dismissive. The others did not bother to look up. I picked the flyer from the person, had a quick chat and the person was on his way.

The ridiculously funny thing is that we were billed to hand out flyers THAT same week for an event we were organizing. So after the "interloper" left, I asked if they would be happy if they were treated the way they treated the salesperson when we go out for our own unsolicited pitch. Of course they said no.

Suffice to say, since then they have treated such people much better since then.

My short story aside, if you have been identified as someone worthy to be recruited, why do a lot of people on HN find it so offensive? What is wrong is saying thanks but no thanks? I am definitely sure there was a time in your life when you would were grateful for such opportunity. Now you may have passed that level, be humble about it

Of course, always remember it is a human not a machine that is going to read your reply [1]

[1] [http://sivers.org/real](http://sivers.org/real)

<comment><USER3> > why do a lot of people on HN find it so offensive?

They are probably not offended by job offers at all, but rather recruiter emails that are not truly offers but invitations to apply

</comment></comment><comment><USER4> I see strong parallels between this and the Linus Torvalds discussion on being polite as an engineer.

I get a fair amount of email (maybe one every week or two) from people with technical co-founder offers or engineering interview offers. I have no interest for various reasons, some of which line up with yours I'm sure. Here's my standard response:

"Hey John,

Thanks for reaching out. Unfortunately, I'm still a full-time student, and I won't have time to take on another part-time obligation next semester. Best of luck filling the position."

Sure, I might laugh with my friends about how positively _stupid_ that _businessman_ 's email was. However, I'll be nothing but cordial to the person's face. I try to be cordial to everyone. You never know when your paths might cross next in life.

Moreover, an email like yours perpetuates the stereotype that engineers are socially awkward and hard to work with. As someone doubling in engineering and finance, I hear this all of the time in my business classes. It's something that annoys me to no end.

</comment><comment><USER5> Why not just put a comment on your profile that says you're not looking?

This does cut down on the emails you get. You'll still get some, but I'm willing to bet you get an equal, if not greater amount of emails from various retailers you've purchased from.

From these, just hit delete, or not interested.

The only thing I find annoying about LinkedIn "spam" is that while apparently good engineers are hard to find, the laws of supply and demand seem to cap out around a certain compensation level. I always wonder if I were in sales or finance, would recruiters that really want to fill a role try and lure me to leave by mentioning the free candy bars? or tell me they'll pay me ___ % more than I'm making now?

Anyway, given the situation for most people in the country, certainly getting spammed by people with job offers isn't the worst problem in the world, nor is it that hard to cope with. ymmv.

</comment><comment><USER6> I read things like this and it makes me concerned that it's a sign of the party ending for developers. I'm sure OP was doing this tongue-in-cheek but the fact that it was written at all is a sign of hubris caused by an apparent software engineering work bubble.

I've been in IT for 20 years now and the last few I've been making unbelievable money, fully expecting it to end any minute now. Stuff like this makes me fear it is going to end soon.

<comment><USER5> Serious question: How does something like this you perceive as hubris indicate that the end is coming?

<comment><USER7> I felt the same way as the OP right before the dot com bust. Then all the startups went out of business and the only way to get a decent job was to know a recruiter for a big company.

</comment></comment></comment><comment><USER8> I usually simply explain to them the cost of living differential between where I live and SF/NYC, and then they balk at what that means in actual dollars. 175% raise? Don't mind if I do.

</comment><comment><USER9> Just don't forget what a privilege it is to be turning down work offers. I have a Master's Degree in my field from what is consistently ranked the best school for that field and haven't been able to find a job in that field for over a year, and the last job I was offered, that required a Master's and experience, was for $27k a year.

<comment><USER10> What field is that? Notice how I did it bring up a bunch of fields as examples.

<comment><USER9> Social Work, with an emphasis on research and macro-level policy work, but some teaching jobs would certainly apply as well. Still want to solve hard social problems, but have decided there is too much friction in the traditional human services fields and NGOs to make much headway that way, as well as a burnout trap. So at the moment I am just doing IT consulting for small non-profits, heading to a programming bootcamp this fall, maybe another one over the winter, hoping to eventually work on interesting social problems from a coding angle. Or work a bit on something not so interesting, enough to pay the bills, and become time-rich to work on interesting and fulfilling projects pro-bono.

<comment><USER11> I'm sure you knew that Social Work is low paid before you invested in such a degree. While it's a valuable field hypothetically, who actually hires a social work master degree person -- no company that actually expects a profit. As a result the market doesn't value such qualifications. Just sayin'. With software, engineers are hired to add value to a company which means they can make more money, which is kind of the point of a company in the first place. There's also a supply and demand issue. Low demand for Social Work and an oversupply. Social Work is almost as low-valued as an English literature degree. I'm not hating on Social Work, but your plight is certainly no surprise and elicits little sympathy as social work has never been a high demand profession but folks still spend tens of thousands of dollars in schooling and wonder why they aren't getting hired.

<comment><USER9> I don't believe the market is particularly good at determining value in anything other than the most short-sighted terms. I think there's a hell of a lot of teachers, social workers, and others bringing more value to the world than some software developer cranking out brochure web sites, making banner ads, cranking out another zynga game, etc or some management consultant that talks in nonsensical corporatespeak that is paying paid hundreds of dollars an hour to advise some company on its decision-making processes.

I'm not complaining, I'm the first person to admit about the inefficiencies and shortcomings of the modern non-profit industrial complex, I'm jut saying most of the world rolls their eyes when they hear people talk about how hard it is to be offered all these jobs. I chose to go into debt because I was studying interesting things (non-linear systems modeling as applies to social systems/problems) and I thought the academic credentials could provide an on- ramp to being able to work on big social problems on inter-disciplinary teams. This didn't happen, for a variety of reasons, not the least of which because social work itself doesn't value itself as a distinct and credible field the way, say, economics does.

All that being said, most of humanity still doesn't have the luxury of picking and choosing how they want to put food on the table, so it just smacks of privilege anytime I hear anyone whining of too many job offers, etc.

<comment><USER12> Agree with you that the market isn't able to pick out value, especially value that isn't easily exchangeable for money. Social work is of indispensable value from a particular perspective, and social workers are in short supply in many countries including my own (Singapore).

However the market does not exist by itself, it exists in a structure put in place by governments, with many other players such as non-profits, interest groups, etc. At this point in time, social workers, teachers, etc. have to be supported by funding from governments and donors.

Short of having a more enlightened economic system, what we can hope for right now is for governments to better reward professions that provide such value.

</comment></comment></comment></comment></comment></comment><comment><USER13> For those who didn't catch the Brown M&Ms reference [0]: the rock group _Van Halen_ had a provision in their standard contract that there had to be M&Ms backstage, but all the brown ones had to be removed. Sometimes it was interpreted as them just being "spoiled rock stars", but it had a purpose. Much of the contract specified technical details like how much weight the stage could hold, power capacity, and other things that if done wrong could completely wreck a show. As David Lee Roth said, _" if I saw a brown M&M in that bowl... well, line-check the entire production. Guaranteed you're going to arrive at a technical error. They didn't read the contract."_

In this case, it's not clear whether the writer is trying to evoke the "spoiled rocker" persona or the "make sure you read the contract" one.

[0] [http://www.snopes.com/music/artists/vanhalen.asp](http://www.snopes.com/music/artists/vanhalen.asp)

</comment><comment><USER14> What does a flippant response like this accomplish? Nothing but wasting one's time emailing a recruiter mill. May as well send thought-provoking replies to your email spam.

</comment><comment><USER15> Many comments here mentioned the bubble, and posts like this being a sign. I started recruiting software pros in 1998, and didnt have the benefit of LinkedIn or any web tech beyond doing searches on old search engines and résumé boards. Some candidates were nice about moot wanting jobs, and others were rude.

If the approach by the recruiter is not respectful, thought out, or at all relevant or personalized, by all means thrash away. But if the approach is a legitimate "hey, I've got a job that appears to fit your skill set, and if you're interested I'd like to discuss it with you and learn more about what interests you", then a response should be polite - or just don't respond at all.

I can tell you that many of the people that were nasty to me during the boom were begging for me to even look at their résumé during the bust. I think recruiters do have too much influence on the hiring market in tech, but keep in mind that there will be down times for most in the industry, and recruiters will remember who was respectful and who wasn't.

It's mostly junior recruiters making mistakes it seems, and they do learn by being shamed, so I do accept treating pure spam as it should be, but please (for everyone's sake) differentiate between legitimate polite contact and spam.

</comment><comment><USER16> Like mamma always said, "well you're certainly not going to get it if you don't ask for it".

<comment><USER17> While true, that doesn't mean that it's always a good idea to ask.

</comment></comment><comment><USER18> Or you could not be a douche and just ignore that email.

</comment><comment><USER19> If he were actually interested in a change in employer for great financial gain, something more like a $250-500k base with "uncapped bonus" might result in real inquiries. Particularly if his experience included a decent amount of machine learning and big data, as I've noticed that quite a few Chicago and NY area finance firms -- especially those who have bowed out of the HFT arms race -- are currently willing to pay well for folks with those skills.

</comment><comment><USER7> I quit LinkedIn and now receive almost no recruiter spam. Recruiters seem to only exist on LinkedIn now, so if you really want to avoid them just delete your account.

</comment><comment><USER20> $1 Million base, 10%/yr guaranteed perf bonus, whatever hours I want, AND 10% equity as first employee. Sold. I'll take that job too.

</comment><comment><USER21> While this is an interesting concept that I used to think about in the past, you should never bother doing it. There is no chance that a random recruiter will ever have those resources to hire you.

It's easier for both of you if you just say that you're not interested in a job or you just completely ignore the message/email etc.

</comment><comment><USER22> great answer man!

Some time ago I creates a linked in group called "Bad recruiters" where shame job spammers offering me "sizzling hot" £23k PHP roles. Please join up and help getting the quality of IT recruitment up to the standard it should be.

</comment><comment><USER23> This "response" is not funny, smart or anything. Why does it even got posted here?

</comment><comment><USER24> My response to recruiter spam: hit the "junk" button.

</comment><comment><USER25> Can't wait to use this as anti-LinkedIn-recruiter ammo.</comment>


Should a Copyright Infringer Pay $21 or $675,000 for Downloading 30 Songs? - <AUTHOR> http://www.law.com/jsp/article.jsp?id=1202444441911&src=EMC-Email&et=editorial&bu=Law.com&pt=Law.com%20Newswire%20Update&cn=LAWCOM_NewswireUpdate_20100224&kw=At%20Hearing%2C%20Boston%20Music%20Downloader%20Argues%20for%20New%20Trial%20or%20Reduced%20Verdict

<comment><USER2> Let's see, iTunes sells the songs for $1.29 (all new hits) so 30 songs would be $38.70. Now, you were bad and did something illegal so let's go for broke and say you need to pay 10x for being bad so you will not do it again. That gets us to a $387.00 fine. That would be a reasonable slap. $675,000 is some serious overstepping.

<comment><USER3> In the Capitol Records case, the jury ordered Tenenbaum to pay $675,000 to several record companies for illegally downloading _and distributing_ 30 of their songs.

## _and distributing_ ## There's a monstrous difference here that we should be working nonstop to educate people about.

If we can't get people to understand the difference between simply downloading, and becoming part of the distribution network, we are never going to have a meaningful debate. Both sides will seem completely irrational to each other.

<comment><USER4> I'm not sure this is the same case I have heard of before, but let's assume this person was torrenting some popular songs.

How much does it matter that he was distributing and not just downloading, if there were hundreds of others seeding at the same time? Other downloaders would have been inconvenienced just very slightly by him not being there. Did his contribution lead to an appreciable number of extra downloads, or did it just help the same number of pirates download faster?

With which I just mean to say that there are gradations in distribution...

<comment><USER3> That's actually so good I'm just going to repeat it:

 _With which I just mean to say that there are gradations in distribution_

That's exactly what this whole thing is missing. No one has stopped to calculate what the impact (in monetary damages, even hypothetically on the _download==lost sale_ metric) of a bittorrent client running for x days at home connection upload speed.

</comment></comment></comment></comment><comment><USER5> Let's put it like this: if I'm caught on a bus without a ticket ($ 5) would it be reasonable to be fined $50,000 ?

There is more depth to this comparison than meets the eye, as naively both items (song and a bus ride) have zero marginal cost, and the rights have been violated in a fairly similar manner.

(edit for clarification)

</comment><comment><USER6> For downloading, he should pay as much as a radio listener pays: nothing.

For distributing, he should pay the same fees that radio stations pay.

<comment><USER3> _For distributing, he should pay the same fees that radio stations pay._

In other words, they should pay him!, preferably through a shell corporation.

<comment><USER7> Actually radio stations pay licenses for rights to songs for satellite/internet radio, while music is sent to radio stations for free through promoters.

I work at a small college radio station (<http://kmnr.org>) we have been working with SoundExchange to get licensing for internet broadcast in addition to our radio broadcast.

<comment><USER8> You might want to double check that. Labels may send your station free CDs, but if you broadcast them, you should be paying ASCAP/BMI fees based on how many songs you play.

<comment><USER7> I thought about that a bit more and talked to our music director and I think you are right.

</comment></comment></comment></comment></comment><comment><USER9> I think they should make it $500 - $1,000 per song. It's enough to make people look at their huge song libraries and wonder if they should go legit, without it being so phenomenally huge it's just a meaningless number.

The people who fantasize about how he should only have to pay $1 or w/e are delusional. Why would anyone ever buy music again if the worst case scenario is they _might_ have to pay a buck a track one day. Punishments need to fit crimes _and_ serve as a deterrent to others as well.

<comment><USER10> It's absurd to claim that $5,000,000 is an appropriate punishment for having filled one's iPod with downloaded music.

Let's be reasonable; the fine should not have anything to do with the volume of music downloaded, as people who download music often do so to sample, and delete afterwards (or they download a stuff that they don't even want, because it's free).

Instead, the fine should be several times what the person would have likely been able to spend on music during the time that the download occurred, regardless of the number of songs involved (and of course, the songs should be deleted).

For a high-school student, that fine could be $500 ($50 if he/she comes from a poor family). For a programmer making $60,000/year, that fine could be around $5-10k. For a rich person, the fine could be $50/song.

People who are fined millions of dollars are usually people who have done atrocious things (like pushing drugs to schoolkids for years), not downloaded some songs for their iPod, 90% of which were downloaded to try out and wouldn't have been purchased anyway.

<comment><USER9> If you fill an entire iPod with pirated music then you deserve a sizable punishment. You're not owed and nor do you deserve gigabytes of music simply because you bought a device with the capacity to host that much. Your income and your ability to purchase whatever quantity of music legitimately also has no relationship with the storage capacity of your iPod.

The other excuses you present are irrelevant too, if you downloaded the music then you downloaded it, it doesn't matter what happened next. There are free and legitimate ways to preview pretty much _anything_ on the internet, you don't need to pirate an artist's entire catalog to see if you like that person.

The only point I can agree on is making it 'comfortably excessive' relative to income, $500 means little johnny's not getting that car he's saving for, and $10k to us is as nice as prison sex. But I think that would naturally sort itself out - nobody's been held responsible for the full catalog of music they've pirated, it's always been at most up to dozens of tracks.

<comment><USER10> Of course you're not owed anything; My point is that downloading two songs is not necessarily twice as "bad" or harmful to the artist as downloading one song, so trying to establish a fine on a "per-song" basis is absurd. For each additional song a person downloads, there is a diminishing harm done to the artists and labels involved, and it eventually reaches a point where absolutely no additional harm is done.

Therefore, any punishment should be related to a reasonable estimate on the harm of the artists/labels (and of course multiplied to the point of punishment, but to a reasonable extent given the crime).

It would be different in a case of actual theft; each physical CD stolen is a CD that cannot be sold to someone else, and it's an asset that the thief can resell.</comment></comment></comment></comment>


Web Framework Benchmarks Round 2 - <AUTHOR> http://www.techempower.com/blog/2013/04/05/frameworks-round-2/ <comment><USER2> This is our first follow up to last week's web framework benchmarks. Since last week, we have received dozens of comments, thoughts, questions, criticisms, and most importantly pull requests. This post shows data collected from a second run on EC2 and i7 hardware that started on Tuesday of this week. A third round with even more community contribution is already underway.

Thanks especially to those who have contributed! We hope this is useful information.

<comment><USER3> Did you guys turn on byte code caching for all the PHP frameworks? If not, then I recommend everyone ignore these benchmarks until that is completely done.

<comment><USER4> Yes, we are using APC for all the PHP tests in this round of benchmarking.

<comment><USER5> Is there somewhere we can see the settings for APC?

Thanks for the great work!

<comment><USER6> [https://github.com/TechEmpower/FrameworkBenchmarks/tree/mast...](https://github.com/TechEmpower/FrameworkBenchmarks/tree/master/config)

See php.ini, php-fpm.conf.

<comment><USER5> I could be missing something, but it looks like you are using the default settings. Have you tried tweaking it all? Specifically setting apc.stat=0, which will stop it from checking the mtime. You'll need to clear the cache with apc_clear_cache() when you make code changes though. You may also want to look at apc.php to check for fragmentation and adjust apc.shm_size if necessary

<comment><USER7> fork, benchmark, and create a pull request. :)

<comment><USER5> I'm hesitant to just change the config to apc.stat=0, since I can't ensure apc_clear_cache() will be called during deployment

I'll add in apc.php to help make sure other things are tuned properly though. different settings could be appropriate for different servers...

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> This is still a json API comparison, not a full framework comparison.

In the first test it sees how fast frameworks can serialize json and in the second test it sees how fast frameworks can access the database AND serialize json.

An inefficient json library and a framework is doomed across all tests. There are a lot of things frameworks do beyond serving json. These benchmarks are presented as representative of broad use when really they are only representative of the frameworks if used as a json api.

A raw HTML hello world, and removing the json encoding step in the db test would go a long way towards getting results that can mean what the authors seem to want them to mean.

There's nothing wrong with a json API benchmark, in fact its quite valuable in a lot of cases. But if that's what this is intended to be, the authors should say so.

<comment><USER9> Agreed; for example, in our (in-house) use case, switching a django app from using either stdlib's json or simplejson to using ujson[0] was a significant performance increase when serializing/deserializing large-ish (~100MB) JSON datasets.

[0]: <https://pypi.python.org/pypi/ujson>

</comment></comment><comment><USER10> As an amateur hacker and after 275 days of reading Hacker News I feel I can now navigate in the sea of client side Javascript frameworks. With the introduction of this data on web framework performance, I now have another set of choices that I am completely unqualified to comprehend.

My first impression is that this data shows about 3 levels of web frameworks. At the bottom (slowest) we have Django's and Rails and many other introductory app server frameworks. Lets say after I was able to build an initial product successfully, would I then consider re-building the product in a higher performance framework as Go, Node, etc?

The third level, netty and gemini and servlet etc, I am not familiar with. Googling "netty" I get --"Netty is an asynchronous event-driven network application framework"-- I thought that is what Node is (in js) and Go does with gophers.

What are the use cases for these faster frameworks and do they follow an evolution of performance options that an app might go through?

<comment><USER11> Netty, gemini and servlet are all java server solutions without a thick framework layer getting in-between. What you can tell from these benchmarks in my opinion is that java (or rather the JVM) has the best "raw" performance. Frameworks introduce a slow-down factor on top of the raw platform, and different frameworks have different slow-down factors.

You have to trade off developer productivity for performance when it comes to choosing frameworks. The slower the framework the more it does for you.

<comment><USER12> Gemini is a full-featured web framework. We've built it and maintain it internally. It offers caching (though not enabled for these tests), lightweight ORM, bunch of default handling methods and plenty of other features.

<comment><USER13> So you did all this to tell us indirectly that you have the best web framework in existence? ;)

</comment></comment></comment></comment><comment><USER14> Are C#/Mono web frameworks an option? Because I would love to see how <http://servicestack.net> fares:

[https://github.com/ServiceStack/ServiceStack/wiki/Real- world...](https://github.com/ServiceStack/ServiceStack/wiki/Real-world- performance)

<comment><USER15> I agree, I would like to see C# Mono included as well. People might also want to see C# .NET, but I don't think that is applicable here because we are talking about 64-bit Linux (the dominate internet platform) here.

<comment><USER14> Sorry I don't understand why it's not applicable? Mono is how you run C#/F#/.NET on Linux?

<comment><USER15> I wasn't saying Mono wasn't applicable, I WAS saying .NET was not applicable....

<comment><USER14> ok cool, was just a little vague, you should've mentioned 'Windows' as C# (even F# <http://www.servicestack.net/mythz_blog/?p=785>) is cross-platform and runs on OSX/Linux with Mono.

</comment></comment></comment></comment></comment><comment><USER16> Once again, the Node examples are wrong.

\- Unnecessary parsing.

\- Writing strings instead of buffers (they're copied, they aren't sent as- is).

\- Using async. It does a lot of really nasty things, most of which break V8 optimization best practices. This is a perf benchmark, not a comparison of how concise your code can be.

\- Having the main request handler in a gigantic function that will never be properly optimized by V8.

\- Not getting helper functions that are clearly monomorphic warm before accepting requests.

While the code itself is what I would consider fine, when benchmarking against strongly typed compiled languages, performance concerns become important, even if you have to write ugly code.

<comment><USER17> On the one hand, you're completely right.

On the other hand, shouldn't real code be tested? How accurate would a ugly- optimized-code be when you SHOULD write reusable code in your real life projects?

<comment><USER16> I wouldn't use async myself, so what's "real" code varies from person to person. This is why benchmarks like this are highly misleading.

But ideally, yes. We'd be better informed to see how real world code performs rather than some idyllic perf-oriented creature.

</comment></comment></comment><comment><USER15> It might be interesting to track average and peak server side memory usage during these tests. For example, if framework A is only 80% the "speed" of framework B, but uses 1/4 as much memory, for some users this might be a win for A.

<comment><USER4> This is definitely something we want to include in the tests, but it is difficult to manage a fair way of monitoring. Outside of the actual benchmarks, where we kept everything as fair as possible, we ran individual tests to make sure they worked prior to the benchmarking and would routinely have htop running at the same time to get an idea of what that sort of data looks like.

It IS very interesting and is definitely something we have discussed methods for measuring for the sake of these benchmarks. Other areas that we discussed were cpu utilization, disk utilization, and network saturation.

<comment><USER18> One idea that jumps to mind is putting the running frameworks in an LXC container (or similar) and monitoring the memory usage of that. Not sure how accurate that is, but it's one avenue. It also still might not be fair because some runtimes can let their heap get pretty big despite not actually needing the memory. You'd want a way to differentiate those from the ones with big heaps that would choke with some memory pressure.

<comment><USER15> Just make sure you measure resident memory not virtual memory :)

</comment></comment></comment></comment><comment><USER19> A note about Compojure: they're using Korma for database access. Korma is an abstraction layer that's more Clojure-friendly than using SQL directly, but lighter than an ORM. Using clojure.java.jdbc might produce higher performance.

<comment><USER6> Where possible on the tests, we tried to use something other than raw SQL because we wouldn't expect someone to use raw SQL everywhere when writing a real application. We chose Korma because it seemed decently popular for Clojure, but we're certainly open to a "compojure-raw" test that uses clojure/java.jdbc. Feel free to submit a pull request. :)

<comment><USER19> I'm not saying Korma isn't a good or realistic choice. I use it myself. There did seem to be some disagreement in freenode #clojure about whether that was the best way to go, or JDBC and prepared statements. Evidently, a lot of people actually do _like_ SQL.

It's just important for people to be aware that "Compojure" actually represents "one possible production-ready stack that uses Compojure as the routing component", as do several other items on the list. I don't mean that as a criticism - just clarification.

</comment></comment></comment><comment><USER20> It's a useful data point to know the speed of frameworks, but what matters most to me is speed of development and whether or not I enjoy the process.

Wish there was a way to benchmark those points.

<comment><USER21> >what matters most to me is speed of development and whether or not I enjoy the process.

Matters most? There are 100x differences here. Take two companies writing the same application, one in Spring the other in Rails. Both have easy access to knowledgable people, both are industry standard. However the Spring application would be several orders of magnitude more scalable[1]. I'd consider that to be a more important consideration over enjoying the language.

[1] All benchmarks are suspect until proven otherwise. You can write slow software in Java/C/C++, you can write fast software in Python/Ruby etc etc etc

<comment><USER22> From my experience, the Spring one would take 10x as long to make, which means more developer cost and more feedback reaction time. Certainly not a deal breaker, but a cost/tradeoff one must consider.

Edit: clarity.

<comment><USER23> As someone who recently came back to Java from a 5 year stint with Rails, I can safely say this is not true by any stretch of the imagination. If you stick to those tools in the Java ecosystem which meet your requirements, you can be incredibly productive.

The problem is that the Java world is full of over-engineered solutions which are really targeted at extremely large enterprise applications surrounded by a community of folks who like to menturbate about them. As a startup, you _don't need to focus on those solutions_. You'll not need 99% of them.

However, you can choose bit and pieces. I'm using Vaadin, JPA and Guice and finding it incredibly productive and am able to deliver functionality in far less time than it took me in Rails. I'm not using 90% of the Java EE stack, but it's available to me if/when I need it.

Rails was a great thing for the software development world. It drove convention over configuration and caused a lot of the competing technologies to pause and question why things were the way they were. But IMHO, managing the whole Rails stack (rails + coffeescript + css in our case) across a group of people became a chore. YMMV, but the statically-typed nature of Java along with the very capable technology stacks you can assemble have eased our daily jobs tremendously.

<comment><USER24> How are you finding Vaadin work out for you? What are you using it for? What version? The 6 series or the new 7 series?

<comment><USER23> So far, so good. It's very different from your typical template-driven approach. We have a decent amount of Swing experience, and developing with Vaadin feels similar (but much easier) than Swing.

If you are developing business-facing applications and not just consumer web sites, as we are, I think Vaadin makes a lot of sense. It might even make sense for consumer sites, but that's not our current target.

<comment><USER23> I should also say: putting together a new screen (form or otherwise) in Vaadin is _extremely_ fast. It's the fastest I've ever been able to develop web-based UIs, simply because all I'm forced to think about is Java.

<comment><USER24> I see. I found it to be a little difficult in terms of dealing with data, especially messing around with the Table object. Best of luck to your project.

<comment><USER23> The JPAContainer and SQLContainer it provides makes this reasonably easy.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER25> It seems like you're still using Mongo DB as the datastore for some languages and Mysql as the datastore for other languages. This seems like it would bias the results.

<comment><AUTHOR> The only framework that uses MongoDB exclusively is the vert.x test, the nodejs tests have tests for both MySQL and MongoDB

</comment></comment><comment><USER26> I wish Lua was tested in the benchmarks.

In particular, Lua-CJSON [1]

[1] [http://www.kyne.com.au/~mark/software/lua-json- performance.h...](http://www.kyne.com.au/~mark/software/lua-json- performance.html)

(I know, everyone wishes their favorite language was represented and not all can be tested. I'm just posting this in case the OP does a "Round 3")

EDIT: fix typo

<comment><AUTHOR> There will most certainly be a Round 3, and 4 and on and on as long as we continue to have feedback from the community. I can guarantee that we'll have a Lua test in there, but if we receive a pull request, we'll include it.

</comment></comment><comment><USER27> This is an awesome project, and thank you for the follow-up.

In particular, this is awesome because it's introduced me to some new frameworks that I hadn't even heard of (ie vert.x) that seem extremely interesting.

Keep it up and many thanks for this contribution!

<comment><AUTHOR> Thanks for the kind words. Glad to hear that you've been introduced to some new frameworks, we feel the same way, and we're excited to see what else the community has up it's sleeve.

<comment><USER28> Pls could u include some C/C++ web frameworks... comparison with Java, could be interesting..

<comment><USER6> We're interested in that, too. In progress is the onion http library pull request from davidmoreno:

<https://github.com/TechEmpower/FrameworkBenchmarks/pull/43>

We hope to get more as well.

<comment><USER29> It would be interesting to see G-WAN too because it seems controversial. <http://gwan.ch/>

</comment></comment></comment></comment></comment><comment><USER15> It is worth pointing out Go 1.0.3 not Go 1.1 beta is being used. I tested the code locally and on my machine 1.1 beta was about 20% "faster" (req/sec).

<comment><USER12> Really? We're definitely going to try that out!

<comment><USER15> In addition to the improvements from the improved scheduler, use of accept4 on Linux, better GC and code generation, Brad Fitzpatrick has been giving a lot of love to the "net/http" package. Here is a small example: [https://plus.google.com/u/0/115863474911002159675/posts/L3o9...](https://plus.google.com/u/0/115863474911002159675/posts/L3o9hEs8SAe)

</comment></comment></comment><comment><USER30> This is definitely motivation to learn another framework besides Rails and Django.

Compojure's syntax and design seem really attractive... is anyone using that in production? Would it be a reasonable choice for a "serious" web application?

<comment><USER19> I've used it for client work that was in production and for a side-project that's in production, but private with few users. It has been reliable for me.

Note that Compojure is more of a routing library than a framework. It's similar to Flask or Sinatra. Clojure's philosophy includes aggressive separation of concerns such that full-stack frameworks aren't really "the Clojure way".

</comment></comment><comment><USER31> Yesod disappoints! Unfortunate for how much it is hyped. This is definitely good to know, even if it appears that the Warp server was not used.

<comment><USER32> That's the first thing I noticed. What was used instead of Warp?

I also see that Snap got pulled in a couple days ago, so it will probably get tested in the next round. Should be interesting to see how it fares against Yesod.

<comment><USER33> The way the benchmark is constructed, it's really more about JSON and DB performance. Snap makes no decisions for you about those things, so the numbers really won't reflect the performance of Snap all that much. I don't have great expectations for the "Snap" code that is in there now because it is not using very fast JSON and DB libraries.

</comment></comment></comment><comment><USER34> Very interesting - again.

What I - again - find most interesting, is the large discrepancy in the 20-query test. Common wisdom seems to be that language performance is not important b/c every language hangs in the same IO/DB.

<comment><USER35> probably a combo of mysql drivers and connection pooling.

<comment><USER34> I wonder why Play is so bad then.

</comment></comment></comment><comment><USER36> Does anyone know what on earth is Play! doing that makes it is so slow?

I'd like to see Lift in there if you guys do another round.

<comment><USER37> The Play JSON controller is using Futures to do JSON serialization.

[https://github.com/TechEmpower/FrameworkBenchmarks/blob/mast...](https://github.com/TechEmpower/FrameworkBenchmarks/blob/master/play- java/app/controllers/Application.java)

Compare this to the Java Servlet, which just serializes directly in the Servlet callback.

[https://github.com/TechEmpower/FrameworkBenchmarks/blob/mast...](https://github.com/TechEmpower/FrameworkBenchmarks/blob/master/servlet/src/main/java/hello/JsonServlet.java)

The former seems like overkill.

<comment><USER38> This is not the version which was used in the tests. The tests used a earlier version.

</comment></comment></comment><comment><USER39> Gemini conveniently leads the pack all the time. So either OP and his/her colleagues have revolutionized web programming or the benchmark is nothing but a PR piece.

<comment><USER6> Just ignore Gemini. In fact, you can click the "hide" link on the charts to remove it.

From our first benchmarks post: [http://www.techempower.com/blog/2013/03/28/framework- benchma...](http://www.techempower.com/blog/2013/03/28/framework-benchmarks/) "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></comment><comment><USER40> Is anyone else alarmed to see raw PHP spanking Flask, Sinatra, and other Python/Ruby frameworks?

If not, can anyone explain in layman's terms why that should be the case?

<comment><USER41> Why shouldn't that be the case? PHP has been designed from the get go to be super fast and 5.4 introduced a bunch of optimizations that have sped it up even more so. Ruby was designed for programmer happiness, PHP was designed for performance and getting sh*t done.

<comment><USER42> PHP technically wasn't designed

</comment></comment></comment><comment><USER43> This is superb.

1\. More sorting options please :) I really want to sort by standard deviation.

2\. Also in case of rails and other single threaded frameworks are you spinning up multiple processes?

3\. Why is Go not being tested in the Database access tests?

4\. Can you test rails with unicorn too?

<comment><USER2> 1\. Blame me. I put together the charts and tables. I'll try to get some sorting added for the next round! :)

2\. Pat (pfalls) should know the answer to that more definitively, but we are definitely trying to use the CPU cores as fully as possible. I think you'll see some comments by Pat elsewhere in this thread suggesting some things coming in round 3.

3\. Good question! Mostly because we haven't had the time to add it. I would really like to see it added, though. If you know Go and can write the code, might I entice you to submit a pull request?

4\. I believe that is the plan, yes.

</comment></comment><comment><USER44> I apologize if this question has been asked and answered, but why is netty missing from the database tests? No ORM?

<comment><AUTHOR> The short answer is that at some point, we kept adding more and more tests on our own, which kept the blog from going out, and we finally decided to have a cutoff date and let the community continue adding tests that they were interested in. I think adding a database test to Netty (as well as Go for that matter) would be a great addition.

<comment><USER44> Thanks! And thank you very much for this work -- it's tremendously useful.

</comment></comment></comment><comment><USER38> Thanks for the tests. Especially the latency is interesting.

I cant't wait for the next round, when the updates of the last two days are included (elli, grizzly, play-java, play-scala, snap etc).

<comment><AUTHOR> Since we moved to a different benchmarking tool for round 2, we had to re-run all the tests, which is a time consuming process, especially on the EC2 hardware. Now that we've gotten that out of the way, we have an easier time running and processing results for individual tests. So stay tuned!

</comment></comment><comment><USER45> I wonder where the bottleneck for the ruby benchmarks is. Is it in passenger, the framework, or somwhere else? I am sure I have gotten higher requests per second on my workstation when I tuned Ramaze (which should not be faster than using raw rack). My guess is that it is either due to a different method of measuring or the fact that I was using thin rather than passenger.

</comment><comment><USER46> As a Django guy with hurt feeling right now, I just wanted to say that this is a great project. I look forward to the next versions.

</comment><comment><USER47> I would love to see ASP .NET and ASP .NET MVC included in the benchmark.

</comment><comment><USER48> I think I said something similar on the first round, but for the Python tests, I'd be curious to see alternate runtimes and/or concurrency strategies: pypy, gevent, and probably the confluence of the two (though it requires quite a bit more hacking, since gevent doesn't officially support pypy).

<comment><AUTHOR> We're very curious about PyPy as well, and have it on our list <https://github.com/TechEmpower/FrameworkBenchmarks/issues/15>

</comment></comment><comment><USER49> I think that the play-java one would likely benefit greatly from using raw jdbc rather than the ebean ORM. In fact my best guess is this is why the scala/java versions are so far apart. In past projects, scrapping ebean always led to large performance improvements in throughput, etc.

<comment><USER38> <https://news.ycombinator.com/item?id=5499839>

ps: i agree that raw jdbc would enhance the performance.

</comment></comment><comment><USER50> Cool stuff. Only looked over it quickly but it seems JAVA stuff is dominating.

Kind of curious why jruby doesn't provide more of a boost (especially given compojure doing relatively well, too) and would like to see Django+Jython in version 3 (and +1 to the .NET/Mono stuff)

</comment><comment><USER51> Interesting that the Play code optimizations had virtually no effect. Almost identical absolute scores between tests. Clearly something heavy's going on within the Play request handling framework to slow things down, not the code we see.

I was also surprised at the difference between the Java and Scala play test, since I thought they were supposed to be similar. But it looks like the approaches are quite different. The Java DB test uses the ebean ORM while Scala does not. The JSON code also looks a bit different, with the Java version surfacing more Jackson internals. I don't know if these are necessarily "wrong", but perhaps it's not as apples-to-apples a comparison as it could be.

<comment><USER2> Agreed, and I would certainly like to see the Play tests (both Scala and Java) improve versus what we have measured so far. I would not rule out a configuration glitch in our deployment either. But on that front, I'm really hoping the Play experts can lend a hand. I think we've received a couple tips about the database connection pool size.

If the contributions we've seen so far are any indicator, we're going to need to get more clever with how to show and hide rows in our results tables! :) But I'd like to see a few more rows added to cover the various permutations of the ORM and JSON options, as you point out.

<comment><USER51> Thank you Brian for this so much. Really just a fantastic effort and a great contribution to the web dev community.

</comment></comment></comment><comment><USER52> As one would expect, as more data access is added, the scale of differences between web frameworks goes down. It would be interesting if you added 5 and 10 db query test runs as that starts to get closer to what a functional website would be doing.

<comment><USER2> Hi Cheriot,

We do in fact have 5 and 10-query runs available in the data. Switch the views to "Data table" or "All samples (line chart)" and you should see the data for 1, 5, 10, 15, and 20 queries per request.

</comment></comment><comment><USER53> Go 1.1 beta is up, _really_ need to get some results with tip instead of 1.0.3.

<comment><AUTHOR> Go 1.1 is very high on our list, we'd love to get that into the tests as soon as we can. Of course, anyone in the Go community is welcome to issue a pull request that updated the version to 1.1.

Edit: Just saw this pull request come in, so expect some Go 1.1 love in the next round. <https://github.com/TechEmpower/FrameworkBenchmarks/pull/64>

<comment><USER54> Don't think you'd need to change any code, just pull mercurial tip and recompile go and the app.

<comment><USER12> Is 1.1 production ready? I'd feel weird about incorporating something still in a "beta" phase though.

<comment><USER53> People have been working off of tip for months.

</comment></comment></comment></comment></comment><comment><USER55> Where's the source for the implementations? Of interest to me is the NodeJS instances.. was this single-process, or multi-process via cluster (which is recommended for higher performance). The only source I saw was for the testing framework.

\--- edit: found it. <https://github.com/TechEmpower/FrameworkBenchmarks>

Seems to be using cluster. I'm not surprised that Go and servlets were faster... just surprised to see NodeJS in the middle of the pack position. Though performance isn't the only reason I really like NodeJS

</comment><comment><USER56> No love for Mojolicious? It would be great to see a little Perl here!

<comment><USER15> Submit your pull request to add it?

</comment></comment><comment><USER57> I find the lack of Erlang frameworks disappointing.

<comment><USER58> Instead, find it motivational. :) They are accepting pull requests.

<comment><USER6> In fact we've already got a pull request that includes Cowboy and Elli: <https://github.com/TechEmpower/FrameworkBenchmarks/pull/50>

We'll be including this in the next round.

<comment><USER59> If I can find the time, I'll try to put together one for Nitrogen (<http://nitrogenproject.com>) as well.

</comment></comment></comment></comment><comment><USER60> One of the variations that is being tested here, that I'm not sure if it is legitimate is that for PHP specifically, Apache is likely spinning out many PHP threads, I'm not sure if the same behavior is happening on the ruby side. Thus, if you are comparing performance of 10 PHP threads to 1 ruby or python thread, your benchmark is not going to be terribly accurate.

<comment><USER6> PHP was tested behind nginx this time due to community feedback we received, not Apache.

<comment><USER60> Awesome, I did realize that. I stand corrected. Love the work you're doing!

</comment></comment></comment><comment><USER61> This is great stuff. I'd love to see some more frameworks written in compiled native languages like Haskell and C!

</comment><comment><USER62> What about Puma (<http://puma.io>), Goliath (<http://goliath.io>) or Unicorn (<http://unicorn.bogomips.org/>) instead of Passenger in the Ruby stack?

<comment><AUTHOR> We're looking into moving to unicorn as the community has suggested. If anyone is interested in setting up Puma or Goliath, we'd be interested in testing those out as well.

<comment><USER63> For something like the query tests where you're IO-bound, Puma is going to annihilate the competition. For CPU-bound tests like JSON generation, unicorn with multiple workers is going to perform better.

It's worth noting that Rails' default JSON solution is the compatible- everywhere pure-Ruby JSON generator. Using a drop-in replacement like the oj gem will drastically improve throughput there.

I didn't get to the pull request for this round, but tweaking the GC parameters for the Ruby install should dramatically improve the general performance of the non-JRuby Ruby tests, as well. I'll see if I can get a PR in. :)

<comment><USER64> Well yes please do this, not sure if it is allowed though since Oj gem is written in C ( I think )

<comment><USER63> So is the mysql2 driver (at least the slow parts), and Passenger is C++. C extensions are a common part of your standard Ruby deployment stack.

</comment></comment></comment></comment></comment><comment><USER65> I code in Ruby, Python and Groovy/Grails. I'm amazed that Grails performs so much better than the others.

<comment><USER66> I guess that's one of the big advantages JVM languages have. Using stuff like Spring or Hibernate (like Grails does), you benefit from thousands of person- hours spent on tuning those libraries and you still get native Java performance.

Obviously there's a price you have to pay for all the things Grails built on top of Spring/Hibernate (in the benchmark it looks like Grails' performance = Spring / 2), but in general, it's still faster than just writing everything in Groovy (Ruby, Python, ...).

<comment><USER67> It would be interesting to see the results for Grails 2.2 (which uses Groovy 2 and Invoke Dynamic)

One of the nice things about Grails is that you can easily drop down to the Spring and/or JVM level when needed for performance.

<comment><USER65> Yup. I manage a Grails app where I wanted to speed up performance on a popular part of the app. So I replace the Grails controller with a servlet. I saw a bump in performance.

</comment></comment></comment></comment><comment><USER68> Is it against the rules to use different workers for Django or Flask? In other words, there's a big difference when I run things with Gunicorn+Gevent+psychopg (PostGres async driver) than when I run it just with Gunicorn alone.

<comment><AUTHOR> Each test can be modified in isolation, if both tests see an improvement in that setup, we would like to include the changes for both though.

</comment></comment><comment><USER69> I wish you would have tested minimalist web frameworks in Python: CherryPy and Bottle. Flask is not really a micro-framework in the same way that CherryPy and Bottle are micro-frameworks because of its numerous dependencies.

</comment><comment><USER70> Sequelize (used for the node-mysql tests) is the slowest ORM out for Node, others are much faster (i.e. the node-mysql module).

And I would love to see node-mongodb tests with the native Mongo driver and not with Mongoose (which is slower).

<comment><USER2> I know this will sound like a refrain, but would you be interested in preparing a test for Node that uses a better ORM? Or if you can demonstrate that another ORM would be clearly superior, perhaps it would make more sense to simply modify the existing Node test code, replacing Sequelize?

</comment></comment><comment><USER71> I recently started transitioning from PHP to Rails. Should I be reconsidering?

<comment><USER15> Maybe, maybe not, that depends on your priorities- If your concern is (or a major concern) is performance, then yes, you should reconsider (maybe look at Go?). If that is not a major concern, maybe not. (I personally am not a Ruby fan due to performance and security issues, but it works well for many people)

</comment></comment><comment><USER72> I like to see that Tapestry is rising high in this latest round. I have a lot of production sites running Tapestry and I'm always impressed with how fast it runs.

</comment><comment><USER73> I would love to see how asp.net mvc compares to all this...

</comment><comment><USER74> Wow. I really need to use connection pooling with Django.

</comment><comment><USER75> Again no mono with ServiceStack! It boggles my mind...

</comment><comment><USER76> It should be mentioned that Go 1.1 is about to be released, which includes really big speed increases (sometimes over 30%)

</comment><comment><USER77> Any thoughts of putting some Erlang in there?

<comment><USER4> We got a pull request for an Erlang framework (my brain is not letting me pull up the name) yesterday that we accepted, but sadly it was too late for this round of benchmarks. We will include it in the next round.

</comment></comment><comment><USER78> Hm... we'll need to get spray.io on this list

<comment><USER2> Yes, please! Spray.io folks, can we entice a pull request? :)

</comment></comment><comment><USER79> Any plans for ASP.NET?

</comment><comment><USER80> Servlets are super fast, this shows that.

</comment><comment><USER70> Why are there no DB tests with Go?

<comment><USER2> Disappointing answer incoming: we haven't found the time. If you know Go sufficiently to write those tests (they should be fairly easy to write for someone who works with Go regularly), we'd be very happy to accept a pull request.

Also, just to reiterate something I've said elsewhere. We've done some spot testing with Go 1.1 and its performance is super. We really look forward to showing Round 3 numbers next week!

</comment></comment><comment> mike-- migth be interesting to add Erlang.

<comment><USER4> We have at least one Erlang test that came in yesterday and will be included in the next round of benchmarks.

<comment> mike-- thanks.

<comment><USER4> Don't thank us, we didn't write the code for it - one of you (the community) wrote it and submitted a pull request. We just ensured that the test would work in our benchmarks, then ran it! We are happy to do it, and super appreciative of the support from you guys!

</comment></comment></comment></comment><comment><USER81> Is gemini really that awesome? Why arent more people talking about it?

<comment><USER82> Gemini is closed source. The company running these comparisons is the only team that is qualified to test/develop with it.

<comment><USER4> While it is true that our source code is closed at the moment, you are still free to check out the benchmark code from github and run it yourself to verify our results.

It wouldn't really be a fair test if we put all these frameworks up for testing, suggested Gemini was better than sliced bread with auto-applying jam, and didn't back it up in a testable way ;-)</comment></comment></comment>


First Finished App to Use Twitter Bootstrap - Simply Good News - <AUTHOR> http://news.everclassify.com/items/curated/top

<comment><USER2> Impressed with the turn-around for someone to use the Bootstrap</comment>


Sony's Changes to GNUstep GUI Library: Adding Touch - <AUTHOR> http://blog.deliciousrobots.com/2010/11/27/sonys-changes-to-gnustep-gui-library-adding-touch/ <comment><USER2> Pretty obvious that whoever was working on that was mostly trying to reverse engineer UIKit vs. update GNUStep for touch. There are even commented out lines that are what would be output by class-dump.

I wonder if the straight reverse engineering/possible decompiling is why it was pulled so fast. Also, it's subtle, but there is a reason Apple didnt simply graft touch onto AppKit like this project is/was attempting.

<comment><AUTHOR> I didn't see that at all. The gesture recognition stuff all looks written from scratch and the integration code doesn't match anything from UIKit. There are thousands of lines of code added by Sony with only a few commented out sections, mostly well-commented code also. The only thing I could see that remotely looks like what you are talking about is this

        // Adding and removing targets and actions
        //- (void)addTarget:(id)targetaction:(SEL)action;
        //- (void)removeTarget:(id)targetaction:(SEL)action;

        // Adding and removing targets and actions
        /***
        - (void)addTarget:(id)targetaction:(SEL)action
        {
        }

        - (void)removeTarget:(id)targetaction:(SEL)action
        {
        }
        ***/

This is an unused interface in SNGestureRecognizer. The name of one of the methods, addTarget, is the same as something from UIKit's UIControl. It's hardly a smoking gun, as it is unused and doesn't even match the method signature of the one from UIKit:

        - (void)addTarget:(id)target action:(SEL)action forEvents:(int)eventMask;

It's certainly not the result of a reverse engineering dump. If anything, Sony engineers thought for a second that they would mimic UIKit's interfaces and then quickly scrapped the idea. The other commented regions look like you might expect from a normal codebase:

        /*** Cannot assume touches will come simultaneously
        // Not a valid pan if # of touches on view doesn't match
        if ([touches count] != numberOfTouchesRequired ||
            //[_view touchCount] != numberOfTouchesRequired)
            [_hitTestedView touchCount] != numberOfTouchesRequired)
        {
           if (_state == SNGestureRecognizerStatePossible)
              [self changeState: SNGestureRecognizerStateFailed];
           else
              [self changeState: SNGestureRecognizerStateCancelled];

           return;
        }
        ***/

<comment><USER2> SNTouch.m is one example with stubbed out class-dump methods.

The naming in every place that it can is lifted directly from UIKit, and then their changes use different naming conventions. For example the new instance variables in NSView.h.

<comment><AUTHOR> Which methods in this SNTouch.m ( [https://github.com/deliciousrobots/gnustep- gui-sony/blob/mas...](https://github.com/deliciousrobots/gnustep-gui- sony/blob/master/Source/SNTouch.m) ) are stubbed out class-dump methods and what UIKit class do they come from?

Where were the new instance variables in NSView.h copied from? I've been comparing them to class-dumps ( [http://code.google.com/p/iphone- dev/source/browse/#svn/trunk...](http://code.google.com/p/iphone- dev/source/browse/#svn/trunk/include/include/UIKit) ) of Apple's code and I don't see anything like what you are describing. Care to show some examples?

<comment><USER3> //- (struct CGPoint)locationInView:(id)fp8;

That line (and the one later for previousLocationInView:) is straightforward "class-dump output". Did you bother to look at the file? :(

<comment><AUTHOR> Yes, that's a comment, not a stub, but I get it now. :)</comment></comment></comment></comment></comment></comment>


Is Believing In God Evolutionarily Advantageous? - <AUTHOR> http://www.npr.org/templates/story/story.php?storyId=129528196 <comment><USER2> It certainly was at at least one stage in history. Before nation states, a common religion could unify a large army that would otherwise be divided by tribal/ethnic loyalties. It did for the Byzantine army after Constantine's conversion, and worked spectacularly well a few hundred years later for the armies of the Caliphs.

</comment><comment><USER3> One contradiction I have yet to resolve from the neo-Darwinians: The universality of language is taken as a precondition for our humanity and a legitimate form of scientific study. Yet the universality of religion is taken as an exaptation. The problem for me is that both arguments rely on the same limited evidence. In fact, the evolution of religion may have better concrete evidence if we consider the appearance of human burials. That's at least one place where I'm thankful for religious influences. Saying goodbye is deeply symbolic and I can't imagine what humanity would look like without some form of this basic rite.

Don't get me wrong. Language is extremely important for our cognitive abilities. But while religion may seem more superficial, especially in modern traditions, I don't know how to see humanity without it - past or future.

</comment><comment><USER4> > _"Unfortunately it's not possible now to rewind the movie, so to speak, and > see what actually happened. So these speculations will remain just that: > speculations."_

I wish every ev-psych article made this point.</comment>