The HDT 2016 Code School Rankings - <AUTHOR> http://higher.team/blog/2016/december/the-2016-code-school-rankings <comment><USER2> Criteria used is not rigorous so I would take these rankings with a grain of salt.</comment>


Wingtip of the new Airbus A350 - <AUTHOR> http://i.imgur.com/lMOQady.jpg

<comment><USER3> Mind you, the following is just rumor talk:

An aerodynamicist who used to work for the company once told me that when Airbus (in this millennium) designed a certain plane, they had a wing design with and without a winglet. They had equal performance. The winglet one was chosen for marketing reasons.

Same with composites - the more you use, even when it increases weight - <USER2> better it looks in marketing. It is perceived as more modern. I've heard similar things about some mechanisms V-22 Osprey - that composites were used where old fashioned metals could have worked for lower weight.

</comment><comment><USER4> This makes me wonder if we'll start seeing wings which change in shape depending on the stage of flight.

It is my understanding that the up-turned wing tips reduce ground-effect lift, which creates an upward force on the wing as the plane comes in to land.

If the wing tip is not beneficial in flight, maybe we'll start seeing the extra surface area used for lift during flight, and turned up only during landing and taxiing.</comment>


10,000+ users in 24 hours & YC funding a few days later: lessons learnt - <AUTHOR> http://blog.rapportive.com/the-accidental-launch <comment><USER2> Great PR for Heroku and Nezumi:

 _If we were on a cheap VPS, we would have crumbled to pieces like Cobb's limbo in Inception. As we were on Heroku, we could simply increase the number of dynos. I still vividly remember when our traffic hit. I was away from my desk, so I reached for my iPhone and dialed us up to 20 dynos using Nezumi. A few seconds later, we had scaled._

<comment><USER3> Glad it helped you out!

<http://nezumiapp.com>

Here's some promo codes, first come first serve, US App store only:

HELW6W9WM7TT

LHYWXEF3MW7L

7PXPFAFT6EL7

MKXH39WWWXKL

YKYT6H3KKP6E

WMNNXL6NRH9L

KLPAPYJRTLLM

3P6FW6NFNEAN

T7J9A79HYKY3

63HJH7NTYXXR

<comment><USER3> And a few more for those late to the game

6EA3K3EJMW4Y

9M3N36YFFXXR

FRMN3PXL777Y

HN6F3PNEPPK4

4RA47J33WHMF

HKYXTJY99RYF

N3A3HNN7YKMW

9YA3RMWJJYWX

NLY67WJ393WT

<comment><USER4> _And a few more for those late to the game_

Thank you!

</comment></comment></comment></comment><comment><USER5> One thing I've been wondering - how does rapportive remove the Google Adwords in the right sidebar without pissing off Google? This has got to be a violation of their TOS or something isn't it?

<comment><USER6> That was asked previously but I never really saw a (valid) answer: <http://news.ycombinator.com/item?id=1568890>

</comment></comment><comment><USER7> Great work guys. Ride the rocket as high as you can!

(You're missing an opportunity to funnel people to your site from your blog. You should have a little PR blurb and link at the top of the page)

Also... Additional respect that you took the time to send some love to your service and infrastructure providers.

<comment><AUTHOR> Thanks :) You're absolutely right, we need to customise the posterous theme a tad. Edit: added blurb, not yet a link.

</comment></comment><comment><USER8> That's not a startup, it's a Gmail feature. Amazes me what gets financing nowadays...

<comment><USER9> What gets financing is founders. And what smart founders do is launch as soon as they have anything usable. It's not the last thing they'll build.

See part 8, and in particular the third paragraph:

<http://www.paulgraham.com/really.html>

It makes me wince for HN to see so many people upvoting the parent. It's not just the meanness of it; it's that it's both mean and wrong. Surely at this point everyone is at least familiar with the strategy of launching something minimal and then expanding it. And yet here is a startup doing exactly the right thing, and they have a mob jeering at them.

<comment><USER10> Part of the difficulty is convincing a strongly technical crowd that companies and products live or die for reasons other than technology.

Unless they're solving crazy hard problems, a lot of engineering types are just going to be underwhelmed. Add in a lot of early success and that quickly turns to cynicism and frustration.

<comment> j-g-faustus Speaking as one of the technical crowd, it is hard to adjust to the fact that all of your skills put together contributes only a few percent to the success of a product.

It is obviously true, but it still takes a while getting used to :)

<comment><USER10> Oh I agree and it's my reaction too, "yeah but what problem are they solving? how are they doing it?"

That's the extent of my evaluation. And that's also why I'm not an entrepreneur. :)

There's a definite mismatch between the valuation function I (and a lot of us, I think) use and what the market uses which is addressed by the YC's of the world.

But the bottom line is I don't think pg should misconstrue the confusion (and sometimes frustration) as malice.

</comment></comment></comment></comment></comment><comment><USER11> Great write-up. I'd heard of you but couldn't remember what your product was. Have you thought about putting a PR-type blurb at the top of your blog, like "Rapportive shows you everything about your contacts right inside your inbox." with an obvious link to your website?

<comment><AUTHOR> Good point. Added the blurb to the blog, but couldn't find a quick way of adding a link. That might require theme customisation. (Or am I wrong?)

<comment><USER11> I'm not familiar with posterous. If you don't want to change your template, you could copy & paste the link/lead into each blog post as if they're press releases, which they might effectively be.

</comment></comment></comment><comment><USER12> To the founders: Congrats and thanks for sharing your reflections with us.

Is there a Rapportive API in the works?

I would love to integrate Rapportive into some apps I'm currently working on instead of plugging into the Gmail sidebar.

<comment><AUTHOR> Hey Fred, thanks for your kind words.

Yes, there is a Rapportive API. It doesn't allow for Rapportive to go inside other applications, but it does allow folks to embed their own applications inside Rapportive. Would that be useful at all to you?

For example, MailChimp recently released an integration which allows Rapportive users to see how the people who email them interact with their email newsletters. Checkout [http://www.mailchimp.com/blog/mailchimp-in-your- gmail-with-r...](http://www.mailchimp.com/blog/mailchimp-in-your-gmail-with- rapportive) and this funky video: <http://blip.tv/file/3859911>

There are more of these Rapportive applications, or Raplets, at <http://raplets.com>

You can find the documentation at: <http://groups.google.com/group/raplet-dev> <http://groups.google.com/group/raplet-announce>

<comment><USER13> That MailChimp integration is a _great_ idea! I could _so_ easily sell some of our clients on that. (I don't suppose you've got anything in the works with Campaign Monitor on that front?)

<comment><AUTHOR> Nothing yet on Campaign Monitor, but I've added it to my list. (If it helps, Constant Contact is in the works.)

</comment></comment></comment></comment><comment><USER14> I wonder how are they going to make money off this.

<comment><USER15> The obvious guess would be sell it to Yahoo/Microsoft/Google, but I hope they have a more creative solution than that.

<comment><USER16> A meta-social network profile. In all seriousness this seems like an awesome tool for people in HR, PR, or anywhere you have to deal with unknown peoples. Integration with desktop email clients- OutLook, ThunderBird, Mail, ect- would also be nice. I see a bright future if they play their cards right.

</comment></comment></comment><comment><USER17> How do you justify removing gmail ads and replacing them with your social addon? Isn't google going to be slightly pissed?

<comment><USER18> Nah, anything that makes Gmail more useful is good for Google. The ads don't mean much.

<comment><USER19> If they "didn't mean much" Google would have removed them. They make Google millions.

Obscuring other peoples advertising is a douchebag move.

<comment><USER18> No it's not. It would be if they were replacing them with their own ads, but they're adding tremendous value to Gmail.

</comment></comment></comment></comment><comment><USER20> I like the idea and love to see it working for a long time, but I totally see GMAIL doing something like this in the future or hopefully buying you out...

<comment><USER21> They could obviously make it happen for other platforms and the API could be monetized :)

</comment></comment><comment><USER22> I agree with most of this post except that you should build to scale. Scaling isn't what you should be focused on. If you focus on this you will loose sight of the product you should be developing and responding to user feedback.

<comment><USER23> You're quite right - spending significant effort on scaling when you're building an MVP is probably wrong. The point is that we got our first 10,000 users without _any_ scaling effort.

When writing this post we talked a lot about this, and the wording is quite carefully chosen: be _ready_ to scale. Having a contingency plan _in case_ you need to scale, however, _is_ a good idea if it doesn't cost too much (in either money or distraction).

The observation we make in the post is that cloud hosting like Heroku or Google App Engine makes it much more likely that you can be _ready_ to scale _without_ any substantial effort early on.

Obviously the "cloud scales easily" line only gets you so far. For example, while the web tier scales easily, if you built on a relational database that will impose a limit on your magical cloud scaling powers. Once you hit that limit, you still have to face up to the fact that scaling takes care and effort. But cloud hosting lets you delay that effort until you're at a size that warrants thinking about it.

Maybe we should have made this point more directly in the post: be _ready_ to scale, because (for many applications) _it no longer costs you very much_.

<comment><USER22> Great response. I would say that developing on Heroku and Google App Engine drives practices that lead to the ability to scale. This can be done with any hosting provider, as long as you are ready and know what to do.

</comment></comment></comment><comment><USER24> Right place, right time, good product, and a little luck. That's awesome to read, hear, and see. I wish them the best and hope all my endeavors bear such tail winds.

<comment><USER25> this.

<comment><USER26> FYI: a 'this' comment is better done by simply upvoting and not commenting at all.

</comment></comment></comment><comment><USER27> Congrats on your success! You know you have a good product when people want it before it's even officially public.

</comment><comment><USER28> Congrats to the founders. Great insight on really how Heroku can be beneficial.

</comment><comment><USER29> Quite nice. I would be interested in seeing this in Thunderbird, though.</comment>


They Screwed Us. Right Before They Screwed Us Again. - <AUTHOR> http://techcrunch.com/2012/12/06/they-screwed-us-right-before-they-screwed-us-again-poohead/ <comment><USER2> I'm probably going to get downvoted to hell about this but... I can not stand Arrington's whinging (even though I certainly deserve what I get for clicking on the linkbait title).</comment>


