Why I Hate Frameworks - <AUTHOR> http://discuss.joelonsoftware.com/default.asp?joel.3.219431 <comment><USER2> This comment totally missed the point:

      A good framework is nothing more than your toolbox
      filled with a good selection of tools.  Some tools are
      very general purpose (standard claw hammer) while others
      are very specialized (roofing hammer).  Having them all
      available and knowing when to use them is half the battle.

No, sir. That is a good _library._

<comment><USER3> No, sir. That is a framework you may not be familiar with.

There are frameworks specifically designed to be modular, and of which 90% can be used as a library, without being forced to apply it's MVC or scaffolding bits.

The line between framework an library is a blurry one in a world where "framework" does not equal "Rails".

<comment><USER4> Framework: it calls you.

Library: you call it.

<comment><USER5> BenjiSmith puts it similarly in a comment halfway down:

      A library is something *contained* within my code.

      A framework is a *container* for my application.

<comment><USER6> That distinction only has meaning when passing functions around is hard. Nobody call simple chart generating library's frameworks even if they have large numbers of call backs to your code. At the same time it's easy to find actual web frameworks that are instantiated by your code which may spawn unrelated processes at the same time.

</comment></comment></comment></comment></comment><comment><USER7> The most important statement in this article is near the beginning, and it's still relevant today:

 _"I've done small woodworking projects before, and I think I have a pretty good idea of what I need: some wood and a few basic tools: a tape measure, a saw, a level, and a hammer."_

The reason I hate frameworks (even things like Django which is very easy to get started with) is that, at some point, I'm asked to re-learn a different way of solving a problem that I've already solved in the past.

I've been doing lots of thinking about this having written the Great American PHP Framework myself, and worked with other people's frameworks, and also worked a lot in the CMS space and the biggest conclusion that I've come to is that the best tools are those that enable you to do things faster or more conveniently but don't actually provide any abstraction.

For example, when deploying a website there are any number of tools to "abstract away" the HTML layer - templating engines, markups, markdowns etc. etc. but the best way to build HTML is using HTML and testing in a web browser, always.

When you need to write some code in whatever web framework you're using to handle a POST request, you want to be as close as possible to the HTTP layer without a bunch of arcane systems in between you and what you and the underlying technology.

Sure it's handy to have tools which automate some repetitive aspects, but if you understand the underlying principles and you know the syntax of the language you're working with, you should at all times be able to just "get it done" however you know how without reading endless documentation and shoehorning your knowledge through a bunch of layers of abstraction.

The same goes for ORM - I want convenience of access to my data, and some automation to handle some of the more boring aspects of writing SQL, but I need to be able to mix and match (yes I know most ORMs allow you to use raw SQL, but it's always one or the other - the ORM or the SQL - I've never used a tool that has a simple method for me to extend the ORM bits halfway through the query building process with some custom SQL).

This is my zeitgeist now and it pervades all the projects I'm working on.

[1] <http://www.decalcms.com/>

<comment><USER8> > _The reason I hate frameworks (even things like Django which is very easy to > get started with) is that, at some point, I'm asked to re-learn a different > way of solving a problem that I've already solved in the past._

Yes but it cuts both ways. The reason people hate maintaining _your_ code is because they have to learn the way you did things which is buggier and half- baked compared to the way that any number of battle-tested open source frameworks did it. Not because your way isn't good, but because it just doesn't have the mileage yet.

> _the biggest conclusion that I've come to is that the best tools are those > that enable you to do things faster or more conveniently but don't actually > provide any abstraction._

An interesting conclusion, but not nuanced enough. There's no escaping the need for abstractions, obviously there are some that you're taking for granted here such as high level programming languages and operating systems. Fair enough to set those aside.

But then once you get into serious application-level territory you still have to decide where to abstract. Some abstractions are more leaky than others, some are more restricting than others. The art of it is figuring out which make sense in what scenarios. A really good framework hits the right abstractions for a wide range of applications, but even within your custom application you have decisions to make.

For instance, you're one-helper = one-html tag rule of thumb might be a good idea if you have 5 forms on your website. On the other hand if you have 500 CRUD forms all with a bunch of repeated composited HTML structures then it's probably not such a good idea.

I think what's underlying your conclusion is that you've seen too many frameworks that are way too complicated for the problem at hand. That's clearly what the OA saw, and that was really the selling point that launched Rails rise to prominence in the J2EE era. Modern web frameworks have really learned this lesson. Granted, Rails has gotten more enterprisey over the years—but not gratuitously—Rails core has demonstrated remarkable restraint over the years, and kept the focus on solving the 80% problems elegantly.

But if something like Rails really is too much then you have micro-frameworks like Sinatra that really just give you the barebones structure to wire some code to a web server. Heck, due to the modularization of Rails and the extraction of libraries where applicable (eg. Rack), you can now avoid a formal framework entirely and still utilize a massive amount of code that was originally written in frameworks, now in stand-alone library form.

When programmers trot out the old adage "use the right tool for the job", one of the main points is to avoid the human tendency to over-generalize. To be the best programmer you can be, you should be constantly re-evaluating your opinions about the "right" and "wrong" way to do things. Rather than forming concrete opinions, it will serve you better to understand the pros and cons of any approach so that you can effectively apply your knowledge new situations.

<comment><USER9> I'm fairly new to Rails but had a question triggered by all this library/framework discussion, when you do want to move beyond the 80% does it let you do that elegantly?

<comment><USER10> Rails is comfortable beyond the 80% because it's abstractions are deliberately 'leaky'. In practical terms this means it's very easy to work with raw SQL/HTML where required.

</comment></comment></comment></comment><comment><USER11> I think it's hard to appreciate the post if you haven't worked in J2EE land back in that era (2005). Just reading that gave me bad flashbacks. "Frameworks", especially on the webstack side of things have gotten a lot saner over the years.

I imagine if he had seen something like Play!, he'd have a very different opinion.

<comment><USER12> Yea, I was researching frameworks for our software (<https://mijura.com>) and I had all but given up on Java until I found play framework. It's like Ruby on Rails meets Java, very well designed and the views are in Groovy.

It's also under active development and the community is quite strong.

</comment></comment><comment><USER13> That's why I like raw PHP, Python or Perl. In the era of Hammers, Hammer factories and Hammer factory factories, its always convenient to have a nice useful rock.

</comment><comment><USER14> "I'm currently in the planning stages of building a hosted Java web application..."

Seriously, people are starting NEW projects with Java as the language of choice? Despite the plethora of 'better' languages you can run on a JVM.

<comment><USER15> Why the hate on Java? Sure it's not sexy, but:

1) Almost everyone knows it so hiring is easy. 2) There's a very large community that supports its tools, infrastructure and libraries. 3) It's faster then almost anything else out there. 4) It has migration routes (via Scala or Clojure) to sexier languages.

As far as I can tell, the only drawbacks to Java are that it's not cool, that's it's verbose and that's it's ugly. Any half decent editor or IDE takes care of the verboseness issues, leaving just cool and ugly, which really aren't good criteria for picking a language. Java was once cool too, and someday Ruby or whatever the current hotness is will also become uncool.

<comment><USER16> I find Java more difficult to work with than I do Scala, Python, C#, etc. mostly because of the lack of expressiveness. Even just the lack of first- class functions (or delegates) results in very ugly patterns designed to get around the fact that Java is--well--not expressive enough.

ThingBuilderFactoryActionMethodObject is a certainly an exaggeration, but not _that_ much.

</comment></comment></comment><comment><USER17> For me the biggest benefit of a framework is that other people use them. Makes it easier for other people to work on your project with you, reduces the time necessary to adapt. If the turnover of people is huge this benefit can really come in handy. Strange nobody notes that.

People that get hurt most are those that believe a framework is a short-cut to learning how to do certain things. You absolutely need to know what's happening under the hood.

The benefits to a developer that is working by himself might be very small if there are any. I guess it depends on how high-level we need to go.

</comment><comment><USER18> I'm going to have a bit of fun here. I have known two types of developers. The ones practicing creation magic and the others, specializing in alteration.

When creation mages see a problem, they create a solution. The power of their mind allows them to come up with the exact thing that needs to be created for the given problem. Their creation skills are honed so well that they get incredibly fast. They don't need to look around much since there's no point in paying attention to what they have created before. Their old creations already solved their problems, they work, they don't have to be disturbed again. Of course creation mages are not stupid, they simply tend to focus on a direct path towards a solution. If some mana could be easily saved by using something already created, they certainly wouldn't pass it up. They would reuse what they've already built. There are just way too many things around them, and it's hard to determine if something fits. After all, they have to keep going without delays. A good creation mage has learned to keep things sufficiently neat. They frequently remember things that they could reuse here and there. However, when one observes any such mage at work, one often sees a lot of mess. Some of the mess has occasional patterns, some things are interconnected, but for the most part it's a very complicated and disconnected system of various moving parts working autonomously to solve their individual problems.

Alteration mages work a bit differently. They are often slower than creation mages, especially in the beginning. That's because they spend quite a bit of time studying their surroundings. They take longer to solve a problem. The thing about alteration mages is, they can't handle mess. (They are accustomed to altering, not creating.) There is a certain compulsive quality to their mind, they simply can't relax in the presence of something unnecessary, when something could be altered instead. You'd often see such mage cleaning their workspace leaving it neat and stripped to bare minimum. They don't have many things in their possession, but spend a lot of time learning about potential things out there that they _could_ have if they wanted. Alteration requires deep understanding of systems, something that can never be quite mastered due to such huge variety of abstract models. That's why alteration mages grab onto every opportunity to learn about a new sample system, a way things could be arranged, patterns, frameworks. When a problem arises, they don't simply create a solution, they build a system which naturally causes that solution to occur, along with keeping all the existing problems solved. In other words, if plants don't grow, alteration mages would try to augment their biosphere in a way that achieves harmony, while creationists would simply generate some water.

