Founding Stories Are Myths - <AUTHOR> https://medium.com/@trevmckendrick/what-reed-hastings-sam-walton-can-teach-you-about-how-to-start-a-company-d38cfe0eafce <comment><USER2> The author is criticizing a genre of narrative that I like to call "career porn." Consider the similarities between "how I started this company" type stories and actual porn:

* It depicts something everyone fantasizes about and offers a quick if ultimately unsatisfying release. Who doesn't imagine themselves building something amazing and being idolized by magazines and the general public?

* It happens in an unrealistic sort of magical fairy land, often in the founder's own hazy, romanticized recollections of their past.

* It only shows beautiful companies/people. You don't need to found a space exploration company to be happy just like you don't need to be with a model.

* It offers no real guidance for how to achieve what it's depicting, leaving viewers confused at best and frustrated at worst. This article touches on the fact that people seem to think all they need is an idea, when that's not what it takes.

* It's most popular with those who are either frustrated with their careers/romantic lives, or are otherwise trying to satisfy a need they feel isn't being met. This one is a little shaky because plenty of people enjoy actual porn in healthy ways, so forgive me for the stretch.

The comparisons go on and on. How healthy your relationship with each is depends on how much exposure to the realities of each field you have had and how mature you are as a person/profession.

<comment> 52-6F-62 > _It only shows beautiful companies /people. You don't need to found a space > exploration company to be happy just like you don't need to be with a > model._

We certainly don't hear much about efforts or successes in anyone's effort to "disrupt" the toilet paper industry, yet it's something most people use daily. It's not sexy, but we all care a lot when it sucks.

<comment><USER3> But people are 'disrupting' the more 'boring' industries - all the mattress/pillow startups, Thinx period panties, etc.

<comment><USER4> I plan on disrupting the garage-based startup business, from my garage.