SOPA is not dead — now it is an Executive Order - <AUTHOR> http://jdnash.com/2012/09/sopa-is-not-dead-now-it-is-an-executive-order/

<comment><USER2> Unbelievable. Can't even get the fucking acronyms right.

SOPA is the "Stop Online Piracy Act". SOPA expanded criminal liability for copyright infringement and provided new tools for rightsholders to shut down suspected infringing services.

The executive order discussed in the WaPo article regards CISPA. CISPA has nothing at all to do with SOPA. CISPA would have allowed providers extended protection from civil liability if they shared information about network attacks with other providers and with the government; equally importantly, CISPA allowed _the government_ to share information about network attacks with providers, which is something it has no effective way of lawfully doing now.

CISPA has so little to do with copyright and piracy that the draft of CISPA that the House passed explicitly exempted IPR breaches of all sorts from the mechanism. But that doesn't stop the Internet from rolling all these policy issues into a single ball and yelling at it.

The EO Obama signed does even less than CISPA; an EO can't provide liability shields to private companies. Mostly, the new EO just tells the various federal bureaucracies to pretend to that they're actually doing something to improve the security of our swiss-cheesed government IT systems.

<comment><USER3> It's fairly clear the SOPA/CISPA anger was a lot of bandwagoning when many of the opponents don't even know what it said.

</comment></comment><comment><USER4> wash post link on that page is dead, so... useless.

