Ask HN: Review my classroom web tool, Eduset - <AUTHOR> http://www.eduset.com/

<comment><USER2> Why the monthly plan? I know subscription is the holy grail because people set it and forget it. But are you implying teachers should cancel it during the three summer months if they aren't teaching?

And do teachers really pay for two months and then go oh... sorry kids but I realize this isn't going to work and cancel it? I assume once your on one LMS your stuck for at least the duration of the semester. Maybe a 30 day free trial is better, even sixty. If Eduset is really amazing, which it could be, then it'll become such a critical tool that they can't just switch off midway of a semester.

I'd also want to see it in action. If it is a LMS, what better way to demo your LMS than to create a Eduset page on how to use Eduset. Have quizzes, videos, homework assignments... etc.

<comment><AUTHOR> That's a very helpful observation, thanks.

The problem I actually ran into there is a liability one. My payments provider, Braintree, informed me that allowing yearly payments for a web-based service presents liability concerns, as if Eduset was to close, Braintree could be on the line for any refunds demanded by customers. Thus, they say they advise against new companies charging yearly. Does anyone have any experiences with overcoming this hurdle?

Also, given the feedback I've gotten from some other commenters, I'm going to add a demo account feature.

<comment><USER3> _"Does anyone have any experiences with overcoming this hurdle?_ "

Ask them if they can hold some of the money in escrow ... or go with a different underwriter that will allow yearly subscription (but at a higher rate).

You could also just do one-time payment for the year and require them to re- purchase.

Might even look into accepting POs from schools. If you're into cashing checks :)

<comment><AUTHOR> I'll talk to them further about the possibility of escrow - that sounds like a potentially reasonable solution. I asked previously about one-time payments, and they said that doing so does not negate the issue, which is interesting.

Also, if a school wants to pay the good ol' fashioned way, I'm more than happy to oblige.

<comment><USER2> It's going to be really difficult to get schools to pay for anything in this environment. Definitely a worthy goal. I'd have a school administrator page or portal or something target at people who purchase 30 accounts at once.

But you need an entry point. Cold calling schools is likely ineffective. Try seeing which schools use Blackboard and then see if you can convince someone to try it out Eduset. Administrators are definitely looking to cut costs where they can. If you can provide their current LMS functionality for cheaper, there might be a play there.

Another thing to try is once you have users, suggest that they tell their friends about it. Maybe suggest it on a newsletter? Make it easy for them to share it with their peers and even their administrator.

This is probably a revenue model decision for you. The way I see it, 60 bucks a year is not much. If the teacher cares enough, then they should be willing to spend it. 60 bucks is not painful enough for them to push the school to pay for it. If it were more money, you'd lose teachers because they weren't willing to try it but you may net a whole school. A way you maybe able to solve this is offer some really expensive but cool tool at a higher pricing point. Base is 60 bucks but if you want to be able to track how students/classes/races are doing it's going to be 800 (maybe more?) bucks a class. Okay that idea was from a quick brainstorm, administrators love numbers... especially ones they can show accountability to parents with.

<comment><AUTHOR> Yes, for the foreseeable future I will very much keep the focus on getting teachers to sign up for accounts. A teacher using Eduset inside a school can be a far better advocate for an institutional purchase than I could ever be by cold calling.

As for Blackboard, Eduset certainly was not designed to directly compete with them. Blackboard is a vast and complex piece of software that teachers often require courses to learn how to use. Our aim with Eduset is to make it as easy as possible for even non-tech-savvy teachers to jump right in. This means that we will never have the range of features a solution like Blackboard provides.

</comment></comment></comment></comment></comment></comment><comment><USER4> While I applaud your initiative, I cannot believe that teachers would feel comfortable using something made by a single person who just graduated/will graduate? high school this year. You can keep your name, but I'd recommend taking out your relative youth.

Also, I'm always a big fan of competitive analysis charts, especially if you're competing on price. Here's ours: <http://www.dawdle.com/selling/index.php/fees/> I will say that I'm with Brad and $4.99 a month feels like you're selling yourself short, but that _is_ $60/year. Perhaps make a couple more tiers right off the bat to try to nudge people higher?

Lastly, I wouldn't say "if your students can use Facebook, they can use this" with a screenshot of Gmail. That shows a lack of attention to detail.

<comment><AUTHOR> I'll give some more thought to revealing my age on the about page (I'm now a college freshman, by the way). Any specific reasons you say teachers would be uncomfortable with it?

I'm hesitant to add more plans at the risk of creating too many options for users, but I am looking into the possibility of institutional accounts.

Also, I hadn't fully realized the disconnect between that screenshot and subtitle, thanks.

<comment><USER4> My sister is getting her PhD in learning and memory research, and specializes in how kids learn (and she has her teaching cert), and her experience matches mine: teachers _hate_ being told there's something new, young, and better. If they discover it for themselves, great. But positioning yourself as the new young buck on the scene is shooting yourself in the foot. Frankly, I'd try to get an advisory board chock-full of NEA and AFT reps.

<comment><AUTHOR> That's fascinating to hear. It seems I've occasionally failed to consider both early adopters and regular teachers in my marketing materials. Thanks.

</comment></comment></comment></comment><comment><USER5> I like the design and the core concept. My suggestions:

1) The video was helpful and I would out it right under the "Try it for free" tab

2) In terms or pricing strategy, I like the idea of giving away one class for free and then adopt a per class pricing at around $30. I am sure there would be some teachers out there who would just use their one class slot for all classes but then you will always find 10% of your customers getting more than what they paid for. Lets worry about the remaining 90%

3) Make sure you keep track of what school are these teachers from. As soon as you see >5 teachers from a school registering, you might want to solicit an institutional model

4) I, as a teacher-customer, am not sure how will it work for students. What would they see and how? A video will help.

<comment><AUTHOR> 1) That's good to hear, I'll try to make the video more prominent.

2) What's your reasoning for the $30 price point, as opposed to something lower? Also, having more than one class in a slot would cause some confusing overlaps in homework due dates and such, but you're right, there will always be some people trying to do it.

3) That's a good point, I'll look into a database of schools that I can put behind an AJAX picker.

4) I worried about that when I made the tour. I'll work on tacking on short segments from a student's viewpoint at various points in the video.

<comment><USER5> I would check if teachers think about their job in terms of workload per class or per month and work backwards from there. The real question is: how do I get to $X/teacher?

</comment></comment></comment><comment><USER6> Your core customers will happily pay $35 for a bingo activity which they'll use once. You're offering an application which revolutionizes the way they work, and charging $5 a month.

Thus, the usual pricing advice: charge more.

</comment><comment><USER7> I do like how professional the site looks, however, it took me a while to find out what it would look like to use eduset. What I did find to be very helpful was the video showing linked from "click here to take a tour of eduset". The content of that video was informative, but not at all what I expected. I would place it more prominently on the page, not right above a screenshot (I was surprised those two elements were unrelated) and maybe give it a new name ("See eduset in action"?).

Props on the highly visible "Try it for free" buttons.

No props for the opening line of your faq "Eduset is an online classroom communication tool designed to make teachers' lives easier." Try something that says a little about what eduset actually DOES. While the product certainly does look easier than maintaining a personal webpage, it would be better to state how it makes a teacher's life easier, rather than just saying it will.

Similarly, in your about page, I would suggest moving your first sentence to the end of the paragraph (or at least to right before you talk about contact information.

<comment><AUTHOR> Thanks, I'll make the video more prominent and make it clearer what it contains.

You're right about the FAQ, that line is pretty much marketing-speak. I'll work on re-writing both that and the about page.

I have to say, you have 37signals to thank for the green button idea.

</comment></comment><comment><USER8> Looks clean and simple. I definitely see the Facebook/Twitter design influences. I have a sister who who teaches High School Biology who might use such a thing.

But, I worry that she wont be interested in the price. As byoung already mentioned, there are a lot of other (free) services out there that facilitate basic communication already. My sister is someone who lives on Facebook and would probably look to use that first if she could. Extra features that byoung mentioned could be the key.

Some local college grads here just launched <http://www.instructure.com> I haven't played with their product but it looks similar. Its never a bad idea to check out any potential competitors to see how they are addressing the market.

<comment><AUTHOR> Instructure looks like a very good product. Slightly more college-focused and LMS-like than Eduset, but certainly similar.

I'm definitely working on more features to differentiate from generic platforms that could be used (Facebook, Wordpress, etc). As for the price, do you think that it would become justifiable to someone like your sister once more features are added, or do you think that she and other teachers like her are unwilling to pay for any sort of classroom web tool?

<comment><USER8> I sent her the link just now and we talked a bit. Turns out the school district currently offers a very basic website for teachers to interact with students online.

This is the site they gave her - <http://barnes.myteacher.dvusd.com> which was created using <http://manila.userland.com>.

As you can tell, its nothing fancy really. She mentioned that students can create accounts and interact on her page but that its too confusing and so she just uses the basic features.

To quote her: "I can have the students create accounts on there so they can post stuff too but I haven't played around with any of that stuff. Its really confusing so if he could market it to school districts instead of making us use this stuff then that'd be great. Its really dumb, a lot of teachers just use google sites instead cause its easier. To make my site look like that I had to go through and edit the html code"

It seems like she is definitely looking for something different but expects the school district to purchase it. Otherwise she'd rather use Google or Ning. I hope the feedback helps :)

<comment><AUTHOR> It's great to hear feedback like that. I intentionally designed Eduset to have less customizability than options such as the one you linked, or even Google Sites, as it's almost always the customizability that introduces the complexity. Further, from what I've heard, having an institutional payment option seems like the way to go.

</comment></comment></comment></comment><comment><USER9> Haven't tried the actual product, but the site design and execution looks professional and trustworthy.

</comment><comment><USER10> "Eduset completely changed the way I interact with my students." \- High School English Teacher

Would be much more effective with a name (and even a picture). My first impression was that you made that quote up. Here's a good tutorial on using testimonials: [http://www.marketingexperiments.com/improving-website- conver...](http://www.marketingexperiments.com/improving-website- conversion/using-testimonials-effectively.html)

<comment><AUTHOR> Working on it.

</comment></comment><comment><USER11> Definitely a good start. Lots of teachers don't want do deal with mastering a learning management system like Moodle or Blackboard. What I don't see is a compelling reason to pay $5/mo for something I could accomplish with a class blog or facebook page. Are there plans to allow interaction between students? Grade management? Online quizzes? These would be great value-adds to justify different pricing tiers.

<comment><AUTHOR> The goal was certainly to target teachers who aren't willing or able to put in the time and effort to learn a full-fledged LMS.

I agree that $5/month is a slightly hard sell right now, although there are certain parts of Eduset (such as assignments) that cannot be easily accomplished with a blog. In order to fix this, we are actually in the process of implementing every one of the features you described. Soon, students will be able to post content to their classes (if the teacher allows it), making classes more collaborative. Students will also be able to turn in homework and take quizzes on Eduset, and teachers will be able to grade that work.

As for pricing tiers, does anyone have thoughts on which of these two options would be better?

1) The current model, where all features are provided free for one class, while $5/month is charged to create an unlimited number of classes.