Both alteration and creation mages gain experience, level up, and become more valueable. However, they learn slightly different skills. Creation mages learn to have high morale, learn to be calm, and treat solutions as black boxes. They learn to trust their own judgement. Alteration mages on the other hand learn a pretty crappy lesson. They learn that most of their decisions turn out to be incorrect. They build out a system and suddenly get attacked with a problem which the system can't accommodate. It happens once in a while, and they struggle to have everything redesigned from scratch. They end up burnt out, because they can't give up their quest for minimalism and elegance. Yet, it's not all that bad.

You see, alteration mages have a very important advantage. They always tend to record their practices and principles. Old and experienced mages would pass on their knowledge to the newbies. The newbies would build upon it to improve elegance of their systems. In essence, an alteration mage is never a lone warrior, they are always standing on the shoulders of the giants that came before them, which is what makes them strong. One of the first things a newbie alteration mage learns is that what they think is right will soon turn out to be wrong. They are too inexperienced to take the multitude of fairly common scenarios into account. At the same time, they quickly learn to be patient. When an elder passes down certain knowledge or framework upon a newbie, it will not be immediately obvious why things have to be the way they are. After some time they finally see that the knowledge of elders has already accounted for so much and in such an elegant manner that they don't need to worry about these problems any longer. They've already been solved by elder alteration mages in the cleanest ways possible, polished by generations of mages that came after them. Some newbies would rebel, against the elders, but only a few lucky ones actually manage to contribute anything useful, albeit this drive of ambition, trial, and error is often what causes major advancements for the whole guild, akin to the evolution process. Eventually, alteration mages manage to outperform their creation colleagues while leaving clean and elegant systems behind. They would sometimes cringe looking at poor creation mages gluing together half-baked solutions to things that are so deeply understood within alteration circles. Their pools of mana are not nearly as deep as of these performant creation wizards, but mana pools are just a small part of their power. Majority of it comes from the knowledge of frameworks. Certainly, if a problem is completely out of ordinary, they may resort to some creation magic, but for the most part you can count on them walking that extra mile towards finding a well-integrated solution.

<comment> loup-vaillant Brilliant. I always liked to see programming as a kind of Hermetic magic (you write incantations, and they do something for you). But I never went as far as to think about _schools_ of magic.

I have one issue with your classification however: I can't see where I fit: first, I have little mana. Second, I find alteration magic _extremely_ difficult. I simply cannot comprehend more than the smaller artefacts, especially when they have flaws, or when scrolls about them are scarce.

The USSM[1] web site compiler probably represents me best. I wanted to solve the following constraints: control over CSS and HTML, clean URLs, comments are optional. I looked around, heard about Jekill, read some scrolls, and then immediately thought "scrap that, I can do simpler". The current result is less than a 10 feet scroll (~350 lines), and I plan to shrink it further.

Overall, I am obsessed with systematically crafting the smallest artefact that could possibly work. I love the UNIX philosophy: it let me activate extremely powerful artefacts with very little mana of my own. More often than not, I only have to craft a small ring to bind them all to great effect. My ideal would be something like the STEPS project. And I don't know where it could possibly fit: it looks like powerful creation magic, only with next to no mana.

[1]: <http://www.loup-vaillant.fr/projects/ussm/>

</comment></comment><comment><USER19> Framework is a thing that should emerge as a result of your own project long after its launch (after major evolutionary changes/rewrites based on actual usage feedback). It is your team's encoded skills and experience.

People who are trying to choice a framework by browsing trough feature lists (not even the code) before they have a working prototype (which means understanding of actual algorithms and data structures) are doomed. ^_^

People who're trying to sell you a piles of code "you really-really need" such as J2EE are just cheaters.

btw, no one prevents you from copying the code from any codebase you like, but only if you can read and understand it. My favorite example is libnginx.so - just better APR. ^_^

<comment><USER20> _"Framework is a thing that should emerge as a result of your own project long after its launch (after major evolutionary changes/rewrites based on actual usage feedback). It is your team's encoded skills and experience."_

This, expressed by Martin Fowler: <http://martinfowler.com/bliki/FoundationFramework.html> and <http://martinfowler.com/bliki/HarvestedFramework.html>

</comment></comment><comment><USER21> Did anybody else read the factory factory story analogy and thought of the genie/meta genie analogy in Godel Escher Back?

</comment><comment><USER22> This is why I prefer Sinatra over Rails.

</comment><comment><USER23> the whole 2005ness of this post, which I just discovered after reading the whole thread here, renders it mostly useless to me. I get what J's saying about the evolution/de-evoluion of frameworks - but wow, in the time since, things have played out differently.

<comment><USER24> It's 2011 and I don't see much sanity in the Java projects being churned out by some of my colleagues.

What frightens me the most is that they honestly think they are doing it right. They really believe Maven is sane and that Hibernate generates good SQL.

Some of them even say "of course we are using Java - what else would we use?"

</comment></comment><comment><USER25> timeless. I still remember reading that when it was first written years ago and being in awe.

</comment><comment><USER26> classical argument of frameworks vs libraries.

</comment><comment><USER27> This is one of my most favourite passages on the web.

</comment><comment><USER28> What was the state of "frameworks" in 2005, particularly in Java-land. Struts? Spring? Anything that didn't make you want to gouge your eyes out?

Even outside of Java-land, Rails had yet to hit 1.0, and Django was just starting. The evolution of the framework has come a long way in 6 years, and frameworks have become less "one size fits all" and more task-appropriate.

I think a more appropriate title for this post is: "Why I Hate circa-2005 Java Frameworks"

<comment><USER29> Knowing this was from 2005 would have been helpful. Having the date be written at the very bottom of the article didn't make things any better.

While many of his points are valid, his comparison of carpentry to using a framework takes a very select view of what goes into building something. Of course you need a hammer to build a house, just like you need an if-else statement to build a webpage.

If you're building a 10 page webapp (spicerack ) you probably don't need a framework. If you're building a full-fledged web-system (house) you don't _need_ a framework, but you'll be much more productive for having one.

<comment><USER30> Need a framework? Perhaps not, but I'd still use Sinatra for problems of that size since it helps keeping simple things simple.

</comment></comment></comment><comment><USER31> The problem here is that frameworks all operate on different levels, with differing amounts of abstraction, and at some point, you _do_ want that generic, powerful functionality.

To perhaps extend the metaphor, if I want to build a spice rack, I don't want to go out into the forest, determine which kind of tree will produce the correct kind of wood, cut it down, trim and plane my planks, and all the other steps which are entailed by wood acquisition. I just want to go to my local hardware/home improvement store and request precut wood.

This poster has gone ahead and made assumptions about the nature of resource acquisition which massively simplified his workload and which people normally take for granted in modern life, and as a result, his spice rack will get assembled much quicker. I'm choosing the networking stack as a reasonable example of a framework niche which generally fulfills people's needs without getting in the way and causing the problems he's talking about. Node, Event Machine, Twisted, MINA, etc.

<comment><USER32> Good point about there being different levels of frameworks/tools.

What's important is using the right tools for the job. Sometimes you might need the high level, very abstract framework, but it's not cool if that ends up being the only tool available.

</comment></comment><comment><USER33> I think this falls into the category "As simple as possible, but not simpler". Doing abstraction right is a very hard thing indeed and requires the right training and education. None of the creators of the current frameworks have had those, and therefore their creations may be brilliant, but flawed. When an abstraction is done right, you won't feel any pressing need to go beyond it. When it is not done right, you are happy that at least it is "leaky", but calling this leakiness a feature just misses the point in the first place.

<comment><USER34> Totally agree. Some time ago I saw a html template engine with something like this:

      $framework->outputTextInput("name", "value", "class");

And after running +50 lines of code this would be the output:

      <input type="text" name="name" value="value" class="class"/>

It had nothing to do with keeping the state of the app or something, just outputting HTML...

</comment></comment><comment><USER35> There's some good stuff here but it's mixed in with some truly sick casual sexism. Unfuckingacceptable.

<comment><USER36> What, you prefer formal sexism? (burn karma, burn)</comment></comment>


Ask HN: Besides HN, what's your fav online community? - <AUTHOR> <comment><USER2> Reddit, because it's not a single community; it's hundreds of them.

And I can't resist a community that encourages people to contribute GIFs of /r/startledcats.</comment>


Road to WWIII - <AUTHOR> http://www.youtube.com/watch?v=HP7L8bw5QF4&hn

<comment><USER2> Yes, the world is ending! Just regular conspiracy theory BS, which ironically does have some valid points but the conclusion is absurd.</comment>


Ask HN: Making Server with open source? - <AUTHOR>

My organization currently own a server from Fujitsu with cent-OS 6, but Redhat hinder us to install open source software by saying that they will not provide support if we install patches and software's from untested sources. So want to know what is the best list of open source software's to implement a server with Ubuntu which should have mail server, firewall or watch-guard, ldap and webserver. <comment><USER2> Mail: Postfix (my go to SMTP server). However, a lot of people like Exim as well, but I've never got into it. Sendmail is powerful, but unwieldy. Postfix is very simple to configure a basic email server, especially b/c RedHat does such a great job with the defaults. However, be careful with security if you expose your server to the Internet.

Firewall: IPTables if you're running a firewall on the box. However, if you're running a firewall edge of network, then I'd go with a dedicated solution like Shoreline, Smoothwall or ClarkConnect.

LDAP: OpenLDAP. By itself, OpenLDAP is not difficult. However, as you add layers to it like TLS and Kerberos, etc. then the configuration becomes obtuse.

Web server: Nginx (the current king), but Apache is still a strong choice. Nginx works great with the newer frameworks where you're running it as a proxy for your application server plus as a high performance static file server. Apache is still solid if you're developing in PHP.

