Reddit's /r/place April Fools Experiment [video] - <AUTHOR> https://www.youtube.com/watch?v=XnRCZK3KjUY <comment><USER2> A detailed explanation of what this is, for those unaware:

For April Fools' Day this year, Reddit ran a social experiment in which they gave each of their users the ability to paint one 4-bit color pixel on a 1000x1000 grid once every 5 minutes. A new subreddit, /r/place, was created to host the event, which lasted 72 hours. This video is a timelapse of the entire image.

I found this whole thing to be incredibly fascinating. It's pretty amazing to see how everyone just sort of spontaneously banded together to create little works of art on the board which they could never have made on their own. Everytime I watch this timelapse I notice something new.

It's also interesting to note that because the impact of any individual user on the board was pretty limited (you could only place one pixel every 5 minutes, and even then there was no guarantee the first pixel you placed wouldn't be overwritten by someone else before you were even allowed to place another), every significant piece of artwork on there had tens or even hundreds of people involved in creating and maintaining it.

In addition to the various artworks on the board, there were also several major factions scattered throughout the board with their own goals. /r/TheBlueCorner dedicated themselves to filling the empty space in the bottom right corner of the board with blue pixels, while /r/theblackvoid formed to erase various artworks by replacing them with black tiles. If you pay attention you may also notice several other factions in the timelapse.