2) The model the commenter above describes, where certain features are made pay-only.

<comment><USER12> I would vote for an institutional subscription model. It might be a hard sell for individual teachers (often likely out of their own pockets), but I bet you could sell the value to institutions which employ teachers.

<comment><USER13> I agree with the above - in its current form, I think you'd attract early adopters who, even if they love your product, might have trouble convincing others to sign up and fork out for it. With an institutional model, said early adopters (presumably those in charge of educational technology spending) can try and push it out to teachers in their school.

Along these lines, perhaps consider some way to allow those who use and love your product to bring others in with minimal friction - let them try out the product in an administrative and student role, without having to sign up and learn on their own. Most teachers I know won't try something out until they really see the value in it (i.e. students engaged, fulfills some kind of need).

<comment><AUTHOR> We're working on adding institutional accounts. There are some complexities involved, mainly involving legal issues and various whitepapers that need to be written, but I wholeheartedly agree with your idea: early adopters are a great way to get institutions to adopt a product.

As for your second suggestion, do you think a way for current users to send potential users an invitation to try a demo account (a sandbox) would do the job?

</comment></comment></comment></comment></comment><comment><USER14> 1\. Slideshow view or whatever you call it where you can press "next" or the right side of the image to go to the next screenshot. I hate clicking to "minimize the screenshot" then clicking again to zoom to the next screenshot

2\. Maybe zoom in on that email message since it may give the impression you have to use a gmail account.

3\. Page of features and screenshots

4\. DEMO ACCOUNT WITHOUT SIGNING UP. No one likes signing up for anything unless they have to. Just have a static version or give them a demo account with full access and every hour or so, have the database be restored to normal

<comment><USER15> Yes, the demo account is crucial; a lazy effort would be a screencast (flash- based?). I certainly want to give this a whirl, even though it would not directly help me, but rather, friends of mine who are professors or teaching assistants. But I'm not about to register, activate an account, and then populate it with bogus info and bogus students burning an hour of my time ... the entry barrier is too high :/

<comment><AUTHOR> I currently have a video walkthrough posted on the left side of the page (<http://www.youtube.com/watch?v=IJ-WCIKVbRc>). Is that the kind of thing you're thinking of, or something more in-depth?

I'll look into the technical aspect of setting up demo accounts, I am beginning to come around to the idea.

</comment></comment></comment><comment><USER16> This is almost an exact replica of my startup <http://edmodo.com> which is completely free for multiple groups (eduset charges for more than 1 group), and already has decent traction with 87,000 registered users.

<comment><USER17> Jeff, Will has already explained to you multiple times in both in public and private that Eduset is not a copy of Edmodo and both products were developed independently of each other. Kindly lay the fuck off and quit advertising your startup at every mention of Eduset.

Will and I both developed a teacher classroom web interface independently of each other. The difference is that I didn't lay claim to the idea and become a dick about it.

BTW, your comparison of Eduset and Edmodo is like a comparison between the Zune and the iPod. You might as well accuse Classleaf of similar 'exact replica'-tion.

<comment><USER18> Moreover, even if he _did_ copy the idea... who cares? Ideas are a dime a dozen... whoever executes best will win... assuming there is a winner. Seems like a space that several players could comfortably operate for quite a while.

Also, accusing someone of copying your site is rather ballsy considering that both sites look like repurposed Facebook clones. At least the eduset guy changed the color from blue to green. ;)