but here is something: [http://www.federalnewsradio.com/473/3056196/White- House-test...](http://www.federalnewsradio.com/473/3056196/White-House- testing-approach-called-for-in-draft-cyber-order-)

Which linked to this which scares me. A new CMM from may that deals with energy. CMM red tape didn't save contractors from fucking up the shuttle program- how is it going to help our power plants from being "hacker safe"? [http://energy.gov/sites/prod/files/Electricity%20Subsector%2...](http://energy.gov/sites/prod/files/Electricity%20Subsector%20Cybersecurity%20Capabilities%20Maturity%20Model%20%28ES-C2M2%29%20-%20May%202012.pdf)</comment>


Facebook is shutting down Friend List Feeds today - <AUTHOR> https://techcrunch.com/2018/08/09/facebook-is-shutting-down-friend-list-feeds-today/ <comment><USER2> That's too bad. Whenever I unfollowed someone, I'd add their account to a Friend List so I could _occasionally_ take a look at accounts I'd unfollowed. Sometimes people would get annoying over something but eventually calm down and start posting good stuff again. It's going to be a lot harder to recognize when that happens now.</comment>


My favorite bug: segfaults in Java - <AUTHOR> https://lukeshu.com/blog/java-segfault.html <comment><USER3> This isn't a bug in the compiler or the JVM. The Java spec explicitly allows this optimization to happen. From The Java Language Specification (SE 7), section 12.6.1:

> Optimizing transformations of a program can be designed that reduce the > number of objects that are reachable to be less than those which would > naively be considered reachable. For example, a Java compiler or code > generator may choose to set a variable or parameter that will no longer be > used to null to cause the storage for such an object to be potentially > reclaimable sooner.

Also, the "this" keyword is treated like a parameter. (See the end of section 2.6.1 of the JVM spec.)

<comment><USER4> so then why do you think the segfault is occurring?

<comment><USER5> Because the author of the code didn't take into account this part of the language spec

</comment></comment></comment><comment> amit-bansil I've done a fair bit of work interfacing memory managed languages like Java & Python with "unsafe" native code and found that this problem actually crops up often.

The first issue is that finalizers should NEVER be relied upon to clean up system resources the way that you might in a language with deterministic garbage collection like C++. Instead, expect clients of interfaces that use system resources to manually call some 'close' like method. Use finalizers to warn clients that they are leaking. Josh Bloch has an excellent writeup on this[†]:

[http://www.informit.com/articles/article.aspx?p=1216151&seqN...](http://www.informit.com/articles/article.aspx?p=1216151&seqNum=7)

The second thing, as I believe @btown is saying, is that the child object seems to depend on memory that it doesn't own a strong reference to. I bet the whole memory graph here is just a tangled mess. I used to think that that was just the nature of graphs. When I first started working with GC that couldn't handle these kind of cyclical structures without being explicitly told I thought that it was an absurd premature optimization. Then, this wise old hacker peered at my code, smacked me on the back of the head, and grumbled that if I couldn't clearly explain the reference hierarchy it wasn't just the software that would be befuddled, it was too complicated for his old brain as well.

I'm sure that this can't be true, but I am starting to suspect that all the tremendous work that has gone into fast pause-less concurrent GC has been for naught. I wish that when GC encountered a cycle it would just tell the programmer that they now have a leak, maybe even suggest where it could be fixed with one of those neat little IDE quick fixes, and continue chugging along.

tl;dr When you have a hard problem let someone else deal with it.

[†] Granted, Bloch does make an exception for 'native peers'. My understanding of that pattern, however, is that the key is not letting some other object walk off with a reference to your peer, which is exactly what has gone wrong here.

(Aside: Josh Bloch's Effective Java & Java Puzzlers are fantastic. They are worth reading for programmers who use any language.)

<comment><USER6> "I wish that when GC encountered a cycle it would just tell the programmer that they now have a leak..."

Wow. Overreact much? :-)

Garbage collection works great for one use case: managing heap memory. Please, let's not return to a universe where you need to free each chunk of memory piecewise. That makes freeing memory O(n) in the number of chunks freed, where modern collectors can free unlimited numbers of objects in O(1) time. Compared to this, malloc and free are a little like keeping score in soccer by tracking every action that does not result in a ball entering a net.

The trouble is finalizers. Finalizers suck. They tie the management of one resource (say native memory or file handles) to an unrelated resource (heap memory). This has the terrible consequences highlighted by this story, plus others. It keeps the native resource tied up until the collector decides to run, for one thing. It also harms performance in secondary ways even when the finalizer isn't running. For example, finalizers typically defeat escape analysis, meaning objects with finalizers can't be stack-allocated.

It's a good idea to use finalizers mostly for detecting invalid final states of objects (like leaking resources), as long as you stay aware that finalizers can slow down your program in unexpected ways.

[These are my personal opinions, not those of my employer.]

<comment><USER7> >That makes freeing memory O(n) in the number of chunks freed

A GC can't outdo that. For everything the GC frees, it has to do _some_ work to answer the question, "Should I free this or not?" Even if that question can magically be answered with a single CPU instruction, that's still O(n) answers in the number of chunks freed.

<comment><USER6> I think you're referring to a mark and sweep collector. Java's garbage collector uses better algorithms. The collector never even looks at objects that are not referenced from the root set, and an allocation operation is nothing but a pointer bump. Even Cheney's algorithm from the early 1970s works this way, and collectors have only improved since then.

<comment><USER8> Except that the OS zeros memory when it's released...

<comment><USER6> The JVM doesn't release the memory to the OS when garbage is collected; only when the heap shrinks. Any zeroing the OS might do is proportional to the size change in the heap, not to the number of objects freed.

<comment><USER8> Good point.

However, that brings up a related issue - namely that the JVM requires all (or close enough to all) object memory to be initialized. And given that the amount of memory required to be initialized is at minimum linear w.r.t. the number of objects required to be initialized...

Work done is still O(n) minimum w.r.t. the number of objects allocated regardless.

<comment><USER6> Well, it's hard to deny that the work done by the program is O(n) (or even Ω(n)) in the number of objects created by the program. That's almost tautological.

The thing that is interesting about the asymptotic complexity of garbage collection, though, is that it gives you a peek into the future of GC overhead as heaps get larger.

Consider a program with some bounded steady-state memory consumption, and a GC that takes O(1) time to free unlimited amounts of memory. In such a system, you can reduce your GC overhead arbitrarily simply by enlarging the heap. A larger heap gives a larger time interval between collections, yet doesn't make the collections any slower. Don't like 6% overhead? Fine. Make the heap 10x larger and you have 0.6% overhead.

This time-space trade-off is always available to the end user of such a system. It's certainly not available with more primitive systems like malloc+free.

[These are my personal opinions, not those of my employer.]

<comment><USER8> _It doesn 't matter_ what the time to free memory is as long as it is O(n) w.r.t. the number of objects (or less), the limiting factor is allocation. As, in steady state (as you are assuming), all memory freed will be reused, and (effectively) all memory used will be written to at least once, and memory used by a group of objects is at least O(n) w.r.t. the number of objects.

So no, I don't see the advantage you say. I see that, in the _best_ case, it's on par with non-GC'd systems, asymptotically speaking.

And yet, I see plenty of disadvantages. To start:

I have yet to see a GC that's O(1) w.r.t. the amount of memory to free. Best case? I'll grant you that, for an extremely naive copying collector. But the chance of that best case occurring is... not significant. Especially with the more sophisticated algorithms.

And again, as above, it doesn't matter how long it takes to free memory. As long as it's linear or sublinear, it'll be dominated, asymptotically speaking, by how long it takes to initialize that memory again. And in steady-state operation it will be reinitialized.

Not to mention the practical effects.

For instance: GC thrashes cache. Badly. It completely kills the concept of a working set. You can't work around that by making your heap larger - <USER2> anything it makes it worse. It makes the time period between thrashings longer, yes, but makes them worse when it does happen.

GC also doesn't scale well to large numbers of cores. In particular, your worst case "always" will be when the GC has to check with every core to see if it still has a reference to something. And given that processor numbers are where most of the performance improvements seem to be coming in... You mentioned memory size improvements but didn't mention increasing numbers of cores.

GC also (almost always) has field(s) per object. Minimum of O(1) overhead per object initialized.

Which means that, generally speaking, the overhead doesn't asymptote to zero. It asymptotes to a constant - and non-negligible, at least from what I've seen - amount of overhead.

<comment><USER6> I seem to have hit a nerve here. Perhaps I haven't been clear about some of the points I'm making, which I don't think are all that contentious.

I'm not saying a fast GC can reduce the cost of allocation. I'm saying a fast GC can reduce GC overhead. I think that's an uncontroversial statement. I can only insist so many times that Java's GC doesn't touch dead objects at any time during its scan. If you want to disagree with me, that is your prerogative.

I agree that a GC walk can thrash cache when it happens. However, a copying GC can also rearrange object layout to improve locality. Which effect is more significant depends on the workload.

I didn't mention the number of cores because it didn't occur to me that it was significant to you. GCs can scale just fine to many cores. No core has to "check" other cores: each core can check its own local data, depending on the tactics employed to deal with NUMA. There are always challenges in scaling any parallel workload, of course, and there are always solutions.

Our GC (in IBM's J9 JVM) uses 8 bits in each object. With classes aligned to 256 bytes, there are eight free bits in each object's class pointer. Hence, J9's object model has one word of overhead on top of the user's data, which is what malloc/free typically needs to track each object's size anyway. No disadvantage there.

[These are my personal opinions, not those of my employer.]

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> From the article:

        public type1 getFrame() {
          type2 child = this.getChild();
          type3 var = this.something();
          // `this` may now be garbage collected
          return child.somethingElse(var); // segfault comes here
        }

> Where the destructor method of this calls a method that will free() native > memory that is also accessed by child; if this is garbage collected before > child.somethingElse() runs, the backing native code will try to access > memory that has been free()ed, and receive a segmentation fault.

If child needs some block of shared memory contained in the parent (this)... shouldn't there be a shared object referenced by both parent and child that owns the block of shared memory? Then as long as child isn't GC'd, even if the parent/this is GC'd, the shared memory-owner won't be GC'd, and the memory will be safe.

For the C++ equivalent of this pattern, you'd want to scope the shared memory to a reference-counted RAII resource (say, a shared_ptr), and make sure that any actor that interacts with it holds a reference for the actor's lifetime. It's unreasonable for Java to "guess" that you meant anything different from this pattern - what if you actually wanted the parent object to be eligible for GC (say, if it's hogging other resources the child doesn't need) between this.something() and child.somethingElse()?

So I'd consider this a WontFix if I were a JVM developer, and maybe write a blog post about it and put it on HN if I had the time. Something something feature not a bug, etc.

EDIT: To be clear, the child is trying to have low-level access to a resource it has no ownership stake in, implicitly or explicitly. So there's no reason for that resource to stick around for the child. It's like a spouse taking the house in a divorce - the "prenup" in Java is that only reference-holders have any expectation for an object to be accessible to them. If the "child" didn't want to find itself segfaulted on the streets, it should have thought about writing that "house" (the shared memory) into its prenup, hmm?

EDIT 2: The analogy kind of fell apart, I think. But my point still stands. Apologies to any divorced HN'ers I may have offended.

</comment><comment><USER10> this is not a bug. author doesn't seem to understand how jvm or managed memory works. he uses memory from parent object in child code without holding a reference to it in child object. If his code was in pure java this simply won't be possible. The only reason he is able to do this is via native code.

Even in native code, it is wrong to have a pointer to managed memory without using the Global/Local Ref() methods that the jvm provides.

In summary, the jvm is behaving correctly with respect to GC. Author doesn't know how to use JNI and has caused the crash.

<comment><USER11> The author has not written the bad code. From what I understand he was just debugging it.

>The dashboard was written in Java, and the source was available (under a 3-clause BSD license), so I dove in, (...)

Also, nowhere in the post he says that it is JVM's fault.

<comment><USER12> >The issue was that Java was making an unsafe optimization (I never bothered to figure out if it is the compiler or the JVM making the mistake, I was satisfied once I had a work-around).

He says it was the JVM or the compiler's fault. He doesn't blame the code.

<comment><USER13> IMO, whether he though this explicitly or not, he was really just disagreeing with the Java spec. Of course, effectively any bug you encounter could be dealt with by blaming the spec writers, but in this case I may agree with him. Depends on how much this particular optimization saves.

</comment></comment></comment></comment><comment><USER14> I've faced similar issues in the .NET world. There is a built in method, `GC.KeepAlive()`, that does nothing other than keep the reference alive to the eyes of the garbage collector.

Raymond Chen explains it well here: [http://blogs.msdn.com/b/oldnewthing/archive/2010/08/13/10049...](http://blogs.msdn.com/b/oldnewthing/archive/2010/08/13/10049634.aspx)

<comment><USER15> It completely defeats the whole point of a garbage collector if you have to resort to hacks like this. I understand why it is done. A lot easier to use the work around then to fix the root problem.

Unfortunatelly these types of bugs have a nasty way of showing up in other places where it can be even harder to debug. Long term these bugs need to be fixed otherwise your code will just be a ticking bomb. The worst part is when they combine with other bugs and they become even harder to debug.

<comment><USER16> I wouldn't say "completely defeats". The hacks are usually there only when you need to manage the lifetime of something that's not managed by the garbage collector. I've seen it used for mutexes, for example, to keep a mutex alive and locked.

You could say that the problem is that people abuse the garbage collector to manage something it shouldn't manage, or you could say that the problem is that garbage collectors are bad at managing anything that isn't memory. (I would lean towards the latter.)

</comment></comment></comment><comment><USER17> I am very disappointed that this.getSize(); at the end fixes the issue. Since it has no side effects and the value is never used anywhere, I would expect the compiler to remove that call.

<comment><USER18> The Java compiler does almost no optimization. I think it's an idealistic thing: All optimization is supposed to be done by the JVM. Personally I think that sounds stupid.

<comment><USER19> The compiler doesn't (shouldn't) know what the runtime system will look like, so it cannot make optimizations as safely or effectively as the JVM can.

<comment><USER8> Except that, as evidenced by this case, the JVM isn't doing the optimization either!

</comment></comment></comment></comment><comment><USER8> Sounds like a particularly nasty bug.

Especially as there's nothing preventing the "fix" from being optimized out by the JVM, which would reintroduce the problem all over again.

<comment><USER20> The issue is an unsafe optimization. If you change optimization to re- introduce the bug, that's a pretty straight-forward regression.

<comment><USER8> I meant the author's workaround of adding a call to `this.getSize()`, not the JVM fix.

<comment><USER20> Ah, yes, the instability of fake fixes to compiler bugs. I recall a friend of mine once had a bit of C code that would compile and run correctly only if debugging was enabled. His fix, to get it to run with full optimizations without segfauting was what he referred to as "the God code": int god = 1; To this day no one knows why that did anything at all, but at some point the compiler bug was fixed without anyone filing this bug that we know of.

<comment><USER8> May not even be a compiler bug in that case.

That's a classic symptom (and "fix") for an array that was {over}/{under}run by one (or some small number of) element(s): the extra allocated space on the stack may have prevented it walking into unallocated memory (and segfaulting).

Now, if he'd run it under valgrind and it showed no problems of that sort, and it still segfaulted...

<comment><USER20> My understanding is that it was reversed from that, where with stack canaries and debug tracing nothing odd was happening, but when things are run without defenses it _stops_ working, instead of starting to work because you're paying less attention. That was why it was so odd -- obviously the array overrunning (or passing (void*) &local_var into subroutines where it's cast to a different type, etc) would be a pretty obvious candidate.

</comment></comment></comment></comment></comment></comment><comment><USER21> If child needs this then why is it being free()d in the first place? I don't get what's so strange about the behavior here.

</comment><comment><USER22> I remember this bug. Our workaround was to parse the output of toString() for 0x0000000, and simply drop the frame when it happens.

<comment><USER23> I'm curious. Was it something that existing across many JVM updates ? Given the stability of the language if I have ever seen an issue (rare) there's always been a choice of 10-20 JVM versions to pick from.

<comment><USER22> The competition gives us six weeks to build the robot, before we have one or two three day competitions. Apart from possibly attending non-official off- season competitions, that is the only time we would use the code before the next years competition, which is completely different, and for which we are required to right entirely new code[1].

Once we got a hack working, we ran with it and rarely tried to clean up. In this case, we didn't bother trying a different JVM.

[1] Unless the code is open source (as ours was), in which case we were explicitly allowed to use it.

</comment></comment></comment><comment><USER24> Do not implement finalize() with side effects. Better to not implement it at all, as recommended everywhere.

</comment><comment><USER25> One more reason not to use "finalize". Did you know that there is no guarantee that it every gets called? That's because there is no guarantee for objects to be garbage collected as long as there is enough memory.

</comment><comment><USER26> Team 1024! Always an easy name to remember. Hello from team 166!

</comment><comment><USER27> I only have an amateur interest in JVM development, but doesn't this bug break some rules around GC 'object roots'? Even if 'child' and 'something' are referentially copied to local variables on the calling stack, I believe 'this' should continue to act as a root for both of them. I think.

<comment><USER28> Not necessarily. Those "getChild()" and "something()" methods could, for example, return new objects. this is only the root of child and something if this retains references (i.e. member variables) to these objects, which I'm guessing was not the case in this example.

<comment><USER27> Ah, yes, didn't consider that. But what about 'this'?; for what reason could the JVM choose to GC an object that the calling thread is currently running in? The example method exists in an instance of 'this' and isn't static.

<comment><USER29> Execution in Java does not have a concept of "current object". 'this' is passed in a magic way, but it does not exist in a magic way. It's like any other variable, and can be collected as soon as it's not needed. Which can be extremely early, because optimizations can reduce the 'need' for a variable to only its side effects.

Go pick apart aggressively optimized and inlined code and I bet you can find situations where 'this' never even exists.

</comment></comment></comment></comment><comment><USER30> I think that

       this.getSize(); // bogus call to keep `this` around

could be optimized away since the value is never used.

</comment><comment><USER15> That is a huge bug. I hope it's been fixed.

<comment><USER23> It was from 2 years ago i.e. early Java 7 days.

There have been 116 updates since then (33 public). Given that segfaults almost never happen in the JVM (I've never seen one) I can imagine it would be the highest priority to be fixed.

<comment><USER11> This is not a Java bug.

<comment><USER31> How dare you.</comment></comment></comment></comment>


Where is the AdSense for Podcasting? - <AUTHOR> https://medium.com/@neilsharma/where-is-the-adsense-for-podcasting-3f836f3131bf#.obsqhtsf5 <comment><USER2> Isn't there a YC company doing exactly this?

<comment><AUTHOR> I believe it, given how many startups are in YC :). If there is, I haven't heard of it. As far as I can tell, there doesn't seem to be anything close to an widely adopted solution in the market, just standard ad agencies that do sales for you.</comment></comment>


Meeting with a mentor tomorrow. What to ask? - <AUTHOR> I was asked by a founder of a Silicon Valley tech company if I could meet with him and discuss mentorship.<p>What questions should I ask? Obviously I have some already that are specific to what I'm working on and stuff like 'what would you do if you were me?' but I'd like to hear the point of view of people who are most likely more experienced. <comment><USER2> Ask him what he thinks you need to hear (after talking to you for a while). The things you don't know that you don't know are hard!

<comment><AUTHOR> Thanks! I'll add that to the list.

</comment></comment><comment><USER3> "What one practice, if removed from your day/week, would hurt you the most?" (be ready with a follow up question if he just says "eat" or "sleep" or whatever - "do you approach that in an intentional way? have you had to tune how you do that?")

"Is there anything I should be asking, but I'm not?" \- has occasionally yielded interesting responses for me.

</comment><comment><USER4> Normally I like to ask where their lowest point in life was. People who reach great heights often have great lows too.

Also ask if they do whatever the trend is - meditation, what time they wake up, habits like that. Most people don't realize what routine they follow and it's often best to work close with them and observe.

</comment><comment><USER5> Often, mentors prefer you come to them with specific problems. So, start with why you asked to meet with him. What problem do you need help solving?

<comment><AUTHOR> The thing is, I didn't ask to meet with him.

That is still helpful though. Thanks.

</comment></comment><comment><USER6> I'm curious, did he tell you how he would be helping/mentoring you? What does he bring to the table that would make it valuable to you?

Since he's the one offering a mentorship relationship, how is it going to work? What is he getting out of it?

<comment><AUTHOR> No he didn't tell me. I spoke to him very shortly in person before he asked me to meet him later.

I have since gone to the meeting and will answer these questions from my current perspective now that I have gone.

Basically, he liked my idea and wants to help me with it. Considering, he is a pretty successful tech founder, I would say that I can get a lot out of it. He helped me with the business strategy and coding. Unfortunately, I don't know what to expect from these situations since I've never done it before. So I'm not much help and have no idea what he's getting out of it.

This isn't in Silicon Valley by the way. The guy is from Silicon Valley.

</comment></comment><comment><USER7> Ask what you can do to help him.

<comment><AUTHOR> I read that when I Googled questions earlier :).

I'm not sure how it would work though? I feel like I can't do anything to help. Maybe that's the point of asking the question though...

<comment><USER8> you have a fresh perspective to problems and can maybe help him on something. part of a mentee is being an intern

</comment></comment></comment><comment><USER9> Be prepared, and ask specific questions. When know your mentor, your goals, and your problems, it's easier to figure out how they might help you. Also, take notes and follow up.

</comment><comment><USER10> How did you get acquainted with him and how did you approach for mentorship? please provide some comments so that others can benefit here as well.

<comment><AUTHOR> I went to an event where you get advice from successful people in certain areas. The event wasn't that great, but it lead somewhere.

My advice for others would be to go to events that might scare you, or that you have never done before. It pays off. Getting out and about every so often is good.</comment></comment>


Show HN: Reader Mode – A fully cuztomizable "Reader Mode" with dyslexia support - <AUTHOR> https://readermode.io <comment><AUTHOR> Hello HN! I made this.

Reader Mode is a Chrome extension that removes clutter and ads from any article, so you can enjoy reading in a clean, distraction-free "Reader Mode".

It comes with features for people with dyslexia. The features include Dyslexia Fonts, Dyslexia Ruler and Text-to-Speech feature with 40+ natural voices.

Here's the quick highlights of what it has and can do: \- Distraction-free and ad-free "Reader Mode" \- Theme customization \- Custom CSS \- Print pages \- Fullscreen mode \- Auto-run ability \- Deletion of unwanted elements \- Save edited pages \- Share To Twitter \- Dyslexia Fonts \- Dyslexia Ruler \- Text To Speech \- Outlines \- Text annotating and highlighting \- Note List \- Auto-scroll functionality \- Dark Panel Mode \- Google Search \- Google Translate

SPECIAL DISCOUNT : There's an exclusive 25% discount off the PRO version today for all HN mates. To use it, just enter "hackernews25" code at checkout.

Happy to answer any questions! :)