<comment><AUTHOR> in web server i have read that using nginx as your front static file server and apache as backend server is best choice ? And also can you tell which is better Linux for server REHL(CentOS) or Ubuntu , as REHL provide out dated softwares but Ubuntu is cutting edge ?

<comment><USER3> centos does necessitate that you sometimes pull an rpm from non standard repo's such as EPEL or rpmforge, due to their focus on 'stability'

</comment></comment></comment><comment><USER4> Does Redhat offer a list of packages you can install from some type of app store?

You should firstly find out what they mean by "untested sources", as this could mean building code from source/tarballs and not using their 1-click installer for software (where a lot of the software will likely be open source in any case).</comment>


Curated list of falsehoods programmers believe in - <AUTHOR> https://github.com/kdeldycke/awesome-falsehood <comment><USER2> A small minority of programmers may believe a small minority of those things, but that's all.

Oh, the author is a "Seasoned CSS developer". Quite possibly associates with different programmers than some of us...

<comment><AUTHOR> I'm sure that every person who does things to make computers usable and useful for non-technical people associates primarily with a fairly limited subset of programmers. However, in this case I'm wondering exactly what it is you are implying.

Could you be more specific?

<comment><USER2> Sure: these may be things that CSS programmers believe but it is not generalizable to the entire population of programmers. At least not without links to Daily WTF.

<comment><AUTHOR> I know a worryingly large number of programmers that believe many of these things, and refuse to believe me when I tell them they are wrong. It may just be that you tend to mix with programmers who _do_ know these things, and do read things like the Daily WTF and HN.

Many don't. Many, _many_ don't. YMMV.</comment></comment></comment></comment>


Homeless alone - <AUTHOR> http://homelessalone.blogspot.com/ <comment><USER3> I find this pretty fascinating. Firstly because I'm overwhelmed with sympathy for this guy, and I stopped to ask why. I live in Chicago and I see the homeless every day, and I know it's a problem and I wish I could fix it but I don't know how, and giving a dollar to every person I pass would actually start to have a hefty toll ($20+/day or more, _easily._ ) So since moving to the city I made it a blanket rule not to give hand-outs in that form.

But because this guy keeps a blog, because he is articulate and just sounds like another guy, easily could be me, because he still has his voice, I'm almost tempted to send him a couple hundred dollars over paypal. I haven't yet, but the temptation is there. Just because I can hear his story instead of just see him sitting on a sidewalk. It makes it so much harder to walk by.

I do wish I knew more about how it happened. I always wonder that. I usually think there must have been some bad choices made along the way. Not that anyone's free of bad choices. But, why did he instantly become homeless after his mother sold the house? Why didn't he have any savings at that age? Why didn't he have any old friends who would take him in to help him out? I know not everyone is so fortunate as to have those things, of course, but still I wonder how it happens.

<comment><USER4> I don't know Neil well, but he did speak twice at my conference several years ago (2010 and 2012). In 2012, he was walking with a cane, and had had a stroke between those two times I met him. Still in good spirits, but was definitely a little physically slower.

I'm pretty sure there's more to the back story that led up to this, and I've encouraged him to write more about this at some point when he's more stable. If I were to guess, based on the few points he's made in writing, there's some family rift going on, and I might also presume that he may have been paying for things for his mother that might have otherwise gone in to savings.

He's been through a divorce, which can certainly have a financial toll on anyone, and I think it was a bit later in life, which may be harder to recover from.

A late divorce, some health problems, trying to support a family member - <USER2> of that may quickly deplete someone's funds.

As to the homeless part, I think there's a certain pride involved, and asking for help may be embarrassing, especially to have to involve friends. It may be that many of his local friends would be tied to his mother/family, and may not be as supportive as one might hope.

I sent money to paypal, but it's frozen, and I'm wondering if I can reverse it and senf via GFM and he'll get access faster. Hrmmm....

<comment><USER5> I always have to wonder why people don't work at least minimum wage jobs, to solve the base problems like hunger.

I apologize if I'm missing something or if I seem really ignorant. Actually, I realize I _am_ totally ignorant in this respect. I've never worked a job outside of programming, so I don't know—is it very difficult for some people to get 'normal' jobs? Is it mostly people with some kind of issue or disability that affects their ability to get a job who wind up like this? Are there not as many minimum-wage, or non-professional (or something) jobs out there as I think there are?

I realize once you get to a certain level it becomes really tough to recover, but when you're on your way, and savings are going, shouldn't you be looking around for any way to earn some cash?

<comment><USER6> Being homeless and getting a job makes it very difficult, almost impossible. Where are you gonna keep a nice suit? Where are you going to get shaving materials? Make-up? Do your hair? Even if you got the job, where will they send your checks? What if you don't have official documentation (birth certidicate, social security, etc) because you're homeless? How would you get around if public transport is unreliable?

And even if you could request them, where would the gov't send the documentation? Where would you do your taxes or anything?

Where are you going to get enough time on the internet to submit hundreds of applications? Or where are you going to print resumes to hand them out?

Being homeless makes the basics of getting a minimum wage job a near insurmountable task for many.

<comment><USER5> I suppose ther person at hand and many others had things happen so unexpectedly and quickly that he might not have had time to mobilize all these requirements for a job.

It bothers me that a handful of these problems seem possible to be easily solved with very little tax money. A place to send checks/ids (free PO boxes with an address for the homeless) a place to help get documentation and stuff...

Do shelters provide basic makings for a shower and shave?

Even internet access with available hardware, since it's more and more possible to do everything on the internet, would be reasonable.

<comment><USER7> Yes, some shelters will provide such, as well as an address to get mail at. They also will help you search for a job.

</comment></comment></comment></comment></comment></comment><comment><USER8> It's a bit stunning to some of the philosophical waxing in here, ruminations and curiosity about what bad choices were made. The guy had a stroke, which he states. It's so stunning that this isn't enough explanation for some, who wonder if he didn't save enough. Our culture is so far gone that a stroke isn't enough explanation for homelessness. To hell with needing reasons... he shouldn't have to provide them. I think the urge for reasons are just ways to determine in our minds we couldn't one day be in his shoes and/or remove the idea that perhaps we should help.

<comment><USER9> I think a better sign of being "so far gone" is when you find it totally blasé that a stroke can lead to homelessness.

<comment><USER10> This. Even though my employer provides descent insurance I still end up paying quite a bit more out of pocket then I did in Australia or Canada.

Having lived in many cities around the world, I can say if you're poor in the US, there aren't many options to get out of it. It could be said for many countries but US is the worlds largest economy. It's a solvable problem.

It's heart breaking to hear stories of people choosing to die than go to the hospital because the bills will kill them.

</comment></comment></comment><comment><USER11> When I was homeless and living out of my old car, my biggest problem was police. Constantly hassling me. I have no idea how they would always find me, I think people were calling in me sleeping in my car (this was before smartphones).

They would always insist on searching the car for drugs and I basically had to give in. Not that I ever had any but they would make a mess since all my possessions were in the car and they could care less about tossing everything.

And yes, as many people say, getting out of the rut of being homeless is the hardest thing, it starts to completely change the way you think and everything becomes day-to-day survival.

</comment><comment><USER12> Wikipedia says you only get unemployment benefits for 6 months in the US, is that correct? Seems quite harsh.

<comment><USER13> Its dependent on each state, but that's close enough to average, yes.

<comment><USER14> What happens after that?

<comment><USER15> At least in Washington State, unemployment payout is almost immediate, within two weeks of losing your job. You can use the time before it runs out to apply for other federal or state assistance programs. These may take longer and have more complex qualifications.

<comment><USER16> > You can use the time before it runs out to apply for other federal or state > assistance programs.

Which if you are a non-disabled, employable (whether or not employed) adult without dependents, in most parts of the US, are _extremely_ limited, quantitatively and, often, temporally, as well.

</comment></comment></comment></comment></comment><comment><USER17> Enough already. This society can provide Walden (by Henry David Thoreau) sized accommodations for all that need it. There is no reason for anyone to be homeless.

People need work and healthcare. These are rights not a privileges.

<comment><USER18> Except... some people choose to be homeless. There are two in this very thread (the first comment, and here: sandiegohomelesssurvivalguide.blogspot.com). It's unpleasant to say, but it's true.

