Rotifers may reveal the secret of elongating life  - <AUTHOR> http://www.economist.com/node/17144833?story_id=17144833&fsrc=rss

<comment><USER2> Lamarckian evolution doesn't exist... except as specifically evolved via Darwinian evolution. Its fairly well known that starvation can make even a human's grandchildren smaller on average, so it shouldn't be surprising that other starvation related metabolic effects can be passed on too.

<comment><AUTHOR> I'm curious what the mechanism is, though. From the perspective of a complete layperson - does this mean that the genome is modified based on acquired characteristics? Or are there other mechanism to carry the signal?

<comment><USER3> The Wikipedia article on epigenetics goes over some mechanisms.

<http://en.wikipedia.org/wiki/Epigenetics>

</comment></comment></comment><comment><USER4> But do you call that living?

(Really, as a human being, would you want to pursue that lifestyle?)

<comment><USER5> Sure - you don't have to do bare-minimum survival dieting. Caloric restriction to levels between 10-25% less than the average seems to deliver fairly substantial benefits. I eat very lightly by accident rather than by design; I enjoy my food and eat out frequently, I just don't eat as often as others and stop as soon as I begin to feel full. I tend to avoid fatty meat (don't like the texture) and skip dessert (don't like too much sugar), but that's probably offset by frequently consuming a beer at mealtimes. I don't feel like I'm missing out on anything.

Or do you mean the reproducing without sex bit?

<comment><USER6> The groups shown to have the highest percentage of 100+ in age (with active lifestyles, not crippled) include a more "restricted" diet. Mostly in the sense of eating small portions until nearly full and no gorging. Only one factor, but interesting. (Other factors: large amounts of low-intensity activities walking, gardening, not exercising 1 hour a day), mostly plant- based diet(not necessarily vegetarian), and very strong community and a feeling of fulfillment or goal in life "why do you wake up in the morning").

[http://www.ted.com/talks/dan_buettner_how_to_live_to_be_100....](http://www.ted.com/talks/dan_buettner_how_to_live_to_be_100.html)

</comment></comment></comment><comment><USER7> I've heard claims that caloric restriction only works in the lab because the average lab animal is fed plenty and sits doing nothing. Under those circumstances, yes, most animals live longer when fed less ... die(still chasing the link down...).

Anyway, articles I've read describe caloric restrictionists as going from average build to barely underweight. I am currently barely underweight with my unrestricted diet. It seems pretty clear that any further reductions would be unhealthy in my case. But I think that pretty well shows that the _generalizations_ about caloric restriction are over-broad.

Looking at it with that lense, the original article is one experiment concerning _markers for markers for something that's arguable_ , the very common product of biological science: an experiment that settles nothing except if its taken with a thousand others (and maybe then not).

I wonder why the thing is in the economist with some crazily optimistic headline...</comment>


The emperor's new clothes were built with Node.js - <AUTHOR> http://notes.ericjiang.com/posts/751 <comment><USER2> Just because lots of people say "non-blocking, good concurrency, event-based model" without understanding it doesn't mean it's not correct. With a single- threaded, event-based model, you can get an awful lot of concurrency at reasonably consistent latency without ever thinking about threading issues or managing thread pool size to balance memory and concurrency -- and often with less memory, too.

Yes, there are downsides: it's not a natural model for many people; you do still have to consider _many_ complex concurrency-related issues; and control flow libraries are usually needed to make complex code much more readable. But these are either easy to deal with or intrinsic to the complex problem at hand, and the above still stands: once you understand how to program with this model, the "default" implementation usually scales very well.

Yes, Node was not the first to do this, but that's not relevant to anything.

Besides all that: I'd put Node's postmortem debugging and dynamic tracing capabilities up against any other dynamic environment.

As a side note: it's enormously condescending to tell people that a very broad technical choice is not only wrong for _their_ technical problem -- without even knowing what it is! -- but that they're also part of some mass delusion for even thinking that there's anything to it. I hate arguing about this stuff. You keep trashing Node, and we'll keep using it to build large distributed systems.

<comment><AUTHOR> Hi, I attempted to address your argument in the section roughly titled "Node.js has super concurrency!". You may have to scroll down "below the fold", so to speak.

I presented two different ways of writing a single-threaded, event-based function that can handle "an awful lot of concurrency without ever thinking about threading issues or managing thread pool size to balance memory and concurrency". Essentially, it is possible to get good concurrency in a single thread without the use of many nested callbacks or abandoning the language's natural control flow primitives. It's not necessarily the case that you can't have both event-based concurrency and sane code.

<comment><USER2> Thanks. Far from not having scrolled far enough, I was actually responding directly to several points in that section, starting with the suggestion that people who say "non-blocking", "super concurrency", and "evented" may not understand what they're saying. I was also responding to your point that Node wasn't the first runtime to do so.

Yes, other environments have compelling concurrency models. As for control flow: it doesn't matter much to me whether the control flow abstraction is built into the language or merely a ubiquitous construct in the code I use. (In fact, that's a tradeoff, too: I _like_ that I can go inspect, modify, and extend these non-primitives easily, and I've done so to add better observability.) The Go example is interesting, but less explicit -- that, too, is a tradeoff. It's all tradeoffs; to pretend like one thing is strictly worse (or better) than all others is not founded.

</comment></comment></comment><comment><USER3> If you read the interviews with Ryan Dahl, one big reason he chose javascript for his scripting language after considering a number of other options was that javascript did not already have a huge body of blocking libraries.

If you're trying to script a nonblocking system where everything is nonblocking all the way up and down the stack, you're going to end up creating a parallel ecosystem to the normal one, and confuse people by not allowing them to do the normal things they would do in language X.

Javascript didn't already have a huge blocking ecosystem.

And speaking of ecosystem, that's another really good reason to like node. The stream programming that is coming out of the community is brilliant, and the focus on constructing large projects by writing thin modules that use other thin modules ('onion oriented programming') is fantastic.

I've been doing a lot of Scala recently, and it's extremely noticeable that despite the languages power to do things in many different ways, the Scala community frequently seem to choose a strangely convoluted path filled with hidden magic going on behind the scenes where every new library you depend on feels like learning a new language from scratch.

It might well be that the Go community is also as good as the node community for some of this stuff, but the community and library ecosystem is a definite plus point.

Personally I've never had a problem with Javascript coding. It's perhaps easier to write stupid code in it than a lot of other languages, but I know it well enough to know where to be disciplined, and it almost never surprises me now.

</comment><comment><USER4> This is the article I'm going to refer people to to explain the problems that I have with nodejs. All of these (absolutely true) observations aside, I really like how the the nodejs trend has brought concurrent async-style thinking into the mainstream of web programming.

By "all of these observations aside," I mean that I _hate_ working with it personally, and I'll be using Erlang/Webmachine thank you, but I learn new ways to think about modern problems every day from many of the great people that are part of the nodejs juggernaut.

</comment><comment><USER5> Sarcasm is pretty heavy in this article, but I think it's a little overly negative...

He makes a lot of comparisons with Go, but Go was created after Node. Many of the languages he notes as possible replacements for the non-blocking rant are obtuse (I love Haskell, but there's no way it's not obtuse)

[EDIT] - turns out they were made pretty much at the same time 2009... Learned something today, I guess. Felt like Go came after node to me but I guess it didn't

Also, I must be the only one that doesn't really mind callbacks. Maybe it's stockholm syndrome.

I also think node should get kudos for at least seeming different enough to prompt the move from enterprise customers. Any move away from burdened "enterprisey" software is worth praising I think. Not because java is bad/lame by default, but instead because it might prompt other companies to lust after something new that might be better (whether it's python, node, go, or haskell is irrelevant)

<comment><AUTHOR> I picked Go not because it's my dream tool (not having 'map' is kind of sad) but because it's proof that you can have your cake and eat it too. Otherwise, people think that you have to choose between programming sanely and high- performance, but not both.

<comment><USER5> Yes, I agree -- but Go's got it's own warts. I think they picked up that (err,result) common function signature from node (or they just thought of it themselves, either way).

However, I think once you start trying to manage go routines and all their channels, and all the messages that are flying around, go will start looking less utopian. Of course, a lot of that is subject to code architecture (well architected code will be easy to follow), but I feel like no one's found enough of the dark corners of go yet.

Oh one thing I wanted to mention - Why didn't you include any samples of go routines in your code?

Unless I am misunderstanding go immensely, a statement like "(task3(task2(task1()))" wouldn't actually be asynchronous, you would need to spawn dependent go routines right, and wait on completion on the channels?

<comment><USER6> > a statement like "(task3(task2(task1()))" wouldn't actually be asynchronous

Correct, because you're passing the result of task1() into task2(), and the result of that to task3(), afaik.

</comment></comment></comment></comment><comment><USER7> I agree with a lot of the arguments in the article, but I do feel a very negative opinion about Node.js. I don't believe Node.js is that bad.

The 2 points I always hear from Node.js are:

1) Node.js is fast. It is really not that fast. It all depends on what you are comparing it to.

2) It is easy to learn. It is not easy to learn. The difference between browser javascript and V8 javascript are considerable. Not everybody will pick it up as easy as you imagine, specially if you are choosing Node.js to allow frontend devs work on backend code. It is a very different mindset.

I like the idea that is Node.js, but I don't think it is mature enough to take over the backend. I think there are other more mature languages right now that do the job without making programs look like spaghetti code.

I think people should take this article with a grain of salt, and keep getting their hands dirty in Node.js. I think it has a future in the cloud.

</comment><comment><USER8> Why is it that most of the articles which pop up complaining about node's concurrency options don't even mention streams? For most data-manipulation tasks, FRP-style composition of higher order operations on streams turns out to be the best choice; not callbacks, promises, etc. Not even bringing them up in a discussion of concurrency in node makes it hard to take the article seriously.

<comment><USER9> Not sure I've ran across what you're describing. Are you talking about using streams as an option to get around callback hell? Have a link describing this?

