How do you manage "Who broke the build" in large development teams? - <AUTHOR> Hi, Working on a feature to improve dev teams productivity. The goal is to identify which commit broke each test. will be happy to hear your process/thoughts.
Micro-services => we'd love to get there, but the code base is still not ready for that
Feature-branches => facing issues when the branches integrate to the master branch.<p>What we have done so far is described in this video : https://youtu.be/c4GjYByW3-M <comment><USER2> Without watching the video ... I can tell you in the olden days when RCS still stalked the Earth and our dev teams were in London, New York and Tokyo, and bandwidth was thin ...

We very simply tried to divide the work and the functionality along geographic lines so that you were likely within shouting distance of anyone that could break the immediate stuff you were working on.

Later we added some central coordination of the stack of things as they went together since there often were ugly issues about getting new features integrated all in one go through the whole stack for example.

In any case, the lesson here was that while there are no complete answers, for us refactoring functionality coarsely along team lines worked. It may seem backwards, but we got a lot done.

(This in a world where branching was very painful, so at most we had it for production bug-fixes as I recall.)

<comment><USER3> dividing the work between teams worked at first but as product grown it started to have dependencies between teams and it got messy. Eventually you need to implement functionality across team areas. one team is assigned to implement it and when it breaks in other areas - that team needs to ask the other teams to fix it... in short, dividing the product to different teams is not an optimal solution.

</comment></comment><comment><USER4> If you want to get quick feedback, posting a video is not the way to do it. I look at about 200 articles a day and watching one video could blow my whole budget for looking at articles.

<comment><USER2> Indeed.

And video is a very passive medium, so I resist it often.</comment></comment>


How Erlang evaluates funs (i.e. lambdas) - <AUTHOR> http://gist.github.com/79022

<comment><USER2> This is code from the erlang interpreter, erl_eval. It takes the abstract syntax of the code for a fun and returns a "real" fun which when called will interpret the code. This means that the fun which is returned can be called by compiled code, any code for that matter, as if it were compiled.

It has absolutely nothing to do with the code the compiler generates for a fun.

</comment><comment><USER3> so how does eval_fun evaluate functions, then?

</comment><comment><USER4> I don't think this has anything to do with Erlang's internals, which is what the headline suggests. Most likely this is a snippet of code from Reia dealing with currying or partial application support.</comment>


Microsoft keeps it old-school with a pricey text adventure game - <AUTHOR> http://arstechnica.com/microsoft/news/2012/01/microsoft-pimps-it-old-school-with-a-pricey-text-adventure-game.ars

<comment><USER2> It's a pleasure to see such straight-faced parody. Bravo to Ars, although I was kind of sad to see them include the disclaimer at the end for those who don't get the joke.

As someone who prefers to develop on Mac and Linux, I'm still a bit jealous of F# and the IDE integration it enjoys. And yes, I know about MonoDevelop.

<comment><USER3> Re: the last paragraph:

Sadly I lost that battle. I didn't want to include it, but sometimes we writers do not get to make those decisions.

<comment><USER4> After reading the piece, I think a good case could be made that Visual Studio 2010 is, in fact, a game. I'm already imagining two lawyers presenting their cases to a jury.