Other interesting events to note include [the German invasion of France]([https://www.youtube.com/watch?v=ParHJmq2aCs](https://www.youtube.com/watch?v=ParHJmq2aCs)) (and resulting peaceful resolution), [The Void's (unsuccessful) attack on the OSU logo]([https://i.imgur.com/Tpmvrcc.gif](https://i.imgur.com/Tpmvrcc.gif)), and [several factions ganging up to attack the US flag]([https://gfycat.com/InfamousShyEeve](https://gfycat.com/InfamousShyEeve)) while most of the US population was asleep. There's plenty of other stuff you might notice too if you look hard enough. (For example, can you find Waldo?)

[Here's the final result]([https://i.imgur.com/ajWiAYi.png](https://i.imgur.com/ajWiAYi.png)). Other interesting stuff to note include [this animated heatmap]([https://i.imgur.com/a95XXDz.gifv](https://i.imgur.com/a95XXDz.gifv)) by /u/jampekka of activity on the canvas, and [this graphic]([https://i.imgur.com/SEHaUSJ.png](https://i.imgur.com/SEHaUSJ.png)) by /u/alternateme highlighting all the white pixels which never got touched throughout the experiment.</comment>


Qubes Air: Generalizing the Qubes Architecture - <AUTHOR> https://www.qubes-os.org/news/2018/01/22/qubes-air/ <comment><USER2> I'm a heavy user of Qubes OS. The "Convert to Tusted PDF" feature is something I use almost daily.

My use case is examining, cleaning and possibly distributing application letters and CVs. If you have to read job application letters, the advice to just open files from people you trust, just doesn't work. The amount of untargeted malware we receive through this channel is considerable. We had targeted attacks too.

I've known about Qubes OS for a long time but interestingly the advice to use it for all processing of application letters didn't come from my tech circles but from a recruiter.

Given the strict laws about data retention in my jurisdiction (Germany) a cloud solution (short of homomorphic encryption) probably isn't going to work for me. The idea of using discrete devices sounds interesting though.

<comment><USER3> Have you considered a jailed pdf reader application instead? I'm curious what the decision factors were important for you.

<comment><USER4> So everyone downstream of weinzierl has to be aware that (1) the PDFs he hands them may be full of malware (2) have to use VMs (3) must open said malware- packed PDFs in a disposable VM (4) must strictly adhere to D-VM usage protocol.

<comment><USER5> Or weinzierl could print them and possibly rescan for further distribution.

<comment><USER6> My first solution would be improving reader security by starting with one with decent code (Espie suggested MuPDF), compiling it with something that makes it memory-safe, and running it in a sandbox on separation kernel (eg Genode or Muen). Then, a memory-safe conversion tool turns it into something more trustworthy. This might even be batched on simple hardware which itself has lower attack surface. Later on secure hardware like CHERI CPU albeit that can happen today if you have FPGA board and skills to run their HDL code.

For fun, though, I'll dust off an old concept since you're talking printing. One might start by printing them to a virtual screen like in Nitpicker GUI with the untrusted reader. Aside from isolation, there could be a feature to convert what's on the virtual screen or page into a compressed image. A PDF with N pages becomes a zip of N images or a single image of some size. That itself could be distributed to run in the trusted, safe viewers we already should have, right? ;) It might also be run back through similarly- deprivileged OCR to turn into a safer format. Gotta eyeball it if doing it that way. That said, there are fonts that work well with OCR that it might be converted to as part of image production if OCR is the goal in the first place.

Could be a fun, little project teaching folks about a number of topics at once.

<comment><USER4> > For fun, though, I'll dust off an old concept since you're talking printing. > One might start by printing them to a virtual screen like in Nitpicker GUI > with the untrusted reader. Aside from isolation, there could be a feature to > convert what's on the virtual screen or page into a compressed image. A PDF > with N pages becomes a zip of N images or a single image of some size. That > itself could be distributed to run in the trusted, safe viewers we already > should have, right?

Which is literally what Qubes "Convert to trusted PDF" does.

> My first solution would be improving reader security by starting with one > with decent code (Espie suggested MuPDF), compiling it with something that > makes it memory-safe, and running it in a sandbox on separation kernel (eg > Genode or Muen). Then, a memory-safe conversion tool turns it into something > more trustworthy.

It would of course be preferable to have a secure PDF reader to begin with, but the complexities of the PDF format doesn't isn't really conducive to that.

<comment><USER7> > It would of course be preferable to have a secure PDF reader to begin with, > but the complexities of the PDF format doesn't isn't really conducive to > that.

pdf.js exists!

<comment><USER6> I thought pdf.js was a Javascript application in a browser on a full OS with all the risks that come with that versus a memory-safe, native code in a deprivileged partition or container. Web tech isnt my strong area do I could be wrong. Do correct if it's not a browser or JS tech built in unsafe language.

And it's a little strange your reply to memory-safe code for a PDF reader is that an "unsafe one exists, just use it" when you or your colleagues are currently applying my recommendation to the browser hosting it via Rust and Quantum.

You're doing one thing that matches the language part of my recommendation while saying we should do the opposite about a type of program that's similarly high risk. Quite the contradiction.

<comment><USER7> JavaScript is a memory-safe language!

<comment><USER6> This is really confusing for me since you keep implying JavaScript is all we need for safe, secure, efficient, and/or low-TCB apps like this one parsing and rendering PDF's. Yet, you arent rewriting Firefox parsers and renderers in Javascript: you are using a new language with the properties I just named. Properties shared with safe C/Java/Ada subsets used in embedded but with even more safety added (borrow-checker). That's probably because you didnt trust Javascript to do the job efficienty, securely, and without leaks.

Now, you do in this thread if it involves a risky format attackers love. I dont. I think complex languages running in large apps increase attack surface. So, I still recommend strong sandboxing whatever parser/renderer one uses plus developers in security-focused projects (eg Qubes) using compilers or languages offering safety if having resources to spare. Everyone contributing a little gives us more building blocks over time.

And far as your other comment, there are always new ways to turn C code safe or secure being developed. C++ might also be able to use them via a C++ to C compiler but has stuff like SaferCPlusPlus to help. For C, options to attempt include Softbound+CETS, SAFEcode, Code Pointer Integrity, and dataflow integrity. At least three are FOSS with one I havent checked yet. So, they exist. They could also be in even better shape if security tool builders put more time in them.

All Im saying on this since you seem set on Javascript for efficient, secure apps. We arent going to agree on that premise.

<comment><USER7> I'm not saying pdf.js is fast. I'm saying that it's fast enough to be a useful tool to read most PDFs securely (which in fact millions of Firefox users do!), and it has the large advantage of actually existing, unlike complex schemes involving vaporware compilers and Ada in the kernel. (If you care about _fast_ secure PDF viewing, write a new PDF renderer in Rust or Java or Go or whatever. This doesn't have to be a complex problem.)

By the way, SaferCPlusPlus is not memory safe, and porting a PDF rendering code base to use it would be about as much work as rewriting the renderer in a safe language.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> Wonder about their progress of integration[1] with ReactOS.

[1] [https://github.com/QubesOS/qubes- issues/issues/2809](https://github.com/QubesOS/qubes-issues/issues/2809)

<comment><USER9> Me too

<comment><USER10> That would be amazing...especially for helping transition people who feel uncomfortable with Linux type environments.

</comment></comment></comment><comment><USER11> This was an awesome read. These guys are doing some of the most groundbreaking work in computing right now.

The idea of having an "operating system" made up of components dispersed across the globe seems like a fantasy that is too good to be true.

If Qubes can finally provide a method for passing through NVIDIA GPUs with this kind of architecture, Xen or not, that would be incredible. It's the only reason I had to leave Qubes.

<comment><USER12> Why would you want something like that though? What are the benefits that are worth the huge amount of overhead of having to pass through the internet to connect components?

I mean I get cloud computing and such, but this seems to be aimed as a consumer OS, which is very sensitive to delays and whatnot.

<comment><USER13> One reason: the prospect of an endless stream of unpatchable Spectre-like hardware vulnerabilities.

The "real problem" exposed by Meltdown and Spectre is running untrusted software on the same hardware where sensitive information resides. Moving away from physical coupling defends against potential sidechannel attacks.

The Qubes approach of "careful decomposition of various workflows, devices, apps across securely compartmentalized containers" seems to point a way forward after this sobering assessment:

[http://robert.ocallahan.org/2018/01/long-term- consequences-o...](http://robert.ocallahan.org/2018/01/long-term-consequences- of-spectre-and.html)

<comment><USER4> > The "real problem" exposed by Meltdown and Spectre is running untrusted > software on the same hardware where sensitive information resides.

Well obviously. Which is why people try to avoid that as much as they can when they are handling actually sensitive information.

> Moving away from physical coupling defends against potential sidechannel > attacks.

... is a correct deduction, but using cloud VMs hardly qualifies as following the principle (except if they are only used for lowest-privilege stuff, but even then, the system now requires connectivity). Now you _don 't_ know who else is on your hardware, and you don't even control the hardware in the first place.

</comment></comment></comment></comment><comment><USER14> Qubes runs mostly on computers with Intel CPUs.

It's good of them to admit that the layers-upon-layers approach just doesn't bring in any additional security if you have buggy/unsecure hardware.

<comment><USER15> _Amen_. Huge silver lining to Meltdown has been raised awareness over what a mess our hardware is.

As long as we're in Intel x86 land, the Plan 9 service-per-box approach is probably about the best we can do, and I'm not saying that with any joy, or as an endorsement.

Or, perhaps we can claw our way back to the 1960s and reclaim working memory protection? As obvious as that sounds, I wouldn't take it for granted. People already accept all sorts of half-broken proprietary bullshit for GPU performance, bootloading, AMT, etc. From the mailing lists, looks like Intel is trying to normalize that for CPUs as well.

</comment></comment><comment><USER16> I think the cloud aspect is also quite interesting in the potential for a much cheaper remote desktop. Most applications don't require a beefy CPU, so just run them on something cheap and then just run anything demanding on a more powerful node.

</comment><comment><USER17> With the Qubes Air architecture, the unpopular Intel ME/AMT could be repurposed as a VNC server for web browsing on a dedicated device, e.g. old laptop. The AMT VNC client could be run in a thin Qubes VM. This would isolate the web browser (main x86 CPU), VNC server (Intel ME cpu) and VNC client (Qubes device CPU) on three physical processors. Usability would depend on performance of the AMT VNC server.

</comment><comment><USER18> Qubes would make for a great startup and, given the time, prob a very successful ICO.

I was positively and at the same time negatively surprised reading about the 30k users. All issues/obstacles reported don't seem so unachievable if one can imagine to focus on one specific hardware platform and with a good marketing team. I understand this is beyond a research project, but it would make for a great startup.

<comment><USER19> Why would Qubes do an ICO?

<comment><USER18> For the cloud, it would be an incentive to run the nodes, and you'd pay for the resource you're using. I'm not saying they should, Im saying it could be a good startup or, in this case, a good model for a blockchain-based company.

<comment><USER11> I think the idea is you just buck up and pay the cloud fees.

If you follow Qubes / ITL, you would know that they are hardly a "startup" as a decade-old company, and they have been experimenting with enterprise-level support. If they can find a home in the enterprise market, it will at least give them enough cashflow to continue developing Qubes for the foreseeable future.

Besides, I imagine Joanna Rutkowska's opinion on the ICO scene isn't a very positive one, and I don't think she wants to complicate her company by pivoting to a blockchain model that has absolutely no relevance to developing secure operating sytems.

<comment><USER18> I don't know how to write it better. I never said Qubes should change their biz model or do an ICO. Full stop.

All I said is that their product would be great in the hands of a startup that focuses on a single hardware platform and does more marketing, and/or does an ico because I see a great incentive to run nodes of the cloud (because qubes utself provides all the building block for trust).

> If you follow Qubes I do, since 2010, when I was doing very similar research > on trusted cloud computing.

> If they can find a home in the enterprise market I wish it to them, but this > doesn't mean someone else can try a more aggressive consumer route, or an > alternative for their cloud model.

I respect a ton their work, and as I said in my very first comment I think they should focus on the research part, and someone else could provide capital and grow the consumer product.

<comment><USER11> _I don't know how to write it better. I never said Qubes should change their biz model or do an ICO. Full stop._

 _All I said is that their product would be great in the hands of a startup that focuses on a single hardware platform and does more marketing_

That's strange, because the first sentence in your OP is:

 _Qubes would make for a great startup and, given the time, prob a very successful ICO._

<comment><USER18> Ooops, you're absolutely right and now I understand all the downvotes.

In my mind I was thinking to Qubes as the product(s), that could benefit from a startup. Similarly to as Kafka has Confluent, or Druid has Imply.

And I fully agree that Qubes the company should continue to be focus on research.

<comment><USER11> FWIW, none of them came from me.

And I see the confusion now: Qubes isn't a company, the company is Invisible Things Lab.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER20> This is interesting. However, I don't get how stuff in the cloud can be considered secure. Unless you trust them, anyway. And also, I'm reminded how little privacy seems to matter for Qubes devs.

Edit: OK, I take it back. Replacing VMs with discrete devices on local networks is very cool. I just wish that they'd emphasized that, and then talked about using cloud resources. Indeed, what boggled my mind is that someone would go through the hassle of learning Qubes, and then put some of it in the cloud.

<comment><USER18> Uh!? What's the issue with privacy? Qubes is great to make sure you don't get a malware while you watch "youtube", and this malware gets access to your bank account. I feel privacy is kind of out of scope here, not that you don't need it, but you can plug it in with ease. There's nothing in qubes design that prevents privacy.

Cloud is just a way to distribute computation, and make sure storage is always available to you. Everything should be assumed to be protected — I mean, they protect video memory among processes/apps, you'd bet they protect your data on the cloud.

<comment><USER20> There is currently no way to keep cloud stuff private. Maybe one day homomorphic encryption will be usable. And without that, the cloud provider can see everything. You can, of course, encrypt stuff locally first. But that's only good for static data.</comment></comment></comment>


New China Cities: Shoddy Homes, Broken Hope - <AUTHOR> http://www.nytimes.com/2013/11/10/world/asia/new-china-cities-shoddy-homes-broken-hope.html?hp&_r=0&pagewanted=all

<comment><USER2> The carefully reported article here reports a number of start facts, among them how the new town profiled here began: "The local government used intense pressure to force farmers out of their villages. It tore up roads and cut electricity and water. Even so, thousands stayed on. As a final measure, the schoolhouses — one in each village — were demolished. With no utilities and no way to educate their children, most farmers capitulated and moved to town."

These housing developments promoted by corrupt local government officials are the leading indicator of a coming collapse of the real-estate market in China.[1][2]

As the article kindly submitted here points out, most of the "investment" in new housing in China is destructive malinvestment that reduces wealth. "Some residents wonder why they went through these travails when so little development is visible. Outside the town, most of the former township lies empty. Some hotels and office blocks have been built next to the airport logistics center. But mostly, one is confronted by mile after mile of empty lots — once farmland, now lying fallow, sometimes blocked from view by endless sheet-metal fences painted with propaganda about prosperity and development."

Yes, China has an increasing population, just as the United States had before its housing market bubble burst, but just like the case of the United States a few years ago, the current residential housing market in China is based mostly on speculation. The speculation occurs because middle-class investors cannot find a better investment vehicle, and because they are making unrealistic assumptions about future demand. What's unrealistic about the demand is that migrant workers moving legally to Chinese cities (as they already move illegally) will not possibly be able to afford current market prices for new housing units in China. Many tens of thousands of newly built apartment flats in China will not be occupied by paying renters or owners before they crumble because of their poor construction. The unknown is whether or not the current political system in China will crumble with them.

[1] [http://finance.yahoo.com/news/uncomfortable-truth-chinas- pro...](http://finance.yahoo.com/news/uncomfortable-truth-chinas-property- market-084546007.html)

[2] [http://www.forbes.com/sites/realspin/2013/10/28/in-china- the...](http://www.forbes.com/sites/realspin/2013/10/28/in-china-theres-not- one-city-sans-terrifying-stretches-of-empty-houses/)

<comment><AUTHOR> While the OP is another article in the long line of articles themed: "Big government planning has unintended consequences"...what stuck out to me in the OP was that the _intent_ of this plan was actually quite good and sensible, in terms of forward thinking as China grows:

> _The idea was to consolidate the villages into one new town called Huaming > that would take up less than one square mile, versus the three square miles > that the dozen villages had occupied. A portion of the remaining 59 square > miles could be sold to developers to pay for construction costs, meaning the > new buildings would cost farmers and the government nothing._

* The rest of the land would stay agricultural, but worked by a few remaining farmers using modern methods. This would achieve another aim: not reducing the amount of arable land — a crucial goal for a country with a huge population and historic worries about being able to feed itself.*

Consolidate the population into a city -- with lots of green space and modern apartments -- so that the land could be more efficiently farmed? Sounds like a great intention...but it's not the intention that's bad, it's the [insert your favorite reference to government bureaucracy/tendency for institutions to harm the individual].

What makes this article more depressing than most is its reaffirmation that more technology/modernization almost never benefits the people closest to it. For a very long time, farming has been unquestionably improved by technology and planning...but has that resulted in farmers living decent human lives as machines take over their work? Not always. So I think it's quite optimistic to think that as other classes of citizens find their work automated and modernized, they too will not reap the promised benefits, even if society, in the long run, benefits.</comment></comment>


AngelList for Developers - <AUTHOR> http://DevelList.com

<comment><USER2> "We're the AngelList for Developers"

Ok, so now, instead of trying to figure out what one company does, I have to figure out what two companies do!

</comment><comment><USER3> Are there any other sites that play matchmaker between developers and start- ups??

<comment><USER4> Mine. I am working on something particularly clever. We'll start with HackerDojo and SemanticSeed. :)

I'll announce it here when the "unpretty" version starts to work.</comment></comment>


Why "Tinder for Friends" is a Terrible Idea - <AUTHOR> https://medium.com/@baronwilleford/why-tinder-for-friends-is-a-terrible-idea-5d8f2f643245#.uv72nu89y <comment><USER2> so krewe is reddit's Robin but for in-person interaction?</comment>


Ask HN: Good Drupal resources? - <AUTHOR>

I just picked up a small job rewriting a website that uses Drupal. I know nothing about Drupal. I told the guy who wanted to hire me that I know nothing about Drupal, and he said "That's ok, you're a fast learner." Also, he wants it done within a month or so.<p>I'm currently reading Drupal.org cover to cover, but can anyone recommend some good Drupal resources? <comment><USER2> Smashing Magazine has an article with links to many resources:

[http://www.smashingmagazine.com/2008/09/24/drupal- developers...](http://www.smashingmagazine.com/2008/09/24/drupal-developers- toolbox/)</comment>


Panoramio no longer available after November 4, 2016 - <AUTHOR> http://www.panoramio.com/maps-faq <comment><USER2> People not happy at all obviously [https://groups.google.com/forum/m/#!topic/panoramio- question...](https://groups.google.com/forum/m/#!topic/panoramio-questions- support/dw3UYp1lQdY)</comment>


The 2009 List Of Tech Billionaires And How Much They Lost - <AUTHOR> http://www.techcrunch.com/2009/03/13/the-2009-list-of-tech-billionaires-and-how-much-they-lost/ <comment><USER2> from that list it looks like Bloomberg is the only one who knows what he is doing.</comment>


Corporate volunteerism: Not the why, but how (for companies large and small) - <AUTHOR> https://csrtech.org <comment><AUTHOR> Hey HN!

I'm Emma Sullivan, Co-Founder & CEO of UK social enterprise Prospela.com.

Last year, I was one of 150 British citizens awarded a research fellowship to investigate inspiring practices abroad and return with innovative ideas to benefit people across the UK.

I travelled some 11,000 miles across the US & Canada as part of the Churchill Fellowship, to explore best practice and the use of tech in helping a wider range of businesses engage in corporate volunteerism.

Having met some 60+ leading corporates, high-growth start-ups, SMEs and thought-leaders (such as the UN and WEF), the result comes in the form of ten Benchmarks defining strong corporate volunteerism execution which are applicable to companies of varying sizes (established, high-growth and SME). My aim now is to support companies in strong volunteering delivery in the education world specifically, through my start-up Prospela.

I encourage you to explore the CSRtech Benchmarks in detail alongside my other findings at CSRtech.org.

Get in touch - would love to hear your thoughts!</comment>


Ask HN: Does this Microsoft KB hotfix download work for anyone? - <AUTHOR>

I have been trying to download this KB hotfix for the last week - it currently affects my TortoiseSVN as it constantly causes errors and is slowing me down.
Clicking on the following link and then requesting the hotfix always results in a "The system is currently unavailable. Please try back later, or contact support if you want immediate assistance." error. I am just curious if this error is the same result for others; thanks in advance.
KB link: http://support.microsoft.com/kb/982927 Hotfix request link: http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=982927&kbln=en-us <comment><AUTHOR> Clickables

KB link: <http://support.microsoft.com/kb/982927>

Hotfix request link: [http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=9829...](http://support.microsoft.com/hotfix/KBHotfix.aspx?kbnum=982927&kbln=en- us)</comment>


'Frostbite' toes etc. may be signs of hidden Covid-19, especially in young - <AUTHOR> https://www.washingtonpost.com/health/2020/04/29/coronavirus-rashes-toes/ <comment><AUTHOR> Actual title is "'Frostbite' toes and other peculiar rashes may be signs of hidden coronavirus infection, especially in the young" but edited for length.</comment>


George Steiner has died - <AUTHOR> https://www.newyorker.com/culture/postscript/the-seriousness-of-george-steiner <comment><USER2> Here's another one: [https://thecritic.co.uk/remembering-george- steiner/](https://thecritic.co.uk/remembering-george-steiner/)

</comment><comment><USER3> A great man has left us. RIP.</comment>


A marketplace for music teachers and students - <AUTHOR> My name is Feng Liu from Acho, www.acho.io, a early stage startup in Sunnyvale CA. We created a marketplace that connects music teachers to people who want to learn music.
Unlike other sites, we focus only on music lessons and it's entirely free as we build up our community. Eventually we plan to include other features, such as handling payments and scheduling.
We are in the very early stage and are looking for our first 50 or 100 music teachers as our early adopters. Anyone who wants to give private lessons, has a music degree, or is a musician should signup and create a profile on our website.
If you have any suggestion, feel free to leave a comment below or email me at firstname.lastname@example.com Thanks.
www.acho.io www.acho.io/join (teacher sign up) <comment><USER2> While you still can edit this submittal title, I suggest you precede it with "Show HN: ".

Otherwise:

1) Are those real-participant photos? If so, did they consent to having their photo on the front page? I'd leave individual details to after the user drills down to the individual's page, if at all. When choosing a music instructor, appearance should not be an important factor.

2) If putting a mailing address like that (I would move that to a Contact Us page), include the zipcode (94086). That looks like a residential block, though. There could be an arcane Sunnyvale business license requirement for what you are doing, so you might consider a separate mailing address instead, like a PO Box or private mailbox. Pro tip: for a PO Box, go to Santa Clara on Kiely -- it's a faster trip than Sunnyvale 94086.

3) The Search / Review / Contact elements look like they should be clickable. If those are just stubs, maybe put a rollover message there saying that.

4) I really like that violinists picture, but I'd shift the cropping to center the subjects better.

<comment><AUTHOR> Since this is my 1st post on hacker news and new user, could you tell me what is "Show HN"? Yes, I still can edit the post.

1\. sorry, those photos on home page are not real participant but those photos are ok to use. 2\. the address on home page is a business address 3\. yes, they are clickable 4\. yes, good idea</comment></comment>


IsMounted is an Antipattern - <AUTHOR> https://facebook.github.io/react/blog/2015/12/16/ismounted-antipattern.html <comment><USER2> Definitely true. Anywhere you see this general pattern it is probably hiding a bug like: [https://github.com/react-bootstrap/react- bootstrap/issues/11...](https://github.com/react-bootstrap/react- bootstrap/issues/1137)</comment>


Dismissing Meteor.js as a Toy - <AUTHOR> http://christopherdbui.com/post/2013/11/02/dismissing-meteor-as-a-toy.html

<comment><USER2> This article really does nothing to contribute to the discourse on Meteor. At best it would be a reasonable comment, but the content isn't worthy of an article.

The author admits to not having used Meteor (in any real way), but then goes on to defend it for ideological reasons: don't just say something is doomed to failure, because we cannot predict whether it's the next Rails/Node/etc.

Target the framework you're writing about specifically. This article would be just as valid in its logic if you replaced the word Meteor with any underdog library/framework.

<comment><USER3> Agreed, the article should have been a comment in the previous thread. It seems to be a popular trend on HN: when an author will write something that reaches the front page; moments later you'll see a counter article from the opposing point.

My only issue with this trend, is the low quality posts we see out of it, which are just attempting to steal some thunder so-to-speak. Sometimes you get valuable rebuttals. I just feel like most of the time these counter-point posts could just be comments in the original thread.

This author, go on to quote the thread (albeit plagiarizing) the comments, and what do we have at the end of it. A link to sign up to their Mailing List.

I'm unimpressed & annoyed by this post.

But I love Meteor & Rails.

</comment></comment><comment><USER4> I agree with your overarching sentiment in regards to this matter but I also agree with the with the comment you called out. The software market has significantly reduced friction/barriers to entry, considering this I think age/life-cycle is a valid point of criticism. It doesn't take much to start a project, boast its the next big thing even over mature static html, and then abandon it. I've dealt with using these kinds of projects with some assumption of stability and long-term reliability to be later left disappointed. So I don't think that commenter was simply being a naysayer but instead raises a valid remark on emergin software.

</comment><comment><USER5> In case people didn't read the blog post before coming to the comment section, the blog is actually defending Meteor as a new framework that might be worth observing.

I feel the same way about OP. Rails is awesome, but Meteor really excels at some things Rails lags behind in. Data binding between database and browser asynchronously which is doable in Rails but it is pain in the ass. Rails simply wasn't made for this kind of app. Times have changed and user are demanding different kind of UX for some apps. I am glad that there are new tools like Meteor in development to fulfill these roles.

<comment><USER6> I think that much of the reaction in the original post comes from the overly- bombastic headline: "Why meteor will kill Ruby on Rails". If it was sold as "Meteor.js: an exciting new technology for building real-time webapps", I could get behind that, because building real-time websites is currently hard and Meteor makes it easy (easier?). But if you say Meteor is going to kill Rails, you are positioning Rails as Meteor's competition: and when I look at what Rails is used for (quickly building multi-page DB-backed sites with relatively small levels of interactivity), Meteor _sucks_ at that job. There's little reason to use it, and a lot of reason not to.

Hype and blind optimism kills promising new technologies far more often than competitors do. Picking your competitors carefully is important. If you position Meteor against Backbone or Angular, you might have a case, and then we could evaluate based on the technical merits. But if you position it against Rails, they're built for completely different use-cases, and so of course Meteor is going to fall down.</comment></comment>


Are There Deep Reasons Underlying the Pathologies of Deep Learning Algorithms? [pdf] - <AUTHOR> http://goertzel.org/DeepLearning_v1.pdf <comment><USER2> The author clearly doesn't understand the Szegedy et al. result and isn't really saying anything interesting. Pretty much ALL machine learning image classifiers suffer from these pathologies from Szegedy et al. so calling them "deep learning pathologies" is absurdly misleading. Logistic regression has them too as do almost all algorithms that learn to classify images. Human visual systems can also get confused by sensory input that (too us) looks like some object, we just are much better at integrating evidence from other sources to suppress the mistaken neurons.

<comment><USER3> I guess you are referring to [http://cs.nyu.edu/~zaremba/docs/understanding.pdf](http://cs.nyu.edu/~zaremba/docs/understanding.pdf)

For those interested, the papers and discussion are part of this weekly collection of AI-related news and resources: [https://aiweekly.curated.co](https://aiweekly.curated.co)

<comment><USER4> He's also referring to this follow up paper which attempts to explain the issue and show that it exists in other models too: [http://arxiv.org/abs/1412.6572](http://arxiv.org/abs/1412.6572)

</comment></comment></comment><comment><USER5> I don't think this paper is very useful.

The author is from the OpenCog group, who have spent years building a structured knowledge base as a predecessor to building an artificial general intelligence. It isn't clear how AGI emerges from this work.

The OpenCog KB is a useful piece of work, but it's interesting to note that word/phrase embedding models (word2vec etc) can give similar or better results on most practical tasks that you'd use OpenCog for.

My view is that Deep Learning techniques are insufficient for an AGI, but are good candidates for component parts in the same way that the human optical system does significant preprocessing before hitting the "intelligent" brain.

Also thing like memory networks specifically address some of the episodic memory issues the author raised.

<comment><USER6> _" I don't think this paper is very useful."_

That's probably correct. The author discusses a known problem; those mis- labeled images are well known, and have been discussed on HN before. It's clear that feature extraction in deep learning sometimes fastens on irrelevant features that somehow work. Some algorithms result in models where data points are too close to at least one decision boundary in a high-dimensional space, which makes them brittle when faced with small, noise-type changes. I don't know enough about the subject to know how that will be fixed, but there are people working the problem and they don't seem to be stuck.

Then the author, who is from OpenCog, goes on to claim, without supporting evidence, that OpenCog can somehow fix the problem. The paper proposed an "internal image grammar", but doesn't say much about what they mean by that or how to do it. Trying to decompose images into some symbolic representation has a long, disappointing history. The computational neural network people are getting results without doing that.

I think we're reading a grant proposal here.

<comment><USER5> Regarding the internal image grammar:

I know some people working using everyday knowledge to attempt to do better image labeling. The idea is that a tree is much more likely to appear in a park than in a kitchen, so you can bias the probable interpretations using that.

I guess that's what they could be talking about. But you need a CNN to get the basic partial label in the first place.

</comment></comment></comment><comment> bra-ket Semantic hashing by similarity is one way to create more sensible representations (Re: Proposition 2): [http://www.cs.toronto.edu/~rsalakhu/papers/semantic_final.pd...](http://www.cs.toronto.edu/~rsalakhu/papers/semantic_final.pdf)

This would also fit well into memory networks: [http://arxiv.org/abs/1410.3916](http://arxiv.org/abs/1410.3916), SDM: [http://en.wikipedia.org/wiki/Sparse_distributed_memory](http://en.wikipedia.org/wiki/Sparse_distributed_memory) or global workspace model: [http://en.wikipedia.org/wiki/Global_Workspace_Theory](http://en.wikipedia.org/wiki/Global_Workspace_Theory)

</comment><comment><USER7> "So one could view them as just being mathematical pathologies found by computer science geeks with too much time on their hands."

How is this a real paper ?

<comment><USER8> It's a valid point - if the failure cases aren't realistic they're not relevant. I would rather have an interesting paper with a colloquialism or two thrown in than yet another tiny methods variation paper written in Proper Academese. And by the looks of it this is basically a white paper or long, footnoted blog post in PDF form, not a submission to Nature.

</comment></comment><comment><USER9> I'm not sure I understand how image grammars (whatever that is exactly) suddenly pop up as a solution after such a long introduction. I could not find any evidence or literature about them in relation to learning.

The author is stating a hypothesis but no way to test it. I'm not sure what point he's trying to make.

<comment> bra-ket well if you take "sparse autoencoders"([http://web.stanford.edu/class/cs294a/sparseAutoencoder.pdf](http://web.stanford.edu/class/cs294a/sparseAutoencoder.pdf)) they basically give you principal components of the data, so from blobs of raw pixels you get a "dictionary" of lines in different orientation and size, like an edge detector. This is also similar to how the famous Fourier transform works ( [http://en.wikipedia.org/wiki/Fourier_transform](http://en.wikipedia.org/wiki/Fourier_transform)), it decomposes the raw signal like speech into its base forms or "harmonics". And if you add another layer (to a stacked autoencoder) it will extract higher level forms(e.g. basic shapes like triangles, ellipses etc) and so on until you get a dictionary of different forms, with each layer kind of compressing the signal into more compact summary. At the higher layer you can arrive at the abstract "chair" or "cat" representation which is based on all these lower level forms: shapes, lines and dots.

Then once you got this dictionary of image "words", next thing is to infer how these words interact with each other, i.e. build a grammar (it's also called "grammar induction" in natural language processing [http://techtalks.tv/talks/deep-learning-of-recursive- structu...](http://techtalks.tv/talks/deep-learning-of-recursive-structure- grammar-induction/58089/)).

By learning a grammar you essentially define a concept of "chair" or "cat" at a higher level of abstraction by determining how these forms relate to their world (i.e. to other forms), e.g. you can determine that "cat sits on a chair" is a legal phrase in the grammar and "chair sits on a cat" is not.

So extracting a grammar (visual or linguistic) from training data is equivalent to restricting the system to common sense reasoning which operates on concepts in terms of "production rules" of the grammar: [http://en.wikipedia.org/wiki/Production_(computer_science)](http://en.wikipedia.org/wiki/Production_\(computer_science\)), and it is a basic goal of AI.

</comment></comment><comment><USER10> Looking at Figure 1, it seems that the classifications "baseball" and "electric guitar" are not that silly (but the certainty of 99.6% is). The shown images could probably be generated from a guitar and a baseball by warping and zooming.

</comment><comment><USER11> So he is basically saying Jeff Hawkins was right all along. At least on SDRs</comment>


Judge warns of 'blood on our hands' if suicidal girl forced out of secure care - <AUTHOR> https://www.theguardian.com/society/2017/aug/03/judge-warns-of-blood-on-our-hands-if-suicidal-girl-is-forced-out-of-secure-care <comment><AUTHOR> For people not familiar with some of the terminology:

She's currently being held in a young offenders institution. Some people are calling that a secure unit. If you read the judgement[1] you'll see reference to "low secure" or "medium secure" units. These are a different type of unit. These are hospitals, and the people in them are patients, not criminals.

The judgement is amazing. Sir James Munby continues to be impressive.

[https://www.judiciary.gov.uk/judgments/in-the-matter-of- x-a-...](https://www.judiciary.gov.uk/judgments/in-the-matter-of-x-a-child- no-3-2/)

> The lack of proper provision for X – and, one fears, too many like her – is > an outrage.

[...]

> What this case demonstrates, as if further demonstration is still required > of what is a well-known scandal, is the disgraceful and utterly shaming lack > of proper provision in this country of the clinical, residential and other > support services so desperately needed by the increasing numbers of children > and young people afflicted with the same kind of difficulties as X is > burdened with. We are, even in these times of austerity, one of the richest > countries in the world. Our children and young people are our future. X is > part of our future. It is a disgrace to any country with pretensions to > civilisation, compassion and, dare one say it, basic human decency, that a > judge in 2017 should be faced with the problems thrown up by this case and > should have to express himself in such terms.

> X is, amongst all her woes, a young person convicted in the Youth Court and > a prisoner of the State. As long ago as 1910, a Home Secretary, speaking in > the House of Commons, asserted that "The mood and temper of the public in > regard to the treatment of crime and criminals is one of the most unfailing > tests of the civilisation of any country." In modern times the principle has > expanded, so that, as is often said, "One of the measures of a civilised > society is how well it looks after the most vulnerable members of its > society." If this is the best we can do for X, and others in similar crisis, > what right do we, what right do the system, our society and indeed the State > itself, have to call ourselves civilised? The honest answer to this question > should make us all feel ashamed. For my own part, acutely conscious of my > powerlessness – of my inability to do more for X – I feel shame and > embarrassment; shame, as a human being, as a citizen and as an agent of the > State, embarrassment as President of the Family Division, and, as such, Head > of Family Justice, that I can do no more for X.

> If, when in eleven days' time she is released from ZX, we, the system, > society, the State, are unable to provide X with the supportive and safe > placement she so desperately needs, and if, in consequence, she is enabled > to make another attempt on her life, then I can only say, with bleak > emphasis: we will have blood on our hands

the observation levels are striking. Imagine living like this:

> 1\. Observation Levels

> • 2:1 observation at all times.

this means 2 members of staff observing child X at all times (although if she's asleep and the door is closed that drops to 1:1)

> • 8 staff should be available at all times to aid in restraints. 6 staff are > required to restrain [X] at a given time and 2 staff should remain available > to support, swap with others and make relevant phone calls.

> • [X] must be within staff eye sight at all times.

This includes bathing and toileting.

> • Both staff must remain within arm's length of [X].

This includes bathing and toileting.</comment>


Does the App Store 20MB 3G Download Limit Matter? - <AUTHOR> http://bonobolabs.com/does-the-app-store-20mb-3g-download-limit-matter/

<comment><USER2> The 3G connection from my iPhone is my primary modem at home. With an unlimited plan and pretty good signal, it works pretty well for what I need.

The funny thing is that when I need to download something bigger than 20mb from the App Store I have to use iTunes, which is using the tethered 3G anyway.

</comment><comment><USER3> It's very annoying to be out, find out about an interesting app, and then have to remember to download it at home on WiFi because it's over 20MB (inevitably, I don't remember).

Ironically, my wifi at home is just serving up a 3G signal anyway so it's all going over the same network.

<comment><USER4> You'd think that it would mark it as "to be downloaded later" and then when you were back home either sync it from iTunes or prompt you to download over WiFi.

<comment><USER5> I've wanted this feature for awhile, too.

One workaround for this is to remind yourself about apps of interest by taking a screenshot (pressing top button and home button at the same time) and looking over your photos later when you sync with iTunes. Unfortunately, this workaround applies more to app users than app developers.

</comment></comment></comment><comment><USER6> I have a friend that works on the iOS platform - and his first client wanted a digital brochure for a well known luxury sedan. They paid well over six figures for the application and because of all the assets in it, it was over 600MB.

I wonder how many downloads that prevented. What is Apple's policy with putting a small app on the store that just downloads the rest of the content once run?

<comment><USER7> It depends on the content. IIRC, you can't download executable code – JSON is fine.

<comment><USER8> I know many game developers that download assets (spritemaps, textures, etc) over http. In fact, it was one of the bullet points in Apple's Optimizing game development on iOS talk this past WWDC.

</comment></comment></comment><comment><USER9> "the size increase can be large when the binary has a lot of contagious zeros in it."

<comment><USER10> I think what they mean is that if your decompressed binary has long chunks of zeroes which compress really well, when it is encrypted (thanks DRM) those long series of zeroes get changed to non-reapeating data and are no longer easily compressible.

Usually: sizeof(compress(data)) <= sizeof(compress(encrypt(data)))

<comment><USER11> You can't really compress encrypted data. If it's encrypted it looks more or less like random data. So any encryption is very likely to result in a (minor) size increase, when compared to the original.

<comment><USER10> That's what I was trying to say in my comment.

</comment></comment></comment></comment><comment><USER12> Normally app sizes increase by 0.6mb after submission, but with one of our iPad apps, the file size actually decreased after Apple did their magic.

</comment><comment><USER13> Is there a practical reason for the limit? I tend to _switch_ to tethering over Verizon 3G for large downloads as it is faster than my ADSL connection. I don't have an iPhone, but I can't imagine the benefit of a potentially slower connection to download something.

<comment><USER14> Prevent overloading radio networks and avoid nuking data quotas, which are still extremely common on cell phone networks?

<comment><USER15> sms and data in the us (now that unlimited is out... Hold to that contact of yours) are more expensive than operating hubble and transmitting said data for the consumer.

So saying that usage is culprit to network congestion is pretty simplistic. Only reason is lack of investment.

</comment></comment></comment><comment><USER15> The operators told them so.

Why do you think every heavy app had this limit? Skype over 3g? Forget. Itunes is just another victim.

Why do you think only months after att cut out the option of a unlimited data plan everyone is announcing data heavy stuff? Android even has voip now.

Expect that limit to go away next ios update.</comment>


Ask HN: Open source webpage snapshot software - <AUTHOR> I'm developing a web application. For one of its features, it needs the ability to take a screen shot of a web page given a URL. Are there any open source components I can use to assemble a solution? Any help much appreciated!<p>PS: I've looked at services such as url2png.com but they are too expensive for what I have in mind. <comment><USER2> Found a phantomjs docker image for this here: [https://github.com/ubermuda/docker- screenshot](https://github.com/ubermuda/docker-screenshot)

docker run --rm -v (pwd):/srv ubermuda/screenshot [http://www.espn.com/](http://www.espn.com/) espn.png 1920px

espn.png will now be in the current directory with 1920px width

[http://imgur.com/a/EYh7m](http://imgur.com/a/EYh7m)

<comment><AUTHOR> Thank you moondev, that is really helpful!

</comment></comment><comment><USER3> You can also use wkhtmltoimage, it's simpler than Phantom

[https://github.com/kevinsimper/wkhtmltoimage- docker](https://github.com/kevinsimper/wkhtmltoimage-docker)</comment>


Salvador Dali's Script for the Marx Brothers - <AUTHOR> http://dangerousminds.net/comments/when_dali_met_harpo_read_salvador_dalis_script_for_the_marx_brothers <comment><USER2> Little known fact (I think), Billy Wilder really wanted to write and direct a Marx Bros movie. As a huge Billy Wilder and a huge Marx Bros fan, that would've been fucking awesome, to say the least.

If you live in the bay area, the Stanford Theater (Uni ave in Palo Alto) does a Marx Bros marathon every once in a while. A fantastic way to experience their movies, IMO.

</comment><comment><USER3> If you needed evidence that Dali was a genius, Groucho as Shiva is it.

<comment><USER4> I am a die-hard Marx Bros. fan so I am biased obviously, but dammit Groucho playing Shiva would have been _genius_. (Even though Shiva is the Destroyer and it was Harpo not Groucho who destroyed things....but I nitpick.)

</comment></comment><comment><USER5> Is there any way to read this without the horizontal scrolling layout? The page also breaks zooming so I can't see such small text.</comment>


C# has var now? - <AUTHOR> https://msdn.microsoft.com/en-us/library/bb383973.aspx

<comment><USER2> Var just makes it harder to read C# code. For example, the difference between...

int foo = object.GetSomething() vs var foo = object.GetSomething()

The int makes it easy for you to instantly identify that foo is an integer. In the var example, what the fuck is foo? A string? A class? An integer? To find out, you must rely on Visual Studio's Intellisense and hover your mouse over foo for a few secons, before Visual Studio will tell you what type foo is. This slows your code reading considerably. And if you don't have Visual Studio, then you have to go waste time reading the documentation to figure out what type foo is.

Sure, it save your typing time, but, it waste other developer's reading time.

<comment><USER3> I see comments like this on var all the time, and I just don't understand the problem. It just means that 'foo' and 'GetSomething' are poorly named. If you had something like:

       var name = GetFullName();

Then it's clear what's going on. If the code you're working with is so opaque that you can't understand what's going on without looking everything up, then the code is at fault, not a language feature. Especially as var is locally scoped.

I personally use var all the time, as does my team. We never complain about it. If you use something like F# where a lot of the time the types are 'invisible' then you'd see how powerful type inference can be. I for one hope that C# goes much further with it; being so explicit about specifying types is a major annoyance when the compiler knows what your intent is.

> And if you don't have Visual Studio, then you have to go waste time reading > the documentation to figure out what type foo is.

Which you'd have to do nearly all the time anyway if you were using anything that doesn't provide 'intellisense'. If you choose to use a text editor with any language you need to look up the contract before use.

And lastly, it's needed if you're going to work with anonymous types.

Of course this is optional, so if there are times when there may be confusion it's easy to be explicit. But most of the time there is no need.

<comment><USER2> Even in your "name = GetFullName();" example, there is still have the problem of not knowing if object being returned is a Name object, or, a string, because that method could have still returned an object of Name type, which will have different methods from an object of string type. And then the compiler complained when you try to pass the Name object into a method that takes a string type, thinking that the Name object is a string.

Of course, as a programmer, you're suppose to read all the documentations, etc. But the reason C# is attractive to me is the productivity gained in ability to read source code very fast, due to the fact that C# enforced types, making it very easy for me to know what type an object is at first glance, without having to rely on Intellisence, even when the other programmers named their methods badly.

</comment></comment></comment><comment><AUTHOR> I'm trying my hand at getting back into some C# coding and found that apparently the language now has var. My first thought was why would a professional, statically typed language have var. Checking out the page I linked to in the submission, you can also do this cool if not slightly funky looking thing where it looks like an SQL predicate just reading from an ordinary array.

<comment><USER3> The 'cool but funky' thing is LINQ. Language Integrated Query. It can be used to query in-memory lists and arrays as well as build SQL to query a DB, or even query XML files.

It is C#'s support for monads.

In terms of var. It's best not to think of it as dynamic like javascript. You can't do this for example:

        var a = 123;
        a = "Hello";

The second line will throw an exception because 'a' is not a string, it's an int. So it's not dynamic like JS. It simply infers the type when it can so that you don't have to type it, otherwise its exactly the same.

Interestingly C# does have a dynamic aspect too, and that's with the 'dynamic' keyword.

        dynamic x = 123;
        x = "Hello";

That will work where the var example wouldn't. It's a rarely used feature, but comes in useful to avoid boilerplate when dealing with external 'stuff', like XML files, JSON, or REST responses.</comment></comment>


Year One Labs Incubator Announces: Leverages Lean Startup Model - <AUTHOR> http://www.yearonelabs.com/build-your-lean-startup-with-year-one-labs/

<comment><USER2> >> $50k, issued in tranches based on milestones

Tranches generally aren't very entrepreneur friendly, I wonder how much pushback they'll get about that that.</comment>


A late April's Fool Day (?) - <AUTHOR> http://techgeek.com.au/2014/04/01/facebook-acquires-nintendo-us25-billion-move/

<comment><USER2> How is it late? It says "April 1, 2014" right at the top.</comment>


'The Matrix 4' Is Happening, Complete with Keanu Reeves - <AUTHOR> https://www.indiewire.com/2019/08/the-matrix-4-keanu-reeves-carrie-anne-moss-wachowski-1202167464/ <comment><USER2> I would love a plot focused on post war scenario in which neo has merged with the AI and peace rains. But there is a human/machine sect which is hell bent on starting another war. Or the plot could focus on neo breaking the matrix beneath the matrix addressing the weak plot explanation of human batteries in matrix 123. Or the plot could run focus on neo 1 and how the whole cycle of killing of humans every few hundred years even started.

Honestly this is awesome, i just hope that keanu is still up for it. He does not look the same as he did 15 years ago.

</comment><comment><USER3> I thought the ending of the third movie was conclusive enough. I dread to think the machines changed their mind and now Neo has to fight another war. Also: In fairness if AI hasn't conquered space yet, then it's not sufficiently strong AI. The fourth edition should be set in space...</comment>


Cancer-Fighting Goodness Found in Cholesterol, Study Suggests - <AUTHOR> http://www.sciencedaily.com/releases/2012/04/120419163553.htm

<comment><USER2> Bypassing the blogspam:

Press release from Simon Fraser University: [http://www.sfu.ca/pamr/media- releases/2012/study-finds-cance...](http://www.sfu.ca/pamr/media- releases/2012/study-finds-cancer-fighting-goodness-in-cholesterol.html)

Paper in the Journal of Biological Chemistry (paywalled): [http://www.jbc.org/content/287/14/11481.full?sid=76cffabf-8c...](http://www.jbc.org/content/287/14/11481.full?sid=76cffabf-8c4d-49ca-b6d9-1383e912ad09)

A useful rule of thumb is that whenever you see anything on sciencedaily.com or physorg.com, unless it's absolute nonsense there's another more direct (and often more informative) source you should link to instead.

<comment><AUTHOR> Those sources don't have RSS feeds, and ScienceDaily and PhysOrg have a bad habit of not linking to such things.

</comment></comment><comment><USER3> I wonder if there are any studies looking at cancer incidence in people with high cholesterol.</comment>


The daydream that never stops (2017) - <AUTHOR> https://www.bbc.co.uk/news/resources/idt-sh/the_daydream_that_never_stops <comment><USER2> Manipulative daydreaming is some form of addiction or a coping mechanism for anxiety and depression and is described as a great ability to have but it could impact a normal life quite severely because it wastes a lot of time and leads to neglecting of the outside world. I describe myself as a daydreamer but to me it is just flashes of imagination compared to manipulative daydreaming.

</comment><comment><USER3> Surprising to learn this isn't something that _only_ starts with abuse.

</comment><comment> GuB-42 I usually hate scrollbar hijacking like this one but for once, I think the effect looks really cool and fits the theme of story nicely.

</comment><comment><USER4> [https://archive.is/pULTA](https://archive.is/pULTA)

</comment><comment><USER5> reminded me a bit of: [https://xkcd.com/874/](https://xkcd.com/874/)

(or [http://phdcomics.com/comics/archive.php?comicid=878](http://phdcomics.com/comics/archive.php?comicid=878) )</comment>


Show HN: A batched, concurrent wrapper for OpenAI gym library - <AUTHOR> Hello HN, new user here, so please let me know if I break some rules.
Currently I've been working on training reinforcement learning agents, and OpenAI gym, while is great, runs only one agent at a time. Hence I decided to extend it.
I built a wrapper around OpenAI gym, such that it now runs several environments concurrently. All while (mostly) having the same call signature as OpenAI gym. And it is published to PyPI for anyone interested.
For more details, please visit: https://github.com/Chimpan-Z/agymc
Feedback really appreciated! Have a good day everyone! <comment><USER2> Is this different than VecEnv in baselines?

[https://github.com/openai/baselines/blob/master/baselines/co...](https://github.com/openai/baselines/blob/master/baselines/common/vec_env/subproc_vec_env.py)

<comment><AUTHOR> Thanks for the feedback.

OpenAI said they used multiple processes (it seems that they used multiprocessing module from your link). Processes is handled by OS and, it depends, sometimes will only switch to another process on long CPU stalls. I used an event loop to manage that, which supposedly should be fixed those long stalls.

Also, this version runs on a single CPU while OpenAI's probably won't, given a multicore CPU. My initial thought was that extending using multiprocessing is much easier than wrapping it using an event loop, hence I only implemented the event loop part.

<comment><USER2> Thanks!

</comment></comment></comment><comment><USER3> When simulation is CPU-heavy, it will never scale. Though I admit that event- based concurrency might work better in many cases (like where communication overhead is greater than computation), but in some environments you would need real parallelism using many CPU cores. This library also lacks benchmark.

<comment><AUTHOR> You're right. I plan to add multiprocessing support such that there would be _numCPU_ processes, each running one event loop. Which should scale properly.

What kinds of benchmark do you suggest? I'll do my best to provide one.

Thanks for the feedback.</comment></comment>


Ban proposed on SF bicycle 'chop shops' - <AUTHOR> http://www.sfexaminer.com/ban-proposed-sf-bicycle-chop-shops/ <comment><USER2> In Japan they have a really logic system where each bike just has a registration number. When you buy a bike they can easily change the owner through some paperwork (there's a lot of paperwork in general in Japan but it's also really efficient). It's really just the same as a motorbike or car, just it's not for ID from far away so they are small stickers instead.

<comment><USER3> We have/had something similar in my city. It does nothing to prevent bike theft or getting your stolen bike back.

<comment><USER4> I'm just assuming here but from what you are saying, your city is an exception, and rest of the country doesn't have that law so I can come to your city from some country side with my bike and lack of registration number on my bike wouldn't be surprise to any one. It would work only if it would be mandatory that every bike in the country have to have registered owner (like cars and motorbikes) so you would never expect buying a bike without registration papers and police could easily check if bike is registered for you or not.

<comment><USER3> It's a small european country and easy to get the bike out of it. Unless absolutely every country adopts this system, it will remain useless.

</comment></comment></comment></comment><comment><USER5> Seems like a rather indirect (and thus inefficient?) way of solving the problem of bike theft

<comment><USER6> I think the headline is fair; there's no mention anywhere of "solving the problem of bike theft".

Based on the content, the idea is to give policemen more power (that is, seizing) to handle chop shops which are literally located in the streets.

</comment></comment><comment><USER7> You could put any longish number on it, then report that number to the police. Electric engraving tools aren't expensive, around $20.

Legislation could mandate a website that handed out numbers to people who registered and provided a way to report those numbers as stolen. Registrants could provide a pic of their bike with the numbers.

This won't eliminate the problem, but it will provide an easy and free method that people could identify their bikes, report them as stolen, and the police can identify which bikes are stolen and return them.

<comment><USER8> I learned the other day that something similar was happening in the US in the 80s with peoples' social security numbers. Someone was asking why a turntable from the 80s had a big social security number etched into the back; apparently, the initiative was to use it as an identifier in case the item was stolen. Now of course it's rather ludicrous to use your SSN in that way but in principle it seems like a good idea to prove ownership.

<comment><USER7> Engraving the SSN on things was commonplace before the internet and identity theft became a big thing. Drivers License numbers were used, too.

</comment></comment></comment><comment><USER9> I don't get it. If everyone (including police) knows that these bikes are stolen, why can't they arrest people that operate such "shops"? Or is property (bike) theft somewhat legal in US? Also, if somebody stole my bike (or anything) I would get really pissed off and knowing where to find these guys (like in this case) I would go get it back myself, possibly with much more dire consequences than police. Doesn't it happen in SF?

<comment><USER10> Because it's really, really hard to actually _prove_ that a stolen bike is stolen. First, it has to be reported stolen, which does not always happen. There also has to be some way of positively identifying the bike, like a serial number, included in the report. Bikes do have serial numbers but not many people record them.

</comment></comment><comment><USER11> There's a UK-based service supported by the police that helps with this sort of thing: [https://www.bikeregister.com/](https://www.bikeregister.com/)

I haven't had my bike stolen, but friends who have say this helped.

</comment><comment><USER12> While the proposed legislation appears to make sense, the lack of bike crime statistics makes it hard to judge if squeezing the distribution part of the crime chain makes sense. The basics: how many 'chop shops' are there? How many bikes do they sell? If the numbers are small, it's just another burden on local police which may have other priorities on their plate, e.g. innercity crime/drugs.

One of the countries that tracks bike theft as a separate category is Sweden[0].

      > In 2015, 66,500 bicycle thefts were processed¹.
      > Investigation was commenced for 6.5 per cent ... while the majority were dismissed with no investigation.

[0] [https://www.bra.se/bra/bra-in-english/home/crime-and- statist...](https://www.bra.se/bra/bra-in-english/home/crime-and- statistics/bicycle-theft.html)

There are 10 mln people living in Sweden, San Francisco has 1 mln. So there must be like 6K bike thefts annually. How many will be prevented by closing a few chop shops?</comment>


S-expressions - <AUTHOR> https://igor.io/2012/12/06/sexpr.html <comment><USER2> A highly recommended read from defmacro.

<http://www.defmacro.org/ramblings/lisp.html>

Other articles on the site are very nice as well: <http://www.defmacro.org/>

<comment><USER3> Yes, it is a great article, but it saddens me that we have to invoke XML to explain S-expressions rather than the other way around. S-expressions have been around since 1958! They are maybe the best reason that everyone should learn Lisp even if they don't wind up using it much, just so they know there are problems it already solved long ago, and they don't need to reinvent the wheel.

</comment></comment><comment><USER4> Parsing S-expressions is easy: Dijkstra solved it in a really nice way with the Shunting Yard Algorithm.

<comment><USER5> Thank you for this post, because it made me curious enough to look up Dijkstra's views on LISP. (It seems he credited it for some innovations but had a lot of complaints about its early design and docs, and favored ALGOL family design decisions)

</comment></comment><comment><USER6> _"Stay tuned for follow-up posts."_

For those interested, there was follow-through on the promise to follow-up:

<https://igor.io/>

<comment><USER7> The follow-up posts look really interesting.

Looks like they go through the complete implementation of a lisp system including macros using PHP as the host language.

</comment></comment><comment><USER8> Was the use of dict and list necessary? This is an actual question, not a rhetorical criticism. I have recently been trying to learn common lisp.

<comment><USER9> It is if you want to differentiate between a list of lists and a map. Maps are not natively supported in s-expressions.

So there is a need to create a sub-language to handle special data structures.

I have done this as well. But I use a special namespace '#dict' for example. So it would be

        (#dict (k1 v1) (k2 v2))

This way there is less of a chance of collision between data and this sub- language. It also allows for extension, so for example instead of dict you can use #classname to say persist a perticular object of a given class name (json doesn't allow this, there would have to add a '__classname__' key to the object for example.

Another way of doing it is using a flat list and just using an alternation with keys being prefixed by some special character:

       (:k1 v1 :k2 v2)

I think Clojure and some lisps do that...

<comment><USER10> That's an nice idea, using #<datastructure> as a straight-up constructor. I've always found hash-tables to be a colossal pain to create in Common Lisp. I tried to create a special JSON-esque syntax in CL for them, but it wasn't a smooth semantic drop-in.

<comment><USER9> Yeah I think it is pretty neat too. I had a couple of design ideas. This way I can persist some other structures (from Python for ex):

For set():

       (#set v1 v2 ...)

For circular object graphs, I can encode an object reference to avoid serializing the same object twice:

       (#ref oid)

Then of course there are custom class names I can pass in to serializer and deserializer:

        (#MyClass (attr1 val1) (attr2 val2) ...)

This might not map to all languages but it worked for me.

<comment><USER10> CL uses # as a special character; I rewrote the idea into the (CL-standard idiom) `make-map` nomenclature: <https://gist.github.com/4709844>

But yea, I hadn't thought of particularly using this idea. It's a good idea from Python (or maybe its older than that, IDK). :-)

</comment></comment></comment></comment></comment><comment><USER11> > Side note: Wouldn't it be awesome if composer supported composer.sexpr files > natively, so that we would no longer have to write JSON?

If you, too, think this would be awesome, check out extensible data notation: <https://github.com/edn-format/edn>.

</comment><comment><USER12> You could write code in XML and JSON too, you just need to define meanings.

[add][item]1[/item][item]2[/item][/add]

<comment><USER13> > _You could write code in XML and JSON too_

And many do (e.g. Ant), but doesn't that sadly look like reinventing the wheel?

</comment></comment><comment><USER14> > Side note: Wouldn't it be awesome if composer supported composer.sexpr files > natively, so that we would no longer have to write JSON? No, not really.

Why the quick dismissal? I find s-expressions much easier to work with than JSON.

<comment><USER15> Let me clarify the reason for this.

Many people asked for yaml support in composer, and it was shot down. Here's why: Once you start supporting many formats you lose interoperability, as any tooling now needs to support all formats. That is the main reason why composer will not support sexpr.

</comment></comment><comment><USER16> Why are the keywords written with a quote?

> (keywords '(useless microframework academic swag))

Shouldn't it be a list with strings or something? What if the keywords were complex structures not just strings?

<comment><USER17> The only Lisp I know is Racket (basically Scheme), so take the following with a grain of salt.

'(foo bar baz) is _almost_ the same thing as (list foo bar baz). However, ' also makes the contents of the list into symbols, not variable references. Basically, '(foo bar baz) returns (list 'foo 'bar 'baz), not a list containing the values of the variables foo, bar, and baz.

Symbols aren't much like strings. They're immutable, and actually just refer to a unique number, not characters. I hope that sort of makes sense!

<comment><USER18> > Symbols aren't much like strings. They're immutable, and actually just refer > to a unique number, not characters.

Depending on language, that could make them exactly like strings. :)

<comment><USER19> If you have immutable strings and a smart compiler, yes, you could indeed have strings and symbols that are functionally identical. In fact, in Old Lisp, there were no strings and symbols were used for everything we use strings for now; that lead to weak string handling and it's why Common Lisp and all modern Lisp variants have a string type.

</comment></comment></comment></comment><comment><USER20> What's great about this is not only that it's a good quick summary, but it left me wanting more. That means I actually feel like I was getting somewhere with it, instead of it being instantly forgotten.

</comment><comment><USER21> Thanks! 30 seconds of reading and I have at least a basic understanding.

</comment><comment><USER22> Near the front of the main article is "(sexpr lexer reader eval forms special- forms macros walker)". Each word in the above parenthesized expression links to another article in the series.

</comment><comment><USER23> See also Rivest's Sexps: <http://people.csail.mit.edu/rivest/Sexp.txt>

</comment><comment><USER24> > I want to know how to parse them in PHP.

Step one : Stop using PHP.

</comment><comment><USER25> If you love the expressiveness of S-expressions but hate the super noisy parenthesis, check the sugar version, called "sweet-expressions". <http://readable.sourceforge.net/>

<comment><USER26> I find that alternative syntaxes like this for S-expressions tend to get really awkward when confronted with real-world Lisp code. For example, the following code sample†:

      (define (pointless-function a z)
        (let* ((numbers (map (lambda (n) (* n 2)) (range a z)))
               (multiple-of-three? (lambda (n) (= 0 (mod n 3))))
               (multiples-of-three (filter multiple-of-three? numbers)))
          (printf "Your numbers are: ~s~%" multiples-of-three)))

AFAIK, this code only gets noisier when you introduce a paren-free syntax, as you need to introduce hacks to get around the simultaneous necessity and lack of parentheses.

† _OK, I'll grant you, this function is not at all realistic. But I think the structure of the code is pretty lifelike. I didn't have any Lisp code at hand to use as an example, so I just banged out something that used let and lambda to illustrate that the structure of S-expressions can be pretty intricate._

<comment> qu4z-2 My ideal s-expression syntax would allow you to replace some brackets with whitespace. For instance, your function would become:

      define (pointless-function a z)
        let*
            numbers (map (lambda (n) (* n 2)) (range a z))
            multiple-of-three? (lambda (n) (= 0 (mod n 3)))
            multiples-of-three (filter multiple-of-three? numbers)
          printf "Your numbers are: ~s~%" multiples-of-three

Obviously there are some down-sides, but the main idea is that the mapping should have no knowledge of the language details, and be a pure s-expression transform. I really should explore the idea more. I have no idea whether the above example can even be uniquely parsed.</comment></comment></comment>


Google Japan defends the impartiality of its search results amid lockdown rumour - <AUTHOR> https://www.platformexecutive.com/news/search-engines/google-japan-defends-the-impartiality-of-search-results-amid-lockdown-rumours/ <comment><USER2> Blogspam of

[https://www.reuters.com/article/us-health-coronavirus- japan-...](https://www.reuters.com/article/us-health-coronavirus-japan- google/google-japan-defends-impartiality-of-search-results-amid-lockdown- rumors-idUSKBN21I1NU)</comment>


Show HN: Pictorious - an app to participate in and create memes - <AUTHOR> http://itunes.apple.com/us/app/pictorious/id501455832?ls=1&mt=8

<comment><AUTHOR> Pictorious is a game where you and your friends participate in and create memes. We're combining the fun game mechanics of social games (Draw Something, Words with Friends) with the ubiquitous activity of photo-sharing. Would love to hear the HN community's feedback on our little project!

<comment><USER2> I really like the concept of it, but I can't give feedback here on the app because I don't have an iPhone.

I think initially people will be excited to play contests against one another, but the issue I've dealt with in the past is: (a) someone starts winning massively and the contest becomes stale or (b) there's too many contests, and the community is spread out too thinly.

<comment><AUTHOR> Thanks for the feedback... will definitely watch out for those 2 things going forward. Were the contests you were running for groups of friends or for the broader public? (we're experimenting with both)

</comment></comment></comment><comment><USER3> Just tried to register. Pop up appeared:

"Password must be at least 6 characters long and can only contain numbers and letters."

I'm fine with a length limitation, but limiting the character-set - WTF? Stop this right now.

<comment><AUTHOR> Hi mindhunter thanks for the feedback. I think we had put the same character limitation on the pw as we had on the username. Agree with you that shouldn't be the case and it will be changed in the next version. Welcome any other feedback if you have any.

</comment></comment><comment><USER4> So it's like that episode of South Park?

<http://www.southparkstudios.com/clips/411094/the-newest-meme>

<comment><AUTHOR> Haha... this is great. I think I will use this in a presentation.

</comment></comment><comment><USER5> Neat idea. How do you plan to monetize?

<comment><USER6> Sell to facebook for a billion dollars?

Seriously, do you have any plans of how to make money? The server costs on this could get really high if it actually becomes popular. Then you have a hugely successful app that is actively losing you money.

<comment><AUTHOR> Yep, we have thought through a number of different monetization strategies including sponsored challenges, private games / events, virtual goods and paid / ad-supported versions. The most important thing right now for us, though, is building a product that people love. With that in mind, we'd love any feedback you might have from that perspective.

<comment><USER6> I'm not sure I'm your target market as I'm not much for photo sharing type stuff. That being said I think the app looks great and was pretty interesting for the brief time I browsed it.

I'm just a bit annoyed at all the, "We'll get a few million users and then worry about how to make money." When I see a service I like that doesn't have any way of making money I'm scared it will go away. Note this isn't how the masses think, but it is how software devs think.

<http://blog.pinboard.in/2011/12/don_t_be_a_free_user/>

<comment><AUTHOR> I agree, I think it's unfortunate when services get shut down post acquisition.

I also agree with you that all startups should have a clear path to monetization. I would assume that institutional investors would require as much before investing, but I think that would probably be assuming too much these days.

However, I don't think that all startups should "turn on" the monetization immediately. For those us trying to build two-sided platforms, we need to get one side of the platform on first. Typically this will be the users as brands and retailers are still very much focused on reach and are very slow to make decisions.

<comment><USER6> while i agree, in most cases I personally believe the monetization should start at the beginning. If it's going to be ad supported, adding that later will annoy users for example.

Some of the other things you mentioned I don't think would hinder growth at all. i.e. maybe in app purchase for the private section or sponsored challenges etc. It just seems to me too many good services get shut down because people don't think about how it is going to be profitable.

</comment></comment></comment></comment></comment></comment><comment><USER7> hmm.. this is actually pretty fun

</comment><comment><USER8> Awesome!</comment>


Qt 5 and Android - <AUTHOR> http://blog.rburchell.com/2012/07/qt-5-and-android.html

<comment><USER2> I love Qt on desktops. It's amazing for cross-platform development and it's a shame that much shittier alternatives like GTK+ are far more common.

But it's just not going to work on cross-platform mobile. The user interfaces in, say, Linux and Windows (7) use very similar if not identical UI components and patterns. Android and iOS are very different about the designs of their apps (even though they may seem similar at first look).

If you want to make well-designed apps that actually comply with the guidelines, Qt will need to include millions of different proxies to native behavior to accomplish this. For example, the menus of your app will involve creating it once for Android and once for iPhone. Then you have a lot of different logic for the Android version of your app and iOS version of your app and it becomes a gigantic mess.

Of course, first you need to make sure that at least the basic components that exist in both platforms look and behave correctly. Buttons, check boxes, text boxes... Right now in Qt for Android they don't even use the native styling but fall back to something that looks like Linux from 15 years ago.

Not only that, there are so many things that you have to get right with creating an UI for a mobile touch app from scratch that it's hard to even start listing out the reasons here. One thing that I can think of right now is native touch behavior: even Google can't get this right in Chrome for Android, where scrolling web pages feels completely different to other lists in the OS and the built-in stock browser. (Firefox has the same problem.)

Then there's accessibility, the adaptation of your UI to wildly varying screen sizes and densities and the list goes on.

Even worse, Android UI is constantly evolving at the moment and there are so many new things. Countless developers fail to adapt these new features in their native apps: Qt isn't going to fare any better.

To accomplish an Android UI that looks and feels familiar you need to use the native libraries. It's that simple. They're in Java, it sucks, deal with it.

The developers of the Necessitas Qt port for Android seem to be so out of touch with reality anyway. I remember reading a discussion in their mailing list when they were getting started about the soft keyboard: their intention was to _implement their own soft keyboard in the apps_ instead of using the native keyboard. Fortunately, somebody sane intervened.

There's some existing apps in the Play Store that actually use it and if you take a look at them you can see how much of a trainwreck Qt on Android is. [https://market.android.com/publish/images/PQAAAPtpmMphsM1j7-...](https://market.android.com/publish/images/PQAAAPtpmMphsM1j7-1wapG8pK_AN7EXpFCy64vDRt8tJdSYsEjPwCcyndLpcr8OxXLmIIzjzEcG61sr6w5wO9YMQSUAzfqVaXDnaxgZauCW-2iG3c92I3HYOOYj.png) is a fairly descriptive screenshot.

Also, Necessitas requires the user to install 30 megabytes of libraries. That is absolutely insane and many older Android models are alarmingly lacking in the storage space allocated for apps.

<comment><USER3> I just want to punch some holes in your reasoning:

0\. I agree that if you want to get native look you should use native tools but there is market for apps that don't have to look native (e.g. games). Actually I see bigger demand for custom looking apps.

0.a. Your screenshot is for pure Qt but Qt strength in mobile landscape is in Qt Quick. That includes writing UIs that adapts to different screen sizes and densities. It is actually sad that Qt Quick which is pure gold might be eliminated by HTML5. While I hope that open source nature of Qt will help here. We will see.

1\. There are more platforms than Android and iOS. While those two make majority of smartphone market but why we should forget that they gained popularity in recent 5 years and might lose it in the next 5. While I doubt that this will happen but who knows.

2\. Even if exclude older Android models we still have huge market left.

</comment></comment><comment><USER4> Qt (especially Qt 5) is one of the most portable toolkits out there, its almost like Webkit in that respect. Lot of excellent work has been done in Qt 5 (and Qt 4.8) to make it easy to port to any platform with minimal dependencies. It already works on Windows (albeit Win32, not WinRT), Linux (X11, Wayland as well as almost pure Qt), OSX, QNX.

Sure, it is still not a one-click task, but that can never be the case. I think Qt has a bright future simply because it is essentially unkillable at this point. (Open-source licensing, open governance already in place, highly portable).

<comment><USER5> That's pretty much the best reason to keep using it. It's got a good head of steam for pushing forward so it'll take a lot to kill it off.

</comment></comment><comment><USER6> Note this is (currently) using a custom Android build modified for Wayland support, so it doesn't sound like Qt 5 on normal Android phones is particularly close.

</comment><comment><USER7> I hate JNI so much that I would actually go an extra mile to port everything to Qt. Please make it happen!

<comment><USER8> I hate JNI too!! _free hug_

</comment></comment><comment><USER9> It extremely saddens me that Qt is still not heavily working on mobile. I would gladly pay for official support on Android and iOS. They could have become the cross-platform mobile toolkit. I wonder if Nokia is the reason why that's not happening.

<comment><USER10> It's working extremely well on Symbian and Maemo/MeeGo, where it's the recommended way of building apps (still on the Qt4 branch).

There has been work towards making porting to other platforms easier with the Lighthouse project, but I guess the official porting and integration work should be Google's and Apple's responsibility.

There are unofficial ports for Android and iOS, and actually a few Qt apps on App Store and Android market already.

<comment><USER9> > It's working extremely well on Symbian and Maemo/MeeGo, where it's the > recommended way of building apps (still on the Qt4 branch).

Of course it is. Nokia might have bought Trolltech just for this reason. But the fact that it isn't supported on any non-Nokia platform cancels all the benefits.

> ...I guess the official porting and integration work should be Google's and > Apple's responsibility.

Should Microsoft maintain Qt's port to Windows? That's not how it works. Both Apple and Google care only about their own platforms and existence of strong cross-platform solution will actually hurt them. They _benefit_ from lock-in and inability to port apps from one platform to another.

<comment><USER10> Well, I wasn't clear but I implied that it hasn't happened because rather closed nature of Android and especially iOS. I'm not sure if this is the proper reason though.

</comment></comment></comment></comment><comment><USER11> Qt will never work well on Android (or iPhone) as their approach to cross- platform is to expose an API that is a subset of features common to all platforms (this is one of the reasons that Qt makes fairly ugly applications on Mac).

I can see Qt becoming (more) popular on mobile for games (or other full-screen non-widgeted applications) but until they take a MonoDroid approach to wrapping existing APIs it'll always be worse for the user than a native alternative.

</comment><comment><USER12> could someone please explain in general what is the state of Qt5 on Android? Thanks!

<comment><USER4> Qt 5 work on Android looks to be highly experimental at this stage. You should look at Necessitas project. Qt 4.8 works fine for the most part, though apps that do 3D work through OpenGL don't always work due to limitations in Android GL stack. Non-OpenGL apps should work fine with several Qt apps that I know of in Google Play already.

</comment></comment><comment><USER13> What does deployment look like on the device? If you like in the libraries, wouldn't your packaged app be significantly large?</comment>


TDD is a feedback tool, not a religion - <AUTHOR> http://th3james.github.io/blog/2014/05/17/tdd-is-a-feedback-tool/ <comment><USER2> * TDD is not the end-all-be-all

* BDD is not the end-all-be-all

* Waterfall/XP/Scrum/Kanban/next-year's-methodolgy-buzzword is not the end-all-be-all

* An individual language or framework is not the end-all-be-all.

I don't know what happened, but lately it seems like every freaking blog post related to technology or start-ups debates that X (not Y) is the holy-grail of Z-topic.

There is no holy-grail, only context. Use your expanding knowledge and tool- set along with the context of the situation/task and form an appropriate solution.

<comment><USER3> Would you say that there's no "Silver Bullet"?

<comment><USER2> If we admit there is no Silver Bullet, how will we _ever_ generate link-baity headlines about programming methodologies to attempt to validate my beliefs as correct instead of being open-minded about different approaches? ;-)

</comment></comment></comment><comment><USER4> Nice blog post.

The internet is an echo chamber.

I'm happy DHHs keynote brought some sense back into the discussion. Fowlers and Becks comments are great, too.

</comment><comment><USER5> Not sure if I trust this argument, before we can really discuss it:

1) Write test to prove TDD exists 2) Write test to prove TDD is a tool 3) Write test to prove TDD gives feedback given good input 4) Write test to prove TDD gives feedback given bad input 5) Write test to prove TDD gives feedback given no input 6) Write test to prove TDD gives feedback given mulitple input(s) 7) Write tests to define how a religion should respond to certain criteria. 8) Write test to prove TDD when try to be used as a religion fails.

9) Mock TDD, in a friendly kind of way. :-)

Yes, there are good points and bad points to TDD. I'm glad the concepts, debates, and frameworks exist. Even if I don't follow them 100%, they do help me to think about a lot of that stuff in projects I design. In everything, moderation. Currently I prefer thinking, tinkering, REPL/playing design until I have a basic structure working, and I can see how I want it all to work, and then write tests afterwards, fixing any bugs that the tests reveal. Experiment-Driven-Design, Test-Driven-Maintenance. This probably only works for small projects, though.

</comment><comment><USER6> Can't disagree, but computer science is in serious need of less but better and well known, highly reliable software development standards.

Something universal that makes us confident enough to say: If you follow this process you'll ALWAYS get the work done in the predicted time frame, and this will not happen: [http://ykyuen.files.wordpress.com/2010/02/howprojectreallywo...](http://ykyuen.files.wordpress.com/2010/02/howprojectreallyworks1.jpg)

One of my software engineering professors used to comment often that if architects and structural engineers didn't had those procedures, 9 out of 10 bridges would collapse and there would be no way to guarantee the remaining 10% would be fit to handle x amount of traffic on any given day.

Software engineering is a new science, not thousands of years old like bridge building, so we are taken our first baby steps towards that kind of efficiency and reliability. TDD is one of them.

</comment><comment><USER7> TDD forces you to describe what your code is supposed to do rather than how it works (which is common when testing after the fact). When your tests describe what your code is supposed to do, they will forever guarantee that your program does not lose any functionality or end-user value. Even after doing significant refactoring, you can be confident that your code still satisfies all of the requirements you've forgotten about.

While your TDD methodology may be flawed, this focus on end-user value has proved itself time and time again. Discussions like this one only play into DHH's flawed logic and do the programming public a disservice by pretending like there's some argument about whether TDD is effective or not.

TDD works great if you do it right. A TDD methodology may or may not work depending on the circumstance. Choose the methodology that's most appropriate for the situation and you will have success.

<comment><USER8> That's the best point made yet - use TDD only if it's appropriate.

<comment><USER9> I think there are a lot of things whose appropriateness is hard to know unless you have some experience with it. That's especially true where you're trading short-term costs for long-term wins.

For example, think of restaurant hygiene. Safe food handling is hard work. And if you skimp on it, it's easy to say, "Hey, doing X isn't really necessary; nothing bad happened."

For me, TDD is similar, in that the benefits mainly come later, when you have a sizable code base that you can make big changes to without fear. I agree people should use it when appropriate; there are definitely times when I don't bother. But I'm concerned that people who haven't experienced success (and failure) with TDD will have poor intuition for when it's appropriate.

<comment><USER10> _" For me, TDD is similar, in that the benefits mainly come later, when you have a sizable code base that you can make big changes to without fear."_

The ability to refactor without fear comes from having adequate test coverage. Whether you write the tests before you write the code (TDD) or after the code is completed doesn't seem to affect your ability to refactor at a later date.

<comment><USER9> For me, it definitely affects the quality of the tests. Once I've written the production code, I know how it works, so its faults are harder for me to see. I also find it's easier to leave coverage gaps. I think I could get some of the same benefit by bringing in somebody else to review tests without looking at the production implementation, but I haven't tried.

The other thing I think TDD gets for me is cleaner API design, because my orientation begins (and mainly stays) _outside_ the thing I'm working on. And cleaner design definitely makes refactoring easier.

Of course, if people have tried it both ways and feel they are getting the same results with some other technique, that's great. But one can only measure long-term maintainability by maintaining a code base for a while, so I think regardless my point on needing experience to judge appropriateness of TDD stands.

</comment></comment></comment></comment></comment><comment><USER8> DHH's use of hyperbolic metaphors discredits the point he's trying to make. He has no factual argument so he exaggerates small points and maligns practitioners. It's sad.

</comment><comment><USER11> it doesn't matter what a something really is when its zealots come.

</comment><comment><USER12> Martin Fowler is still relevant?</comment>