<comment><USER5> Like so? [https://www.youtube.com/watch?v=2gG56SCs5-E](https://www.youtube.com/watch?v=2gG56SCs5-E)

<comment><USER4> Exactly like that, and especially with plenty Ramen.

</comment></comment></comment></comment></comment></comment><comment><USER6> This is how most myths are born - by winners retro-actively rewriting history and including things like predestination, God's vision in their dreams (see [https://en.wikipedia.org/wiki/Battle_of_the_Milvian_Bridge](https://en.wikipedia.org/wiki/Battle_of_the_Milvian_Bridge)), being The Chosen One, etc as the reason for their success.

Today of course those are not appealing, and just sound crazy, so it is something like "I was just returning a late movie", "I was coming back from my yoga massage and had this idea...", etc.

The important part is that only after winning and looking back the history is rewritten. The boring things like plain luck, or maybe persistence, or enough resources (say because of inheriting money for example) to try some business idea multiple times, failing and try again until one sticks is just not a cool story.

Even more interesting is that not just the myth is born but anything the company did, all practices, rituals etc end up promoted as the cause of success. Anyone notice this? It's the cargo-culting of methodologies. Successful startup did some crazy development practice, but as soon as they become popular everyone starts copying that thinking "surely that is the main cause of their success". What if the successful startup could be have been even more successful without that practice, or maybe it had no impact at all.

How about copying personality traits. There was once a CTO I knew. He fancies himself to be like Steve Jobs. Except instead of copying persistence, intelligence, attention to details and design, understanding what would work and what won't for users, he just copied the part of being an asshole. The idea was that Jobs was an asshole, and look at Apple, that's how I'll have to act to make my company have the same success. It ended as well as you'd expect. Developers who didn't want to deal with that simply left and projects started tanking.

</comment><comment><USER7> Having worked in a startup which eventually went on to become an unicorn (I left very early), I can attest to this personally. As a company becomes more successful, the narrative portrayed in media changes to present a good inspirational story - it never presents the countless challenges which eventually leads to its success.

<comment><USER8> Not to mention that you rarely hear some version of the, "We had the same good idea as some others, but we got lucky in a number of ways, including timing" truth. It just sounds better, and makes for a better book deal, to claim immense powers of foresight coupled with devastatingly effective business acumen.

</comment></comment><comment><USER9> It doesn't just stop at the successful startup stories. It's the same style of stories we face in products successful stories, job offers and love stories. examples:

REGAINE (hair loss treatment) only works for some people, not everyone and if you use it consistently twice a day for the rest of your life.

A job at Google/Facebook/haskell job requires you to study day and night for algorithms/functional programming/implement a lot of random programs to get a hold of all of that.

This couple is in love for 50 years, and they ignore how they had lots of fights and had to have lots of compromises from each of them, with a lot of discipline to show care for each other to maintain this love over the years.

These folks got amazing new houses/entered StanfordU because they worked non stop for the past few years while not spending on other luxury items or they will work tirelessly for the rest of their live to pay the debt.

Life is a grind

<comment><USER10> Paraphrasing a quote on social media I once heard, "People forget social media is like a highlights reel. It doesn't show the full game"

<comment><USER11> Social media makes us depressed, because it makes us compare our behind-the- scenes blooper reel to their highlights of the season reel.

<comment><USER12> I'm a fan of similar, but cheesier, saying, "never compare your inside to someone else's outside"

</comment></comment></comment></comment><comment><USER13> Let's not ignore the fact that Sam Walton had enough cash to _buy a department store_ at the age of 27. That helps too.

<comment><USER14> > Let's not ignore the fact that Sam Walton had enough cash to buy a > department store at the age of 27. That helps too.

So poor people should never try to be an entrepreneur because the world is rigged against them? Well that surely will help reduce the wealth inequality.

<comment><USER15> Everyone should try, but with the understanding that the world is definitely rigged against them.

</comment></comment></comment><comment><USER16> This is why I love the How I Built This podcast. It tells the story of a successful founder from childhood to present day. It discusses early successes and failures that ultimately led to that person becoming an "overnight success" decades later. It doesn't try to build this narrative of them being one-hit wonders, it tells the truth. The truth, which isn't nearly as sexy as people would like, is that building a business takes time, hard work, and resilience.

<comment><USER17> And even then, their messier version of the truth is cleaned up for a lot of the stories.

</comment></comment><comment><USER18> Just as there's only one hero story, at a high level, there's only one founder story.

TLB described this archetype some years ago:

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

</comment><comment><USER19> I don't think it's fair to use that one small piece of Netflix lore as the counter example to the point of the article. I'd categorize Reed Hastings as having one of the more long-term views/strategies in tech and business in general, and he would be the first to say that Netflix became what it has become not because of the lightbulb moment, but because of the long slog they've endured to get where they are. Using that Netflix example comes across as clickbaity.

Not to mention, that particular Netflix myth has nothing to do with the importance of having a lightbulb moment. The point is to provide a north star for the company about the importance of always keeping the customer/user experience top of mind. By charging late fees that exceeded the value of a video, Blockbuster had lost sight of the customer experience, which contributed to Blockbuster's downfall. Meanwhile, maintaining its intense focus on the customer experience helped Netflix navigate what was an impressive shift from mailing DVDs to streaming video online.

<comment><USER20> I could be wrong, but I think the article is saying that the Netflix myth never happened and it is trying to posit that instead of looking at the instance of breakthrough as the beginning, look at the less sexy work and experience that got them to that point.

Granted, while Walton's was certainly successful, I think they'd be better served highlighting someone that had to cut bait on something professionally in the past and succeeded after adjusting because Walton's story reads like "bad thing happened -> keep trudging" infinitely.

</comment></comment><comment><USER21> Walmart gets a lot of flack for moving into small towns and ruining the existing stores. But the 1969 New York Times excerpt in the article mentions how Walmart was dominant in small, rural towns but was facing competition as "the industry's big guns are moving in". ("Big guns" being K-Mart, Gibson and Arlans. K-Mart declared bankruptcy in 2002, Gibson in 1996, and Arlan's in 1973.)

It's kind of mind-blowing to think that in 1969 Walmart was the local store needing to fight off the big chains. But now it's the exact opposite.

<comment><USER22> As a non-american, what's wrong with walmart? Apart from them being 'big'?

<comment><USER23> There has only ever been one serious problem with Walmart: it historically hasn't paid very well.

It's just starting to kinda-sorta catch up with Target and Costco in pay and benefits.

There's a pay trade-off that the Walmart critics go dramatically out of their way to avoid however. Costco can pay what they do, because their employee to sales ratio is extremely different from Walmart. Walmart employs a lot more people per dollar of sales, and operates a very different style of retail business. To match Costco's employee count to sales ratio, Walmart would have to fire a million people. If you ask the critics if they would like to see Walmart fire a million people so they can raise the wages for the other million, you'll get an immediate evasion in response.

Walmart's net income margin for 2016 was 2.8%, and that's typical for them. They get by on a razors edge. They do $485 billion in sales, and only have a $7 billion cash buffer (Twitter has $4.3 billion), while operating on that comically tiny margin. One bad slip, the entire thing collapses in a giant heap of red ink, and a million people lose their jobs instantly. Walmart's ability to survive long-term at such thin margins, is one of the great business stories of the last century.

The notion that Walmart destroys small towns is a crock. I believe only someone that has never actually lived in a poor small town, could claim that. This is what it's like working for a small town retailer: minimum wage, zero benefits, high likelihood of losing the job because the business goes under (pre-Walmart), zero upside potential at all for the employees. That's what small town retailers overwhelmingly looked like in the US from the 1950s through the 1990s, when Walmart reached saturation.

Oh, and Walmart raises the standard of living by drastically improving product selection and access in small towns. Small town retailers have horrible selection and pricing. Critics will claim Walmart's pricing power is a negative, when in fact it's a massive positive for the actual humans that live in small towns (versus the people on the outside that have never lived in a poor small town, that like to write articles from a million miles away and talk about small town retail poverty culture as though it's glorious and should be preserved).

So let's recap: Walmart raised wages, it improved selection, it lowered prices, it absorbed labor slack, it provided benefits, it provided a consistent and large base of employment.

Growing up I watched Walmart move into every corner of Appalachia. It was a vast improvement everywhere it went and it absorbed immense labor slack among low skilled workers. The notion that there was a paradise beforehand, is blatantly false.

<comment><USER24> Uh..i live in a relatively small town, and a lot of the local stores were better than walmart at wages and service, and had good selection. They just couldn't beat price due to being regional instead of nationwide chains. Stores like Benny's for example:

[http://wtnh.com/2017/09/08/bennys-to-close-all-31-stores- thi...](http://wtnh.com/2017/09/08/bennys-to-close-all-31-stores-this-year/)

Wal-mart killed toy stores, I think too; better selection, but you can't beat them on price.

You can't compete with someone who can price things maybe even half of what you can because of scale. That means they replace the two or three retail department stores and many small specialist shops or niche stores in your region with one or two walmarts

</comment></comment></comment></comment><comment><USER25> I always like the EDS founding story. Ross Perot started EDS with $1,000. They never mention he was a multimillionaire from being a top salesman for IBM. Big deal that he opened a bank account with $1,000.

</comment><comment><USER26> Great point that these narratives are usually self-mythologizing and mostly untrue. Success is more than just a "eureka" moment where it all comes together. It is also more than the alternative that you present here, wherein the person succeeds purely by outworking the competition. A much more complete — and frankly, more interesting — picture of success would include the ideas, the hard work, and also explain how Walton's early stores were financed by his father in law Leland Stanford Robson (who often paid his son-in-law's bills, sometimes even without Walton's knowledge), that he was active in Missouri's fraternity communities, was a member of QEBH, the UoM secret society that also includes several past and current state governors as well as one of the founders of Kinder Morgan. If your aim is to demythologize success and present a more accurate view of the the path one must walk to become massively successful, isn't it kind of misleading to omit Walton's network of powerful family, friends, and benefactors?

</comment><comment><USER27> I would add that the founder stories we read about are, even if true, only the 5% which turned interesting.

95% may have been boring failures

</comment><comment><USER28> /r/entrepreneur thread about the same post:

[https://www.reddit.com/r/Entrepreneur/comments/80f0c3/why_yo...](https://www.reddit.com/r/Entrepreneur/comments/80f0c3/why_you_should_ignore_every_founders_story_about/)

</comment><comment><USER29> I think it is a bit unfair to call them myths; they are narratives. All stories are narratives, you can't simply dump EVERY fact about a situation. There are infinite facts and details about how a company came to be, and telling the full story is impossible. Instead, we look at the story, pick a narrative we want to tell, and tell it.

You HAVE to do this when telling a story, and all stories do this. While it is true that believing the narrative tells the full story is incorrect, it is also incorrect to say these stories are 'myths'. They are just one part of the full story.

<comment><USER30> I don't know the truth of the matter, but the author of this article seems to be saying that the core idea at the heart of the Netflix founding narrative is, in fact, a myth. Whether that is the case or not, I don't know.

</comment></comment><comment><USER31> Either someone told me, or I read somewhere in a book, about how these things are called "business lies" and that it is supposedly OK to do in the name of making money

No harm no foul if everyone feels better about themselves right?

/s

<comment><USER32> Having worked in a lot of shady businesses. I'd like to see the book that shows how most every company is pulling some really borderline (if not completely) illegal and unethical dealings to get ahead.

My first job as an auditor really opened my eyes (did some M&A work that blew my mind at the shit companies would try). Funny thing is the company I worked for (Andersen) got killed by their own shady dealings!

</comment></comment><comment><USER33> [https://en.wikipedia.org/wiki/Origin_myth#Founding_myth](https://en.wikipedia.org/wiki/Origin_myth#Founding_myth)

</comment><comment><USER34> Echoing PG: [http://www.paulgraham.com/relres.html](http://www.paulgraham.com/relres.html)

</comment><comment><USER35> I got drawn in by the clickbait title

<comment><USER36> Title does a disservice to the writing. It is a good read.

<comment><USER37> Is it? Perhaps the headline should be "Why You Should Ignore _THIS_ Founder's Story About How They Started Their Company"

I feel like if the author is going to make a broad generalization about founding stories, he should use more than 1 example. I don't count Netflix as one of his examples because he simply says "That didn't actually happen." So to combat Reed saying this is how I started Netflix... the author just says "no" without any proof. Who am I going to believe? The founder or a blogger?

<comment><USER36> It is a good read.

You read it. You feel about it. You formulate an opinion (pro/con). You learn something. You doubt something.

That's what a good read is.

<comment><USER37> I guess that's subjective. I would have like to seen more proof to back up the argument.

The author provides proof that the Netflix startup story is about "rental fees" a long time ago. But then fails to provide any evidence that is not true.

The author then switches to Walmart to prove that founder stories are not true, but doesn't provide any evidence that people claim Walmart was an overnight success. Overall it's a bad article in my opinion.

</comment></comment></comment></comment></comment><comment><USER32> One of my bosses had a chance to buy 25k in Wal-Mart stock or bonds. He chose the bonds because they were less risky.

He sold his company for ~17m in the late 90s (so he did fine). In the early 2000s he asked me for stock advice since he kept blowing 60k on penny stocks. I said put 10% of your money on Apple. I'm not 100% sure what's going on but it seems to be a pretty good bet.

Wish I'd followed my own advice instead of doing my first self funded startup (2003). I made about 4-5x my investment. Didn't realize how paltry that would look compared to my Apple advice :-)

As someone that's on startup #8 (about to fire my partner). They're never easy, they are fun (and stressful at times).</comment>


Did Neurons Evolve Twice? - <AUTHOR> https://www.quantamagazine.org/20150325-did-neurons-evolve-twice/

<comment><USER2> Ugh, I hate reporting about evolutionary biology. This isn't an egregious example, but the 'it challenges the idea that complexity increases over time', 'it calls into question the origin of the brain', 'forces scientists to question how animals got their start', 'evolution debate', etc, gives me the creeps.

In a country where more than 50% of the population thinks that evolution is bullshit, it doesn't help to try to phrase scientific disagreements to make it sound like it is some fundamental problem being argued about, instead of the placement of one phylogenetic branch.

Now, the science itself is interesting. The DNA sequencing is quite weak evidence, from what I can see (its been 20 years since I did my PhD, though), but the radical difference in biochemistry is a good sign that, if they didn't evolve twice from scratch, at least the common ancestor probably used the cells that later became neurons in a fundamentally different way.

<comment><USER3> My initial reaction too - though the phrase that triggered it for me was 'challenges the deeply entrenched idea that evolution progresses steadily forward'.

I am clueless about the identity of the demographic that holds this deeply entrenched idea, other than the vaguely labelled 'breathtakingly bewildered'.

When you say 'in a country where more than 50%' ... are you referring to the country that you're currently in, or the one I'm in, or the one where you assume most people who are reading this article are in, by the way?

<comment><USER4> He's most likely referring to the US. Depending on who does the polling and how, about half the population thinks the Theory of Evolution is a bad joke or a scientific conspiracy or something.

The opposing side is known as "Creationists." They like to characterize scientifically informed people as "Evolutionists" but of course that's more misinformation. One of the various tracks of Creationist argumentation is that scientists make the "unjustified assumption that change progresses at a more- or-less constant rate" or, "that the rate of change today is the same as the rate of change way back when." They like to claim we can't know the decay rate of radioactive carbon (carbon dating, y'know) was the same a few thousand years ago (when the Earth was created) as it is today.

I mention all this because this red herring about steady evolutionary progress is one of the arguments of Creationists, and so it's annoying to see those words used in that context in a science-y article.

</comment></comment></comment><comment><USER5> > Because they are so complicated, they are unlikely to have evolved twice.

I don't get this argument at all. It seems obvious that most of the time an organism gains a property it immediately dies (or fails to pass it to its offspring). They have lots of tries, they're not special.

So: "Common ancestor" my arse. They insist on drawing these diagrams as trees when they are much more complicated graphs.

<comment><USER6> I think that you misunderstand what the article means by "evolved twice." Neurons certainly did not appear out of whole cloth in one generation, and the process involved many false starts and dead ends.

The question is, do all currently living creatures with neurons trace back to a common ancestor who also had neurons, or are there several neuron-having lineages alive today, each of which traces back to a different earliest- neuron-having ancestor. In the latter case, each of those neuron-having ancestors would have shared a common ancestor, but one that did not have neurons.

The lineage of all life on earth certainly creates a more complicated graph than a tree, but at the time scale needed to create a novel feature like neurons, it certainly looks like a tree. To say otherwise, you'd have to point to a case where genetic information passed laterally between species, rather than vertically from parent to child. This probably has happened [1], but is not so common as to make all tree-shaped charts misleading.

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

<comment><USER7> >point to a case where genetic information passed laterally between species

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

<comment><USER6> Thanks, that's a more apt link than symbiogenesis.

However, it doesn't change the fact that, when viewed from 10,000 feet, the tree of life looks more like a tree than a web. Especially with regards to the question "did neurons evolve twice," very little is lost by ignoring that sometimes cousins marry, and sometimes a virus leaves a chunk of genetic material in its host.

</comment></comment></comment></comment><comment><USER8> So if neurons did evolve twice, it is unlikely they are the Great Filter. Hopefully it is still behind us.

<comment><USER9> Don't believe people when they say rubbish like this:

      Because they are so complicated, they are unlikely
      to have evolved twice.

It's not like that complexity has spontaneously come into existence, it's the result of normal evolutionary processes which give rise to complexity of all sorts all the time. If you ask biologists about this, most would agree there is nothing inherently improbable about the evolution of any known cell type.

Of course that doesn't mean those processes wouldn't produce a completely different organism on another world, _but_ chances are this organism would have to solve similar problems as the ones here on Earth. The need to process information and react to it in some way is not unique to our world in any way.

 _> So if neurons did evolve twice_

Looking at _all_ the systems organisms are using to carry information (not just neurons, but all kinds of chemical signaling) suggests that these systems perform a very basic and ubiquitous role in all ecosystems. Even if the assertion about neurons _was_ true (which it most certainly isn't), claiming all of our biological information-passing systems as special and "unlikely to evolve twice" is stretching an implausible proposition even further.

 _> it is unlikely they are the Great Filter_

It's unlikely anything _within_ biology is the Great Filter, but the thing at the _beginning_ of biology might be a candidate: it's unclear how probable the formation of a simple cell from non-biological material is. My personal hunch is that the Great Filter might really be a combination of factors, both local to us and global, and abiogenesis _might_ be one of those that globally lower the odds for life significantly.

<comment><USER8> Thanks for the detailed, informative reply!

</comment></comment></comment><comment><USER10> _Because they are so complicated, they are unlikely to have evolved twice._

This reminds me of the beginning of the babel fish argument for the non- existence of god by Douglas Adams:

 _Now it is such a bizarrely improbable coincidence that anything so mindbogglingly useful could have evolved purely by chance ..._

</comment><comment><USER11> Wings are complicated and they evolved multiple times (insects, birds, bats)

Neurons (or at least proto-neurons) are not extremely complicated, at least simple enough so that they can "do something" and then evolve.

(Not sure how/if they were able to evolve without anything to control like muscles or at least some motor mechanism, but even bacteria does that)

<comment><USER12> Eyes (complex, image forming ones) are also believed to have evolved independently. Nature got it more right with the squids -- their eyes got wired so they lack a blind spot! Actually there are many cases: [http://en.wikipedia.org/wiki/Convergent_evolution](http://en.wikipedia.org/wiki/Convergent_evolution)

</comment></comment><comment><USER13> Pretty sure everything has evolved infinitely.</comment>


Can the US tax code be simplified with computer modeling and simulation - <AUTHOR> https://petitions.whitehouse.gov/petition/have-cbo-perform-open-computerized-mathematical-model-tax-code-find-simplified-tax-code/6sP3nQSV

<comment><USER2> A big reason for why things are so screwed up is corrupt politicians who use their power as a fund raising mechanism. For example there were several taxes added temporarily to see if they worked well. They did, but congress doesn't make them permanent. Instead they wait to be paid each time to renew them temporarily again. (This started in the Reagan administration.)

See this excellent talk by Lessig: <http://www.youtube.com/watch?v=Ik1AK56FtVc> The whole tax provisions as fund raising is covered at 7m30s.

I congress were actually honourable and I was president I'd mandate that the tax code shrinks by 10% each year. If the politicians can't find 10% then at the end of year every 10th provision is automatically deleted.

</comment><comment><AUTHOR> Science fiction writer David Brin talks about this: [http://davidbrin.blogspot.com/2011/05/no-losers-tax- simplifi...](http://davidbrin.blogspot.com/2011/05/no-losers-tax- simplification-proposal.html)</comment>


Ask HN: How to improve *engineering* problem solving? - <AUTHOR> Hi HN,
I'm about 3 years into my career as a Software Developer. I've realized my day to day has almost nothing to do with architecture or programming. It is mostly about problem solving with constraints--creative solutions to bespoke problems (not programming problems). For example, we had a feature that streamed one of our large models to prevent Out Of Memory exceptions, but it was extremely expensive. The goal was to reduce the cost of this feature while maintaining reliability in the service, so no Out Of Memory exceptions. We ended up turning off the feature, deploying a larger machine, which fixed the Out Of Memory exception for most cases, and if it still failed, only then do we initiate the streaming of the resource.
I would've never thought of this. My initial plan was to root cause the high memory, which might've been a rabbit hole even if timeboxed, and I don't think I would've had a solution at the end. I suppose I was trying to "fix the high memory issue" instead of "reducing cost", which was what I was actually tasked with doing.
My take-a-aways were: 1. If it can be solved with more money, it saves you time. 2. To prove something is or isn't necessary, run an experiment.
I think these are lessons I can learn over time but I'd like to actively work on it.
I've heard these can help: 1. Solve lots of problems (where do I find these kinds of problems?) 2. Read post-mortems
3. Read editorials 4. Read about different architectures
Or is it something that just comes with experience?
Thanks for the help! <comment><USER2> 1\. Reading helps. I find that reading the "manual" of a tech stack helps even more. Reading it slowly brings the best results, and if all else fails, reading the source. Under time pressure, my previous tendencies were to "Stack Overflow" and keep pasting stuff until it works. For simpler problems that worked, but for complex problems it didn't. Reading has helped a lot.

2\. You can solve lots of problems and it might help. Over the course of time, my problem-solving skills improved slightly by the amount of problems I was solving. My problem-solving skills improved a lot just by polishing my problem-solving method. At the start of anything I take 15-30 minutes to write down the tasks I need to do and coordinate with others to check if it's the right set of things. I write, down to the classes, that I think I need to work on. For debugging, it's polishing the red-green-refactor cycle, for harder bugs I write the actual layers I need to peel (os/db/language version? database layer all good? weird logs? check disk? check I/O? network? skim through mailing lists? iperf? database? etc.).

</comment><comment><USER3> When tackling a problem and coming up with a solution, think first about how would you test that your solution will work. Software Engineering is unfortunately far away from being able to prove the correctness of a solution, but having a good plan of how to demonstrate the robustness is a promising step towards good engineering.

But yes, most of it comes with experience. Software engineering is mostly dealing with complexity. And the realisation that you will never know enough to completely control it.

</comment><comment><USER4> My main method is to change the "input". I understand it as to talk with the user/customer/colleague the necessary time to make the problem as simpler as possible.

It's rarely feasible in an entreprise because you're not supposed to discuss the "what" but only the "how".

</comment><comment> q-base A lot comes with experience.

But I actually think that there is an "unconventional" way to foster the thinking behind it. Read/learn about philosophy. A lot of philosophy is basically breaking down/questioning assumptions. Some forms of philosophy are semantics-circle-jerking. But the thinking behind is very useful in a engineering setting. You get into the habit of detaching yourself and taking a step back from "conventional" understanding.

Also read "Surely you're joking Mr. Feynman" or see the video "The pleasures of finding things out" with Feynman. If you adopt that way of looking at the World around you, then you will quickly be a lot better at looking at problems from different perspectives than the one directly obvious.</comment>


Linux Terminal Goods - <AUTHOR> http://diego-pacheco.blogspot.com/2019/09/linux-terminal-goods.html <comment><USER2> Regular vim has tabs and you can bind any key you want to switching them (I use F2/F3). The default is :next and :prev or gt/gT. I've been using the feature for years now.

You can also open a list of files in separate tabs with the -p argument. So "vim -p CppFile.*" will open the .h and .cpp in separate tabs for example. You can then Y/p between the two buffers.

It's so useful that I always "alias vi=vim -p" in my .profile.

<comment><USER3> Is the '-p' necessary?

I like to open files in windows with e.g. "vim -O file1 file2", and I've noticed that if I accidentally omit the '-o' or '-O', it opens each file in a tab. Or at least, it opens each file in individual pages that you navigate between with ':next' / ':prev'.

<comment><USER4> The -p gives you a tab for every file opened. If you don't provide it, it still opens them and you get a buffer for each one, but it doesn't open any tabs. If you still get tabs even if you don't provide it, maybe you have a vim plugin that's doing that.

</comment></comment></comment><comment><USER5> I've just skimmed around it as someone who repeatedly need that kind of book to achieve little things in bash.

I understand bash is the basis of so many things, that its importance is just enormous.

But at the same time, I'm appalled by its syntax, idioms, etc. It's barely readable for the casual reader that I am. I wonder why nobody tries to provide a meaningful alternative. I've seen some (in python for example) but I'm kind of surprised nobody puts more money in such an effort.

For example, the "trim string" function described at the beginning of the book is horrible (although probably very clever). Why not simply provide a built in function ? That would make code so much cleaner...

I ask the question honestly, it's not a rant :-)

<comment><USER6> Generally if you're trying to do something that feels like a "program" in shell script, rather than loosely gluing existing tools together, the threshold for moving it into Perl or Python should be low. Even things like trying to get the quoting right for lists of files some of which may have spaces in their names is fiddly enough to drive people to writing a "proper" program.

(or was this comment intended for [https://news.ycombinator.com/item?id=21013150](https://news.ycombinator.com/item?id=21013150) )

<comment><USER7> The moment I have to use arrays in bash, I open up a python interpreter. Syntax makes far more sense than in bash.

<comment><USER8> I used to drop into python for ad-hoc work as soon as I needed even for/if or any arithmetic. Now that I actually manage to remember how to use for-loops when I need them and I picked up awk,I haven't needed to since.

For a maintainable script pythons great of course.

</comment></comment></comment></comment><comment><USER9> I spend loads of time in a shell. One day I'll push my full dotfiles publicly, but until then here's a few snippets I've found super handy. I'd advise against using them verbatim but there's a few things in there that took some time to figure out. Beware they can be somewhat buggy / break things though.

Highlights include:

\- Bind C-c/C-v to Copy/Paste, bind C-g to sigterm (Note: Breaks docker interactive unless you mount bashrc into /etc/bashrc or similar!)

\- Autorun tmux on SSH session

\- Syntax/colour highlighting in zsh interactive, I think there's some diff/less/man magic in there too!

\- Log all shell activity to .shell_logs (Be _super_ careful with this one, breaking it could prevent you opening an interactive shell

\- Useful grep defaults, particularly relevant when using .shell_logs

Bashrc: [https://gist.github.com/YoloClin/f4c82a6e693000a2da20e8029a4...](https://gist.github.com/YoloClin/f4c82a6e693000a2da20e8029a49656c)

Zshrc: [https://gist.github.com/YoloClin/ffd82f441d292ccc5f25c62a80c...](https://gist.github.com/YoloClin/ffd82f441d292ccc5f25c62a80c78ad0)

One thing I've lost love for is Powerline9k - Right-aligned data breaks copy/paste functionality, and patching fonts to get UI-arrows is fiddly for little functional value. If I ever need to fiddle with that stuff again, I'll configure a regular theme to do similar and go without the UI-arrow breaks.

I was considering hiding history-relevant log data (such as current system time) to behind a carriage return, something like PS1="$(date)\r$PS1".

I'm interested in hearing others' cool, non-standard hacks!

<comment><USER10> Inspired by a colleague, I wrote this (for bash):

[https://gist.github.com/archi/2a2331401842c0548fa8de0f69796f...](https://gist.github.com/archi/2a2331401842c0548fa8de0f69796f58)

> up 4

go up 4 folders (=> "cd .." 4 times).

> up

goes up one folder, and you can repeat pressing ENTER to go up one more. Press anything else to drop back to the shell.

Could probably be "better" (e.g. no subshells), but works well for me.

<comment><USER9> Thats cool! I'm not sure where it comes from, but I get similar behavior in zsh with 'cd ....' \- similar doesn't happen in bash though.

I mapped 'cd' to 'c' in my bashrc, but while doing it I also mapped 'c' to execute 'ls' as the latter was basically muscle memory whenever I was using cd. The .bashrc function looks like this:

c() { builtin cd "$@" && ls; }

<comment><USER11> Hey guys, I have the same thing, but I called the command ".." (no it doesn't conflict with the directory). ".." by itself is the same as ".. 3"

        .. () {
          local arg=${1:-1};
          while [ $arg -gt 0 ]; do
            builtin cd .. &> /dev/null;
            arg=$(($arg - 1));
          done;
        }

<comment><USER12> Mine is similar, but only does one cd command - to allow better use of `cd -`

        up() {
            local ups="."
            for((i=0;i<${1:-1};i++)); do
                ups="${ups}/.."
            done
            builtin cd "$ups"
        }

<comment><USER10> "cd -" is equal to "cd $OLDPWD", so that still works with my function ;)

Though yours looks much nicer ^^"

</comment></comment></comment></comment></comment></comment><comment><USER13> Maybe I'm completely missing the point of `bat` but I usually just use `view` (vim/neovim in readonly mode) if I want to read files with syntax highlighting, GitGutter, line numbers, etc.

<comment><USER14> Not sure if view lets you do this but bat will switch off highlighting if you are piping output `bat file.txt | grep ...`. This makes it easy to make an alias cat=bat and have everything work. Also you can make bat display output with `less` and then line numbers can be toggled, not sure about gitgutter.

<comment><USER15> (author of bat here)

Exactly. Drop-in compatibility with 'cat' is one of the goals of bat (see [https://github.com/sharkdp/bat#project-goals-and- alternative...](https://github.com/sharkdp/bat#project-goals-and-alternatives) and a list of alternatives here: [https://github.com/sharkdp/bat/blob/master/doc/alternatives....](https://github.com/sharkdp/bat/blob/master/doc/alternatives.md)).

Another thing that I use frequently is previewing a whole set of files in a single (pager) output. Something like

        bat src/*.cpp

This also allows you to easily search across a whole set of open files.

<comment><USER16> Awesome work. I've been a happy user of bat for a few months now, I've almost totally trained my brain away from typing cat.

</comment></comment></comment></comment><comment><AUTHOR> Part 2 [https://news.ycombinator.com/item?id=21119949](https://news.ycombinator.com/item?id=21119949)

</comment><comment><USER17> Other stuff with _asteroids_ :

* RipGrep: Replace Grep and it is blazing fast

* exa: Replace ls with many more options

</comment><comment><USER18> Diego I think you're using the word asteroids where you mean the word steroids.

<comment><USER19> Would be cool though, if somebody would use vim on asteroids.

<comment><USER20> Yeah, but on Mars they use Emacs, so then it's just The Expanse all over again.

</comment></comment></comment><comment><USER21> i really wish spacemacs didn't have that pretty lame loading screen, as a spacevim devotee i found alot of things that spacemacs does that specifically address some issues i have with spacevim.

i know the correct path forward here is, of course, diving into the guts of spacevim and tinkering until it works for me, but i will post one quirk as it will probably be some time before i will be able to write my own comprehensive plugin:

the hugofy/markdown plugins seem to all do this awful thing in which they render the markdown on the fly. it's kinda neat for basic text formatting, but my god it is an utter nightmare if you have any sort of URL's or images, because the second you key in that second bracket, it suddenly dissapears and you're left having to basically guess your way through the process of typing the url and closing out the shortcode.

if someone knows of a markdown editor that plays nice, i'd love to see it. hope im not overlooking something painfully obvious here

anyways, i picked a hell of a time to dive into the commandline, a year ago i came across scoop/chocolatey and quickly discovered WSL, and thanks to a phenomenal amount of work by some great folks (even you, Person Reading This), my desktop is not much more than the lobby i pass through before going to where the magic happens: [https://imgur.com/a/iCpWZAC](https://imgur.com/a/iCpWZAC)

<comment><USER22> What about the loading screen do you dislike? I believe you can change the default after it loads up(and you generally want to be using a daemon in the background with Emacs so it's a first time run thing mainly anyway)

</comment></comment><comment><USER23> Just one link: [https://terminalsare.sexy](https://terminalsare.sexy)

</comment><comment><USER24> I prefer my terminals dumb and without much color, as the UNIX gods intended them to be.

This being said, I'm in love with `fzf`, my workflow improved markedly after scripting (on mac)

`ggvi() { git grep "$@" | fzf | sed \"s/:/ +/\" | cut -d \":\" -f 1 | gxargs -r -o vim }`

<comment><USER25> You can also combine it with ripgrep. Much faster than git grep.

<comment><USER24> I actually time-tested git grep vs ripgrep, and I'm not seeing meaningful differences on my repos. ripgrep smokes regular grep but for some reason git grep is just as fast as ripgrep

<comment><USER26> Because benchmarking these tools is difficult to do correctly, and is heavily workflow dependent. If your search space is small, them it doesn't really matter what tool you use for example, they are all probably going to be pretty quick.

I wrote more about this here: [https://lobste.rs/s/0kaozs/don_t_underestimate_grep_based_co...](https://lobste.rs/s/0kaozs/don_t_underestimate_grep_based_code#c_vddxv7)

</comment></comment></comment></comment><comment><USER27> This post is relevant: [https://news.ycombinator.com/item?id=17874718](https://news.ycombinator.com/item?id=17874718)

</comment><comment><USER28> fzf + bat seems pretty nice!

export FZF_DEFAULT_OPTS="\--ansi --preview-window 'right:60%' \--preview 'bat --color=always --style=header,grid --line-range :300 {}'"

</comment><comment><USER29> some vim enthousiast here scalded me for sending him spacevim linkand told me to use neovim. i don't use vim so i wouldn't know, and vim people seem easily offended :D. anyhow, just thought i'd not his input.

<comment><USER30> Spacevim actually has some original features (kind of ripped off from emacs) that I _really_ like, and can't find a way to get without using Spacevim. There's nothing wrong with using it, but most vim users like to start from scratch and build their own experience to meet their specific needs. Starting with something like Spacevim is 100% ok if you've never used vim before, but most people end up moving onto the more 'custom' experience eventually anyway.

</comment></comment><comment><USER31> Why are dark themes considered cool? Am I missing something?

<comment><USER32> Easier on the eyes, at least for me.

</comment></comment><comment><USER33> this is super awesome! love it, thanks for sharing spacevim is exactly what I have been looking for</comment>


Ask HN: Which mobile platform should I develop for first? - <AUTHOR> I currently have a subscription/membership site that is mildly profitable... nothing to write home about, but to be fair it has not been heavily marketed yet as we have been working out the kinks and getting a feel the best ways to support it while we are still small.
The next logical step for the site is to create an app that allows people to purchase a subscription so they can immediately start using our service.
Backend of the site is ready to go to use for an app... all functionality is implemented on Java EE and exposed as Thrift services.
Since I know Java, I glanced at RoboVM but I balked at the price.  Currently my plan is to learn the Android platform and develop for that, and then develop a separate iOS app later using Apple's native tools.  I'm not sure if this is the right approach, or if there are reasons why I should start with iOS and do Android later.
My questions:
1) Is it faster to get up and running with iOS or Android, or neither? I assume that for me personally Android will be faster because I already know Java.
2) Is one of these platforms better for getting actual sales... that is, in your experience do Android users make more in app purchases that iOS users, or vice versa?
3) What are the costs associated with getting an app published on each of these platforms?  I assume that I would have to buy a Mac to develop for iOS (what is the cheapest machine I can use to do that?)
4) Is it wise to maintain two codebases, or should I spend more time looking for a way to develop a single codebase for both platforms (similar to what RoboVM seems to offer)?
5) Is there a compelling reason why I wouldn't want to release apps for the different platforms at the same time?  In other words, should I develop apps for both iOS and Android before I release either one?
Thanks in advance. <comment><USER2> Knowing Java and knowing Android are fairly different things.

I'd sure consider something like RubyMotion ($) or React Native or Cordova or... anything unless you specifically need functionality they don't offer or make onerous.

There's nothing wrong with focusing on one platform then another, or get a lot of the way done with one then work on the other.

<comment><AUTHOR> Thanks for the tips. I noticed Cordova already, but will consider it more closely.</comment></comment>


AWS Loft Program Expands to NYC - <AUTHOR> https://aws.amazon.com/blogs/aws/announcing-the-aws-pop-up-loft-in-new-york/

<comment><USER2> Will be interesting to see how the free coworking space works out.

</comment><comment><USER3> It's across the street from Digital Ocean HQ -- interesting.</comment>


Simple Charters: Instant Private Flights - <AUTHOR> http://www.simplecharters.com/

<comment><USER2> Would be good to see anonymised examples of real flight charters so it's possible to get a feel for what a private flight might cost. Might save on tyre-kickers or encourage those who would've guessed it out of their league.

I really like how Flight Fox does this in showing sample trips. It allows you to see the sort of savings they've been able to find.

<comment><USER3> ~20-30k transcontinental?

<comment><USER2> Per person? Per plane of a certain size?

</comment></comment></comment><comment><USER4> 'Real customers. Real reviews.' (<http://www.simplecharters.com/how-it-works>)

featuring some real people <http://bit.ly/Wo7h8T>

stock photography has its place...but not beside this paragraph: "The idea of trusting a broker with your flight is crazy nowadays. Before you book your flight you can read real reviews from verified customers. Never again will you have to worry about whether or not you're getting a good deal, or will have an excellent flight!"

<comment><AUTHOR> Took that down.

</comment></comment><comment><USER5> I never understand why sites feel the need to include the date in a copyright banner/footer (or why the copyright is even needed since it is automatically the case). But if you are going to do it, then make sure you update it otherwise it could be coming up to the end of February and a viewer seeing the previous year could wonder if the site is dead/stale/not maintained.

<comment><USER6> Prior to 1989 all works in the US required either a copyright notice or registration filing for copyright protection. This is no longer the case, but people still do it. Note that, if present, the date should be the date of publishing of the work in question. One might be able to argue that simply updating the page to change the copyright date without actually creating and publishing a new copyrightable work is not a valid copyright notice (but, again, this is all moot since you don't even need a copyright notice these days).

</comment></comment><comment><USER7> Don't the people who would use a service like this already have the money to use a consierge or assistant who would do the booking for them?

<comment><USER8> Won't the assistants and concierges wind up using a service like this?

<comment><AUTHOR> Exactly.

</comment></comment></comment><comment><USER9> I'd be really interested to see the pricing/commercials around this too. There was a startup that did exactly this a few years back that got Branson's attention and turned into Virgin Charter: <http://en.wikipedia.org/wiki/Virgin_Charter> \- I believe it got hit by the 2009 financial downturn.

</comment><comment><USER10> I don't see prices anywhere, but I'm assuming this is one of those "If you have to ask, you can't afford it" type things.

</comment><comment><USER11> would love to have an idea of what something like this would cost.

</comment><comment><USER12> Didn't Warren Buffett run something like this? He always talks about how bad the airplane business is.

<comment><USER3> You're thinking NetJets, which is frac ownership.

</comment></comment><comment><USER13> Someone over there might want to take care with leftover bootstrap bits

[http://www.simplecharters.com/assets/ico/apple-touch- icon-57...](http://www.simplecharters.com/assets/ico/apple-touch- icon-57-precomposed.png)

</comment><comment><AUTHOR> Thanks for all the great input, especially the stock image and the bootstrap bits. That's since been fixed. It's tough to see this stuff yourself when you're staring at a problem for hours.

</comment><comment><USER14> The affiliate programs for private jet travel can be $5k+ per referral. Seems like a good model.

</comment><comment><USER15> looks like they're infected by the disqus ad campaign :(((

</comment><comment><USER16> I was just thinking about this very thing yesterday. Neato.</comment>


Unit Testing Without Mocking Makes a Mockery  - <AUTHOR> http://www.drdobbs.com/testing/240001524

<comment><USER2> Mocks are useful, but their example of mocks being used to increase speed is a bad thing (tm)

I believe your tests need to run as close to real data as possible. This includes making calls to the DB, and making calls to API's.

If you're using mocks to speed up your testing, I think you're attacking the problem in the wrong way. If you're tests are truly isolated and atomic then they can be executed in parallel. Some tests will rely on the results of a previous test, so break the testing into modules and execute the modules in parallel.

Mocks are handy, but should only be used when real data isn't appropriate.

<comment><USER3> I think you're confusing unit tests with integration tests.

In integration tests you should indeed run as close to real data as possible and execute your system's entire stack, including database calls. Unit tests on the other hand should be used to test small decoupled parts of the codebase.

If you have a class that implements certain business logic against data that would normally be retrieved from a database, a unit test using mocks can test this business logic in isolation, feeding a variety of data through the method to test a large number of scenarios and edge cases.

Speeding up this kind of testing is definitely important; test suites using mocks that can run in seconds can be executed after most changes to give immediate feedback to developers, whereas integration-type tests that might take an hour or more would slow down development too much to do this.

Integration tests are important as well, and should be run possibly nightly or at least prior to any release. They cannot be used to give the kind of immediate feedback that truly decoupled unit tests give though.</comment></comment>


Saving Star Wars: The Special Edition Restoration Process - <AUTHOR> http://secrethistoryofstarwars.com/savingstarwars.html

<comment><USER2> I have Spike on tv in the background while browsing HN, and they're showing The Empire Strikes back, which they seem to do every 1-2 weeks. Perfect! I leave it there and read.

A few minutes ago they showed the Bespin scenes in which Vader has short conversations with Boba Fett re: Han Solo (alive/dead, carbonite or no, etc).

Fett's voice has a DISTINCT New Zealand accent. Looking on Wikipedia, indeed, Temuera Morrison, who played Fett in the prequel "movies," re-dubbed Fett's voice for the Special Editions.

Aside from restoring the prints to usable quality, none of the rest of the changes should have happened.

</comment><comment><USER3> Star Wars needs to be saved from its creator. It was great, now all the prequels and the extra-super-bonus editions of the originals have tarnished a once nigh perfect franchise.

<comment><USER4> I am utterly confused by the turn of events. The first trilogy convinced me Lucas was amazingly talented. The dialog was good, but funny. The characters were _characters_. I feel like the criticisms here are pretty valid:

<http://www.youtube.com/watch?v=FxKtZmQgxrI>

I'm at a loss as to why what he produced in his 50's would be so much worse. Shouldn't Lucas be the old wizened sage--the Obi Wan of films by now? What happened?

<comment><USER5> Great question! I think the primary reason is the originals (4-6) were written/edited/produced by other people, while 1-3 were solely managed by Lucas. No one stands up to him now that he's established and revered.

There's a great review of Star Wars Episodes 1 & 2 on YouTube that are absolutely worth the time to watch:

[http://www.youtube.com/user/RedLetterMedia#p/u/19/FxKtZmQgxr...](http://www.youtube.com/user/RedLetterMedia#p/u/19/FxKtZmQgxrI)

<http://www.youtube.com/user/RedLetterMedia#p/u/0/CfBhi6qqFLA>

<comment><USER6> Ah Redlettermedia! His review of the TNG Star Trek films is hilarious.

</comment></comment></comment></comment><comment><USER7> Wow, fantastic essay, both for its technical and historical content. I worked at ILM during the digital restoration of the original trilogy, and most of the author's account is news to me.</comment>


C++: Return value optimization vs. std::move - <AUTHOR> https://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/RVO_V_S_std_move?lang=en <comment><USER2> clang 3.7 has a warning when std::move prevents it from using return value optimization:

        foo.cpp:44:25: error: moving a temporary object prevents copy elision [-Werror,-Wpessimizing-move]
            auto result = std::move(worker.run());

        foo.cpp:44:25: note: remove std::move call here
            auto result = std::move(worker.run());

<comment><USER3> That's a welcome feature indeed. (Too bad the 3.7 release is still a month away.)

</comment></comment><comment><USER4> Another way to frame this discussion would be in terms of xvalues. The standard defines an xvalue as an "eXpiring value", which is value near the end of it's lifetime [1,2].

      struct X {};

      void f() {
        X x;
        return x; // elided
      }

      void f(X x) {
        return x; // elided
      }

Perhaps not as intuitive as the first copy elision is the second, but accepting a parameter by value and returning it also enables copy elision because it is an xvalue at the end of the scope. A move is equally detrimental to performance in both cases.

[1] [http://eel.is/c++draft/basic.lval#xvalue](http://eel.is/c++draft/basic.lval#xvalue) [2] [http://stackoverflow.com/q/3601602/1170277](http://stackoverflow.com/q/3601602/1170277)

<comment><USER5> > accepting a parameter by value and returning it also enables copy elision

No it doesn't. Parameters are constructed by the caller (in order to allow eliding the parameter copy, if the argument is a temporary anyway), therefore returning a parameter cannot be elided because that would have required the caller to know to construct the parameter in the return value slot.

If you actually test your code, you'll see that in the `f(X x)` case, the return is not elided.

With that said, in C++11, the return is automatically by move, not by copy. Any "return x;" where x is a local variable (including parameters) will be by move. But prior to C++11, it would have been a copy.

This is IMO the biggest problem with relying on RVO for anything: people rarely understand all of the rules around it, and may reasonably assume that RVO will kick in in cases where it doesn't. It's even harder if you have a function with a few branches and multiple returns -- in some cases, even when the branching happens before the return variable is declared, the compiler will fail to RVO it. Luckily C++11's "returning a local variable is automatically by move" rule covers you in most such cases.

FWIW, I highly recommend following Rust's rule: Only trivial, shallow types can be implicitly copied (i.e. only cases where the copy is a simple memcpy()). Anything else can only be moved, but is free to define a `clone()` method for explicit copies. If your type doesn't have a copy constructor then you can't accidentally call it. :)

<comment><USER4> > No it doesn't. Parameters are constructed by the caller (in order to allow > eliding the parameter copy, if the argument is a temporary anyway), > therefore returning a parameter cannot be elided because that would have > required the caller to know to construct the parameter in the return value > slot.

Sorry, I confounded two things here. What I meant to say is that "x" is an xvalue in both scenarios and you wouldn't write std::move(x) in either case. For the overload f(X) you'd always incur a move, whereas for the overload f() you'd always get a copy elision.

Concretely, I've looked at the assembly of this code:

      #include <string>

      struct X {
        std::string str;
      };

      auto f(X x) -> X {
        return x;
      }

      auto f() -> X {
        X x;
        return x;
      }

      auto main() -> int {
        X x = f();
        auto y = f(x);
      }

When compiling with

      c++ -g -std=c++14 test.cc && otool -tV a.out | c++filt

the assembly shows that indeed shows that f(X) invokes the move constructor, whereas the copy is elided for f().

</comment></comment></comment><comment><USER6> Someone correct me if I am wrong but isn't that last snippet where he returns std::move(localObj) essentially returning an rvalue-ref to a local object? That's like a big no-no because the local object destructs after foo(1) returns.

<comment><USER7> It's definitely an appropriate use of std::move. When the local object destructs std::move has already ripped its guts out and put them in the object up the stack. The local object is just an empty shell at destruction.

<comment><USER8> The 'object up the stack' is an rvalue reference. While we've successfully returned a reference into the caller's stack frame (RVO), the object it referred to has already been destroyed. That's why you see 'constructor, destructor' before 'move constructor'.

I'm struggling to see how it's an appropriate use of std::move in any case where you actually use the rvalue reference!

</comment></comment></comment><comment><USER9> Copy elision + move semantics can be quite confusing at first in C++. For example at times explicitly calling move can be less efficient than implicitly relying on copy elision.

Another good read: [http://en.cppreference.com/w/cpp/language/copy_elision](http://en.cppreference.com/w/cpp/language/copy_elision)

<comment><USER5> > explicitly calling move can be less efficient than implicitly relying on > copy elision

Sure, in the sense that non-zero is greater than zero. But move constructors are almost always basically a memcpy() sometimes followed by some zeroing of the old data, never heap allocation nor expensive atomic ops. IMO it's not worth worrying about. Much better to accidentally invoke a redundant move because you specified std::move() when you didn't have to than to accidentally invoke a redundant copy because you thought RVO would kick in but it didn't.

<comment><USER9> That may be, though code becomes more cluttered with moves as well.

</comment></comment></comment><comment><USER10> Sounds like a "specification bug" that RVO is not allowed when std::move is used. Or is there a deeper reason for this?

<comment><USER11> Doing so would require the standard to give std::move special treatment, which sucks. The way it's specified right now let's you write your own std::move and call it rvalue_cast() if you wish.

<comment><USER12> > Doing so would require the standard to give std::move special treatment

Does it? Why change the behavior specifically for std::move instead of just allowing any rvalue reference to be elided when possible?

<comment><USER5> To elide a return copy/move, the compiler has to know at compile time exactly which local variable is going to be returned, so that it can arrange to have that local variable constructed directly into the return location, thus avoiding the need to copy/move it later.

So to elide a copy/move from an rvalue reference, the compiler would have to know at compile time that the rvalue reference always points to some particular local variable.

In theory a compiler could look into the inline definition of std::move() and determine that it always returns a reference to its parameter, but that's a rather involved optimization for the spec to require of all implementations.

</comment></comment></comment></comment><comment><USER13> Instead of trying to reason about the copying and moving of huge objects, I give my brain a break by using std::unique_ptr<HugeObject>. unique_ptr is moveable, cannot accidentally be copied (because its copy constructor is private), and is trivially small. unique_ptr also gets around the problem where the compiler can't figure out which value is being RVO'd, because you can do this:

      std::unique_ptr<BigObject> Blerg(yourmom) {
        std::unique_ptr<BigObject> big_object_ptr;
        BigObject foo, bar;
        if (2 > yourmom) {
          big_object_ptr.reset(foo);
        } else {
          big_object_ptr.reset(bar);
        }

        return std::move(big_object_ptr);
      }

This isn't valid code but it's pretty close.

<comment><USER14> This doesn't help to solve the original problem of avoiding the copy. Your calls to

        big_object_ptr.reset(...)

will cause the BigObject copy constructor to be called. The object pointed to by unique_ptr does not have the same storage as the objects "foo" and "bar". At the very least, you need to do

        big_object_ptr.reset(std::move(foo));

which will cause foo to be moved into the unique_ptr's storage.

In code like this, you should just use make_unique, in which case the BigObject is constructed in place, and unique_ptr can be RVO'ed:

        if (...) {
            return make_unique<BigObject>(...);
        } else ...

<comment><USER13> Yeah I realized after the fact that the example is pointless, but I was trying to adhere to the original post, which is also pointless. Why would you construct two BigObject when you know you will discard one of them unused? It's dumb.

</comment></comment></comment><comment><USER11> Remember, the most important thing to take away from RVO is that copy and move constructors should not have side-effects that change the behaviour of your program (except for throwing an exception if they fail, and move constructors should be designed never to throw)

<comment><USER15> The whole point of move constructors are observable side-effects.

Furthermore move constructors often have to throw an exception due to the fact that moving an object should leave the original object in a valid state. Often times leaving the original object in a valid state requires involves performing an operation that could potentially fail. In the case of std::map and std::list, a conforming implementation may have to allocate memory in order for the original object to be in a valid state.

<comment><USER11> > The whole point of move constructors are observable side-effects.

Nonsense.

> Furthermore move constructors often have to throw an exception due to the > fact that moving an object should leave the original object in a valid > state.

Whether or not move constructors should leave objects in a 'valid state', whatever you mean by that, is hotly contested. Personally I'm of the opinion the only valid operations on a moved-from object should be to move-assign to it (otherwise literally every mutating algorithm is broken) and, obviously, to destroy it.

> Often times leaving the original object in a valid state requires involves > performing an operation that could potentially fail.

Which is exactly why I'm of the above opinion. Making move non-throwing is more or less always trivial and cheap, whereas doing so while ensuring a moved-from object has a valid and useful state, where all class invariants have been maintained, can be expensive.

You should definitely favour a noexcept move constructor that results in an unspecified state over a implementing a throwing move. Just don't do it. If your move constructor throws then doing anything useful with your class becomes very expensive (because classes like std::vector will start copying your objects to move them around).

> In the case of std::map and std::list, a conforming implementation may have > to allocate memory in order for the original object to be in a valid state.

This is just wrong. Moving a std::list will not throw provided the associated memory allocator is noexcept move constructible (and std::allocator is). The same is true of std::map.

<comment><USER16> std::list's move constructor is deliberately not specified to be noexcept even when the allocator's is, and in Dinkumware's implementation it actually can throw, since it allocates a new end sentinel for the moved-from list.

<comment><USER11> Constructors may need to allocate a sentinel, I see no reason for the _move constructor_ to do so. I'd also question the performance benefits of having a sentinel (basically avoiding additional null pointer checks) has on performance given todays relative cache penalties.

</comment></comment></comment></comment></comment><comment><USER17> RVO is flawed because the compiler may(!) elide function calls. The compiler cannot know if those function calls are semantically superfluous or not.

'move' is flawed because if blurs the object id == object address equality inherited from C.

Both, RVO and 'move' are workarounds for language deficits - workarounds gone wrong.

<comment><USER18> A copy constructor that cannot be elided is a broken copy constructor.

<comment><USER17> This may be true for simple structs but is definitely wrong as a general statement. Compilers cannot anticipate semantics.

<comment><USER18> It is true for all copy constructors in C++ since the standard allows compilers to perform copy elision.</comment></comment></comment></comment>


How to roll out your own Javascript API with V8 - <AUTHOR> http://syskall.com/how-to-roll-out-your-own-javascript-api-with <comment><USER2> Tip: to make V8 startup and context creation significantly faster add 'snapshot=on' to your scons command line. This serializes the default heap during compilation and quickly deserializes it on startup later.

</comment><comment><USER3> This is epic. Thank you!

Offtopic: I have always wanted a tutorial for "Here is how to embed WebKit into your C++ application" (to make your own toy web browser). I realize rendering a webpage is only one very tiny component of a browser, but it's such an interesting one that I wish someone would put together a tutorial on how to do that.

<comment><USER4> For embedding a web page display, you're probably best off looking at Webkit/Gecko wrappers for whatever UI toolkit you're using. Getting an image out of the renderer itself is one thing, but tying it into the surrounding windowing environment (using the platform's native widgets, responding to input, etc.) is less trivial. Fortunately, this work has usually already been done for you, and you'll find toolkit-specific documentation on embedding.

For example, for WebKit there is Cocoa/Carbon integration[1], Cocoa Touch integration [2], KDE & Qt integration [3], GTK [4], etc. You can probably find others very easily, likewise for Gecko.

[1] [http://developer.apple.com/library/mac/#documentation/Cocoa/...](http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/DisplayWebContent/DisplayWebContent.html#//apple_ref/doc/uid/10000164i)

[2] [http://developer.apple.com/library/ios/#documentation/uikit/...](http://developer.apple.com/library/ios/#documentation/uikit/reference/UIWebView_Class/Reference/Reference.html)

[3] [http://api.kde.org/4.5-api/kdelibs- apidocs/kdewebkit/html/in...](http://api.kde.org/4.5-api/kdelibs- apidocs/kdewebkit/html/index.html)

[4] <http://webkitgtk.org/>

<comment><USER3> Thanks for the info. However, what I really want is a simple "here is how to render a webpage with webkit" tutorial.

(FYI I would be using .NET WinForms, so I doubt there's much open-source love.)

<comment><USER5> When faced with this problem, I used the Qt port of webkit (QtWebkit) to make an ActiveX control which I can use from windows forms. It doesn't work instantly out of the box, but with a bit of massaging you can probably get what you want.

Cool bonus feature: you can mark any objects you want to expose to the browser via javascript with the COM interop attribute and send them over to your homebrewed browser control. Qt's COM interop layer turns translates the Qt flavor of dynamic dispatch calls into IDispatch calls. So it works pretty seamlessly.

</comment></comment></comment></comment><comment><AUTHOR> I've recently ported the code to Node.js. I'll write about that whenever I have some time.

<https://github.com/olalonde/node-notify>

Also available through NPM:

        npm install notify

<comment><USER4> Looks nice! I recently used node to add a web interface to a C++ app myself and got annoyed with the amount of boilerplate code required for passing function arguments (type checking, unboxing, boxing return values) so I started a mechanism for automating it:

<https://github.com/pmj/node-method-wrapper>

It too is still work in progress, but it works pretty well so far. Note that it currently superficially relies on some node-specific extensions, though they should be pretty easy to remove, in order to use it with V8 alone.</comment></comment>


Ask HN: Your best passive income sources? - <AUTHOR> Previous post 1 year ago: https://news.ycombinator.com/item?id=4639271 <comment><USER2> Depending on what you consider passive...

My "best" passive income source would be subscription revenue from SaaS businesses. I run several, with no employees, with growth from existing marketing and word-of-mouth outpacing churn, and no active management needed other than answering customer e-mails. Everything that can be automated is automated, from backups, to monitoring, to lifecycle and dunning e-mails. Improvely ([https://www.improvely.com](https://www.improvely.com)) is the newest, just over a year old now, and passed $10k/mo RR not too long ago.

If that's still too much to qualify as passive, the stock market contributes the next largest chunk of revenue. Of the money I put in equities, 2/3rds are in index funds (primarily total market stock and bond indexes), and 1/3rd in hand-picked tech companies. The market's been good since the recession crash; better than a 25% annual return.

My most passive income is from revenue sharing affiliate/referral agreements. I work with a lot of small businesses with websites, and refer them to vendors for merchant accounts and advertising services as both publishers and advertisers. For all three, I found good companies to work with that pay a percentage of referrals' spending for the life of their accounts. There are businesses I referred for credit card processing almost 8 years ago I'm still getting a monthly commission check of several hundred dollars a month for, each.

<comment><USER3> I just skimmed through the Improvely website; it looks great. I'd never guess that there was a single passive developer behind it. Can I ask what your investment was in building it?

</comment></comment><comment><USER4> Drop shipping eCommerces sites. I've been doing this for 5+ years full-time. Starting out - like anything - you need to do a lot of the legwork yourself but now I only spend a few hours a week managing my team and it provides a healthy full time income. And with drop shipping, all the fulfillment, purchasing and warehousing is handled by someone else.

I know drop shipping can get a bad reputation, but when done correctly it can be an effective way to create a passive income streams. If you can program well, I'm not sure if I'd recommend it over a SAAS based approach. You'll likely be able to make more money with SAAS as you're creating your own products vs. selling an existing one. But the long-term upkeep is generally less for eCommerce vs. SAAS (guessing here, as I've never run a SAAS business).

Margins are a bit lower with DS, so it does take a while to build some organic traffic and marketing buzz. But once that starts to gain some traction, it's not too much work to get a team in place and automate things. And if you're willing to put in the time to make a high-quality site that addresses customer questions and buying hesitations up-front before the sale, it's even easier to automate on the back end for support.

But you do have to be careful about niche selection. Because drop shipping markets are fairly competitive (low barriers to entry), you have to be really selective about what nniches you get into. Specifically, I like to see really confusing niches where I can add lots of informational value, plus lots of accessories I can sell to increase overall margins). For anyone who is interested, I wrote a blog post on the three crucial things I look for when picking a niche for eCommerce and drop shipping:

[http://www.ecommercefuel.com/anatomy-of-profitable- niche/](http://www.ecommercefuel.com/anatomy-of-profitable-niche/)

</comment><comment><USER5> Residential real estate investments, mostly in San Diego, CA. I bought during the dip '08 to '12 and rent them out. Property managers take care of all of them for me. Most are condos, which are significantly better for cash flow than single family homes.

I got pretty lucky with them. One one I distinctly remember I bought for less than half of what the people losing it (short sale) still owed. They were all in pretty good condition, I just replaced the carpet, painted, made minor repairs, and replaced appliances.

</comment><comment><USER6> Social welfare sponsored by the tax payer.

</comment><comment><USER7> I enjoy having side projects and currently have 4 active ones that could realistically make at least a some money. But as a foreigner in the US (came as student, now on H1B visa) it's the unfortunate reality that it is illegal for me to pursue money-generating side projects. I am curious to hear if other foreigners have found ways to legally pursue their side projects while living in the US.

<comment><USER8> I have absolutely no idea how this works, but can't you just put it through a bank account/company you set up in your home country and pay tax on it there?

</comment></comment><comment><USER9> fixed income. muni CEFs are trading at a 10% discount to NAV. overall fixed income is under pressure due to fear of rising interest rates and fed tapering, so future interest rate hikes are partially priced in both in NAV terms and in discount. if you don't have any plans on selling your bonds (and hence, don't really care about the day-to-day price fluctuations of bond funds) and just want an income stream you could do worse than loading up on discounted, diversified CEFs that pass the smell test of being able to sustain their distribution.

the main risk here is inflation risk. if inflation in the country takes off your 5% yielding (likely 30% leveraged) bond fund is going to start to see its real return get eaten away quickly.

the alternatives are equities though. and right now the stock market is pretty scary to me.

<comment><USER10> I'm no bond expert, but aren't munis discounted in part due to default worries? There's a fear that a second wave of municipalities that survived the first wave of post-crisis bankruptcies may still succumb, since many avoided default by doing miscellaneous stop-gap and accounting tricks that may not be repeatable. Hence a risk premium.

<comment><USER9> Yes this is likely part of the reason but in general the discount arose due to the fed tapering issue since the discounts on all fixed income have widened together since. Regardless, a particular muni fund will be exposed to thousands of municipalities, so default risk is essentially diversified away, particularly if you invest in a managed fund where the fund managers have a track record of understanding the municipalities they invest in. Unless you are a devout believer in the efficient market, one could argue that the discount could in part be due to irrational investors selling their munis to buy equities in a media environment where scary headlines about Detroit going bankrupt are on CNN and Facebook stock doubles since it's IPO.

</comment></comment></comment><comment><USER11> I sell bitcoin on localbitcoins.com with a 5% profit margin. I wrote a set of scripts that automates the entire process for me, making it completely hands off. I've only been doing this for a month or two, but I've made a decent amount.

</comment><comment><USER12> Not completely passive but I run [http://wappalyzer.com](http://wappalyzer.com) which is very low maintenance and a decent secondary source of income.

</comment><comment><USER13> Server hosting. $50/u. Bring your own 1u box. The datacenter I'm affiliated with handles any hot-hands stuff. It's 99% passive for me.

</comment><comment><USER14> Affiliate commission checks from services who pay recurring commissions for referrals. These are truly passive - about $100/mo

<comment><USER15> What is your website? Who did you get started?

</comment></comment><comment><USER16> After making nearly $0 per month for the first year (yes, you read that correctly), [http://www.pingmate.com](http://www.pingmate.com) now generates excellent RR, though the first year was far from passive.

</comment><comment><USER17> Two Android apps I made on weekends. $50/mo ad revenue with just admob.

</comment><comment><USER18> Single family rentals (SFRs) which cash flow. I put 20%+ down on properties in solid locations (strong population/job growth, safe neighborhood, etc.). I save about 80%+ of my after-tax income.

<comment><USER19> I second the Single family rentals (SFRs). Follow the 12% rule which is that the house HAS to rent on an annual basis for at least 12% of purchase price. For example a $100K house has to rent for at least $12K per year ($1000/month). So put 20% down ($20K), get a 30 year fixed for $80K. Your expenses on monthly basis are mortgage + prop tax + prop manager + prop insurance = $500-$600. Rental income = $1000 per month. So you clear $400-$500 per month ($4800-6000/year) per rental property. With 20% down ($20K), that's a ROI of right around 20% before any property appreciation. Note: I didn't include closing costs which fluctuate a fair bit depending on lender and where the property is.

</comment></comment><comment><USER20> Games. I release one browser game (kinda like Travian or eRepublik, but simpler) pretty much every other month and they are actually a very good source of income. They pay all of my bills.

</comment><comment><USER21> Bitcoin mining.

<comment><USER22> Is that still working? With with hardware?

<comment><USER21> Ten friends bought in with me on a bunch of BFL hardware way back in the day, so we were fortunate enough to be ahead of the curve. It is quickly becoming less profitable though.

</comment></comment></comment><comment><USER22> CodeCanyon. Not very much, but that's cool to get 100$ each 2-3 months.

</comment><comment><USER23> AirBnb ebooks hosting reseller (singlehop)

</comment><comment><USER24> Buy shares of SPY and collect dividends.

</comment><comment><USER25> dividends

</comment><comment><USER26> \- Freelancing

<comment><USER27> This isn't passive.</comment></comment>


WhiteStorm TypeScript Boilerplate – A starter kit for crafting 3D applications - <AUTHOR> https://github.com/WhitestormJS/whitestorm-typescript-boilerplate <comment><USER2> If it meets the guidelines, this might make a good 'Show HN'. Show HN guidelines: [https://news.ycombinator.com/showhn.html](https://news.ycombinator.com/showhn.html)

</comment><comment><USER3> Really cool drool worthy project. The amount of js libraries and tools is hilarious though.

</comment><comment><USER4> Can someone explain how whitestormjs is "react-like"?

Is there some sort of virtual Dom for threejs that gets updated?

<comment><USER5> not at the moment. there is discussion to ensure our component API behaves somewhat expectedly as a react dev might expect - but it is still different. see [0]

that being said, we are experimenting with how to bring react-like (i.e. pure functional components with local state, and global state with redux) development to 3D (as you can see with this starter kit)

[0]: [https://github.com/WhitestormJS/whitestorm.js/issues/223](https://github.com/WhitestormJS/whitestorm.js/issues/223)</comment></comment>


My journey from high school to a feature in Forbes (thanks to you) - <AUTHOR> http://mxstbr.blog/2016/12/a-dream-come-true/ <comment><USER3> Great story, quite inspiring and a testament to new media being useful for professionals and innovators alike (e.g. his use of Twitter & HN connecting his work to how it was being used / viewed).

For all of those who are now offering to hire the guy, could you be any more stereotypical? It's just like in music - every record label or tech company wants somebody to show up on their door already famous and/or already with a reputation of success - you know, basically the total package. Invest and develop new talent? Well, that's what unpaid internships are for - <USER2> labor, and then we pick the best of the bunch...maybe! Same old song and dance. "Come back when you're famous."

This example is truly good for him, because he invested in himself when big- time names and others wouldn't bother at first, and now I hope he takes his time to pick and choose his opportunities now that he's earned his industry status.

</comment><comment><USER4> > I tried (again) to study Computer Science at the local technical university, > but my joy of programming was (and still is) sadly not accompanied by a joy > for converting numbers from the binary to the decimal system and back (much > to the dismay of my parents).

As a teacher on a local technical university, I completely understand what you're talking about here. However, the purpose of technical universities is to teach broads concepts on computer science (or computer engineering). Therefore, we have to start somewhere, building from basic concepts such as the need for digital "codification" up to the dozens or hundreds of concepts which will provide students with a better understanding of the field.

In your case, you pretty much decided that you would want to do frontend web development, so you made a choice. Where I teach, students only have one course which they will ever learn about html/css/js, and on a very basic level (there's a lot of information to fit into 3 years!). Assuming that most technical universities are like this, I think you made a good choice for you. However, if someday you decide to switch to backend development, making your way down the stack for DBs, or eventually up the stack for higher-level things, such as data analysis, ML, etc., you may probably find difficulties related to the lack of breadth on your understanding of the field.

All in all, just to say that you made a good choice for you, but that technical universities can provide students with a breadth of information which allows students someday, after some years of experience, to grok the similarities between most CS subfields..

<comment><USER5> "the purpose of technical universities is to teach broads concepts on computer science"

Which might be a fine way to teach in those nations where college is free, but even there, ignoring the interests of the student, and sticking with a standard canon of course work, undercuts the uniqueness of each student.

And in those nations where college is not free, then the cost of spending time on broad topics needs to be balanced with the student's ability to pay for it.

The style of teaching that you describe is criticized by Paulo Freire in his book "Pedagogy of the Oppressed".

"In the book Freire calls traditional pedagogy the "banking model" because it treats the student as an empty vessel to be filled with knowledge, like a piggy bank. However, he argues for pedagogy to treat the learner as a co- creator of knowledge."

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

This is a model of teaching that can work well if the student is affluent enough that they don't have to worry about money for several years, but it is a style of teaching that really breaks down for 2 important groups:

1.) adults who need to learn a new skill

2.) just about everyone who lives in a poor country

Freire developed his ideas while he was teaching adults to read and write.

There is a teaching style that caters more to the full circumstances of the students, taking into account their age and their economic situation and their interests, so that the teaching empowers them with knowledge, without also disempowering them in other ways (such as crushing them with debt).

<comment><USER4> > Which might be a fine way to teach in those nations where college is free, > but even there, ignoring the interests of the student, and sticking with a > standard canon of course work, undercuts the uniqueness of each student.

Public college here and throughout most Europe is almost free and most students attenting public universities do not incur much debt (if any at all). That is a trap that you have set up for yourselves (assuming you're from the US).

Nevertheless, every student (computer engineering, that is) can chose is own courses, so, they can follow their own interests. We just make sure that each student starts from a good technical point so he can be a "true" engineer (as in having an engineering degree).

> There is a teaching style that caters more to the full circumstances of the > students, taking into account their age and their economic situation and > their interests, so that the teaching empowers them with knowledge, without > also disempowering them in other ways (such as crushing them with debt).

1 to 1 teaching, although desirable, would not come cheap in any place in the world!

</comment></comment></comment><comment><USER6> Max has turned out to be a prolific contributor to the React community and an expert on the subject of React component styling approaches. He's also a pretty good speaker :)

I had a sorta-similar path to getting involved with Redux over the last year and a half, which I wrote about at [http://blog.isquaredsoftware.com/2016/09/how-i-got-here- my-j...](http://blog.isquaredsoftware.com/2016/09/how-i-got-here-my-journey- into-the-world-of-redux-and-open-source/) . I'm also pleased to note that Max has been one of the biggest supporters of my efforts to improve Redux's documentation and provide help to people learning React and Redux, and I really appreciate his encouragement.

<comment><AUTHOR> I remember first meeting you in the Reactiflux Discord during a lively discussion about Redux or somesuch. It's been amazing to follow your journey and I can't wait to see where you'll be going!

</comment></comment><comment><USER7> _> My original plan was to find a job, but most of the companies I contacted didn't even want to interview me. _

If you happen to be in a position of authority in a tech company in the bay area, I would personally contact this guy and ask if one of these companies was yours. If it was, you have some serious work to do because your hiring practices are costing you more than you can easily imagine.

<comment><USER8> I am curious how you come to that conclusion. Framework lust, particularly in the JS ecosystem, is inflated and often not representative of technical authority, experience, or sometimes even competence.

If I were a hiring manager and the candidate couldn't write very basic vanilla JS I wouldn't hire them either. I don't care that they have a bunch of github stars. The inability to solve simple problems without a framework is a liability.

<comment><USER9> Github stars mean very little. It is free to give one and many people just star every repo they see.

The #1 repo by stars is FreeCodeCamp. I have not used the service, but if [https://news.ycombinator.com/item?id=11911647](https://news.ycombinator.com/item?id=11911647) is to be trusted then the count is inflated:

> GitHub part is so flawed... because FreeCodeCamp inflate their popularity by > requiring during onboarding for the user to star their repository yet > keeping them at the top. It's like if I told everyone to vote up my Hacker > News posts... and gave them the link to do it and GitHub has no remedy for > that inflation.

I'm also guilty of starring repos that seem cool but have not read the code or tried to use it. I've never used D3 in a project and can't speak to its quality, but I've seen some wicked cool demos and starred it as a bookmark of sorts.

<comment><USER10> Free Code Camp is a _massive_ outlier. It received most stars of any repo at 177,914 stars in 2016, and the second most (the google-interview-university which has appeared a few times on HN) has only received a fraction of that at 28,727 stars in 2016, which likely did not use as much growth hacking.

Full list of the Top 1000 Repos, freshly queried from BigQuery: [https://docs.google.com/spreadsheets/d/11bGpZq6ixlhrmQnzEUqb...](https://docs.google.com/spreadsheets/d/11bGpZq6ixlhrmQnzEUqbgbwTQwQVdtvILjp32vaOKBc/edit?usp=sharing)

<comment><USER11> While it is an outlier it is also proof that it is a poor system of measurement.

<comment><USER12> It is? I think the problem is how we (mis)interpret the data to mean anything more than what it actually says.

<comment><USER13> So what's the takeaway, "Repo stars are an accurate measurement of how many stars a repo has"?

</comment></comment></comment></comment></comment></comment></comment><comment><USER14> Congratulations Max.

Max worked with us to create an interactive course on React/Redux[1]. Just wanted to say that he's an awesome guy to work with. Always willing to help and giving constructive feedback.

Keep doing the good work Max. Congratulations again. Looking forward to 2017 and beyond.

[1]: [https://www.educative.io/collection/5642398931615744/5741031...](https://www.educative.io/collection/5642398931615744/5741031244955648)

<comment><AUTHOR> Hey Fahim, thanks for the kind words!

\----

I have a discount coupon for the course... It was originally meant for my friends, so I hope Fahim doesn't mind me sharing it, but if you enter "au- christmas" during checkout you can get yourself 60% off the original price! (I hope it's alright to post this, if not let me know mods and I'll delete this part!)

I hope you enjoy the course and Merry Christmas!

</comment></comment><comment><USER15> mxstbr, I just want to sound one comment: the seamless way that 'max stoiber' transitions to the "<mxstbr>" "logo" when scrolling down, the smoothness of the metamorphosis, is really impressive. Lots of sites do this type of thing, but for some reason they all suck. Yours doesn't. Great job.

<comment><USER16> It's a little annoying on mobile - if you read to the bottom, you have to press back ~15 times to cycle back through the sections get to the previous page.

<comment><AUTHOR> Extremely sorry about that, was totally unrelated to the header. Finally managed to replicate it and fixed it!

Really super sorry for the horrible experience.

</comment></comment></comment><comment><USER17> While I am happy for his success, a part of me can't help but wonder: "Is being popular on twitter a big part of front end development these days?: JS, CSS, HTML and Twitter Followers"

</comment><comment><USER18> This site messes up my browser navigation worse than anything I have ever seen before.

<comment><USER19> I thought about making the same comment but then figured I was just being salty because my 2016 was a failure :(

</comment></comment><comment><USER20> Congratulations ! It seems you built something people needed and loved :) .

Your story is an inspiration to people who think they're too "green" or "new" to contribute :)

<comment><AUTHOR> Thank you for the kind words!

I absolutely agree, many junior developers are afraid to jump into open source – even though they totally don't have to be!

The pain points you have while developing, no matter at which level of experience, other people probably have them too. Some of them are already solved, but many of them aren't! If you solve one of them, it can only be good for you to generalize it a bit and push it on GitHub and npm.

Worst thing that can happen? Nobody uses your solution, oh well.

Best thing that can happen? It could change your live.

So why not do it?

<comment><USER21> "So why not do it?"

Because giving your work away too freely devalues your work and that of your peers.

That may be offset by the benefits depending on the circumstance.

</comment></comment></comment><comment><USER22> What a great story! As a fellow React developer (amongs other things) I really appreciate the stuff you have given back to the ecosystem (and in a really short time to boot!) Keep up the good work!

</comment><comment><USER23> Does anybody know the font used in the screenshot [1]? It looks like a pretty typical monospace coding font but has fantastic pseudo-cursive italics. I can't figure out what it is, but I want it!

[https://twitter.com/mxstbr/status/786478628829814784/photo/1](https://twitter.com/mxstbr/status/786478628829814784/photo/1)

<comment><USER24> It's Operator Mono [1][2]. It was asked and answered further down the thread.

[1] [http://www.typography.com/blog/introducing- operator](http://www.typography.com/blog/introducing-operator) [2] [http://www.typography.com/fonts/operator/styles/](http://www.typography.com/fonts/operator/styles/)

<comment><USER23> Thanks! I didn't see it mentioned here or in the HN comments, and looking at a bunch of font samples didn't turn it up, either. However I did stumble into Fira Code [1], which has some awesome ligatures for programming!

[1]: [https://github.com/tonsky/FiraCode](https://github.com/tonsky/FiraCode)

Edit: _ouch_ Operator Mono is $199 and up. I've purchased quality fonts before, but that's well above my impulse-buy threshold.

</comment></comment></comment><comment><USER25> That's awesome and everything, but why can't I back out of your site??

<comment><USER26> my thoughts exactly, lol

<comment><AUTHOR> Tracked it down and fixed it, should work fine again now – sorry about that!

</comment></comment></comment><comment><USER27> "Books read: 40"

WOW. How did you find time for this?

<comment><USER28> Airports visited: 24 Airport visits: 76 Airplanes boarded: 62 Kilometers travelled: 323,877

</comment></comment><comment><USER29> Cool, a real inspiration.

</comment><comment><USER30> Happy user of Styled-Components here. :)

Thanks for your amazing work!

</comment><comment><USER31> >My original plan was to find a job, but most of the companies I contacted didn't even want to interview me.

@mxstbr - Contact me at firstname.lastname@example.com and send me your resume/cover letter/cold email that you used to approach these companies.. You probably just need a few tweaks with your personal pitch.</comment>


GM CEO: Autonomous Cars in 2019 - <AUTHOR> https://finance.yahoo.com/video/gm-ceo-mary-barra-autonomous-165233833.html <comment><USER2> I was hoping for some evidence that we are that close. Her answer sounded more like a sales pitch that hit on all the buzz around autonomous vehicles.

Is there any doubt that Waymo is the furthest along here?</comment>


Where the 'No Ending a Sentence with a Preposition' Rule Comes From - <AUTHOR> https://www.atlasobscura.com/articles/why-cant-you-end-a-sentence-with-a-preposition <comment><USER2> Even if this article exists just to make the headline possible I'm ok with that.

<comment><USER3> From whence the sentence comes!</comment></comment>