(If you think such things never happen, consider the case of Nix v. Hedden, which concerned the question, "Is the tomato a fruit or a vegetable?" That case went all the way to the US Supreme Court! Botanists argued that they're fruit because they're the part of the plant that contains the seeds. Reference: <http://en.wikipedia.org/wiki/Nix_v._Hedden> )

<comment><USER5> Or the Radiolab short recently about how Marvel Comics went to the Supreme Court to prove that X-Men are not human.

[http://www.radiolab.org/blogs/radiolab- blog/2011/dec/22/muta...](http://www.radiolab.org/blogs/radiolab- blog/2011/dec/22/mutant-rights/)

</comment></comment></comment></comment><comment><USER6> The reaction to VS achievements is kind of interesting, people seem to be taking it seriously, at least as some sort of symbol. Who knows, maybe it is the thin edge of the knife that will lead to the "gamification" of programming. At any rate,anyone who uses VS and C# with any frequency probably understands it to be tongue in cheek. I don't think I will change my coding practices to get achievements... Well maybe I will, I've just got to get those last two!

<comment><USER7> Isn't software development already kind of gamified? It's full of little bursts of dopamines and adrenaline -- from that first little "Hello World" to finally tracking down a bug, to seeing your code in production. Its addictive and it already comes with distinct achievements.

<comment><USER8> Hence the ascendance of dynamic languages! The compressed feedback loops keep you munching those power pellets:

Action RPGs (Ruby, PHP, Javascript, Python, anything with a REPL) vs. PBEM chess (C, Java, C++, your favorite statically typed & compiled language).

Different genres with widely divergent playstyles and reward structures.

<comment><USER9> I think it's not so much a difference between "dynamic" and "static" as it is between higher and lower levels of abstraction.

</comment></comment></comment></comment><comment><USER10> I sometimes love Microsoft. This is one of those cases.

Software development tools, especially those meant for the enterprise, are sometimes too serious, boring and soul-sucking. Turning it into an RPG game is genius if you do it right: not only do you have some innocent fun, but it might make you learn some good practices in the process.

<comment><USER11> I hope you're not referring to the Visual Studio achievements. Rewarding people for single-letter class names, having 10 levels of inheritance or using GOTOs is neither innocent fun nor something that's going to teach good practices...

<comment><USER12> They are for 0 points, so they're not really rewards.

<comment><USER13> They also have a "running with scissors" icon.

</comment></comment></comment></comment><comment><USER14> Downvote me if you feel like it, but I'm honest when I say I enjoyed this article, and the way it was written. Sometimes, it just doesn't have to be fully serious to make a point.

<comment><USER15>
      Downvote me if you feel like it, but...

Whatever you want to say, please just say it:

[http://raganwald.posterous.com/youre-probably-going-to- downv...](http://raganwald.posterous.com/youre-probably-going-to-downvote- this-but)

<comment><USER16> That's wrong. Sometime, you know you have a valid point and will get down voted because people won't spend the time to understand _correctly_ your meaning. By saying it before hand, people will understand that _you know_ it's a bit of a controversial subject but still spent the time to make your point.. and thus, won't just down-vote you because they thought you were wrong at _first glance_.

<comment><USER9> Heh, I know how true that is, but I think it's healthier to look at it in a different way: if I have a valid point but people don't understand it, it's _my_ fault--I did not write clearly enough. I take it as a signal that I need to sit down with that idea and work out _exactly_ what I mean as opposed to what I say.

Of course, there are always exceptions: missed allusions, overlooked subtleties and well-reasoned but unconventional points can be downvoted incorrectly. However, most of the time, it's healthier to think of it as your fault.

</comment></comment></comment></comment><comment><USER17> As someone who thinks "Photopia" is one of the greatest pieces of fiction I've ever read, I got a kick out of this article. Nicely done.

<comment><USER18> Can I ask, why Photopia?

<comment><USER17> The story really deeply affected me, and I think it was an amazingly effective use of the medium. I can't really think of any other way that it could have been presented in any medium that would have established our concern for Alison (by "being" her parents, the kid with a crush on her, Wendy). It's agonizing to realize what's going to happen, and to be powerless to do anything about it.

The final act of turning off the light is so, so sad.

</comment></comment></comment><comment><USER19> I wonder if whatever censor approved the final headline didn't notice the URL, or just thought it wouldn't offend anyone?

<comment><USER20> I can't imagine an Ars reader being offended by the word "pimp", considering they occasionally use quite strong profanity in the meat of their posts.

</comment></comment><comment><USER21> Of course, one reason this works so well is that programming really can be like a game. Growing up, I didn't play console/pc games, I wrote code!

</comment><comment><USER22> When did ars technica become The Onion?

<comment><USER23> LOLcats have replaced good old-fashioned parody. I eat this stuff up!

</comment></comment><comment><USER24> Pretty sure a Social Gaming plugin is part of TextMate 2 also.

</comment><comment><USER25> I found this article to be so abstract it could apply to any IDE. XCode, Eclipse, whatever. It didn't specifically address any of VS 2010's actual shortcomings.

<comment><USER26> The concept that spawned this article was achievements in Visual Studio 2010. Xcode (spelling!), Eclipse, and other IDEs don't have these achievements.

<comment><USER25> Oh my... I missed that... I feel sick now... What is going on with this world?

</comment></comment></comment><comment><USER27> Humor aside, is MS trying to shoot themselves in the foot. Why drive potential devs away with a crippled free version, and outrageously expensive full version.

</comment><comment><USER28> Text-based. That's why they call it "Visual". Perhaps it would be nicer to have a text-free touchscreen with big buttons?

</comment><comment><USER29> Haha. I am embarrassed how long it took me to catch on.

</comment><comment><USER30> Do you get a bonus achievement for unwinding your loops gwbasic style to avoid the memory leak.

<comment><USER31> They should add this for the base OS. Seriously, they should make it possible for people to debug their OSes and provide them with rewards and financial rewards as well.

At least this way some old bugs would actually go away.

<comment><USER32> This is actually completely brilliant. Sure, it's hollow and somewhat manipulative, but by the nine, it will teach some people what their computer can actually do. As someone who works in tech support, and therefore routinely has to waste my time doing utterly basic things for people, I would absolutely love if Microsoft/Apple/Ubuntu/some beginner-friendly OS did something like that.</comment></comment></comment>


Basic Thinking (German TC) Sells for $62k - <AUTHOR> http://www.centernetworks.com/basic-thinking-ebay <comment><USER2> The difficulty really was that it was Roberts personal Blog and not a german Techcrunch. And I think the publicity of the sale actually hurt the price, since it was a personal blog and will be very difficult to maintain. If the sale had happened non public a lot of SEO people would have tried to buy it but press attention is not really something they want.

I think he should have invited more authors to the blog in the months before the sale to make the blog less personal and more like Techcrunch. But that's not his style.

</comment><comment><AUTHOR> seems low - no word on revenues though, not sure how accurate it is to call this Germanys Techcrunch..

<comment><USER3> Comparing it to TechCrunch is a bit of a stretch, to be honest. I'd almost say they paid too much, given that Robert Basic will no longer be contributing. What's a blog without the people?

<comment><USER4> I would guess that a signifigant number of people that read techcrunch have never heard of michael arrington, they just casually read it for the tech news.

<comment><USER3> Arrington has a bunch of staff writing entries. Not so on BT as far as I can tell. The new owners are apparently searching for volunteers to write articles.

</comment></comment></comment></comment><comment><USER5> That's very low for the most popular blog in Germany.

<comment><USER6> In Germany blogs aren't that popular like in the US. It is not a main source of news. It is more opinion publishing. There are only a few who can live from blogging.</comment></comment>


Imgui: Immediate Mode Graphical User Interface with minimal dependencies - <AUTHOR> https://github.com/ocornut/imgui <comment><USER2> Other than the REALLY inadvisable name choice (good luck getting precise search results for the term IMGUI now...), this looks great.

The low # of commits and vague name might be a bad signs, but check the repo description: Developed at Media Molecule and used internally for a title they've shipped, with feedback from domain experts like Casey Muratori. Those two points alone make me pretty excited to try this out.

And a brief explanation of why this matters: IMGUI frameworks are increasingly popular for editors, debugging tools, etc. because they eliminate the need for state synchronization between your 'engine' and the visualization/editing UI. You also avoid the need to duplicate your layout in multiple places - you have one function that is the complete description of your UI. This reduces memory usage and can actually be more performant in many cases because you can easily ensure that you're only ever running code to update visible UI. Things like virtualized infinite scrolling become quite trivial.

Among other places, IMGUI techniques are used aggressively in Unity's editor.

<comment><USER3> Was used in Unity's editor, I don't think that this is the case today.

I believe the project was migrated to github recently, but it has been around for awhile.

<comment><USER2> Still used in Unity for property drawers:

[http://docs.unity3d.com/Manual/editor- PropertyDrawers.html](http://docs.unity3d.com/Manual/editor- PropertyDrawers.html)

Not sure how much they use it elsewhere, though. It's possible they phased out the other uses.

<comment><USER3> Hmm...It seems that at least they still are using it:

[http://issuetracker.unity3d.com/product/unity/issues?categor...](http://issuetracker.unity3d.com/product/unity/issues?category=imgui)

I read somewhere that the plan was to migrate away from it, a long time ago (2/3 years back?), so perhaps they just decided not to.

<comment><USER4> Oh they're definitely migrating away from it, because it was pretty terrible. Whether it was terrible because it was a bad implementation, or because it was a bad idea, or because Unity is an editing tool and its users expect a more "retained mode" approach that enables them to build UIs without writing code, is an interesting discussion, but Unity is through with immediate mode UIs, and trying to bury it. Their new stuff is very nice, and leverages many things about Unity's editor and graphical capabilities, but it's certainly not minimal.

[http://blogs.unity3d.com/2014/05/28/overview-of-the-new- ui-s...](http://blogs.unity3d.com/2014/05/28/overview-of-the-new-ui-system/)

<comment><USER3> Interesting, thanks for sharing! I think immediate mode done right could be very liberating, but it requires some more work to get there.

</comment></comment></comment></comment></comment></comment><comment><USER5> I was totally sold on this and already preparing to try this out on a simple game using OpenGL I'm working on as a pet project, until I saw the code examples. The amount of highly-specific OpenGL code that's apparently needed to embed an ImgUI popover is completely prohibitive to my use case, the GLEW and GLFW examples literally have 3 times the number of OpenGL calls my own rendering function has, I see custom shaders used just for the UI, setting up clipping rectangles, loading font textures, etc. And that's just to manage renderer state, not even to setup the popover itself.

I can understand that it's an advantage to have something like this renderer- agnostic, and embeddable anywhere in your render flow, but the way you have to use this completely defeats its purpose IMO. I would love a higher-level abstraction layer on top of this that deals with all the render state setup, so I only have to setup the UI itself and populate it, and can throw in a one- liner somewhere in my render function that draws it. In this case, I would happily trade the fact that this would break render-independence and would clobber render state, for ease of integration.

That said, the end result looks immensely useful and very-well done, it's just too involved to setup and use I think...

<comment><USER6> Hello,

Thanks for your feedback (I am the author).

The example applications probably haven't received enough love. They are standalone apps and there is only so much you can shrink the code. If you are using your own engine it is likely that you've already done initialisation and you have helpers to load shaders easily.

Imgui.cpp/Imgui.h themselves are render agnostic to enable portability on embedded systems and consoles where OpenGL is unavailable so it is important it stays this way. However it is perfectly possible that we could rework the sample applications to become more like "drop-in" for a given architecture (OpenGL+glfw coming to mind as being a common case).

It also appears that I could make the OpenGL sample simplier by using the fixed function pipeline and the glScissor() function so I will try that.

This is a first release and it hasn't been used or touched by more than half a dozen people so it may take a few patches until I can make the sample application simpler.

Best. O.

<comment><USER5> Thanks for the explanation :-)

A stripped-down minimal example would be very helpful to show how to use the library, just a simple popover with a single control and the absolute minimum required render calls for example. I agree that the fact that this is render- agnostic by the way, and like you mentioned yourself: if you need this you probably have most of the initialisation and shader compilation stuff covered, I wrote some simple wrapper classes for ES2 myself. But a really thin OpenGL (ES) or DirectX specific layer on top of the core functionality would also be great to make the tool a little more accessible of course ;-)

Great work nonetheless, maybe I'll play around with it anyway to see how much work it actually is to embed this in my (at this stage extremely bare-bones) renderer.

<comment><USER6> The thing with how rendering work is that a "complex UI" vs a "single control" will use the same and only rendering feature required, aka: "render triangle list given a scissoring rectangle". There's no middle ground.

I will provide an example app that use glScissor() and the fixed pipeline so no custom shaders will be required. However I am not sure how the performance will behave with widgets that frequently change the clipping rectangle. At the moment the system is optimised to minimize draw calls (I would like a typical "complex" tool to take under 0.5/1.0 milliseconds to build and render). I was actually considering moving the clipping rectangle within the vertex buffer so everything could be rendered in 1 draw call, which would simplify the code and be faster, but requires a custom shader. That is to say, it is an open ended problem and there's not one single solution.

I already pushed some tweaks and comments in the sample applications. Your criticism is perfectly legit and I aiming to simplify integration as much as possible so please don't hesitate to comment further if you had another go at it.

</comment></comment></comment></comment><comment><USER3> The last time we talked about IMGUI, for historical reference:

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

</comment><comment><USER7> I managed to get this building on MacOS Mavericks using the glew and glfw3 libraries off of homebrew. I forked it at djoshea/imgui

See [https://github.com/djoshea/imgui/blob/master/examples/opengl...](https://github.com/djoshea/imgui/blob/master/examples/opengl_example/Makefile)

      brew install glew
      brew install glfw3
      cd examples/opengl_example/
      make
      ./main

</comment><comment><USER3> What is better than using React's one-way reactive dataflow? Well, just run everything in a continuous loop!

<comment><USER2> IMGUI techniques don't even require running a continuous loop... you can use them in an app that responds to mousemove/mousedown and only paints when necessary.

<comment><USER3> Yep, I've been following this work for awhile now. You can also do much better than that with incremental execution. See:

[http://research.microsoft.com/apps/pubs/default.aspx?id=1892...](http://research.microsoft.com/apps/pubs/default.aspx?id=189242)

Frameworks like React take a very indirect approach, when it turns out that the immediate simple approach might be more viable.

For some reason, I'm getting downvotes even though my enthusiasm was genuine. The mystery of hackernews.

<comment><USER2> It totally read like typical HN 'didn't read the article' downvote snark, especially since it seemed to be comparing it against a javascript MVC framework. I apologize for downvoting it. :-(

<comment><USER3> I guess it sounds so simple that it sounds like snark. I should have been more detailed, but I decided to throw my two cents in a bit early.

</comment></comment></comment></comment></comment><comment><USER8> This looks sweet, but 6KLoC file. How do you even do that and stay sane?

<comment><USER9> I frequently see such long files when looking at typical C or C++ projects, actually both closed and open source. Most other languages seem to have unwritten laws that source files shouldn't be larger than 500 LOCs.

<comment><USER10> Provided you avoid globals, the sky's the limit. My professional record is 17,000 lines; after a while it became a game, to see how far we could take it before somebody cracked. But in the end the project finished before anybody felt the need to split it up. It was actually very easy to keep on top of and handy to have everything in one place.

You do need some better way of navigating round the file than search, though! I recommend something like visual assist or imenu.

<comment><USER9> Haha, sounds like fun

</comment></comment></comment></comment><comment><USER11> This is why I like FRP. It is like the perfect combination of imguis and normal guis. Just treat all events as time varying values and you're basically just writing imgui code.

</comment><comment><USER12> Well, if there is an award for the library name that is hardest to get Google results for this one is a contender.

<comment><USER13> People keep saying that in this thread but I don't see why. It's a unique enough name, and the entire first page of results is relevant. What's so bad?

<comment><USER14> It's like naming your new Model-View-Controller library simply "MVC". Ok if you're the one who first came up with MVC, less so if it's already a well- established term. Yes, all the results in that first page of results is relevant. But the results aren't relevant because they're referring to this library. Instead the library is co-opting the term that all of those search results are referring to.

</comment></comment></comment><comment><USER15> Is there an equivalent tool for ncurses ?

Just curious ...

<comment><USER16> Or just for ANSI-capable terminals, without involving any cursing and terminfo/termcrap nightmares.

<comment><USER17> what you ask is impossible. unless you do:

1\. get the screen height 2\. draw a block with ascii art with that height. 3\. when done put height*line breaks to clean the screen.

or do you want something to handle termcap for you? `dialog` i think does that

<comment><USER16> I said ANSI-capable. I also assumed the terminal dimensions are either fixed or can be retrieved somehow, e.g. from the environment or via an ioctl like in Unixy systems.

So TIOCGWINSZ for the dimensions. And printf("\033[7m") to get a background for the box (you can use colors too, though I think they're mostly fugly). printf("\033[2J") to clean the screen.

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

Using an API wrapping the database of terminal incompatibility might've been a good idea in the days of hardwired glass terminals. But nowadays it can cause more problems than it solves, plus it's ugly as hell. Also, we now have standards and emulators to rely on for when you can't otherwise adapt.

Try get to your shell on an older Solaris box connecting via rxvt-unicode. Oh, missing a terminfo entry? That's _easy_ (if you know how to add it, as a user). But, wait, the name of the terminal is too long! So all applications which rely on curses or term(info|crap) will give you grief. Even though all terminals (terminal emulators really) people use these days support a reasonable subset of the ANSI escape codes -- and when they don't, you can run something like GNU screen between your terminal and the application. _Things would just work if applications assumed a standard and didn 't rely on a huge database and thousands of lines of code to deal with it._

</comment></comment></comment></comment><comment><USER18> (How) does this compare to AntTweakBar?

</comment><comment><USER19> Not to state the obvious, but there are very few types of desktop programs where _not_ having a native look and feel is OK. Especially when UI looks as unique as ImgUI does. Games, demos and, perhaps larger application software, like Blender, that are meant for prolonged continuous use and that run full- screen.

ImgUI is a very nice engineering feat, but it's not terribly practical.

<comment><USER20> It's sold and presented as an engineering tool. Why does something simple that only the developers are supposed to see need UI chrome bloat on top of it?

> _ImGui is designed to allow programmers to create "content creation" or > "debug" tools (as opposed to tools for the average end-user). It favors > simplicity and thus lacks certain features normally found in more high-level > libraries, such as string localisation._</comment></comment>


How to Stage a Revolution - <AUTHOR> http://ocw.mit.edu/OcwWeb/History/21H-001Fall-2007/CourseHome/index.htm

<comment><USER2> If nothing else, the reading material is interesting and a large portion of it is available online and linked to on their readings page ( [http://ocw.mit.edu/OcwWeb/History/21H-001Fall-2007/Readings/...](http://ocw.mit.edu/OcwWeb/History/21H-001Fall-2007/Readings/index.htm) ).

</comment><comment><USER3> No video lectures on ths one?</comment>


Eyes see trouble coming before brain notices - <AUTHOR> http://www.newscientist.com/article/dn17744-eyes-see-trouble-coming-before-brain-notices.html?DCMP=OTC-rss&nsref=online-news <comment><USER2> Reflexes are also interesting, apparently the round-trip time to the brain for information is so long that in some situations something quicker is needed.

So, you could probably conclude that some thresholding, computation and feedback capability is present in all neural tissue, including the spinal cord.

Apparently an octopus has one 'main' brain and 8 'auxiliary' brains, one for each of its tentacles.

<comment> a-priori Well, first of all octopi are invertebrates, so their nervous systems are quite dramatically different from ours. If I remember right, an octopus' axons are unmyelinated (I don't know much about invertebrates; I know some invertebrates have myelination, but I don't think octopi do). This means that it's quite a bit slower to transmit signals around in their bodies, so in order to react quickly they need bundles of neurons near the sources of the signals.

Perhaps as a throw-back to our invertebrate ancestors, we still have unmyelinated fibres that transmit some kinds of information, such as some forms of pain. That's why if you stub your toe, you feel two waves of pain: one sharp and quick, and the other much duller. The second one travels over unmyelinated fibres, and so takes much longer to arrive in your brain.

If all you had were unmyelinated fibres, and if control were centralized in your brain, you'd have a round-trip time of a few seconds to your feet. How could you control your legs for walking like this?

Obviously, we do have myelinated axons, so things are quicker, but it's still impractical to involve the brain in most reactions, because it's large and complex and takes a while to reach a steady-state after unexpected stimuli.

<comment><USER2> Thank you, that was most interesting. I knew about the myelination (sp?), but did not realize that that affected the speed of transmission so much.

Very interesting about the secondary system still being active, maybe that is what allows us to measure the distance of a stimulus to the brain by using the difference between the arrival times of the pulses ?

Are you working in this field ?

<comment> a-priori Yeah, myelination really is a huge improvement. According to Wikipedia [1], the fast pain fibres I mentioned (A-delta) have a conduction speed of 3-30 m/s, and the slow fibres (C) have a speed of 0.5-2.0 m/s. As you can see on that page, there are much faster fibres than those.

For some definition of "field", I suppose I do :) I did a minor in cognitive neuropsychology in university, and now I'm doing an internship for a computational neuroscience project.

[1]: <http://en.wikipedia.org/wiki/Axon#Types>

(Edit: I don't know why we still have slow "C" fibres. I suppose there's no pressure to get rid of them, so they've just stuck around all this time. It probably helps with learning, because it persists for a longer time, whereas the fast signal is more for the immediate reaction... just a guess.)

</comment></comment></comment></comment><comment><USER3> I wonder these cells do when they detect an object approaching. Is this the reflex for closing the eyelids, or something else?

<comment> a-priori This article doesn't get into the behavioural response to this, because they're solely concerned with characterizing things at the cellular level.

Personally, I doubt this would cause the eyelids to close (stimulation of the eyelashes already does this). It may activate the startle reflex, or perhaps initiate a saccade to focus the eyes on the stimuli. More research will surely follow to figure out exactly what behavioural role this information plays.

It's already known, for example, that cells in V1 (primary visual cortex) respond to similar motion. Either the V1 cells receive input from these ganglion cells, or their function is somehow complementary to this (a different time scale, for example).

Also interesting, this new finding directly contradicts existing research: "It is generally assumed that there is no sizable proportion of motion detectors in the primate retina." (Bach and Hoffman, 1999; <http://dx.doi.org/10.1016/S0042-6989(00)00106-1>)

</comment></comment><comment><USER4> Indicates that reverse-engineering human intelligence is harder than merely understanding the brain.

<comment><USER5> I believe it's common to regard the eyes as extensions of the brain.</comment></comment>


Knex and Bookshelf – ORM for JavaScript - <AUTHOR> http://thinkingonthinking.com/Bookshelf-an-ORM-for-Node/

<comment><USER2> Knex is pretty cool... clean API for constructing queries, and promises to manage them. I think one wouldn't even need an ORM on top of that.

(Disclaimer: I'm just now in process of writing some components to wrap the Knex API into NoFlo graphs)

<comment><USER3> How does Knex compare to [https://github.com/brianc/node- sql](https://github.com/brianc/node-sql)

</comment></comment><comment><USER4> There's also Sequelize, another Node.js SQL ORM: [http://sequelizejs.com/](http://sequelizejs.com/)

<comment><USER5> I'm glad to see more alternatives to Sequelize which I'm using. I was just wondering how does Bookshelf compare to Sequelize in terms of maturity and feature set, if anyone here has used both?

<comment><USER6> I'd actually created Bookshelf after seeing a lack of good support for SQL abstractions in javascript, especially comparison to other languages and frameworks.

In terms of maturity, Bookshelf & Knex are still definitely young and a work in progress, but fairly mature in the sense that they are both heavily inspired (and in Knex's case, mostly copied) from the excellent Laravel PHP framework's query builder and ORM. Bookshelf also adapts different conventions I found useful from Backbone.js' Models, Collections, and Events - I'm also aiming to eventually make the libraries usable outside of Node (webSQL or otherwise).

I've been looking to take the best from other languages' data interfaces and try to adapt them into a few great packages for javascript, as opposed to completely re-inventing the wheel.

Some of the differentiating features include eager-loading and nested eager- loading relations, the ability to constrain those relations[1], polymorphic relations, a distinct separation between the ORM and the query builder layer, and until recently transactions (which from what I've heard, sequelize has begun to add to the library).

Some things that Bookshelf doesn't have out of the box are explicit typecasting (hooks exist to handle this if you need, but most times the db takes care of this for you) or validations (IMO out of scope for Bookshelf/Knex, but something I'll have incorporated in my next database package), and static finder methods `User.find(1)`, `User.findOrCreate({...})` - easily added but these will also come in the next package in progress.

Bookshelf aims to be a simple Data-Mapper, rather than a full out Rails ActiveRecord style ORM... This is something that will be a different project entirely which I'm actively working on building out. Sitting atop of Bookshelf, it will include scopes, validators, callbacks, helper methods, etc.

[1]: [https://github.com/tgriesser/bookshelf/issues/69#issuecommen...](https://github.com/tgriesser/bookshelf/issues/69#issuecomment-25053860)

</comment></comment></comment><comment><USER7> I opt to bypass Bookshelf entirely and go for the Knex query builder (with my own wrapper) especially when it comes to API creation.

The best thing? By using custom selector names (whatever.what AS something:else) and using [Treeize]([https://npmjs.org/package/treeize](https://npmjs.org/package/treeize)), you can achieve a deep-object graph effect. Which is really neat.

</comment><comment><USER8> The closest analogue for client side is brian.io/lawnchair

I haven't been keeping up with it, but is there anything better now?

</comment><comment><USER9> Any thoughts on migrations with Bookshelf?

<comment><USER2> Bookshelf is running on top of Knex.js, so I suppose you can use its migration features:

[https://github.com/tgriesser/knex/blob/master/bin/readme.md](https://github.com/tgriesser/knex/blob/master/bin/readme.md)

There is also a Grunt plugin:

[https://npmjs.org/package/grunt-knex- migrate](https://npmjs.org/package/grunt-knex-migrate)</comment></comment>


Ask HN: What Should I Do With One Hour Of Free Time Per Day? - <AUTHOR>

I have approximately 1 hour of free time scheduled in during my very busy summer, and I'm wondering what sort of productive/programming/money-making thing(s) I should spend my time on? For instance, is that enough time to say, develop an app fully in during the summer? <comment><USER2> Borrowing from Richard Hamming via Paul Graham--

* What are the most important problems in your field?

* Are you working on one of them?

* Why not?

</comment><comment><USER3> An hour a day all summer is enough time to develop an app. However I am not sure this qualifies as "productive" or "money-making!"

In seriousness, it depends a lot on where you are in your life, and what your goals are. I would give very different advice to a student on summer break than I would to someone in the working world and with a family.

</comment><comment><USER4> You mentioned that your summer will be very busy, so how about using that one hour a day to just relax?! :)

<comment><USER5> I agree! Read a book, take a drink, smoke a cigar. Sit back and enjoy where you have gotten so far in life. If you don't stop to enjoy it then what is the point?

</comment></comment><comment><USER6> If you're busy all summer, relax for that one hour a day. :) Take a walk, go for a cycle, have fun!

</comment><comment><USER7> Learn something new. Spend one hour a day messing with code. Or watching up to 2 or 3 video tutorials. Or reading one hour of a programming book a day.

</comment><comment><USER8> You most definitely have enough time to develop an app</comment>


Two computer screens aren't better than one - <AUTHOR> http://www.theage.com.au/digital-life/computers/two-computer-screens-arent-better-than-one-20140321-357l1.html <comment><USER2> So, cynical about science reporting, I was expecting the results of a study either misinterpreted or extended far beyond their reach. This article doesn't even have that! It's basically the preferences of the author coupled with some _tenuous_ connection to research about focus.

It's especially in applicable to programmers: I want two monitors so that I can simultaneously display a full screen of code as well as shells, tooling, documentation and whatever I'm working on. Especially for web development, I _need_ two screens just to fit everything I'm actively using. Web tools and documentation aren't distractions.

Sure, if you have enough left-over screen space to put up a bunch of distractions, perhaps you _don 't_ need two monitors. Or perhaps you're not using them properly! One of the main reasons I have a clear separation between work and distractions is that I use a tiling window manager: I can't have something distracting in the background. Sticking to that might be a good start. (Although it's difficult on Windows with its slightly ironic paucity of window managements tools like multiple desktops.)

So yeah: two screens _are_ better than one. Especially for programmers. But really, for everyone—everyone who uses them in a reasonable way. If only tiling window managers were more popular!

<comment><USER3> I keep this tiling window manager on a USB-stick in case I have to work on a Windows machine: [https://code.google.com/p/bugn/](https://code.google.com/p/bugn/) Feels like dwm and has virtual desktops too.

</comment></comment><comment><USER4> TL;DR: when you want to focus, don't keep your email and social media clients open on your second screen.

</comment><comment><USER5> First of all, this article includes only anecdotal evidence. Secondly, it fails to provide an adequate definition of the problem. You can easily find a single big, high-res panel that has more screen real-estate than a pair of 1080p panels, but would one of these be better for your focus because it's a single display? This claim is not logical. If you can augment your working memory with more screen real estate you should benefit. If you use screen real-estate to display extraneous, distracting data such as weather, email, news, etc. you _might_ suffer. Whether or not your screen real-estate has a line down the middle dividing it into two chunks shouldn't make a difference.

</comment><comment><USER6> I've been developing from a single screen for 17 years and have never desired a second. Part of the reason is I work from a laptop and rarely at a desk. But practically speaking I get a lot of work done on a single screen. My eyes can only focus on a single window at a time, so I have no problem using swipe gestures to quickly jump between tasks. Another advantage is I don't need to twist my head every which way to view different windows. The window I need meets my eyes rather than the other way around. While the article is mainly an opinion and offers little scientific research I do agree with his opinion.

</comment><comment><USER7> Discussion on the original New York Times article: [https://news.ycombinator.com/item?id=7432908](https://news.ycombinator.com/item?id=7432908)

</comment><comment><USER8> Testing web application changes on one screen... tailing the logs on the other. Monitoring on one screen, remote terminals on the other... IDE on one screen... 3 different browsers on the other. Really makes a big difference when working as devops to have two screens. Is significantly faster for me and easier than using one.</comment>


5 reasons not to partner with an "idea guy" - <AUTHOR> http://www.tonywright.com/2007/5-reasons-you-dont-want-to-partner-with-an-idea-guy/ <comment><USER2> "By virtue of the fact that..."

I think you mean "because."</comment>


Company Soon-To-Formerly-Known-As-Typesafe and the Failure of Scala - <AUTHOR> https://www.voxxed.com/blog/2015/05/company-soon-to-formerly-known-as-typesafe-rolls-out-conductr-1-0/

<comment><USER2> This article is an embarrassment for the author. Akka, Play and spark _are_ scala. Comparing Java scala and Javascript in the same sentence is idiotic.</comment>


EAngel: Having a Personal Proofreader for Your Emails - <AUTHOR> http://eangel.me

<comment><USER2>
        What We Do
        Proofread emails in every language ...

        ...

        We correct emails in English, Spanish,
        French, German and Hebrew.

That's _every_ language?</comment>


Nginx 1.12.0 stable - <AUTHOR> https://nginx.org/en/CHANGES-1.12 <comment><USER2> One key missing piece in nginx is a way to interact with the configuration without having to edit the config file. This is such a vital piece of a modern infrastructure; where backends are added/removed on demand.

You can interact with haproxy via lua[1] or use etcd to have traefik load its configuration[2].

Seeing how [as others also mentioned] nginx seems to favor pro customers in terms of functionality, it would only seem wise to choose another proxy/load balancer for your next project.

[1]: [http://www.arpalert.org/src/haproxy-lua- api/1.7/#Proxy.serve...](http://www.arpalert.org/src/haproxy-lua- api/1.7/#Proxy.servers)

[2]: [https://docs.traefik.io/toml/#etcd- backend](https://docs.traefik.io/toml/#etcd-backend)

<comment><USER3> nginx can reload the config files without closing the listening port or interrupting any existing requests. haproxy can't do that. So you can actually live-update on-demand much more of the nginx configuration than you can the haproxy configuration.

<comment><USER2> Logging in to machines to update configs doesn't scale well. You often end up building your own framework/api "only" to edit the config file.

Or paying $2500/instance/year for nginx plus.

<comment><USER3> Executing a template, writing it to a file, and sending SIGHUP, is not that hugely different from composing a request and writing it to a control socket.

Maybe nginx isn't better than haproxy for many purposes. But updating configuration isn't the reason :)

</comment></comment></comment></comment><comment><USER4> We're having great luck using traefik ([https://traefik.io](https://traefik.io)) as a kubernetes ingress, we just couldn't get nginx working well and ever since the switch it's been rock- solid.

<comment><USER5> What was the reasoning of traefik vs haproxy?

<comment><USER6> Traefik was written before haproxy had hot reloading configuration in 1.7

It does one thing and does it well - auto configured and discoverable lb and proxying designed to run in container environments

Easy to get running, easy to know everything it can do and without much effort it gets a lot accomplished

Not that nginx and HAProxy still don't have their place, but if you want to front a docker swarm or k8 stack traefik is just easy whereas nginx/haproxy have to be configured for that task

</comment></comment></comment><comment><USER7> Was hopping to get HTTP2 server push on 1.12 since H20, Caddy and even Apache already support it.

<comment><USER8> you should have a look at the Nginx fork from tabao/alibaba

[https://github.com/alibaba/tengine](https://github.com/alibaba/tengine)

[http://tengine.taobao.org/](http://tengine.taobao.org/)

</comment></comment><comment><USER9> The only thing pretty bitter about Nginx is that the access to the server status in the open source community edition.

You get only so much with "ngx_http_stub_status_module" that you have to compile in yourself, as distros don't compile it in: [https://nginx.org/en/docs/http/ngx_http_stub_status_module.h...](https://nginx.org/en/docs/http/ngx_http_stub_status_module.html)

With Nginx plus you get access to so much more ("ngx_http_status_module") of the server status. It's not about the pretty frontend, it's about the values.

[http://nginx.org/en/docs/http/ngx_http_status_module.html](http://nginx.org/en/docs/http/ngx_http_status_module.html)

Why isn't there a CentOS-style distro apt/rpm package of Nginx (think of free RedHat) with the status module enabled, as based on open source Nginx?

<comment><USER10> This is the classic downside of open source that's supported by a "pro" edition: it encourages maintainers to actively avoid adding features that would compete with the paid product.

<comment><USER11> This is similar to the classic blunder by service product strategists who tier pricing by both capability and scale, rather than one or the other. This results in nonselection of the product rather than the hoped-for upsell.

<comment><USER12> "Nonselection"? Did you see the HN post a few days ago [1] about Nginx reaching 33% market share? They seem to be doing very well.

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

<comment><USER11> Markets are measured in dollars, not usage. The last press release I read from Nginx* says they have barely more than 1,000 paying customers, and shied away from real revenue numbers, but I doubt anyone would place a bet that it is on the order of magnitude of revenues due to e.g. IIS on Windows Server, or even the revenues that Oracle & IBM collect for their rebadged Apache.

* [https://www.nginx.com/press/nginx-carries-strong-business-mo...](https://www.nginx.com/press/nginx-carries-strong-business-momentum-2017/)

</comment></comment></comment></comment></comment><comment><USER13> We used NGINX with Consul (template) and Vault quite extensively until I recently found out about eBay's Fabio ( [https://github.com/eBay/fabio](https://github.com/eBay/fabio) ). Fabio is really great as an NGINX reverse proxy alternative in an environment with Consul or etcd. I highly recommend it.

<comment><USER14> What made you switch?

<comment><USER13> Home made consul template duct tape with NGINX vs. solution that was designed from the ground up to be what we mangled NGINX to be with Consul template.

Concrete example; Fabio is far more resilient to operator mistakes then our own NGINX Consul template duct tape solution (which is totally unforgiving).

<comment><USER15> Glad you like it. :)

Disclaimer: I'm the author.

</comment></comment></comment></comment><comment><USER16> > Changes with nginx 1.12.0 12 Apr 2017

> *) 1.12.x stable branch.

Well, thank you very much, that's a very informative changelog. :)

</comment><comment><USER17> On the topic of Nginx, does anyone know if it's possible/how one could fire off a http request (GET or POST) to an external service to log requests in real time (rather than say logging to a text file then processing that)?

<comment><USER18> Syslog

<comment><USER19> But you really don't want to do that if you need accurate log collection and aggregation. Having a local log file is essential to coping with backpressure from the log consumers. Consider what might happen if the remote syslog server goes down or is overburdened.

</comment></comment></comment><comment><USER20> I'm surprised by the lack of first-class ACME/Let's Encrypt support. I figured once Caddy paved the way in that regard that nginx wouldn't be far behind.

<comment><USER21> I'm all for adding native ACME support to web servers, but I can understand that they'd rather wait till ACME reaches RFC status (which hopefully won't be long now - the draft is in WG Last-Call).

Once that's done, I'd definitely be disappointed if web servers still decide it's not in scope for their core product.

<comment><USER20> I don't think it's unreasonable to expect an officially supported optional module, at the very least. It's how they've handled experimental features in the past.</comment></comment></comment>


TRIADOR: Homebrew ternary computer - <AUTHOR> https://hackaday.io/project/28579-homebrew-ternary-computer <comment><USER2> The Russians had a 'thing' for balanced ternary computers during the Cold War (parallel technological universes _et cetera_ ), and the last one developed in the west is reported as dating to 1973.

[https://en.wikipedia.org/wiki/Ternary_computer?wprov=sfti1](https://en.wikipedia.org/wiki/Ternary_computer?wprov=sfti1)</comment>


The Roaring Zeroes (1999) - <AUTHOR> http://www.wired.com/wired/archive/7.09/zeros_pr.html

<comment><AUTHOR> Strangely, reminds me of the 'wave speech' from Fear and Loathing in Las Vegas. [http://www.goodreads.com/quotes/1074-strange-memories-on- thi...](http://www.goodreads.com/quotes/1074-strange-memories-on-this-nervous- night-in-las-vegas-five)</comment>


How the Facebook social graph map was made in R - <AUTHOR> http://paulbutler.org/archives/visualizing-facebook-friends/

<comment><USER2> Wow, this _really_ shows the ban in China. Interesting.</comment>


TideKit and TideKit.com Defunct - <AUTHOR> https://github.com/reduxframework/redux-news/issues/59

<comment><USER2> possibly interesting in the posted company details:

Status

Active - Dissolution Pending (Non-compliance)</comment>


Mozilla Awards Over Half a Million to Open Source Projects - <AUTHOR> https://blog.mozilla.org/blog/2017/10/03/mozilla-awards-half-million-open-source-projects/ <comment><USER2> This is great! While the headline uses the absolute dollar amount to attract eyes and look big, I am more impressed by the list of results in the article. Previous awards from Mozilla have led directly to improvements in Tor, Python documentation, Kea DHCP, and security audits of NTP services.

As someone who donates a small amount to Mozilla monthly, this makes me feel good about my choice.

<comment><USER3> The headline doesn't mention "dollars" at all.

<comment><USER2> That's true. If we are being pedantic, though, it does mention an amount ("half a million"), which turns out to be the number of dollars they awarded ($539,000). So I will stand by statement that the headline mentions the "dollar amount." :-)

</comment></comment></comment><comment><USER4> From the article: "The biggest amount ($194,000) went toUshahidi, an open source software platform for crowdsourcing, monitoring, visualizing, and responding to reports from people caught up in political turmoil or subject to governmental or vigilante abuse. They are working on making it easier to securely submit reports, and documentation on how to deploy Ushahidi while minimising risk to the hosts."

Wireless mesh fully distributed world here we come! :)

<comment><AUTHOR> There's more where that came from:

A $2 Million Prize to Decentralize the Web. [https://blog.mozilla.org/blog/2017/06/21/2-million-prize- dec...](https://blog.mozilla.org/blog/2017/06/21/2-million-prize-decentralize- web-apply-today/)

[Disclaimer] Mozilla Foundation employee as of recently.

<comment><USER4> Thank you for being part of such excellent endeavors! Wow this is actually really cool; it's a contest?

</comment></comment></comment><comment><USER5> Just looking at it at a glance, 50% of the money went to what appear to be political/activist projects/websites "masquerading" as "Open-Source", namely "Ushahidi" (194k/35%) and "RiseUp" (100k/18%). The latter only really putting their "help site" on github: [https://github.com/riseupnet](https://github.com/riseupnet). I don't personally count "open-source" or "any one can contribute" websites/platforms as actual open-source.

Both the above donations are individually _much_ larger in monetary amounts than what Mozilla gave the last time around to actual "code" open-source projects (amounts: 10k, 25k, 30k, 50k) such as Tor/LLVM/etc.

Honestly, I was really excited to see what open-source projects were going to be getting some (I would assume "much needed") funding behind them, but I was disappointed with yet more politics. Except for Webpack, definitely kudos to Mozilla for funding their work on WebAssembly.

<comment><USER6> [https://labs.riseup.net/code/](https://labs.riseup.net/code/)

</comment></comment><comment><USER7> These are cool projects. I wish they also contributed to some of the addon projects that make Firefox so unique. Greasemonkey and Vimperator come to mind. But surely others have good suggestions too.

</comment><comment><USER8> Phaser.io is worthy project and the folks on the team are dedicated to creating something useful and amazing for the web.

</comment><comment><USER9> I'd much rather they limited their donations to organizations with still- breathing warrant canaries (e.g. not RiseUp).

Maybe I'm cynical, but I think that non-profit organizations with dead _national security_ warrant canaries cannot accomplish technical or social activism as effectively as they might have in the past.

<comment><USER10> The canary is alive

</comment></comment><comment><USER11> It would be awesome if we could get some security audit funding focused towards rust projects. For example an audit of rustls pki and co, so we can start pushing the rust ecosystem forward without having to depend on c/c++ projects like openssl for production use. Fingers Crossed :D

</comment><comment><USER12> What does the money go to? cdns and hosting? Or to main contributors? That's pretty cool nonetheless.

<comment><USER4> It must depend on the specific project. Hopefully to more traction bearing and birthing elements than just hosting

</comment></comment><comment><USER13> Incidentally, does Thunderbird still receive money from mozilla?

<comment><AUTHOR> The latest update from May this year on Thunderbird's status: [https://blog.mozilla.org/thunderbird/2017/05/thunderbirds- fu...](https://blog.mozilla.org/thunderbird/2017/05/thunderbirds-future-home/)

</comment></comment><comment><USER14> >$100,000 to RiseUp, a coordination platform used by activists across the political spectrum, to improve the security of their email service;

However, RiseUp has shown to be leftist several times[1]. If I was a right wing activist or something similar, I would not use RiseUp, because of the serious conflict of interest of the owners of the platform.

There's nothing wrong with RiseUp being leftist, but I expect Mozilla to be neutral politically, except when something related to free software is at stake in politics.

[1]Apart from their logo being a reference to the anarcho-communist flag, they've said "[...] We do this by providing communication and computer resources to __allies engaged in struggles against capitalism and other forms of oppression. __" ([https://www.counterpunch.org/2017/09/01/responding-to- antifa...](https://www.counterpunch.org/2017/09/01/responding-to-antifa-and- riseup-on-revolutionary-politics-and-non-violence/)) I'm sure I'd find other similar quotes if I looked it up.

<comment><USER15> Mozilla isn't neutral politically, though there isn't a specific political alignment that is endorsed. That is, it's issue-focused, rather than partisan.

We have a strongly-worded manifesto that lays out what we believe: [https://www.mozilla.org/about/manifesto/](https://www.mozilla.org/about/manifesto/)

Mitchell Baker, the chairwoman of the Mozilla Foundation, talking about how the current political environment in America might overlay that manifesto: [https://blog.lizardwrangler.com/2017/03/13/the-worldview- of-...](https://blog.lizardwrangler.com/2017/03/13/the-worldview-of-mozilla/)

I'm an employee at Mozilla, though am trying to set personal politics aside to present public explanation of our institutional viewpoint.

<comment><USER14> Maybe I didn't word my comment correctly. But I thought of politically neutral as not left-wing nor right-wing, not openly supporting capitalism nor being openly against capitalism. I wouldn't be surprised by Mozilla pushing privacy, free speech and copyright related political agendas, but I am surprised by it supporting a left wing organization.

<comment><USER16> Mozilla certainly do lots of things to _support_ capitalism, too.

</comment></comment></comment></comment><comment><USER17> > In neither of these cases did we find an issue more severe than Medium.

What does that mean?

<comment><USER18> There's a somewhat loosely standardized set of severity levels in security audits: informational, low, medium, high, critical.

So no high or critical issues were found. That means probably nothing exploitable.

<comment><USER17> Got it. Thanks! The capital M made me think they were somehow referring to medium.com

</comment></comment></comment><comment><USER19> A wonderful surprise to see Phaser on that list!

</comment><comment><USER20> All written in rust :P</comment>


Haskell Sucks [pdf] - <AUTHOR> https://dl.dropboxusercontent.com/u/40457956/haskell_sucks.pdf <comment><USER2> Monads become a lot more straightforward when you realise that they're just a way of making the semicolon programmable.

No need for any nonsense metaphors: the bind operation in monads is just a programmable semicolon.

</comment><comment><USER3> Someday something won't suck. I'll wait to learn anything till then, to make sure I didn't learn something that sucks.</comment>