The Death of the Relational Database - <AUTHOR> http://whydoeseverythingsuck.com/2008/02/death-of-relational-database.html <comment><USER3> Here's the comment I left on Hank's blog:

Hi Hank, I like to be brief so this might sound bad, but I mean everything in the friendliest possible way.

You and almost all the people arguing against you are wrong about almost everything. I don't mean to say anyone's opinion is wrong. I'm talking about basic understanding of what certain words mean.

Let me break it down. There are 3 models for "programming" (in the general sense) computers:

1\. Functional 2\. Relational 3\. Imperative

The functional model can't store data and therefore can't be used to create a database. So there are fundametally only 2 kinds of databases.

A database created using the Relational model uses relations to both store and retrieve data, so lets call it a relational database. A database created using the Imperative model uses pointers & nodes to store data and pointer navigation to retrieve data, so lets call it a navigational database.

That's it. There are only 2 database models. Each model can be used to implement different kinds of databases based on the limits they place on the structure.

There are 2 primary kinds of navigational database: graph/network and tree/hierarchy. A filesystem for example is a tree/hierarchy database.

A relation is basically a truth table with columns that are related to each other by a truth statement and rows of truth values that fulfill the truth of the statement. A standard relational database doesn't place any limits the number of rows or columns. A binary database limits the numbers of columns to 2.

A SQL DBMS is a (partially successful) attempt to implement a language that can be used to create a database which uses relational model.

OK, the important parts:

1\. The semantic web is an implementation of the relational model that limits the relations to 3 columns and a single row.

2\. Just because you use a SQL DBMS to create a database doesn't mean you actually created a relational database. You can put pointers in your tables, turning your relations into nodes on a graph, turing your database into a navigational database with some relational features.

Much of what you said in your original post was exactly backwards. You said "relational sucks" but the things you described as problems were features of navigational databases, not relational. Then you said "the semantic web is awesome because it's a navigational database" when in fact it's a relational database.

That's all.

<comment><USER4> > Let me break it down. There are 3 models for "programming" (in the general > sense) computers: > > 1\. Functional 2. Relational 3. Imperative

Could you explain why you picked these three models?

Do you mean relational in the sense that you don't have input-output functions, but relations like:

        plus(4,4,x) => x = 8
        plus(y,4,6) => y = 2

Why can you store data with a relational model store but not with a functional model?

<comment><USER3> Functional and relational are 2 sides of the same coin. For instance:

x + y = z

Can be viewed as either a function called binary_addition with x & y as inputs and z as the output, or as the description of a relationship between 3 sets.

So, to solve the problem using SQL for example you would create a table binary_addition(x,y,z) and then fill it with all the true values that caused x + y = z to be true and then say "select z from binary_addition where x = 4 and y = 4"

In the functional model the computer stores the process for turning the input values you give it into the output values you want. In the relational model the computer stores a table containing all known possible input values, all known possible output values, and how they relate to each other, and gives you a way to retrieve them.

Note, the functional model is implemented by what that famous guy whose name I can't remember called "function-level" programming languages, not functional (aka lambda) languages.

<comment><USER3> The famous guy is named Robin Milner. He created the ML language. In lambda languages like lisp or javascript you can use functions as arguments and return values. I function-level, or applicative, languages you can only create new functions by combining existing functions. I think. I've never used a function-level language.

</comment></comment></comment></comment><comment><USER5> The author is misinformed in many ways. To pick an easy example, he says that "the relationship between objects is _built into_ the objects", and as an example cites, "An invoice knows _as part of its structure_ , who the customer is. That pointer to the customer is stored _in_ the invoice."

But that doesn't have to be the case at all. It's common (in general, maybe not with customers and invoices) to store the relationship in a third table, say "customerinvoice", that has customerid and invoiceid fields.

<comment><USER6> I agree the author is misinformed, though I also agree with him that relational databases suck, especially if you are doing object oriented programming. I'm not sure what is better, however. Also, most of the corporate world is firmly ensconced in the relational database mindset. This makes interacting with them difficult if you do not also "speak relational."

<comment><USER7> Maybe its object oriented dogma that is a problem.

<comment><USER8> I've worked with a lot of accounting data, which fits the relational DB model really well. But I can't understand why I have to use an OO model to display it on a screen as a table of rows and columns with the odd field scattered here and there. It just seems like a lot of extra complexity to me when all the users want to see is SELECT * FROM TRANSACTION.... made to look pretty.

<comment><USER7> Indeed. OO is so ill defined anyway. What is documented as OO now I am sure is not what alan kay intended it to be. New popular frameworks like rails don't help either (much) - although its oo-lite - so its not so bad.

still, I am looking forward for an excuse to crack out stuff like arc and walk away from OO for a while (I am allowed to dream).

<comment><USER6> I've been working with Smalltalk, which was Alan Kay's creation. Most implementations are not what he intended -- at one Smalltalk Solutions keynote he excoriated all of us. He said that he never intended Smalltalk to become a programming language. He wanted to create a Montessori toy for the mind. That said, I don't think that Smalltalk as a programming language is that far from what he intended. He just never intended it to stop there.

</comment></comment></comment></comment></comment></comment><comment><USER9> The article is worthless: not a single sentence of the first 5 paragraphs of the blog post makes sense when examined critically. The author does not understand relational databases nor how flexible they are. In fact I'm fairly certain he understands neither OOP, nor RDBMS, nor the Semantic Web (of which I am no proponent) well if at all.

Every now and then a developer community bubbles over with complaints about RDBMS and gets some attention. Most support is from people who, like the author, understand OOP to a certain degree but don't understand RDBMS.

And time after time predictions of the death of the relational database model prove wrong: RDBMS usage only increases. The relational database model supplanted the network database model (which corresponds to the "graph databases" the author speaks of) for good reasons.

Nothing to see here: keep moving folks.

<comment><USER10> Am I alone in finding your comment unncessarily unpleasant? Instead of offering unilluminating perjorative rhetoric why don't you provide even one example of why you take issue with the article? Perhaps you're right about it but you give no reason for supposing this to be so. Also, how about letting the well-worn 'move along now' cliche enjoy a well-deserved rest?

<comment><USER9> Perhaps not.

No, I believe it makes sense to draw a line. When a person (indeed, even a specialist) claims special insight (including critical insight) of a well- examined problem he is almost always wrong. The physicist John Baez not infrequently encounters cranks who believe they've found errors in relativity theory or quantum mechanics. He has developed a scale for rating cranks:

[http://groups.google.ca/group/sci.physics/msg/5312a801e0785e...](http://groups.google.ca/group/sci.physics/msg/5312a801e0785e66?hl=en&);

The OP is wrong in so many ways that it renders his article meaningless. And others have pointed out possible errors (although doing so one must interpret the OP's intentions, a risky endeavor indeed), though certainly not to exhaustion. To add a single specific item of criticism to the fray would only provide yet another handle for the OP or other misled persons to grasp and extend the discussion uselessly.

The human mind can create ideas, phrases, and analogies some of which, upon further examination, are devoid of meaning. Dreaming is an extreme instance wherein most of the ideas later make no sense. However the same thing can happen while fully conscious and is part of the normal creative process.

Mathematics and logic are tools we use for separating empty ideas from useful and meaningful ones. Unfortunately there is no Royal Road to mathematics or logic, nor to relational databases:

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

I have neither the time, nor the inclination, much less the rhetorical skill to enlighten the OP or this group as to the vagaries of databases.

Nor do I view this as a "rhetorical" discussion: rhetoric is concerned with swaying the populace to your side of the argument whether you are correct or not. I am concerned about what is correct rather than what is popular.

I do not doubt the enthusiasm (or frustration) of the OP, however his complaints are poorly-stated, unclear and orginate from an incomplete understanding of logic and relational databases. Many similar complaints have been stated before (often much more clearly and in a form arguable) in more appropriate venues (e.g., Google for "relational vs OOP group:comp.*"), where they have been thrashed about thoroughly by better, and worse, men than me.

It is one thing to register frustration. But it is another to casually question ideas that have withstood the test of time and cast that questioning as serious.

To show that frustration in the development of databases is nothing new see William Kent's "Data and Reality":

[http://www.amazon.com/Data-Reality-William- Kent/dp/158500970...](http://www.amazon.com/Data-Reality-William- Kent/dp/1585009709)

</comment></comment></comment><comment><USER11> I am surprised by so many "author is confused" and "author is misinformed" responses. Can't you guys operate on a higher level of abstraction? Aren't we all here dynamic language lovers?

Just listen to what he says more closely, because he is essentially suggesting that strong typing is bad for databases for exact same reasons it's bad for programming languages. Yes, it makes things faster, more efficient, robust but ... (surprise!) less flexible and dumb.

"Duck-typed storagebases" are indeed the future and perhaps the number of negative reactions is the best indicator of how novel the idea is.

I am in disagreement with "semantic web" movement (in my opinion it's already semantic enough), but the storage part is spot on.

</comment><comment><USER12> "Now, along comes the semantic web just in time to make us all feel really dumb again."

This happens to me almost daily, and I love every minute of it...

</comment><comment><USER13> _For example, imagine starting out with a contact list. Some months later, you add a restaurants list. Some months later again, you decide it would be great to be able to capture, for each contact, what their favorite restaurants are. Ideally one would want to just establish a "favorite" relationship between a restaurant and a contact without changing the restaurant structure or the contact structure._

Let's look at this example in a relational database. Personally, I've never even implemented a database, but I did take one class on relational databases. The way I learned it, the contacts would be one table and the restaurants would be another table. A third table, let's call it "FavoriteRestaurant" would have two columns [1]: a foreign key to an entry in the Contacts table and a foreign key to an entry in the Restaurants table. The primary key in this table would have to be the contacts column, since restaurants would appear more than once. If each person can appear in the FavoriteRestaurant table more than once (multiple favorite restaurants), then both columns would have to serve as the primary key.

Thus, we have managed to effectively utilize a relational database to express a new relationship, without ever changing the original data. The author said:

 _Most relational databases actually have an upper limit on the types of objects, typically referred to as tables, which can be handled. Too many tables in a database schema is considered bad design._

If that is indeed the case, that is where the problems lies. I am far from being a champion of relational databases, but it seems to me like a lot of people don't think critically about how best to store the information in their databases. More tables, in my mind, is a good thing.

[1] The number of columns would actually be equivalent to the sum of the number of items in the primary keys of both the Contacts and Restaurants tables. With unique identifiers (SSNs and vendor IDs, for example), of course, this would indeed be two columns.

<comment><AUTHOR> _A third table, let's call it "FavoriteRestaurant" would have two columns [1]: a foreign key to an entry in the Contacts table and a foreign key to an entry in the Restaurants table._

Yup, you could definitely express a new relationship that way. I think the point is that adding join tables like that has traditionally been considered an anti-pattern for relational databases because it increases duplication and denormalizes the data, thus working against the supposed performance gains and data integrity protection from using the RDBMS in the first place. If this is wrong, please do correct me.

One major difference I've noticed between document/graph-oriented databases and relational ones is that they embrace denormalization and even optimize for it insofar as that's possible.

<comment><USER14> _adding join tables like that has traditionally been considered an anti- pattern for relational databases because it increases duplication and denormalizes the data_

I thought that join tables express a _normalization_ of the data? You are then not storing restaurant data explicitly as a column in the Contact table, which reduces data duplication and gives you more fine-grained control over your structure.

Join tables (especially reflexive ones) gave me a bit of a headache when I first started working with SQL databases. Once I finally wrapped my head around them I started seeing a lot of uses for and advantages of them. However, I've had little formal training in database techniques; only a little bit of relational algebra. Is there something I'm missing here?

<comment><AUTHOR> That sounds very plausible and, indeed, I have join tables throughout my apps. This is why I put the proviso in, "correct me if I'm wrong." :)

My understanding was that hardcore relational database guys would say that join _operations_ are necessary when the data's totally denormalized, but having a join _table_ wasn't necessarily a best practice because now you've got an additional table that could potentially get out of sync.

</comment></comment></comment></comment><comment><USER15> I'm surprised no one brought up column-oriented databases.

When attributes can be added dynamically and/or are have a small value set, column-oriented databases with bitmap indices outperform traditional relational databases.

See MonetDB for an open source, usable column-oriented db with bitmap index support: <http://monetdb.nl/>

For more kvetching on the topic: <http://dynamictyping.org/post/29661699#disqus_thread>

I tried to find a public research document with performance comparisons, but to no avail.

</comment><comment><USER16> Anybody ever heard of Netezza? I was told about it by someone who works with vast amounts of data - many terabytes every day. It's part of a hardware system that uses overwhelming processor power to segment and blast through data. You don't need the traditional headers or relational database structures to search like this. The technology is costly now (it's specialized hardware) but if you want to talk about where databases are going beyond the relational, this is one direction.

</comment><comment><USER17> <http://en.wikipedia.org/wiki/Entity-Attribute-Value_model>

</comment><comment><USER18> If we give up relational databases in favor of a graph model, I'm sure we'll have piles of blog posts complaining about the sacrifices made in that switch. That said, the relational database is ancient technology that was built for an entirely different purpose than for what it's used today, so I eagerly anticipate a revision.

</comment><comment><USER19> This paper discusses some related reasons why traditional relational databases are poorly suited to some modern applications: [http://www.vldb.org/conf/2007/papers/industrial/p1150-stoneb...](http://www.vldb.org/conf/2007/papers/industrial/p1150-stonebraker.pdf)

</comment><comment><USER20> Whydoeseverythingsuck.com? Probably because you're asking the wrong questions...

</comment><comment><USER21> The author is confusing the term "relational databases" with the implementations of relational database systems that he has encountered.

That's like looking at a bad Python program and saying, "Python sucks," or like saying, "I've never seen a car go more than 10 miles without breaking down; therefore cars are not reliable transportation."

You can store just about anything in a RDBMS pretty much any way you want. You're limited only by your own skill and imagination and the particular limitations of your vendor's implementation.

A better title would have been, "Here We Go Again: The Death of the Relational Database Prematurely Announced."

<comment><USER7> Time for the obligatory: "rumours of RDBMS death are greatly exaggerated"

</comment></comment><comment><USER22> I am the author of this article, and I must say, though I am not a regular reader of HN, I do find it refreshing that there are smart people here arguing real merits in an intelligent respectful way. I am sure it is not always the case, but it is really fun to read everyones perspective.

I dont think graph databases are for everything, but I do think that they will end up providing a much better abstraction for the kinds of apps we tend to write on the web. I do think an RDBMS is better for an accounting system for example. Oh, and my examples were not designed to actually be great real world examples, but I have a lot of less technical people reading my blog and so my goal was to provide examples that could be expressed succinctly. That said, there is no static example that cannot be expressed in a relational database. The problem is that relational databases (at least the ones that are available to us) are not at all fluid and flexible.

<comment><USER23> "my examples were not designed to actually be great real world examples, but I have a lot of less technical people reading my blog"

This is definitely the place to give a real world example if you have one handy. Most people here would understand it, we would love the discussion, and you might even get some good feedback.

And thanks for posting here :-)

<comment><USER22> Well, as I said, there is nothing that cant be expressed in an RDBMS - <USER2> least at first. But let me give an example of the kind of use cases we see.

First, imagine having a database that allows one to freely create record types. One might have standard data types like contacts, events, emails, checks, expense reports, etc.

These record types are nodes. Now imagine being able to connect these nodes using any type of edge you like. For example a contact might be connected to an event as an "invitee". Thats how the edge would be labeled. Now the relational folks will say that that is a relationship that could be predicted. But at some point, some new type of record is created. And you as a user want to connect that record to existing records. For example you have added a "shoe" record type to keep track of all of your shoes. You then decide you want shoes to be connected to events so that you can map what shoes you wore to what events. You don't want to modify your schema. You don't want to add a new mapping table, you just want to connect the record. And you want to be able to query the graph for all the things of any type that are connected to that record. More importantly, you want the _end user_ to be able to decide that it would be useful to connect shoes to events since no self respecting programmer is ever going to design such a system.

This is the type of flexibility that you need in a web application that will evolve over time. But the minute you want to connect that new record type to the existing object, you either have to modify your schema, or you have created a database that is highly flexible via totally generalized mapping tables, but is not optimized for these kinds of structures. For example just creating a giant mapping table to connect objects will work in an RDBMS but it is not at all optimized and will fall over at scale. Since we are building something that will handle awesome scale, using an RDBMS in this way was a non-starter. Philosophically, we probably have more in common with Google BigTable than with an RDBMS.

<comment><USER24> _you either have to modify your schema, or you have created a database that is highly flexible via totally generalized mapping tables, but is not optimized for these kinds of structures_

A generalizable mapping schema with tables for edges may not be optimal, but your comparison seems to be a bit of a bait-and-switch. Why compare the optimality of such a schema to a rigid schema instead of comparing it to the optimality of an alternative "graph-based" data store?

Granted, an extensible schema will be slow to query/etc. What makes you say that you can achieve better efficiency using a non-RDBMS approach? (Not that you can't, but I didn't see your argument to that effect. I'd say that without such an argument, the optimality/speed point is unsignificant.)

<comment><USER25> You can. Definitely. In fact, I've implemented this a few times (most recently last week); some for specific problems, some for more generic graph support.

In a nutshell:

The problem with RDBMS approaches is that the good ones assume you can pack your complex logic into a monster query or stored procedure and let the query optimizer do its thing. But if you're implementing an attribute-value system or graph traversal on top of an SQL database, you end up generating a ginormous number of queries just to do some basic traversal. You could potentially wrap those into a stored procedure that was doing selects into a temporary table, but that's not really the sort of thing that most query optimizers go to town on.

On the other hand, there are a number of systems out there that either attempt to be full object oriented databases, or object relational mappings, or RDF based stores, but the current off of the shelf ones tend to perform poorly since they're not very mature (and I get the feeling are more focused on just being able to conveniently store stuff, not actually hitting it very hard).

When I first started looking at the sort of problems that Hank's addressing (in a series of talks I did in 2004 titled "Beyond Hierarchical Interfaces") I naïvely thought that you could do everything with an SQL backend, tried and failed. I could blab on about the sort of indexing that you need for these sorts of storage, but I'll duck out for now.

Edit: Just one example of where I've done this, if anyone cares, was replacing the old SQL backend with a dynamic (schema-less) attribute-value system and basic query language, for my current job: <http://grunge-nouveau.net/Kore.mp4>

<comment><USER24> Now, I may be pretty naive here, but if you're doing full on graph traversal, why not just extract the full graph from the database and traverse it in memory on your own terms instead of leaving it to large unoptimized traversal queries?

<comment><USER25> For the latest data set that I'm working on there are 5 million nodes and 50 million edges, and each one has some meta-data associated with it. :-)</comment></comment></comment></comment></comment></comment></comment>


The Haskell School of Music (2012) [pdf] - <AUTHOR> http://www.cs.yale.edu/homes/hudak/Papers/HSoM.pdf <comment><USER2> This is by Paul Hudak, one of the creators of Haskell. I took one of his classes that corresponds with this book. This is how I was introduced to Haskell.

Now I'm hooked on Haskell! The book is a truly excellent introduction to Haskell, and I suggest that anyone who is interested read it. The book goes into some interesting topics, including proofs by computation and induction, UIs and functional reactive programming, and arrows. And it elegantly explains some of the advantages of functional programming and the Haskell language.

Just note that this book is a work in progress; he is always updating and modifying the book as he teaches the corresponding classes.

</comment><comment><USER3> somewhat related: this paper describes the haskell innards of Chordify, a web service that annotates chord structures of songs from videos or sound clips

[http://ismir2012.ismir.net/event/papers/lbd2.pdf](http://ismir2012.ismir.net/event/papers/lbd2.pdf)

[http://chordify.net/pages/official-launch-of- chordify/](http://chordify.net/pages/official-launch-of-chordify/)

______________

The reason i picked up the book: I was thinking whether it was possible to annotate just intonation from equal temperament, but I think that's a limitation of MIDI that it can't do that. Also, eagerly awaiting §11.4, "Soundness and Completeness of Music Algebras".

<comment><USER4> I recently attended an academic workshop on algorithmic music in Common Lisp and wrote some relevant code in Clojure while there. A lot of people there had strong music theory backgrounds and were very interested in both alternate tunings and the "set theory" approach to pitch sets.

The good news is that with Overtone (the Clojure interface to SuperCollider) you can specify individual pitches rather than MIDI note numbers. People at this workshop who wanted to work with pitch sets or unusual tunings had to resort to controlling the pitch bend programmatically, which, while it certainly works, involves a lot more effort and results in less elegant code.

<comment><USER3> Thx for info, I need to look at SuperCollider and chuck some day, I've heard a lot about both.

Also, I didn't know there was any way to systemically describe just intonation. I'm one of those bubble children that hears wolf intervals all the time and can never get a guitar tuned. I got that from having piano and woodwind lessons simultaneously as a kid

<comment><USER4> sorry, working with some sleep deprivation here.

substitute "frequencies" for "pitches" in this sentence:

The good news is that with Overtone (the Clojure interface to SuperCollider) you can specify individual pitches rather than MIDI note numbers.

since you have access to the actual frequencies, you can build any arbitrary abstraction on top, including any tuning system known to humanity. (and since it's Clojure that abstraction can be unusually concise.)

</comment></comment></comment></comment><comment><USER5> I shared same excitements as other folks here, but soon after I started reading, I discovered that it is _very_ daunting unless you already know the music theory. This is not explicitly mentioned in the foreword. Actually, I was hoping to learn music theory with this book, along with deepening and refreshing my Haskell knowledge.

<comment><USER3> It is demanding, you have to know/learn a lot of stuff: music composition, probability distributions, generative models (MCMC), DSP, MIDI, haskell. For haskell alone, I like Hutton's little green/yellow book, and the Stanford course notes

[http://www.cs.nott.ac.uk/~gmh/book.html](http://www.cs.nott.ac.uk/~gmh/book.html)

[http://www.scs.stanford.edu/11au-cs240h/](http://www.scs.stanford.edu/11au- cs240h/)

<comment><USER6> Is that book still worth checking out if you're read Learn You a Haskell or do they occupy the same sort of beginner niche? I'm almost done with that and was thinking I'd probably take a look at real world haskell next.

<comment><USER3> Hutton's and RWH are really good books, but haskell and GHC have moved a lot since they were published. Hutton uses hugs and doesn't discuss GHC extensions like OverlappingInstances and NoMonomorphismRestriction, which are pretty important, and RWH was written against 6.10, I believe.

Since you can read RWH online, you should, but you should also check out the FPcomplete.com tutorials. Also Simon Thompson's 3rd edition Haskell book is good, probably the only thing I could call a gentle intro to haskell.

also: [http://shuklan.com/haskell/](http://shuklan.com/haskell/)

__________

Finally, there's some ridiculous number of tutorials on the haskell wiki

[http://www.haskell.org/tutorial/](http://www.haskell.org/tutorial/)

[http://haskell.org/haskellwiki/Blow_your_mind](http://haskell.org/haskellwiki/Blow_your_mind)

[http://haskell.org/haskellwiki/Category:Tutorials](http://haskell.org/haskellwiki/Category:Tutorials)

</comment></comment></comment></comment><comment><USER7> If you enjoy this, consider Hudak's "Haskell School of Expression" book. Very good book, very hands on. [http://www.cs.yale.edu/homes/hudak/SOE/](http://www.cs.yale.edu/homes/hudak/SOE/)

</comment><comment><USER4> blatant self-promotion: I'm considering writing a book like this, as a product for sale, but using examples in Ruby, CoffeeScript, and Clojure (using Overtone, which is fantastic).

background: I just quite recently went to a two-week workshop on this topic at the University of Santa Cruz:

[http://arts.ucsc.edu/programs/wacm](http://arts.ucsc.edu/programs/wacm)

We were taught in Common Lisp but I did my projects in Clojure. The professors showed some amazing stuff, including very sophisticated harmonizers and counterpoint generators (e.g. Gradus Ad Parnassum in code, for those of you with a music theory background). I had the most hacker knowledge of anyone there, I think; most everyone else had a strong background in music but little or nothing in terms of code.

I also built a video series on making music with CoffeeScript and JavaScript, in 2012, and a very effective breakbeat improviser in Ruby, way back in 2008. I'm not 100% satisfied with the video series, but you can see it at singrobots.com if you're curious, and I did a presentation on the breakbeat improviser which was very well-received:

[http://www.infoq.com/presentations/archaeopteryx- bowkett](http://www.infoq.com/presentations/archaeopteryx-bowkett)

Kind of ancient history, though, so this next thing is more up to date. You can see a kind of rave-o-matic bassline improviser in Clojure, which is to say Clojure/Overtone code which cooks up original syncopated basslines, on GitHub:

[https://github.com/gilesbowkett/markov-bass- lines](https://github.com/gilesbowkett/markov-bass-lines)

That's one of the things I wrote at this workshop. If you're interested in this stuff I __HIGHLY __recommend attending next year (if they continue to run it!). I might go back for a second round myself. It was a phenomenal experience.

Anyway, to finish up that blatant self-promotion bit, if you're interested in a book like this, which you'd have to pay for, but which would give you examples in Clojure, Ruby, and JavaScript (and/or CoffeeScript) instead of Haskell, my email is email@example.com.

<comment><USER8> As mentioned elsewhere in this thread, you seem to be expected to know a deal of music theory for this book. Are you considering a similar approach? If you explained music theory from the ground up using Clojure with Overtone, that'd be my dream book. Have you considered leanpub?

<comment><USER4> I actually helped leanpub get going, way back when, with some UX advice and stuff like that, but I have my own little system which I prefer. might be a control freak thing.

re music theory, I think I could basically write your dream book, with some caveats. my own grasp of music theory doesn't extend as far as Mozart or Miles Davis. I can say some things about Bach, thanks to brilliant work by Chris Ford, Douglas Hofstadter, and David Cope, but if I wrote a "ground up" type of thing, I think I could get you far enough to understand the majority of popular music today, but not into the intellectual stratosphere of formal art musics like jazz or modern "classical." Likewise I can't say a ton about non- Western musical forms. I can deliver a ton of specifics on electronic dance music, so that's probably what I'd do.

But, short answer is, yeah, I could sort of write that. I have to admit that it didn't totally occur to me that a book like that would be interesting. I was mostly thinking about the AI aspect (writing code which writes music) and a straightforward user's guide to Overtone (because it is pretty complicated in places). But I think what you're talking about is the way to go, or at least a good place to begin.

<comment><USER8> Definitely a beginner's thing. The hardest part when coming upon a subject is learning enough so you can get around and pick and choose what to study next. I think this niche is still starved for good starting material, so if you got the basics of music theory along with the basics of Overtone, well that would surpass my expectations of the dream book I'm looking for in this area--mainly because Overtone seems to have momentum and appears to be the right technology on which to place my bets at this point (I have considered ChucK and Impromptu before but never took the plunge.) Also a great excuse to learn Clojure.

Regarding your publishing system, is it something you can point me towards?

</comment></comment></comment></comment><comment><USER9> This looks an interesting way of learning Haskell, in a domain that is of personal interest. Thank you for posting, I look forwards to reading it.

<comment><USER10> Same here. I'm going to read this book and hope to learn more about functional programming and the Haskell language, while (hopefully) not being bothered with the kind of trivial examples that you commonly encounter in tutorials.

</comment></comment><comment><USER11> [http://haskell.cs.yale.edu/?post_type=publication&p=112](http://haskell.cs.yale.edu/?post_type=publication&p=112)

link to the latest revision of this book (2013)

</comment><comment><USER12> Can anyone share a non-scribd link?

<comment><AUTHOR> It's there. Don't click on [scribd]</comment></comment>


Ask HN: What's a reasonable microkernel-based OS for desktop usage? - <AUTHOR> Title question.
When I say desktop usage, I mainly mean a full fledged browser. For everything else I mostly have a fully cli workflow.
This comes out of me tinkering with more "exotic" OSes like GNU/Hurd and Plan 9. I've had fun with the Hurd and would like to learn more by running my day to day on it; however, the hardware support and tooling is unfortunately just too anemic to reasonable do this.
Is this kind of thing even possible at the moment? Are there reasons to not want a desktop running some microkernel OS? Am I being unknowingly unreasonable in wanting this?
Thanks! <comment><USER2> Minix 3.3 or 3.4 RC 6. It basically uses clang compiler and the NetBSD package base.

Using a microkernel as a desktop leaves you in a generally no worse off position than using something like Linux or Windows. Unless you are intending to do specific high performance work, then you probably won't see much or any difference.

I am currently using a Toshiba NB500 netbook running Centos 6.9 as my machine due to having to support a number of other Centos 6.9 systems. But I am intending to shift to Minix 3.4 in the latter part of 2017 or early 2018 for doing certain kinds of development work that I am interested in.

If you have the resources and time, give a variety of systems a go and see what gives you a better bang for your buck for your circumstances.

<comment><AUTHOR> Oh wow. I didn't expect such positive responses. This gives me hope. I'll definitely look into Minix.

Thanks!

</comment></comment><comment><USER3> Can I recommend using a hypervisor like Xen?

While it is technically not an "OS", I find that it offers some of the same security advantages a server-based microkernel OSes do. Although DomUs aren't technically privileged userspace processes, it does mitigate the risk of something like a faulty, kludgy mess of a driver taking down an entire system, and while I admit it's not as fancy as something like Mach IPC, it does allow for secure communication between different domains.

And on a personal note, as a former GNU/Hurd dev it does make me happy when I find people in the wild with interest in its design :)

<comment><USER4> Interesting. I'd love to know more about workflows around a setup like this.

Is it possible to use Xen as traditional desktop OS with Keyboard/Mouse/Monitor running X and a Window Manager? Would you run it in a Dom0 or DomU? How would you switch between them, etc.

<comment><USER5> Might be worth looking into QubesOS[1]. It uses Xen to compartmentalize things. Never used it myself though.

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

<comment><USER6> I often go back and give Qubes_OS a try but then it lets me down with USB passthrough for a lot of devices I need - not least a USB tethered Internet connection (or USB Networking). It just is so complicated that I gave up and I'll look again when they get to version 4.

</comment></comment></comment></comment><comment><USER7> Redox OS is a interesting project although it's not ready for prime time usage since it lacks applications. [https://www.redox-os.org/](https://www.redox- os.org/)

</comment><comment><USER8> Why micro-kernel in particular? Just curious.

Early stages, but you could take a look at this OS written from scratch by someone with an amazing track record in OS development:

[https://github.com/vygr/ChrysaLisp](https://github.com/vygr/ChrysaLisp)

Some pretty cool stuff there to get your teeth into...

<comment><AUTHOR> I don't really have a good technical reason. Mainly just curiosity.

Over the course of the years of me tinkering, I seem to keep trimming my tools to slimmer and slimmer things that I feel I can grok fully. This has me at the point where I think of an OS as "just" a thin layer on top of the kernel syscall API.

So curiosity now has me asking about implementation details of the syscalls and all that jazz. I have the linux source tree on my machine and do poke around, but the sheer size is somewhat daunting.

So my reason for asking about a micro-kernel in particular comes from a combination of liking "minimality", wanting to see different approaches to kernel design, and wanting to grok the "full stack".

Anyway. Thanks for the pointer to ChrysaLisp. Looks interesting!

<comment><USER8> Ah OK I see. Yes as others have pointed out Minix. But for something you can really understand have a look at Xinu - small and very minimal, there's a great book on it too. You probably aren't going to run Xinu as your main desktop though! ;)

Others worth mentioning are SkyOS. I don't think Robert has worked on it for years, but I believe the source code is still available and there used to be quite a lot of very readable documentation outlining the architecture.

ChrysaLisp is certainly one to watch. He's the guy behind the now defunct Tao OS. The Tao tech was way too far ahead of its time. Maybe now is the time...

</comment></comment></comment><comment><USER9> The hurd unfortunately isn't pure microkernel multiserver architecture, but a mere hybrid, as they run a lot in supervisor mode for performance reasons, to do with limitations of the MACH microkernel they do use. It has about 0 developers on any given time, with the occasional work being done. There's been no real (fundamental) progress on it for over a decade. The issues in the hurd critique paper haven't been addressed, and the L4 port failed. Your time is best spent elsewhere.

Take your pick from microkernel.info.

If you want it to be open source and you want to be able to work with it to some extent, however, there's compromises involved (the main one being that hardware support is terrible), but the latest Minix 3.4 release candidate is about the only such system that will do that for you, and the closest there is to replacing monolithic unix as a general purpose OS. It specifically tries to be a replacement for netbsd, sharing most of its userspace.

</comment><comment><USER10> QNX springs to mind in that case, but I'm not sure if it's really viable as a day-to-day OS. There's a distro of it out there somewhere, I guess.

(Usually it's used in embedded systems)

<comment><USER11> This looks a little promising [https://membarrier.wordpress.com/2017/04/12/qnx-7-desktop/](https://membarrier.wordpress.com/2017/04/12/qnx-7-desktop/)

<comment><USER12> Discussion: [https://news.ycombinator.com/item?id=14230112](https://news.ycombinator.com/item?id=14230112) (91 comments; April 2017)

</comment></comment></comment><comment><USER13> >the hardware support and tooling is unfortunately just too anemic to reasonable do this.

Not sure about tooling, but I think hardware, one of the two problems you mentioned can be solved by virtualizing. You can run the micro kernel-based OS in a VM and hardware support usually will get better because it is standard. If you don't like the feeling of running the OS inside a window in the host OS, you can assign the whole machine to a graphics card and a set of keyboard and mouse with pass through (io-mmu/VT-d) on Linux KVM. That way, you only have to worry about a compatible graphics card, and everything else is emulated and standard.

I haven't tried any micro kernel-based OS myself but I had a very good luck running both Windows and macOS virtualized on my Ivy Bridge desktop system I built 7 years ago running Fedora as the host OS. It's freaking amazing and I suffer almost no performance degradation.

<comment><USER14> Which version of macOS and distro do you use? Are there good docs for setting it up?

<comment><USER13> I largely followed the guide on OSX-KVM repo on github. For the GPU to work, I used an AMD RX-560. After installing El Capitan with a virtual graphics card, I upgraded to High Sierra and passthrough the card.

It took a while, but worth the troubles.

</comment></comment></comment><comment><USER15> > Am I being unknowingly unreasonable in wanting this?

i don't think so. or if you are, then i am too. or it depends on how much you want this and why.

i lurked on the Hurd IRC about 5 or 6 years ago, and i get the sense that developing these systems is a lot about the journey of development. it seemed as though most people who were running the Hurd used hardware virtualization.

the browser can certainly be viewed as block to minimality. have you tried elinks? could a V7-like JS runtime replace JITing it?

i don't have answers to these questions. i do think framing the original question around minimal webbrowsers (where "minimal" means it can be run on Minix or similar) is insightful and appropriate to the forum. thanks for posting this question!

<comment><AUTHOR> Thanks for the positive feedback! It's really encouraging.

I've opened elinks here and there in the past, but have never really given it a fair chance. You've motivated me. At the moment I run almost completely in a browser called UZBL and have javascript and cookies disable. The web, or at least the part I intersect with, is surprisingly useful like this.

Assuming we could move to elinks, then the question becomes one of supporting minimal tooling for the various mimetypes, like video. The main annoyance I would expect is from bank websites, which tend to have really narrow browser requirements.

</comment></comment><comment><USER16> I'd suggest HelenOS - see [http://helenos.org](http://helenos.org) they have hardware support for sound and USB filesystems etc that I think is lacking in Minix 3 but I don't think they have a web browser at this point. The main reason there isn't a microkernel OS is that nobody has invested the time into making one work, especially considering the popularity of Linux for free software advocates and Windows/MacOS for everyone else.

</comment><comment><USER17> L4 might be an option. [http://l4hq.org/projects/os/](http://l4hq.org/projects/os/)

</comment><comment><USER18> Redox is looking pretty good now...

[https://www.redox-os.org/](https://www.redox-os.org/)

</comment><comment><USER19> MINIX 3?

<comment><USER20> Yes. And Redox too, however it is not even production ready. Also Haiku too, technically it is hybrid kernel based, but...

</comment></comment><comment><USER21> Genode lets you choose from a range of microkernels on which you'd like the system to run.

</comment><comment><USER22> Windows ?

<comment><USER23> Well, according to Tanenbaum, Windows is a hybrid too: "Windows NT 3.1 was a half-hearted attempt at a microkernel system, but it wasn't done right and the performance wasn't good enough on the hardware of the early 1990s, so it gave up on the idea for a while." [http://www.cs.vu.nl/~ast/reliable- os/](http://www.cs.vu.nl/~ast/reliable-os/)

The newest Windows version the article mentions is Vista. I am not aware though of such fundamental changes to the Windows kernel as would be needed to make it a true micro kernel.

<comment><USER24> Its a "hybrid" because its designed to behave and look like a micro-kernel, but instead of full subsystem/process isolation, all of the kernel subsystems exist in a single address space (although I guess this could be argued in the context of hyper-v not to be entirely true).

This means that instead of incurring a full context/privilege switch just to pass messages between components, the messages go through (say the IO manager with an IRP) the subsystem controllers with simple function calls and effectively shared data structures (although its designed not to look that way).

Because its compartmentalized like this, it would actually surprise me if somewhere in MS research/etc they don't have a full context switching version of the kernel running. Such a project would if nothing else help to catch "bugs" and validate the subsystem and drivers aren't misbehaving. Of course driver verifier achieves most of this goal by itself with simpler checks.

OTOH, while the idea of a micro-kernel helps to solve a lot of development/design issues I'm not sure an actual implementation buys you much over the NT approach. That is, while its easy to say "just restart the storage subsystem" implementing something that is capable of getting the state right in a microkernel environment sufficiently that a bug which takes down a critical subsystem isn't repeatably fatal (or just drops important filesystem updates/whatever) likely creates even more complexity in which latent bugs can hide. Particularly in the face of buggy hardware where the driver is trying to avoid/work around a hardware misbehavior, doing something like restarting a disk controller won't necessarily unwedge a stuck command queue in the hardware.

So, that said, I think if you keep the crappware (most "security" software for starters, maybe certain GPU drivers too) off a windows system its really rare to have windows crash. In the past 15 years I can't actually remember the last crash I saw on a machine running only WHKL qualified drivers, and i've never seen a crash on a server core machine.. etc...

<comment><USER9> >I'm not sure an actual implementation buys you much over the NT approach.

As an introduction to that, I'd suggest reading [https://en.wikipedia.org/wiki/MINIX_3#Reliability_policies](https://en.wikipedia.org/wiki/MINIX_3#Reliability_policies)

as most of that is tied to the pure microkernel multiserver approach, with strictly only the microkernel running in supervisor mode.

If you want to go into more depth, then I'm going to suggest

[https://ts.data61.csiro.au/projects/TS/publications.pml](https://ts.data61.csiro.au/projects/TS/publications.pml)

[https://microkerneldude.wordpress.com/](https://microkerneldude.wordpress.com/)

And, of course, if what worries you is performance, then look into: [http://blog.darknedgy.net/technology/2016/01/01/0/](http://blog.darknedgy.net/technology/2016/01/01/0/)

<comment><USER24> I could point for each bullet point in your minux link how structuring your code like a microkernel (and a debug/instrumented build) solves the same problems, but I'm to tired to bother.

Lets just say, that in two decades of writing drivers and OS internals, i've shifted my opinions away from being a strong micro-kernel advocate toward a hybrid approach similar to what NT does.

Also, per you last link, i'm still one of the people who think virtualization and non zero copy syscalls adds too much overhead. Burning up 100% of a core to copy packets between userspace, the kernel, and then DMA'ing them to the device is pointlessly slow. Adding in a copies between kernel subsystems is worse and can't be avoided as easily as something like the NT registered I/O model. There are whole projects (dpdk for example) for which that single context switch/copy is to much too.

<comment><USER9> >but I'm to tired to bother.

By all means, do. As far as I can see, these do not work without the enforced isolation of running as userspace processes.

>Burning up 100% of a core to copy packets between userspace, the kernel, and then DMA'ing them to the device is pointlessly slow.

That's not how it usually works.

</comment></comment></comment></comment></comment></comment><comment><USER25> Mac OS?

<comment><USER26> macOS is based on XNU, which is a "hybrid" kernel IIRC.

</comment></comment><comment><USER27> [removed due to witch hunting]

<comment><USER28> While your enthusiasm makes me smile, Lubuntu is not a microkernel[1]

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

<comment><USER27> Wow, learned something new! I guess I never understood they existed :)

Good luck everyone!</comment></comment></comment>


How I Learned to Stop Worrying and Love Civil Procedure (2011) - iso8859-1 http://btlj.org/2011/11/google-and-the-sherman-act-or-how-i-learned-to-stop-worrying-and-love-civil-procedure/ <comment><AUTHOR> Interesting, and in the second case, I admit I had never considered that Google must extend credit to some of its customers and that it likely some of them won't pay and in this regard Google have to do what everyone else does and take dispute to court.

</comment><comment><USER2> Link is dead

<comment> iso8859-1 Works for me now...</comment></comment>


Security in 2020 - <AUTHOR> http://www.schneier.com/blog/archives/2010/12/security_in_202.html

<comment><USER2> I think we need a better name for his _decentralization_ concept because what he's describing is actually centralization: you're storing your data elsewhere which makes it accessible everywhere (the nearest screen as he calls it). That elsewhere is a central place.

We will have specialized services for this centralization(e.g GMail for email, picassa for photos) and also services that span multiple types of data. Thinking in these terms makes Facebook look a lot more interesting: it is a central place that hosts multiple types of your data in one place, and they are working on making it available to more screens - some of which are not yours!

He makes the argument that we (the consumers) are the product that Google and Bing sell, and argument already made for TV watchers. By the same token, a Facebook user is much more valuable than a search engine user because FB knows so much more about them.

<comment><USER3> You're right that the word is slightly misleading, because it could be seen both ways, but it is also clearly decentralisation.

In the previous model, all your data, email, media, etc is on your computer, your hard drive, a single point that you are in control of. In the new model, your photos are on Facebook, your emails are on Gmail, your tweets are on Twitter, your bookmarks are on Delicious, your data is on Dropbox, your music is on Spotify, your movies are on Netflix, etc... It's not centralised to one location, it's split up from one location (your computer) into potentially hundreds of locations owned by a variety of paymasters with different agendas. So, it is decentralised.

From the point of view of the collective, it's centralisation (data goes from many entities into a single entity) but from the point of view of the individual, it's decentralisation (data goes from a single entity to many entities).

</comment></comment><comment><USER3> Wow. Excellent article. Visionary, even.

So, clearly, about 90% of the population of this message board _will_ be parasites by this new definition.

This suggests one thing to me: if we're disorganised parasites, we will get squashed.

<comment><USER4> Funny that the same demographic will likely be the ones implementing the tech that necessitates such parasitic behavior.

<comment><USER5> Do not underestimate the ability of human beings to act individually against their collective best interest. Or to act in accordance with whatever authority _tells_ them is their best interest, without pausing for analysis.

</comment></comment></comment><comment><USER6> It was a really nice article.

Coincidence? Today I've switched my default search engine to DuckDuckGo instead of Google. I'll give it a one week try.

I am a coFounder for an electric smart grid company. A major long term problem for us is to find a way to provide our customer the complete propriety of their data.

How could we manage data without knowing much about it? Is there any simple way of encrypting some data and be able to make some transformation to them?

Something like:

        F(enc(x)) = enc(F(x)) ?

We are managing mostly consumption values, it would be nice to provide functions like the mean, max, FFT? I don't know.

Thanks for any idea.

<comment><USER7> You're looking for this: [http://en.wikipedia.org/wiki/Homomorphic_encryption#Fully_ho...](http://en.wikipedia.org/wiki/Homomorphic_encryption#Fully_homomorphic_encryption)

Practicality right now is minimal. My intuition says it is going to stay that way, but who knows.

<comment><USER8> It's not totally impractical. Paillier, for example, has nice applications in electronic voting (since you can sum votes without reading who those votes were for).

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

But yeah, anything more than that is currently not all that practical.

</comment></comment></comment><comment><USER7> I'm still not really convinced a huge ecosystem can be built solely on advertising. Under this view of the future, the problem is advertising supply shoots through the roof, and even _before_ we consider advertising-specific issues like saturation, we're already looking at a quickly-dropping price. Consider the fact that someone getting constantly beamed advertising isn't really getting anything out of it and the prices drop even further. You can't count on making money that way. Even today it's already not a panacea and you can tell from HN comments that it's generally considered a weak business plan today to count on advertising to fund your startup. There's still a "step 2" missing here for me before you can really build a long-term platform out of it pervasively.

<comment><USER9> I think it's important to note that huge ecosystems have already been built solely on advertising. Forget google and go back 50 years to look at radio and broadcast television. I think those are the huge ecosystems you are looking for, not a startup.

<comment><USER7> Not in the sense I mean. Notice how I talked about _supply and demand_. In a mass media world, supply of advertising is actually very sharply constrained; a 30-second spot on the Superbowl is in short supply. Banner ads are not in short supply, and the idea that I can use ad-supported hardware to access ad- supported internet to use an ad-supported service like YouTube in which ads will be embedded into the video, and that all of these ads will somehow be profitable and something you can build your business on, is quite different from a world in which there's ten minutes of ad time an hour on three major networks to buy, and a finite amount of newspaper space, etc.

<comment><USER9> I think you're forgetting that not all websites/youtube videos are equal. Having a banner ad on some random webcomic is not the same as having one on penny arcade, just as having an ad on some youtube video is not the same as having one on smosh's video, just as having an ad on channel 738 is not the same as having one on basic cable. Furthermore, doesn't a website have these same constraints? I only look at each page for a finite amount of time, each youtube video is only a finite amount of length, each website only gets a certain amount of viewers.

I think the web in general still has the same constraints as more traditional media, they just aren't as obvious. A website getting x unique visitors could show x unique ads, a different ad for every visitor. But maybe that isn't very effective, so the website reduces the number of ads they show in order to have each ad by seen by more visitors, thus reducing the supply of available ad slots. These constraints aren't as obvious as they are for television or radio, but I think they still exist.

I think you're right that J. Startup can't depend on banner advertisements as a form of revenue, but J. Startup is probably using google as the middleman. However, in this situation, J. wouldn't be building an advertising ecosystem, but depending on google's already huge ecosystem. I don't think it will be farfetched in the future to see free hardware given away in order to earn advertising dollars. I bet if televisions were cheaper, broadcasting companies would have given away free hardware, and perhaps in the future hulu will give wifi devices to get people to watch hulu whenever they have a free moment.

</comment></comment></comment></comment><comment><USER10> So adblock users are parasites?

<comment><USER11> Google for "webmasters complain ad-blocker" or "fighting ad-blockers" to gather some opinions out there ...

<comment><USER12> The weird part is that clicking an ad you have no interest in is frowned upon ("click fraud"), but downloading (not necessarily even rendering!) an ad you have no interest in is considered by some to be something bordering on a moral imperative.

<comment><USER13> Nothing weird here. It's the advertisers who don't want you to click an ad without interest. It's the publishers who want you to generate ad revenue for their site.

Two different parties, two different motivations, two different stances.

</comment></comment></comment></comment><comment><USER14> The key is being nice to your users without trusting them at all (since they could be bad guys). A neat trick if you can manage it. The airports are doing spectacularly badly at it.

</comment><comment><USER15> I think there are some visionary things here but he misses the 'consent' part. By using free services we do give consent and if we don't like the privacy policies of Facebook et al then nobody forces us to use them. Yes providers should be honest about their policies and some do play dirty tricks. We learn which ones are not really honest so if we keep using them, we can't really claim surprise or lack of consent.

Free stuff costs. Not money but there are costs. In the future world he is imagining there will be some who want to pay for their own machines and control the software that runs on them.

Being a parasite means riding a host and giving up some critical decisions about where and how the host lives.

[Edit for grammer]

<comment> loup-vaillant By "consent", he meant " _informed_ consent". That requires reading the terms of service and understand their implications. Few people actually do that. The rest of us merely click our way to something that "just works".

For instance few Gmail users are actually aware that Google is routinely doing semantic analysis of their e-mail. When I tell them, they're invariably mildly shocked. (I insist on "semantic" even if their methods are statistical, because Markov chains are highly correlated to meaning.)</comment></comment>


Gmail will block .js file attachments starting February 13, 2017 - <AUTHOR> https://gsuiteupdates.googleblog.com/2017/01/gmail-will-restrict-js-file-attachments.html <comment><USER2> I don't know which is weirder, that jscript files are still executable by default on Windows in 2017 or that google only just decided to block .js files to handle this security problem.

</comment><comment><USER3> I have never, ever sent a JavaScript file to a person capable of reading JavaScript, who actually wanted or needed a JavaScript file sent to them via email. No one has ever requested such a thing from me.

That is something that has never happened to me.

<comment><USER4> I have. I'll do what I do with .EXEs already -- zip them and rename to .jpg.

<comment><USER5> In a world where email clients were maintained as actively as web browsers, this behavior would be a default feature, in the same way we have weird workarounds for HTTP proxies.

</comment></comment></comment><comment> Const-me They've been blocking .vbs since at least 2013. But they're starting to block functionally equivalent .js just now. Smart.

</comment><comment><USER6> This blog article don't say if this includes archives, but I assume that it probably does.

<comment><USER7> In the past I've been hit it's the "non exe" permission and for a while you were able to bypass it by putting it in an archive file (Always found emailing myself files handy when I didn't have a thumb drive to hand), but they scan the file types of the files inside of archives these days so emailing a zip with a exe in it doesn't work.

I guess the same will apply for .js files which might be a pain when emailing a client a zip of the programming work you have done for them, but they do say you can use Google Drive to host the file and send them a link to the google drive download.

<comment><USER8> If you password protect the archive you should be good

<comment><USER7> Got to make sure that the table of contents can not be read at all. You might not be able to extract the files without the password but if you can determine the file type (and most password protected archives I've come across will happily display the file names/types/protection status of each of the files without the password) and still preform the block.</comment></comment></comment></comment>


Experts say Moderna didn't produce data critical to assessing Covid-19 vaccine - <AUTHOR> https://www.statnews.com/2020/05/19/vaccine-experts-say-moderna-didnt-produce-data-critical-to-assessing-covid-19-vaccine/?mod=article_inline <comment><USER2> I agree that's too early to know if the vaccine works or not. At the moment there is still something good coming out of this: it does something. The production of antibodies is never guaranteed considering how picky the immune system is.

Whether this means that the virus can't infect the vaccinated people... is a far long stretch still. We'll need to wait until further on in the trial.</comment>


IOS developers: looking for feedback on startup - <AUTHOR>

Recently, we launched a new service for iOS developers to make sending push notifications easier, and we're looking for people who'd like to try it out and help us out with feedback.
If you're an iOS developer, get in touch and I'll set you up with a free account.
The site is pushlayer.com and I'd love any and all feedback. <comment><USER2> What's the preferred way to get in touch? I just attempted to sign up but am not ready to pay a monthly fee (but am looking to add push notifications to a project in the near term).

<comment><AUTHOR> Send me an email: ryan -at- pushlayer.com and I'll set you up. Thanks!</comment></comment>


Show HN: Automatic Speech Recognition in TensorFlow - <AUTHOR> https://github.com/zzw922cn/Automatic_Speech_Recognition <comment><USER2> Just skimming the code, this is an impressive piece of work, probably one of the most comprehensive open source ASR implementations using deep learning I've seen yet. It certainly looks correct based on the careful documentation (English comments would also help), but the most important part is providing a pre-trained model. Validating TF code can be an expensive and painstaking process, and if you have the weights, then sharing them proves that your net works. Saying this seems obvious, but very few open source implementations actually take that step, for whatever reason (not sure why).

<comment><USER3> I suspect that the size of the weights file might have to do something with that. 500M+ is not strange and if enough people hit your small VPS or Amazon account that can either cause you to be rate capped, go down or go broke.

It would be nice if a universal 'model+dataset+weights' sharing service would spring into being.

<comment><USER4> Seems like this is a perfect place to use Bittorrent: a large, desirable file for which you own the distribution permissions.

<comment><USER5> Yeah, that seems really obvious now that you say it. Not sure if there is such a thing as a cheap seedbox around.

</comment></comment></comment></comment><comment><USER6> I know nothing about ML, but I'm willing to read manuals, write scripts, and deal with tedious technical stuff; is it feasible to use[1] this without really understanding how it works?

[1] "Use" being defined as having short spoken phrases[2] trigger my scripts. [2] I'm willing to accept significant restrictions on the nature of these phrases, such as intentionally making them sound very different.

</comment><comment><USER7> Alternatives for the reference:

[https://github.com/mozilla/DeepSpeech](https://github.com/mozilla/DeepSpeech)

[https://github.com/pannous/tensorflow-speech- recognition](https://github.com/pannous/tensorflow-speech-recognition)

[https://github.com/buriburisuri/speech-to-text- wavenet](https://github.com/buriburisuri/speech-to-text-wavenet)

</comment><comment><USER8> Nice! Just curious, is the git repo all one needs in order to run text to speech on his PC? How accurate is this thing? Is there a demo somewhere perhaps?

</comment><comment><USER9> Good job! How much time did it take to train this model? I've heard TensorFlow is slow comparing to the other toolkits.

</comment><comment><USER10> how does one evaluate an utterance?</comment>


Freud's Discontents - <AUTHOR> https://www.thenation.com/article/freuds-discontents/ <comment><USER2> > Instead of believing that pathologies could be described or drugged away, > Freudians wanted us to work through them.

If this is true, then it's definitely a practice that needs to be focused on again. I've had nothing but bad experiences with various medical professionals throwing drugs at me the moment I mentioned personal difficulties. The anti- depressants kept me in a bad place for a long time, when I think I mostly needed someone to provide some insight or constructive advice. Maybe I just had bad luck, but I definitely don't remember anyone trying to work on anything with me.

<comment><USER3> >> If this is true, then it's definitely a practice that needs to be focused on again. I've had nothing but bad experiences with various medical professionals throwing drugs at me the moment I mentioned personal difficulties.

I've found it to be true. Understanding where my undesirable behaviors come from is helping me correct them tremendously. It can be a painful process - expect to get worse before you get better - but it can be effective if you're working with the right person. For me the mental picture was less like an onion and more like a tangled knot of yarn, but it is straightening out quite nicely.

I personally don't like the Freudian approach. There are other non-drug based camps.

<comment><USER2> I eventually found help through attending a church that focuses on community outreach and small groups, which helped me get outside my own head long enough to make some positive steps. But I've always wanted to find a therapist who is genuinely interested and can provide more insight than I can learn on my own from books like The Road Less Traveled. I don't know what other people go through, and I wish I understood Jung well enough to share with other people, but I suspect professionals are just throwing drugs because they're overwhelmed by the constant wave of misery and depression they're confronted with.

<comment><USER4> > I've always wanted to find a therapist who is genuinely interested and can > provide more insight than I can learn on my own

There are TONS of professional, licensed therapists that can help you with this! Definitely try modern psychotherapy. google "find a therapist" and try the site from psychologytoday.com magazine. Hopefully you live in an area they serve. Most of them do not use meds, and even if they can prescribe them they only go for them as a last resort (some people have such severe anxiety that they cannot even function outside of their house, for instance).

> I suspect professionals are just throwing drugs because they're overwhelmed > by the constant wave of misery and depression they're confronted with.

I disagree. I think your medical doctor (rather, anyone's MD) simply doesn't have hours upon hours to listen to your life story and find the perfect formula of lifestyle and attitude changes to help you. A psychologist does, in fact thats (sort of) what therapy is. "sort-of" because therapists generally dont give advice like a sage elder. They do their work by listening to you, reflecting what you're feeling, and letting you discover the problem and solution. I would say try it, and make it clear from the start that you will not take any meds (simply to weed out any therapist who might lead you that way). The only caveat is, every therapist has his/her own style and personality. There is no formula that works for everyone, so try a few sessions (typically one hr/week) and if it's not working for you, try another one until you find someone you can connect with.

</comment></comment></comment></comment><comment><USER5> Freud made many important contributions. He invented psychotherapy, and many of his ideas about human nature, such defense mechanisms, are quite insightful. Perhaps most important is that he was the first to try to think in detail about the psychological development of the infant and child.

Freud has gone out of date in part because the science has just moved beyond some of his key ideas. His theory is based on a set of ideas about the mind of the infant that were largely speculative. In recent decades a real empirical science of infant psychology has developed, and it turns out baby's minds are quite a bit different than Freud thought.

Psychotherapy has also become much more effective, thanks to methods like cognitive behavioral therapy. In addition, in America the practice of Freudian psychoanalysis was usually restricted to psychiatrists, which made it unavailable to most people. Non-analytic psychotherapy is practiced by psychologists and counselors, and so is far more available.

Another factor in this country is that Freud's gloomy and rather authoritarian Middle European philosophy just doesn't fit with the general optimism of Americans.

</comment><comment><USER6> Outstanding essay on why Freud has faded from his ultimate cultural and scientific pedestal -- and why and other grand theorists are not relevant today. I agree with the author that "The grand theories of an earlier age offered us an ability to look at the intersections between the self, society, and history; in comparison, their replacements look not just intellectually meek but politically unpromising."

On the other hand, the potency of well defined, minimal theories is unarguable.

<comment><USER7> On the contrary, the theories of Freud, Jung, etc. may strive to place the study of human psychology into a larger context, but it is evolutionary psychology that actually accomplishes this task.

Right now, the field of psychology is replacing phrenology and faith healing with biochemistry. And, you know what, good riddance!

</comment></comment><comment><USER8> Excuse my ignorance, but why does everyone seem to hate on Freud, considering he has had a tremendous influence on modern psychology? Honest question.

<comment><USER9> Because most of his theories are nonsense. He got the idea of the unconscious right and understood transference eventually, but the rest of his theories are mostly bunk.

Worse, some are harmful bunk. He denied the existence of child sex abuse and invented a set of complex rationalisations which blamed the victims and shamed them for inventing fantasies.

We know now that at least some of their stories were correct, and not fantasies and delusions at all.

Pure Freudian psychoanalysis is incredibly expensive and time consuming and never scores well when tested objectively. It's not an exaggeration to say that in terms of value for time and money it's more of a scam than astrology and homeopathy are, but it never seems to get the same attention from debunkers.

Modern approaches that score much better (e.g. ACT and other MBTs) have almost no baggage imported from Freudian beliefs.

</comment></comment><comment><USER10> My one quibble with this article, which I think is otherwise spot on in many regards, concerns this claim: "It is more common now to regard humanity as lucid about its interests, and rational in its fulfillment of them (a few behavioral foibles aside)."

There is a strong trend in psychology (both pop and scientific) at the moment to focus on all the ways in which we (or, by an odd synecdoche, "our brains") are irrational (e.g. Dan Ariely).

If you contrast this viewpoint, which I think is increasingly common if not already quite prevalent, with say the viewpoint of intellectuals in the 18th century on "man's nature" I'd say we have a comparatively strong belief in the deep and wide-ranging irrationality of humanity, both when it comes to ends and means.

<comment><USER11> The irrationality studied by Dan Ariely et al it's not comparable _at all_ with the freudian irrationality. The former brings to the forefront our fauly heuristics and biases. The later is about how culture and our psyche actively makes us ignorant of parts of ourselves that are inconvenient, and that can come out in bursts of irrational, unstable, "crazy" behavior.

<comment><USER10> You're right that they are very different takes on irrationality. Whether they are a comparable "at all" is obviously just a matter of context. If I'm interested in research on loss aversion, looking at Freud and Ariely together would be silly. If I'm interested in the history of ideas (which my point was addressing) then looking at them alongside each other makes perfect sense.

You're saying "apples vs oranges" and I'm saying, "sure, but I'm talking about fruits."

<comment><USER11> But maybe bringing fruits up it's irrelevant in some context, depending on what we're talking about. This is one of these contexts. The very same phrase you quoted from the article clarifies it's not talking about "perfect" rationality.

In the history of psychology/sociology, Freud and Ariely don't make sense with each other.

</comment></comment></comment></comment><comment><USER12> I've heard that Freud's methods were poor and his brain science was junk; but I can't actually name any particular bad theory or experiment. This article did not enlighten me, at least in the first ten minutes reading it.

Anyone know of a good guide? And, since it's Freud, one that won't turn my stomach?

<comment><USER13> It wasn't his methods. His idea of curing by talking is now standard practice, but was revolutionary for that time. The problem was that it put him on the path to exposing the widespread incest and rape that was going on in his society. Freud initially believed his patients, but wasn't prepared to face the consequences, so he changed his tune, and this reversal led him to come up with the far-out psychosexual theories he's so famous for.

Freud is still regarded as the father of modern psychology, perhaps because he was the first to actually sit down with his patients and take them seriously.

Here's an article that tells the story in detail: [http://www.theatlantic.com/magazine/archive/1984/02/freud- an...](http://www.theatlantic.com/magazine/archive/1984/02/freud-and-the- seduction-theory/376313/)

</comment></comment><comment><USER14> I have on my bookshelf "Unauthorized Freud". The book is not favorable to his work. Rather, he is described as a fraud.

Now where he was right for the wrong reasons, we could see him like we see Galilei today: As a popularizer of new ideas. There is no need to go further than that.

</comment><comment><USER15> >he was "no more a person now but a whole climate of opinion."

>it is rather shocking how swiftly, [..] Freud's relevance has waned in the past two decades

I think the first quote answers the second: it was just a climate of opinion, with very little of substance to back it up. And so it has _rightly_ been discarded. Not that we don't have new fashionable opinions to take its place, many no more substantial.

>It is more common now to regard humanity as lucid about its interests, and rational in its fulfillment of them

Wut? The opposite is true. We are more and more aware of the foibles of human perception and thinking, but nowadays based on a solid scientific foundation, not the fantasies of a ... well, imaginative person.</comment>


Ask HN: Everyday things you do that seem like magic - <AUTHOR> With the hullabaloo surrounding the iPad launch, I've been thinking a lot about the gulf between us techies and the rest of the world in how we use and understand technology.
I vividly remember an incident from a few years ago when I showed a friend how to create Excel macros. Within twenty minutes he had automated a task that had taken him four hours every week. He practically fell off his chair with excitement. To me it was the simplest of hacks, but to him it was as if I had taught him a magical incantation. He really couldn't believe that a computer could do such a thing.
I didn't really understand his reaction, but it occurred to me recently that he just had no concept of a computer being programmable. To him, the software on his PC seemed as hard-wired as the buttons on his washing machine.
Over the past couple of weeks I have been talking to a lot of non-geeks and have been amazed at the gulf of understanding between us. As users, they don't have the first idea about what goes on inside the computer, but as a developer, I don't have the first idea what goes on inside them. It felt like one of those moments when you learn enough to realise that you really don't know anything.
What have you done recently that has blown a non-geek's mind? <comment><USER2> * Running another OS in a virtual machine.

* Jumping around between/within apps using only the keyboard. (I use vim, xmonad, Gnome Do, etc.)

* Dropbox, Google Voice, Android Maps navigation

</comment><comment><USER3> Using a text editor (Vim) to edit text. Particularly in this case use of the :g/ and :v/ commands to filter text and edit all lines matching a pattern.

Excel scripting and filtering and text functions. (Basic things, like looking for a particular string, and filtering a list to just those containing it using formula functions).

</comment><comment><USER4> Watched a movie by plugging my laptop into my TV.

</comment><comment><USER5> I wrote several Gtalk bots and asked them to add those as friends.

They had fun chatting!

</comment><comment><USER6> I'm amazed at how fast computers are. For instance I recently wrote a query on a medium sized database with several thousand records in a few tables joined together. The query took about 2 seconds, which was frustrating to me as I'm trying to get it under a second... but even 2 seconds is actually really impressive when you think about what you are doing. This machine can do more math in less than a second, then I could do with a pencil and paper over a year.</comment>


Ask HN: Would you quit your six figure, promising career path to learn to code? - <AUTHOR>

<comment><USER2> No. You should learn to code in your free time, then leverage your new skills to get a promotion and raise. Contribute to open source projects and build mvp style learning projects.

If you are still serious about changing careers, keep working the day job and save back as much money as you can while reaching out to headhunters/startups/etc. Don't quit your job until you have accepted an offer from another company and have a solid 6+ months cash reserve. Don't burn any bridges.

<comment><AUTHOR> I have more than six months for sure. I'm confident I wouldn't run out of money, but may regret leaving a high paying job. thanks for the feedback (guess I should have given a little more information)

<comment><USER3> My recommendation would be if you truly want to program, then learn to program and use your learning in your domain. Solution for problems that arise in that domain and see if they can become products. To me this is the safest and most effective path to not starting over completely.

</comment></comment></comment><comment><USER4> Why can't you learn to code after work or on weekends? There are people who've written books that way. If you're determined, you'd do it that way. Otherwise, you're just dreaming of riches -- which you already have, with a six-figure salary few do have.

<comment><AUTHOR> Partly because the traveling/effort that is required to succeed in my current job is very demanding.

</comment></comment><comment><AUTHOR> Has anyone made a change....if so do you "love it" or

"tell me what you wish someone would have told you"

I am just looking for a new mountain to climb (and hope it's not a "the grass is always greener" situation)

</comment><comment><AUTHOR> I know very little about coding (thinking of starting with RoR), but would love to hear if anyone has "made the jump"...do you have any regrets??

</comment><comment><USER5> Just to learn how to code, rather than to branch out on your own, or to build your own thing, or to launch your tested idea? No.

</comment><comment><USER6> Unless something changes dramatically, your shelf life as an employable programmer is going to be surprisingly limited.

<comment><AUTHOR> That's the kind of real perspective I am looking for...

I assume that is for all programming (not a RoR specific comment?)

Thank you

</comment></comment><comment><USER7> No, you should hire them instead.

<comment><AUTHOR> I don't really have a really specific burning desire for one concept.

I just wonder if developer love their jobs, or is it just an overplayed alternate version of Hollywood (completely separate than the reality of the startup life)</comment></comment>


Developing for the Apple Watch: NO PAIN NO GAIN - <AUTHOR> http://belka.us/en/applewatchdevelopment/ <comment><USER2> I really don't get the logic of the debugger. Why Apple did it in that way?

<comment><AUTHOR> Yep, I know. We had really hard times connecting with that. I hated Xcode so many times...

</comment></comment><comment><USER3> When you say it crashes while loading medium-big images, do you mean _really_? As in the whole OS crashes, or just the app?

<comment><AUTHOR> Just the app, but without any warning. You get the picture and then boom the app crashes.</comment></comment>


Blue Spire Acquires Aurelia - <AUTHOR> http://blog.aurelia.io/2016/09/12/blue-spire-acquires-aurelia/ <comment><USER2> Context would be nice. I've never heard of any of the proper nouns in this article.

<comment><USER3> Blue Spire is a web dev consulting firm that developed a series of Javascript frameworks - Durandal and Aurelia. Durandal, Inc. is an organization that acted as the maintainer of those frameworks. Enterprise support for Durandal frameworks is provided by Blue Spire.

It was perceived that this was an arrangement that is confusing and counterintuitive, so at least as far as Aurelia is concerned, Durandal is being removed from the picture.</comment></comment>


Emoji Number Plates Launched in Queensland - <AUTHOR> https://www.bbc.com/news/world-australia-47301316 <comment><USER2> For people who just saw the title or have seen joke tweets on Twitter, it's a bit misleading. The article does a good job of outlining what's really happening. License plates have always been customizable to a certain extent (like, adding a sports team), the emojis aren't officially part of the license plate numbers. They're just an image, which happens to be an emoji, that can be placed next to the license number.

<comment><USER3> So, it's basically a glorified weather-proof sticker on your license plate. I guess you saved me a click.

</comment></comment><comment><USER4> I wonder if you can use an emoji that looks like a number or letter (in a similar font to the rest of the number plate).

<comment><USER5> To combine phishing and swatting? Come up with a license plate that looks like someone else's license plate, then commit crimes so the police comes after them?

What if license plates could be used like QR codes? Some police already have such equipment attached to video cameras in their cars.

<comment><USER6> This is already a case for quite a few years in Queensland...

[https://www.caradvice.com.au/539545/automatic-number- plate-r...](https://www.caradvice.com.au/539545/automatic-number-plate- recognition-in-detail-we-go-on-patrol-with-queensland-police/)

[https://www.caradvice.com.au/539545/automatic-number- plate-r...](https://www.caradvice.com.au/539545/automatic-number-plate- recognition-in-detail-we-go-on-patrol-with-queensland-police/photos/)</comment></comment></comment>


Woman sues Nasa for right to own moon dust 'given to her by Neil Armstrong' - <AUTHOR> https://www.independent.co.uk/news/world/americas/woman-sue-nasa-meil-armstrong-moon-dust-laura-murray-tennessee-a8396176.html <comment><USER2> this is amazing</comment>


The Most Ambitious Vaporware on Github - <AUTHOR> https://github.com/begriffs/mother-structures

<comment><USER2> Wrap your head around this one: [http://math.andrej.com/2007/09/28/seemingly- impossible-funct...](http://math.andrej.com/2007/09/28/seemingly-impossible- functional-programs/)

Also, I'd recommend taking a look at Magma: <http://en.wikipedia.org/wiki/Magma_computer_algebra_system>

<comment><AUTHOR> Wow, that's serious. Thanks for the links.</comment></comment>


UX Design of Google Glass Apps - <AUTHOR> http://designmodo.com/ux-google-glass-app/

<comment><USER2> >>>"Surveys show that 35% of consumers aren't interested in wearable computers at all and another 35% think that Glass is a useless device. Sad numbers.""

I wonder what the surveys said about mobile phones in the mid 1990s. Probably similar - I remember thinking that I wouldn't need a mobile phone back then.

</comment><comment><USER3> So the design principles for Glass are the same as for every other piece of software. Good to know.

</comment><comment><USER4> Looking at the examples, I cannot see why a Glass would be useful for me. I remember ingredients for something I want to cook. I can remember where I parked my car. I have a paper map for driving directions to unfamiliar places.

However, a Glass would be great when traveling/visiting a land which language I don't speak, for example Japan. The Glass could automatically translate signs for me and make me feel less 'lost'.

<comment><USER5> Feeling lost is a feature to me-- having the whole world speak one language would seem awfully boring to me.

<comment><USER6> If you're travelling for fun, yes - but if you're on business travel and need to be on time, then feeling lost is the last thing you would want.

</comment></comment></comment><comment><USER7> I'm surprised that _voice_ is not mentioned once in this article. As another commenter said, these guidelines could be valid for any device and platform, they have nothing specific to Google Glass.

In my opinion, any experience involving any swipe/touch on Glass is a terrible experience. Period.

</comment><comment><USER8> As one of the folks who was able to try these on (thanks Morgan), I can say that the initial impression is speechlessness.

It's a very foreign feeling to have information at your fingertips, but not having anything in your hands. There's a moment of pause as you figure out what to do with them.

</comment><comment><USER9> I did not feel the need for a smartphone, now I can't live without one. Maybe this is symptomatic of technology disruption, or just that I do not have the "early adopter" spirit. Wait and see.

</comment><comment><USER10> Great post Marcin, I love these types of personal essays. Lots of insight delivered in a super a relatable way. Hope to see more like this in the future! I'm extremely excited about the future of wearable tech and I can't wait to get my hands on my own pair of Google Glass.

<comment><AUTHOR> Thanks!I'm excited about wearable tech as well. Currently crossing fingers hard for iWatch ;)</comment></comment>


ASK HN : Learn to write my own .vimrc configuration - <AUTHOR>

- I have been using vim for a sometime and haven't had used ~/.vimrc for configurations<p>- I see many code samples on Github, but don't actually understand where they came from and what they mean<p>- I want to start all fresh and understand them, write my own .vimrc configuration and extend it<p>- Please tell me where shall I start <comment><USER2> <http://vimbits.com/>

<http://vim.wikia.com/wiki/Vim_Tips_Wiki>

Your .vimrc is essentially just going to be a collection of snippets that you've found that seem to do some good. Many of mine have been taken from other people's dotfiles, from dotfile projects such as

<http://skwp.github.com/dotfiles/#section-13-1>

and from the sites above. Take a look at the .vimrc of people you might know on github, for example. Here's mine, it's fairly well commented:

<https://github.com/russfrank/dotfiles/blob/master/.vimrc></comment>


Clickcha - click the biggest/smallest number for CAPTCHA - <AUTHOR> http://clickcha.com/demo/

<comment><USER2> _Clickcha is more secure than traditional text based CAPTCHAs which can be read via OCR software._

Because... circled numbers can't be read by OCR software?

Without some visual obfuscation, I fail to see how this is an improvement against bots. _Simple_ OCR + location of match = 100% success rate (just click the middle). Improvement for _users_ , perhaps, especially due to its simplicity... but I don't know if that's worth it.

<comment><AUTHOR> > Simple OCR + location of match = 100% success rate

Sometimes it ask you to choose the biggest square, not only biggest/smallest questions. The challenge varies all the time.

For example, I can ask you to choose the biggest triangle out of some boxes, circles and stars, and the question sentence can be displayed using a line of traditional CAPTCHA

<comment><USER3> ok sure, but how many permutations of different questions are there? Once you have these, it is trivial to OCR the numbers/shapes and pick the appropriate one per the question.

<comment><USER4> > how many permutations of different questions are there?

Infinite! Just this of the possibilities with that kind of system. You could keep adding different questions (just minor variations) and it won't be difficult to keep ahead of spammers. Plus there is always a trade off between security and ease of use. I think the ease of use with clickcha is well worth the _slight_ loss of security.

<comment><USER3> Having to manually add questions means that practically speaking the number of possible questions <<<<<<<< infiti. As soon as you add another question, the spammers will simply add it to their portfolio of question types. There is no way "you can keep ahead of the spammers" with this.

<comment><USER5> Well there's that and they only need to break 1 of them, adding more types doesn't really do anything when you can refresh except to slow things down by a bit. :P

</comment></comment></comment></comment></comment></comment><comment><USER6> On the plus side, this is going to cost the first motivated spammer who runs into it about $50 ~ $100 to get it broken by an Eastern European programmer who is better at OCR than probably anyone on HN.

On the minus side, it is then totally useless aside from hassling actual users.

<comment><USER7> I think he is onto something, and just needs to think it through. I think creativity should be encouraged.

<comment><USER8> On the part of clickcha or on the part of the eastern european programmer?

</comment></comment></comment><comment><USER9> That doesn't look at all impressive. It seems easy to write a solver for it. Especially considering most spam bots are quite happy with relatively low rates of succeeding, they can just brute-force until they find one they can solve.

<comment><AUTHOR> I think they use javascript to record the coordinate (x, y) where you clicked it

on one scenario you 'll select a 24x24 square out of a 200x100 pixel picture, the success rate is 2.8%

<comment><USER10> Bots will be happy by any success rate above 0%

<comment><USER4> Hi,

I am the developer of clickcha. Appreciate the input, but you seem to be forgetting that bruteforcing can be avoided by temporarily banning the IP for some time after certain number of incorrect attempts.

<comment><USER10> Don't forget that spammers exploit botnets with tens of thousands zombie computers each one with unique IP. 2.8% from 10000 zombies = 280 first try successful breaches.

</comment></comment></comment></comment></comment><comment><USER11> Whatever happened to the idea of filtering out comments that looked spammy, or that linked to spammy web pages? E-mail spam filtering has come a long way, without captchas to hide behind.

</comment><comment><USER12> I written to the website owner offering to do a port for ruby on rails. I think this clickcha will also cause curiosity in people and increase comments.

Edit: what's wrong with this?

<comment><USER13> Is English your first language?

Because if not you'll have a hard time understanding what I'm saying. (And if it is you have no excuse for the bad grammar.)

Basically you come across as (you sound like) a "cheerleader". You want him to hire you, so you are praising his software. But your praise is false, and doesn't add anything to the discussion.

Telling the whole world you want to do a ruby on rails port doesn't add anything to the discussion either.

<comment><USER12> English is not my first language, but I understand your point. I thought it was something nice after having read this page on his website: <http://clickcha.com/faqs/>

Thanks for the clarification, it indirectly helps me to understand both the culture and idioms of the english language.</comment></comment></comment>


Someone is selling more than $5 million in BTC at $300 - <AUTHOR> https://bitcoinwisdom.com/markets/bitstamp/btcusd#

<comment><USER2> This was already posted. The discussion is here:

[https://news.ycombinator.com/item?id=8414129](https://news.ycombinator.com/item?id=8414129)</comment>