</comment><comment><USER2> I tweeted this tool to @Bookshare. The creator of this made an amazing tool, and should contact Bookshare.org so that the tool is featured and endorsed for people with print-related disabilities.

The only thing that this may be missing is multi-modal highlighting. As in, where the sentence is highlighted in one color and the word being read aloud is highlighted in a different color. This is a feature in Kurzweil 3000 and Voice Dream Reader.

This can be super helpful for people with print disabilities that involve vision.

But, I am definitely going to get this! I think this is the best accessibility tool I have seen on PC! :-)

<comment><AUTHOR> Ah i see, thank you for sharing that, I will check it out!

And oh, I will be looking into the multi-modal highlighting as well and if all goes well, this will be available in the next update!

So yeah, you get it now and just update it if the new version is ready. Thank you again for your time, feedback, and for your kind words. Appreciate it! :)))

<comment><USER2> You're welcome! This really is a phenomenal tool!

I will get the extension today!

</comment></comment></comment><comment><USER3> I've been using ReaderMode for 2 days now and I must say that I'm absolutely enjoying the clean, distraction-free user experience! Thank you for making this!

</comment><comment><USER4> This is great not only for accessibility but the extension gets rid of all the excess pop-ups that you might encounter when scrolling while reading.

<comment><AUTHOR> Thanks Alex! :)

<comment><USER4> No problem!!

<comment><AUTHOR> :)))

</comment></comment></comment></comment><comment><USER5> This looks really great. Do you plan on releasing a Firefox extension?

<comment><AUTHOR> Thank you and yes! The Firefox and even Safari version will come soon! :))

<comment><USER6> Does paying for the PRO version on Chrome include PRO on Firefox, too, or do I have to pay twice?

<comment><AUTHOR> You just need to pay once :)</comment></comment></comment></comment>


What's Wrong With This Snowflake? - <AUTHOR> http://www.npr.org/templates/story/story.php?storyId=121827582 I have found the article on The Old New Thing: http://blogs.msdn.com/oldnewthing/archive/2010/01/04/9943210.aspx <comment><USER2> Writing letters about the fact that artistic snowflakes aren't the same as "real" snowflakes is like writing to complain that the symbol of a heart for "I love you <3 " looks nothing like the human heart.

While scientifically correct, he's also a little pedantic.

<comment><USER3> I think the fact that the error was in a scientific magazine warrants the letter.

<comment><USER4> Also, it trumps pedantic by being funny.

</comment></comment></comment><comment><USER5> I was hoping this story would be about actual snowflakes discovered with unusual structures.

</comment><comment><USER6> Okay, so the crystals tend to follow a 6-sided geometry. Why are snowflakes _symmetrical_? Why does one arm have to fall into the _exact_ same configuration as the opposite one? Why not have 6 different arms, all following the same 6-sided geometry? What mechanism communicates between the arms to achieve 6-sided symmetry?

<comment><USER7> Well, they don't have to: [http://www.its.caltech.edu/~atomic/snowcrystals/class/class....](http://www.its.caltech.edu/~atomic/snowcrystals/class/class.htm)

Given that different conditions produce different crystals (see for instance the description for the "capped columns"), my best guess is simply that each of the 6 sides experienced all-but-identical growth conditions, and thus the correct question is rather why would they be _different_?

Someone else mentioned 12- and 3-siders, and trying to Google up those images is how I got to that site in the first place. See: [http://www.its.caltech.edu/~atomic/snowcrystals/unusual/unus...](http://www.its.caltech.edu/~atomic/snowcrystals/unusual/unusual.htm) (Note you have to "-paper" in the Google search, or you'll just be hammered with instructions for paper snowflakes of varying degrees of scientific inauthenticity.)

Edit: Ah, the site addresses that: [http://www.its.caltech.edu/~atomic/snowcrystals/faqs/faqs.ht...](http://www.its.caltech.edu/~atomic/snowcrystals/faqs/faqs.htm)

"While [a snowflake] grows, the crystal is blown to and fro inside the clouds, so the temperature it sees changes randomly with time. But the crystal growth depends strongly on temperature (as is seen in the morphology diagram). Thus the six arms of the snow crystal each change their growth with time. And because all six arms see the same conditions at the same times, they all grow about the same way. The end result is a complex, branched structure that is also six-fold symmetric. And note also that since snow crystals all follow slightly different paths through the clouds, individual crystals all tend to look different."

And see also the next question, "What synchronizes the growth of the six arms?". I'm hitting the limit of what I feel comfortable just copying and pasting into HN.

</comment></comment><comment><USER8> Source code here: <http://psoup.math.wisc.edu/Snowfakes.htm> (roughly in the middle of the page).

<comment><USER9> Just one of the many lovely gem's in the source:

       for (i=1;i<nr;i++)
          for (j=1;((j<=i)&&(i+j<=nr-1));j++){
              b[i][j]=0.0;
       }

When you see the following line you know you are in for a treat (best part i1 and j1 are not even used in one of the functions where it is declared).

int i,j,i1,j1,iup,no;

<comment><USER9> Hmm I guess I was being to obtuse from the downvotes. Having not found the code from the article I was very interested in checking it out when the link was posted here. Sadly the code is written in such as way that makes it extremely difficult to easily learn anything from. Reading the code is often the best way to understand how a program/problem runs. I went to the source to answer the following questions: How is the snowflake generated? What factors need to be taken into account? Looking at the code if you want to figure anything you would have to put a lot of time and effort into it. Badly named variables and function names are just one of the problems. Take for example 'initialize()', what does it initialize? Is it only initializing snow flake code, only X11 code, both or just a dumping ground function? What about the check() function? What does it check? and chi()? There is a shape12, but not a shape6 or shape3 function, why not? What does parupdate do? What about norminf()? None of this answers the original questions. How do I simulate growing a snowflake?

If the code was written in a sane way you would be able to skim through it in two minutes and have a good overview of how a snowflake is made. Given that it would probably take a good hour at least to understand it and I am only so-so interested in learning I wont bother. This is especially sad given that this is coming out of edu where I would presume that part of the purpose is to teach how a snowflake is grown.

<comment><USER10> That's true for ordinary programs, but this is math, not software. Glancing at the code in this case is kind of like glancing through some program's object code or disassembly and trying to understand how it works: theoretically possible in principle, but not really doable in practice. In math the proper analogue to "glancing at the code" is "skimming the paper", which is here: <http://psoup.math.wisc.edu/papers/h2l.pdf>

<comment><USER9> If this was generated from some math formulas or from some other code (such as a fortran translator as another comment hinted), but if this was the code that was created by the author I stand by my original statement.

</comment></comment></comment></comment></comment><comment><USER11> I'm ashamed to say that I'm guilty of misrepresenting snowflakes.

I wrote an iPhone app last year that allowed you to create virtual paper snowflakes, and I didn't realize until later that all the flakes it created were "abominations" that had 8, 10, or 12 sides.

I was a little surprised by the amount of feedback I received explaining to me exactly what was wrong with the snowflakes in my app. Unfortunately, I haven't gotten around to fixing this egregious error just yet ;) .

</comment><comment><USER12> Well... It's not water ice... 8 sides, symmetrical four-by-four at a 45 degree angle, no stems and only borders...

I won't say it's impossible to naturally form it, but I am certain it wouldn't involve clouds of water vapor. Perhaps around proteins or some biological process...

</comment><comment><USER13> Also, real stars are enormous balls of plasma and gas, and look nothing like ☆. I've been waiting about 19 years for an explanation from anyone what the two have in common, and still have gotten none. Maybe I should write a letter to Nature...

<comment><USER14> A picture of a bright light taken by a camera lens with a non-circular aperture will generate stars like that. In this case, the 5-pointed star is from a pentagonal aperture.

It's entirely likely this symbol came from _pictures_ of stars, as opposed to real ones.

<comment><USER13> Wow, cool! Thanks! :)

</comment></comment></comment><comment><USER15> We can relate though, like the now infamous CSI line "I will create a GUI interface in Visual Basic, see if I can track an IP address"

Surely that makes you cringe at least a little bit :)