(Not that there is anything inherently wrong with that, but you don't exactly have a unique style that got ripped off.)</comment></comment></comment>


We Might Soon Resurrect Extinct Species – Is It Worth the Cost? - <AUTHOR> https://www.nytimes.com/2017/03/20/science/revive-restore-extinct-species-dna-mammoth-passenger-pigeon.html?rref=collection%2Fsectioncollection%2Fscience&action=click&contentCollection=science&region=rank&module=package&version=highlights&contentPlacement=1&pgtype=sectionfront&_r=0 <comment><USER2> Further and more annoying "Ship of Theseus" questions:

If I engineer an animal whose DNA matches that of an extinct species, but it's raised in captivity, or in another way such that its environment is very different from that of when the species was not extinct -- have i actually resurrected a species?

Radiolab had a bit about this w.r.t. whooping cranes. Captive raised birds, released in the wild, have no ability to raise chicks -- because there have been no tutors. The existence of adults in the wild is thus totally dependent on humans raising them in captivity -- is that "really" saving a species from extinction? [http://www.radiolab.org/story/254840-operation- migration/](http://www.radiolab.org/story/254840-operation-migration/)

<comment><USER3> I get the argument from a theoretical perspective, but in practice most recently extinct species have very close relatives we could probably co-opt into teaching rearing practices if necessary.

(captive) elephants could almost certainly be used to raise cloned wolly mammoths; there are a variety of Rhino species which could be used to help raise un-extinct Rhinos.

I don't see why it's not worth trying. Maybe it will work for some species, and it won't for others, but there have been much largest amounts of money wasted on much less noble projects.

<comment><USER2> >(captive) elephants could almost certainly be used to raise cloned wolly mammoths

Their native habitats are about as totally different as you can get without being underwater. Why do you assume their behaviors will be similar?

<comment><USER4> We know enough about woolly mammoths to know that they behaved and ate in a roughly similar way to elephants. [https://en.wikipedia.org/wiki/Woolly_mammoth#Palaeobiology](https://en.wikipedia.org/wiki/Woolly_mammoth#Palaeobiology)

<comment><USER5> I'm really not convinced, especially when you add the role of environment; the epigenetic factors.

</comment></comment></comment></comment></comment><comment><USER6> I know it's brought up in the article, but assuming that the money going toward reviving extinct species would otherwise go toward protecting endangered species is silly. I would have no ethical qualms donating money to bringing back mammoths and would be justifiably angry if that money instead went to saving the elephants.

Edit: That sounds like I irrationally hate elephants, which isn't the case. I just value pushing cool new science forward more.

</comment><comment><USER7> Yes. I'd pay thousands for a pet dodo!

<comment><USER8> I think this post does not deserve to be down voted. Objectively, making them pet is a viable commercial approach.

<comment><USER9> I'm not sure about that. Unlike GMO crops, you (probably) can't patent the dodo… so after a company spends a large amount of money upfront on genetic engineering, as soon as the first batch of birds goes out, anyone can start breeding them and undercut them on price.

Maybe they could find something in their specific breed of not-actually-a-dodo that's patentable.

Or they could only distribute one sex of bird to the public, at least initially.

<comment><USER10> That's non trivial if you sterilize before sale. Also, if it's a fad then having a X year head start before sale means you can ramp up much faster than any competitors.

<comment><USER11> But there is also a nontrivial difference between having living stem cells then and having 100+ year dead feathers now. Plus, Dodos would possible be breeded by transplanting stem cells into eggs which you might be able to ramp up quite easily.

</comment></comment></comment></comment></comment><comment><USER12> I was hoping the article would at least mention Pleistocene Park, an effort to mitigate climate change that depends on the recently extinct wooly mammoth. If it had, the question in the title would be better stated: "Can We Afford To Not?"

Some solid info on the project is here: [https://www.theatlantic.com/magazine/archive/2017/04/pleisto...](https://www.theatlantic.com/magazine/archive/2017/04/pleistocene- park/517779/)

<comment><USER13> I just watched the Sustainable documentary on Netflix talking about the very topic. It's fascinating!

</comment></comment><comment><USER14> On this subject, I can't recommend this piece strongly enough: The Narcissism of De-Extinction [https://blogs.scientificamerican.com/culturing- science/deext...](https://blogs.scientificamerican.com/culturing- science/deextinction/)

</comment><comment><USER15> >What if that dream came at the expense of today's Asian and African elephants, whose numbers are quickly dwindling because of habitat loss and poaching?

Humans only had a partial role in the demise of the mammoth. When it comes to the dodo or the thylacine, I suspect morally it won't matter if that means less pigeons and dingos in the wild. They're removal from our ecosystem was artificial and by human hands and the culling of animals that took their place probably won't raise too many objections.

On a more sci-fi front, I wonder about our future extinction. I wonder if aliens would later find Earth and try to revive us. Maybe this has happened, maybe its has happened more than once.

<comment><USER16> When humanity eventually goes extinct, there will most likely be a reemergence of life and growth (if we don't take them out with us).

</comment></comment><comment><USER17> Life, uh, finds a way.

</comment><comment><USER18> > should society devote its limited resources to reversing past wrongs, or on > preventing future extinctions?

This needs to be called out as the idiotic fallacy that it is. Not sure if "straw man" quite covers it, but it's close.

Take any two things and posit a zero-sum game between them -- nothing good ever comes out of this kind of analysis. "Given society's limited resources, should we be educating our children, or feeding them? A careful analysis doesn't favor the former."

Oh, sod off. We can do both. If you're going to frame your argument as a zero sum, then you need to have a very valid reason why it's _actually_ zero-sum. Otherwise that's just a manipulative way of doing a terrible analysis.

<comment><USER19> Even funnier: If this wasn't a dumb fallacy and we grant them that it's zero sum. Just how many man-hours will be wasted by people reading this NYT article as opposed to say curing cancer, or actually reviving mammoths?

<comment><USER20> > _Just how many man-hours will be wasted by people reading this NYT article > as opposed to say curing cancer, or actually reviving mammoths?_

That's irrelevant, not only because the majority of those readers are not the same people that would be curing cancer or reviving mammoths, but also because the resources it talks about are more about budgets, organizational priorities, etc, and not about missed hours.

</comment></comment></comment><comment><USER21> Well, given how many species we're already driving extinct, we had better be bloody-well prepared to resurrect _some_ of them!</comment>


Time Spent Waiting for an Answer in StackOverflow (by language) - <AUTHOR> http://blog.guillermowinkler.com/blog/2012/10/30/how-long-waiting-for-an-answer-in-stackoverflow/ <comment><USER2> There was a time (first 6 months in the life of StackOverflow) where pretty much all questions would get answers within minutes. I was somewhat active on it and to me it was like an RPG game of trying to get more and more points. It was damn addictive.

Then, somehow it got boring and complicated, and I stopped playing. I don't exactly remember what or how that happened, but it was a mixture of new rules and confusing features.

I haven't played there for more than 2 years, but I'm still in the top 2%, and best of all, I still get points from all my previous contributions. When I stopped, I had around 8k points; now I have 19k points.

StackOverflow was way more fun (and useful) at the beginning.

I think a major factor is that simply, all the basic and interesting questions already got asked. New questions these days tend to be very specific and complicated.

<comment><USER3> "StackOverflow was way more fun (and useful) at the beginning."

Wait, what? How could SO possibly be less useful today than it was a few years ago. Anytime I have any programming question I immediately google it and odds of a StackOverflow answer are very high.

I started iOS dev when it was fairly new and it sucked. So many bugs, gotchas, and misc shortcoming of the dev environment, Obj-C, or the SDK. Every single issue I ran into has now been cleanly answered on SO. Things I wasted dozens of hours on then would take me mere minutes as a new dev today.

I sympathize with it not being as fun to answer questions today, but I have no idea how you can say it was more useful then than it is now.

<comment><USER2> I meant useful for getting answers to new questions.

Meaning, if you're having a problem with something, and you googled it but didn't find answers ... I don't think you'll get useful results by posting the question to SO.

But of course it's still tremendously useful for the archive of questions and answers that it hosts.

<comment><USER4> Posting with a 500 point bounty still does wonders. I once had a guy write a patch to the mercurial DVCS (small, but still) to answer a question.

Of course you have to wait for two days before you can offer a bounty.

</comment></comment></comment></comment><comment><USER5> The quality of the service, in the point of view of help to solve a problem we are encountering has significantly dropped. This is partly due to policy and partly due to the much lower quality and pertinence of the answers.

Contributors are there to earn points and just try whatever answer comes to their mind even if it's so vague or approximate that it is useless. Just trying, nothing to loose.

I guess the experts went away from it because the initial thrill has gone (sign of smartness) and they have better things to do then stare at a browser to catch new questions for no other rewards then getting points.

My impression is that stackoverflow was initially in a virtuous circle and now it's in a vicious circle.

I now have questions like how EXT4 files with holes impacts performance of an mmap ? Should I force a prior full fill of the file with dd before mmap ? I'll certainly get crap answers and I really don't know where to ask this to get a valuable answer. So I'll end up doing a benchmark, which has probably already been done many time or people knowing how EXT4 works could answer straight out of the book.

<comment><USER6> This.

Asking a question typically leads to a handful of "shotgunned" answers. Yes, they do come immediately -- but the real story is, they are templated ("I'll fix it later, just lemme be the first to answer"), incomplete, and/or simply wrong.

A dozen explanatory comments later, the SO gun slingers finally understand the question and its implications. No, I really was NOT asking that. Neither that. Yes, that condition I mentioned in the question IS important and you cannot ignore it in your answer. You have an error there. That won't work.

And once that happens... silence falls.

<comment><USER5> Happened to me. And that person responding completely aside of the question voted to get my question closed and erased its answer. I was asking for axisting asynchronous signal slot library to avoid implementing mine. Another guy proposed to use QT and another one to use boost's signal which is not asynchronous. The later guy commented to the QT guy that boost was so much lighter and faster. Boost signal is known to be the less performant, but because its boost it must be the best. This guy also voted to close my question once I said I don't want to depend on boost. The question was finally closed and I implemented my self the signal slot lib with a perfect match to my requirements.

</comment></comment></comment><comment><USER7> Strange that there is no Python there.

[Insert joke about Python being so intuitive and easy to use no one asks questions about it].

<comment><USER8> It was kind of a relief for me - when frequenting HN, one might get the idea that everybody and their dog uses Python for everything, religiously. It's good that there's people out there who simply accidentally forget that it exists.

<comment><USER9> It's the tenth most used tag on Stack Overflow: <http://stackoverflow.com/tags>

<comment><USER10> From a visual quick scan of the tags here is a list of the top _languages_ :

         1  c#           371433
         2  java         317047
         3  php          295016
         4  javascript   279976
         5  c++          156107
         6  python       140451
         7  objective-C  107083
         8  c             74124
         9  ruby          57577
        10  vb.net        36981
        11  perl          22101
        12  dephi         17439
        13  scala         11745
        14  haskell        8696
        15  actionscript   6102
        16  groovy         4970
        17  clojure        4046
        ..  f#             4046

<comment><USER10> Additional to above, 11 months ago I also recorded some SO stats: <http://news.ycombinator.com/item?id=3286348>

Using these figures the % growth in questions asked in the last 11 months would be:

      java        76%
      php         76%
      javascript  85%
      c++         60%
      python      70%
      c#         716%
      ruby        67%
      perl        50%
      scala       76%
      clojure     77%
      lua         77%

Assuming I've made no calculation or recording errors then the 700%+ increase on c# is quite amazing!

</comment></comment></comment></comment></comment><comment><USER11> > Hey, Haskell has pretty good answer times, at least considering its 33th > position in the TIOBE Index.

I need to mention here that the Haskell community on Stack Overflow is AWESOME, they are helpful qualified people giving insightful answers (btw, Don Stewart is an active participant).

<comment><USER12> I'll second this. Just browsing the questions in the Haskell tag on SO is a great way to learn the language. There's a really nice mix of practical questions and theoretical, mind-expanding ones there.

</comment></comment><comment><USER13> By filtering out answers that arrive after more than 5 hours, you're really skewing the data, and in a very arbitrary way. Why not 4 hours, or 6? Note that filtering also caused languages to change relative positions (e.g. PHP climbed from 5th place to 1st).

<comment><USER14> Well he could always compute the median. Less robust to outliers. 100 questions answered in 1 minute, with one question answered in 1 day will give you an avg of 15 minutes instead of the more representative 1 minute

</comment></comment><comment><USER15> "You see there, PHP running at front with 68 minutes average accepted answer time, either it's too easy or there're too many of them."

It's an average, the size of each data-set shouldn't really affect the results. If there's too many PHP questions then answer times would likely be slower. Seems just like an excuse to dig at PHP.

<comment><USER16> I think he means that duplicates might be causing a problem? PHP is very approachable, and you probably get a lot of new users asking similar questions, which would be handled quickly. I think this was his motivation in creating the plot of 'hard' questions which took more than a day.

</comment></comment><comment><USER17> No Python, I'm starting to think OP is a troll.

<comment><USER18> You're absolutely right! these are the python times:

* less than 5 hours (easy) => 34 minutes avg * less than 24 hours (medium) => 100 minutes avg

<comment><USER17> So Python is deliberately left out?

<comment><USER18> No, just forgot about it, I like Python pretty much.

</comment></comment></comment></comment><comment><USER19> One alternative to leaving out the questions that take a long time is to calculate the average of log(minutes).

Harder to interpret, but it accounts for the questions with long delays without letting those questions dominate the calculation.

<comment><USER20> This technique is actually equivalent to the geometric mean: [http://en.wikipedia.org/wiki/Geometric_mean#Relationship_wit...](http://en.wikipedia.org/wiki/Geometric_mean#Relationship_with_arithmetic_mean_of_logarithms)

</comment></comment><comment><USER21> Could (My|Postgre)SQL be considered a language too? How about RegEx?

<comment><USER18> I've created a query in the data browser, just select the tags you want:

[http://data.stackexchange.com/stackoverflow/query/83626/how-...](http://data.stackexchange.com/stackoverflow/query/83626/how- long-waiting-for-an-answer-by-language)

</comment></comment><comment><USER21> I think another aspect is SO has the same problem as HN.

Same thing posted will get a different response depending on the time of day because of the signal:noise ratio.

</comment><comment><USER22> this is flawed: the presence of an answer post does not mean that the author actually got an answer...

<comment><USER23> The author filtered on questions with accepted answers only.

</comment></comment><comment><USER24> tl;dr ..but ...where is Python?

<comment><USER5> I guess people use other channels to get help, or not much help is needed, or there are few noobs working with python, ...

</comment></comment><comment><USER25> Rails?

<comment><USER18> Just change the tags in the set:

[http://data.stackexchange.com/stackoverflow/query/83626/how-...](http://data.stackexchange.com/stackoverflow/query/83626/how- long-waiting-for-an-answer-by-language)

<comment><USER25> Hmmm. Seems like I'm an idiot: [http://data.stackexchange.com/stackoverflow/query/83835/how-...](http://data.stackexchange.com/stackoverflow/query/83835/how- long-waiting-for-an-answer-by-language)

There's something I'm missing: Run query doesn't get me the result.

</comment></comment></comment><comment><USER26> Actually they should mostly wait. The firehose of SO is largely filled with stupidity, lazyness, and people too lazy to learn or google what they need.

SO has become the tit to feed the stupid calf, and the milk has run dry because noone in their right mind should spend any time answering the questions of lazy, good for nothing idiots who think they could program someday, by merely posting every idiotic problem they encounter including syntax errors to SO.

If that was SO's mission. Mission accomplished. I and any other person who respects their own time and value will not spend 5 minutes on monkeys typing shakespeare.</comment>


The Ultimate Engineered Solar System - <AUTHOR> https://planetplanet.net/2017/05/03/the-ultimate-engineered-solar-system/ <comment><AUTHOR> > _Smith and Lissauer ran simulations with not 2 or 3 but 42 Earth-mass > planets sharing the same orbit! That is the maximum number of Earths that > can fit along Earth's present-day orbit. And guess what? It's perfectly > stable for billions of years._</comment>


Ask HN: KISS and front-end development in 2019? - <AUTHOR> I am a teacher by profession but have been a self-taught coder and web developer for 20 years. I'm comfortable using microframeworks like Flask on the back-end, but my front-end skills are truly lagging. I default to hand-crafted HTML5 like it's 2008. And don't even mention my JavaScript/ECMAScript skills!
I know I need to modernize my front-end development skills, but, to be quite frank, I'm totally disinterested in the currently en-vogue ecosystem of JavaScript packages, package managers, build furnaces, dependency demagogues -- well, let's just say it's too much for me to manage in my spare time.
So how does one Keep it Simple, Sweetie? The KISS philosophy has guided my design decisions since I started coding in LOGO when I was 8. How can it guide my front-end development in 2019? <comment><USER2> Simplest option: Use server side rendering.

Next Simplest Option: Javascript + Jquery + HandlebarsJS

Neither of these options are marketable.</comment>


Who want to invest another answers.google.com? - <AUTHOR>

I have an idea where monthly payments from users who search for something distributed between people who are creating answers.
Give a thought how far it can go.
firstname.lastname@example.com <comment><USER2> I do! I pledge $0523530358306 gavrillion!

<comment><AUTHOR> anyone else?</comment></comment>


Ask HN: How much product knowledge is necessary for developers? - <AUTHOR> <comment><USER2> Depends on the company. My company in the financial sector is always saying you need more financial acumen. I think it's mostly because out business people have no idea how to create a business process map or describe what they are doing.

</comment><comment><USER3> It's extremely important.

I'm currently in a position where I don't have an in-depth understanding of the product and I can feel it when it comes to brainstorming.

As our product is a B2B where our users are sysadmins I have no contact with clients or use of the product. I think it makes it much more difficult to understand what is needed.

Where I see some of my client facing colleagues are on the forefront of understanding what needs to be improved.

</comment><comment><USER4> It also depends on the person. I was a kid named Andrew who read Enders Game and the sequels growing up. I then went to an engineering university that emphasized "engineers have a duty to society and must understand the impact of their work" in multiple classes. So for me, the answer is "a fair amount".

</comment><comment><USER5> It really depends on the component under development but what I find is that devs that know the product can contribute to team discussions and planning far better than ones that don't.

</comment><comment><USER6> Very context dependent.

If you're at a small startup, you'll want a lot.

When you're at a larger company, things typically get specialized, there will be dedicated product folks, and you'll find programmers with 0 product knowledge.

</comment><comment><USER7> Product, Development, Sales are the three necessary cores to a product. That said, it's more a UX/UI role than development.</comment>


Ask HN: Constraint Solving Libraries for Automated Scheduling? - <AUTHOR> I've been searching for an existing scheduling solution where the primary goal isn't filling set shift times, but instead supplying a certain amount of coverage at each hour of the day based upon a set of constraints (listed here: http://www.nathanhammond.com/a-scheduling-problem).
There are two existing categories of businesses that come to mind that might have this type of use pattern:

    * Medical facilities
    * Call centers
 I've reached out (via phone!) to multiple companies that provide services to these business categories but I've been told by salespeople that they either don't have this sort of functionality, that it is so specifically tailored to the target market as to be useless to me, that I shouldn't be pursuing this (!), or they assume that because I'm doing this for a non-profit I'm not willing to pay for it (my money is just as green!).
At this point (unless you're aware of somebody that will sell their product to me) I was wondering what tools I should use to build this.
My first thought was to use something like Prolog, but because I'm not expecting there to be a "perfect" solution, I don't know how I would make that work.
After a bit of research I found Drools Planner which appears to be the 800lb gorilla, but before heading down that path I was wondering if any of you were aware of other lighter-weight tools that would make this easier to build in my spare time?
Thanks! <comment><USER2> Preactor is a comercial scheduling software suite. I haven't used any of the tools, but they sound like what you need.

They have a free product that you can play around with. Good luck!

<http://www.preactor.com/Express/Default.aspx>

<comment><AUTHOR> Downloading now to see what it looks like.

</comment></comment><comment><USER3> Drools planner is lightweight: use simple score calculation and you need only about 5 jars (planner, xstream and apache commons jars)

</comment><comment><USER4> This might help --> <https://www.shiftdata.com/>

<comment><AUTHOR> Amusingly, these are the folks who told me I shouldn't be pursuing this. I don't know who it was I talked to over there, but he was very quick to dismiss me. I have an outstanding trial request with them in any case to poke at it as they seemed the most promising.

</comment></comment><comment><USER5> Search for constraint programming solutions to "nurse rostering" problems.</comment>


Uber caps surge pricing during blizzard, but people still complain - <AUTHOR> http://fortune.com/2015/01/26/uber-caps-surge-pricing-during-blizzard-but-people-still-complain/

<comment><USER2> From the article:

 _If, for some reason, YOU failed to prepare adequately for a highly- publicized storm and Uber is your only way to get some much-needed supply (from closed stores?), then don't complain about price or availability. YOU brought it upon YOUrself._

WHAT?

Take responsibility for myself? Are you INSANE?</comment>


Justice Department Announces Actions to Dismantle Kelihos Botnet - <AUTHOR> https://www.justice.gov/opa/pr/justice-department-announces-actions-dismantle-kelihos-botnet-0 <comment><USER2> Glad to see Justice taking action. Of course, when we get spam emails we don't usually tie it back to Russian hackers (well, maybe now in the age of Trump...).

The only problem is taking down Kelihos may have opened the door for other bad guys to take a bigger piece of the pie - see this: [https://www.incapsula.com/blog/viagra-spam- botnet.html](https://www.incapsula.com/blog/viagra-spam-botnet.html)</comment>


Why Apple is more expensive than Amazon - <AUTHOR> http://weblog.raganwald.com/2008/05/why-apple-is-more-expensive-than-amazon.html

<comment><USER2> In my last job I worked in closer proximity to the music industry than I'd ever want to again.

My understanding, from talking with some label people was that they hate iTunes store because it has a fixed price per track. The reason for them not liking this was pretty shocking to me at the time: a price that can be varied allows labels to threaten artists with price signaling. In essence, "do what we tell you, or we'll reduce the price of your tracks far enough that consumers will assume they're crap".

From what these guys said, they couldn't care less about DRM. If iTMS would just allow them to vary the cost per track, they'd love it.

I am _so_ glad I no longer work in that industry.

<comment><USER3> Madonna or some other popstar wrote about this in an essay about how much the record labels suck.

Variable pricing also sends signals to consumers. A $1.99 single can be positioned to be better than a $1.50 single which can be better than a $0.99 single.

</comment></comment><comment><USER4> Yeah I get it, Steve Jobs is our savior. If only he would get his way, we would all get free iPods AND free music.

I think Apple probably had to introduce DRM to be able to make a deal with the music industry. At least I remember Steve Jobs proclaiming that DRM is bad later on - he could simply have changed his opinion in alignment with customer wishes, though. But to think that they would love to give us the music for free goes a bit too far.

Also, afaik the "DRM-free" music on iTunes still has DRM: it is signed with your name. So you can copy it freely on your own devices, but you can not sell it on ebay. The ebay factor is something I still don't see factored into the prices for online music (it should be cheaper than CDs, because I can sell a CD once I get tired of it).

<comment><USER5> > to think that they would love to give us the music for free goes a bit too > far

Did I write that? I don't remember, and I can't find it int he essay. I wrote that they would love to be able to compete with Amazon on price and that if they could get it from the labels on the same terms as Amazon, they woul doffer it at the same or lower price.

As for free iPods, I don't remember writing that either. That being said, lots of companies work very hard at making their products less expensive in order to occupy mor eof the market. Last time I checked, Apple has offered a variety of iPods over a very broad spread of prices, from shuffle to iPod touch 32GB. Cheap iPods = no oxygen for competitors at the low end.

That's a perfectly normal business strategy, isn't it?

"you can copy it freely on your own devices, but you can not sell it on ebay. The ebay factor is something I still don't see factored into the prices for online music (it should be cheaper than CDs, because I can sell a CD once I get tired of it)."

That is a novel and interesting point. Thank you.

<comment><USER4> I learn from your response that my comment was written in a too inflammatory way. Sorry for that.

It just seemed to me that it was too much biased in favor of Apple. Unless you have insider information, I am not convinced that your theory is right. It is a possible explanation, but on the other hand, Apple has a nice lock in with iPods and iTunes. Do they care about DRM? Maybe: they might be happy that you bought an iPod. But the thing is, once you consider upgrading to a newer, fancier MP3 Player, you better make it another iPod, or you lose your music. So Apple does benefit from DRM. Not saying that is what they want, but it is an alternative theory.

Possibly they simply charge higher rates because they can (yay for fanboys). Most consumers by now might associate digital music with iTunes and not even check Amazon for prices.

I think Amazon also has the DRM that signs the MP3s with the buyers names, but I am not sure (haven't actually bought any music online yet).

<comment><USER5> It's certainly fair to have different opinions. For one thing, Apple themselves probably have different opinions: they probably have debates like this where one manager screams at another that there is One True Way to manage iPod/iTMS and the other throws a stapler at her head.

For example, I wrote that essay as if there is one, coördinated strategy with iPod and iTMS. In reality, there may be iTMS managers who are trying to maximize profits for their division while the iPod managers are trying to undermine iTMS and commoditize it for the benefit of their division, just as if they we in coöpitition as independant companies.

So... the truth is probably way more complex than we imagine, or even could imagine.

</comment></comment></comment></comment><comment><USER6> It seems like I'm a little slow today, because I don't get it. I can buy DRM- free music from Amazon and play it on my iPod, so what's the problem? How is the music industry stopping people from buying iPods and forcing them to buy devices with DRM?

<comment><USER7> That part of the article is wrong or at least extraneous: the music industry doesn't care what you play music on.

The actual issue is that the music industry realizes how powerful the iTunes Store has become and they feel threatened, so they'll give anyone a deal who says they'll compete with Apple.

</comment></comment><comment><USER8> The title is misleading. I thought this article was going to be about the relative market capitalizations of the two companies. It's actually about the relative price of music. Although, perhaps the author intended the title to have a double meaning.

<comment><USER9> I thought it had something to do with the stock price. Keeping with the double meaning vein, the author is either really naive or really clever.

</comment></comment><comment><USER10> It's not that I disagree with the Apple fanboys. I own stock, and many of their products, and in general their products are very good. And I love that the fanboys are selling, nonstop, with all their heart.

It's that the Apple fanboys are _boring_. It's like hearing the same song, over and over. And it's not a good song, it's like hearing "Who Let the Dogs Out" or something.

If the fanboys could admit that Apple stuff isn't totally perfect, and there actually are better alternatives depending on people's needs, that would lend a lot of credibility to their argument.

I was one of the first people to get an iPod and hop onto the ITMS bandwagon. Now I'm happily jumping off to Amazon's store, simply, because they have a better store.

</comment><comment><USER11> Short version : "Price fixing is how."

<comment><USER12> but not by Apple

<comment><USER13> I never thought i'd find myself appreciating Apple's dominance of the music player business.

</comment></comment></comment><comment><USER14> _Think about this: If you buy a 32 GB Apple iPod touch from Amazon for $472.54, do you think Steve Jobs stays awake all night worrying about whether you will buy tracks from Apple or from Amazon?_

Perhaps, but the iTunes Store helps sell more iPods, and vice versa, as long as iTunes songs can only be played on iPods, and iPods can only play DRM'd music from iTunes (and of course DRM free pirated/ripped/purchased music)

<comment><USER5> That's the Microsoft strategy, and it works quite well in many markets. But it's not the only winning strategy. for example, GM profited handsomely from the Interstate Highway System, even though the roads worked for Ford as well. Levi Strauss profited handsomely from blue jeans becoming a fashion statement, even though they did not have a monopoly on wearing denim.

When you are the market leader, when you have the biggest piece of the pie, you have the most to gain from the entire pie growing exponentially. Right now, Apple has the most to gain from music players growing as a market. I suggest that DRM-free music makes the market for music players grow exponentially, and locked-in music holds the market back.

Remember, the vast majority of the music on iPods today is DRM-free MP3s. Apple profits from consumers ripping their CDs to MP3s. The more DRM-free music is out there, the more iPods people will buy, even though they also play on other machines.

</comment></comment><comment><USER15> lotta speculation, very little fact in that post. what if amazon is running at minimal margins or even using this as a loss leader to crush iTMS before it dominates all digital media? Occam's Razor. Remember they need Amzn Unbox to succeed to justify the digital outlay to their shareholders; crushing iTunes on price is their best hope of doing just that, short of a loctite-strength alliance with hollywood and/or TV. Which explains iTunes retliatory move: [http://www.alleyinsider.com/2008/5/steve_jobs_movie_deal_a_l...](http://www.alleyinsider.com/2008/5/steve_jobs_movie_deal_a_loss_leader_for_apple)

</comment><comment><USER16> Raganwald I know you're reading this - I'm your fanboy. Very insightful.

</comment><comment><USER17> Then why doesn't Apple start a revolt? The music industry (not to be confused with individual bands) are one of the most hated businesses among young people.

<comment><USER18> I think you overestimate the number of people who care (or even know) about this kind of stuff. I suspect that most of the people who buy the multiple- platinum-selling crap would just buy their music elsewhere if Apple stopped selling it. Initially, it would hurt Apple (due to reduction in revenue) and then it would hurt everyone because the music industry would probably get to bully everyone around even more.

</comment></comment><comment><USER5> <http://news.ycombinator.com/item?id=184507>

</comment><comment><USER19> I'd comment on your argument, but I can't hear it over Bach's composition and Gould's performance. +1 for that. Thank you.

</comment><comment><USER20> So how does he know? Did he sign off both deals?

<comment><USER4> Simple logic: Steve Jobs is god, therefore Apple can't be evil. Hence the fault must lie with the other guys.

</comment></comment><comment><USER21> _Let's say you would like to listen to one of the most amazing performances ever made, Glenn Gould's 1981 recording of Bach's Goldberg Variations_

Let's say you want to listen to the grunting and humming of an overrated maniac,

[http://www.amazon.com/Bach-Goldberg-Variations-Recording- Exp...](http://www.amazon.com/Bach-Goldberg-Variations-Recording- Expanded/dp/B0013G2QZ2/)

Listen to track 6, for instance.</comment>


Nokia secretly working on Android Smartphone? (image) - <AUTHOR> http://getandroidstuff.com/nokia-secretly-working-android-smartphone-image/

<comment><USER2> Probably not. Nokia (as every other company) constantly build prototypes and test platforms. There was talk from Elop himself that they tried to get an Adroid prototype working last year.</comment>


PHP-Watcher - <AUTHOR> https://sergeyzhuk.me/2019/10/18/php-watcher/ <comment><USER2> How does this deal with existing connections?

One of the use cases is long-lived requests (e.g. uploading a file). If you restart the daemon and kill the existing connections, it's not going to make users happy. So only benefical in development environments?</comment>


Ask HN: Have any former developers successfully changed careers? - <AUTHOR> I've come to realize that 15 years of experience, a body of work used by hundreds of thousands of people and solid references don't count for anything in this industry if you can't or refuse to solve puzzles in an interview while a junior developer watches and judges you.<p>I'm thinking of changing careers and living a peaceful and quiet life. I'm wondering if anyone has done so and how it turned out for them. <comment><USER2> once i was in a bar in South Florida and talked to a random guy. He owned a small business mowing city lawns and gardening. He was very heavy so in my mind I couldn't understand how someone that's always working physically outdoor can be this fat. (sorry there aren't any other word in my small English vocabulary pool). It turns out when i told him i'm a software engineer, to my surprise he told me he used to be a DBA and couldn't take this lifestyle any longer and wanted to be outdoors. He successfully transitioned.

</comment><comment><USER3> I have similar mindset. My manager is helping me transition to leadership positions but I don't know yet if this is right move for me.

However, I am also looking into software sales. I have introvert personality, and never done sales before. But I have friends who are about as introvert as me and they are doing pretty good in it. As a sales engineer, you make mostly proof of concepts for clients. You might even earn commission at some companies. Requires a lot of travel.

</comment><comment><USER4> I've got a friend who was a developer and has moved more to landlording - buying a couple of places on mortgages and renting out. It's gone pretty well. It's something you kind of build up over time.

</comment><comment><USER5> This is a question regularly on my mind, and I can say that the traditional transition to management is not always the solution.

The puzzle mindset, tendency to ignore pragmatic approaches, desire to build solutions that satisfy the requirements 5 years in the future while ignoring those of today can make it very difficult.

Without the correct leadership from the very top-down, middle management can be a daily test of wills, instead of being a role where one makes sure projects get done.

<comment><AUTHOR> Yeah, no way I want to go into middle management if I don't even receive respect when I come in to interviews for a IC position.</comment></comment>


Microsoft now owns Minecraft - <AUTHOR> http://news.xbox.com/2014/09/games-minecraft-to-join-microsoft <comment><USER2> I look forward to seeing notch's announcement on his blog. Semi-depressing, but it should be interesting to see how this plays out.

As an alpha purchaser in 2010, i hope they still honor the lifetime updates promised.

<comment><USER3> Looks like he's leaving Mojang: [http://notch.net/2014/09/im-leaving- mojang/](http://notch.net/2014/09/im-leaving-mojang/)

</comment></comment><comment><USER4> "Microsoft Studios includes 343 Industries, Turn 10 Studios, and Lionhead Studios just to name a few."

Ouch.

<comment><USER5> Don't forget about poor, poor Rare...

Edit: remembered this, [http://www.p4rgaming.com/mojang-prepares-to-make- kinect-spor...](http://www.p4rgaming.com/mojang-prepares-to-make-kinect- sports-games/) p4r is gold.

<comment><USER6> >acclaimed hit series Kinect Sports

Ahahah. That article is golden.

</comment></comment></comment><comment><USER7> hm, i always thought minecraft would someday be open sourced..

<comment><USER5> In fact notch has stated several times that he would open source it when it stopped being profitable. But I guess a 2.5 billion buyout rules out unprofitability.

</comment></comment><comment><USER6> The term Micro$haft seems oddly appropriate for this.

<comment><USER8> I think most people voting you down missed the wordplay.

<comment><USER6> If I cared about downvotes I wouldn't post on HN :P</comment></comment></comment>


A Prettier JavaScript Formatter - <AUTHOR> http://jlongster.com/A-Prettier-Formatter <comment><USER2> I really have to back up the recommendation for Wadler's "prettier printer" paper. I'm working on a Haskell parser and pretty-printer for Rust and I had pretty much given up on ever finding a lightweight pretty printer that would be able to choose whether to put something on one line or to split it up into multiple lines all by itself. For anyone needing this in Haskell, I strongly urge you to consider the modern rewrite of the initial library [1].

[1] [https://hackage.haskell.org/package/wl-pprint- annotated](https://hackage.haskell.org/package/wl-pprint-annotated)

<comment><USER3> Yeah, I can second that recommendation on reading the paper [0]. It's one of the nicest I've read. There is also a Rust crate for it[1] - though it's not as... 'pretty'... as the Haskell EDSL, obviously.

[0]: [http://homepages.inf.ed.ac.uk/wadler/papers/prettier/prettie...](http://homepages.inf.ed.ac.uk/wadler/papers/prettier/prettier.pdf)

[1]: [https://crates.io/crates/pretty](https://crates.io/crates/pretty)

</comment></comment><comment><USER4> > If computers are good at anything, they are good at parsing code and > analyzing it. So I set out to make this work, and prettier was born. I > didn't want to start from scratch, so it's a fork of recast's printer with > the internals rewritten to use Wadler's algorithm from "A prettier printer".

Bob Nystrom (munificent) disagrees[0] after writing one himself:

> The search space we have to cover is exponentially large, and even ranking > different solutions is a subtle problem.

[0]: [http://journal.stuffwithstuff.com/2015/09/08/the-hardest- pro...](http://journal.stuffwithstuff.com/2015/09/08/the-hardest-program-ive- ever-written/)

<comment><USER5> I will note that one _could_ design a pretty printer that reliably had better performance if the formatting style they chose was simpler and more amenable to it.

My (mostly self-imposed) task was more difficult because I was trying to follow the existing style that humans were hand-applying to their Dart code, and that had a lot of tricky non-local cases that look nice but are hard to automate.

<comment><USER6> I have to say Dartfmt is one of my favorite things about using Dart. It works amazingly well and the fact that it's not configurable is a great decision [0]. I'm never afraid to peek into unfamiliar code because of that. So thank you.

[0] [https://github.com/dart-lang/dart_style/wiki/FAQ#why- cant-i-...](https://github.com/dart-lang/dart_style/wiki/FAQ#why-cant-i- configure-it)

<comment><USER5> You're welcome! That means a lot to me. I tried really really hard to make it produce output I and others would like.

> I'm never afraid to peek into unfamiliar code because of that.

This is _exactly_ why dartfmt exists. It's not about making _your_ code more readable to you, it's about making _strangers '_ code more readable, because that lowers the bar to contribution between people in the ecosystem.

</comment></comment></comment></comment><comment><USER7> This looks really nice. One of my favourite things about Golang is the use of gofmt and the resulting consistency of all Go programs. The idea of parsing the code to AST representation and then printing it back as source is brilliant, all though it can mess stuff up like the chaining of `.then` as mentioned in the post.

<comment><USER8> gofmt doesn't solve the hard problem that this blog post (and Wadler's paper) is about. From the article: "There's an extremely important piece missing from existing styling tools: the maximum line length."

gofmt's decision to not bother to require a line length may work somewhat for Go (which tends to encourage short lines by virtue of lacking expressiveness), but it doesn't work for lots of other languages, including JavaScript.

<comment><USER9> The fact that gofmt doesn't enforce some arbitrary line length is a blessing. I have a modern widescreen monitor and I use a maximized window text editor. I have no problem with 200 char length lines. I'm more easily annoyed by 80 (or 60, like in this case) char limits, as if I was viewing this code on punch cards.

<comment><USER8> > The fact that gofmt doesn't enforce some arbitrary line length is a > blessing.

You don't have an infinitely long screen. You have some line length limit.

<comment><USER10> It's infinitely scrollable though. Scrolling horizontally sometimes isn't a bad fallback.

<comment><USER8> Scrolling horizontally interrupts flow like nothing else!

99% of all software projects have a de facto or de jure line length limit for a reason.

</comment></comment></comment></comment></comment></comment><comment><USER11> My team recently ganged up on me to tell me my line spacing was f*cked. Upon reflection, it seems that as I'm writing code I group lines into 'working well - one line, 'not sure - two lines', 'probably will change - lots of space', 'hey look at me! - off by itself'. Apparently, this unconcious invisible system drives others crazy. Developers are so picky! ;-)

We've actually got a bunch of automatic eslint rules, but it doesn't correct for this. Looking at the various beautifiers, I couldn't find anything that really cleaned up line spacing very well, and ended up running a bunch of sed commands to remove lines and then spacing out things manually in a "sane" way (so picky!!). Having a formatter that actually parsed the AST and rewrote the code like gofmt will be very handy if it works - I'll have to try it out.

<comment><USER12> There's a eslint rule for multiple blank lines

<comment><USER13> That one actually crashes in my atom installation. I get a warning that it cannot show me where the multiple empty lines are.

</comment></comment></comment><comment><USER14> After using Elm and the elm-format package in Emacs for the last few weeks I can say that not having to format the source and just letting your editor do it for you on save or via a command is so very nice.

This is a trend that I feel is going to catch on across any language that can support it. It makes trivial decisions and arguments about formatting a thing of the past.

<comment><USER15> It's almost crazy to think this already isn't just a thing. Why is this just coming to a head now, after all these years of carrying on over code formatting?

<comment><USER16> I'm not convinced it is just coming to a head now. I've seen automatic/forced formatting on projects at least as far back as 2000, when I entered the workforce.

<comment><USER17> The ones I've used for java have been consistently bad though. Autoformat as a commit hook leads to ugly code. Granted, I mean "bad" as in "gets ya 75% of the way".

</comment></comment></comment></comment><comment><USER18> [https://github.com/facebook/pfff](https://github.com/facebook/pfff) is a tool which support pretty printing a bunch of different languages (currently c, c++, java, js, php, python, rust, and a bunch more).

The idea is to have a common AST (with parsers for each language) which keeps track of whitespace/comments/etc and then share a ton of logic by writing writing code at the AST layer.

You can use pfff to pretty print according to your style needs. Also supports a bunch of other neat things such as search/replace.

<comment><USER19> I've looked at pfff and couldn't really figure out what's supposed to work and what isn't. Would love to pretty print python with it. (I've been looking at the many different pretty printers in the python world and haven't found anything that I feel works well enough). Did you use it for pretty printing python?

</comment></comment><comment><USER20> This has been the single biggest missing tool in the JS ecosystem. I never even realized until I experienced the magic of gofmt. It should honestly be a standard tool for new languages going forward. Kudos to the creator. I'll try it out later today - hopefully it works well for us.

</comment><comment><USER21> How is it different from jsbeautifier[1] other than enforcing its own style rules? [1] [https://github.com/beautify-web/js- beautify](https://github.com/beautify-web/js-beautify)

<comment><USER22> Looking at both github repos, _jsbeautifier_ looks more complicated (as a project), and I don't think it uses the AST or at least I did not see anything that looked like it would create one. Looking at some of the code I saw `string.replace(...)` so it seems to be string-manipulation. It also is for HTML and CSS too it seems, while the project discussed here is just JS, so more targeted, and the approach to go through the AST seems intriguing to me.

PS: This seems to be the code for the JS beautifier in _jsbeautifier_ : [https://github.com/beautify-web/js- beautify/blob/master/js/l...](https://github.com/beautify-web/js- beautify/blob/master/js/lib/beautify.js)

</comment></comment><comment><USER23> If I personally prefer the second Promise chain:

        myPromise.then(() => {
          // ...
        }).then(() => {
          // ...
        }).catch(() => {
          // ..
        });

and if I also prefer the Lisp-like approach and hate putting:

        );

on its own line, am I part of the problem? What if my whole team uses that style? For example, we would write:

        foo(
          reallyLongArg(),
          omgSoManyParameters(),
          IShouldRefactorThis(),
          isThereSeriouslyAnotherOne()
        );

as:

        foo(reallyLongArg(), omgSoManyParameters(), IShouldRefactorThis(),
                isThereSeriouslyAnotherOne());

(100 characters wide, double indent on the continuation line. This is pretty standard for Java formatting.)

Stated differently, is this meant to be very opinionated in hopes that all JS would follow a uniform style? I think that can work for Go since it was like that from Day 1. For JS, though, it has been out for so long that many teams have developed their own preferred style. I suspect that most of them would avoid an opinionated formatter that differs in a few small ways from their in- house format, if only because it seems silly to break diffs and git blame for a sweeping formatting change.

<comment><USER24> I think that this is definitely not a tool for everybody, and I think that's alright.

Dan Abramov said it best, when he opened an issue urging to resist the urge to add configuration: [https://github.com/jlongster/prettier/issues/40](https://github.com/jlongster/prettier/issues/40)

Configuration has a cost, and the product will be better and more reliable if it's limited. As it stands right now, the configuration isn't ideal for my preferences, but I'm fine with that; either I'll

* use the tool and adopt new patterns (ones which, frankly, have very little impact on anything), * keep doing this stuff manually (it's gotten me this far!) * fork the project, and bear the cost of maintaining the updated configuration myself.

<comment><USER25> I find if I hate a formatting pattern that I'm forced to use, after a while I prefer it and hate all others.

</comment></comment></comment><comment><USER26> I appreciate the emacs bindings [0]!

Between this and eslint+flycheck I will feel less envious of Visual Studio Code's editor environment (if only there were a way to leverage some of its fantastic IntelliSense from emacs...)

[0] [https://github.com/jlongster/prettier/tree/master/editors/em...](https://github.com/jlongster/prettier/tree/master/editors/emacs)

<comment><USER27> If you're using typescript and emacs, [https://github.com/ananthakumaran/tide](https://github.com/ananthakumaran/tide) is a very good integration with the built-in language server for semantic auto-completion and "jump-to" support. I use it every day on large projects.

I think that vscode uses the typescript language server behind-the-scenes for plain javascript analysis.

</comment></comment><comment><USER28> Flow is cool, but TypeScript has way more traction. Would jump on this in an instant if it had TypeScript support and a VS Code plugin.

<comment><USER29> Typescript is another language. It kind of goes without saying that people using a different language be more likely to use something if it were in the language they use, doesn't it?

<comment><USER30> I mean, by any reasonable definitely of a language, Flow is another language too.

</comment></comment></comment><comment><USER31> Eventually we should just store the AST in source control. Prevents inconsistencies when style changes and/or 50k lines diffs to change the indentation level.

<comment><USER32> I certainly think that language definitions should include a standard parsed format in addition to their human-friendly syntax. This can just be an s-expression representation of the normal, concrete syntax, without any transformations applied. This way, we don't have to build language-specific rules for precedence, offside/significant-whitespace, fixity, etc. into every tool for that language.

Implementations (compilers and interpreters) should include tools/modes for converting between these two representations, and should support running programs written in the parsed format in addition to those written in the human-friendly syntax. This isn't asking much: the difficult part is parsing the human-friendly syntax, which implementations must already do.

The benefit is that we don't end up with a mismatch between what the compilers/interpreters accept, and what the other tooling accepts (linters, formatters, doc generators, static analysers, search engines, syntax highlighters, use-finders, go-to-definition, refactoring tools, etc.). This _would_ , incidentally, allow people to read and write code as s-expressions, but that's not the point; it's just about representing concrete syntax as closely as possible (plus arbitrary annotations, e.g. for line numbers, etc.), whilst exposing the structure in a machine-friendly way.

This would also make it much easier to make new tools, extend existing ones, and improve practices, e.g. like syntax-aware diffing, standard code formatting (i.e. tools like this one), version-control-friendly representations, tree-based editors, more powerful navigation in editors and IDEs, etc.

</comment></comment><comment><USER33> I made a VS Code plugin for Prettier

[https://github.com/esbenp/prettier- vscode](https://github.com/esbenp/prettier-vscode)

It is my first VS code extension so have no idea if it is correct way. Feedback is welcome.

<comment><USER34> Cool! Don't worry about it being "correct" or not. :)

</comment></comment><comment><USER35> Much better than "Standard JS" and its choice of no semicolons. I know about "Semi Standard JS", but I refuse to accept such a little difference that could be a configuration has to live in a entirely new project.

<comment><USER36> But the linked formatter doesn't seem to have an option for no semicolons so I wouldn't call it better in that regard.

EDIT: Looks like they may be open to it though. [https://github.com/jlongster/prettier/issues/12](https://github.com/jlongster/prettier/issues/12)

<comment><USER11> Semicolons are not optional in JavaScript: ASI ([http://www.ecma- international.org/ecma-262/6.0/#sec-automati...](http://www.ecma- international.org/ecma-262/6.0/#sec-automatic-semicolon-insertion)) is an error correction scheme for novice programmers. The spec's parsing rules calls out the statements following where a semicolon should be "offending tokens". There is no leeway here for style or preference.

<comment><USER36> The thing is, they made the "error correction scheme" work so well that they are no longer required. Give it a go sometime; you might like it.

</comment></comment></comment></comment><comment><USER37> " _There 's an extremely important piece missing from existing styling tools: the maximum line length. Sure, you can tell eslint to warn you when you have a line that's too long, but that's an after-thought (eslint never knows how to fix it). The maximum line length is a critical piece the formatter needs for laying out and wrapping code._"

I'd disagree. See [https://www.youtube.com/watch?v=wf- BqAjZb8M](https://www.youtube.com/watch?v=wf-BqAjZb8M)

</comment><comment><USER35> How does this handle tabs vs spaces? I looked the post, the repo and the issues page and I didn't find anything. I'm specially concerned about not seeing this in the options of the API, since there are strong opinions on both sides.

<comment><USER38> It always prints spaces and you can configure the number of spaces with `--tab-width`.

For tabs/spaces and semicolons I'm considering if we should support those options. We need to figure out the goal of the project: is it to converge on generally a single format, or is it to provide formatting options for a few large groups of people that have different opinions. There are issues on the project discussing this right now.

<comment><USER32> Whilst it's easy to flame about tabs vs spaces and other bike-sheddy issues online, I wonder how much people _really_ care about it? After all, many people just get on with life when it comes to non-optional syntax, e.g. whilst many people flame about Python's use of significant whitespace, I doubt that's been a major reason for many people to actually use a different language, or some semicolon-and-braces-to-indentation preprocessor.

Perhaps stick to just one, as seems to be the case right now (whichever it is), and mention in the documentation that those wanting the other option are free to e.g. write a patch/fork on GitHub/postprocessor/etc., with the understanding that such support will eventually get merged in iff it's actively maintained for some amount of time, its author/maintainer is active in general development and maintenance for the project, and there's significant community adoption of such a patch.

Whilst not perfect, this sort of approach might better determine who _actually_ cares enough about this to offset the community-splitting effects of allowing both; compared to a general accumulation of online grumbling.

</comment></comment></comment><comment><USER39> Fantastic. One thing I've learned that's incredibly important is code style has to be uniform across all engineers. Seems like an unimportant point to devs that haven't worked with teams that enforce it, but it really is.

As was once told to me, my code should look like your code and yours like mine.

<comment><USER40> > One thing I've learned that's incredibly important is code style has to be > uniform across all engineers.

Honestly, why does this matter at all?

<comment><USER41> So people can easily read each other's code.

</comment></comment></comment><comment><USER42> I have used ESFormatter ([https://github.com/millermedeiros/esformatter](https://github.com/millermedeiros/esformatter)) with decent amount of success. Does anybody know how Prettier compares to ESFormatter?

<comment><USER38> esformatter suffers from the same problems as eslint as described in the post. It doesn't take maximum line width into account, which is a critical piece for laying out code.

</comment></comment><comment><USER43> How does this compare to clang-format, which also formats JavaScript and also (to use one of the features highlighted in the article) obeys line length?

<comment><USER38> Not sure, didn't know it formatted JavaScript! This is written in JS at least so if anything it's more approachable to the community.

<comment><USER43> Yes, that's a good point. If you ever get a chance to compare to clang-format I'd be interested to read your results. My vague understanding is that clang- format has some sophisticated-ish algorithms for intelligently wrapping complex expressions. However, I also think its output is inferior on code like your .then() chain example.

</comment></comment></comment><comment><USER44> Nice attempt, but currently wrong. For example, it pretty-formats this code:

      function makeComponent() {
        return /*test*/ { a: 1
        };
      }

into

      function makeComponent() {
        return /*test*/
        { a: 1 };
      }

From my own experience writing a formatter, comments are very difficult (if one wants to preserve them). I guess the author should reparse the generated code to ensure the AST hasn't changed.

<comment><USER38> We do. The entire Flow test suite passes when pretty-printing and re-parsing and comparing ASTs.

There are a very few subtle bugs like the one you mentioned above. As noted in the readme, this is a beta. It's certainly more than an attempt.

<comment><USER20> Don't let HN negativity get you down. This is an awesome project and I'll contribute bug fixes/test cases if we end up adopting it on our team (very likely based on your blog post).

<comment><USER45> the parent gave an ill example and suggest a solution, how's that a negativity?

<comment><USER46> I believe it was the "Nice attempt, but currently wrong." at the start of the comment. "Nice attempt" could imply that this should be thrown out in favor of another attempt to solve the problem.

<comment><USER47> The entire comment was patronizing. "Nice attempt" minimizes the effort involved and implies the author is a novice. "but currently wrong" categorizes the entire project as a failure because of a single bug. The followup "From my own experience writing a formatter" really drives the whole thing home.

<comment><USER44> Wasn't meant that way.

<comment><USER48> "Nice attempt" used to actually mean the words it said. You know, like "nice job".

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER49> It seems a pretty format can be subjective depending on personal preference and code complexity. I'm surprised that there aren't and formatted that are customizable in that you break down the format of a function into a few sections and give the user options on how they would best prefer the format to look. (At least there's not a formatter like that which I'm aware of)

</comment><comment><USER50> This is awesome - this reminds me of Google's clang-format which they use to format Angular automatically, but sounds like it's less sucky. The idea behind it is that developers tend to be opinionated about code style, so having a tool do it for you eliminates those arguments, which can be a hold up for PRs getting merged into a codebase.

</comment><comment><USER51> This is awesome, but one request: can you please extend it into a _real_ (ie, AST based) diffing tool? Current diffing tools all compare the text (which is basically an input format) rather than the AST, and hence end up focusing on formatting rather than actual changes.

<comment><USER52> You could hack a diffing tool that reformats both the before and after and shows the diff of the generated text.

This would _not_ catch changes like

        --val  x =  [1]
        ++var x = [
        ++  1,
        ++];

as expected, while it would give you a slightly more verbose diff if the change was

        --val x = [short(), short()];
        ++val x = [
        ++  a_really_long_name_that_pushes_the_line_length(),
        ++  a_really_long_name_that_pushes_the_line_length(),
        ++];

</comment></comment><comment><USER15> Oh man, this really needs a vscode plugin, or sublime!

</comment><comment><USER53> Is there a way to format code before committing it to git, without affecting the working tree?

</comment><comment><USER54> > Many of you know that I usually don't use JSX when writing React code. Over > a month ago I wanted to try it out, and I realized one of the things holding > me back was poor JSX support in Emacs.

huh? I've been using emacs with WebMode + tide + FlyCheck and it supports jsx just fine. Moreover, tide[1] provides great support for plain javascript (I've used it extensively on a ES6 codebase with great results).

[1]: [https://github.com/ananthakumaran/tide](https://github.com/ananthakumaran/tide)

</comment><comment><USER55> For emacs, recently released rjsx-mode solves the JSX problems.

See [https://github.com/felipeochoa/rjsx- mode](https://github.com/felipeochoa/rjsx-mode)

</comment><comment><USER56> I enjoy something similar for Elm code called Elm Format. [https://github.com/avh4/elm-format](https://github.com/avh4/elm-format)

</comment><comment><USER57> I was actually just looking for something like this the other day because I'm forced to use actual JS like a json config, so it can use Require to import XML data and sprite sheet location right into a config my application loads. Problem with all the other formatters is they made everything on new lines, which would take up a giant amount of space.

Would be cool to have this as a little website to try out, too.

</comment><comment><USER58> I'm already using and it works really nice, also submitted a pull request too. But one thing I've always looked for in formatters is still missing here, it's the ability to format the JSX in React.

It would be nice if the JSX in React's render could be formatted nicely because a lot of times the code get's so long that formatting and indenting becomes inaccurate.

</comment><comment><USER59> Awesome! Can't wait for a sublime plugin :)

</comment><comment><USER60> Would it be reasonable to have an editor that ran this every time you resize your editor window?

I like to have multiple windows on screen at once, and will often adjust them to make best use of screen real estate. I tend let it soft-wrap the text, but I'd love it if it would do soft-wrapping... prettier.

<comment><USER61> That sounds like an awesome idea (given that display is totally separated from the format-on-save anyways).

I got a quick feel for it with this in a terminal:

        watch -n 0.1 'prettier --print-width $COLUMNS index.js'

... and unfortunately didn't really like it. Maybe in a pinch, but it still ends up feeling really cramped trying to read column in low-width terminals. At the other extreme (having the terminal be the only window on a 21:9 ultrawide), some of the lines get so long that you'd want a max anyways.

<comment><USER60> I'm playing with this in CodeMirror (browser based code editor) which talks to a local node.js server, and I think it looks really good, as long as you have lower and upper limits as you suggest. Biggest concern is stuff like the undo history. I think it just needs a "formatting" button or even background process when you leave it idle for a bit. Might be better to run on the browser but haven't bothered trying yet.

</comment></comment></comment><comment><USER62> In the section of 'respecting patterns', I was really expecting that it'd maintain my style of curly braces if they're already there, which has same indentation level (and on new line) for a function's opening and closing braces.

e.g. :

function something()

{

}

</comment><comment><USER63> I was hoping to see alignment of = and : when declaring variables and objects.

<comment><USER64> I'm personally not a fan on alignment because of its impact on the project's commit history and diffs. Not saying it's not nice to look at, I just prefer not changing many unrelated lines because a new variable name is one character longer than the names that surround it.

</comment></comment><comment> tony-k i guess i'm relatively new to javascript (can count years on one hand), but like many devs, i'm OCD about formatting and i'm a huge fan of eslint. i have found that curating a list of rules can require cycles (not to mention differences in opinion). i recently came across this project which had some allure, and i made note to try when i had a moment: [https://github.com/sindresorhus/xo](https://github.com/sindresorhus/xo), how does "prettier" compare to this?

</comment><comment><USER65> am I the only one who dislikes spaces after braces?

i.e foo({ num: 3 },

<comment><USER38> That's actually one of the few config options. Pass `--bracket-spacing=false` to turn off that spacing (or `bracketSpacing: false` in the API)

<comment><USER66> This tool looks amazing! Would you consider adding a flag for whether to terminate statements with a semicolon, or consider accepting a PR that added such an option? (My team is all-in on `standard`, so I'd love to be able to execute this in a way that would be an easy fixer for our linting rules.)

<comment><USER38> Check out this issue, we are discussing it: [https://github.com/jlongster/prettier/issues/12](https://github.com/jlongster/prettier/issues/12)

Honestly, we may never do it. But we're still figuring out if the ultimate goal is to keep to a single style or not.

</comment></comment></comment></comment><comment><USER67> gofmt — the official formatter of the Go language — made a very wise choice for its formatting strategy. I think it's something other tools can learn from.

gofmt will fix indentation, spacing, and so on, but it will generally preserve structure. For example, this:

      a:=Foo{value:42}

becomes, of course:

      a := Foo{value: 42}

But! This:

      a:=Foo{
      value:42,
      }

becomes:

      a := Foo{
        value: 42,
      }

That's because gofmt can't really pretend to know that it knows better than the developer here. Sometimes code does need to be loose (like in a DSL or a big declaration, or a test (which must be readable), or similar). Sometimes it should be compact.

This means you _never have to fight gofmt_. Never once have I disagreed with its decisions.

gofmt works this way because its ruleset isn't exhaustive; it says that, yes, an indent must happen after a hanging "{", but the ruleset doesn't say that a _line break_ must happen. If there's a line break, let's stick with it.

Prettier seems to have a strict normalization approach: AST goes in, canonical form goes out. For example, I tried this fictional piece of code:

        performAction({
          type: "thing",
          value: 42,
          owner: user,
          bucket: root,
          path: p
        });

It's turned into a much less readable blob because it happens to fit on a single line:

        performAction({type: "thing", value: 42, owner: user, bucket: root, path: p});

Unfortunately, in every instance where I indent the code in this manner, it's for a specific reason. I _wanted_ it on separate lines; the fact that it happens to _fit_ on a single line doesn't matter at all. Prettier overruled my carefully indented code.

I often format code in a specific way for _regularity_ : Every chunk in a block should have the same format, because each chunk is an instance of the same pattern. For example, I might have something like:

      const RULES = [
        {
          type: "boost",
          fn: node => increaseImportance(node),
          weight: 0.5,
          dependencies: ["priority", "rotation"]
        },
        {
          type: "eliminate",
          fn: node => nil
        },
        // ... lots of rules ...
      ]

Prettier's output generates inconsistency:

        const RULES = [
          {
            type: "boost",
            fn: node => increaseImportance(node),
            weight: 0.5,
            dependencies: ["priority", "rotation"]
          },
          {type: "eliminate", fn: node => nil}
        ];

To quote the immortal Trump: No way!

Maybe one could use some advanced heuristics to find an optimal balance between width vs. indentation vs. compactness; for example, in the above array, a clever formatter could see that it's an array of object literals, which means that it should prioritize regularity over compactness. If it's an array of something simple (like numbers, but not numbers with trailing comments), it can go compact. Maybe.

I don't use Prettier at the moment, but I know the strictness would drive me nuts. I predict that Prettier is going to cause a lot of frustration and heated discussion as a result of the one-size-fits-all approach. I don't think a canonical form for everything even makes sense; people need _regularity_ (and no surprises), but not at the cost of readability.

<comment><USER68> > I often format code in a specific way for regularity:

I am trying to write my own formatter at the moment, and this is exactly the property I want, also. I'm working in Haskell, and one example is case statements. There are two ways I'd like to format them:

case foo of A -> ... B -> ...

or

case foo of A -> ...

      B ->
        ...

The first is when every case fits on one line, but the second is when at least one case needs to span multiple lines. I don't want this:

case foo of A -> ...

      B -> ...

I haven't yet come up with a good way to do that heuristically and efficiently, but maybe just looking at how the original code is formatted would be enough! Thanks for providing some food for thought :)

</comment></comment><comment><USER69> It breaks the moment you type in with()</comment>


This is how Google will collapse (2019) - <AUTHOR> https://hackernoon.com/how-google-collapsed-b6ffa82198ee <comment><USER2> [https://news.ycombinator.com/item?id=21648060](https://news.ycombinator.com/item?id=21648060)

</comment><comment><USER3> Don't forget the failing Google cloud.

It is way too "Googly" for its own good. I did a shootout of six visual recognition APIs a few years ago. I got five of them to work in under fifteen minutes. Google Cloud has an authentication system modeled after

[https://www.youtube.com/watch?v=sWEvp217Tzw&feature=emb_logo](https://www.youtube.com/watch?v=sWEvp217Tzw&feature=emb_logo)

and took much longer, trashing my Anaconda installation along the way. (IBM Cloud sticks out because it is still sending me spam.)

<comment><USER4> GCP growth beat expectations in the recent quarterly earnings.

<comment><USER5> I'm not sure one can generalize from a pandemic economy. Macroeconomics beats microeconomics.

I'd /never/ use GCP in any sort of business setting. Too high odds an automated Google algorithm would take out my business.

Googley automation worked well enough for B2C, and when Google hired the best people. When Google has a mid-tier workforce, buggy algorithms, and bugs can take out entire businesses, you run into problems. Combined with the old culture of arrogance, I don't see GCP ever competing with Amazon, or even Azure.

</comment></comment></comment><comment><USER6> Looks like the server collapsed first.

</comment><comment><USER7> For anyone else getting a 500 error:

[https://web.archive.org/web/20200731131748/http://www.sfu.ca...](https://web.archive.org/web/20200731131748/http://www.sfu.ca/olc/blog/engage/how- google-will-collapse)

(Some images seem to be missing)

<comment><USER8> This is one of the images that loaded for me, but not captured by archive.org. It is a line graph of global monthly active users using mobile adblocking browsers. It is supposed to be the second article image (between the two bar graphs).

[https://imgur.com/L0EPxOQ](https://imgur.com/L0EPxOQ)

(Side note, can anyone suggest a better site than imgur? They are pushing mobile users to their app instead of website.)

</comment></comment><comment><USER9> Arguably the most valuable pieces of Google are the YouTube content and GMail addresses.

<comment><USER10> I use Google Drive and apps quite a bit.

<comment><USER9> Unlike existing YouTube content (which has immense cultural value) and existing GMail addresses (which many people use as their main identity) Google Drive as well as the apps are very much replaceable. I.e. I didn't mean the services, I meant the content - YouTube itself (let alone GMail) are easy to replace also. Most of the Google drive content probably is private and easy to migrate, also and either backed-up already or not-needed by the owners.

</comment></comment></comment><comment><USER11> The article timestamp says 2017, not 2019.

<comment><USER12> _Disclaimers: The author owns a small number of Basic Attention Tokens (the utility token that makes Brave's model possible). This article was updated on May 5, 2019. The original version as mentioned in Life After Google was originally in the Hacker Noon publication and can be found here._

</comment></comment><comment><USER13> I figure that someone will inevitably come up with a viable mainstream alternative to Google Search. One that is privacy oriented, and isn't riddled with SEO spam. One that might function very differently than the search engines we've known for the past 25 years. I wonder what form that might take</comment>


Show HN: Color Merge Sort - <AUTHOR> https://github.com/sacert/Color-Merge-Sort <comment><USER2> Pretty neat! One suggestion I'd make is to make the animation a bit slower or allow custom speeds to be set. It's currently a little to fast for my taste.

</comment><comment><USER3> Well done! Showing multiple spectra as merge approaches one unit is very illustrative of how local the arrangement really is.

<comment><USER4> I think showing them as bars with different heights is more illustrative, like: [https://www.toptal.com/developers/sorting- algorithms](https://www.toptal.com/developers/sorting-algorithms). Similar colors are hard to distinguish.

<comment><USER5> You're wrong.

<comment><USER3> Hahah, well I think it's very nice that we have both. The rainbow approach is very nice for me for many reasons, namely that rainbows are the chief illusion of the cosmos (instantaneous coming together of causes and conditions) and rainbows/light spectra are also fractyllic in their representations (each droplet of water holds a complete rainbow, but zooming out rather than seeing many small rainbows you see one large one)

<comment><USER5> I want more information on these topics you mention, please. Thank you.

</comment></comment></comment></comment></comment><comment><USER5> Super nice. But is this really an efficient sorting algorithm?

<comment><USER6> Worst case of O(n log n) is not efficient?</comment></comment>


Darkest Dungeon's Affliction System - <AUTHOR> http://www.gamasutra.com/view/news/244480/Game_Design_Deep_Dive_Darkest_Dungeons_Affliction_System.php

<comment><AUTHOR> The affliction history at the bottom is the coolest part.

>Finally, another small mechanic that came about organically from observing human behaviour is the Affliction History. People tend to react to stress in ways that are individually consistent over time. A person who panics as a deadline approaches tends to fall into that comfortable panic again when the next deadline comes around. To pay this concept off in-game, we track each hero's history, and over time they tend to fall into the same Affliction patterns. This supports our goal of building a small emergent narrative for each hero.</comment>