Happiness is a Boring Stack - <AUTHOR> http://www.expatsoftware.com/Articles/happiness-is-a-boring-stack.html <comment><USER2> Absolutely agree with the article. We do boring stacks at Stack Overflow (we are proudly a ASP.Net MVC/SQL Server shop) and our performance stats are pretty damn good.

Our average page is rendered in less than 20ms on cache misses [0] and we do over a billion page views per month with 9 web servers at 5% capacity. [1]

Sorry but it does get annoying when people suggest we "improve" our stack with $fancy_new_stack.

[0]: [https://twitter.com/Nick_Craver/status/790527231600787456](https://twitter.com/Nick_Craver/status/790527231600787456)

[1]: [http://stackexchange.com/performance](http://stackexchange.com/performance)

<comment><USER3> My product is built with C# .NET too. However I'm not bought into the Microsoft platform at all. Example: Nancy[0] for REST APIs, Postgres for persistence (with Dapper[1] of course), ElasticSearch and so on.

Recently turned off my last Windows Server, I've converted all of the services into docker (mono) containers and making use of Rancher[2] for orchestration.

I am also using Node.js as an API gateway which fits in quite well.

[0] [http://nancyfx.org](http://nancyfx.org)

[1] [https://github.com/StackExchange/dapper-dot- net](https://github.com/StackExchange/dapper-dot-net)

[2] [http://rancher.com](http://rancher.com)

<comment><USER4> I was under the impression IIS was leaps and bounds better than Linux based .net web servers. Thoughts on this having experienced the alternatives?

<comment><USER5> Nancy plays a lot nicer with "not IIS". With .net core it seems like IIS is destined to be a thing of the past anyway.

</comment></comment></comment></comment><comment><USER6> This what I like to call "both/and". I like both the old reliable and the new shiny. So often people want things to be "either/or". Either I'm going to use this solution or that one.

The key is to know the context of each, and I think this article does a very good job of describing when each ought to be used. He uses the boring reliable stuff on his own things, because he is beholden to no one and does not need to justify his decisions. And he also works with the exciting new stuff with clients, because it is simply easier to sell it to clients who are caught in the Silicon Valley echo chamber.

Both/And is like trying to hold a small bird in your hand: too tight and you'll crush the bird and it will die, too loose and it will fly away.

<comment><USER7> Its interesting to note that there is an inversion here.

You'd think that for one's own enjoyment, the new and shiny would be the natural choice, while dependable and stable long-term would be reserved for people who need dependability and reliability long term (a.k.a. Clients).

<comment><USER8> There is no inversion: new and shiny is what clients want, boring and dependable is what owners want. In this example he owns the boring products, and builds the shiny ones.

<comment><USER9> "new and shiny is what clients want, boring and dependable is what owners want"

excellent summary.

</comment></comment></comment></comment><comment><USER10> I often hear this sentiment that new languages and frameworks du jour pop up every week, and that past an age a fellow just wants to learn a single reliable stack and collect a weekly paycheck.

Am I the only one who just hasn't experienced this feeling? There used to be Rails/Django and jQuery. Now there's Node and React. Both revolve around extremely simple ideas. Spend an afternoon reading the React docs, and you'll know everything you need. Take another afternoon after that and learn Redux. If you have another few afternoons, learn Clojure, and see what the Lisp folks have gotten going with reagent/re-frame. There isn't that much to keep up with.

It's the same with complaints about JS having too many transpiled dialects. These dialects make life easier. There are good ideas in them. For example, Livescript is wonderfully concise and elegant, at no cost of readability once you grok Livescript. It makes your code more readable and faster to write. How is this a bad deal?

I sometimes wonder if people are just annoyed that they need to learn new paradigms at all. It's not like ours shift at an especially fast rate.

<comment><USER11> I don't know what age we're talking about, but I'm not as young as I once was, and I still love learning new stuff.

BUT

If I'm going to invest time in something, it's going to have to pay rent. It's got to serve some real purpose, to give me something I didn't have before I learned it. And that rent is going to have to cover the initial investment, and then some.

Most new web frameworks don't pay rent.

When I was younger I always wanted to make games. I'd spend weeks building a fancy game engine that would let me make the game... and then I'd burn out, before ever actually building the game itself. Those game engines never paid rent, other than what I learned from implementing them. If you're just learning someone else's API which then becomes irrelevant a few months later, then you don't even get that payback. You just waste your time.

<comment><USER12> Are you me?

</comment></comment></comment><comment><USER13> Well, I don't know if "boring" is the word I'd use, but I like _transparent_ stacks: if I make a mistake, it tells me where I made a mistake in a way that I can interpret. All of the "boring" stacks have this property.

<comment><USER14> I think this is the biggest selling point for Functional Programming. You know given these inputs, you will always get the same output.

Even if not using a Functional Programming language, it is good practice to write your code to follow this principle whenever possible. I think this is what mocks and unit tests try to achieve, creating a scenario where given certain inputs, you know what the output will be.

<comment><USER15> From what I've seen, functional programming doesn't really excel at error messages

<comment><USER16> Sure it can - here's an example of an error message added to F# which suggests valid names for Record labels when you've typed an incorrect one: [https://github.com/Microsoft/visualfsharp/pull/1102](https://github.com/Microsoft/visualfsharp/pull/1102)

Don't confuse correlation (some functional programming languages out there don't have good error messages) with causation (functional programming languages don't excel at good error messages).

<comment><USER17> Elm is also said to be a good example.

Haven't gotten around to really test it after hello world though but what I read was somewhat convincing.

<comment><USER18> I think Evan is really winning people over with his interest and focus on that, as I alluded to in my other comment.

[http://elm-lang.org/blog/compilers-as-assistants](http://elm- lang.org/blog/compilers-as-assistants)

<comment><USER19> Elm has the best error messages I have seen by far in any language.

</comment></comment></comment></comment></comment></comment></comment><comment><USER20> It's a great point--it just seems arbitrary to draw the line in the sand of having a "boring stack" that consists of SQL Server and C#.

I mean, that, as a minimum, means you're running and maintaining a Windows server, along with antivirus, backups for the OS, and backups for the database. Any time Windows updates come along, your service will be unavailable. Every couple of years, you'll need to buy a new license, upgrade Windows, and make sure everything comes up smoothly. This likely will involve fixing and troubleshooting some issues. You'll need to have some monitoring set up to make sure you don't end up running out of disk space on Saturday morning.

Or maybe you have more than one Windows server (to avoid downtime from a single server), but that makes your stack decidedly less "boring." Now you're dealing with at least a load balancer and making SQL Server redundant.

I mean, I guess it's more boring than chasing the latest front-end reinvention or maintaining MongoDB, but there's some room for improvement here, clearly. Containerized deployments (via Docker or a "serverless" architecture) might be able to help.

<comment><USER21> Don't get me started on chasing down NuGet dependency errors. The only difference is there's usually only one option for any given task. We're constantly held back by packages with conflicting references. I'm not jumping everything to Angular 2 just because it's available, but I can build my 1 apps in a fraction of the time it takes to use my old MVC boilerplate.

<comment><USER22> Seriously, good package management makes a huge difference. Long term maintainability really benefits from a package manager that you don't spend hours diagnosing obscure dependency errors. I do not miss this aspect of developing in C# at all, even if it was great otherwise.

</comment></comment></comment><comment><USER23> omg this guy is on spot. My day job is Magento (hell), but I am absolutely in love with boring ol' C#, along with the new ASP.NET Core framework & Kestrel web server. All of my side projects are built using C#, and I don't use jQuery or Angular or React or Reactive. I use plain old vanilla javascript, because I care about zero HTTP requests & zero bloat & zero BS.

<comment> UK-AL Applications that don't rely on large js frameworks, tend to feel snappier as well.

<comment><USER24> They also tend to turn into huge messy hairballs after years of developers and new business use cases. Not that these are use cases for personal projects, but standardized frameworks are valuable for large teams with lots of changing use cases and long-term maintenance requirements.

<comment><USER25> I don't see any long term stability and support in any JS framework. They seem to pop in and out of existence at a fairly rapid pace. What examples do you have of long-term projects that use those frameworks?

<comment><USER26> [http://backbonejs.org/](http://backbonejs.org/) is my favorite framework. It doesn't do much, I continue to be impressed with it daily. I'm on my second major project with it. It's getting old now in JS years (read, actual years). Doesn't have any steam behind it compared to ember, react, angular. But it continues to work daily

<comment><USER27> I hate backbone. Lots of boilerplate and everyone I see a set("field",value) I die a little inside.

Also, everything of any size I've seen written in backbone turned into an unmaintainable mess.

<comment><USER26> What boilerplate? React is all the rage now and it looks a hell of a lot like a backbone view. It has an initialize function, render, events, some constants, and the handlers for events. I don't know how much more minimal you can get than that.

As for the unmaintainable part, I couldn't disagree more. Maybe you've worked with poor programmers?

<comment><USER27> Really it is the requirement to to redefine your model in backbone that is a deal breaker. Alot of code that just don't have to write in other frameworks, although i understand why it is there.

Most of the unmaintainable comes from it being a lighter weight frame work so devs often fall back to jquery. This is OK if you can figure out exactly where they added that trigger. Way to often that is overly hard. It could be pages away.

And yes, most of my coworkes are poor programmers. Saddly that is the world we live in and I like frameworks that make them a little easier to live with.

<comment><USER28> The issue I've seen with backbone apps, even written by "good programmers", is that no two are alike. So, when you come into a new app, a nontrivial amount of time is spent figuring out how the original programmers are using it, which libraries they pulled in for stuff like model validations, etc.

To be fair, that's somewhat due to the fact that I mostly encounter them in consulting arrangements, and I don't know that any of the other frameworks are much better in this respect. I think I've just gotten spoiled by doing most of my work in Rails, a mature opinionated framework.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER29> I agree in general but why would you use Windows/SQLSrv for internet-based products? I'm fine with it on the desktop, but the extra costs and time devoted to things like activation are a non-starter as far as I'm concerned. I believe they finally have ssh and package mgrs available, but don't you still have to install them manually?

There's plenty of boring stacks on Unix that are free, in both senses of the word.

<comment><USER30> Because it performs well, and the cost of Windows licenses ends up being a rounding error if you have paying users. I've administered Linux boxes for years, and while I enjoy it I find Windows Server more enjoyable to work with in many cases.

SQL Server licensing is another story. It is expensive, but I've also seen it handle heavy workloads on modest hardware without complaining. Though I don't doubt the same is true for Postgres and MySQL/MariaDB/Percona. From what I've seen, the constellation of reporting and BI tools around SQL Server are what make it appealing to enterprises regardless of cost.

<comment><USER31> Windows being a rounding error is kind of a myth perpetuated by people that haven't been in the position to buy Windows licenses for a company.

First of all most software developers are not working in the consumer space. And for B2B you often get asked to have an on-premises option, either because the company doesn't trust you with their data, or because non-stop Internet connectivity can be a problem. And when deploying on-premises, the cost of the Windows licenses do matter a lot.

If the clients are just web browsers then you can save the company a lot of money, since the clients can be just terminals powered by whatever you can get your hands on. But if you assume Windows clients, well, the costs can be huge. And on the server side, remote maintenance is way cheaper with Linux boxes, because well, you can control anything on a remote Linux machine, securely, reliably and for free. Add to that the licensing cost of Windows, which isn't cheap because you can't run a server on Home edition.

Basically if your solution assumes Windows in any way on the customer's side, you're just adding unwanted cost that could have been your profit. And SQL Server is simply unjustifiable.

<comment> UK-AL Considering most boring corporates run windows as their main server OS, I think it be an easier sell to run windows for on premise applications.

<comment><USER31> In my experience dealing with boring corporations, that's another myth. Yes, they run Exchange. But all new developments I've seen happen on Linux boxes, precisely because it's easier to outsource IT.

<comment><USER30> Perhaps it depends on how boring/conservative the corporation is. At a past job where we worked with big banks, they'd sometimes look at you suspiciously if your application _didn 't_ run on Windows Server.

That's just anecdotal, though. Maybe we were just unlucky and worked with odd customers.

<comment> UK-AL No. It's not odd.

The vast majority of corporations have an IT department who's main skill is windows management. And for good reason.

There still lacks a decent Active Directory/Group Policy/ Exchange open source combo.

</comment></comment></comment></comment></comment></comment></comment><comment><USER30> Jeff Atwood made similar points in _The Magpie Developer_ : [https://blog.codinghorror.com/the-magpie- developer/](https://blog.codinghorror.com/the-magpie-developer/) and _Why Ruby?_ : [https://blog.codinghorror.com/why- ruby/](https://blog.codinghorror.com/why-ruby/)

Not that chasing after the latest and greatest is always a bad thing, but sometimes existing (and relatively boring) tools are the best ones for the job at hand.

<comment><USER32> From "why ruby":

>Ruby isn't cool any more. Yeah, you heard me. It's not cool to write Ruby code any more. All the cool people moved on to slinging Scala and Node.js years ago. Our project isn't cool, it's just a bunch of boring old Ruby code. Personally, I'm thrilled that Ruby is now mature enough that the community no longer needs to bother with the pretense of being the coolest kid on the block.

This is my feeling right now. Nobody is yelling about Ruby so I can take my time and enjoy learning it at my own pace.

</comment></comment><comment><USER33> This is how I feel. I have friends that are always going on about all the latest "best practices" and cool hipster stuff like docker swarms and microservices. Meanwhile I've kept my own projects using boring old (or rather tried and tested) technologies and languages like python.

I don't like it when people are recommending new buzz words every week.

<comment><USER34> Unfortunately the new buzz words of today are the boring stacks of tomorrow.

I would say that containers represent a greater leap forward in thinking than a new programming language. Like it or not your future applications will run in a linux container.

<comment><USER35> > Unfortunately the new buzz words of today are the boring stacks of tomorrow.

Bullshit.

SOME of today's buzzwords will be boring stacks of tomorrow. But unless you're a some sort of oracle, chances are you won't be able to pick which are today, for the same reasons you shouldn't try to beat the stock market.

<comment><USER36> I don't think it's that hard to pick promising tech to explore once you have some experience under your belt. For instance, containers are super interesting to me because they directly address a lot of the pain points with dev VMs or native development. It may end up being the case that Docker does not win this battle, but it's also clear there is some meat to this hype and I will profit from learning about it even if the landscape shifts dramatically before it stabilizes.

<comment><USER37> To me you're proving his point. Containers are new hip thing right now, but it's huge amount of work to productionalize them. There are so many solutions and all of them have drawbacks. Seeing how things are going, most likely it won't be docker in the end, so the amount of effort you spent on it won't give you any edge.

From my observation it seems like docker ultimately is ending being used as another package mechanism.

<comment><USER36> I don't see how you take it that way. Experience with containers will be very valuable over the next decade, and anyone with experience will have an advantage over someone with no experience. There's not one binary moment where all of a sudden technology X is mature and stable. Docker has been around over 3 years, and the underlying technology many years before that. Although Docker is having trouble on the orchestration side, the container format is quite ubiquitous already, so I'd say it's highly unlikely that Docker will completely disappear in the medium term. Finally, it's not all or nothing, Docker solves a lot of problems today in certain configuration, you don't even necessary have to productionize anything as it's quite useful in purely dev scenarios. Even in a worst case scenario where Docker becomes completely irrelevant, you've learned something about what works and doesn't work with containers.

There's obviously a choice where you want to pick things up on the adoption curve, so maybe you're more conservative than me, but my underlying point is that it is possible to find a balance and you can still advance your skillset even if you pick something that doesn't necessarily stick around for the long haul.

</comment></comment></comment></comment></comment></comment><comment><USER38> It all depends on how you define "boring":

• If you mean "familiar" then you're right: something you know is better than something you don't. (But it's not the way to learn or expand your horizons.)

• If you mean "stable" then the whole thesis is a bit of a tautology—crucially, there's no fundamental contradiction between "new and shiny" and "stable", and "boring" stuff is often _also_ unstable/insecure/bug- prone (think PHP or C).

• If you mean "popular" or "mainstream" then you're putting _way_ too much stock in the judgement of crowds. Crowds and fashion are fickle and the popularity of a product is a poor indicator of _any_ intrinsic qualities.

I've seen people using all three of these definitions—and linear combinations thereof—when talking about these things. More too, probably.

I think it's important to separate them out exactly what you mean by words like "boring" or "practical" when talking about software tools and abstractions to understand exactly what's going on and to communicate clearly.

<comment><USER39> Maybe "stable" was the wrong word. Perhaps "proven stable" would be better. It's not that "new and shiny" can't be stable, it's just that it hasn't proven itself stable yet. It hasn't been around long enough to prove it. So it's more using technology that has over a decade of proven dependability, over something that may or may not be.

<comment><USER40> Elixir, Clojure and Scala cut across this distinction. They're very new and shiny but built on proven technology. In that sense maybe they're a better bet as they definitely bring something new to the table and help solve hard problems. I think Clojure suffers most from this familiarity bias as I'd argue it's at the top of the excellence tree despite being largely ignored by an industry forever wedded to C# and Java.

<comment><USER41> It's been over 12 years since Scala 1.0. I've been doing Scala full time for 7 years. It's not new and shiny.

</comment></comment></comment></comment><comment><USER42> I've flipped-flopped back and forth several times over the last 15 years on the question of server-side vs. client-side view logic. I literally start each new project with a new technical review and evaluation of this question.

I'd have flipped permanently to client-side if the quality and consistency of the JS stacks were of the same quality as the server-side stacks (I use ASP.NET MVC). I know that it has been a rapidly evolving thing and hence the churn. But here's the thing - with software I've come to prefer intelligent design over Darwinian evolution. On the server-side we have intelligent design; on the client we have evolution. On the server, we have stability and a roadmap. On the client we don't.

With that said, painting pages on the server to send down to the client just doesn't smell right anymore.

<comment><USER43> > With that said, painting pages on the server to send down to the client just > doesn't smell right anymore.

Can you elaborate on that?

<comment><USER42> By that I mean that we should have moved cleanly beyond that by now with no regrets.

Certainly it comes from my time in the '80s and '90s developing "desktop" software (of course we didn't call it that)on Unix and Windows. There were user interface objects that had behaviour. Once we "got" that HTML and JavaScript could do similar, we make the browser into the new windowing system. But unlike the Windows and Unix desktops of old, which had "official" SDKs and libraries, it was the wild west. Fifteen years later it still is.

If fifteen years ago you had said that one starts a new project by running a command-line script that would clutter your project with hundreds or thousands of tiny source files from sources unknown, we would have laughed at the absurdity.

</comment></comment></comment><comment><USER44> I personally enjoy the new & fancy. Infact, I try the new stuff because I enjoy trying it out, and the "gotcha" moment with that happens when you understand the stuff.

That said, If I had to choose a tech stack for work, I'd choose something that I am comfortable with and something that I know a lot about (compared to the rest of the stuff available) - because in the end, it's not about having new and shiny so I can blog about, but to solve the problem that my company is facing/trying to solve.

<comment><USER45> There's an important difference: the new and shiny _may_ be something that increases your productivity. The increase may be so big that it outweighs the risks of it not being mature or well-known enough.

See Paul Graham's essay on Lisp as a secret weapon. There were a number of now-popular "secret weapons", most way less elegant than Lisp (e.g. Rails), used exactly because they made your product's time to market much shorter.

Getting to the market quickly, while an opportunity still exists, is one of the most important problems any company is going to solve. Operational excellence may take a back seat compared to it.

<comment><USER46> My counterargument is when rails came out PHP was just as capable of letting you knock stuff up quickly and meeting the business goals for a startup.

Where rails excels I think is at shops that need to pump out different websites for different clients so that continually starting over cost is minimised.

And Lisp is old tech.

<comment><USER45> Rails, like all opinionated frameworks, gives you a great head start for a new project, as long as you follow the prescribed project structure. (It starts to feel worse as you grow and hit the restrictions of the baked-in assumptions.)

Lisp is not "old tech"; Lisp is timeless tech. Like, well, math. BTW, Unix is also rather old, but still does remarkably well, and gave a distinct edge to its users since ~1990s when Linux and FreeBSD became viable server platforms.

<comment><USER46> I meant old in a nice way :-). As in been around a long time.

And timeless sure, although I have never written any lisp, maybe I should.

</comment></comment></comment></comment></comment><comment><USER47> In other words: 'When you have the option, use the stack you're most comfortable with'.

<comment><USER48> It's not just comfort, it's that stuff that's been around the block a few times tends to fall into one of two categories: Stuff that's solid and stable and not very fussy, and stuff that nobody uses anymore because it's a PITA. That makes it pretty easy to make good technology decisions.

Newer technology tends, almost by definition, to be very experimental. And experimental means, almost by definition, that some ideas are going to work out and others aren't. Oftentimes it takes a while to figure out which is which. And popularity, even extreme popularity, tends not to be a good proxy for robustness - if anything, it's a source of noise that only makes it harder to figure out what's robust because hype tends to be a pretty darned autoregressive process.

<comment><USER49> I find Elixir easier than Ruby and Javascript, one you figure the actor model, dialyzer, and reading other people's macros.

</comment></comment></comment><comment><USER50> I agree. Kind of. You get to choose the kind of problems you work on, and the way you break up your time. If you want to innovate on the infrastructure, if you find that interesting or if worth the gains for the kind of scenarios you work on then go for it. At the same time focusing on solving problems in the programming infrastructure, spinning cycles learning new techniques means you get less time actually solving problems in your actual problem domain. You don't need a $3000 carbon fiber road bike to get to your friends house down the street, no matter how many articles you read about how good that road bike is. I suppose the idea is use the most boring stack that can get the job done.

</comment><comment><USER51> I've been thinking a lot about this recently.

I'm in between jobs and thinking of starting a SAAS on the side in order to support my goal to go backpacking for a few months next year.

However, the amount of microservices I'm thinking of putting it all together with means it'll require a decent amount of non-automatable (as far as I can tell) maintenance and attention. This isn't exactly what I want at the back of my mind all the time while travelling... but then again, you can't have all your cake and eat it.

Anyone who has a successful hands-off SAAS built on a modern stack care to chip in on ways of mitigating this?

<comment><USER52> Elixir is a solid solution for this. You essentially write micro services as a monolith that runs on the BEAM VM and naturally spreads across a cluster ([https://elixirschool.com/lessons/advanced/umbrella- projects/](https://elixirschool.com/lessons/advanced/umbrella-projects/)). It's all message passing without shared memory so whether you're sending something to a different function, process, processor or machine in a different datacenter your code doesn't really care. As a bonus you don't have to define REST/SOAP/Protocol Buffer interfaces for every single microservice you're writing...since it's just function calls.

Everything works smoothly and efficiently just like boring Erlang has for decades, with some readability and productivity perks that Elixir gives you.

Elixir sounds trendy and new, but it's just modernized Erlang. It's older than Linux.

<comment><USER49> I <3 actors & immutability. I didn't understand what "easy to reason about" meant until learning Elixir.

<comment><USER40> Yes, I loved Elixir as soon as I set eyes on it. However, as far as "easy to reason about" goes, Clojure in an Emacs CIDER repl is about as good as it gets.

</comment></comment></comment></comment><comment><USER53> Some interesting thoughts on a similar sentiment: [http://mcfunley.com/choose- boring-technology](http://mcfunley.com/choose-boring-technology)

Nice takeaway: "The nice thing about boringness (so constrained) is that the capabilities of these things are well understood. But more importantly, their failure modes are well understood."

</comment><comment><USER54> "It seems like on a lot of stacks, keeping the server alive, patched and serving webpages is a part-time job in itself. In my world, that's Windows Update's job."

I imagine the Linux alternative of this would be Debian with unattended- upgrades and a PHP app.

<comment><USER55> Sounds about right. I run Tiny Tiny RSS with Postgres and Nginx on Debian Stable and I can't remember the last time I've had to spend time administering it. (I do update TTRSS itself manually, but since it's behind Nginx's basic auth, I don't feel rushed to plug security holes).

The truth is, as shown by data, that downtimes is usually caused by developers, not stuff crashing by itself.

</comment></comment><comment><USER56> _" Good old C#, SQL Server and a proper boring stack and tool set that I know won't just up and fall over on a Saturday morning and leave me debugging NPM dependencies all weekend instead of bouldering in the forest with the kids."_

Microsoft tax.

Yes you can get alternative C# implementations [0] but SQL Server? Having to deal with _" MS Tools"_ in an era of high quality alternatives? Boring for me would be Perl/Postgres, both in their 20's, solid, reliable, with plenty of quality developers and language support.

[0] [https://en.wikipedia.org/wiki/C_Sharp_%28programming_languag...](https://en.wikipedia.org/wiki/C_Sharp_%28programming_language%29#Implementations)

<comment><USER57> At my last job the backend system was mainly written in Perl, finding developers was nearly impossible. Of course, it may have to do with the fact they paid less than other companies and did not allow remote work.

</comment></comment><comment><USER58> This is my feeling about Rails. I've created several Rails apps that delighted the customer, and most have required literally zero maintenance after years of use.

Sprinkle in a bit of jQuery and you have an app that is stronger and just as fancy-feeling as a mess of a massive client-side app.

<comment><USER40> I think the improvements to turbolinks in Rails 5 make pjax more of an option now. Also, for scaling remember it's not the end of the road for Rails when you're running out of processes to keep up with requests. JRuby 9000 has been gathering a lot of momentum recently and promises huge performance gains when Truffle and Graal kick in. Migrating a Rails app to JRuby is not that difficult.

</comment></comment><comment><USER59> I really like C# and .NET as a stack, just like the OP. It may not be cool but it works well and they are good skills to have for stable employment prospects.

The new .NET Core stuff is looking very promising too. I really hope it takes off, and not just because I have a book out on it :).

<comment><USER60> On top of that, it has a powerful, well-documented IDE and support community. It is what it is. I love to experiment with new stacks and paradigms but if I want to Get Shit Done, nine times out of 10 Im going with older tools.

</comment></comment><comment><USER46> If you are doing a side project you can choose between solving a real problem or learning new tech. It is hard to do both simultaneously in the time that most people give to side projects. Hell its hard even if you are full time.

Learning new tech in a side project is a worthy thing to do and I have built some nice little toy Haskell, Elm, JS and Java projects.

However I am more productive in my usual C#, so if I wanted to get something done quick e.g. an MVP website, I'd probably that would be the best choice despite the advantages of other languages. E.g. PHP -> cheap shared hosting, easy to deploy, Haskell -> Excellent type system, find most bugs at compile time, etc.

One exception is I recently want to scrape the HN Api sequentially with multiple requests at a time, and I found this easier on Node.js than C#, because I could be sure I wouldn't get exceptions saying my threadpool has run out of threads etc. :-)

</comment><comment><USER61> I like the point about building systems that take care of themselves and are largely hands-free. I'd say that applies regardless of platform (or "shininess"), though. The author has clearly internalized one of the more important lessons in engineering in terms of designing for maintainability (with an ultimate goal of zero/low-effort maintenance and/or extension).

I'm not sure the platform itself is as important to achieving this goal so much as the decision-making ability of the engineers themselves, though. Maybe a tendency to pick shiny because of shiny is just a way that poor decision- making surfaces? However, I don't see a problem picking an appropriate solution that happens to be shiny.

Anyways, kudos for sharing the wisdom.

</comment><comment><USER62> You can have both happiness and an interesting stack a good example of this is Elixir or I would guess F# in the .Net world.

</comment><comment><USER63> MS SQL Server is so awful crap, you can just try any another DB to see that - I can't trust this author after "good old SQL Server". And I don't see nothing except boring oldman grunting in that article. Programmers should always learn and they know it from the beginning of their way.

<comment><USER64> I never push SQL Server to hard, but it have always been stable and extremely well documented. It's certainly better than MySQL in many respects.

Would you mind sharing a bit about how SQL Server has failed you? I would genuinely like to know, maybe there's some use cases where I need to at least be careful about picking SQL Server.

<comment><USER63> For example, try to work with UTF-8 strings - concatenate them, compare their parts. And it's just one aspect - there is a lot of them.

</comment></comment></comment><comment><USER65> Maybe yes, when you work at bank, change 1 line of code per month, documenting this change in 10 Word documents, most of time drinking coffee and sleeping during Powerpoint presentations with 1000 attendees.

<comment><USER66> You are not being paid to change 1 line of code per month. You are being paid to be a living repository of institutional knowledge: so you (can) know (in a finite, bounded time) what line to change in order to achieve the business requirement, and what dozen-or-so Word documents you need to read in order to confirm which unintended consequences may result of that change.

That said, sleeping during massive presentations will hinder your abilities as a living repository... so, hang in there and keep pouring-in the coffee.

</comment></comment><comment><USER67> F# is an amazing language on the .NET stack that is strongly/statically typed but will infer many of the types. It has TypeProviders which let you strongly type your external code sources (FSharp.Data.SqlClient is just amazing - statically typed SQL directly in your code!). Unions/Discriminated Unions, units, etc.

Much cleaner than C# with all the .NET goodness!

</comment><comment><USER68> I agree. A site I run:

        Server status at 2016-10-25 12:07:41
        System status: Database up for 419.94 days.

It's Python and MariaDB.

<comment><USER43> So you're not doing any important kernel updates?

</comment></comment><comment><USER69> Totally agree, but I remember the (childish) excitement of using the new, shiny, "cool" stuff. And then the satisfaction of snorting at the soon-to-be- released .NET Framework. And not to talk about that Java-rip-off of a language that would come with it!!! Oh those were the days... I am a C#-developer today, but don't tell anyone! ;)

</comment><comment><USER70> It depends on if you like the boring stack, and also what your normal stack is. If you mostly write ruby, Sinatra or Rails should be your first port of call: they're widely used frameworks in your language.

But no, don't go for the zeitgeist for no reason: zeitgiest is tautologically new, and new stuff tends to break a lot.

</comment><comment><USER71> It also resonates with me.

I play with all sorts of programming languages, specially on those long winter nights.

When it comes to production code it is all about the Java and .NET stacks, with some C++ only when there is a need to integrate some sort of native library, or call the respective VM APIs.

Even then I can usually sort it out with JNA, P/Invoke and RCW.

</comment><comment><USER72> Fully agree. We're moving our work codebase from Clojure to Java. It's true that Java is boring and old and simple. That's what makes it great! Now we can focus 100% of our efforts on the business logic rules. (Granted, sometimes I wish we were using C# instead. But only sometimes.)

<comment><USER65> Clojure is real boring stack. No abstract singleton proxy factories, just plain scripting. I have web application in production using plain Ring API, without frameworks. Like good old days of CGI and PHP but more sane.

<comment><USER73> > No abstract singleton proxy factories

I barely see this in the code that I wrote given that I've been writing Java code for ... 8 years? (unless you're writing Spring framework itself)

Can we please drop this?

<comment><USER74> > Can we please drop this?

I would love to agree with that, but I don't think we can. I've been writing Java (well, more recently Scala) for 14+ years, and I still see otherwise great programmers succumb to Java class-itis.

<comment><USER75> I see a lot of bad C# code, but I don't feel the need to make snide comments about C# whenever I see or hear it mentioned. It's pretty clear to me it's not the languages fault.

There's nothing in Java forcing you to make deep class hierarchies or leaky abstractions.

<comment><USER74> Nothing that _forces_ you, sure. But when you have a culture following that language for so long that encourages that, and have existing 3rd-party libraries and an ecosystem that makes it easier to do that... well, that's what happens.

Not sure about the GP of my original comment, but I'm not trying to be snide; I just _see_ it everywhere, and it really frustrates me. I _don 't_ see it with Scala/C++/python/ruby programmers, so what's the common denominator? The language.

</comment></comment></comment></comment></comment></comment><comment><USER76> I totally agree with the philosophy but for me it's Django, python and postgres on ubuntu server.

</comment><comment><USER77> "Boring" meaning "a lack of surprise", sure. "Boring" as an antonym for "what the cool kids like", no. Plenty of unfashionable technologies are that way for reasons.

</comment><comment><USER78> There were times when .NET was the new and shiny (it arguably still is with the recent open-sourcing and stuff going on in F#). I wonder if it was back then when the author started to use it :)

<comment><USER79> Nice. I remember when I was begging my manager to switch from our classic ASP/JScript/MS SQL/Java Applet stack to .NET and he refused saying that it was not mature enough. Good Times.

</comment></comment><comment><USER80> This is a refreshing take, although maybe extended a bit too far. It seems like this kind of thinking is mostly in the real of software on the web and not necessarily on the systems side of things.

</comment><comment><USER81> Agree. Things like Docker and microservices architecture are solutions for problem you have only if you are playing with more "interesting" stacks.

<comment> UK-AL Tbh we use an NServiceBus(.net) microservice stack, and it's been pretty boring and uneventful for us.

</comment></comment><comment><USER46> .NET also suffers from the image problem of the anti micro$oft, anti-IDE, anti-not-open-source sentiment.

<comment><USER5> It's been open source for several years now. It's more open than java, android and many high profile OS projects. They've also decoupled intellisense from the IDE, meaning any text editor like vim can get the same features.

</comment></comment><comment><USER82> Low maintenance is important, but so is functionality. It's frustrating to have to fix code that was working and gets broken by some update, but it's even more frustrating to have to copy/paste code because your language doesn't have the abstraction facilities that let you factor out the commonality.

<comment><USER73> > but it's even more frustrating to have to copy/paste code because your > language doesn't have the abstraction facilities that let you factor out > commonality.

I find this statement to be less of a problem in many modern programming languages (or greatly exaggerated by a specific language fan when comparing his/her preferred tools vs "the other languages).

<comment><USER82> I think in higher-kinded types these days, and can't stand to use a language without them (where I necessarily end up copy-pasting). There are plenty of modern languages without that.

I've only had to copy-paste code because of Scala's lack of support for polykinded code a few times, but it was very frustrating every time. Hardly any languages, even modern ones, support that.

</comment></comment></comment><comment><USER83> What a wonderful article. Bravo.

</comment><comment><USER84> tl;dr Full JS Stack Engineering sucks.

</comment><comment><USER85> C# and SQL I might agree with. But ASP.NET and MVC = stable?

All the hidden view state and POST backs to re-render the UI... _terribly_ difficult to troubleshoot and support in my experience.

<comment> UK-AL That's ASP.Net WebForms which is basically very old and legacy.

<comment><USER71> I wish.

Even this year I was getting some SiteCore requests, which I didn't accept, but version 6 was largely built on top of forms.

I haven't bothered with it since version 6, so I don't know how well it has moved into MVC world.

<comment><USER86> Seconded. Sadly, our tech stack at work still includes some webforms cruft and I have a few friends at other companies that also still have to deal with them. Could be worse I guess...I know someone that still has to put up with classic ASP.

Thankfully I work with backend stuff at my job currently or I'd probably go crazy dealing with a mishmash of mvc and web forms. Webforms are not super easy to get rid of if you weren't careful on how you coupled to them, so I think some code is still being added to ours.

</comment></comment></comment></comment><comment><USER87> > Good old C#, SQL Server and a proper boring stack

And? What is the proper boring stack for targeting a browser? The reason React is so popular is because it answers a fundamental problem of application delivery to the browser client.

If you're living in C# land that's not always boring either, as soon enough you have a GC nightmare.

I agree with everything in this article in principle, but it fails to leave room for innovation, where innovation is necessary.

And an MS stack when 80% of the world deploys to Linux on the serverside. You might be stuck in the wrong decade...

<comment><USER88> I like React, but it's delusional to think you can't target a browser without it. I mean, we lived without front end frameworks for a loong time before that.

<comment><USER87> I'm not saying you can't target a browser without it, I'm saying it answers a development problem of having rich applications built on the clientside.

<comment><USER89> 1) We had those before React.js and all the modern JS frameworks

2) A lot of people don't like having "rich applications built on the clientside", because in their experience that means buggy, broken applications that never work quite right and often break the scrollbar and back button.</comment></comment></comment></comment>


TinyEditor: A functional HTML/CSS/JS editor in less than 400 bytes - <AUTHOR> https://github.com/umpox/TinyEditor <comment><USER2> For those wondering what such a thing could be useful besides showing some rad golfing skills, be informed that this is pretty nice and really fast prototyping tool. I made similar for myself [1] and I can honestly say I use it daily: you can take the dataURI, bookmark it, make a keword (i.e. the `%s` sumbsitiution) for it and from this point you have instant, offline "Codepen" in your URL bar. Let's say you want to check if your browser still supports the marquee tag: just type `s <marquee>...` into url, hit enter and see. Most online sandboxes with live preview would not even load in such timespan.

[1] this is for usage as keyword URL; it "saves" its state into location hash so you can return to it or share or whatever; such "save" currently fails in Chrome when loaded from pure datauri because security. also you can test different mimetypes (like application/xhtml+xml or image/svg+xml) in it, what comes in handy from time to time. Golfed just slightly.

        data:text/html;charset=utf-8,<!DOCTYPE%20html><title>HTML%20sandbox%201.0.8</title><style>*{box-sizing:border-box;width:100vw;height:100vh;margin:0}[id]{border:inset;width:50vw;float:left}</style><body%20onload=A.value=decodeURIComponent((L=location).hash.slice(1)||'');T=W=0;E=RegExp('^'+(D='data:text/html;charset=utf-8,'));F=function(){if(W!=(V=A.value))W=V,M=V.match(/(^data:.+?,)?([^]*)/),I.src=(M[1]||D)+encodeURIComponent(M[2])};F()%3E%3Ctextarea%20autofocus%20id=A%20onkeyup=clearTimeout(T);T=setTimeout(F,400)%20onblur=L.hash=I.src.replace(E,%27%27)%3E%3C/textarea%3E%3Ciframe%20id=I%3E#%s

<comment><USER2> Just to clarify: above code ending with `#%s` (`%s` being placeholder of the content written after the bookmark's keyword) does not work when pasted into URL in this form; if you want to try it, delete `%s` before pasting or substitute it with desired content (e.g.`<marquee>...`). (Too late to edit, sorry.)

<comment><USER3> thats cool, I didn't know about <marquee>

demonstration of what you stated above

[https://i.imgur.com/GXakWpD.gif](https://i.imgur.com/GXakWpD.gif)

text used

data:text/html;charset=utf-8,<!DOCTYPE%20html><title>HTML%20sandbox%201.0.8</title><style> _{box-sizing:border- box;width:100vw;height:100vh;margin:0}[id]{border:inset;width:50vw;float:left} </style><body%20onload=A.value=decodeURIComponent((L=location).hash.slice(1)||'');T=W=0;E=RegExp('^'+(D='data:text/html;charset=utf-8,'));F=function(){if(W!=(V=A.value))W=V,M=V.match(/(^data:.+?,)?([^]_)/),I.src=(M[1]||D)+encodeURIComponent(M[2])};F()><textarea%20autofocus%20id=A%20onkeyup=clearTimeout(T);T=setTimeout(F,400)%20onblur=L.hash=I.src.replace(E,%27%27)></textarea><iframe%20id=I>#<marquee>

</comment></comment></comment><comment><USER2> XEM [0] and others golfed such thing to 142 bytes [1] some time ago.

[0] [https://news.ycombinator.com/submitted?id=xem](https://news.ycombinator.com/submitted?id=xem) [1] [http://xem.github.io/miniCodeEditor/](http://xem.github.io/miniCodeEditor/)

<comment><USER4> I did not know about the iframe's srcdoc attribute which all these creative hacks use in order to get javascript evaluated. Just yesterday I created [http://localhorst.43z.one](http://localhorst.43z.one) to play with saving websites in the browsers localstorage and I used innerHTML and 'reinsertion' of script nodes to make js execute.

</comment></comment><comment><USER5> This really amazes me. Just tried it out and (of course) it's fully functional. Although I have to say that this is probably the way I have to code in hell.

<comment><USER6> The way to code in hell would be vi (not vim) but without any command support >:D Starts in insert mode, and that's it. Kind-of like the old days where computers had no persistence and you just had to type in all of your code at once.

<comment><USER7> I've been working on and off on my own tiny computer. Mostly MicroPython.

I finally got it the stage where I wrote an editor - and I've been using it.

Not a good editor. Append only, has to be typed directly into the machine. Does that classify?

</comment></comment></comment><comment><USER8> Didn't work on Safari, but it did on Chrome.

<comment><USER6> In safari, the address bar doesn't allow JS by default. You can turn it on via the Develop menu, but when you have that menu on, you could also just use the snippet editor that's in there ;-)

<comment><USER9> Pretty cool stuff.

Works great in Firefox. Turning on JS in the Safari Develop menu didn't work for me, but I'm using a late `09 Mac mini running Mac OS 10.11.6 (El Capitan) so that may be why.

</comment></comment></comment><comment><USER10> Now make it an Electron app.

/s

</comment><comment><USER11> Just don't type while (true) {} or you have to throw everything away.

</comment><comment><USER12> Resizing the panes is wonky, I want my money and bytes back! :)

Honestly, really cool demo.

</comment><comment><USER13> github says 407 bytes... how is he doing that?? my HTML / CSS is nowhere near that level

<comment><USER14> 407 with whitespace as mentioned by others. As for how it works:

\- There are textareas for each language

\- Through event bubbling, one can listen to events on all of those with just 1 handler

\- Elements with an `id` attribute have a corresponding property in the `window` (global scope), so you don't need to query for them.

With those facts, the code just listens to every change on any field, and assembles a (technically invalid, but in practice functional) HTML snippet, which is just:

        (contents of the HTML box)
        <style>(contents of the CSS box)</style>
        <script>(contents of JS box)</script>

And pastes it into the iframe's content.

Not particularly efficient, but pretty good for <400b

</comment></comment><comment><USER15> that is SOOOOOOooooo cool!</comment>


Cyberpunk 2077 Gameplay Reveal – 48-minute walkthrough - <AUTHOR> https://www.youtube.com/watch?v=vjF9GgrY9c0 <comment><USER2> I've started using menu transition speeds as a litmus test for the quality of a game, based on the idea that no one enjoys a slow menu. A slow menu can never be _satisfying_ , and at best, is neutral, on a person-by-person basis. It is never good, because it _interferes_ with the actual operation of playing the game, and cannot even be claimed for immersive benefit (menus are inherently immersion disrupting).

At most, it can only be accepted for the first time its ever dealt with (which is why they're employed. For that _first_ usage). Any game that has slow menus despite this more than likely either features a primary designer who does not care that much about playing the game (more likely _proud_ of the graphics and cinematics they can employ) or someone simply incompetent.

This game has slow menus.

It might be CD Projekt, but my hopes are not high.

Even worse, _everything_ is slow, but I'm hoping thats just because its a demo. But that they're more interested in showing off the _world_ and the _graphics_ than your actual interaction with it further implies that they're more interested in showcasing than actually playing.

<comment><USER3> I agree that slow menus are horrible but there are a lot of good or at least very popular games that have slow or even allaround terrible menus.

It's a problem I wish more people would write about in reviews and designers would think of but I wouldn't go as far as saying the speed of a menu is an indicator of the overall quality of a game.

<comment><USER2> Its a hueristic so its expected to fail, but obviously I'd argue most good games do have ignorable if not good menu transitions. But regardless, I think I would've better described it as targetting how much power the aesthetics designer had versus the gameplay designer (this is an inherit conflict: aesthetics wants control and a limited set of interactions, so that they can each be _designed_ to fit the aesthetic best, while gameplay calls for an expansive/free set of interactions, so the player can explore the world and mechanics). Menus seem to be one of the first to go, as soon as aesthetics become important.

As an example, monster hunter world has substantially slower menus than its predecessors. Its also clearly very excited about its new graphics (as it has every right to be, this is the first in the series in over a decade to have a _real_ hardware upgrade; it started from the ps1 to ps2, and from there it was all handhelds and one on the wii), with fancy cutscenes, scripted monster interactions, and big fancy _finisher_ moves. In most fashions, the gameplay survived fine, but there are clear regressions, like the game does the map exploration _for you_ , because of the difficulty of parsing the environment (a result of making it _lush_ , thanks to having an actual graphics card), an annoyingly large and maze-y town using an auto-travel bandaid (because it looks better than the previous smaller towns).

The game is still _good_ but notably along with all the regressions in favor of graphics was the menu transition speed. The graphics designer clearly had a bigger say in this game than in the previous titles.

</comment></comment></comment><comment><USER4> The brief portrayal of "jacking in" to cyberspace isn't as weird and psychedelic as it ought to be, but it's better (better = more like the descriptions in Neuromancer) than in any other game I've seen.

Everything is still made of giant glowing cubes, but at least there's visual effects so it jumps around and looks kind of like an image would if it were inserted directly into your mind's eye. "Like city lights, receding..."

This is a weird pet peeve of mine. I'm really glad to see somebody actually appears to share my taste, and I hope in the final game it's even more interesting.

<comment><USER5> Maybe the "cubes" system will be used in the "hacking" mode? They did not show that in the demo because the character lacked the skills

</comment></comment><comment><USER5> At 12:40 I was blown away by the people on the streets

</comment><comment><USER6> What's the release date for this game? Or at least the ETA for when they'll be able to provide an ETA?

I just hope I can get a glimpse of it first-hand before 2077.

<comment><USER5> On the official reddit community people hope a late 2019 / early 2020 release</comment></comment>


Detecting heart arrhythmias using machine learning and Apple Watch data - dallas-stuart http://insighthealthdata.com/blog/HealthyBeats/index.html <comment><AUTHOR> Yancheng was awesome to work with. We + UCSF actually just launched a continuation of his work via the mRhythm Study:

      https://mRhythmStudy.org

If you have an Apple Watch, you can contribute data, regardless of whether you have a heart condition.

<comment><USER2> I installed the app and I got a spike of 121 bpm between 4am-4;30am for the past couple of nights. That seems a bit strange. Nightmares? Buggy software?

<comment><AUTHOR> Getting some spikes is normal while you're in REM sleep. Here's an example of restful sleep vs sleep after a night of drinking: [http://imgur.com/l9RVeK5](http://imgur.com/l9RVeK5)

In general, we'd like to add more comparisons in the app so that you know how your stats fit in to the larger population. Stay tuned. :)

</comment></comment></comment><comment><USER3> I predict that in 10 years, more people than not will be wearing a smart watch of some type that will continuously be tracking vitals. You'll probably even be offered a free one by your employer or health provider.

Average heartrate gradually going up over the last few weeks? Your doctor's office will ping you to drop by. Sleep patterns have been erratic lately? Send down an electronic questionnaire to see what's up. You see? If you unveil the symptoms sooner, you can treat them sooner. That makes sense. $$$.

<comment><USER4> That's a dystopian scenario, given that poor health is often an excuse for discriminating against the unfortunate people who experience it.

Disclosing everything to a trusted employer or health provider is a step we need to be very careful about. It's panopticon territory.

<comment><USER5> Also I bet we are going to find the health statistics of people found to have minor arrhythmia through cheap continuous screening are going to be completely different than those that come in with a complaint and are given a one-time screening. It may turn out to not be as clinically useful as hoped.

<comment><USER6> Almost certainly true. Also, how accurate are these optical HR sensors?

Chest strap monitors are somewhat more accurate than optical monitors:

[http://www.wareable.com/sport/heart-rate-monitors-chest- stra...](http://www.wareable.com/sport/heart-rate-monitors-chest-straps-v- wrist)

And it's unclear whether the optical measures are accurate enough to inform health decisions. I can say we've looked at this at our company and it's a fairly complicated picture...

</comment></comment></comment></comment><comment><USER7> Aww too bad I have a Microsoft Band2 not an Apple watch.

I'm watching my heart rate like crazy since I was diagnosed with hypothyroidism last Friday and my metamorphosis back to being human again since I started taking synthroid it's interesting to see but especially my heart rate.

My resting heart rate which was around 70 bpm (yeah I'm a slug) but now it's about 85 bpm.

The Microsoft Health website to view Band2 data is OK but not really detailed e.g. my heart rate last night [https://i.imgur.com/E4Y8IzZ.png](https://i.imgur.com/E4Y8IzZ.png)

I only wish I had the Band2 or any fitness tracker sooner to get more of a baseline or better yet before my thyroid decided to go on it's five year death spiral and take me with it.

</comment><comment><USER8> I'm hoping with these gadgets at some point we'll have enough data tracked to do meaningful analytics, if not just on yourself but across a lot of voluntarily uploaded data. Not a big deal with a heartbeat every 10 minutes right now, But 5-10 years from now that would at minimum be very cool.

</comment><comment><USER2> My feeling is that for health and safety reasons everyone will soon be wearing smart watches:

[https://h4labs.wordpress.com/2015/07/28/in-the-future- everyo...](https://h4labs.wordpress.com/2015/07/28/in-the-future-everyone- will-wear-a-smartwatch/)

We could use a few more sensors like blood pressure and skin temperature.

What's really needed is for Android Watches to aggressively compete with Apple. Apple and Samsung, for example, would really push each other.

<comment><USER7> The MS Band2 has skin temperature and galvanic sensors but you don't see the temperature data like heart rate. I think skin temp used for the calories burned data but it would be nice to see it, there are third party apps to view it. It has a UV sensor too but only on-demand when you select it.

No I don't work for Microsoft.

Blood pressure would be tricky then again the watch is around your wrist so maybe not.

A real-time blood sugar reading would be nice to see too.

</comment></comment><comment><USER9> Eventually this will be a great tool, but today, I would not put my well being into a smartwatch, with or without machine learning</comment>


Wet Wipes Box Says Flush, New York's Sewer System Says Don't - <AUTHOR> http://www.nytimes.com/2015/03/15/nyregion/the-wet-wipes-box-says-flush-but-the-new-york-city-sewer-system-says-dont.html <comment><USER2> The new york times article wasn't very clear about how people are using them. So I'll spell it out: adults are using these wet wipes instead of toilet paper. That's why so many are entering sewage systems.

<comment><USER3> Regular toilet paper seems absolutely barbaric after one has become accustomed to wet wipes. Try them and you will understand.

<comment><USER4> Wait until you try a bidet. Any form of wiping will seem like savagery afterwards.

<comment><USER5> I've lived in three different countries in Asia. Have always had a mini-shower or at least a piped jet of water beside the toilet to help clean up. North America has the most bass-ackwards wiping convention I've ever seen.

</comment></comment></comment></comment><comment><USER6> Most of Asia believes in washing, not wiping. There's nothing easier to flush than water and no better way to clean yourself. Being expected to wipe yourself with a thin piece of paper and consider the job done was among the bigger culture shocks when I first moved to the US.

<comment><USER7> Does a bidet use more or less water than wiping?

<comment><USER8> urm, how does one use water with wiping?

to answer your question: you use more water but significantly less paper (you still need some with a bidet to dry yourself)

<comment><USER9> Water is used in creating the paper.

</comment></comment></comment></comment><comment><USER10> I wish our society would start holding companies responsible for the costs like this. They externalize the costs to society and it should not be tolerated and it should even be illegal to knowingly externalize costs without offering to pay for the impact. It is really tantamount to theft of public resources.

</comment><comment><USER11> Bidets and washlets are the more economical option anyways. Wet wipes aren't cheap. Even if you spend $250+ on a somewhat fancier "warm water cleaning toilet seat", you'll break-even in no time.

That's even true if you use regular toilet paper, because you'll need a lot less of that.

<comment><USER12> > Web wipes aren't cheap.

Asterisk-mart sells 48 sheets for $4. If you go macro first with regular TP and thus use one wipe per session, folding it over as needed for coverage, let's say you max out at $6 worth of wipes for a month because you don't know you're sensitive to gluten yet and you also wipe up some cat vomit every few days.

That's still only $72 a year, man.

Now: How many bathrooms does your house have? Let's say you have two bathrooms and want to use both. $500 on toilet seats? Better hope you're not a 300 pounder who rocks back and forth a bit when he's in a hurry, cuz you don't get Apple Care with those seats I'll bet.

If you travel every once in a while, or need to use bathrooms at work, there's that factor too.

<comment><USER13> > If you travel every once in a while, or need to use bathrooms at work, > there's that factor too.

If I catch someone traipsing to the restroom with a box of wet wipes under their arm, they're not going to make it without being made fun of. Sorry, princess, but your anus isn't really all that special.

<comment><USER14> Yes, it is. When you've had recurring perianal abscess and/or a fistulotomy, you'll also want to take every care possible when it comes to Uranus.

</comment></comment></comment></comment><comment><USER15> Here's a couple of articles about the impact on Australian sewerage systems, with similar comments about needing to regulate the "flushable" label.

[http://www.dailytelegraph.com.au/news/nsw/wet-wipes- blocking...](http://www.dailytelegraph.com.au/news/nsw/wet-wipes-blocking- sydney-sewers-as-more-men-flush-them-down-the-toilet/story- fnpn118l-1227146843427)

[http://www.pumpindustry.com.au/luxury-wet-wipes-wreak- havoc-...](http://www.pumpindustry.com.au/luxury-wet-wipes-wreak- havoc-2/6154/)

</comment><comment><USER16> Why don't they make degradable/dissolvable wet wipes then? Maybe some pre- moistened quad-ply toilet paper? I can't think of a reason the current wet wipes need to be virtually tear-proof.

<comment><USER17> Ordinary toilet paper disintegrates quickly when wet, by design. Pre-moistened wipes made of toilet paper would just be a box full of pulp when opened. That's the problem with the wipes, they don't fall apart when they are wet so they clog up the sewer systems.

<comment><USER18> One of the big problems in the sewers is that the wet wipes combine with various sorts of fat.

[http://www.bbc.co.uk/newsbeat/23586290](http://www.bbc.co.uk/newsbeat/23586290)

It looks to me like the oil and wet wipes combination is substantially less likely to break down than either individually.

</comment></comment></comment><comment><USER19> I live near to where the legendary 'Fatberg' was found and, after reading this article, I would not be surprised if a more accurate name for the 'Fatberg' was 'Wet Wipe Berg'. The 'Fatberg' concept is new in the story of sewer blockages yet people have been using less fat in their cooking rather than more. Ready meals and microwave ovens have cut the amount of greasy fry-ups. What has changed is the wet wipe. Crucially the wet wipe is marketed differently nowadays. You can get a pack of 100 bathroom wipes that are larger than the original branded Wet Wipes and have people use 1-2 of them every time they want to use the seat just in cleaning that seat. As far as the consumer is concerned, flushable means it goes over the U-bend. If the packaging didn't state it was flushable then most people wouldn't flush these overgrown 'Wet Wipes'. Simple solution - don't have any products be sold as 'flushable', ever.

</comment><comment><USER20> Similarly I found out that Metro Vancouver's food scraps recycling system can't handle "compostable" plastic bags, though these bags are sold everywhere. Shouldn't the region be putting pressure on grocers to stop selling these products?

</comment><comment><USER21> Here is a article about samething but in Canada. Also touches on the issue in Washington state and new York.

Article also from 2013... So I guess the problems only worsened? [http://www.cbc.ca/m/news/canada/flushable-wipes-clogging- can...](http://www.cbc.ca/m/news/canada/flushable-wipes-clogging-canadian- sewers-waste-water-officials-say-1.2430071)

</comment><comment><USER22> The solution I'd suggest: mandate sticking warnings on all wet wipes sold in New York. Retailers or manufacturers must then add stickers or something to comply.

<comment><USER23> That won't stop many people from buying them.

<comment><USER24> You'll never stop jerks being jerks. But you can clue in the clueless

</comment></comment></comment><comment><USER25> Url changed from [http://qz.com/362361/wet-wipes-are-wreaking-havoc-on-our- sew...](http://qz.com/362361/wet-wipes-are-wreaking-havoc-on-our-sewers/), which points to this.

<comment><AUTHOR> Thanks, any time a nytimes.com or wsj.com article is involved, I'm never sure if people can see the article or face the paywall.

<comment><USER26> if you google the title of the article, then click on the first result, you'll bypass the WSJ paywall. IIRC, it works for the times, too, but not 100% sure.</comment></comment></comment>


Ask HN: The best way to put technical skills to the greater good? - <AUTHOR>

What's the best way to contribute technical skills to the greater good?  How can hackers keep their day jobs but contribute skills/time/energy to good causes too? <comment><USER2> _"Don't ask what the world needs. Ask what makes you come alive, and go do it. Because what the world needs is people who have come alive."_

-Howard Thurmon

<comment><USER3> Sounds too good to be true, and by golly, it is! What makes me come alive is writing fiction. This is not what the world most needs from me.

Not everything that sounds like deep wisdom is wise.

<comment><USER2> Yeah, all those damn authors who wasted their lives writing supposedly great works of fiction like Ulysses and The Grapes of Wrath and A Tale of Two Cities. They should have been digging ditches in Africa or volunteering at their local soup kitchen or whatever.

Give me a break. You think the world is really better served by you giving up on your dreams? It's a good thing not everything felt as you did or the world would be pretty bleak indeed.

<comment><USER4> "They should have been digging ditches in Africa or volunteering at their local soup kitchen or whatever."

No, what they should have done is written their books, then donated a large fraction of the money they earned from writing them. If you're _that_ good of an author (keeping in mind that 99.99% of people aren't), you can help the world a lot more that way than by volunteering at soup kitchens.

"It's a good thing not everything felt as you did or the world would be pretty bleak indeed."

If everyone felt as Eliezer did- that it was better to spend at least _some_ effort doing what the world needed most, rather than what happened to feel good- then maybe we would not have hundreds of millions of people in constant danger of starvation.

<comment><USER2> _If everyone felt as Eliezer did- that it was better to spend at least some effort doing what the world needed most, rather than what happened to feel good- then maybe we would not have hundreds of millions of people in constant danger of starvation._

I sincerely doubt it. What has charity really done for starvation and poverty? There's only one thing that has ultimately had a big, lasting effect on those things: capitalism. I'm sure many will disagree, but I'd like to see the evidence that giving $1m to developing economies has more effect than investing $1m in businesses in those economies that can then grow and hire more workers.

I don't presently see the case for charity, but I'd like to see more data on the subject.

<comment><USER5> Then substitute "invested" for "donated". Or, hell, "invested in figuring out how best to help developing countries" (like <http://www.givewell.net/>). The stereotypical ways to help people do tend to suck (lending the original quote much of its plausibility), but there are other options.

<comment><USER2> But that's my point: they're not the same thing. The primary motivation for an investment is what I get out of it. If it helps other people, that's great, but I'm after a great return. And the reality is that this self-motivated economic system has done more to help the less fortunate that any direct action designed to help them.

</comment></comment></comment></comment></comment></comment></comment><comment><USER6> Build something people want.

Whether or not that's your day job or not is immaterial.

My favorite parable about the societal role of an engineer's technical skills is this story about Steve Jobs:

[http://www.folklore.org/StoryView.py?project=Macintosh&s...](http://www.folklore.org/StoryView.py?project=Macintosh&story=Saving_Lives.txt)

Steve's pitch is an attempt to capture the essential paradox of engineering: You have a lot more leverage than you think, or even than you can believe. When you improve (say) the Linux kernel, you improve a lot of people's lives, and they in turn improve other lives.

Even trivial things improve people's lives. I watched the Ig Nobel Prize committee award a prize to the Japanese electrical engineer/jazz musician who invented karaoke. It was a surprisingly touching moment.

</comment><comment><USER7> * I do a lot of work with IT4C[1] here in the UK.

Its basically a listings board where charities advertise for tech people to help them.

Through various "Meet the Charities" nights I've met lots of charity founders and I help them in detail. Some charities are looking for any sort of help available, not merely tech.

* I help out old aged homes installing easy to use computers for their occupants.

* I write software for disabled people to interact with the computer more easily (my cousins child has quadraplegic cerabral palsy)

\</comment><comment></comment><comment>--

[1] <http://www.it4communities.org.uk/it4c/home/index.jsp>

</comment><comment><USER8> I've always thought that the best way to put your technical skills to the greater good is through your day job, not instead of it.

Some of my days jobs have been to write software to ensure that:

      - people get the right prescription medication on time
      - firetrucks and ambulances get to where they're supposed to be
      - parts that go into cars and planes are properly certified
      - prisoners are kept in jail
      - those same prisoners get proper medical care
      - electronic equipment gets assembled properly and on time
      - medical supplies get dispatched to where they're supposed to
      - insurance claims are processed properly
      - quality data is properly maintained for food items

You don't need to do charity work on the side in order to contribute to the greater good.

OTOH, if you don't think that the work you do during the day contributes to the greater good, then maybe you should consider doing something else with your valuable time.

Do good and get paid. You _can_ do both at the same time.

<comment><AUTHOR> Absolutely. My day job does make the world a better place. But it doesn't resolve a lot of the very serious issues in the world.

<comment><USER9> So what serious issues did you have in mind? Or are you shopping for $MEANINGFUL_LIFE?

Sorry if this feels a bit pointed, but a meaningful life is not something that others can give you, or even recommend to you. I could tell you that third world literacy is the number one cause you should support, but that's what _I_ believe.

Figure out the causes that matter to you, research those, then maybe you'll find some angle of attack.

Incidentally, a guy who did this wrote a book "Leaving Microsoft to Change the World". He was a marketing guy, but he does run his charity with a lot of the style of a tech company. Maybe that book will give you ideas.

<http://www.leavingmicrosoftbook.com/>

</comment></comment></comment><comment><USER10> I'm working to startup a web service called Catchafire that connects professionals who want to volunteer their skills with non-profits and social ventures who need them. Catchafire just finished a pilot program in NYC – I was able volunteer my tech skills then and it was a great experience – and we're currently working on alpha. We're always looking out for development help, so feel free to contact me (info in my profile) if you're interested or have questions or suggestions.

Has anyone else on HN been able to volunteer tech skills directly? What was your experience?

<comment><USER11> After the dot-com bust I spent a few years traveling and ruminating. But I also tried volunteering. I talked to the San Francisco Public Library, the Red Cross and a short list of other organizations. I offered a large block of time (up to 6 mos) and any kind of product or technical help up to engineering management.

I got very nice responses from folks in these orgs who'd clearly dealt with prior attempted tech volunteers. Each explained how they weren't built to accept this kind of help. At the bottom of chart, there was an endless need and clean ability for rotating staff. But in the middle? Not so much. Too many egos, difficult knowledge transfer, etc.

I wish you better luck. There's clearly a support problem to crack.

<comment><USER10> What a generous offer! Thanks for sharing your experience. One of the key things Catchafire is hoping to do is guide non-profits to determine discrete, short-term projects. Clear goals help them get organized and have been proven to facilitate quality volunteer experiences. Obviously, though, it's not an easy thing to accomplish.

</comment></comment></comment><comment><USER12> <http://www.codeforamerica.org>

<comment><USER11> Alas, they want full-time personnel from Jan-Nov 2011. I often have 30 days at a stretch I could dedicate, but that's a bit much. (And the original poster asks about extracurricular specifically.)

That said, thanks for mentioning it. A revolving door to municipal groups with some support structure could get interesting.

</comment></comment><comment><USER13> <http://www.rhok.org/>

</comment><comment><USER14> Wikileaks were recently looking for some technical help.

</comment><comment><USER15> Digital Divide Data <http://www.digitaldividedata.com>

They are a nonprofit in Cambodia and Laos who hire and train the disabled - people who otherwise would not have ANY job - to do data entry and other outsourced IT.

And they're always looking for technical minded people to help out, either remotely or (even better) on site in Southeast Asia.

My wife and I volunteered there for 18 months in 2003-2004, and it was the experience of a lifetime. Please check them out.

And thanks for the opportunity (rare on most forums) to plug a good cause!

</comment><comment><USER4> Learn to think better. (www.lesswrong.com is a good place to start, especially the sequences.) Learn new skills. Learn how the world works by reading books that challenge you and by seeking new experiences. Work outside your standard identity. Also, simply be kinder and better to the people around you in your personal life, especially your children, and be less conformist but more results oriented (most non-conformity tends to involve working from an ideology rather than trying to accomplish good).

</comment><comment><USER16> Check your local papers for volunteer opportunities. If you are located near a big city, some of the local non-profits/government funded groups may be looking for assistance with social marketing, web development, marketing, etc.. These are usually part-time, low pay (or even no pay) jobs, but are great opportunities to build your portfolio, skills, and make invaluable connections/references. You can also occasionally get free press out of the deal depending on the organization.

</comment><comment><USER17> One software problem yo can try to solve: micro finance institutions are in dire need of good systems. Many of them run on excel and have a horrible time keeping track of data. If they need to generate a report, they often have someone doing it by hand and the data comes back jumbled up. This hurts their operations as well as prevents them from getting funding. Many of them are small and can't afford good systems or to hire any developers.

</comment><comment><USER18> [http://lesswrong.com/lw/1hn/call_for_new_siai_visiting_fello...](http://lesswrong.com/lw/1hn/call_for_new_siai_visiting_fellows_on_a_rolling/)

"At bottom, we're looking for anyone who:

        * Is capable (strong ability to get things done);
        * Seriously aspires to rationality; and
        * Is passionate about reducing existential risk.
    "

</comment><comment><USER19> Hackers for Charity! <http://www.hackersforcharity.org/>

I also have a friend who runs a non-profit called Caring Compy: <http://caringcompy.blogspot.com/>

There's a ton of things you can do to better yourself, and the world.

</comment><comment> a-priori I'm currently hiring a small team of developers at Philanthrokidz, a new startup in Waterloo, Ontario. If you've got programming chops and want to use them to make the world a better place, drop me a line. My email's in my profile (behind a CAPCHA).

<http://philanthrokidz.com>

</comment><comment><USER20> Assuming your technical skill is related to software: More and more non profits, charities, and even for profit companies that are serving the greater good, are using a lot of open source. Contributing to, or improving, open source projects is one way to make a difference.

</comment><comment><USER21> First, make sure your own responsibilities are under control so you don't become a drain on society. Next, volunteer your time - maybe as part of an open source project, something you think is valuable.

</comment><comment><USER4> <http://www.givewell.net/giving101/Changing-Someones-Life>

You can save someone's life for under $1,000.

</comment><comment><USER22> I've always wanted to use my web skills to create a site that generates revenue for a charity. Perfect example: <http://www.freerice.com>

</comment><comment><USER23> Who do you want to help? Human beings? Animals? Plants? Progress? Life in General? Exploring?

What is a good cause for you?

</comment><comment><USER24> <http://yudkowsky.net/singularity/intro>

</comment><comment><USER25> <http://www.idealist.org>

<comment><USER26> <http://www.volunteermatch.org/> is another one.

Not to mention that anyone who is a web jack-of-all-trades should find plenty of work with local nonprofits.

<comment><USER27> Volunteer Match is great.. I worked with a non-profit to redesign their web site and it was a great experience.

</comment></comment></comment><comment><USER28> come help the Sunlight Foundation. Please!

<http://sunlightlabs.com>

</comment><comment><USER29> Build a startup that creates revenue for both yourself and your clients. Employ people, get your clients more capital to employ people themselves because of what you can do for them, and help reinvigorate America's economy.

In a capitalist country, the best way to contribute to the greater good is through productivity and excellence.

</comment><comment><USER30> Giving free courses / seminars on how to prevent computer fraud. (Like explaining "password", "phishing", ect pp)</comment>


Mobile is eating the world - <AUTHOR> http://ben-evans.com/benedictevans/2016/12/8/mobile-is-eating-the-world <comment><USER2> Loved the focus on retail and cars as future opportunities for software to remake the world.</comment>


Ask HN: Where are the open source AI/planning libraries? - <AUTHOR>

For the game my partner and I are writing, we're using open source libraries where ever possible.  We've been able to find high quality open source libraries for physics, graphics, etc.  Now I'm looking for a planning AI library for the NPCs, and I'm turning up nothing useful.  We have no problem with writing our own libraries (and releasing them as open source!) when the existing offerings are poor quality or missing, but I don't want to re-implement something if a good one already exists. <comment><USER2> Can you give some more details on the language/libraries that you are using? I am just getting started on a 6DOF game...

I am planning to use C++ to code up the engine. So the easiest option is to use Boost.statechart to implement a Hierarchical Finite State machine based AI. I can always switch to a hand coded state machine later on if the performance of boost is not good. See an old article on Halo 2 AI: [http://www.gamasutra.com/gdc2005/features/20050311/isla_01.s...](http://www.gamasutra.com/gdc2005/features/20050311/isla_01.shtml)

Havok Behaviour seems to be a game middleware covering the same area. So it might be an option if you are targeting PC (See licensing details of the same) even if it is not open source. I am not considering it as most of the features of it seem to be targeting the FPS game type which is a bad fit for a 6DOF game.

Apart from the high level AI functionality that can be implemented using Boost.Statechart, there is also the need for good pathing. For a 6DOF game reduces to a problem of generating non intersecting B-Splines a between source and target. Space is mostly empty ;) This is relatively simpler compared to the pathing algorithm needed for an FPS. Off the top of my head, I would use something like Boost Graph library to do an A* search on a Nav nodes as the simplest solution for an FPS game. You should be able to provide various heuristics using multiple vistors to customize the A* searches. Another option is to use a dedicated pathing library like Path Engine ( <http://www.pathengine.com/> ) or Havok AI ( <http://havok.com> ). Unfortunately both are paid libraries. A Nav Mesh based pathing provided by Path engine or Havok AI will be much better than the Nav Node system, but with adequate coding and good level design, it should not too different from a nav node system. Eg: Left 4 Dead 1 & 2 seem to be using a Nav Mesh based system versus Alien swarm which seem to use a Nav Nodes based system for pathing.

Planning of AI is a hard problem without having the constraint of being real time. I would instead use strategically placed volume triggers (Ghost/Phantom object of your physics library) to customize the AI NPC behaviour (triggering AI HFSM transitions) or to trigger a preset sequence of scripted actions (Cinematics, sort of). Combine that with a decent nav nodes system and some randomness, we get sufficiantly 'intelligent' behaviour. This, however, becomes a data heavy approach to game level design. A full planning engine becomes a code heavy approach. The trick seem to be to strike a balance between the two :D

</comment><comment><USER3> <http://mahout.apache.org/> thoughts?</comment>


Scientist decries 'chaotic' conditions on cruise ship after viral outbreak - <AUTHOR> https://www.sciencemag.org/news/2020/02/scientist-decries-completely-chaotic-conditions-cruise-ship-japan-quarantined-after <comment><USER2> The German Public Broadcaster DW has a short video[1] covering this, including some of Kentaro Iwata's video statement.

The mention that the Japanese government is allowing it's citizens to leave and use public transit seems like a very risky and foolhardy move.

While I'm certainly no expert, and I'd definitely hate to be stuck on that ship - I think Japan could surely have set up some kind of field isolation area in the last few weeks and get passengers off and isolated using proper quarantine protocols. The statement by Kentaro Iwata makes it clear that nobody with a background in infectious diseases was involved in setting up proper quarantine procedures onboard the ship.

[1] [https://www.youtube.com/watch?v=iPpAsRJJ14E](https://www.youtube.com/watch?v=iPpAsRJJ14E)

</comment><comment><USER3> If the tests are as unreliable as has been reported (and a lot of rubbish gets reported) then those released passengers travelling around Japan seem like a bit of a risk.

</comment><comment><USER4> Effective crisis management of this nature requires rehearsal and drilling, even if just an administrative / tabletop exercise. The chaos described is a classic symptom of not doing so.

<comment><USER5> I'm under the impression the Japanese government received some withering criticism for their bureaucratic mismanaged response to the Tōhoku earthquake and tsunami; I expected they would have revisited their emergency response procedures after that, but I guess not?

</comment></comment><comment><USER6> If anyone's interested this is a good breakdown of the cases so far, by region and country: [https://bnonews.com/index.php/2020/02/the-latest- coronavirus...](https://bnonews.com/index.php/2020/02/the-latest-coronavirus- cases/)

</comment><comment><USER7> A Japanese infectious disease specialist who visited the quarantined Diamond Princess decried "chaotic" and "scary" conditions on the cruise liner that gave the coronavirus more opportunity to spread.

</comment><comment><USER8> Can someone fix this headline? '... cruise ship Japan" reads like it is a cruise ship called "Japan" rather then the full headline "... cruise ship Japan quarantined"

</comment><comment><USER9> I don't think any country is really fully prepared to handle outbreaks on this level tbh

<comment><USER10> > outbreaks on this level

An isolated outbreak on a cruise ship? That should be the bare minimum a country should handle. Note that Japan doesn't have any organization like the CDC- they aren't prepared for anything.

<comment><USER11> Japan or rather their govt screwed it up. But it's very hard to deal with thousands of sick people, no doubt they had no facility big enough. They should have seen this as an extreme emergency and either used a military base or taken over (renting) a large hotel. These are emergency situations.

</comment></comment></comment><comment><USER12> That's kind of odd for Science Magazine to use a conspiracy theory YouTube channel as their source...

<comment><USER13> Much of the information floating around regarding 2019-ncov has hallmarks of "conspiracy theory" because it is all happening in real time and legitimate media is unwilling to publish anything without confirmation from "official" sources...who in turn are not willing to confirm anything because anecdotal reports and pending peer review journal articles do not meet (understandable) verifiability standards. This unfortunately relegates any news to unnofficial "conspiracy" channels and gives people a dangerous justification for dismissing potentially legitimate reports.

If you've been paying attention for the last month or two, there are hundreds of anecdotal reports and videos all pointing toward the same grave conclusions - not to mention dozens of published (awaiting review) papers at this point and, increasingly, many if not most of the rumors from 1-2 months ago are gradually being confirmed. Look no further than China's unprecedented response to this outbreak - 700 million people are under lockdown and their GDP is effectively shut down.

Frankly, the modern media establishment's standards for proof are too high to adequately cover such a rapidly unfolding catastrophy when the majority of information has to come from unofficial leaks because ground zero is an authoritarian regime which controls what it's citizens can say amongst themselves and to the rest of the world. This epidemic is far worse than westerners currently seem to understand, and if it is not contained, the chaos that will grip the rest of the world will be truly awesome to behold. This is a virus which is at least as deadly as the infamous 1918 flu, likely more virulent (R0 estimates anywhere from 3 to 6+), and there is _still_ no cure, though a paper was published on the 4th with chloroquine as a potential candidate. Plus, based on autoimmune reactions induced by all previously developed viable vaccine candidates for SARS and MERS, there is unlikely to be a vaccine for this coronavirus as well.

As I've been saying for a month now, we should not be panicking, but there's no excuse at this point not to be prepared. WSJ announced 5400 people in California are under quarantine today. 700 people in WA under supervision from authorities. Personally I'm moving to minimize my reliance on the government in the case that this pandemic spreads to the U.S. at large, based on the rank incompetence that we see in government activities on a frequent basis.

Honestly watching so many average people dismiss 2019-ncov has been a fascinating exposé on the potential for centralized information control in free speech societies - if you're a 3 letter agency and you want something to disappear from public consciousness, just preemptively leak the story to "questionable" sources and suddenly the media won't report on it and people will balk at you for posting junk sources. What a world we live in!

<comment><USER6> I've followed it closely but the death toll outside of China is really low. Some reports are that this disease binds to specific receptors in the lungs that are especially prominent in Asian males:

"The result indicates that the ACE2 virus receptor expression is concentrated in a small population of type II alveolar cells (AT2). Surprisingly, we found that this population of ACE2-expressing AT2 also highly expressed many other genes that positively regulating viral reproduction and transmission. A comparison between eight individual samples demonstrated that the Asian male one has an extremely large number of ACE2-expressing cells in the lung."

Which is disturbing all the same, but it means the fatality rate will be lower among non-Asians, unless the disease mutates further, which is very possible.

[https://www.biorxiv.org/content/10.1101/2020.01.26.919985v1](https://www.biorxiv.org/content/10.1101/2020.01.26.919985v1)

<comment><USER14> It's worth reading the paper, which calls out its own limitations:

* It is unknown if ACE2 is the only important receptor * Study doesn't actually count the amount of ACE2 receptors, just the amount of RNA expression (ok, you can probably hand wave this limitation away) * Study also shows a difference of expression ratio of 1.6% vs 0.4% in males vs females (n=2 vs n=6) * There was a SINGLE asian male in the data set

Given these limitations of the original paper, at the very least, I would say that you should shy away from definitive statements until stronger evidence appears.

The top comment on biorxiv ran with some of the ideas from the paper, and looked at a more general and larger data set and found no statistically significant difference between Asian and Caucasian lung tissue samples in terms of ACE2 expression when measured in bulk (see [https://uploads.disquscdn.com/images/5cb4b2c5e1ae3cf8454e870...](https://uploads.disquscdn.com/images/5cb4b2c5e1ae3cf8454e870f139b03b987614b28052f899aec0ee160c32ff548.png))

That said, it's certainly a cool paper.

<comment><USER6> From that link above, "there are eight and 436 putative Asians and Caucasians, respectively (imputed from the first two principal components" so its comparing a sample size of 8 Asians with a sample size of 436 Caucasians. I'd say the jury is still out on whether there is a racial difference in ACE2 expression, but good call out either way.</comment></comment></comment></comment></comment>