<comment><USER8> [http://caolanmcmahon.com/posts/how_i_want_to_write_node_stre...](http://caolanmcmahon.com/posts/how_i_want_to_write_node_stream_all_the_things_new/)

[http://highlandjs.org/](http://highlandjs.org/)

[https://github.com/dominictarr/event- stream](https://github.com/dominictarr/event-stream)

[http://reactive-extensions.github.io/RxJS/](http://reactive- extensions.github.io/RxJS/)

</comment></comment></comment><comment><USER10> Computer Programming: A million wrong ways to do something and a million right ways to do something.

<comment><USER11> And where the only correct answer is "It Depends"

</comment></comment><comment><USER12> Isn't it just the case that nodejs is the least worst way of writing a concurrent web server? we know it's not perfect, but what is?

<comment><USER13> I'd like to think that if we weren't all watching Node we'd have more people to pitch into other things. I hear a lot of bluster about "learn new things" but I often just see people sticking with what they know. When the bright minds of web development are figuring out new ways to make JavaScript less awful, those minds aren't focusing on other solutions.

FWIW I think Elixir holds a lot of promise for the future. Projects like [https://github.com/dynamo/dynamo](https://github.com/dynamo/dynamo) look really cool. Of course, it's new, and alpha. But maybe we could all give it a try?

<comment><USER14> Erlang pretty much blows Node.js out of the water, in terms of sophistication of concurrency primitives (to mention one thing). Erlang is really just syntax on top of BEAM, which is pretty tailored to the language (you'll notice Elixir and Erlang share identical types etc).

Elixir adds some nice metaprogramming features, and I love that it exists. Erlang is used for a lot of Important Things in production, and its value to many developers is stability and fault tolerance. Erlang moves slow. It's nice to see a sister language that can more rapidly develop new language features (maybe some of the goods ones will get added to Erlang (:

Joe Arms post about Elixir is pretty interesting [1]

[1] [http://joearms.github.io/2013/05/31/a-week-with- elixir.html](http://joearms.github.io/2013/05/31/a-week-with-elixir.html)

</comment></comment></comment><comment><USER15> I love your ending :) "Does your local Node.js Meetup group need a presenter? I am available for paid speaking engagements. Email me for more info."

</comment><comment><USER16> I prefer [http://silkjs.net](http://silkjs.net)

It handles each request in a forked subprocess so it's a lot more straight forward.

<comment><USER5> without sounding like a web 3.0 idiot -- how do you manage to scale that? subprocesses are not cheap

<comment><USER16> I'm sure someone else reading can answer your question based on more experience and expertise than me... anyhow the subprocesses are re-used so there's no overhead in their creation. And if your server is doing I/O bound work (or is just waiting a lot) then it should perform ok. If everything is CPU bound, then you'd want to not create more subprocesses than cores. SilkJS lets you define the number of subprocesses you want.

More info:

[http://silkjs.net/sync-vs-async/](http://silkjs.net/sync-vs-async/)

<comment><USER5> Thanks for the additional info -- though I would argue that it starts to sound like apache+fcgi (not that it's bad), or unicorn+wsgi... I think node pushes async to an extreme that makes it truly different from what's out there. Unfortunately, it results in leaky abstractions, and lots of misguided enthusiasm as the post goes into...

You could think of pure functional programming (haskell/ml) as a similar extreme -- Haskell gets a lot of concurrency/parallelism guarantees for free just because of how the language was built (pure functions,etc)... Is it wrong to think that node took a similarly crazy step, but in their case, they weren't able to rebuild the language, and that's what you get?

If I wanted to event-loop, or lightweight thread stuff in python, I'd need some libraries, and many of the ones that you might find are not very easy to learn.

</comment></comment></comment></comment><comment><USER17> I use ToffeeScript. Its a nice alternative to nested callbacks that looks like normal synchronous code.

</comment><comment><USER18> Node is popular because it is fairly simple to learn and use. That really is the mains reason why I have seen most people pick it up.

<comment><AUTHOR> I assume you read what I wrote and I wasn't clear enough. Node is actually quite DIFFICULT to learn and use. It's very very easy to write code that's broken in some way if you don't have a deep understanding of Node.js.

Fun unrelated anecdote: someone was showing off their concurrent Node.js web scraper and as requests piled up, it was apparent that it could handle no more than 5 concurrent requests. Why? The HTTP library's internal concurrency limit defaulted to 5.

<comment><USER2> How many concurrent requests can the six-line HTTP server on Node's front page serve? (I don't know the answer. I've taken a quick stab a few times on a few platforms, but I keep running into local TCP port exhaustion, leading to multi-second latency bubbles, long before I run into any Node.js or physical limit.)

<comment><USER19> Not sure if you changed the context from HTTP clients to HTTP servers intentionally, but it's true that the default of five connections is an outgoing connections restriction, not related to the HTTP server.

This client restriction is deeply irritating. A project I was involved with is about creating a general purpose hypermedia API, and building up documents involved following the links in parent documents back through the API, which meant that a single request can end up requiring hundreds of further calls to satisfy, which seemed like no problem at first with node.js' easy concurrency (and an auto-scaling fleet of EC2 servers), but the client connection limit turned out to be the cause of a lot of timeouts and prompted a lot of working around.

<comment><USER2> The client "limit" is just a tunable with a bad default value. You can tune this up and completely eliminate that limit. (The failure mode is pretty bad, but this comes from a lack of observability in abstraction design that pervades most code.) The server example, on the other hand, demonstrates the point that the default way to write a "hello world" web server actually scales very well.

</comment></comment></comment></comment></comment><comment><USER20> We learnt that Node wasn't cancer, but it also wasn't a good technology either. Still, it was useful in keeping the clueless muppets away, lest they fuck up other tech ecosystems.

</comment><comment><USER21> These articles always seem to boil down to only one thing- "I'm bad at callbacks".

I mean, really, is there any other criticism here? There is a valid point about the true nature of Walmart and Paypal's rewrites, but that's pretty tangential.

There's kind of a thing about some completely rookie mistakes in error handling, but that's really not relevant to anything, and again, tie into the "I'm bad at callbacks" thing.

I'd really be interested in some criticisms of node that aren't variations on stories of the author's past difficulties with callbacks, as most people who use node have no problems with them.

EDIT: Downvotes? Please, point out to me the part of the article that is not about callback troubles.</comment>


22-year British student invents a mobile fridge that could save many lives - <AUTHOR> http://www.bbc.co.uk/newsbeat/article/37306334/this-invention-by-a-british-student-could-save-millions-of-lives-across-the-world <comment><USER2> _It works by heating ammonia and water to create ammonia vapours, which are then released into its main chamber when cooling is needed._

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

This does not seem particularly novel, just a miniaturisation of a very old type of refrigerator.

<comment><USER3> From the wikipedia link > At the 2007 TED Conference, Adam Grosser presented his research of a new, very small, "intermittent absorption" vaccine refrigeration unit for use in third world countries. The refrigerator is a small unit placed over a campfire, that can later be used to cool 15 liters of water to just above freezing for 24 hours in a 30 °C environment.

[http://www.ted.com/talks/adam_grosser_and_his_sustainable_fr...](http://www.ted.com/talks/adam_grosser_and_his_sustainable_fridge)

The person that from the Ted Talk linked to has a very similar device to the one shown in the BBC Article and with the exact same goal to help transport vaccines and similar through developing countries.

Congrats to the kid but something seems a bit suspicious...

<comment><USER4> I haven't watched the TED talk you link, so no idea if the water was needed for that design, but I guess the difference could be in having a valve that spends the cooling only as needed.

Having it be self contained is a big improvement over needing 15 kg water to buffer the cold.

<comment><USER2> _but I guess the difference could be in having a valve that spends the cooling only as needed._

That's not novel either --- amusingly enough, I saw your comment only after posting this link to someone else who actually made one of these units:

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

From that article:

 _Larry improved on the original design by adding a shut off valve in the connecting tube so after the Icyball was fully charged it could be shut off and the cooling cycle delayed till later, when you needed it._

<comment><USER4> Sure, a valve itself isn't any big deal. A good self regulating system makes it a practical portable cooler though.

Time will tell.

</comment></comment></comment></comment></comment><comment><USER4> The project page on the Dyson Awards site manages to admit that it's based on old technology that Einstein thought up:

[http://www.jamesdysonaward.org/projects/isobar/](http://www.jamesdysonaward.org/projects/isobar/)

I guess the proposed novelty is that it can be carried in a backpack and would be designed specifically for cooling vaccines. My reading of it suggests that there isn't much in the way of a practical model just yet (they show pictures of a prototype, but I wonder how long it has sustained cooling).

</comment><comment><USER5> Nothing new about this. Only thing "new" is the attempt to virtue signal with old technology. No, wait, that's not new either.

<comment><USER6> "Virtue signal", huh. I didn't know this phenomenon has a name. Nice.

<comment><USER7> Be careful -- it's almost exclusively used by people attempting to do so themselves.

<comment><USER8> Well all do so all the time, some more consciously than others. We are pack animals after all.

Still a good term, and an activity i fear is overwhelming certain FOSS projects these days.

</comment></comment></comment></comment><comment><USER9> So what's the new part? We have portable propane fridges. Is it cheaper? More efficient?

<comment><USER10> Propane is extremely flammable and explosive. In addition, propane tanks and (ambient) heat don't like to coexist... with this one, even when the ammonia gets vented, at least it doesn't create a fire/explosion risk - and thus can be transported by bush pilots!

<comment><USER11> Well, I wouldn't say it doesn't produce an explosion risk: [https://www.ccohs.ca/oshanswers/chemicals/chem_profiles/ammo...](https://www.ccohs.ca/oshanswers/chemicals/chem_profiles/ammonia.html)

Ammonia fertilizer tanks explode every year. It's not a flammable as propane, and it works well for refrigeration, but it's also more toxic and corrosive...

<comment><USER2> _Odour: Ammonia-like_

I suppose they couldn't find a better way of describing it, but ammonia does have a pretty unique smell. The good thing about ammonia is that its smell is repugnant and detectable at concentrations far below when it starts becoming toxic that you'll be given plenty of warning.

</comment></comment></comment></comment><comment><USER12> Doesn't look like it would hold many beers.

</comment><comment><USER13> Foolish not to get a patent or control the intellectual property. Without that control, someone else will, possibly to the detriment of the intended purpose.

<comment><USER14> If you publish, you effectively void the novelty condition of an invention and prevent patentability.

<comment><USER15> True, but manufacturers may be less than willing to tool up to produce them if anyone can jump in on it and under cut them. He may have a higher purpose in mind but almost certainly the manufacturer doesn't, and just wants to get paid.</comment></comment></comment>


Apple Announces Event on Sept. 12 for Revamped iPhone Lineup - <AUTHOR> https://www.bloomberg.com/amp/news/articles/2018-08-30/apple-plans-event-on-sept-12-for-revamped-iphone-lineup?__twitter_impression=true <comment><USER2> I really wish Apple would get their act together over consolidating their ports. There's just a general lack of consistency creating a poor user experience that is not seamless at all.

Example: Have a Macbook Pro with 4 USB-C ports, an iPhone 8 with a Lightning to USB-A cable that can't plug into the Macbook Pro, and Lightning headphones that can't be plugged into the Macbook Pro either.

It's like each product was developed in a silo without much regard for the rollout strategies of the other product lines.</comment>


Programming without examples, demos, documentation? - <AUTHOR>

Hello HN, i'm a informatics engineering student from Portugal.
Lately i found that i almost always over rely on demos or examples to start something quick or solve some problem.
Checking examples is obviously quicker, but that won't do every time.<p>Last project i did, used apache jena (a java semantic web framework), they provide many examples on their website (i gotta say it needs improvement), if they didn't i'm afraid it would have taken me way too much time to get stuff working. It has way more classes and patterns that my beginner brain can handle at once. I found generally that is really hard to find the starting points just by looking at javadoc's. So, how do you manage when something you want to use is complex and there is no examples( or documentation), is this just an endurance problem to figure out how everything works? do you have any special approach? Thanks <comment><USER2> Depending on the situation, you may be able to jump into the source code and check how they do things, but personally, I don't.

If the developer/community of a language, framework, library, etc. etc. haven't taken the time to write good documentation and provide some examples, I tend to stay away from it. It takes extra time for us to understand how something was built, and why. The developer should help us along with this.

Think about even the simplest API if it isn't documented, how long will it take you to figure out what you can do with it and how.

For me, it is also likely that the original developer is a much better programmer than I am. Or at least, I assume they are. I suspect there will be much of their source that I don't understand. Of course, reading their code makes me a better developer, but I'll often need help, and good documentation will help along with that.

It sounds horrible to say "I expect that if you're going to create an open- source bit of code that will help me code better/easier/faster, I also expect you to document it well and give examples", but if somebody is going through the trouble of developing something they want other people to use, I think this is an important part of that process.

What do people think of documenting first, and building from that documentation? I'm putting together my first open-source project, and am thinking that may be a good way to manage the documentation thing. Anybody done that before?

<comment><USER3> "If the developer/community of a language, framework, library, etc. etc. haven't taken the time to write good documentation and provide some examples,".

I couldnt agree more. It takes a lot of time and sweat to make a good library or framework, writing up some examples takes very little time in comparison and when the developer/team hasnt gone the last mile here, it usually makes me think they havent done it with their framework as well.

Also "What do people think of documenting first" well, theres a great talk by Tom Warner about README driven development that is just about this, and Im a huge fan of it. Work out how you would like to use your library before you program it, and as an added bonus you have documentation at the end.

Also as an added note to other devs reading this, I care much less about "API docs" because I get the same thing from just reading the source. Id be perfectly content with examples.

</comment></comment><comment><USER4> Use the source. Or a disassembler.

</comment><comment><USER5> Let's have lunch without forks, spoons, or chopsticks.</comment>


The case against water fluoridation - <AUTHOR> http://www.foodconsumer.org/newsite/Non-food/Environment/50_reasons_to_oppose_fluoridation_0109111037.html

<comment><USER2> This is a long list of points, that should have "citation needed" attached to them. Whoever it is, presents some "facts" without any actual source, analysis or other way to easily verify.

Also, sentence like "The level of fluoride put into drinking water at 1 ppm is not what nature intended." should not be used by serious people. Body radiation is also "not what nature intended" - yet, it can stop diseases.

</comment><comment><USER3> The WHO technical report on fluoridation (<http://whqlibdoc.who.int/trs/WHO_TRS_846.pdf>) makes specific mention adding fluoride to drinking water (see page 16), finding it to be a safe and cost effective means of significantly improving dental health.

Although the WHO report also notes several preconditions, and contraindications, that should be considered prior to drinking water fluoridation, including a few that seem to be obliquely mentioned in the article link, the focus is on maximizing the benefit for the greatest amount of people. Arguably, that's the point of forming a society in the first place.

The stated reason for reducing current fluoridation levels has more to do with an increase in its availability from other sources. But this article is useless in furthering any meaningful discussion so far as it provides little more than unsubstantiated opinion.

It would be great to have a meaningful discussion on how we can balance the benefits to society and individual risks, including exactly where the statistical benefits afforded to a group outweigh the potential risks to individuals. But this article isn't it.

The broader issue touches on exactly how to frame the social contract between a government and its people - what rights are you prepared to give up, what responsibilities will you shoulder, and what risks are you prepared to accept, in order to benefit from the organization and protections afforded by your society?

<comment><USER4> It is a terrible article.

Water fluoridation has never been proved to work at anything like the rates people have been lead to believe.

It is true that caries levels have decreased dramatically since fluoridation, but they have at the same rate in other countries without fluoridation; due to the availability of fluoride toothpaste.

The studies that originally showed the 'safety' of fluoride in NY in the 40s were a joke. Paid for by the Carnegie institute, a conclusion already determined, carried out by dentists who both a) knew which kids were receiving fluoride or not and b) checked for 'safety' by seeing whether or not teeth got moddeled.

[http://www.fluoridealert.org/health/teeth/caries/who- dmft.ht...](http://www.fluoridealert.org/health/teeth/caries/who-dmft.html)

See that link to see the rate in caries decrease over the last century in both fluoridated and non-fluoridated countries.

</comment></comment><comment><USER5> The US Government via the EPA has recently recommended reducing fluoride concentration in the water supply citing the fact that the standards were last set in the 1960's and have not been reviewed since. So it seems like many other additives we are learning more and more about potentially adverse effects of excessive fluoride exposure.

source: [http://www.zerohedge.com/article/government-reduce- fluoride-...](http://www.zerohedge.com/article/government-reduce-fluoride- levels-drinking-water-because-too-much-fluoride-can-cause-health-)

</comment><comment><AUTHOR> In general, if someone wants to feed me a low dose poison, I'd want to see some bullet-proof safety and efficacy data.

In this case, if the cavity rates between cities with and without fluoride are similar as the article states, I would pass.

The US just lowered the recommended fluoride level. My own view is that this is a good thing, but I think everyone should do some research for themselves and not just accept that the government always makes the right choice.

There are many serious scientists who question the fluoride risk/reward equation.

</comment><comment><USER6> Seems like a silly thing to worry about.

Even if you're going to worry about tap water, surely lead levels and antibiotics are more of a threat than fluoride.

</comment><comment><USER7> "31. Fluoridation is unethical because individuals are forced to drink fluoridated water. If fluoride is indeed beneficial, people can always take it as a dietary supplement."

Dietary supplement? The alleged benefit of flouride is to prevent tooth decay, how does taking it as a dietary supplement prevent tooth decay?

</comment><comment><USER8> As a foreigner, I've always wondered why in the US, there were so many opponents of adding fluoride to drinking water, but I never heard anyone oppose adding _chlorine_ , which not only is an arguably harmful substance, but also makes the water taste horribly.

</comment><comment><USER9> Since we have been discussing nutrition lately, I wonder what HNers think of this?

I have always classified "anti-fluoridation" to the conspiracy theory domain and never paid much attention to it.

</comment><comment><USER10> "Now why don't you just take it easy, Group Captain, and please make me a drink of grain alcohol and rainwater, and help yourself to whatever you'd like."

<comment><USER11> "Nineteen hundred and forty-six. 1946, Mandrake. How does that coincide with your post-war Commie conspiracy, huh? It's incredibly obvious, isn't it? A foreign substance is introduced into our precious bodily fluids without the knowledge of the individual. Certainly without any choice. That's the way your hard-core Commie works."

<comment><USER10> Uh, Jack, Jack, listen... tell me, tell me, Jack. When did you first... become... well, develop this theory?

</comment></comment></comment><comment><USER6> Fluoridation is obviously part of a long-term communist mind control plot -- how else do you think Obama won?

</comment><comment><USER4> I was a leading part of an unsuccessful campaign to get fluoride out of the water in a city in Vermont.

I went from having no idea about the issue to 'convinced' it shouldn't be in the water in an afternoon when I ran into someone (in my same city years before we tried to get it out again) petitioning on the street.

The super common sense easy argument is choice. If you are dripping fluoride into the drinking water, you are effectively medicating a population without their consent. I am not so poor as to not be able to buy filtered water and/or a reverse osmosis filtration system, but many families are.

Even if I am able, and choose, not to drink the city's water: the local bread I buy, I pasta I cook, virtually everything these days that uses water in its creation process also has fluoride. That is why they are reducing it.. when the .7-1.2 ppm standard was made.. it was based off the total daily dose assuming fluoride would only come from water. It took 60 years to realize total dose is beyond just the tap water drink; the anti-fluoridationists have been saying this from the beginning.

There are a bunch of studies linking IQ drops to fluoride exposure. Way before fluoride was a tooth decay miracle, it was an industrial hazard that had Aluminum plants being sued all over the place. Fluoride played a key role in developing the nuclear bomb. In two different ways, it is a fluoride-uranium gas that is run through huge ducts for many miles to slowly enrich uranium; it was fluorocarbons that were able to lubricate the machines that this gas went through (everything else would get eaten by the fluorine).

The negative health effects are not hard to find. The only reason this is still a practice is because some powerful organizations reputations are at risk; and if instead of dripping what is literally the scrubber fluid from super-phosphate fertilizer plants into your water slowly, they would have to pay for hazardous waste disposal.

I could go on and on. If you want a really good read, check out the Fluoride Deception.

The history is amazing.

Fluorosis is the moddling of the teeth by fluoride. Fluoride 'works' by changing the mineral structure of your teeth. The fluoro-apatite is more resistant to decay than hydroxy-apatite. This is why fluoride toothpaste and fluoride gels make perfect sense. They work.

When you ingest fluoride over long periods of time, the fluoride accumulates not just in your teeth, but in all of the places that have a similar chemical composition to your teeth, namely your bones. If someone's teeth are moddeled you can be sure their bones are too.

Indeed, the highest concentrations of fluoride found in humans is not in the bones or the teeth at all, but the bits of calcium in the pineal gland; where it has been measured in the 10,000ppm range (this is due probably to a really high blood flow and large relative surface area).

Fluoride is super dirt cheap because it is literally an industrial waste. I don't want to have to drink it. They fight tooth and nail and call it conspiracy theorist when we suggest it is an outdated practice.

<comment><USER12> \- "There are a bunch of studies linking IQ drops to fluoride exposure."

By "a bunch" we of course mean "an inconclusive one comparing two Chinese villages from a couple weeks ago": <http://ashartus.wordpress.com/2010/12/29/fluoride-and-iq/>

\- "The negative health effects are not hard to find."

Ok, such as? You just rattle off industrial uses and act as though that affects its usefulness in medicine. (DID YOU KNOW IT WAS USED TO MAKE BOMBS??)

<comment><USER4> <http://lmgtfy.com/?q=fluoride+health+effects>

There have been studies coming out of china re: fluoride for a lot longer than the one that came out a couple weeks ago.</comment></comment></comment>


A long-lost vessel from the 1800s was found by accident as NOAA tested equipment - <AUTHOR> https://www.cnn.com/2019/05/30/us/shipwreck-1800-noaa-trnd/index.html <comment><USER2> Burning was a common means of disposing of a _prize_ [https://en.wikipedia.org/wiki/Prize_(law)](https://en.wikipedia.org/wiki/Prize_\(law\)) by naval forces, privateers, or pirates, when for whatever reason the victorious force decided manning the prize and sending it to a friendly port was not practical. Reasons could be some combination of 1) the victor already was short-crewed 2) the vessel was too damaged by a battle 3) the most valuable cargo had been transferred at sea to the victor 4) reaching a friendly port was not practical 5) the economic value of the prize did not justify sending to port.

So this could have been 1) from the war of 1812 2) US or British operations against Caribbean pirates in the 1820s 3) a slaver, captured by British or US naval forces anytime after the war of 1812 4) a Union vessel captured by Confederate forces or a blockade runner captured by Union forces during the Civil War.

<comment><USER2> In any event, I think all the relevant naval operations from this era are documented, but not perhaps well-collated. Pirates on the other hand were not well-known for documenting their operations. Some archival research may result in historic candidates for the vessel.

</comment></comment><comment><USER3> I don't think 2109 or 9012 could be a year in any of the world's calendar systems. So, were rudders factor-produced, with serial numbers, or does that number apply to the ship?

</comment><comment><USER4> I somehow doubt this headline means that "A long-lost vessel from the 1800s was found by accident, when it became NOAA-tested equipment".</comment>


Dijkstra: On the cruelty of really teaching computer science (1988) [pdf] - <AUTHOR> http://www.cs.utexas.edu/~EWD/ewd10xx/EWD1036.PDF <comment><USER2> It's interesting to see how attitudes to this EWD have changed over the years. Here are some of the previous submissions with comments:

[https://news.ycombinator.com/item?id=43978](https://news.ycombinator.com/item?id=43978) : A few comments

[https://news.ycombinator.com/item?id=1666445](https://news.ycombinator.com/item?id=1666445) : Many comments

[https://news.ycombinator.com/item?id=3553983](https://news.ycombinator.com/item?id=3553983) : Many comments

In the earlier threads there are two main voices: "Where can I learn more about this," and "It's useful to see the different perspective." Both say that there are many nuggets of wisdom to be mined, even when they don't agree. There are also a few who dissent and say it's irrelevant, impractical, and inapplicable.

Even in 3553983 where the top comment says it's largely irrelevant there is a useful dialogue discussing the ideas, and how they can be made to work, or at least how we can learn from them in today's context.

In contrast, in this thread so far we've mostly had comments about the hand- writing, and complete dismissal of the ideas. So far there's very little attempt to say: "OK, times have changed, but can we learn something from this?"

So I ask - Can we? Are there nuggets to be mined? Or are you convinced that you really do know better, and have nothing to learn from it.

I'm still learning.

</comment><comment>==

For reference, other submissions, mostly without comments:

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

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

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

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

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

<comment><USER3> The audience is self-selected. The ones that don't know any better see only a condescend tone instead of the material. They don't get the difference between "lines spent" and "lines produced" and they don't know that computers were used to "compute" and thus the formalism was absolutely necessary to trust the result.

What we write today is WoW and stuff we don't need formalism to prove they don't crash - because, you know, who cares about that?

Dijkstra comes from a time were you could reuse a piece of software and build upon it because you could understand it. Today nobody does it because the software is "disposable". Who cares about proving a piece of future garbage?

<comment><USER4> Agreed. In a way, it's like the "Blub paradox", only applied to formal methods instead of programming languages. Those who aren't familiar with them don't see the point and think it's merely "mathy" nonsense.

</comment></comment></comment><comment><USER5> This EWD is mind blowing in its beauty. It's 30 pages, but 30 pages that you won't regret reading.

I love computer science and teaching it is some of the most fun I've ever had. With a lot of practice, you can get across concepts such as computability and turing machines to the non-mathematically initiated within the duration of a party, and it's greatly satisfying. (yes I am a lot of fun to be around)

The rest of the EWD notes are highly recommended. (also it's weird to see an academic write in script). Side question: do any other HNers keep notes in written form? I still do it, using a fountain pen, and am often poked fun at by colleagues :(

<comment><USER6> Re: your side question, sure![0] I would love to use a fountain pen primarily but the nib that I want is out of my budget for now. I have a couple Muji fountain pens though which are great for the price, just far too thick for me to use regularly.

[0]: [http://academic.ianclarksmith.com/Coursera/DesignArtifacts/c...](http://academic.ianclarksmith.com/Coursera/DesignArtifacts/content/demo1.jpg) (Uniball .28 and mechanical pencil on blank 4x6 card)

By now I probably have thousands of these scattered throughout books (I use them as bookmarks while taking notes) or in boxes. They're not particularly well sorted except for being vaguely chronological. I have a decent stash of notebooks as well but haven't used them since it was a requirement for school except for a single pocket notebook that gets filled roughly once a year.

</comment></comment><comment><USER7> Transcription: [http://www.cs.utexas.edu/~EWD/transcriptions/EWD10xx/EWD1036...](http://www.cs.utexas.edu/~EWD/transcriptions/EWD10xx/EWD1036.html)

</comment><comment><USER8> Who is Dijkstra to espouse about the best way of teaching mathematics to primary school children? I think it would be equivalent to a researcher in education deciding they know the best way to design a calculus.

The manner in which Dijkstra writes about this is very off-putting - it sounds arrogant and one-sided, dismissive. In fact he comes across as ignorant, which of course, he is, in this area.

Worryingly, I see a lot of similar writing in CS blogs. Often authors present as fact their opinions on a topic that they are not knowledgeable about.

When I read something like that, I look for the balance in their argument. If they say "well, what are the good sides to teaching by analogy? When does it work best? What is the evidence that teaching basic arithmetic is done well?" then I begin to take them seriously.

[edit: typo]

<comment><USER9> Where in this essay does he "espouse about the best way of teaching mathematics to primary school children"? It seems to be about CS education, not primary school math.

<comment><USER8> Page 5.

</comment></comment></comment><comment><USER10> As someone who focused on proof based mathematics in collage and is largely a self taught programer I think this proposal has merit. Begin forced to confront abstraction and formalism without any crutches as a freshman in college changed and expanded the way I thought. Learning to write down a correct proof without an external way of verifying it is an experience everyone should have.

However I think this needs to be coupled with an introduction to the concrete at a younger age. In mathematics we teach arithmetic to young children then step up the ladder of abstraction to high school algebra, simple proofs and linear algebra before eventually exposing them to abstract algebra (ie group theory etc). Teaching abstract algebra first would make theoretical sense but the mind tends to need to know at least one example of something before it accepts the abstraction.

I imagine a playful introduction to programing for young children coupled with a strong course in formalism for young adults could produce some great programers. Though, as with the proof based math series I took, I'm sure there would also be loads of freshman drop outs/transfers to more applied courses.

I also agree with others that insight rarely comes from pure formalism. The point of learning these things is to expand the way your mind works allowing you to think about abstract objects and allowing you to verify insight when it does come.

For me Charlie Parker sums up the necessity of a formal education even if it is not explicitly used in practice:

"Master your instrument, master the music & then forget all that & just play."

<comment><USER11> For me Charlie Parker sums up the necessity of a formal education even if it is not explicitly used in practice: "Master your instrument, master the music & then forget all that & just play."

How very true across so many aspects of life!

Science doesn't happen through formalism. People learn the body of material that's been proven, then they get new intuitions, then afterwards they try to formally prove their insight. This isn't entirely inconsistent with EDW either. A lot of his point is that programmers need to know how to think symbolically, and if you truly prove the correctness of things, you can build the base of knowledge on top of it. If not, you're frequently wondering why things don't work.

</comment></comment><comment><USER12> A wonderful read from a badass scientist. Here is a good nugget of wisdom:

 _Software engineering, of course, presents itself as another worthy cause, but that is eyewash: if you carefully read its literature and analyse what its devotees actually do, you will discover that software engineering has accepted as its charter "How to program if you cannot"._

</comment><comment><USER13>
      My point today is that, if we wish to count lines of code,
      we should not regard them as "lines produced" but as "lines
      spent"

</comment><comment><USER14> I think people are attracted more to the form of the EWDs and to it's melancholic tone, rather than to the content itself, which is confirmed by the huge popularity of the EWDs as compared to "The discipline of programming", which is the technical exposition of what Dijkstra really is proposing in the EWDs.

As almost all of Dijkstra's writing, this piece here is a plea for teaching formal methods. It's nicely written I admit, but it is also unbelievably smug and disconnected from reality. Even in physics or mathematics, which are obviously much more mathematically tractable than computer science, people do not do significant new things by using only formal methods. In fact, the technical achievement Dijkstra is most known for, Dijkstra's algorithm, was not invented using formal methods, but like most discoveries ever it occurred in a flash of insight after a long period of thinking, as he said in an interview. No matter how much one loves rigour, the dream of formalizing all reasoning has turned out to be a pipe-dream, as evidenced for example by the failure of the Hilbert program, and people everywhere proceed about their business as usual.

Mathematics is not, after all, just the manipulation of a string of symbols, and neither is Computer Science, even if all computers do is exactly this, because we humans are complex beings, largely driven by emotions, not consciously aware of all the reasoning processes going on, that are often reasoning in "fuzzy" ways (and frequently with good effects), as opposed to being machines executing chains of logical inferences. In fact, people are born with very different internal worlds, some people are really good at symbol manipulation, algebra, and language, their daily thinking consists of "talking to themselves", while some people naturally think by imagining pictures and having various loose sensual impressions, among the latter for example the great mathematician Poincare. Was Poincare in need of someone to "really teach him mathematics"? Unfortunately I think Dijkstra assumed everyone is identical to him.

Before preaching this too much, look at the practical implementations of his ideas on this, for example have a look at him lecturing on a technical topic:

[http://www.youtube.com/watch?v=qNCAFcAbSTg](http://www.youtube.com/watch?v=qNCAFcAbSTg)

or read "A discipline of programming". As nice as the EWD prose is, I honestly can't stand the man talking about anything technical for more than 5 minutes. The more concrete the EWDs get the worse they are.

For some perspective on how science really gets done, as opposed to people's romantic images of how it is done, I recommend "The Sleepwalkers" by Arthur Koestler, about the Copernican revolution, and "The psychology of mathematical invention" by Hadamard.

<comment><USER15> I got the impression that we both read completely different articles, because nowhere in it I see EWD saying that mathematicians or scientists should think by means of formal methods... That doesn't even make sense, since formal methods are a way not to think.

What he states is that computers are a "formal method applying machine" (a conclusion you seem to share), and that for competently using it, one must know formal methods. And, honestly, I can't imagine how one can disagree with that. (And that was the fate of EWD, he saw all the patently obvious problems of computing science that somehow everybody was ignoring, and communicated them, just to be called a crazy radical at first, and "duh, of course it's right, tell me something not obvious next time" later.)

<comment><USER14> Dijkstra advocates creating programs by doing formal transformations of specifications written in mathematical logic, and computers just do boolean algebra on strings of bits, so it's not that Dijkstra advocates formal methods because they are somehow essential to how computation is done in the computer - they are not, especially in the form proposed by Dijkstra.

He is proposing formal methods as a way of thinking about developing computer programs, this is clear from reading "A Discipline of Programming". You can not say "formal methods are a way not to think", because the theoretical existence of a sequence of transformations giving you the final program does not tell you how to find those transformations, so some thinking on the part of programmer is still needed. Of course you can come up with a program by a way of thinking completely uninformed by the formal specification, and then formalize it, but this is not what Dijkstra is speaking of in this article. What I am saying in the comment is that I do not believe many people benefit that much from a formal approach to program development, just like not that many new theorems in mathematics, outside of mathematical logic, were discovered using the tools of mathematical logic. Even the proofs themselves in mathematics aren't done in a completely formal way.

<comment><USER9> > What I am saying in the comment is that I do not believe many people benefit > that much from a formal approach to program development

A lot of systems would benefit from formal (or more formal) methods. I worked in aviation software, formal methods would have saved us so much trouble, especially since the code size is often relatively small (10k-200k LOC) and because we're dealing with other systems the IO spec was reasonably complete. Sure there'd be issues, but feature creep was not one of them (except on one project). Feature creep makes formalisms difficult, but only when you're looking at whole program formalisms. So certainly safety critical systems benefit.

What else might? How about medical systems (see Therac-25 for faulty UI leading to deaths). Network code, especially fundamentals like routers, switches and core services like DNS that so much depends on. Cryptographic and other security systems. Compilers, obviously, similar to network code they're too ubiquitous to be left to error prone ad hoc approaches. Anything handling money. Anything handling privacy (ensuring HIPAA and whatever European privacy rights). Software handling production automation or managing warehouses/inventory, failures there mean lost production time, wasted inventory, lots of money and productivity gains to be had by having software that works.

If you accept formal methods on the small scale (essentially the promise of functional programming a la Haskell and the ML family), you can be confident in composing large systems out of smaller, formally verified systems.

</comment></comment></comment></comment><comment><USER16> His page numbers are zero indexed. Cute. I would have loved to take his proposal for an introduction to computer science course.

<comment><USER17> You might also be interested in CMU's introductory curriculum in the same vein which is somewhat less extreme and has a particular focus on parallelism as the standard case of computing. [http://existentialtype.wordpress.com/2012/08/17/intro- curric...](http://existentialtype.wordpress.com/2012/08/17/intro-curriculum- update/)

</comment></comment><comment><USER18> I know Dijkstra's genius and all, but his papers are just so unpleasant. First, I hate his verbose style and second, I hate his attitude.

"The effort of using machines to mimic the human mind has always struck me as rather silly. I would rather use them to mimic something better."

Jesus, could he be any more smug?

<comment><USER15> > Jesus, could he be any more smug?

Funny that I think that statement is extremely humble.

<comment><USER19> Indeed, the very idea that your fly by the seat of your pants intuition, memory and senses cannot be trusted is the foundational presentiment that brought us science.

</comment></comment></comment><comment><USER20> How can a human write that much good prose without scribbling things out?

<comment><USER21> Presumably this is a final draft.

</comment></comment><comment><USER6> Was this post inspired by this post ([http://www.reddit.com/r/compsci/comments/1rxfze/if_you_liked...](http://www.reddit.com/r/compsci/comments/1rxfze/if_you_liked_ew_dijkstras_paper_on_the_cruelty_of/)) on r/compsci by any chance? I didn't read much of the discussion there but the other links are interesting and things which I hadn't seen before.

<comment><USER18> I think it's the opposite, i.e. the reddit post was inspired by the paper, which I read yesterday... but I couldn't have found the link on HN, because it has only appeared today, so it must mean that I orginally found it on reddit. Now I'm confused...

</comment></comment><comment><USER13> Interestingly, I found the handwriting to more readable than most computer fonts; that is, very visually consumable.

<comment><USER22> That was the fist thing that jumped out at me. Amazing handwriting!

<comment><USER23> His handwriting looks beautiful!

I loved it and emailed Prof. Dijkstra during the brief time that he _finally_ had email (I got a graduate degree from his department and attended some of his classes). I asked him for permission to one day create a font from his handwriting, not really expecting a response.

However, he did eventually reply, granting me the permission to do so.

I commissioned the font and it worked nice. It was distributed briefly and it may still be out there (I see one or two are found out there).

My original copy may be in old backups. One day I will find it and update it!

Edit: found the email reply! He retired in 11/1999 and passed away in 8/2002

      Austin, Tuesday 11 April 2000

      Dear Dr. Puchol,

            If a competent designer can use my handwriting as a source of
      inspiration, that is fine with me. Thank you for asking my permission,
      which is granted with pleasure.

            With my greetings and best wishes,
                            yours ever,          Edsger W.Dijkstra

</comment></comment></comment><comment><USER24> I am glad he was able to articulate why some types of change are accepted and other changes rejected with hostility -- that some new things can be interpreted through analogies with previous experience.

It is the difference between "change" and _change_ , "thinking" and _thinking_.</comment>


We need feedback for our tower defense game - we are 2 guys with a game engine. - <AUTHOR> http://scramblermedia.com/charliesHardWorkDay

<comment><USER2> It wasn't what I expected when I read 'tower defence game', but it looks fun anyway. Unfortunately it runs incredibly slow and crashed the chrome window it was running in.

Needs some more work guys, good luck!

</comment><comment><AUTHOR> we are 2 friends from Costa Rica trying to build a game engine. The server is made in node.js, all the actionscript code is made by us with no dependency and we sync the sprites and config files using dropbox. -- Feedback is always welcome...

<comment><USER3> it moves slow for me...

<comment><AUTHOR> ...like everything is running slow because of cpu (framerate problems), or is more like the character moves too slow...?

<comment><AUTHOR> maybe some framerate issues, I am aware I need to compress more the imgs to improve it... I will work on that... -- thanks!

<comment><USER2> It's something to do with CPU usage, on my core i7 flash is using 90% CPU.

Maybe you have to look at how often you're updating the screen, I'm not very familiar with ActionScript but it feels like there's a constant loop running as fast as it can, is it possible to use an event based system to update the screen instead?</comment></comment></comment></comment></comment>


Survey: Women Leaders Smarter, More Honest - <AUTHOR> http://www.livescience.com/culture/080825-women-politics.html <comment><USER2> Polling for opinions on the subject just tells you what people perceive, not what really _is_.</comment>


Show HN: Yogi, AI Powered Ctrl+f - <AUTHOR> https://www.meetyogi.com/ <comment><USER2> Can ya'll search for info across docs? That'd make this so helpful for my research

</comment><comment> teacher-22101 This is the kind of thing I wish I had in college...</comment>


A new way to deploy containers on Google Compute Engine virtual machines - <AUTHOR> https://cloudplatform.googleblog.com/2017/11/introducing-an-easy-way-to-deploy-containers-on-Google-Compute-Engine-virtual-machines.html <comment><USER2> Has anyone done the math on comparing this to fargate?</comment>


Chris Yeh responds to Arrington's blog: Yes, there is a super-angel conspiracy - <AUTHOR> http://venturebeat.com/2010/09/21/yes-there-is-a-super-angel-conspiracy/

<comment><USER2>
      >Even if we assume that Silicon Valley seed rounds only
      >account for 10 percent of angel investing in the US,

Surely they are way, way less than 10%. I mean tech is less than 10% of the US and the valley isn't the only place for angels. At 1%, which sounds more plausible, we are talking about controlling 50% of deals. That's not an innocuous number.

So, screw the 500,000 angels figure. Anyone with any actual knowledge want to tell us how much of the relevant market the top 10 angel firms control?

</comment><comment><USER3> The article makes the false assumption that all angels are the same. Super- Angels aren't super angels purely because of the money they control, but rather their expertise and connections that make them the first choice for startups looking for investment.

<comment><USER4> Exactly. It's the start-ups that make super angels 'super angels', ignore them for a year or so and the situation would change dramatically. Some of them are so well connected that people would consider giving them some equity just to get them and their network on board.

It also serves as validation to some extent, if 'X' is on board that validates your start-up in the eyes of others.

Nice example, plenty of the YC companies would never receive so much as a byline on the major tech / news sites but as soon as YC invests they're headline news.

</comment></comment><comment><USER5> This title is misleading...

"I'm not saying that angels don't wish that valuations are lower (I certainly do). But there simply is no way that such a conspiracy could be effective, given the economics of the market."</comment>


New VPNFilter malware targets 100,000s of networking devices worldwide - <AUTHOR> https://blog.talosintelligence.com/2018/05/VPNFilter.html <comment><USER2> What's a good affordable router well supported by Tomato/OpenWRT, these days? (put differently: 2018's version of the Linksys WRT54G :)

EDIT: The article doesn't explicitly say that alternative firmwares like Tomato & OpenWRT are not exploitable, but it seems to me the rate at which they are maintained make them less easy targets. So this new flaw made me think now is a good time to replace my crappy router and its unmaintained vendor firmware with something more solid running Tomato/OpenWRT. Disagreements?

<comment><USER3> As far as I understand, the vulnerability - and especially its ability to survive reboots - exploits Linux/busybox-based routers. One method of removal is described in this thread: [https://forum.qnap.com/viewtopic.php?t=133006](https://forum.qnap.com/viewtopic.php?t=133006). So the best bet here (as much as i hate it) would be to switch to something that doesn't have a crontab.</comment></comment>


Show HN: A better to-do list (based on thedailymuse post) - <AUTHOR> http://1-3-5.com

<comment><USER2> I really, really like this.

Thanks for making it, and thanks for putting it on github too. It's the sort of thing that's so simple that it's not really that a big enough thing to make a business off, so nobody puts much effort into it.

But you've done a really nice implementation and shared it with the world, so thanks!

<comment><AUTHOR> Thanks, glad you appreciate it!

</comment></comment><comment><USER3> Please guys, don't make the word "beautiful" into marketing-ese by overusing it (a la "revolutionary").

Yes your site looks nice, let people who visit it use that word to describe it if they choose, don't shove it down their throat.

</comment><comment><USER4> For me, works in Windows Chrome 26.0.1410.43, but not in IE 10.0.9200.16521 nor (Fedora) Firefox 19.0.2

<comment><AUTHOR> Works for me in FF, any console errors thrown? You can submit a bug on GitHub and I'll take care of it.</comment></comment>


Ask HN: Short Programming Problems - <AUTHOR>

I'm a CS student working for an investment bank this summer and I want to make sure that I write a little code (~10min) every day. Is there a book/online list of problems I can draw from this summer <comment><USER2> [http://www.amazon.com/Programming-Pearls-2nd-Edition- Bentley...](http://www.amazon.com/Programming-Pearls-2nd-Edition- Bentley/dp/0201657880)

The classic Programming Pearls is not exactly a book of problems, but a book of ideas.

You can probably examine a few of the ideas and play with them like toys. Toys are more fun than problems.

</comment><comment><USER3> If there's any piece of open-source software that you like and use, maybe you could try to fix some bugs for that? Once you know a project, it's possible that each bug would take only a few minutes, especially if it's new and growing.

It's also a great boost for your resume.

</comment><comment><USER4> The C Programming Language, Second Edition; Ritchie and Kernighan; has end of section and end of chapter problems that are pretty good. Especially if you want to learn C.

</comment><comment><USER5> Generally, just searching for CS interview questions should give you a good number of questions which you should be able to spend a short amount of time on daily.

</comment><comment><USER6> [http://www.codewars.com/](http://www.codewars.com/)

</comment><comment><USER7> There is a constant stream of 10 minute challenges on StackOverflow.

</comment><comment><USER8> projecteuler.net

</comment><comment><USER9> reddit.com/r/dailyprogrammer

Many good problems there regularly.</comment>


JS Paint – A web-based MS Paint remake - <AUTHOR> http://jspaint.ml/ <comment><USER2> I haven't used Windows as a primary OS for years. I miss having MSPaint around for small edits, and have yet to find a suitable replacement. Other apps either have too few features (e.g. Preview) or too many (GIMP), or the interface doesn't feel right. It might just be because I'm used to it after using it for years when I was younger, but MSPaint's interface just makes sense, and it hits the sweet spot of features for quick, simple edits.

This feels very similar to the original, and after a quick playthrough seems feature-complete. Well done! I'm not sure how I feel about it being web-based but I guess in this day and age it just makes it more accessible.

I see there's a Chrome app, but the link is broken ([https://chrome.google.com/webstore/detail/dgfedgcofbjmeohonb...](https://chrome.google.com/webstore/detail/dgfedgcofbjmeohonbpcoagiabgnddjh))

<comment><USER3> > and have yet to find a suitable replacement

There are a few, Kolourpaint is pretty much an MSPaint clone for KDE [1] and Paintbrush is the macOS equivalent [2]. There is also Gnome Paint [3], but hasn't seen any update in years. I suppose the closest would be Pinta [4], although that is slightly above MS Paint on the complexity level (probably more comparable to Paint.NET than MS Paint).

> I'm not sure how I feel about it being web-based

Personally i find it amusing and impressive that this implements a Win95-like GUI (i love Win95's GUI :-P) but at the same time the actual editing feels very slow - painting something takes almost a second to update with the brush being very jumpy, reminding me using ZSoft's PhotoFinish on Windows 3.1 on my 4MB 386:-P.

It is also nice that it has implemented the select+shift+drag brush feature that is ignored by almost every other clone i've seen over the years.

[1] [https://www.kde.org/applications/graphics/kolourpaint/](https://www.kde.org/applications/graphics/kolourpaint/)

[2] [https://paintbrush.sourceforge.io/screenshots/](https://paintbrush.sourceforge.io/screenshots/)

[3] [https://launchpad.net/gnome-paint](https://launchpad.net/gnome-paint)

[4] [https://pinta-project.com/pintaproject/pinta/](https://pinta- project.com/pintaproject/pinta/)

<comment><USER4> > actual editing feels very slow - painting something takes almost a second to > update with the brush being very jumpy, reminding me using ZSoft's > PhotoFinish on Windows 3.1 on my 4MB 386:-P.

Works as fast as native paint on my laptop. What browser are you using?

<comment><USER5> Same here: no noticeable lag in Firefox on Ubuntu.

I'm guessing Safari on macOS?

<comment><USER6> no problem with Safari+Macos here

</comment></comment></comment></comment></comment><comment><USER7> The UI and behavior is amazingly close to the real thing. But I cannot help but sigh when the brush tool lags more than Paint lagged on a 233 MHz Celeron.

I really think this is an awesome project, but I am old enough (30) to remember fast performing GUI apps and I don't know if I'll ever "get over" losing them.

edit: hopefully it is an inefficient implementation and not the inherent slowness of web apps.

<comment><USER8> One thing I noticed is that it doesn't draw zoomed-in images correctly - pixels are blurry. Didn't check if this is Canvas or WebGL, but something in the code begs being changed from LINEAR to NEAREST.

(EDIT: turns out to be a Firefox issue; Chrome shows the sweet pretty pixels correctly.)

> _I really think this is an awesome project, but I am old enough (30) to > remember fast performing GUI apps and I don 't know if I'll ever "get over" > losing them._

Same here (I'm 29). I'm getting tired of complaining, this literally feels like trying to turn back the tide of a river. We're doomed to use slow _and shitty_ software until the present web fads go away and the ecosystem stabilizes.

<comment><USER9> > until the present web fads go away

I don't see that happening. Web apps gave us an environment where it's easy to create complex applications quickly. Now efforts are going towards making these apps smaller and faster, but I don't see developers going back to C++ to develop GUI apps like this one.

<comment><USER10> Java gave us an environment where it was easy to create complex applications quickly as well.

The web will fade away just like Java did.

<comment><USER11> I do like Java, but sometimes get a bit pissed off how things went, because we had "an environment where it was easy to create complex applications quickly as well" in the form of Smalltalk, VB, Delphi and C++ Builder.

With the exception of Smalltak, all had native code generation, then Java happened.

<comment><USER3> VB (i assume you mean classic VB, not VB.NET) wasn't really an environment to create complex applications though - at least not in VB itself. The best use for VB would be to use to mix together components made in other languages (often C and C++). If anything people who tried to use VB as the implementation language for complex stuff regretted it later.

I agree about Delphi and C++ Builder though, but Borland seemed hellbent on chasing enterprise unicorns - and pricing their products according to those dreams - so the software and the ecosystem suffered because of it.

I'm not sure about Smalltalk since i haven't used it much to know, although the first time i came in contact with was with a demo of IBM's VisualAge Smalltalk that was given on a magazine coverdisk and i ran away screaming (ie. deleted it immediately) when it took ages for the environment to load and do anything on the 4MB 386 i had and even then after following the simplistic tutorial it created an "executable" (that actually needed some other stuff to run) that was like 10MB (which for my 130MB HDD was a gigantic waste of space). Of course that was probably the entire image, but i didn't knew it at the time - and it wouldn't change much really, i needed the space for games and other stuff :-P.

I remember liking being able to drag arrows between elements in the GUI to hook events and properties together. I haven't seen that bit in the little i played with Pharo some time ago, i wonder if it was VA-specific. I tried to run the demo when i got a better PC, but for some reason it wouldn't work in Windows 95 and it has been years since i lost the disk. I wonder if it is available somewhere online but all searches point me to IBM's pages that have nothing.

<comment><USER11> Starting with version 5, VB allowed the creation of COM components natively, and could generate pure native code, not like the previous versions that just embedded the p-code inside a binary with a VM.

I have seen several enterprise level applications, with distributed objects (DCOM) and transactions, written purely in VB.

Including my first sight of an "Electron" app, exposing several COM libraries, written in VB, into a MSHTML container, using those objects from JScript in the page!

Regarding Borland, when Java came into picture, the company was still doing alright, and their Java development environment was designed similarly to the Delphi and C++ ones.

Their problems and change of focus came afterwards, when they lost a few people to Microsoft, including Anders, whose first project was to design Microsoft's Java implementation, J++.

<comment><USER3> VB5 indeed allows that (i have a VB5 box i got off ebay some time ago :-) and i've spent a lot of time with that and with CCE before that), but the language isn't really that friendly towards complex applications. But FWIW i think that VB lost its way around version 4 or 5 anyway :-P.

About Borland and Java, i actually have JBuilder 2 (again off ebay - i collect old development software :-P) and yes it does look nice and sort of friendly (although it is far from Delphi's level of ease of use). I think the entire thing is built on Java too. Sadly it doesn't seem to work in modern Windows - even the applications it creates throw exceptions.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER12> Neat, there's a multi-user mode: [http://jspaint.ml/#session:test](http://jspaint.ml/#session:test)

<comment><USER13> It's currently being destroyed. It's AWESOME

<comment><USER14> Come for the 90's nostalgia. Stay for the websocket fight in a phonebooth.

<comment><USER12> That was chaos...

</comment></comment></comment></comment><comment><USER15> The site works nicely in my browser (Chrome).

I feel like this mockumentary is not getting enough credit:

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

\- "We worked for eight months in a facility in California to figure out what were the best twelve colors to include in Paint"

\- Can we make this line thinner? \- No. \- Ok.

I have not used Paint for any real work in the past, other than saving screenshots. Ever since MS started shipping the snipping tool, I hardly use this function.

</comment><comment> bn-usd-mistake This is awesome! Please consider adding a license so we can self host it [2] Github has a helpful website [1] on choosing a license, I personally like MIT but it's your choice and there are plenty of options :)

[1] [https://choosealicense.com/](https://choosealicense.com/) [2] [https://github.com/1j01/jspaint/issues/18](https://github.com/1j01/jspaint/issues/18)

</comment><comment><USER16> Be careful if you're browsing fullscreen.

Here I am casually clicking HN posts when suddenly my brain thinks it's the 90s.

<comment><USER4> I wasted 15 minutes drawing random shapes too.

</comment></comment><comment> pi-squared Oh My, so many memories, so many hours spent on this program. Such a fan of MSPaint, thank you for doing this, absolute hero!

Few nitpicks and more of showing off how much I care and love what you've done:

* polygon is antialiasing - it shouldn't * rubber cursor is wrong * circle and rounded rectangle tools are filling their insides when they shouldn't * Text works in zoom mode - it didn't used to (not sure if bug or feature) * Color picker is way too modern :D

But man, even stretch/skew are implemented, awesome job!

</comment><comment><USER17> Github Repo: [https://github.com/1j01/jspaint](https://github.com/1j01/jspaint)

</comment><comment><USER18> The attention to detail is amazing. Almost every feature is there and responds as it would on a real windows computer. There's even the help screen.

<comment><USER19> Shame that it uses the native colour picker...

</comment></comment><comment><USER20> I love how the filesystem stuff is handled! Very smooth, with Open/Save acting like a native application.

<comment><USER21> It's not _acting_ like a native application, the open file dialog _is_ the native open file dialog that'll display differently depending on the OS/platform you're on.

<comment><USER20> Right, but many websites have a "Browse for file..." or Import/Export popup which then launches the native file dialog, or the Save function opens the image in a new tab or something. They're making it as close as technically possible to MSPaint's behavior.

</comment></comment></comment><comment><USER22> 1\. Instantaneous startup. 2\. Simple, familiar GUI. 3\. Automatically saves file locally, files can by loaded by url.

I wish more webapps were like this.

</comment><comment><USER23> I love labors of love like this. It seems that beyond the goal of being useful, there's a strong nostalgic theme to the project which is apparent in the attention to the detail in recreating the old interface as exact as possible. Check out the Help Topics...

</comment><comment><USER24> What is really neat is that I guess this is what's implemented in the Windows 98 remake too :)

[http://98desktop.ml/](http://98desktop.ml/)

I wish computers looked like this again.

<comment><AUTHOR> It's actually the same implementation used there. (See Help -> About Paint)

</comment></comment><comment><USER25> #Offtopic

TIL, MacPaint 2.0 was sold for US$125. And that MacPaint 1.3's source code was provided to Computer History Museum due to support of Steve Jobs.

Maybe it's time to email Bill Gates?

[https://en.wikipedia.org/wiki/MacPaint#Release_and_version_h...](https://en.wikipedia.org/wiki/MacPaint#Release_and_version_history)

</comment><comment><USER26> It's missing the zoom bug, which lets you zoom all the way to 10x by clicking just under the 8x button. Personally I was very fond of that.

<comment><USER27> There's an issue for that: [https://github.com/1j01/jspaint/issues/35](https://github.com/1j01/jspaint/issues/35)

</comment></comment><comment><USER28> You have no idea how much this means to me <3

</comment><comment><USER29> I'm amazed. This webapp even supports opening files via dragging them from the desktop or Windows Explorer. This fact alone makes it more "native" than most (all?) UWP applications.

</comment><comment><USER30> I wonder if "Jim'll Paint It" has seen this?

He's got to be the highest profile MS Paint user in the world by now.

[https://jimll.co.uk/](https://jimll.co.uk/)

Edit: For those who don't know Jim, from the website:-

"Jim'll Paint It is an ongoing collaboration between Jim and the thousands of complete strangers who send him their weird and wonderful ideas. Using Microsoft Paint, Jim has painted hundreds of suggestions ranging from the sublime to the ridiculous - each free of charge."

</comment><comment><USER31> Funny but I would really appreciate a good Paint.Net remake (usable on Mac, Linux and OpenBSD) more.

<comment><AUTHOR> Pinta comes close to that, and is free software, unlike Paint.NET. [https://pinta-project.com/pintaproject/pinta/](https://pinta- project.com/pintaproject/pinta/)

<comment><USER32> I thought Paint.NET was free, just not OSS? I installed it on a machine a few weeks ago, no payment changed hands..

<comment><USER31> It's free but still Windows-only. I use it on Windows machines but miss it heavily on Mac and Linux. Perhaps somebody would actually port it to Mono if it was truly free.

<comment><USER27> It has too many dependencies beyond .NET and Windows Forms by now. Text rendering is DirectWrite, for example, other parts use Direct2D, the UI partially uses WPF as well if I remember correctly.

<comment><USER31> I see... I used to think it's just WPF to be replaced with the old UI that was there until some version.

</comment></comment></comment></comment></comment></comment><comment><USER33> Breaks the back button in Firefox.

</comment><comment><USER34> Props for them for getting all the features work smoothly on a phone as well.

</comment><comment> tim-- There is a hidden 'Extras' menu which provides additional functionality, like shared whiteboard screens :)

[http://jspaint.ml/#session:tim](http://jspaint.ml/#session:tim)

</comment><comment><USER35> The most valuable thing to me about MS Paint is the ability to print screen, CROP the largely extraneous material, and post, embed, or transmit the result.

Where is crop? I am not interested in the drawing with a bar of soap aspect. At all.

<comment><USER36> Paint didn't have the ability to crop to a selection until the Windows 7 redesign of the app with its ribbon UI (not sure about the Vista version of Paint, which is halfway between the XP and the 7 versions); JS Paint has copied the XP and earlier design, not the newer. You can still crop, but only from the bottom or right, because you're using the canvas resize handles instead.

Concerning your specific task: I'd say the Snipping Tool (built-in from at least Windows 7 onwards) is generally superior for that sort of thing anyway. Its biggest problem is slow start-up.

<comment><USER8> You could do cropping in Paint since at least the Win95 version. The method was the same I use with Paint to this very day: a combination of canvas resize handles and moving the image contents. Basically, after pasting the picture, I would use the selection that is automatically activated (if you lose it, CTRL+A to select all) to crop out top and left parts of the image, by positioning the top-left corner of what I care about at the top-left corner of the canvas. I would then use the bottom-right "resize canvas" handle to crop out the rest.

"That's how Dad did it, that's how America does it, and it's worked out pretty well so far."

<comment><USER37> I'd select the section I'd want to crop, copy it, create a new image, resize it to 1x1 or something else small, then paste. The canvas would automatically resize to fit the pasted selection. It sounds a bit more involved than your version, but for me it worked.

<comment><USER8> Yeah, I noticed this mechanism (probably even used it a few times), but I eventually gravitated towards something with less clicking.

I do that in Paint.NET a lot, though. I select the part of the image I'm interested in, and then in two keyboard presses (CTRL+C, ALT+CTRL+V, AFAIR) I copy it and "paste into new image".

</comment></comment></comment></comment></comment><comment><USER38> This is amazing! Thank you for sharing this

<comment><USER39> +1

</comment></comment><comment><USER40> Have seen a Dutch artist using MS Paint to create his/her work in Hermitage museum. Quite impressive. It's a shame I cannot remember the artist's name any more.

</comment><comment><USER41> On Firefox there's noticeable lag, and non-straight lines look kind of weird (feels like it's trying to make non-straight lines out of bunch of straight lines).

On chrome there's no lag, but every time I draw something, all other elements I drew before change colour. At first to bright green, then they just fade to white as I draw more lines or whatever. As it is right now, it's definitely not a good 'replacement'.

</comment><comment><USER42> I love this! Genius!

I personally use Figma ([http://figma.com](http://figma.com)) - which is an incredible vector drawing tool!

<comment><USER43> Been using Figma for a while now for prototyping, drawing etc. It's really easy to learn and use and has great features. e.g. multiplayer mode.

</comment></comment><comment><USER44> MSPaint had some hidden treasures. The first thing I tried was the right- click-while-drawing-cancel feature. Alas. Love seeing the old graphics however.

<comment><USER45> That's an actual issue in the repository. It's supposed to have worked before, but apparently broke in a recent Chrome update, sparking a re-implementation that broke in all browsers.

</comment></comment><comment><USER46> Now make a desktop app out of this using electron!

<comment><USER27> There's an issue for that: [https://github.com/1j01/jspaint/issues/2](https://github.com/1j01/jspaint/issues/2)

</comment></comment><comment><AUTHOR> Today the author added support for transparency, and thereby also shift+left- click brushes from current selection. My most favourite MS Paint feature. [https://github.com/1j01/jspaint/issues/23#issuecomment-35851...](https://github.com/1j01/jspaint/issues/23#issuecomment-358516049)

<comment><USER47> Thanks for update. I was wondering about that too.

</comment></comment><comment><USER48> Aww. I selected an area then tried to use the arrow keys to translate one pixel at a time. Didn't work :(

Then I tried to cut and paste. No go.

Still, very promising!

</comment><comment><USER49> This is amazing! Superb remake. :)

I'm happy and sad. Happy because MS Paint is amazing and now having it in web form is great. Sad because I was just talking about doing this this week for hackathon. I ultimately did something else, and probably wouldn't have turned out this great.

</comment><comment><USER50> The oval tool doesn't respect the fill setting. It is always opaque! Otherwise, fun project! Now, make a js version of photoshop! (I've done several js painting programs, some with pretty unique brushes and weird "helpers".. they're pretty much all in my private repo doing nothing lol)

</comment><comment><USER51> I still on occasion use MS Paint. I know there have been other tools introduced since MS Paint with more features and such...but much like a trusty *nix command line tool that's always there and always trusty...I hold a special fondness for this classic program. Kudos to the author for this project!

</comment><comment><USER52> Upon opening the page it allocates 12 times the amount of memory I had in the computer I first used MS Paint on. God only knows how much processing power it's using.

Also, I get the distinct impression it's less responsive than that computer used to be.

</comment><comment><USER53> Really brings you back to the good old days =) Even got the help topics exactly as in the original

</comment><comment><USER54> Can someone explain to me how the live sessions feature was built? I was looking through the projects github, and saw something about firebase, but I'm not too sure how it works.

</comment><comment><USER55> And built with jQuery. Yeah, I can feel the burn of those edgy react and angular devs...

<comment><USER56> I like JS Paint, because everyone is already familiar with the GUI and it should "just work" on any platform thanks to being a web app.

The problem with JS Paint for me is that it doesn't run in my somewhat old version of Safari; I had to open Chrome/Firefox just to test it. For something to really be universal, it needs to work on every platform, including non- jailbroken old iPhones and Macs with their default browser (yes, I'm making an analogy between Safari and Internet Explorer).

</comment></comment><comment><USER57> This is amazing , really brings me back to those sweet old days. Just curious, is this built with any JS framework ? the code looks like its vanilla JS !! which is fantastic .. and is it open source / Github project ?

</comment><comment><USER58> It is not that useful as MS Paint. Several people use it for pixel-precise artwork, just like Deluxe Paint was used on DOS and the Amiga. However, this editor draws single OR double pixels on lines that are freehand.

<comment><USER59> > this editor draws single OR double pixels on lines that are freehand.

So does MS paint.

</comment></comment><comment><USER60> Atwood's Law in full effect here!

[https://blog.codinghorror.com/the-principle-of-least- power/](https://blog.codinghorror.com/the-principle-of-least-power/)

</comment><comment><USER61> Seriously cool. Love the old school UI. It immediately put a smile on my face. It works great on mobile. I did find a bug though. If I switch to red, I can't switch back to black. Android, chrome.

</comment><comment><USER62> Shapes are always filled with an outline, no matter which option I choose. Apart from that it looks really good, and I don't have performance problems that some people report.

</comment><comment><USER63> Does it work for everyone in Firefox? For me it doesn't draw anything, nor does it open any of the menus (just clicks work). In Chrome everything works perfectly for me.

<comment><USER64> Works fine for me, Firefox 57.0.4 on Linux.

<comment><USER63> Thanks for confirming. I need to investigate what's wrong with my FF then.

</comment></comment></comment><comment><USER65> Great work! it brings back so many memories =) I was trying it in Chrome on iOS and it seems that it considers each color square as a text entry, kinda annoying

<comment><USER66> I have the exact same feeling, this feels so nostalgic

</comment></comment><comment><USER67> Here's another session for my mates

[http://jspaint.ml/#session:asnee](http://jspaint.ml/#session:asnee)

</comment><comment><USER68> I never got people's love of MS Paint. There is so little it could do, and it didn't always want.to play nice with modern image formats.

<comment><USER69> Nostalgia. Many of us spend hours making drawings as a kid, since it was basically the only thing to do next to mine sweeper. Just like we all miss clippy, useless as he was.

<comment><USER70> But even then, MS Paint was pretty much a copy of 1984's MacPaint, which pioneered that type of program.

<comment><USER37> Nostalgia doesn't cite sources. I've never used MacPaint. I've used MS Paint, though, pretty extensively, all through the 2000s.

</comment></comment></comment></comment><comment><USER71> The author forgot that one could further increase or decrease the size of the eraser and brush tools by pressing Ctrl++ and Ctrl+-.

Other than that, really nice!

</comment><comment><USER72> Oh...those lovely childhood memories using MS Paint on Windows 3.1 (although this looks like the Win 98 vesion)..thanks this is awesome!!

</comment><comment><USER73> Imagine an Electron app of this! Then JS paint could be run right from the desktop.

</comment><comment><USER74> That's interesting, I guess the author have that same feeling with me when I tried to create the same thing with Windows 7 on my personal website [https://dinhquangtrung.net](https://dinhquangtrung.net), just that my Windows 7 is not ready feature complete because I was too lazy, haha.

</comment><comment><USER75> Amazing. It looks identical. Unfortunately, can't save images from safari on iPhone.

</comment><comment><USER76> Gives back so many feels of bored painting projects I've done before

</comment><comment><USER77> Patina is a good MS Paint-like, on the Mac App Store for two dollars or so.

</comment><comment><USER75> Amazing. It looks identical. However, can't save images on iPhone.

</comment><comment><USER78> Please turn off anti aliasing and it will be perfect!

</comment><comment><USER79> I've been waiting for this my entire life.

</comment><comment><USER80> Really works well with touch screen, kudos

</comment><comment><USER81> YES - thank you!

</comment><comment><USER82> Would be nice if it could output SVG!

<comment><USER27> I'm not sure

        <svg xmlns="http://www.w3.org/2000/svg" version="1.1">
          <image xmlns:xlink="https://www.w3.org/1999/xlink" xlink:href="data:..." width='800' height='600'/>
        </svg>

is a particularly interesting SVG image that has any benefits over the equivalent PNG.

<comment><USER82> I mean that the image should be saved in vector format! Not bitmap.

<comment><USER27> Paint is a bitmap image editor. What would you like the result to be? A <rect> for every pixel placed by the pencil tool?

<comment><USER82> The pencil tool could create a svg path.

</comment></comment></comment></comment></comment><comment><USER83> Love the keyboard shortcut support!

</comment><comment><USER35> Where is crop? To me, the most valuable tool in MS Paint. What? Did you think I used it for "drawing with a bar of soap?"

<comment><USER84> I don't think Paint (at least the version this is replicating) had a crop feature.

I always used to do:

\- Ctrl-A (Select All)

\- Ctrl-X (Cut)

\- Ctrl-E, 1, Tab, 1, Enter (Resize image to 1x1 pixel)

\- Ctrl-V (Paste)

</comment></comment><comment><USER85> Has the help menu and all hahaha

</comment><comment><USER86> [https://imgur.com/I66J4Ys](https://imgur.com/I66J4Ys)

</comment><comment><USER87> Killer App

</comment><comment><USER88> INSANE

</comment><comment><USER89> I don't understand why it needs to hijack the back button.

<comment><USER90> It changes the URL to store the image in a specific session, so if you close the tab by accident you can reopen it from history (or ctrl+shift+t in some browsers)

I've opened an issue for it now here: [https://github.com/1j01/jspaint/issues/49](https://github.com/1j01/jspaint/issues/49)</comment></comment>