To achieve a goal of 100% home-d, we'd need some REALLY draconian measures, e.g. forcing people into homes they don't want and forcing people to take medication against their will. I, personally, am not for measures like that, for reasons this blog post lays out well: [http://slatestarcodex.com/2016/04/27/book-review-albions- see...](http://slatestarcodex.com/2016/04/27/book-review-albions-seed/)

However, the goal to reduce homelessness to 0% for the vast majority in the set of people who WANT a home is one I can support - even better if that desire extends beyond white countries.

<comment><USER17> We can start by providing homes and medicine to people who need and want homes. We'll work on the hard cases later.

</comment></comment></comment><comment><USER19> It's great that so many people are driven to help this guy: donate money, etc. But stories like this can/should to be leveraged to raise awareness and engage the society to solve this problem. In a country that prides itself on abundance and opportunities, homelessness is a disgrace to us all.

Startup folks - looking for a real problem to solve? How about a system to help pool people like this out of misery?

</comment><comment><USER20> This is why I unconditionally support [https://en.wikipedia.org/wiki/Basic_income_around_the_world](https://en.wikipedia.org/wiki/Basic_income_around_the_world)

</comment><comment><AUTHOR> I appreciate everyone taking the time to read this post.

</comment><comment><USER21> There is a GoFundMe page set-up for this guy - no idea how legit it is. Can anyone confirm?

[https://www.gofundme.com/NeilTortorella](https://www.gofundme.com/NeilTortorella)

Edit: He's also on Twitter.

[https://twitter.com/ntortorella](https://twitter.com/ntortorella)

<comment><USER4> It's legit. They're working with Neil to get some GFM funds released ASAP. He had a paypal set up , and I donated, but Paypal has frozen his funds for 30 days (nice).

</comment></comment><comment><USER22> There a gradation between intermittent homelessness and chronic homelessness. Intermittent is not that rare - I even experienced a bit of that my self at one time. Chronic may be due to more deep seated issues and hard to get out of. It sounds like you have the drive to eventually escape it.

</comment><comment><USER23> I recently sold everything I owned and started living out of my converted dodge caravan while I was prototyping what I wanted to build next. With an eye on my burn rate, I lived as cheaply as possible. I can tell you without a doubt that there is no natural system in place for homeless to get out of that rut, and it looks and feels dehumanizing.

I wasn't completely broke but I couldn't keep affording rent as expensive as it was. I was able to shower at a gym, and worked out of Tech Shop on what I was trying to build. But it's hard -- like super hard to just be homeless. The social stigma associated with the word alone is hard for people to get beyond. I would often hear, "But you don't seem like the type to be homeless" and then they would slowly just distance themselves from talking to me. Super weird.

I have been harassed by cops, you feel extremely transient and embarrassed just to be alive at times. Sleeping in a van sucks too. Street noises keep you up, cramped for space, etc. On the up side there is a contingent of tech people that are doing the same thing, so I had the pleasure of meeting some others like myself.

I've never taken up the opportunity of food, shelter, or clothing offered by the city, because frankly I'm doing this on my own accord, so I can't speak to how that part of the system helps people get back on their feet.

After this entire experience my heart breaks every time I see a fellow human having to resort to sleeping in the cold, wet, outdoors with no shelter and nothing but some cardboard and discarded newspapers to cover up with. I often wonder how close I could have come to being completely broken by this decision, and what coincidences led someone down this path. In the end it has helped me understand that we must all care more for one another, no matter what.

<comment> k-mcgrady I'm not trying to be rude when asking this but why would you choose to become homeless to prototype a business/product?? I've seen this come up several times on HN over the last few years and every time it blows my mind, especially when the person then goes on to talk about how difficult life is.

I'm guessing you're in tech as you're on HN - why not keep your day job and work on your business from 7pm-3am every night. Save some money while you do this and then leave your job when you can afford to?

It seems like a lot of tech folks have adopted the whole starving artist approach to starting a business when it is entirely unnecessary. I mean, even if you don't want to be an employee and want to focus on your product, move somewhere inexpensive, work freelance a few hours a day to support yourself. It just seems insane to me that anyone in this industry would choose to be homeless when they really don't have to.

If a lot of people are making this choice voluntarily I'd say there's a major problem in the industry and how people view the path to a successful business.

<comment><USER23> For me I've noticed a huge difference in creativity and authenticity in my products when I've devoted 100% of myself to it.

There is a major problem in the industry. There is no one path to a successful business.

I find my time is more valuable than my comfort. To each their own.

<comment> k-mcgrady I can understand your point but you're not just giving up comfort - you're giving up something we all consider a basic necessity: shelter. I'm willing to bet the end result of your work, whether you do it your way, or do it part time, will be the same. I don't want to come off condescending but the attitude (and it's not unique to you, I've seen many other people with a similar attitude) seems like that of someone who has been brainwashed by the SF/SV startup culture mythology.

<comment><USER24> His Dodge Caravan is shelter, which is pretty fancy shelter if you were from a poor village in Africa so I think he'll be alright. If he's not brainwashed by pain = gain, then I think what he's doing is really cool.

<comment><USER25> That's not true, because in a poor village in Africa you'd have family to look after you and keep you well. You also won't have police harassing you all the time. Lastly, it is easier to find a legal and free place to use the bathroom in a poor African village.

</comment></comment></comment></comment></comment></comment><comment><USER26> People actually fall for this? He made a long, sob-story blog post about how miserable he was being homeless and how he wishes he had more money so he could afford more nutritious food.

And then people sent this guy over $40k? For no reason?

I need to get into the sob-story business.</comment>


A Short Guide Through the Universe of Blockchain Based Micropayment Systems - <AUTHOR> https://blog.coinfabrik.com/a-short-guide-through-the-universe-of-blockchain-based-micropayment-systems/ <comment><USER2> great article!</comment>


With book on Go, Kernighan guides students at Princeton and beyond - <AUTHOR> https://www.princeton.edu/main/news/archive/S45/61/59I61/index.xml <comment><USER2> I wrote a review of this book at InfoQ earlier this year:

[http://www.infoq.com/articles/the-go-programming-language- bo...](http://www.infoq.com/articles/the-go-programming-language-book-review)

There's a free chapter available from the book's website [http://gopl.io](http://gopl.io) which should give you an idea of what the rest of the book is like. The intro goes into a little bit too much detail but if you gloss over that the remaining chapters are pretty else detailed. There are some nuggets distributed through the book but you could easily gloss over them if you were skim reading it, such as learning that exported identifiers begin with an upper case letter and those that are private are lower case.

<comment><USER3> from the book: The Body stream is closed to avoid leaking resources.

I would have thought that a modern language would automatically take care of such things.

<comment><USER4> I'm not sure exactly where you see that so I'm not entirely sure of the context (I tried looking in the first chapter), but a general problem with garbage-collected languages is that while the runtime will eventually get around to cleaning up unused resources, you don't always have guarantees about when. So you still generally need to close files when you're done with them, or you may run out of filehandles. I've encountered this issue in multiple languages, it's not Go-specific.

<comment><USER3> Its on page 16 when they are showing how to download multiple urls concurrently - which is cool. In Firefox Ctrl-F "leak" works for me. [http://www.gopl.io/ch1.pdf](http://www.gopl.io/ch1.pdf)

</comment></comment></comment></comment><comment><USER5> I should have figured out context based on the name Kernighan, but the word Go (especially as it relates to google) is awfully overloaded for the time being.

<comment><USER6> Fooled me too. Aren't we supposed to refer to it as "golang" for this very reason?

<comment><USER7> The language is officially called Go and often referenced as Golang.

Go should be rebranded Golang (while keeping the go command) in my opinion: the language is still fairly young and has been developed to be the C for the 21st century but "Go" is nearly as bad regarding SEO as "C".

There is still time to change the name before Go becomes the programming language taught to people who start programming (and are googling a lot to learn more about it). I would also love to see this transformation so that I can finally know if the new trendiest article on HN is about AI or Golang!

<comment><USER8> Do you think Go will become "the" language students and beginners are taught? Why? (I'm genuinely curious!)

<comment><USER7> I (and a lot of other French students) have started programming during my bachelor's mainly in Java and C. I now develop in Golang and I know it would have been better for me to start with it:

\- The logic of Golang is straightforward, e.g. you need to import the package fmt to do a fmt.Println("") in Golang but you do not need to explicitly import anything to do a System.out.println("") in Java. Some things could still be weird for a beginner, e.g. methods like len(), but the official documentation gives a clear explanation about a lot of things.

\- gofmt, the best way for a beginner to understand what is pretty code. Golang forces you to write clear code (e.g. no unused variable) and that is an excellent way to learn as a beginner.

\- The goroutines / gochannels are simple to understand, I wish I would have started concurrent programming by developing in Golang instead of C.

\- Golang works on every computers and installing it is simple (simpler than installing Java and Eclipse).

This list is subjective, other languages like Python are also excellent for new developers from what I heard but Golang could also do the job.

<comment><USER9> > \- The logic of Golang is straightforward, e.g. you need to import the > package fmt to do a fmt.Println("") in Golang but you do not need to > explicitly import anything to do a System.out.println("") in Java.

You don't need to import println in Go[0]. The logic is exactly the same[1]: there's a pre-imported "prelude" (java.lang in Java, builtin in Go) and you import the rest.

> \- Golang works on every computers and installing it is simple (simpler than > installing Java and Eclipse).

Why do you have to install go alone but java _and eclipse_?

[0] [https://play.golang.org/p/ZWLaVuJNgq](https://play.golang.org/p/ZWLaVuJNgq) you don't need to import append or cap or complex128 either

[1] and the same as in more or less every language out there

</comment></comment></comment></comment></comment></comment><comment><USER10> I have read the book this article is referring to. Contrary to the raving reviews on Amazon, I wasn't that impressed by it. I imagine that it is a great book for those coming from dynamically typed languages, but if you already know C, for example, the book is probably way too verbose for you.

<comment><USER11> I tried to power through it last month but couldn't do it despite my best intentions.

Book is a major snoozefest and nothing like its famous cousin 'The C programming language' . I credit the C programming language as one of the books that made my choose writing code as a career. This book on contrary can make no such claims.

Save your money and stay away from it.

<comment><USER12> I would have quite the contrary verdict: if you are an experienced programmer and want to read a book about Go, this is the book to get. If you are a programmer, any book which tries to cover a language thoroughly will have slow parts, because they might not be entirely new to you. Yet they need to be told to be thorough. But this book is way faster paced than many books about a programming languages and it is full of short programs, which pack a lot of functionality in a few lines of code - often a small eye-opener.

<comment><USER13> But if you're an experienced programmer, why get a book at all? Effective Go and the Go language specification (which unlike most specifications is very readable) tell you what you need to get started.

<comment><USER12> Oh, I got myself started with online resources and was using Go for some months when I got the book - I mostly got it because of the author, to match my "The C programming language". And because I was reasonably fluent with Go, certainly some parts were redundant for my knowledge, but I was very pleasantly surprised how much I still learned from this book and that is why I recommend it. Sometimes it was a little detail in the sample programs which made me say: oh, I had not thought of that.

</comment></comment></comment></comment></comment><comment><USER14> The magic of Kernighan:

"When we were choosing among typesetting systems, Brian never let on that he was one of the original authors of Troff, the system we ultimately went with," Donovan said. "I realized this only after researching many early papers on digital typesetting; Brian co-wrote all of them."

<comment><USER15> It's funny how times change. My first thought was "that's a conflict of interest and it would've been polite to mention it." He apparently doesn't believe that his collaborators might have their own ways of dealing with conflicts. But then: I think it's a generational thing. He is from a world where people have simple allegiances and hidden conflicts are rare. In the Internet age relationships are so fragmented conflicts of interest are part of the day to day collaboration process.

</comment></comment><comment><USER16> Brett Slatkin wrote a positive review from the perspective of an experienced Go programmer: [http://www.onebigfluke.com/2016/03/book-review-go- programmin...](http://www.onebigfluke.com/2016/03/book-review-go-programming- language.html)

</comment><comment><USER17> golang is a nice language but I just can't find a reason to use it over other languages for anything other than networking/server projects.

How many HN readers are using golang for things you would normally use Java or C++ or Python or ... for? What is it you are working on? And how have you found using golang?

<comment><USER18> Originally it was positioned as a 'systems' programming language (i.e. the C/C++/Rust/D domain) - the community quickly re-oriented itself to more of a Python replacement for the obvious benefits it offered.

Network/server projects is exactly what I see it being handy at. You get a fast compile-time language that can do things with your logs/analytic aggregate information in an ad-hoc fashion (really fast compile times and better-than-dynamic-languages-performance), which previously would have costed a lot of time in learning the whole Pig/Hadoop/etc ecosystem or a lot of money in any of the BusinessObjects-esque tooling.

Gofmt eliminated styling wars, go doc integration is handy, great 'batteries included' tools out of the box for, typing safety that's comfortable for people who are used to dynamically typed languages to move over without too much hassle[1]. Out of the box code-coverage tooling, good DVCS support, import support for Github is clever (though arguably not the best idea re: security, handy nonetheless since you avoid having YetAnotherPackageManagerWar (pip vs setuptools in Python). The lack of generics (interface{} is such a hack, just like void * in C) is problematic for some, unfortunately.

I don't use Go much because I'm a self-admitted typed language elitist but it is definitely a well-designed language[2].

[1] I don't think the average Pythoner really wants to think about co/contravariance unlike in Scala, or Haskell98's type system + the bevy of lang extensions that fall in and out of fashion. [2] Though there's tons of room for improvement-- my hope is that Go moves at the Meijers-C# pace which seems to be a perfect trade-off between adding features not too slowly (i.e. the first 15 years of Java/JVM -- only recently has this changed) but not too quickly either (stability is certainly important, no one wants to see their old code break because a new keyword was added which you previously used as a variable; or far worse, subtle semantic changes in pre-existing constructs).

<comment><USER19> Go was created to do what Google does - server side software run in huge data centers. C++ was too bug-prone, and Python was too slow. Go has the right feature set for that job. Google then provided good libraries for most of the things you'd want to do on a server. It lets mid-level programmers do competent work without much trouble.

It's not a great choice for operating system development, real time work, client side code, graphics, games, supercomputing, or "frameworks". That's OK. For the job it was designed to do, the features are there.

<comment><USER20> The main problem with Go is that it was originally pushed by its developers as the perfect language for these applications, and it's still actively pushed as a systems language in some circles.

The Go language FAQ still states that no "No major systems language has emerged in over a decade". Besides ignoring the system languages which did emerge, this sentence misleads the reader into thinking that Go is a systems language.

And I'm not talking about garbage collection here, which is often cited as why Go can't be a systems language. GC makes it hard to write some of the applications of a systems programming language, such as OS kernels and games, but it's not mutually exclusive, and OSes have been written in GC languages before (Lisp Machines, Singularity with Sing#). It's the entire approach: Go offers its own scheduler (which is really great, but if you need to use something else, you're in for some pain) and no support of writing dynamically linked modules. It makes go very inconvenient for most common system applications, unfortunately. Essentially, it's manages to be less high level than C++ (it has fewer robust typing and features), while not being low level enough to beat C++ in the same time (very inflexible binary target, GC-only, no inline assembly).

<comment><USER19> Go, the language, is better than Go, the PR. The early promotional materials claimed way too much. Some of those documents are still out there, especially "Effective Go". But the language, although overhyped, came out OK.

Go is really the successor to Java and COBOL. It's what you write your business logic in. We needed that. Java had accumulated too much excess baggage.

</comment></comment></comment></comment></comment><comment><USER21> On the positive side, taking COS 333 with Kernighan could not possibly be worse than taking it with Koenig!

</comment><comment><USER22> Direct link to the books website: [http://www.gopl.io/](http://www.gopl.io/)

</comment><comment><USER11> does gooracle work with 1.6 vendoring ? I can't seem to find an issue tracker for the project.

</comment><comment><USER23> I don't understand why we "need" textbooks, specifically in the world of Computer Science. Most of the amazing work done to make computers are what they are today is available online.

<comment><USER24> Carefully crafted textbooks are comprehensive, balanced, and have a good learning curve (not too steep, not too shallow). Perhaps as importantly, they are edited and contain far fewer errors than a typical blog or Stack Overflow post. As such, they are invaluable as an introduction to new topics.

Just to give an example: reading Hopcroft, Motwani & Ullman is far more effective than trying to scrape together automata theory via blog posts or Stack Overflow. As a beginner, you can't even identify what is correct and what is wrong.

<comment><USER23> Maybe it's just the books for my course, but I have never seen a book with up to day information, a lack of spelling/subject matter errors, and an easily digestible format.

Every textbook I buy has turned into a huge paper weight.

Can you recommend some textbooks that aren't like that? I'm interested in EE, CE, and CS (Software engineering, DSP, and concurrency).

<comment><USER24> _Maybe it 's just the books for my course, but I have never seen a book with up to day information_

Basic CS theory does not really get outdated. There's a couple of dozens book that I could recommend. Anything from Sedgewick & Wayne to Hopcroft, Motwani & Ullman.

<comment><USER23> The theory might not be out of date, but the notes on implementation are quickly outpaced.

</comment></comment></comment></comment></comment><comment><USER25> Page margins are so small!

<comment><USER26> I had a look at the PDF and the margins are normal for a magazine, but the font size is what I would consider normal for a book, which means there are too many words per line.

For designers: technical publications should have larger margins than a magazine, to leave room for notes, and smaller margins than a book, to save room for graphics.

<comment><USER27> As an interesting aside, the article points out that the book was formatted with troff.

<comment><USER28> As was _The C Programming Language_ 38+ years ago — at about the same time as troff was rewritten in C. Maybe it would have been appropriate to rewrite troff in Go for this one!

<comment><USER27> And by the same programmer, namely the author.

</comment></comment></comment></comment></comment><comment><USER29> What problems would you rather attack with C + Go vs. a somewhat more mature C + Python?

<comment><USER30> As someone who has much more experience with Python, the only time I reach for Python is the odd case where there isn't a comparable Go library (think pyqt). Writing Go programs is just easier than Python--the language is much simpler, static typing is a huge boon, documentation for all packages is available at godoc.org in a consistent format, great standard library, single-binary deployment, great concurrency, more performant, standard formatting, standard testing tools, better static analysis support (IDEs can autocomplete, for example), etc.

<comment><USER31> FYI [https://github.com/visualfc/goqt](https://github.com/visualfc/goqt)

<comment><USER30> Thanks; I'm aware. The project is nowhere near mature though. Not compared to the Python Qt bindings, anyway. It's also not actively developed.</comment></comment></comment></comment>


Show HN: Truple - Screenshot Monitoring/Accountability App for Android - <AUTHOR> https://truple.io <comment><AUTHOR> What we do on the internet should be kept private from the world, but not from everyone. Those closest to us should have a degree of insight into our digital lives.

Truple was built in an attempt to make this happen. You can no longer "keep the computer in the living room" (a semi-public area), because we all have computers in our pockets (smartphones).

Having that little bit of accountability can make a huge difference in the decisions we make, whether that's as a son, daughter, husband, wife, girlfriend, boyfriend.

<comment><USER2> An interesting philosophy, though not necessarily one I have.</comment></comment>


Case against behavioral advertising is stacking up - <AUTHOR> https://techcrunch.com/2019/01/20/dont-be-creepy/ <comment><USER2> God I hope it's this easy. That those of us outside of Europe don't have to fight an uphill battle for regulation, and this all turns out to have just been a bad dream that takes care of itself.

<comment><USER3> There is one hitch and it's a doozy. This invasive targeting may be neutralized by market forces when it comes to buying dish soap but it's proven frighteningly effective in swaying voters even before the internet. Politicians conduct expensive in depth polling and it's because it works. The move to using data collected online isn't going anywhere and the normalization of this in advertising helps them.

<comment><USER2> Yeah, but political ads 1) won't sustain the adtech industry by themselves 2) are much easier to convince people to regulate/outlaw

<comment><USER4> It was also politically popular in the U.S. to outlaw unlimited donations to political campaigns from corporations, and then that law was struck down by the Supreme Court.

<comment><USER2> I'm not saying it'd be easy, but it's a much less complicated topic than applying regulation to all of online privacy and advertising at once.</comment></comment></comment></comment></comment>


Google/Trax – Understand and explore advanced deep learning - Bella-Xiang https://github.com/google/trax <comment><AUTHOR> Word is that internally at Google, among a few teams, and then also externally, Trax/Jax are putting up real competition to Tensorflow. Some teams have moved off of tensorflow entirely. Combined with the better research capabilities of PyTorch, the future of tensorflow is not bright. Given that, Tensorflow still provides the highest performance with regards to production usage, and has tons of legacy code strewn throughout the web.

I would argue that this is not the fault of Tensorflow, but rather the hazard of being the first implementation in an extremely complex space. Seems like usually there needs to be some sacrificial lamb in software domains. Somewhat like Map/Reduce was quickly replaced by Spark, which has no real competitors.

<comment><USER2> >I would argue that this is not the fault of Tensorflow, but rather the hazard of being the first implementation in an extremely complex space. Seems like usually there needs to be some sacrificial lamb in software domains.

I'd agree if Google didn't have a history of building things with (arguably) unnecessarily complex APIs, like Angular1. I remember when Angular and React were new, seeing an Angular "cheatsheat" that was around 14 pages; the equivalent React cheatsheet was only 2 pages. Now, I do love the idea of Tensorflow 1, essentially a functional DSL to explicitly construct computation graphs, but Google's implementation of that idea was suboptimal: hard-to- follow error messages, not intuitive, multiple APIs to do the same thing (and continual API breakage as new APIs are introduced), difficult to debug. And even if the graph "compiled" correctly, it could still fail at execution time.

It's like they were building a programming language but lacked anyone with language design or PL theory background. Which makes sense given that anyone passionate about language design might prefer to work for somewhere closer to the cutting edge like Microsoft (C#, F#, Typescript, F*...), Facebook (Bucklescript, Hack), Apple (Swift) or Mozilla (Rust). Google does have its own languages, Dart and Go, but they're notable for ignoring and rejecting respectively cutting-edge PL theory (e.g. not disallowing null pointers, and in Go's case not even supporting parametric polymorphism). The day-to-day languages used at Google are also not particularly appealing to a PL enthusiast: Python, Java and non-modern C++.

Google software often also seems to care more about enforcing their idea of "best practices" on the user than about user experience. Tensorflow's C++ support is an example of this: it requires using Babel. As Babel doesn't easily support integration into an existing C++ project, this essentially means you have to change your whole project over to Babel just to use Tensorflow C++, which is a huge amount of effort to go to just to use a library. Especially when it's probably quicker to just rewrite the model in PyTorch, which provides a simple header file and static library for linking, the standard way of distributing C++ libraries. PyTorch also provides a nicer C++ API, because it's not confined to the ancient C++ standards that Google enforces, so can provide a modern API that's not full of macros (macros in modern C++ are considered bad practice; should only be used when there's absolutely no alternative).

To be fair, Google is really good at engineering language runtimes. Dart, Go and Tensorflow are all impressive works of engineering. They just seem to lack the organisational DNA for making them really nice to use, which maybe makes sense given the main source of their revenues is search/AdWords, the success of which is primarily driven by superior science/engineering. Compared to e.g. Facebook and Microsoft, that were/are in the business of making pretty things that users like to use (operating system, word processor, website). Or even comparing to Apple: people pay a huge premium for Apple phones over Android phones, in spite of their worse hardware, because of their more appealing design.

<comment><USER3> I would actually argue that the very first version of Tensorflow was great. I don't quite remember what version number that was, but it was well before 1.0. It was basically just a better version of Theano with a single way of doing things and very explicit graphs. I remember I ported all my Theano code without issues and loved it.

From then on it all went downhill. Lots of duplicate APIs were added and the code grew increasingly complex and opque because everyone at Google wanted in. Everyone wanted a slice of the pie to pad their resumes and internal performance reviews to be able to say "Look, I contributed this to TF! Promote me!" \- Now it's a typical example of Conway's Law - a big mess that mirrors how messed up the internal incentive structure at Google is.

<comment><USER2> Makes sense. I only started using it after it'd already been though tf.nn, tf.layers, and tf.estimators (which eventually got replaced by tf.keras, around the time I moved to PyTorch, and the time dropout was broken for two releases.. [https://github.com/tensorflow/tensorflow/issues/25175](https://github.com/tensorflow/tensorflow/issues/25175)). I remember though once spending half a day just trying to figure out why a graph that built correctly kept failing at execution time: I ended up having to binary-search the code changes because I couldn't find the cause of the error in the stack trace, something I've only experienced previously in template heavy C++ code. I don't imagine that situation was much better in 1.0.

<comment><USER3> The error message have always been an issue, even with early releases. That being said, it was much easier to trace errors when there were fewer high- level functions and you had to build the layers yourself. You fully understood what the graph looked like, and it was mostly obvious where something is likely to go wrong.

Sure, it's a bit more work, but in the long run it saves times because it avoids the situation where you need spend half a day trying to understand opaque TF code touched and extended by 100 different developers.

EDIT: Also, I LOVE the Github issue you posted. It's such a beautiful example of complexity cost when a large number of people is working on a project and there's no longer a single person that fully understands how code interacts across modules.

<comment><USER2> I'd love to know what the solution is to prevent that eventually happening to a project, if one even exists. PyTorch seems to be doing better, but maybe that's just because it's a younger project. I'd be interested to see a blog post comparing Facebook's incentive structure for maintaining products to Google's.

</comment></comment></comment></comment></comment></comment><comment><USER4> Is it just me or is there zero explanation to what this actually is?

It somehow "helps" me understand deep learning but its tutorial / doc is one python notebook with three cells where some nondescript unknown API is called to train a transformer.

Huh?

<comment><USER3> You're not alone. Even as an ML researcher at ex-FAANG I have no idea what this is. Is it a collection of well-documented models built on top of jax?

I could probably figure out what exactly this is if I spend an hour looking through the code, but it should be made clear in the README.

It's kind of funny, I think it's completely opaque what this actually is to 99% of HN users, but for some reason it's being upvoted because it has Google and Deep Learning in the name.

<comment><USER3> 15min of looking through the code and my best guess right now is that it's a reimplementation of higher-level primitives, such as optimizers and layers, found in Tensorflow/Pytorch/etc, but based on a variable backend (you can pick jax or TF), together with a collection of models and training loops. I think the idea is that most of the code is simpler and more modular than what you would find in TF, which makes the models easier to read.

However, I don't yet understand what the use case is, or how it helps you to "learn" anything.

</comment></comment></comment><comment><USER5> Note that, in this space, there is also Flax[0] which is also built on top of Jax bringing more deep-learning specific primitives (while not trying to be tensorflow compatible unlike Trax if I understand correctly).

[0]: [https://github.com/google- research/flax/tree/prerelease](https://github.com/google- research/flax/tree/prerelease)

</comment><comment><USER6> Is this like a layer on top of TensorFlow to make it easier to get started? Is it meant to compete with PyTorch in that respect?

I wish the title and description were more clear. They make it sound like a course but it is a library/command-line tool.

<comment><USER7> So Tensorflow 2 is built on top of a Keras API.

Its supposed to be better UX, but Pytorch really is far superior UX.

</comment></comment><comment><USER8> I was recently surprised to discover that Jax can't use a TPU's CPU, and that there are no plans to add this to Jax. [https://github.com/google/jax/issues/2108#issuecomment-58154...](https://github.com/google/jax/issues/2108#issuecomment-581541862)

A TPU's CPU is _the only reason_ that TPUs are able to get such high performance on MLPerf benchmarks like imagenet resnet training. [https://mlperf.org/training-results-0-6](https://mlperf.org/training- results-0-6)

They do infeed processing (image transforms, etc) on the TPU's CPU. Then the results are fed to each TPU core.

Without this capability, I don't know how you'd feed the TPUs with data in a timely fashion. It seems like your input will be starved.

Hopefully they'll bring jax to parity with tensorflow in this regard soon. Otherwise, given that jax is a serious tensorflow competitor, I'm not sure how the future of TPUs will play out.

(If it sounds like this is just a minor feature, consider how it would sound to say "We're selling this car, and it can go fast, but it has no seats." Kind of a crucial feature of a car.)

Still, I think this is just a passing issue. There's no way that Google is going to let their TPU fleet languish. Not when they bring in >$1M/yr per TPU pod commitment.

<comment><USER9> You can use tensorflow's tf.data, I think.

<comment><USER8> Sort of. The way you do it is to scope operations to tf.device(None), which selects the TPU's CPU. (I think it's equivalent to using the first device in sess.list_devices(), which is the CPU.)

You can scope operations in tf.data, sure, but you can also execute arbitrary training operations. I use this technique to train GPT-2 117M with a 25k context window, which requires about 300GB memory. Only a TPU's CPU has so much.

That's why it was surprising to hear Jax can't do that. It's one of the best features of a TPU.

</comment></comment></comment><comment><USER10> Not sure why one would bother with this. This is a less mature version of PyTorch. And I know there's XLA and stuff, but I've yet to see any major benefit from that for research in particular. A ton of time in DL frameworks is spent in the kernels (which in most practical cases means CUDA/cuDNN) which are hand-optimized far better than anything we'll ever get out of any optimizer.

<comment><USER11> If you're talking about Jax, there's a couple different reasons to bother for research

1\. Full numpy compatibility.

2\. More efficient higher order gradients (because of forward mode auto diff). Naively it's asymptotic improvement, but I believe Pytorch uses some autodiff tricks to perform higher order gradients with backwards mode, at the cost of a decently high constant factor.

3\. Some cool transformations like vmap.

4\. Full code gen, which is neat especially for scientific computing purposes.

5\. A neat API for higher order gradients.

2\. and 5. are the most appealing for DL research, 1., 3. and 4. are appealing for those in the stats/scientific computing communities.

PyTorch is working on all of these, to various degrees of effort, but Jax currently has an advantage in these points (and may have a fundamental advantage in design in some).

<comment><USER10> From a practitioner:

1\. Meh. PyTorch is close enough to not worry about it, and is better in some places.

2\. Meh. All the methods people use in practice for deep learning in particular do not use higher order gradients. Most higher order methods are prohibitively memory expensive, and memory is at a premium in acceleration hardware (and so is the bus bandwidth - so you can't "swap to RAM"). I do agree that higher order gradients are the next frontier in optimization though - current optimizer research seems to have stalled, so people focus on training with huge batches and stuff like that. Most SOTA models in my field are trained with SGD+momentum - super primitive stuff. I don't see how Jax would solve the memory problem though. You still have to store those Hessians somewhere, at least partially.

3\. Do agree, that's cool if it actually parallelizes nontrivial stuff which e.g. tf.vectorized_map barfs on. Although in a lot of cases you can "vectorize" by concatenating input tensors into a higher dimensional tensor.

4\. Meh. Not sure why I'd want that if I already have tracing and JIT.

5\. This is #2

With PyTorch though, you get close enough to Numpy to feel at home in both, and there's so much code written for it already that you can usually find a good starting point for your research pretty easily on github and then build on top of that.

If you need to deploy, there's also tracing and jit, which lets you load and serve models with libtorch.

I see what you're saying regarding "advantages", I'm just pointing out that PyTorch might be "good enough" for most people. If I were on that team, I'd focus on providing comfortable transition from TF 2.x which is a dumpster fire (with the exception of TensorFlow Lite which is excellent). That, IMO, would be the only way for this project to achieve mainstream success unless PyTorch disintegrates over time.

<comment><USER11> I agree from a practitioner standpoint - but you were talking about research :)

1\. Much of the scientific computing/stats community is stuck in the past. Many are still using Matlab! As opposed to the CS community, who are used to learning new frameworks, offering the ability to "import jax.numpy as np" and having their scripts just run is valuable to that community. As is having an API that they've only just started to become familiar with (and has way more documentation about).

2\. Once again, this is true for practitioners, but not research. Hessian vector products show up in a decent amount of places. For example, if you have an inner optimization loop (a la. most meta learning approaches or Deep Set Prediction Networks) you have a Hessian Vector Product! Perhaps not prevalent in models that practitioners run but definitely something to keep an eye on in research.

3\. My understanding is that it actually does a pretty decent job. Enough that it's useful in the prototyping phase.

4\. PyTorch JIT is neat, and is what I meant by Pytorch team is "working" on it. However, the JIT doesn't do full code gen (thus, significant operator overhead for say, scalar networks) and has significantly less man hours poured into compared to XLA.

5\. I was specifically talking about how you call grad on a function to get a function that returns its gradient. It's a cleaner API than PyTorch's autograd.

Jax is definitely not meant for deployment or industry usage, and I believe their developers hope they'll never be pushed along that direction :^)

I definitely agree that PyTorch is "good enough" for most people. However, among researchers, there's a decent amount of subgroups it could gain favor in.

You'd be surprised how many papers get submitted to ICML/Neurips that don't use PyTorch or TensorFlow at all, in favor of raw numpy, C++, or even MatLab! I think the numbers I had were something about 30% of papers don't use any ML framework. Jax could easily gain favor in this crowd.

There's also the crowd that cares _a lot_ about higher order gradients. Also, admittedly a specific subgroup, but growing. Meta learning people care a lot. So do Neural ODE people. All it takes is for one of these subfields to blow up for higher order gradients to all of a sudden become a lot more appealing.

And finally, you have Google. Google researchers are never going to use PyTorch en masse (probably). If researchers at Google want to switch from TF, their only option is Jax. This is a pretty big subgroup of researchers :)

I definitely agree that Jax has a difficult hill to climb. But, they have a solid foothold within Google, and several subfields very amenable to their advantages.

PyTorch seems like the predominant research framework currently, but if any framework is going to erode their lead, I'd place my bets on Jax.

<comment><USER10> >> You'd be surprised how many papers get submitted to ICML/Neurips that don't use PyTorch or TensorFlow at all

I do keep up with literature and I do some applied research as well, so yeah, I see such things from time to time. The volume of papers is so intense though that unless there are other redeeming qualities if the paper does not use frameworks I already know (TF and PyTorch), I ignore it entirely. I wouldn't say I missed much that could help me in practice. One exception is Leslie Smith's work on cyclic learning rates and momentum modulation - he did it on some ridiculous setup, but it works for what I do.

I'm more surprised how many papers are written for tiny little datasets that you'd never use in practice, especially optimization papers. I mean, come on guys, I get it it's fast to train on CIFAR or fashion MNIST, but those results rarely translate to anything practical. And some papers are just plain not reproducible at all.

>> Google researchers are never going to use PyTorch en masse

IMO they should. It would easily double their productivity, and if Karpathy is to be believed their skin and eyesight would improve too: [https://twitter.com/karpathy/status/868178954032513024?lang=...](https://twitter.com/karpathy/status/868178954032513024?lang=en)

>> I'd place my bets on Jax

As an ex-Googler, I'd place my bets in something else TBH. Google projects that aren't critical to Google's bottom line tend to deteriorate over time. Just look at TF. I'm not cruel enough to suggest it to my clients anymore, even though I could charge twice as much (because it would take twice as long to get the same result).

<comment><USER11> Certainly if you ignore those papers, you'd likely have no issue in practice - I suspect many of them are about more theoretical concerns. Perhaps I'll take a look at/post a list tomorrow.

Either way, I believe that our original discussion was on why somebody should bother. I provided a list of (admittedly) somewhat niche reasons. My personal opinion is that Jax will stick around, and at the very least, provide some neat ideas for Pytorch to ... independently come up with :)

>>> I'd place my bets on Jax

Hey hey hey context! Pytorch is currently dominant in research, so who could supplant it? Anecdotally, since I published my article ([https://thegradient.pub/state-of-ml- frameworks-2019-pytorch-...](https://thegradient.pub/state-of-ml- frameworks-2019-pytorch-dominates-research-tensorflow-dominates-industry/)) there has been more momentum towards Pytorch (preferred networks and openAI).

So if not Tensorflow, then who? I think Pytorch represents a local optima and is "good enough" for most people. So any newcomer framework needs to bring something new to the table, even if it's niche. I think Jax looks the most promising.

<comment><USER10> I'd like to see something based on a proper, high performance, statically typed programming language s.t. I could have a modicum of certainty that things would work when someone changes something. With Python, sadly, you don't know until you run things and hit error conditions dynamically. This is unacceptable in larger codebases.

<comment><USER12> Even then shape errors would require a dependent type system not found in most static languages.

<comment><USER10> There are levels of survival I'm prepared to accept.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> Looking forward to a readme that is properly filled out. Some documentation as well. Looks promising.</comment>


FedEx's CEO on McCain, free trade and the tax bias against capital-intensive industries. - <AUTHOR> http://online.wsj.com/article/SB122488966230768509.html <comment><USER2> >We absolutely have to cut the corporate tax. Our current tax rate is about 38%. Even Germany has a 25% rate.

This is so disingenuous; Germany also has a 19% VAT, and also has stronger regulations on industry.

>If we had a lower corporate tax rate with the ability to expense capital expenditures, guess what? We'd buy more triple sevens.

He wants to be able to write off the purchase of planes as expenses? What? They already get to write off depreciation on planes, but you can't write off the whole plane because you can sell the damn thing after you buy it.

<comment><USER3> yeah regulation in europe is insane. You fire someone in Europe you have to continue paying their full salary for a whole year or until they get a new job.

Here its wham bam thank you mam, don't forget your box and enjoy living on $1500 a month that you get from unemployment.

<comment><USER4> The reason I hate seeing politics here is that it's usually not up to the usual standards of discourse about hacking and startups.

To use your post as an example, in a few brief lines, you sum up something where there is a glimmer of truth, but there is so much more to be said on the subject that what you have written is basically inaccurate. There are, in reality, three broad models in 'Europe'. The 'southern' model: Spain, and Italy (which I know quite well) don't give you a lot of government unemployment benefits, but it's very difficult to fire someone. France and Germany give you lots of benefits if you're fired, and it's also difficult. In Denmark, it's easier to fire people, but the obligation to care for fired employees is viewed as a collective one, payed for with taxes, rather than a burden that falls exclusively on the employer in question.

<comment><USER4> Actually, that's just one reason. Other problems include:

* Attracting people who care more about talking about politics than other things, which creates a negative feedback loop.

* 'Pack' voting down of whoever is currently unpopular with the current groupthink. This is reinforced by the people above.

</comment></comment></comment></comment><comment><USER5> That's pretty much the case against Barack Obama: Trade (BIG BIG BIG win for McCain), Taxes (small win for McCain), Subsidies (big win for McCain), Healthcare (big win for McCain: got to address cost, not access), and Energy (slight win for McCain).

Barack on the other hand is better on avoiding World War III, Big Brother, and Theocracy.

It's a depressing choice.

<comment><USER6> Question.

As a non American, I wonder what brings US to a (relatively) extreme position on Health. Technicalities aside, most places consider health as part of the suite of public responsibilities.

Does a significant portion of the opposition to the public assuming responsibility for health also oppose the public assuming responsibility for education? I ask because it seems a close parallel.

<comment><USER7> We believe that health care is not a right but a privilege. The Constitution does not ensure the right to "life, liberty, the pursuit of happiness, and $10 copays."

Moreover, we believe that almost everything the government does, it does poorly. Schools would be a great case in point.

<comment><USER6> I actually meant that as a genuine question without meaning to discuss it but..

 _We believe that almost everything the government does, it does poorly_

There is definitely some truth in that in a general sense. But it seems to me that it is really a technical side issue in this particular case. The efficiency costs/gains are debatable. Even if you think you see an answer, it's marginal. It largely depends on what you consider the 'output' of a healthcare system. If you take traditional public health indicators such as life expectancy at birth, rates of various avoidable deaths & such, as the output of healthcare systems, private health systems are generally 'less efficient.'

What I mean to suggest with the above line is that a lot of practical pieces of general world views & rules of thumb (Government should not provide services because it is inefficient) are taken to specific contexts regardless of their validity in these cases.

That's why I always find it very hard to believe that anti public health arguments are truly decided on technical grounds. This is a moral not a technical issue.

 _We believe that health care is not a right but a privilege._

I'm not sure if you were being sarcastic. But it does seem closer to the point. In other words, _I_ have no duty to ensure _you_ have healthcare. I have a duty to ensure you are not murdered, but not that you don't die from diabetes.

If you take what seems to be a current debate in US politics, it seems very fundamental & moral rather then technical: Assume the responsibility or try to enable more healthcare without assuming the responsibility.

I think most would probably agree that regardless of the tax regime & regardless of price of medical care (within possible levels), some people will be left without. Many people in fact.

Short of assuming responsibility for health, you are debating ways of getting the number of uninsured from 17% to 12% or 10% or some moral equivalent. Some people will be left out. But that's ok because they chose that or made a dumb mistake or had a fighting chance.

<comment><USER7> I don't think it's safe to measure various health care systems against each other. The prevailing theories these days seem to suggest that most of the problems are due to lifestyle. Diet, pollution, obesity, exercise levels, etc. all play a major part as well, and those have little to do with the health system. So I don't think it's safe to say that publicly funded health systems would work as well here as they do elsewhere.

Also, I always try to resolve arguments on practical grounds first. For instance, I feel that moral stances on drug laws are irrelevant, because the facts show that drug laws don't stop drug use, cause violent crime and many deaths of dealers/distributors, policemen and civilians. So even if you accept that drug use is immoral, just like with alcohol before it the laws still should not be on the books.

A law that has almost entirely negative effects is not a good law no matter what the moral justification.

<comment><USER6> _I don't think it's safe to measure various health care systems against each other_

OK. How about measuring various health care systems against themselves? What I am putting forward is that given that we are talking about improvement in the types of metrics used to compare health care systems, the US system would improve it's output by being public to an extent.

Various implementations are possible from direct government ownership of hospitals to means-tested health care subsidies & everything in between. Obviously crappy implementation has the ability to make things worse. But within the realm of the currently probable, steps taken in that direction would probably lead to an improved result.

But again, that's a purely technical line of argument. I think that in this case the rule of thumb economic liberalism is wrong. I'm reasonable happy to let economists bash that one out. But I do think that in the absense of an overwhelming victory for one of the practical debates, the moral argument here is very strong.

 _practical grounds_

That's an area worthy of discussion in itself. Even if you do believe that drug use is deeply immoral, but see that the consequences of prohibition on are so severe, it'd be very rational to let it slide. But then, I wonder what I would think if I did understand drug use to be deeply immoral in the same sense as rape or murder is immoral. Would I allow legalised rape if the long term if the consequences of prohibiting it were as severe as the drug case. I dn't know how to answer that. (*Most would say no to a purely utilitarian approach [http://www.nysun.com/arts/putting-practice-into- ethics/69595...](http://www.nysun.com/arts/putting-practice-into- ethics/69595/))

For me that particular issue is all about practical. It's hard for me to see any justification for drug prohibition on moral grounds, just the opposite. It's an infringement on liberties. So there have to be net benefit reasons. But I would consider the flipside. In Australia (where I live) Alcohol & gambling are legal. Certain communities (usually extremely remote communities) here have severe social problems linked to abuse of these. Very severe. Some have decided that Alcohol prohibition (like dry counties in the states) are necessary to get the situation under control.

Even though I think individuals should have the right to consume alcohol, in these circumstances the prohibition creates large net gain for the community. I'm OK with that.

<comment><USER7> I think even in the case of rape, practical grounds matter. If making it illegal didn't decrease the amount of rapes but increased violence and furthered the profits of organized crime families, why would one make it illegal? You'd simply have to attack the problem from another angle, as we should be doing (but aren't) with drugs.

Of course there are gray areas. What if rape laws decreased rape by 10%, but increased other forms of violent crime double that?

But in general, if a law's overwhelming result is negative, like our drug and gambling prohibitions, there's no point to them no matter how moral they may be. The money and effort would be much better spent on prevention and rehabilitation.

Unless your communities that are so afflicted are much different than ours, I expect prohibition won't work much better for you than it does for us. People are going to get what they want. Demand for vices seems to be inelastic the world over.

<comment><USER6> _I think even in the case of rape, practical grounds matter._

People disagree with you instinctively. It seems that we have Deontological tendencies by nature. Mostly people do not find utilitarian arguments compelling. You have to weight the scales very far in favour of utility before people will violate a principle.

 _the dry communities_

It's an extreme case. These are mostly very small very isolated (like 2 days drive to a store) communities. Generally self imposed by direct democracy or community elders/leaders. I don't know if it works. I don't know if it helps. But that is besides what I was saying. Assuming it's a net gain, I approve.

*It's interesting that we arrived here from the public health care questions. I'm actually surprised that someone open to a 100% practical outcome argument would be so against public healthcare. I expected more fundamental objections: despite the net loss..

<comment><USER7> Yeah, I instinctively disagree with the rape issue too. In fact, I wrote that, thought about it, and deleted it.

<comment><USER6> This is an area with some experiments actually. Peter Sinegr seems to be involved in a lot of them. He's a famous(ish) utilitarian. Considered pretty extreme. Actually, you can almost use his moral prescriptions as a what happens when you take your above reasoning to the extreme.

Anyway, most people are instinctive deontologists. From the above link:

 _"the minority of subjects who did consider that it would be right to push the stranger off the footbridge {Right from a utilitarian/net-good perspective} took longer to reach their judgment, and had more activity in the parts of their brains associated with cognitive activity, than those who said that it would be wrong to push the stranger off the footbridge{Right from a deontological perspecitve}"_

You seem to be a good example. Instinctively/emotionally a deontologist, rationally a utilitarian. A torn man. (;

<comment><USER7> I bet everyone is that way instinctively, just some of us think enough to overcome it, for better or for worse.

<comment><USER6> Most of us are remarkably similar regardless of race, religion, nationality, _education_ etc. are like that.

I think that those who go with a utilitarian approach think harder about the decision, but that might be just because it makes the decision harder. You need to work out consequences. It's a stretch to say it makes it smarter.

But when you get right down to the root of your stack of 'whys,' you generally hit a principle at some stage. When your trying to rationalise morals, that is. Even Bentham the old time 'extremist' utilitarian had 'the principle of equal consideration.'

Your Constitution & other fundamental documents that you sited earlier are essentially principals (held to be self evident, no?). If you are going to try & rationalise your ethics, most strategies can be deciding on what level to define you principles, define them somehow then apply. Most people instinctively do it at the same sort of level as the law. Some mostly pretty bookish characters go to a slightly higher level.

In that respect, the US founding documents (which I am always surprised to hear quoted & treated in the way that they are) conform to that. Confucius as an example goes to a slightly lower level.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><AUTHOR> I apologize for the political content, but the article actually contains very little commentary on the election.

</comment><comment><USER8> I will never use FedEx again.

</comment><comment><USER9> I did consulting work for FedEx.

Instead of asking America to bail him out like we've bailed out banks, Fred might want to look at his company. I've never actually encountered a more inbred group of incompetents. They, like Microsoft, happened to become lottery winners....and like Microsoft, they will watch themselves slowly lose to more agile organizations. He (and McCain) are completely backwards looking.

<comment><USER10> I mailed a FedEx letter once.

I don't believe that running successful business is like winning the lottery. If I did, I wouldn't spend so much time learning about how to form and run startups.

FedEx is a tremendous success story. Created an entire business niche where none existed before. You can either have more of that or less of it. I know where I stand.

<comment><USER11> I agree. We should promote entrepreneurship by doing things like funding universal health coverage -- with the money we save from rolling back the corporate welfare state.

Giving more money to companies that are already successful doesn't encourage innovation; it encourages hoarding.

<comment><USER10> How about we don't "give" money to anybody? Maybe let them keep more of the money they've already earned?

Since when did the entire economic output of the country become ours to decide how to allocate? Did I miss the revolution?

<comment><USER12> The answer as to when some portion of the economic output of the country became ours to decide how to allocate is when a majority of taxpayers approved of it, including some fantastically wealthy folks who earned their money. Those are the breaks of living and doing business in a democratic country.

<comment><USER10> When the question begins with "Since when", I would expect the answer to involve a date. which I believe to be 1913.

The gist of the question was when the default mode of taxation changed to be for social engineering. That answer, of course, is much more complicated.

The point of the question, of course, is that the tax code is a monstrosity and intellectual abortion and to argue that it's broken, but only in these small areas, is to engage in the same idiocy that created the monster in the first place. To understand "when" -- it's roots and history -- is to understand why bickering over details is specious.</comment></comment></comment></comment></comment></comment>


We're going to slam a spacecraft into an asteroid to try to deflect it - <AUTHOR> https://www.technologyreview.com/s/614330/were-going-to-slam-a-spacecraft-into-an-asteroid-to-try-to-deflect-it/ <comment><USER2> Is anyone concerned about unintended consequences here? What if they deflect it and it bangs into another one which deflects another that then crashes into Earth ? Sort of the cosmic version of shooting yourself in the foot. Probably a long shot I suppose, but that popped into my mind.

<comment><USER3> i would be more worried about intended consequences, such as getting so good at steering smaller bodies around and mathing out the trajectories , that it can be weaponized. The accidents , things like orbital procession, are likely to be far removed from the current generation, except for shrapnel from a shattered rocky body, and that is the most immediate concern i can think of happening accidentally.

some of these things are not solid, but are like big bundles of rocks stuck together by dust and frozen matter.</comment></comment>


Hacker Soundtrack: Star Trek TNG Ambient Engine Noise - <AUTHOR> http://www.youtube.com/watch?feature=player_embedded&v=ZPoqNeR3_UA#!

<comment><USER2> This may be the best example I have ever seen of a great idea that has been completely destroyed by a horrible choice of implementation.</comment>