</comment><comment><USER16> Is this a serious complaint or is this someone having a bit of fun?

</comment><comment><USER17> learned something new today. thanks.

</comment><comment><USER18> <http://www.bluffton.edu/~gundyj/TreasonOfImagesShadow.jpg></comment>


Chrome introduces Web App install banners - <AUTHOR> http://updates.html5rocks.com/2015/03/increasing-engagement-with-app-install-banners-in-chrome-for-android <comment><USER2> _Finally_. I've long given up on Apple ever doing anything like this in Safari (I've long since given up on them shipping it without bugs, too) but I've been wondering why Google never did more for webapps in Chrome.

I'd really love it if Android implemented navigator.standalone, too - I do understand the reasons for not implementing it, but it's useful.

<comment><USER3> Apple has "Smart App Banners" which is kinda similar, though.

[https://developer.apple.com/library/mac/documentation/AppleA...](https://developer.apple.com/library/mac/documentation/AppleApplications/Reference/SafariWebContent/PromotingAppswithAppBanners/PromotingAppswithAppBanners.html)

<comment><USER2> Yes, but they require a native app. This is web only.

</comment></comment></comment><comment><USER4> This is going to be the new best feature for malware developers. (Note: Unpoliced malware is RAMPANT in the Chrome Web Store, Google is not policing it properly.)

<comment><USER5> There is one mitigating feature:

> The user has visited your site twice over two separate days during the > course of two weeks.

This should help reduce the number of casual shitty sites that can make use of this - the user has to at least have a reasonable level of engagement before this triggers. It's far from foolproof but it is a promising start.

<comment><USER6> Right, but goog is weighing malware + cash vs not helping exploit their users and coming down on the side of malware. I'm sure the cash is incidental to this decision. It's really disappointing.

Yet another reason to tell your parents to buy iphones.

<comment><USER4> Google made this decision a long time ago. Try searching Google for "flash player". The top two links are malware. Google knows their AdWords are used to slip malware at the top of download searches for major products, but has never done anything about it, like say, disabling AdWords on a term like "flash player" where any paid ad is basically guaranteed to be malicious.

This is a twofold benefit for the sleezy company: Google gets paid directly by malware developers, and the added malware on people's computers helps drive consumers to switch to Chromebooks. The "rampant malware on Windows" problem is largely a Google creation, and of course, Google advocates their product as the solution.

<comment><USER7> Wow. That just really changed my model of paid search results... and I'm not quite sure yet how to put it back together.

I clicked both results for "flash player" and nothing on my computer (Mac) or in the browser (Chrome) warned me, whereas I have received warnings on other sites for "phishing attempts". I never would have downloaded anything from those sites, but my parents sure would have.

Who knows, if I were in a hurry and it was a program I wasn't familiar with or that I was trying to get for free? And if the site was more polished or a full html/css clone of the real site? It honestly might have worked on me.

What kind of malware do these bogus paid results contain? What would have happened if I'd installed them? What can you do to defend against that besides being a savvy web user?

Thanks for this. I learned something.

</comment></comment></comment></comment></comment><comment><USER8> Awesome that service worker is a requirement for this to show up. Hopefully this makes creating offline enabled apps more important.

<comment><USER9> That's the intention... kinda. The ServiceWorker doesn't mean that you manage the offline experience (you could just be handling push messaging), but we believe that it is an indicator that you are likely to be thinking about app like experiences.

As a by-product of the service worker though, we really hope developers start building offline experiences.

<comment><USER10> I'm sure that we will soon (if not already) have a project that creates a barebones service worker for people who want to skirt this requirement.

<comment><USER11> This was already linked from the announcement: [https://github.com/GoogleChrome/samples/blob/gh-pages/app- in...](https://github.com/GoogleChrome/samples/blob/gh-pages/app-install- banner/service-worker.js)

</comment></comment></comment></comment><comment><USER12> No matter how much I tried to install this on a side-project, I had no luck:

[https://www.tithess.gr/](https://www.tithess.gr/)

The test site displays the banner fine, my site doesn't. Given how hard these things are to debug, a simple "banner checker" page that would tell you what you did wrong would be a great help.

<comment><USER9> Agree on debugger. However, did you follow the guidance and turn on the flag in Chrome? The flag lets you bypass the heuristics for when to show the prompt. If you don't have it enabled you have to visit the site twice in two weeks (on separate days)

<comment><USER12> I did, yes (the test site works fine).

<comment><USER9> You don't appear to have a service worker registered.

<comment><USER12> What do you mean? I took the code straight from the example, and it prints "worker registered" in the console when I add a logging call there.

<comment><USER9> I was looking at the site, and I don't see it. Digging a little deeper, you need to work more on SW. Right now it is hosted on [https://www.tithess.gr/static/js/service- worker.ba9881a3a5f4...](https://www.tithess.gr/static/js/service- worker.ba9881a3a5f4.js) \- this means the service worker is only working for the directory '[https://www.tithess.gr/static/js/'](https://www.tithess.gr/static/js/'), if you want the banner to appear you need to have the service worker directly in the root of the site (note, this is how service worker is intended to work).

<comment><USER12> Thanks, I looked everywhere for something defining the scope and couldn't find any solid documentation. The registration is in the head, I'll move it to the top level, though, thanks.

</comment></comment></comment></comment></comment></comment></comment><comment><USER13> Why are these banners so popular - they are actually my least favourite part of browsing on iOS - every single webapp (GMail, Yelp, Urbanspoon) sticks one of these banners at the top of my page and reduces my real estate and doesn't remember that I dismissed it the first time. I'm not super excited to be seeing these on Android too.

Do usage stats indicate that a lot of people use this feature?

<comment><USER14> As the article says:

* It will only appear for sites you use regularly * It will only appear once per site, ever

<comment><USER9> With this project we are trying to be as respectful of the user as possible, so yes it is correct we won't keep re-prompting once installed or dismissed. There is still a lot we are working on fine-tuning the heuristics of this but I am quite hopeful that we will see a reduction of custom banners on the web because we can provide a better experience for sites.

</comment></comment></comment><comment><USER15> Very cool! This takes iOS's home screen web app feature to the next level with the install banner. Hopefully we'll be able to create a standard for these manifest files/meta tags so developers won't have to target specific devices. Also Apple needs to fix their web app meta tag parsing - it's super buggy in iOS 8.

<comment><USER9> Author of the post here. Wrt to manifest, it is being specced (and hopefully ratified as a standard soon) right now and we implement it (a lot of it) - [https://w3c.github.io/manifest/](https://w3c.github.io/manifest/) \- now it is just a matter of getting other browsers to support the spec too.

<comment><USER16> The animated gif in the announcement goes by way too fast. Could you slow it down by 2x or so?

<comment><USER9> I recorded it at real-time speed iirc.

<comment><USER16> Perhaps you weren't waiting long enough before touching the next button while recording it? Someone seeing it for the first time needs time to take in what's on the current screen before seeing the transition to the next one.

<comment><USER17> For what is worth I could follow the gif without trouble. Perhaps it's harder to follow if you aren't used to Android?

<comment><USER7> That could be it. As an iOS user, I had to watch it loop through a couple times to understand it (and even to find the beginning). I felt it was moving a bit too fast.

<comment><USER18> Looping animated gifs are just a very, very inefficient means of communicating. It would be very easy to follow this one if you could have it start at the exact moment you fixed your attention on it, but the looping means you come in halfway and it makes absolutely no sense. I had to sit and concentrate on it for a couple of loops just to determine the starting point of the "story" it was telling, and once I figured that out, it still took a couple run throughs for me to comprehend what it was trying to show me. Maybe I'm just stupid, but I wish this trend would go away.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER19> >My app meets all the criteria, but I don't want the banner to display. Can I control this? Not right now. We are working on ways to give developers the ability to cancel the display of the prompt.

Sorry, what?

<comment><USER17> In other words, the prompt to "install" the shortcut will always appear for sites meeting all the criteria. I guess one can always remove the manifest file to stop the prompt from showing in the interim.

<comment><USER19> Bad wording on my part - I know what it meant, I just thought it was baffling that they don't let websites opt-out of this new feature at all.

<comment><USER9> That will be coming. It is mentioned in the article.

</comment></comment></comment></comment><comment><USER20> I find it a little amusing that the example is a site for people at a 2 day conference, but the banner will only appear if you visit a site on two separate days. In the real world this would be showing a banner saying "Install our app!" on the final day of the conference after it's lost most of it's usefulness.

Great technology and potentially very helpful, but not the best choice for an example of where you'd use it.

<comment><USER9> I created this example because when I looked at the site, we had huge numbers of returning visitors, especially on the run up to the announcement of registration and the announcement of talks. I can certainly clarify this in the article.

</comment></comment><comment><USER21> Great to see Chrome working on this! However I'm not sure about the 2 days over 2 weeks requirement. It's kind of unintuitive.

Ideally, the website would have an install page, lead the willing user to it, let them click an install button, and done.

Spammers are everywhere, so you can't allow that. But from the user's point of view, heuristics make the browser look like random. If a user likes a web app, they expect it to be easily installable now. The website can't ask "please come back tomorrow" and menus don't work for the lay user ("Add to homescreen" is the 9th item out of 12 in Chrome's menu), otherwise the user leaves with the impression the web app is unnecessarily complicated.

Have you considered making the prompt full-page? It could say:

        Would you like to install this app?

        Kinlan's Amazing App

        Website: kinlan.me

        By: Kinlan Corp  <-- this field is taken from EV certificates; hidden otherwise

        [Add to homescreen] [Cancel]

        [Mark as spam]

\- Making it full-page prevents the website from contradicting the browser UI;

\- "Mark as spam" raises awareness that the spam filter part of a user's brain should be put to use; it also changes the incentives for spammers as there is currently no downside to spam users;

\- "Website" could be limited to the second-level domain because the bad guys use a deep subdomain a lot more than the first-class web app developers;

\- the prompt would be shown when navigator.install() is called inside an onclick handler bound to a button (it's not a high bar for spammers but it's still a relief for users);

</comment><comment><USER22> While we wait for Chrome 42, what do you guys think of [https://github.com/cubiq/add-to-homescreen](https://github.com/cubiq/add-to- homescreen) with [https://github.com/carhartl/jquery- cookie](https://github.com/carhartl/jquery-cookie) for achieving something similar?

<comment><USER23> Chrome 42 lands in beta today. It'll be pretty much one month until it's in stable and all Chrome users have it.

</comment></comment><comment><USER24> I love that service workers require HTTPS. :3

<comment><USER25> It's just really unfortunate that Google App Engine is simultaneously a blocker for HTTPS:

[https://code.google.com/p/googleappengine/issues/detail?id=1...](https://code.google.com/p/googleappengine/issues/detail?id=10802)

</comment></comment><comment><USER26> > My app meets all the criteria, but I don't want the banner to display. Can I > control this?

> Not right now. We are working on ways to give developers the ability to > cancel the display of the prompt. Follow our "Intent to Implement" on blink- > dev mailing list.

Hahah, that's good. No-opt-out is always fun.

</comment><comment><USER27> Why do ServiceWorker _really_ need SSL? Such requirement makes the development process and usage in smaller projects cumbersome.

IndexedDB API as NoSQL API isn't that great to work with. Give some love to WebSQL or continue on a SQL API standard based on SQL-92 standard.

<comment><USER28> Without SSL, there is a trivial way to upgrade a temporary MITM capability to a permanent MITM capability using ServiceWorker.

</comment></comment><comment><USER29> This is great for user experience on mobile web apps. Not ever app needs to be mobile, but convincing the user to save it to their home screen is no small task.

This will definitely augment UX for mobile devices.

</comment><comment><USER30> Hasn't FireFox mobile browser been doing this for a few years? I've had qz.com as an icon for a while.

<comment><USER31> Putting an icon on the home screen isn't the interesting thing here, chrome has done that for years too. The news is the banner that prompts users to add it.

</comment></comment><comment><USER32> Is this planned to be a feature for the iOS version of Chrome at some point?

<comment><USER9> Would love it to be, however we can't take a web app and package it up to the App list on iOS. Because of this there is not much we can do.

</comment></comment><comment><USER33> Will this happen on android devices for apps anytime soon?

</comment><comment><USER34> Hasn't WP been doing this "pin to start" thing for a while? If I am not mistaken.

<comment><USER9> Everyone has, Chrome has for a long time too, this is about Chrome being more proactive in letting the user know that they can install this experience.

</comment></comment><comment><USER35> If only I could force my clients to use Chrome in lieu of IE8.

<comment><USER7> Who are your clients? What industry? Is there a centrally-important program they all use that requires IE8 or WinXP, or do they just have a massive fleet of XP machines and not want to upgrade?

As a software vendor, I used to have a lot of trouble getting my clients to switch away from IE, but I feel like that really has been changing. My clients are large GC firms and other kinds of construction companies (infamous for being behind the times when it comes to technology) and I had >80% of them on Chrome 6 months ago. Have you tried telling them that even Microsoft dropped support for WinXP and IE8 a _year_ _ago_? (I think it happened last April.)

<comment><USER35> They view IE as part of their support burden and rather not add to that burden until they can change the version requirement on everything at the same time. They would probably be happier if we branded Chrome and narrowed its UI to our app's needs.

> Have you tried telling them... They know. They are the purse holders, not > the brain holders.

(unrelated side note: looks like someone is disappointed that I have clients on down-rev browsers)</comment></comment></comment>


High school programming taught in Haskell in Argentina - <AUTHOR> http://sawafaso.blogspot.com.ar/2013/07/why-haskell-at-school-matters.html?m=1 <comment><USER2> My first reaction to this was negative. I immediately objected to choosing Haskell. I've been teaching my own 14 year old son. I started him with C, then on to Forth, Java and now about to move into Python.

Then I stopped to remember the process. It has been ridiculously hard. It has required a ton of engagement on my part. Without me being a constant cheerleader it would go absolutely nowhere. My kid likes programming but, let's face it, today there are tons of distractions and you are in competition with all of it.

I would imagine it is really hard to teach a random group of 14~16 year olds. I would really like to learn more about this from others with experience in this area.

<comment><USER3> The key to really _getting_ Haskell is learning to build a dialogue with the compiler. Sure, the type errors are intimidating at first -- they pack a lot of information and use precise technical terms -- but once you figure one or two of them out you quickly begin to recognize the patterns. After that, you begin to feel comfortable correcting the type errors and subsequently feel confident about your program when it passes the type checker.

After a certain point in your progression, you realize that you can make certain type errors _deliberately_ so that the type checker will tell you what types it's expecting. This is when it all clicks! The type checker is a tool that lets you query for information about your program. It's an immense aid to reasoning and a powerful sanity check against your assumptions. This is a capability that less strictly/statically typed languages lack and it can lead to a lot of surprises and guesswork.

<comment><USER4> I hope you realize we're talking about kids who has no prior interest in programming. I don't think teaching them to build a dialogue with the compiler is a key to anything in this case.

<comment><USER5> Au contraire: an interactive system with immediate feedback is perfectly didactic. Haskell isn't quite there yet--the error messages are somewhat cryptic and the interactivity isn't quite polished yet--but it's on the right track. Certainly further along in this vein than any other language I know!

Some new features like deferred type errors and type holes are going to really help with this. Especially once editors start taking full advantage of this. I think that this is the future of programming: not writing a program and then debugging it, and not even just working in a repl, but being actively guided by your tools seamlessly as you write your code. Having a dialog with the compiler.

<comment><USER6> If you want an interactive system, clojure or common lisp will be much better choices. Part of the reason I haven't gotten into haskell is because as you said, it "isn't quite there yet". Common Lisp has the added quality that an error trows you into the debugger, and that it makes errors much less punishing. If there is one lesson I've learned from gaming is that hard games don't repel the players if errors are easy to recover from and you aren't psychologically punished for them. Haskell isn't exactly a shining example of that, despite it's other great qualities. You want to make the teaching material challenging, not punishing(a great example of this is the game super meat boy).

Not to mention the traditional argument for lisp as a teaching language: the extremely simple syntax. For somebody who hasn't seen code before, lisp would look _just_ as weird as any other language, so the unfamiliarity argument doesn't hold much water. Prefix notation isn't at all difficult to learn, (+ 1 2) would be just as weird as dividing using / or multiplying with *, and using % for modulo division. You just tell the students that this is how you write math with a keyboard(a white lie at worst:).

I'm currently working on a "try ruby" like tutorial to interactively teach FP using racket to college students, as my last year project.

</comment></comment></comment></comment></comment><comment><USER7> I'm currently studying High School (In the Systems (sysadmin/programmer) branch)).

Everything in Argentina can be awful, but for sure it's not education: even if we are not learning Haskell I'm really pleased with the education I'm recieving; we use free software when possible (LibreOffice, LibreCAD, MySQL, etc.) and we learn languages like C or Java (OK, not the best in the block, but at least it's not VisualBasic).

Sadly we can't get good programming books here (Such as O'Reilly, Apress or books like CLRS, APUE or SCIP). So we either rely on our teachers or in crappy, old books.

Teaching 15-16 years old to program is not easy, mainly because many of those really don't care about school... we start by learning Algoritms as in little pseudocode programs, then we move to a software called PSeInt which is basically an IDE for writing pseudocode (Pseudocode in Spanish... ugh) and finally we learn our first language, which is chosen by the teacher (We are learning C).

I've been programing since I was 9. And it's interesting to see this from other perspective, the teachers are young (26-36 aprox.) which is good, because they know about the latest technologies are have similar hobbies to us. But it's also bad because they don't have a lot of experience).

But so far, so good, the education in the Systems branch is really good: but beware, not everything is like this, for example we are lacking a Chemistry teacher and we only had like 4 classes of Physics in a year, not to mention our Mathematics teacher is a disaster.

The school isn't in a good condition either, we have leaks when it rains and we are lacking a few walls and windows... but hey, it does it's job.

<comment><USER8> > Everything in Argentina can be awful, but for sure it's not education

That's very much relative to where you look. There are very good high schools and universities. Notably, there are very good <i>free</i> universities. But that's mostly in Buenos Aires city. The education system as a whole is in an awful state. Most schools in the rest of the country are in a very poor state. And as you mention the state of the buildings in even dangerous in some cases.

<comment><USER7> Yes that's true, I kind of contradict what I say in the last paragraph.

</comment></comment></comment><comment><USER9> This is encouraging. I love Haskell. I think if a 14-year-old ask me to teach him or her programming, I just might start with Haskell instead.

I think it also suggests that math concepts are not taught properly either. We tend to focus on the mathematical operations rather than the abstractions. (Khan Academy is a good counter example). It would be interesting to see a combined CS (with Haskell) course taught in tandem with math. At the high school I went to, there were several courses like that (calculus + physics, or American History + American Lit).

</comment><comment><USER10> The first programming language I was (formally) taught was Haskell and it was a joy, as long as the exercises are nicely written you can do a lot.

After 4 or 5 weeks we wrote a calculus solver (able to do a lot of pretty interesting integrals and differentials, just from first principles).

However the best choice for learning to program (in my opinion) is a language like Logo where you can immediately see your results and the concepts are incredibly simple.

</comment><comment><USER11> I've held a 4 part workshop on Haskell to people new to programming and was surprised how well it went. It's certainly hard to explain in depth how some of the more mathematical concepts work, but you don't really need to.

</comment><comment><USER12> [http://en.wikipedia.org/wiki/ProgramByDesign](http://en.wikipedia.org/wiki/ProgramByDesign) has more on functional programming in high school. I'm surprised Haskell was such a success here (although I've mostly not worked with that age cohort since I left it) -- I'd expect a strict language to be more productive for beginners, combining the biggest part of the thinking-about-correctness advantage with an easier performance model. But if it's working, that's fantastic.

Also in that vein [https://www.coursera.org/course/programdesign](https://www.coursera.org/course/programdesign) says it needs only a grade-school background.

</comment><comment><USER13> When I was a kid at school (30 years ago!) we had some kind of assembly language forced down us.. which was good, but most of the class didn't get it. Luckily I was interested in computers anyway and already knew z80 assembly.

I think there are always only going to be a small set of kids in the class that will get or understand programming anyway, without resorting to just "simpler" forms (such as Scratch, for example).. whether this is a good thing, is of course up for debate, but regardless..

These days, I think (as a parent) I'd be pleased if the school was teaching Haskell, so from a personal perspective: +1 Argentina schools, keep at it!

</comment><comment><USER14> Why they didn't choose adga or coq.

<comment><USER15> That's the only valid "Why not X?" response. :-)

</comment></comment><comment><USER16> Looks interesting!

A long time ago, I had wondered if Lisp would be a better introduction to programming for beginners. Now we can see some practical experiences from this attempt to use Haskell.

I looked at the code samples provided; from a cursory review, the fourth class code looks to be purely functional, although fairly simple.

The fifth second class code is more advanced code, but a lot of it is procedural. I wonder if Haskell experts might weigh in here -- is it worth doing Haskell with so much procedural code?

I am a novice in Haskell, but I have tried to embrace its functional nature entirely. I think I would advocate learning Go or Python rather than Haskell if the code is going to be procedural anyway.

</comment><comment><USER17> If I taught young people with no experience in programming, I would begin with PHP (after learning basics in HTML).

It is a horrible language, but you can quickly do stuff that you can see everywhere on every browser, you can quickly show them to the world, you can host them everywhere, there is no compilation/porting/deployment/etc. that you have to go through to actually run your stuff and be excited.

That is, I think, more important than teaching a language with perfect object model or perfect lambda calculus.

</comment><comment><USER18> Wonder how their ease learning this would compare with ease learning Lisp. I found the latter much more intuitive.

</comment><comment><USER19> Poor pupils. I hope the victims don't suffer harm for life.

<comment><USER20> I'm delighted for them!</comment></comment>


Draw Charts with Google Visualization API - <AUTHOR> http://9lessons.blogspot.com/2009/05/draw-charts-with-google-visualization.html

<comment><USER2> Their Charts API, which gives back images for specially formatted URLs, is pretty impressive, too. (It is hands-down the easiest way I know to get analytics data onto a cell phone. You pretty much need a wrapper for your language of choice because the API is _very_ primitive and otherwise you're going to waste time reinventing things like "scaling the chart so that it fits all its data", but otherwise its great.)

</comment><comment><USER3> Edward Tufte and Howard Wainer both recommend bar- or pointcharts for the tasks other people would use piecharts for.

\-- [http://www.usf.uni- osnabrueck.de/~breiter/tools/piechart/war...](http://www.usf.uni- osnabrueck.de/~breiter/tools/piechart/warning.en.html)

<comment><USER4> I would also recommend checking out Stephen Few's books (Information Dashboard Design and/or Show Me the Numbers) for quick and useful guidelines on visually communicating data. Few is a big advocate of Tufte's work and books, and he has a nice set of good vs bad practices in Information Dashboard Design.

I've been an evangelist for Few's books and practices as a "best" starting place for those of us less naturally gifted at data visualization (especially for simpler data or business purposes). He has heavily influenced how I look at typical IT charts and graphs.

</comment></comment><comment><USER5> Charts are great especially when you know what you are looking at.</comment>


Early Reviews Of Microsoft's Windows 8 Are Not Good - <AUTHOR> http://www.businessinsider.com/microsoft-windows-8-reviews-2012-8

<comment><AUTHOR> Essentially:

"It's still early for Microsoft. It hasn't released new laptops that were built with Windows 8 in mind. Perhaps when those devices come out the reviews will improve."</comment>


Is My Startup Burn Rate Normal? - <AUTHOR> https://medium.com/@DanielleMorrill/is-my-startup-burn-rate-normal-882b2bd20f02 <comment><USER3> This is utterly batshit. $10k+ per head as your burn rate???!?

We're a 30 person org. We burn about £80k a month - $125k. Our revenues are well in excess of that. That includes rent, salaries, and all other expenses.

Then again, I guess when you're playing with your own cash, which started as nothing because you bootstrapped, you look at things differently, and don't put "35 foosball tables, offices in manhattan and the valley, and a corporate getaway to the Maldives" at the top of your "essentials" list.

I see more and more of what I call "startup dickwaving", whereby people compare metrics on a fairly meaningless basis and act as members of a cute little club of oh aren't we all so special, rather than, y'know, _BUSINESS_ , happening.

<comment><USER4> "Our revenues are well in excess of that."

Doesn't burn rate cash flow indicate negative cash flow - so if your revenues are much higher that what you are spending then you don't really have a burn rate in the normal sense as you are cash flow positive?

<comment><USER5> The op did say burn not burn rate. I think quite a few of the disagreements here are the result of us not being clear about what we mean by different terms. Burn rate is negative cash flow so cash income - cash expenses.

<comment><USER4> "We burn about £80k a month"

I think most people hearing that would interpret it as "burn rate" rather than cash expenses.

<comment><USER5> I agree. This is why I said the problem is we need to be more precise in the terms we use.

</comment></comment></comment></comment></comment><comment><USER6> Love the discussion. VC investors waking up all sweaty in the night, having their micromanagement self telling them "these kids are going to get us rich, but they better not use too much money doing it!". If you want to hedge your bets, buy index funds.

<comment><USER7> Uhm, I don't know. If there's one area where VCs have far greater understanding than the average startup founder, it's things like resource management. That doesn't mean VCs should make decisions for you, but they should be able to help when it comes to e.g. how long you keep your legacy product going while pivoting.

The reason that "startups rarely die in mid keystroke" is that they run out of steering way before they run out of fuel.

</comment></comment><comment><USER8> I think this is another indication of how many startups are absolutely out of control in terms of finances. But does it matter? As long as the long stream of capital injections without meaningful profit to show up for doesn't stop, it doesn't matter in the slightest.

Looking at those SaaS companies which have employee burn rates way above their salaries and absolute cost, you can only conclude that they are overspending. And that's not something to be proud kf. It actually bothers me how burn rate is artificially increased (ex. redecorating the office periodically, A-office location) just to show how "fast" a startup is moving.

It is wrong on so many levels but as long as there are investors which keep pumping air into the bubble, we are safe, right!?

</comment><comment><USER5> The question is really impossible to answer as it depends on forces outside your control such as the willingness of investors to invest. They can switch on and off at anytime with no warning.

From my outsiders perspective you want to have the ability to become cash flow positive within 3 months if you need to. Also keep in mind if this is going to be possible if the funding environment changes - if your customers are also dependant on investor funding then this is going to be very hard as the start ups from 2000 found out.

<comment><USER9> that's the trick, isn't it -- it's not so much your burn rate, because you understand that; it's what your customers cut if they decide there's a bubble. eg yahoo during the dotcom bubble: huge chunks of vc were flowing through to yahoo ads.

That said, I don't know what Fred means, but $10k/engineer is ridiculous. That's earning well under $100k/year by the time an employer pays social security, health insurance, employment taxes, and rent. You have to be smoking crack to live in sf, home of the $3k/mo apartment, and earn so little money. A standard rule of thumb, more common in nyc than here, is your gross income needs to be 40x your rent.

<comment><USER10> Do you mean your yearly income must be 40x your monthly rent?

<comment><USER9> yes, exactly

$2k in rent -> must make $80k/year

</comment></comment></comment></comment><comment><USER11> I don't think I've seen the phrase "ramen profitable" mentioned for years now. I remember a few years back it used to be the mantra here, is it taught at YC anymore?

<comment><USER12> It is absolutely still taught -- it gives you control over your future which is very important. From my post:

"We've had two break even months. The first was by accident in October 2013 because we had an unexpected revenue spike. For a moment we felt what it would be like to completely control our own destiny. The second time was in February 2014, because low growth in December scared the living shit out of us and it didn't look like our Series A was going to come together."

</comment></comment><comment><USER13> I find this disturbing. I realize that startups are usually associated with non-linear returns but assuming the burn rate in the OP is about gross expenses, not just net burndown of the funding, I think that there's a huge problem with hiring the cheapest engineers hoping to make big bucks from the IPO rather than the best engineers who can solve the problem in a reasonable manner.

This speaks to the problem with demand for entry level (meaning cheap) folks in the tech sector as well as the disruption culture over delivering long term customer value.

</comment><comment><USER14> Who the fuck cares if you burn rate is "normal." The only question that matters is _is it higher than it could be?_ Where can you cut costs and get away with it? If your startup is perfectly on the median, that means half the startups out there are doing better than you. 9 out of 10 startups fail. Are you sure you want to be in the 50th percentile?

<comment><USER15> Cutting a cost simply to cut cost is myopic. A better way to look at it is to shop for value where you can get the biggest returns. Being anal about every little minutia, as the CEO at least, is a massive waste of time.

<comment><USER14> From the GP:

> Where can you cut costs _and get away with it_?

The second clause is just as important.

</comment></comment></comment><comment><USER16> "You are expected to tackle a $1 Billion opportunity and achieve hyper-growth (100% year-over-year or more)."

Aren't VC back start ups looking for way more than 100% growth per a year? I was under the impression the target is 10-20% growth per a month in revenue. In other words 100% growth is so low it would likely prevent you from staying on the VC back track.

<comment><USER12> If you can grow faster than by all means do! The 10-20% guidance you get in YC is not realistic as you get bigger, smart VCs are much more realistic about revenue growth (given it is recurring and you don't have to pay to acquire that revenue again each month).

</comment></comment><comment><USER17> Startups are a business, and part of business is understanding what every cost is. Part of that is understanding what a "fully burdened" employee costs, it's well over what their salary is.

Understanding what's "normal" is tougher. TBH, "normal" is whatever you're burning if you aren't wasting money.

A decent WAG at how much money you need to keep a mid-level employee employed for a year is about $250k, it doesn't matter much where, but you might inflate that a bit for SF or NYC, and drop it a bit for Nowhere'sville, Nebraska. That's salary ($100k plus or minus), benefits, office space, administrative overhead, vacation, etc.

You'll want to earn more than that, on average, per employee per year, to be profitable.

It's useful in other algebraic ways to get a gauge on other company's burn rates, size, or needed revenue.

For example, your competitor might advertise that they have 200 employees. That means they operating a $50m/year business to break even. A reasonable target for basic sustainment and growth is $300k/employee/year so they'd need to be a $60m/year business to be growing.

Here's some real world examples:

       Company     - Revenue        - Employees - Average/employee/year
       Oracle Corp - $38.27b (2014) - 122,458   - $312,515
       Microsoft   - $86.83b (2014) - 128,076   - $677,956
       Facebook    - $7.87b  (2013) - 8,348     - $942,740
       Sony        - $66.12b (2014) - 140,900   - $469,268
       Google      - $59.83b (2013) - 55,030    - $1.09m
       Apple       - $182.8b (2014) - 98,000    - $1.87m
       Radio Shack - $4.473b (2010) - 36,400    - $122,884
       Amazon      - $74.45b (2013) - 132,600   - $561,463
       Lockheed    - $45.358 (2013) - 116,000   - $391,017
       Boeing      - $86.623 (2013) - 168,421   - $514,324
       Leidos      - $7b (prj 2014) - 22,000    - $318,181
       SAIC        - $3.8b          - 13,000    - $292,307
       Tesla       - $2b     (2013) - 10,000    - $200,000
       Ford        - $147b   (2013) - 181,000   - $812,154
       Nokia       - $15,85b (2013) - 55,025    - $288,050

Now look down this list and think about who's considered wildly successful and _hot_ and who's considered on the way out, in the doldrums or has had recent sell-offs or splits in the company. This isn't perfectly scientific, just a guideline.

Startups have a slight advantage in that you can sometimes hire employees at a lower salary in exchange for options. This can temporarily deflate the costs and let you beat these guidelines for a while. But ultimately you'll run out of paper to give out and you'll have to start paying people what they're worth.

However, Startup founders, especially first timers, are often at a disadvantage because they've never had to handle so much money before. One startup I was at had a changeover in CEOs and an analysis of non-employee expenses under the previous CEO showed a $30k/mo travel expense for him and the CTO.

Turns out the previous CEO and CTO were doing all their business traveling for sales in business class. We had been chronically understaffed. The new CEO cut the travel and hired an outside and inside sales-person for about the same and revenue started increasing shortly thereafter. Interoffice communications was turned into weekly phone conferences and communication even improved.

Don't spend your money in stupid ways and you'll have more to put behind the business.

<comment><USER13> Revenue per employee is certainly interesting but isn't comparable to the topic of discussion. It would be very interesting to see what the run rates for each of these enterprises is. I suspect you could compute this from the annual statements.

It would be even more interesting to see it broken down by employment category. Amazon's 132,600 employees probably includes a large number of pickers and packers diluting the comparison, whereas Oracle's, Microsoft's and Google's staff are predominantly technical.

<comment><USER17> > Revenue per employee is certainly interesting but isn't comparable to the > topic of discussion.

Sure it is. A startup's burn-rate is almost all in staff. If you have 10 employees, then your yearly burn rate is going to be not that far off the FBR for those 10 employees (~$2.5m/yr), unless you're in some very capital intensive business (hardware manufacture or something).

But 10 employees working on a photo sharing app or whatever is ~$200k/mo. Your hosting fees, etc. are unlikely to be more than a few percent delta off of that.

Yeah, yeah, I'm sure there is this or that exception. But in your revenue model for your company you'll need to build all that in. For example, if your hosting fees cost another $100k/mo for whatever reason, and it's growing 5% a month, you better figure that in.

If you're making a physical doodad, and your upfront capital costs are $1m and the per-unit manufacturing costs are $10/item you better figure out how to cover the manufacturing costs, _as well as_ recoup the upfront costs + marketing + sales staff + shipping + expected returns before thinking of the extra over the per-unit sales as profit.

Too many startups discount these things or write them off. They make a doodad for $10/unit, then sell it at $100/unit then congratulate themselves on the $90/unit profit they're making. Then they run out of business because they forgot that they're spending $50/unit on marketing and $50/unit on shipping, support, returns, warehouse loss, etc.

The problem is that the question "Is My Startup Burn Rate Normal?" is a bad question. You shouldn't really be comparing your burn rate to anybody else's. You should be comparing your burn rate to revenue and profit goals and adjust accordingly.

</comment></comment></comment><comment><USER18> Wow. Not sure even what to make of this. I think the real answer is who cares? If you have the right product and if you have the right backing then your burn should be the right number not to tap out the backing to get to what you (founders) and investor feel is the right place to cover your nut. If you need to burn money for a long time then you had better hope you backers are all in on the company. Either it is the right place to "burn" the money for the long haul or get out. I am on my 5th startup and have a had a hit or two to the point that I do not need to work. In the hits it was because the investors were in it for the long game, they believed in you and the idea and would do right to see it get there. The topic of burn never came up if you were doing the right thing for the successes of the company. In my experience, if the investors were focussed on the burn as anything more then "what number gets us there" then you were likely to fail.

<comment><USER5> The problem is investors don't care about burn until they all decide at the same time that it is the only thing they care about.

<comment><USER19> VCs don't care about burn rate. They care about founders who don't care about burn rate.

</comment></comment></comment><comment><USER20> Really interesting, but i think that it is the wrong question.

Only you can answer: did you have enough people - and the matching people - <USER2> get the job in time X done and reach your goals?

You can compare your values only the similar startups, that work on the same problem. Then you now if you pay too much/less or use the wrong structures (inhouse / outsourcing / ...).

</comment><comment><USER21> Rule of thumb is 100k for prototype in 2 months. 1million for a full product in 1 year.

<comment><USER19> Bargain! I'd like cures for cancer and malaria, an interstellar space program, an app that builds other apps without coding, and an O(1) solution to the travelling salesman problem. kthxbye!

<comment><USER22> I'll try my hand at all 5 for 5 million.

</comment></comment></comment><comment><USER23> The ironic part, "Mattermark is a data platform for venture capital companies"

I wonder what Mattermark says about their own company.

<comment><USER5> Mattermark should not really worry about burn rate for this reason. It only has any revenue if the current funding party continues and if it does then they can continue to raise as much money as they like. If the market turns then their income will evaporate to nothing and burn rate will be the least of their worries.

</comment></comment><comment><USER24> Lots of commenters are focusing on the high burn rate and missing the point of the article.

If you have product market fit, high growth rates (20-30% MOM) and a large market (>$1B), you can rationalize burning that much.

For the rest of us, normal people. It's back to business basics, which is spend less than you earn. That's all.

<comment><USER5> The problem is it is very easy to fool yourself that you have these things when you don't really. There is the slight problem of redemption rights that pop up when your investors work out you are just a normal business.

</comment></comment><comment><USER25> I know, I know...startup = explosive growth. But... It's hard for me to consider something a "startup" when you have more than 1M in the bank and spending 60K monthly. That's a company!

<comment><USER26> > I know, I know...startup = explosive growth.

Actually, startup = _a company, a partnership or temporary organization designed to search for a repeatable and scalable business model_ [1]

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

<comment><USER25> You're right, I was using PG's definition [http://www.paulgraham.com/growth.html](http://www.paulgraham.com/growth.html)

<comment><USER12> (author of the post here) I agree, we don't see ourselves as searching for a business model anymore. We are scaling something that works now.

</comment></comment></comment></comment><comment><USER27> six digit burn rates just for building a web app with HTML and Javascript?</comment>


The Experts Were Wrong About the Best Places for Better and Cheaper Health Care - <AUTHOR> http://www.nytimes.com/interactive/2015/12/15/upshot/the-best-places-for-better-cheaper-health-care-arent-what-experts-thought.html <comment><AUTHOR> I've submitted this article not because of the specific content (although it will be of interest to many) but because of the article text and data that are modified based on the reader location.

For example, in the subhead, I see "These maps look nothing alike. Their big differences are forcing health experts to rethink what they know about health costs in _Springfield, Mass_ and across the country."

</comment><comment><USER2> Each time I read an article about health care in the US I can't refrain to facepalm myself.

The graph showing the price of a same operation across several hospitals is just too much for my sanity.</comment>