600k Images Removed from ImageNet After Art Project Exposes Racist Bias - <AUTHOR> https://hyperallergic.com/518822/600000-images-removed-from-ai-database-after-art-project-exposes-racist-bias/ <comment> seph-reed Superficial judgement is kind of where intelligence starts.

It's really only people where you can't tell what it does/is from the outside. Cars, trees, animals, mountains... everything else, if it looks a way it acts that way. Early AI will probably have just as much trouble with this as people have historically.

I really wish people would start viewing Racism as a willingness to let that primitive part of the mind be in command, rather than a binary attribute you either have or don't. Like, nobody is 100% not racist. There will always be slip ups, over-simplifications, snap judgements, subconscious or not.

<comment><USER2> >It's really only people where you can't tell what it does/is from the outside.

Thing is, that's not even true in that it doesn't fully acknowledge the problem. You often CAN tell information from people's outward appearance, albeit probabilistically. Therein lies the problem: you can very easily train an algorithm to be maximally right according to your cost function, but end up biased because the underlying distributions aren't the same between groups.

The issue is that as a society we've (mostly) decided that unfairly classifying someone based on correlated but non-causal characteristics is wrong, EVEN in the extreme that you're right more often than you're wrong if you make that assumption.

<comment><USER3> > we've (mostly) decided that unfairly classifying someone based on correlated > but non-causal characteristics is wrong, EVEN in the extreme that you're > right more often than you're wrong if you make that assumption.

Ironically, the only places where it's legally prohibited or frowned upon to use these heuristic techniques are situations that people have arbitrarily (heuristically or conveniently) decided.

For example: It's "not fair" to hire someone because they're white (and consequently have a higher chance of being wealthy and hence a higher change of being educated.)

But it's "fair" to choose a love partner based on their height, their waist- to-hip ratio, their weight (and hence having a higher chance of giving birth to healthy offspring, better physical protection, etc.).

Maybe it's hypocritical, and I don't know if that's a good thing or not. Maybe being hypocritical helps us survive.

<comment><USER4> That's not very arbitrary. If you're hiring someone, you're always in a position of power. If you're dating someone, there's no power differential (or if there is, that's a problem all by itself).

<comment><USER5> How are you "always in a position of power" when hiring someone? That's only true when there's more supply than demand, and it's the opposite in markets where the candidates get multiple high-quality offers to choose from.

<comment><USER6> Because you are paying that person money and have the ability to fire them. In the US you're also probably providing their health care.

I get what you're saying, but no one moves jobs every week. The sunk costs of switching employment are significant for the employee, less so for the company.

<comment><USER7> They provide you valuable work in exchange for that... Internally you are probably imagining some big corp that can pick from 100s of replaceable workers.

<comment><USER8> If you provide health care, you always have power over that person. Less so if they are relatively healthy - but any condition, theirs or a family members, means that the person has no real choice but to do enough good work to keep the job. Even if they hate the company. Even if you treat them poorly. They still must work for you. This is even more true if you have hundreds of people that will replace them and your health coverage is good enough - or at least, better than the opposition.

To a lesser degree, the same goes with vacation time and other benefits. At least in the US, anyway. This is why having some of this stuff coded into law and decoupled from employment takes some power away from employers.

<comment><USER7> Ideally there are multiple companies which you could choose from... And some might really need your specific skillset.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> The AI isn't biased, the curaters were.

The people who curated the first training set used subjective words like 'attractive' to tag the images which means the AI tagged all images it deemed 'attractive' to the people who made the training set. as this is a very biased and homogenous group it means the AI turned out biased. Maybe if they randomly sampled millions of people from all countries in order to create the training data then they could effectively train an AI to guess what YOU might find attractive. However even then I somehow doubt it. Beauty is in the eye of the beholder. We dont consiously know the rules of what we are attracted to, nor does an AI have secret information if you just supplied it with enough words and images.

If they'd stuck with simple classifications like 'black' 'white' 'man' 'woman' then they would have less subjective judgement values about the original training set.

<comment><USER10> > The AI isn't biased, the curaters were.

No, it's not "The dataset is biased, the AI isn't" it's "The dataset is biased, THEREFORE the AI is biased".

<comment><USER11> Data is data and cannot make value judgments so not sure how it can be racist. If the data is how racist people label things it still is not racist data it is data is perfectly valid for what it is racists. Removing the images from ImageNet seems absurd.

<comment><USER12> I mean, it's very common colloquially to describe non sentient things as racist because they're based on either purposely or obliviously racist ideas and stereotypes.

<comment><USER11> Do you hear yourself ?! ImageNet was not based on either purposely or obliviously racist ideas and stereotypes. If it was, sure, I would have some patience for the claim it was racist. But it was not.

</comment></comment></comment></comment></comment><comment><USER13> The problem seems less about racist bias specifically and more about unbelievably dumb tags generally in the first place.

"Stunner"? "Looker"? _" Mantrap"?_ Or even _trying_ to tag people's _images_ with categories like _Buddhist_ , _grinner_ , or _microeconomist_?

What were they thinking?! Clearly these tags were never curated in any remotely responsible way -- for quality, for sensitivity, or just usefulness _at all_ \-- and I'm shocked they were ever intended for academic or research use. No _wonder_ image recognition gets a bad rap, with input data like this.

<comment><USER14> There are ~32.000 tags. No surveillance system is using ImageNet tags to classify people into Buddhists or Not-Buddhist. Most researchers ignore these tags and focus on a 1000 classes, and know that 32k performance is not good (and these artists have no intention of making it work at all). What they are uniquely trying with this Art Project is as much research as it is activism. Note that "mantrap" is defined in synset as "A trap for catching trespassers", and that you are bound to find weird stuff among over 30k categories (imagine what you can say with the 32% most popular words in French...).

This is a photo in question: [https://memepedia.ru/wp- content/uploads/2019/09/imagenet-1.p...](https://memepedia.ru/wp- content/uploads/2019/09/imagenet-1.png)

This is the route the network took:

person, individual, someone, somebody, mortal, soul (6978) > female, female person (150) > woman, adult female (129) > smasher, stunner, knockout, beauty, ravisher, sweetheart, peach, lulu, looker, mantrap, dish (0)

So it was (politically) correct on the first three categories, and the last one was either a crapshoot (and she could also have gotten to the subcategory of "prostitute" > "streetwalker, street girl, hooker, hustler, floozy, floozie, slattern") or she really is posing in a common "beautiful woman"-way. (The global description for this route is "A very attractive or seductive looking woman" and often triggers for females with tilted heads and lip curls).

You can turn any faces dataset into a labeled face color dataset, so if a black person being subclassified as "negro" is problematic bias or encoded racism, then all such datasets are suspect. Noisy labeled data is the norm, not some horrible exception to be avoided at all costs.

<comment><USER15> The fact that we have a machine learning algorithm that labels _humans_ as smashers, prostitutes, or convicts is a problem, irrespective of whatever technical justification can be made for it.

<comment><USER14> But who artificially created that problem? The artists. There is no marketing company that has intelligent billboards scanning the public for prostitutes. There are no researchers seriously using CV to classify convicts (at least not in the West, and not with ImageNet). That could be a malicious usage problem. This is either a non-problem or Armaggedon for all ML CV datasets, because you certainly can use most CV datasets to train a crappy classifier to output offensive labels. If I train a people photo tagger using a dataset used for combating poaching monkeys in Africa, then who is at fault? Certainly not the researchers who published that dataset with the idea that the data would be used with common sense and scientific rigor, not adversarially -- to make a political point attacking the very existence of that data. The "exposed" bias is trivial.

It is the technical justification that should be all that matters for a canonical academic dataset. Science does its best to be apolitical, but then politics ("red bull drinking white men train racist and sexist classifiers") is forced upon it, and we can't really have a productive conversation about bias and ethics anymore.

AI needs common sense knowledge of the world to improve. Censorship so science does not offend our sensibilities, would only make it so Google Image Search (a machine learning algorithm) does not return any images of people when you search for "prostitute". Heck, the AI would never learn the difference between a male and a female prostitute. Destruction of accessible knowledge so we (aka: people on Twitter who think AI is the terminator, or the director of the internet) don't get offended by some primitive ML model-as-art-project forced to make errors or awkward classifications. That's a sentence the academic ML community could do entirely without. No benchmarks or duckface selfie would be hurt. No unfortunate third-world souls hired to scan 20 million + internet crawled images for wrongthink, only for the machine to do the unsupervised learning in a hug box, not a black box. Oi mate, you got a loicense fer that label?

Just wait until the activists find out who wrote the first 100 8's added to MNIST. Nobody but MIT would be associated with her, if they found out what she did.

</comment></comment></comment></comment><comment><USER16> Their statement: [http://image-net.org/update-sep-17-2019](http://image- net.org/update-sep-17-2019)

> Each synset is classified as either "unsafe" (offensive regardless of > context), "sensitive" (offensive depending on context), or "safe". "Unsafe" > synsets are inherently offensive, such as those with profanity, those that > correspond to racial or gender slurs, or those that correspond to negative > characterizations of people (for example, racist). "Sensitive" synsets are > not inherently offensive, but they may cause offense when applied > inappropriately, such as the classification of people based on sexual > orientation and religion.

> So far out of 2,832 synsets within the person subtree we've identified 438 > "unsafe" synsets and 1,155 "sensitive" synsets. The remaining 1,239 synsets > are temporarily deemed "safe."

They've also completely disabled Imagenet downloads while they remedy this.

<comment><USER17> Great, I can see some of this being useless (some parts of the unsafe dataset), but if they cull the "sensitive" portion, this may induce performance regressions.

I need to find an ImageNet archive now.

<comment><USER18> It doesn't really touch the 1000 class "Imagenet" that's commonly used in computer vision.

<comment><USER19> Some of the classes are subcategories of ILSVRC classes in the WordNet hierarchy. So by removing images of persons in categories that are considered inappropriate, the resulting classifier will end up less likely to recognize those as images of people at all. I'm not sure whether that's a better outcome.

</comment></comment></comment></comment><comment><USER20> Really the bias isn't the true problem here so much as the lack of epistemology in how it is being used. By definition associations work by blind correlations - expecting anything other than stereotyping is a foolish misuse of the tool. It will be wrong for outliers because it tries to get it right for most cases regardless of cause - like skin cancer detectors who saw rulers as a sign of cancer because most of the reference images of cancer had a ruler in them.

<comment><USER21> Exactly. The large amount of faith currently placed in probabilistic models that do not have common sense ways of eliminating factors which are extremely unlikely to be causal (like the presence if a ruler causing cancer) disturbs me. There is something that humans do that we have not quite figured out how to teach computers yet, at least as far as I can tell, which is to get them to evaluate whether their model is not just compatible with their observations, but other models and prior knowledge about the objects being observed.

I think we'll get there at some point, and I'm not exposed to the most cutting edge AI research, but it seems like AI us currently very overhyped and deeply flawed for many of the applications people would like to use it for.

<comment><USER22> Because these algorithms don't know that they are classifying cancer. The label it sees is just 1 or 0. For all it knows, based on its inputs, you may want to classify ruler/non-ruler images.

To achieve what you want, semantic structure must be used as labels instead of just categorical labels.

Assuming we have a sane AI that now knows its looking for cancer, it knows what that means (from digesting medical textbooks, papers and generic text corpora) and it can detect rulers and knows the two are not casually linked from ruler to cancer, we could make the model output "dataset diagnostics", like a "Warning! The cancer label in this dataset is implausibly correlated with the visual presence of a ruler". Or "Warning: 99% of your hotdog images show a human hand. Evaluation on this dataset will ignore errors on hotdog images without hands!"

Context does matter though. If there's an orange fluff on a tree trunk, the AI is right to look at the environment and infer it's a squirrel.

</comment></comment></comment><comment><USER23> Has this been confirmed? Not doubting the story, but the article doesn't provide a source.

Edit: Might be this, which was a week ago / before the Roulette blew up: [http://image-net.org/update-sep-17-2019](http://image-net.org/update- sep-17-2019)

> We are in the process of preparing a new version of ImageNet by removing all > the synsets identified as "unsafe" and "sensitive" along with their > associated images. This will result in the removal of 600,040 images, > leaving 577,244 images in the remaining "safe" person synsets.

<comment><USER24> If they delete half the data, the probability of the remaining data sets to be rubbish is quite high. You also wouldn't want someone to pick sets in the first place.

</comment></comment><comment><USER25> Bias in AI (whatever the source or nature of the problem) is a real issue that needs addressing, but taking the relevant training data off of ImageNet seems like a perfect example of papering over a problem to avoid really confronting it. We will need to find ways to make AI programs than can see beyond the biases (about humans or otherwise) that will _always_ exist to some degree in real-world data.

If the ImageNet contains bias that leads to embarrassing results- that's fine! That give us a readily available toy instance of the problem to study. Taking that away could actively harm anti-bias research.

<comment><USER26> Bias: prejudice in favor of or against one thing, person, or group compared with another, usually in a way considered to be unfair.

If a data set is flawed, it should be fixed, but when ML finds objective patterns our culture finds subjectively unpalatable and we choose to "fix" them, we fall prey to and re-enact the same grade of self-delusion exhibited by, for example, "the church" in the dark ages. Computer science is already low in terms of accountability & rigor compared to other fields without these kinds of suggestions.

<comment> crooked-v You use the phrase 'objective pattern' here, but that conflates causation and correlation.

For example: black men in the US are more likely than white men to have criminal records, but this in no way means that black men are "objectively" more criminal.

<comment><USER27> Let me catch up with the double-think. They commit more crime on average but they are not more criminal? What kind of olympics-grade mental gymnastics are these?

<comment><USER28> You're rewording what they said. If any group of people is more policed than another group of people, said group is more likely to have a criminal record. Doesn't mean they're more "criminal" than any other group but more of a reflection on the current state of the criminal justice system.

To paraphrase Warren Buffet: "If a cop follows you for 500 miles, they're going to find a reason to give you a ticket."

<comment><USER27> Could be true for trivial felonies like a ticket, but if we talk about real crime thats not really an excuse. Would be more inclined to think black people commit more crime because socioeconomic factors, as poverty correlates crime.

<comment><USER29> It really depends on how you define crime. Usually crime and prosecution is defined in such a way as to impact the lower classes more than the upper classes.

<comment><USER30> Murder is rather easy to define. There is a dead body with holes in his/her head, there is a murder. The tragedy being that murder is way more prevalent in the black community, partly because of underpolicing.

<comment><USER31> I wouldn't be so fast with that assertion.

If your life is a cesspit and you can count on the authorities to be part of the problem, where does murder end and self defense begin?

See the song "I shot the sheriff." I'm most familiar with the Eric Clapton version, but googling it recently suggests to me it was originally written by Bob Marley.

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

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER32> "For example, the program defined one white woman as a "stunner, looker, mantrap," and "dish," describing her as "a very attractive or seductive looking woman." Many people of color have noted an obvious racist bias to their results. Jamal Jordan, a journalist at the New York Times, explained on Twitter that each of his uploaded photographs returned tags like "Black, Black African, Negroid, or Negro."

They claim this is AI, but earlier in the article, it states that mechanical turk was used. Mechanical Turk is basically just people getting paid pennies or fractions of a penny to tag these photos.

Many people on Mechanical Turk are from countries where English is not their first language and they don't have the same idea of racism as we do here in the US, which would explain the racist tags mentioned in the article.

This doesn't really show us anything about AI and racial bias and more that other countries still aren't up to our levels of what we consider decent.

<comment><USER33> The AI connection is that these are the type of datasets that feed AI systems. It shows that you have to be careful when curating your dataset, so that you don't further bias.

I just hope the masses don't glom onto this, start shrieking that "AI is racist", and attempt to take AI completely out of the picture.

</comment></comment><comment><USER34> edit: I conflated _ImageNet_ with the art exhibitors; it is the former who are culling the images as a result of public reaction, not the latter.

This is a really bizarre project. I had seen some really offensive race-based labels, but I thought revealing the ugliness of the system was part of the point of this project?

But besides that, the results just seemed completely scattershot; I half expect the artists/exhibitors to reveal that x% of the results were randomized. Last week, I tried it myself after seeing another Asian user display results that were _entirely_ Asian slurs (e.g. gook, slant-eyed). I uploaded my own very Asian-looking photo and got "prophetess", along with very vague labels, such as "person" and "individual".

Maybe the exhibitors cleaned the data/results by the time I tried it, but I used it just a few hours after seeing the other Asian user's results, so I'm doubtful that her tweet/complaints were enough on their own to change up the dataset that same day.

<comment><USER35> > I thought revealing the ugliness of the system was part of the point of this > project?

It 100% is. From the link to the artist's website:

"Things get strange: A photograph of a woman smiling in a bikini is labeled a "slattern, slut, slovenly woman, trollop." A young man drinking beer is categorized as an "alcoholic, alky, dipsomaniac, boozer, lush, soaker, souse." A child wearing sunglasses is classified as a "failure, loser, non-starter, unsuccessful person." You're looking at the "person" category in a dataset called ImageNet, one of the most widely used training sets for machine learning."

<comment><USER34> I was just about to edit and correct myself; it is _ImageNet_ who has made the decision to delete the offensive images, after the reaction to the exhibitors' work. It's too bad the exhibitors didn't make their own mirror/cache of the dataset. Judging from some tweets I saw, I think this project really helped people to understand how much of current artificial intelligence is human- driven. It's not a sentient computer deeming you to be a "slant-eye", it's a bunch of random Internet users. (not that this makes you feel better about the world, but at least the hate's coming from an expected source)

</comment></comment></comment><comment><USER36> While interesting, this is not surprising. One of the most commonly utilized datasets for learning ML is the Boston Housing dataset - [https://www.kaggle.com/c/boston-housing](https://www.kaggle.com/c/boston- housing)

In it there's a problematic feature tagged simply as "black" and it is defined as the proportion of blacks by town.

Any pricing model that is built off of this dataset is inherently racially biased because the data has been collected and the feature tagged - but what's the alternative? Not to collect the information? Or collect it but completely ignore this feature?

<comment><USER15> Sensitive features should not be collected or used in applications where they introduce bias.

For example, a medical screening NN may find race to be a valuable feature for the prediction of illness; but a health insurance assessor should not.

<comment><USER37> Due to spurious correlations, it could still be helpful for the insurance assessor so that they can use bias mitigation techniques. Otherwise, it might learn something about zip code or something else that leads to a similar outcome as having race as an input variable. Just removing a sensitive variable does not suffice for preventing unwanted bias.

</comment></comment></comment><comment><USER38> AIs are like every other computer program - perfectly naive. If you train them on bad data, you get bad results. Garbage in, garbage out.

<comment><USER39> Of course, but the issue is also data availability. It is not easy to get large sets of data to be used in training AI. Imagenet was a great attempt to provide some useful data.

<comment><USER38> My comment was not intended to be a ding on Imagenet. Data comes from somewhere, and no source is without bias because no human is without bias.

</comment></comment></comment><comment><USER40> I love articles and papers like this. They keep illustrating that the people writing them do not get it:

Guess who classified the blonde white woman "a dish" on a Mechanical Turk? Do you think it was that Billy Bob from the swamp of Louisianan who makes $12/hour? Because $12/hour is impossible to make classifying images. Or do you think it was a dirt poor Indonesian or Filipino or Chinese or Indian for whom that's the best job he or she could possibly get and that's exactly how they view the world and there are over three billion of them?

<comment><USER41> Your characterization of these nationals aside, what makes you think any of them even know what "dish" means in this context?

Sincerely, a Malaysian Chinese who's seeing this slang for the first time.

<comment><USER42> Dish is almost an archaic term a this point. So either someone's pretty old grandparents are working for MT, or people are translating a term from another language using an old dictionary.

</comment></comment></comment><comment><USER43> How were the mechanical turk workers asked to annotate?

<comment><USER44> That's the key question here, isn't it?

If faces are like other images in the database, then according to this article turkers were presented a word and a group of images, and asked to click all the images that showed said word. [https://qz.com/1034972/the-data-that- changed-the-direction-o...](https://qz.com/1034972/the-data-that-changed-the- direction-of-ai-research-and-possibly-the-world/)

<comment><USER9> ImageNet are likely incredibly naive with how they approached and fixed all of this.

from the article "Jamal Jordan, a journalist at the New York Times, explained on Twitter that each of his uploaded photographs returned tags like "Black, Black African, Negroid, or Negro.""

Which indicates that the vocabulary they used has 4 words to describe a black person's skin color. This severely complicates things and leaves all kinds of unintended biases on the table before even getting to the human element. Though I doubt they used a dictionary at all because 'Black African' isn't really a word. And not found in a few dictionaries I tried online. - if the article is accurate.

They should have curated the vocabulary first, value judgements like 'attractive' should be removed because it means something different for everyone judging the images. Synonyms should be collapsed into one to prevent weighted biases, etc.

<comment><USER17> I'm actually quite surprised that they didn't collapse the synonyms though.

Though value judgements should not be removed. They should have been separated and placed together with some tagger metadata as they might actually be informative then.

</comment></comment></comment></comment><comment><USER45> In NLP (specifically vectorizing words, ala word2vec) there's a famous test of whether or not your training has worked properly whereby you calculate the vector of "king" and subtract the vector of "man" and add the vector of "woman," if your machine is properly tuned, you should end up with a vector close to "queen" or "princess."

I wonder if similar things can be done to address specific (i.e. racial or gender) biases in computer vision.

<comment><USER46> There is a similar word-embedding test that definitely rustles people's jimmies:

Doctor - Man + Woman = ?

What normally comes out is Nurse. What "they" think should come out is Doctor!

By "they" I mean people that get upset by this.

<comment><USER47> Yeah, besides the fact that this compositionality is relatively unique to word2vec, research on the biases pre-trained models express is pretty available. Linked a few below for those interested. Most of the issues are down to the same phenomenon discussed here in the context of ImageNet, the input texts were biased and the algorithm learned said bias.

[0] [https://arxiv.org/abs/1607.06520](https://arxiv.org/abs/1607.06520) "Man is to Computer Programmer as Woman is to Homemaker? Debiasing Word Embeddings "

[1] [http://proceedings.mlr.press/v97/brunet19a/brunet19a.pdf](http://proceedings.mlr.press/v97/brunet19a/brunet19a.pdf) "Understanding the Origins of Bias in Word Embeddings"

[2] [http://matthewkenney.site/biases.html](http://matthewkenney.site/biases.html) "Google word2vec biases"

</comment></comment></comment><comment><USER48> The longer piece this one is based on is much more comprehensive in both discussion and concrete examples: [https://www.excavating.ai/](https://www.excavating.ai/)

</comment><comment><USER49> I think the whole training and such AI was just bad designed. Aren't all first impression judgements prejudices as much as all racist bias are? If I say a person is attractive, inspires me just based on their looking it is a positive judgement, a bias based on the looks and a few traits I subconsciously perceive and perhaps I cannot even explain, and the same with the negative ones, and I guess for some people this association happens also to race and looks. Basically an AI was trained to map the prejudices of their inputs, and that means to create a snapshot of the subconscious average of whoever behind the mechanical turk is, everyone has prejudices of all sorts which usually are not manifested externally but in a process of classification such as the one of the mechnical turk might arise much more.

</comment><comment><USER50> Why take down the images? It seems really that one should take down entire classifications, i.e. remove the tags.

<comment><USER19> ImageNet is a mapping from tags to images, so removing the tags means removing the images.

An image of a "bad person" wasn't tagged by someone looking at said image and deciding that "bad person" was the best possible description. It was generated by searching Google Images for "bad person" and removing obviously incorrect results (e.g. when there's nobody in the image).

Researchers have been using it to learn the inverse mapping from images to tags with some success, but in its construction the dataset is not naturally suited for that task.

<comment><USER50> As I understood it, and confirmed by Wikipedia (as much that's worth) images were hand annotated.

<comment><USER19> Only the second step "removing obviously incorrect results" involved human annotators.

</comment></comment></comment></comment><comment><USER51> The article mentions [https://imagenet-roulette.paglen.com/](https://imagenet- roulette.paglen.com/) but doesn't link to it. Just put in a photo and see what category of person the algorithm sorts them in to.

</comment><comment><USER52> One of my favorites is searching google images for "immigrant" versus "expat". Guess which one is whiter!

</comment><comment><USER53> I don't quite get it, why is "Buddhist" more objectionable than "grinner"? Surely there must be more egregious examples than that if they decided to pull 600,000 images? And if they find the tag "Negro" offensive can't they just replace it with "black", "of African origin" or whatever the currently allowed term is? Tagging a black person as black does not seem very objectionable in a country that provides racial breakdowns for official statistics.

<comment><USER54> When white people are labeled for their other qualities, and non-white people are labeled for their (perceived) ethnicity, _that's racist_. Which is to say, unfair. Not nice.

<comment><USER53> Were those two examples labeled by the same people? If there really is systematic bias why don't they mention some statistics? For example, 90% of white people lacked a race tag while 80% of black people had one?

Also, it doesn't seem like there has been any evil intent here, nor did I see anything about pernicious consequences. It seems a bit overblown to accuse people of racism over something that is unintended and theoretical. Just update the tags.

</comment></comment></comment><comment><USER55> I think the ironic thing here is the algorithm is intentionally designed to make a superficial judgement on the image it's presented with.

If it was trained to identify "human" or otherwise categorize the things in the picture, that's exactly what it would output.

Next you can train it to attempt to guess basic traits like gender or ethnicity, of course this can only be done based on the RGB values of a 2D array of pixels. Interestingly the NN will not be merely be using skin color but building probabilistic weightings based on any statistically significant features. For added controversy, it's probably even possible to invert parts of the network to suss out how it's weighting various facial features toward different labeling.

Lastly the images could be labeled for things like profession of the subject. A good intentioned effort to perhaps detect things like a lab coat could mean a doctor or scientist was followed by oblivious Turkers with predictably poor results.

The problem of course is not with the images but the particular labeling hierarchy, and allowing opinionated labels as well as labels which may be true for the particular subject but which bear no distinguishing features for which to actually codify ("portrait of a macroeconomist"), in other words, garbage in garbage out. ImageNet calls this the "imageability" of the label.

Calling this racism of course is entirely inapt, because there is no judgement being made whatsoever. Even if the sampling method was well designed and the labeling factually accurate, the system would still produce output which could be considered offensive. Again, because the entire point of the algorithm is to generate statistical assumptions based on a single image.

My conclusion is that some superficial judgments are algorithmically useful and hopefully less controversial. "White male human, ~55 yrs old, 180lbs". Even things like analyzing clothing and guessing where the picture was taken. Iff the clothing is a uniform, identifying the profession (police, fire, paramedic)

But you have to know where this goes off the rails. Bad enough to label indistinct portraits with the subject's profession, let's not do inane things like labeling them with how subjectively attractive the labeler thinks the person is, their economic status, maybe even a 1-10 scale of how threatening they look or if they look like a criminal or not! </facepalm>

</comment><comment><USER56> The "app", mentioned in the article, but not linked, is hosted here (until Friday), if you want to try it out: [https://imagenet- roulette.paglen.com/](https://imagenet-roulette.paglen.com/)

Apparently i'm either an insurance agent (in a grey t-shirt) or a surgeon (in a red hoodie).

</comment><comment><USER57> _"This exhibition shows how these images are part of a long tradition of capturing people's images without their consent, in order to classify, segment, and often stereotype them in ways that evokes colonial projects of the past," Paglen told the Art Newspaper._

Odd that the images were removed for being categorized as the project intended.

</comment><comment><USER58> wouldn't it make more sense to add more images, not remove existing data?

<comment><USER59> If I understand correctly, they are removing incorrect tags, not the data. It's just news because some of the incorrect tags are racist bias. If they removed a bunch of cats tagged as dogs, you wouldn't hear about it.

</comment></comment><comment><USER60> Of course it was removed. 4chan was having way too much fun with image classification recently :D

<comment><USER24> They will be hated for it, but they do provide a really important service here. And if it is just pulling down the pant of people trying to classify the world.

</comment></comment><comment><USER61> The more you impose completeness of morality into a data set, the more inconsistent your results will be.

Gödel arbitrage will be very profitable in the future.

</comment><comment><USER35> I wonder if the article author knew what he was hinting at when he chose the example of the art project calling someone a "dish"???

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

(And now I'm gonna be listening to 90s electro-disco all day...)

</comment><comment><USER62> That's newthink at a level I find hard to comprehend. Censoring datasets instead of improving them.

"We have too many pictures of white people, remove them!"

"We don't have enough pictures of non-white people, add them!"

I'd have gone for the latter, and have let the set be biased until fixed.

</comment><comment><USER63> I uploaded my picture, and it was tagged "beard",

Which is fine, I have a beard, But then I read the definition:

> beard: a person who diverts suspicion from someone (especially a woman who > accompanies a male homosexual in order to conceal his homosexuality)

:-/

</comment><comment><USER64> _For the artist, ImageNet's problems are inherent to any kind of classification system. If AI learns from humans, the rationale goes, then it will inherent all the same biases that humans have. Training Humans simply exposes how technology's air of objectivity is more façade than reality._

An AI being accused of bias tends to really mean it works. Removing bias from AI, I've noticed, requires hardcoded 'fixes' rather than refactoring the algorithms. And in my view, becomes yet another human-curated classification system, and no longer AI.

<comment><USER65> Your point takes a narrow view on correctness and also shows why you need to take the systemic view on the issue.

The problem is not that the AI is "inaccurate". The problem is the second order effect: when you build systems on top of this AI's predictions, you cement the input social biases into future systems in a way that is very hard to remediate.

The real problem is how to avoid accidentally creating systems that amplify existing social biases.

I'm very specifically using the term "social bias" to distinguish from "bias" as a term in ML, because they are very different problems.

</comment></comment><comment><USER66> reminds me in the early 2000s when people would say "but he's gay" as if that had anything to do with their profession or aspirations in life or the topic at hand, as if that specific metadata defined them more than the other pieces of metadata.

this AI seems to be doing that to things it has determined are black people. A bunch of synonyms for black people, some English, some Spanish, some phenotypes, some of those descriptions simultaneously fallen out of favor in some parts of the world but not others, while completely eliminating other metadata.

I'm not sure Imagenet's response of removing "sensitive" adjectives is capable of fixing this. Mechanical Turk: english, spanish, academics, using terms that aren't universally agreed upon?

That doesn't really address what is happening

</comment><comment><USER67> Any way to download those images before they get deleted ?

</comment><comment><USER68> Everybody seems to be focusing if the image recognition is racist or biased. I think there is a much more fundamental problem. The image classification does not work for a lot of images of people!

For example Search for images on scuba diver [https://upload.wikimedia.org/wikipedia/commons/9/94/Buzo.jpg](https://upload.wikimedia.org/wikipedia/commons/9/94/Buzo.jpg) is labeled choreographer [https://dtmag.com/wp-content/uploads/2015/03/scuba- diver-105...](https://dtmag.com/wp-content/uploads/2015/03/scuba- diver-1050x700.jpg) is labeled picador (the horseman who pricks the bull with a lance early in the bullfight to goad the bull and to make it keep its head low)

How about search for images of dancer [https://eugeneballet.org/wp- content/uploads/2018/10/Alessand...](https://eugeneballet.org/wp- content/uploads/2018/10/Alessandro_CF004500.jpg) is a nonsmoker [https://www.ballet.org.uk/wp- content/uploads/2017/09/ENB_Eme...](https://www.ballet.org.uk/wp- content/uploads/2017/09/ENB_Emerging-Dancer_Final- Composite_mobile-544x780.jpg) is speedskater [https://www.ballet.org.uk/wp- content/uploads/2018/10/WEB-ENB...](https://www.ballet.org.uk/wp- content/uploads/2018/10/WEB-ENB-ED2019-2500x1514.jpg) is plyer [https://rachelneville.com/wp- content/uploads/2018/11/10.14.1...](https://rachelneville.com/wp- content/uploads/2018/11/10.14.18.SamanthaSchaubach-0416.jpg) is a mediatrix (a woman who is a mediator)

How about images of lumberjack [https://alaskashoreexcursions.com/media/ecom/prodxl/Lumberja...](https://alaskashoreexcursions.com/media/ecom/prodxl/Lumberjack- swinging-axe.jpg) is a skinhead [https://static.tvtropes.org/pmwiki/pub/images/lumberjack_591...](https://static.tvtropes.org/pmwiki/pub/images/lumberjack_5919.jpg) beard: a person who diverts suspicion from someone (especially a woman who accompanies a male homosexual in order to conceal his homosexuality) [http://cdn.shopify.com/s/files/1/0234/5963/products/I4A0032-...](http://cdn.shopify.com/s/files/1/0234/5963/products/I4A0032-Edit.jpg?v=1541448378) is a flight attendant [https://previews.123rf.com/images/rasstock/rasstock1411/rass...](https://previews.123rf.com/images/rasstock/rasstock1411/rasstock141100008/34058828-stylish- young-man-posing-like-lumberjack.jpg) is an asserter, declarer, affirmer, asseverator, avower: someone who claims to speak the truth

How about teacher [https://media.edutopia.org/styles/responsive_2880px_16x9/s3/...](https://media.edutopia.org/styles/responsive_2880px_16x9/s3/masters/d7_images/cover_media/alber-169hero- thelook-shutterstock_0.jpg) is a shot putter: an athlete who competes in the shot put [https://c0.dq1.me/uploads/article/54231/student-classroom- te...](https://c0.dq1.me/uploads/article/54231/student-classroom- teacher-2.jpg) The kid is a non smoker and the teacher is psycholinguist: a person (usually a psychologist but sometimes a linguist) who studies the psychological basis of human language [https://media.gannett- cdn.com/29906170001/29906170001_578035...](https://media.gannett- cdn.com/29906170001/29906170001_5780351010001_5780346124001-vs.jpg) is girl, miss, missy, young lady, young woman, fille: a young woman [https://media.self.com/photos/5aa9743e19b7c01d73149d50/4:3/w...](https://media.self.com/photos/5aa9743e19b7c01d73149d50/4:3/w_728,c_limit/how- teachers-dont-get-sick.jpg) (almost the same picture as the prveious one ) is now a sociologist!

How about search for pilot images [https://news.delta.com/sites/default/files/Propel%20Embedded...](https://news.delta.com/sites/default/files/Propel%20Embedded%20Image%282%291.jpg) is a parrot: a copycat who does not understand the words or acts being imitated [https://pilotpatrick.com/wp- content/uploads/2017/10/workday_...](https://pilotpatrick.com/wp- content/uploads/2017/10/workday_titel.jpg) is a beekeeper, apiarist, apiculturist: a farmer who keeps bees for their honey !!! [https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3A%2F...](https://imagesvc.meredithcorp.io/v3/mm/image?url=https%3A%2F%2Fcdn- image.travelandleisure.com%2Fsites%2Fdefault%2Ffiles%2Fstyles%2F1600x1000%2Fpublic%2F1544737836%2Fpilot- training-BECOMEFLY1218.jpg%3Fitok%3D6BNCSj99&w=400&c=sc&poi=face&q=85) is a boatbuilder !!

And some random one [https://media.spiked- online.com/website/images/2019/08/06154...](https://media.spiked- online.com/website/images/2019/08/06154453/scarlett-johansson-800x480.jpg) is a "Sister/nun" [https://www.english- heritage.org.uk/siteassets/home/visit/in...](https://www.english- heritage.org.uk/siteassets/home/visit/ingenious/roman/header.jpg?w=1440&h=612&mode=crop&scale=both&quality=60&anchor=NoFocus&WebsiteVersion=20190909) deacon, Protestant deacon: a Protestant layman who assists the minister [https://minervasowls.org/wp- content/uploads/2018/04/Romans-M...](https://minervasowls.org/wp- content/uploads/2018/04/Romans-Minerva-Ono-sideways-2-e1524937719320.jpg) are identified as morris dancer</comment>


Clojure's Approach to Identity and State (2008) - <AUTHOR> https://clojure.org/about/state <comment><USER2> Immutability is very helpful, and the connection between values and identity is illuminating.

But there have been very important developments in programming languages since this post/page was written: notably, the introduction of "borrow checking" (exemplified by Rust's implementation). Borrow checking has a very significant positive effect on the sustainability of imperative code, which makes the claim that "imperative programming is founded on an unsustainable premise" feel dated.

It is worth taking the time to understand what borrow checking enables. For example: borrow checking allows even mutable datastructures to be treated as values with structural equality. It does this by guaranteeing that unless you have exclusive access to something, it may not be mutated.

A good explanation of the benefits of ownership and borrow checking: [http://squidarth.com/rc/rust/2018/05/31/rust-borrowing- and-o...](http://squidarth.com/rc/rust/2018/05/31/rust-borrowing-and- ownership.html)

<comment><USER3> Borrow checking and immutability solve two different problems. Immutability is about the absence of ownership and state, while borrow checking is a way to manage ownership.

One does not replace the other, they coexist solving different problems.

<comment><USER2> Borrow checking allows even structures that _support_ mutation to be safely (checked by the compiler) treated as immutable, and thus as values.

Clojure also recognizes the connection between ownership and mutability in its "transients": [https://clojure.org/reference/transients](https://clojure.org/reference/transients) ... compile time borrow checking extends that idea to an entire language.

<comment><USER4> What do transients have to do with ownership? They are simply a way to gain new performance characteristics from an existing data structure.

<comment><USER2> The thing that makes it safe to use mutation in the context of a transient is that you can know with certainty that you have exclusive access to the value (because no other viewer has observed it yet). This is also what borrow checking can guarantee: except in significantly more positions in the code, and at compile time rather than runtime.

</comment></comment></comment></comment></comment><comment><USER5> This is interesting. I've tried Clojure, and heard about the idea of avoiding mutable data and using pure functions plenty of times, but imperative/OOP have still always made the most sense to me. When reading this though, something clicked because I've encountered the problem of getting a stable state to read/write without blocking other operations, and dealt with it in C++ in a similar way to Clojure without realizing it at the time.

I have this little lightly-tested library: [https://github.com/tne-lab/rw- synchronizer](https://github.com/tne-lab/rw-synchronizer). I'm not using it much currently but have played with it a lot while building extensions to Open Ephys. The idea being that as a reader, you get a "snapshot" of the last thing that was written, but it's really just one of several copies, and subsequent writes can happen on the other copies. So you never really modify the current data, just push newer versions of it. The cool thing is, if you know how many simultaneous readers you'll need ahead of time, all the allocation can be done upfront, so then if you have a real-time loop or something, all it needs to do is exchange pointers.

If I ever get around to it, the next thing I would do is allow any writer to also read the latest value, so it can use a transformation to create a new one. Maybe even do it automatically with copy-on-write semantics? On the other hand, I'm probably reinventing the wheel here...

<comment><USER6> This is pretty much how clojure atoms [0] work. It's basically a Clojure wrapper around a Java AtomicReference, but Clojure's immutable data structures make an atomic reference type really useful because it is very cheap to read a "snapshot". It doesn't do upfront allocation, because like you mentioned, that requires you to have some knowledge about how the accessing code works. Additionally, whatever you are doing in Clojure is pretty likely to allocate memory anyway, so it probably wouldn't be that beneficial.

[0] [https://clojure.org/reference/atoms](https://clojure.org/reference/atoms)

<comment><USER5> Oh neat, thanks! Yup, that sounds like a more general/flexible version of what I was trying to do.

I was focused on situations with just one writer (and originally also one reader), with the main thing being avoiding allocations. The situation where future values actually depend on past values, and specifically the _current_ past value with other writers in the mix, is definitely trickier.

</comment></comment></comment><comment><USER7> Rich Hickey has a talk on this (The Value of Values) here: [https://youtu.be/-6BsiVyC1kM](https://youtu.be/-6BsiVyC1kM)

<comment><USER8> Thank you, this talk was paradigm shifting AND familiar for me at the same time.

</comment></comment><comment><USER9> Would be helpful with practical examples in code. As a self thought programmer I dont know what all concepts are called, but when I see code I can usually recognise them. The actor model as described in the article becomes less painful when you have an abstraction layer. The question might be are you going for horizontal scaling or vertical scaling, although you are best off implementing the simplest solution in order to avoid premature optimization (and overengineering).

<comment><USER10> Regarding values: you can construct the same datastructure in any place, and compare it meaningfully with a datastructure from a completely different source (and you can do so efficiently). This is accomplished, as far as I know, by representing almost everything as persistent hash trees (with some implementation voodoo and shortcuts).

Beyond that, you can actually just read the Clojure runtime code. It's a bit messy but there's not really that much there.

<comment><USER11> Persistent hash _tries_ [1]

I have an efficient C# implementation here [2]

[1] [https://michael.steindorfer.name/publications/phd-thesis- eff...](https://michael.steindorfer.name/publications/phd-thesis-efficient- immutable-collections.pdf)

[2] [https://github.com/louthy/language- ext/blob/master/LanguageE...](https://github.com/louthy/language- ext/blob/master/LanguageExt.Core/DataTypes/TrieMap/TrieMap.cs)

<comment><USER10> I love seeing these datastructures show up in more languages. They completely change the set programs you could feasibly find time to write. Thanks for sharing your C# one, I'll remember that if I ever need to use Unity again. The claims about CHAMP are very impressive, in my experience, Clojure's datastructures perform great for what they do, and they claim CHAMP tends to be _many times faster_. :- )

> _Compressed Hash Array Map Trie_

Q: "What datastructure would you like?"

A: "Yes."

</comment></comment></comment></comment><comment><USER12> Just learning about immutable/functional approach makes you better developer even in imperative languages. "Share nothing" (in a mutable way) is beautifully simple solution to so many concurrency problems.

</comment><comment><USER10> This has been extremely useful to me while writing a (somewhat optimizing) compiler for spreadsheets. I can do subtree deduplication just by `assoc`ing into a map.

<comment><USER13> I want to hear more about your somewhat optimizing compiler for spreadsheets!

<comment><USER10> It's proprietary for the time being; but in short, it is more straightforward than I thought it would be.

We are working with LibreOffice Calc ODS sheets, which are pretty terrible as a format (since the references are not normalized in the formulas, they can't repeat them even when they behave identically, and they duplicate most of the XML namespaces in the attributes).

We parse and normalize the references from A1 to R1C1 form, and then deduplicate the formulas (by text) and extract all of the immediates (and mark some of them as input, so that they can be varied at runtime).

Then we pass the deduplicated formulas through instaparse (which is spectacular) with a relatively simple grammar, and propagate some of the constants.

I then extract the references from the AST, while at the same time replacing SUMIF/MINIFS/MAXIFS/AVERAGEIF and similar with simple addition/min/max of known cells, where the tests are known at compile time. Then those ASTs are complied to functions (ignoring our cross-function optimizations).

Then it's just down to generating a complete DAG of dependencies, and using that to sort the assignments (cells) topologically. The sheet can be evaluated naiively at that point by injecting the references into each subsequent assignment/cell and storing the result in a map (ranges injected as a seq over a range).

There's a lot more to it, and it's getting better all the time, but that's the gist of it. Many real spreadsheets are not well-behaved, and they have dependency patterns which are more difficult to handle (i.e. ranges that refer to the current cell, or future cells, dynamically). The compiled output is getting more and more static, and will probably be reduced to some form of ssa, possibly even well-formed enough to be popped casually into LLVM.

It would be some help if the ODS format were improved, it takes several seconds just to parse the hundreds of megabytes of XML in our amazing spreadsheet, and a lot of it is redundant.

<comment><USER14> Interesting project! Could you explain what you mean by "since the references are not normalized in the formulas, they can't repeat them even when they behave identically"? Do you mean the normalization from _A1_ to _R1C1_ that you mention later in the post or something else?

<comment><USER10> Yes, I mean exactly that. :- )

<comment><USER14> How does this normalization affect being able to repeat formulas (or references in formulas)?

<comment><USER10> While spreadsheets usually display references as though they refer to a specific cell (i.e. A3, B2, etc.), but underneath, the references are relative (unless specifically made absolute, with $ in the case of A1).

The common pattern in spreadsheets is to have a set of columns of repeated formulas. i.e.

          |  A  |  B  |        C       |  D  |
          |-----|-----|</comment></comment></comment></comment></comment></comment></comment><comment></comment><comment>----|-----|
        1 |     |     |                | 0.12|
        2 |   42|   42| =A2*B2+C1*$D$1 |     |
        3 |   69|   69| =A3*B3+C2*$D$1 |     |

Where, you'll note, although the function and reference shape in C2 and C3 is identical, the text is not.

Whereas, with R1C1-type references.

          |  1  |  2  |              3             |  4  |
          |-----|-----|</comment><comment></comment><comment></comment><comment></comment><comment>----|-----|
        1 |     |     |                            | 0.12|
        2 |   42|   42| =RC[-2]*RC[-1]+R[-1]C*R1C4 |     |
        3 |   69|   69| =RC[-2]*RC[-1]+R[-1]C*R1C4 |     |

The text of the formula is exactly the same in both copies.

This makes it a lot cheaper to deduplicate them, because we don't need to run the whole parser on the 400k+ formula invocations in our sheet, and then compare the ASTs rather than text; since in this form, there are only a few thousand unique expressions rather than a few hundred thousand.

<comment><USER14> Thanks for the explanation. I was confused about the meaning of "repeat". It's a missed opportunity that ODS doesn't store formulas as ASTs in the first place.

<comment><USER10> > _It 's a missed opportunity that ODS doesn't store formulas as ASTs in the > first place._

It's really for the best that they don't. ODS is XML, so they'd probably make the AST XML as well, which would _outrageously oversized_.

</comment></comment></comment><comment><USER15> I've tried Clojure.

I prefer a programming language that allows me to pick and choose which paradigms I want to follow-- whether OOP or FP, mutable or immutable, etc. I don't need Clojure to do that for me.

Personally, I am trying to figure out why a closed source language is producing such activism-- trying to increase the popularity importance of the language... despite the fact that it's a privately owned language-- not really "open source"\-- everything flows through one man & his company, which come first & above, regarding the language's development.

Rich Hickey: [Paraphrasing] "Open source isn't about you. I created this, it's mine, and I'll change it when and how I choose."

Clojure Community: "Hey, let's try to get more people into Clojure! Let's increase this community!"

<comment><USER16> I can understand your frustration about Rich's development process. But clojure is most definitely not closed source. The source is right here: [https://github.com/clojure/clojure](https://github.com/clojure/clojure) and the license that allows you to copy, modify, and redistribute that source is here: [https://opensource.org/licenses/eclipse-1.0.php](https://opensource.org/licenses/eclipse-1.0.php)

Rich has a fairly strict development approach and wants to personally review and approve all changes to the core. There are complaints about that process, and that's fair. But as far as I have seen, most large, successful projects have similar personalities leading them (Stallman, Linus, Larry Wall, Guido...).

Finally, I should add -- if what you are looking for is software freedom... then you should absolutely consider using a Lisp like clojure. Lisp's give _you_ the power to control your language through macros and non-core libraries. Unlike other languages, you do not need a core development team to make language changes for you. Perhaps this is why clojure is so powerful... because the core process issues you have heard about are not actually that important, and in fact the language itself enables substantially more software freedom than perhaps you are giving it credit for.</comment></comment>


Ask HN: Would a service like this make sense?  - <AUTHOR>

I have hacked this prototype in few hours. Just wanted to get early feedback on a service like this.
The basic idea is to provide a simple way to check all reactions/comments around the web for any web page.
http://see-reaction.appspot.com/index.html <comment><USER2> I personally haven't come across a need for that, but I imagine it could be useful to someone.

Clickable: <http://see-reaction.appspot.com/index.html>

<comment><AUTHOR> One particular use case for me is: I usually push article to +Pocket or readability, and then I like to check it comments on HN.

</comment></comment><comment><USER3> I've always wanted a browser plugin like this that will flag if the website I'm currently on has comments on hn/reddit etc.

<comment><USER4> Check this out: [https://chrome.google.com/webstore/detail/hhedbplnihmkekhgma...](https://chrome.google.com/webstore/detail/hhedbplnihmkekhgmaoikgfbkjjaocnl)

</comment></comment><comment><USER5> Looks good, although not sure the reactions from Reddit and HackNews are the widest perspective.

What is the stack?

<comment><AUTHOR> Reddit and HN are just a start, will keep on adding more services.

And what do you mean by stack?

<comment><AUTHOR> Presently its all client side. Working on APIs.

</comment></comment></comment><comment><USER6> Why is it trying to submit to Reddit?

Why do I have to enter a title, why not just a url?

<comment><AUTHOR> It tries to submit to HN/Reddit in case the link isn't already present there. And requirement of title is from respective sites. It opens submit page in an iframe.</comment></comment>


How SHRDLU got its name (2003) - <AUTHOR> http://hci.stanford.edu/winograd/shrdlu/name.html <comment><USER2> If you've not seen it, the documentary Farewell Etaoin Shrdlu of the final days of Linotype at the NY Times is great: [https://archive.org/details/FarewellEtaoinShrdlu](https://archive.org/details/FarewellEtaoinShrdlu)

<comment><USER3> A wonderful documentary! Although I also loved seeing the old, huge but beautiful 70ies computers at the end that replaced the linotypes.

</comment></comment><comment><USER4> Relevant, by Peter Norvig "Mayzner Revisited or ETAOIN SRHLDCU":

[https://norvig.com/mayzner.html](https://norvig.com/mayzner.html)

What I haven't found is _the technical reason why_ the most frequent letters had to be at the start in Linotype machine keyboards.

The title article says "for physical reasons, which would take longer to explain." I don't care how long it would take, I'd like to know. I guess it's something like having the handling of the more frequent case earlier in the assembly code, but the details are important.

Does anybody know the answer?

<comment><USER5> Possibly [https://www.circuitousroot.com/artifice/letters/press/compli...](https://www.circuitousroot.com/artifice/letters/press/compline/history/linofaq/index.html#why- etaoin)

Section 3.2. Why the "etaoin" Keybaord?

<comment><USER4> That's exactly what I needed, many thanks. The author there also discusses other rationales which he considers later invented excuses, not the real reason, then shows what he believes to be the original idea. Once having this I've also found a shorter summary by the same author:

"It evolved during the development of the machine later called the "Blower" Linotype, which entered production in 1886. In this machine, the magazine consisted of a set of rectangular tubes set vertically (and permanently) in the machine. Mergenthaler knew that he would need to supply matrices in varying numbers, and he knew the frequency of the letters (stories that he asked for a count to be done are dubious - typefounders and printers had known the letter frequencies for centuries). But he was worried that the matrices might be damaged by their fall through these vertical tubes. For the most-used matrices (e, t, a, …) this was not really a problem, since they were supplied in greater numbers and would tend to fill their tubes a bit more (limiting the distance of their fall). But for the less-used mats (supplied in fewer numbers) he feared a problem. So he arranged the tubes in decreasing lengths and put the most frequent characters to the left. The layout of the magazine- tubes led directly to the layout of the keyboard below them. We know this because he said so in US patent 378,798 (filed 1886-07-17, issued 1888-02-28): "… If long tubes were used with a smaller number of matrices at their lower ends, each matrix would acquire a considerable velocity in falling to its place in the tube. This would tend to lead to the mutilation of the matrix." (p. 3)

In the 1890 machine later known as the "Square Base" Linotype, Mergenthaler introduced a different solution to this - the inclined magazine, which avoided matrix freefall in the magazine. But he kept the "etaoin" layout."

(From [http://www.briarpress.org/40298](http://www.briarpress.org/40298) A comment by David M MacMillan on 7 Sep 14)

Now the only thing missing is the scanned "US patent 378,798" which seems to be too old to be accessible?

Edit: Found! [https://www.immigrantentrepreneurship.org/documents/ottmar-m...](https://www.immigrantentrepreneurship.org/documents/ottmar- mergenthaler-machine-for-producing-type-bars-patent/)

</comment></comment></comment><comment><USER6> I feel so relevant today, although I realize I fat fingered an extra 'i' years ago...

</comment><comment><USER7> Related question: Does anyone have a working SHRDLU to play with? The original code has been posted but it's Maclisp, so it probably needs porting or emulation and a little packaging. Also, I think the (blocks world) visualization layer is somewhere else?

[https://github.com/stuartpb/shrdlu](https://github.com/stuartpb/shrdlu)

<comment><AUTHOR> Like dTal says there's a java version and also a windows cmd version but neither seems to be very stable. In general, it's rather a bit sad, but it seems that Terry Winograd's original code is going to be very hard to run- and has been changed by at least one of his doctoral students anyway. It seems that Winograd had to make changes to the Lisp runtime to get SHRDLU running as he wanted it for his thesis, changes that were not entirely backported to the code of SHRDLU later:

 _[Dave McDonald] (email@example.com) was Terry Winograd 's first research student at MIT. Dave reports rewriting "a lot" of SHRDLU ("a combination of clean up and a couple of new ideas") along with Andee Rubin, Stu Card, and Jeff Hill. Some of Dave's interesting recollections are: "In the rush to get [SHRDLU] ready for his thesis defense [Terry] made some direct patches to the Lisp assembly code and never back propagated them to his Lisp source... We kept around the very program image that Terry constructed and used it whenever we could. As an image, [SHRDLU] couldn't keep up with the periodic changes to the ITS, and gradually more and more bit rot set in. One of the last times we used it we only got it to display a couple of lines. In the early days... that original image ran like a top and never broke. Our rewrite was equally so... The version we assembled circa 1972/1973 was utterly robust... Certainly a couple of dozen [copies of SHRDLU were distributed]. Somewhere in my basement is a file with all the request letters... I've got hard copy of all of the original that was Lisp source and of all our rewrites... SHRDLU was a special program. Even today its parser would be competitive as an architecture. For a recursive descent algorithm it had some clever means of jumping to anticipated alternative analyses rather than doing a standard backup. It defined the whole notion of procedural semantics (though Bill Woods tends to get the credit), and its grammar was the first instance of Systemic Functional Linguistics applied to language understanding and quite well done." Dave believes the hardest part of getting a complete SHRDLU to run again will be to fix the code in MicroPlanner since "the original MicroPlanner could not be maintained because it had hardwired some direct pointers into the state of ITS (as actual numbers!) and these 'magic numbers' were impossible to recreate circa 1977 when we approached Gerry Sussman about rewriting MicroPlanner in Conniver." _

[http://maf.directory/misc/shrdlu.html](http://maf.directory/misc/shrdlu.html)

Even the link to the account by Dave McDonald above, is itself subject to linkrot.

<comment><USER7> That's what I was hoping for, thank you. At least someone is trying to get it curated and working for the future.

</comment></comment></comment><comment><USER8> The story by Frederic Brown that the article mentions:

[https://www.you-books.com/book/F-Brown/Etaoin-Shrdlu](https://www.you- books.com/book/F-Brown/Etaoin-Shrdlu)

<comment><USER9> Thanks, I was disappointed that the link in the article wasn't to the actual story.

</comment></comment><comment><USER10> SHRDLU in linotype keyboard

[https://media.wired.com/photos/5934fefaa88f414d9a8cbb48/mast...](https://media.wired.com/photos/5934fefaa88f414d9a8cbb48/master/w_600,c_limit/0703_dayintech_full.jpg)

</comment><comment><USER11> I added 2003 because of [https://web.archive.org/web/20031105035016/http://hci.stanfo...](https://web.archive.org/web/20031105035016/http://hci.stanford.edu/winograd/shrdlu/name.html). It might be earlier of course.

<comment><USER12> The page was written using Adobe PageMill 3.0, which was released in 1998 and discontinued in 2000 ([https://winworldpc.com/product/pagemill/30](https://winworldpc.com/product/pagemill/30)), and references a Michael Quinion "Wierd Words" page created September 2, 2000 ([https://web.archive.org/web/20031202154745/www.quinion.com/w...](https://web.archive.org/web/20031202154745/www.quinion.com/words/weirdwords/ww- eta1.htm)) which might narrow down the range a bit further.

GWS suggest February, 2001, as I see it:

[https://www.google.com/search?q="How+SHRDLU+got+its+name"&hl...](https://www.google.com/search?q="How+SHRDLU+got+its+name"&hl=en&source=lnt&tbs=cdr%3A1%2Ccd_min%3A1995%2Ccd_max%3A2002&tbm=)

I've done worse: [https://news.ycombinator.com/item?id=23203180](https://news.ycombinator.com/item?id=23203180)</comment></comment>


Backpropagation and the Brain (Geoff Hinton et al., 2020) - <AUTHOR> https://www.nature.com/articles/s41583-020-0277-3 <comment><AUTHOR> No Paywall link, to get around Nature's Paywall: [https://sci- hub.tw/downloads-ii/2020-04-17/0a/10.1038@s41583...](https://sci- firstname.lastname@example.com)</comment>


Bitcoin just broke 400 USD - <AUTHOR> https://coinbase.com/charts?foo <comment><USER2> To all those in this thread regretting having sold bictoins earlier because of some feeling. Don't be depressed, a lot of people did, and that's OK.

You can still trade, but you have to switch your mindset to a trader's one, and regretting a "missed" opportunity and feeling "tempted" to buy while the asset is on the rise is impulsive. Learn how to trade, there are countless resources around, even though this is not only math, learning seriously can protect you from impulsive behavior.

I'd say, if you want to invest in bitcoin, unless you're a serious believer (and that's fine, but in this case you probably already have some), do it like poker players manage their bankroll, use some money you can _really_ afford to lose, so you can sleep at night and not feel too bad then the coin drops 25% over a day.

Anyways, what I think is that we are on HN, where people make money using their skills and by creating value. Investing $10k by creating your company today might not only make more money than the same investment in some cryptocurrency, but also create something of value in the meantime.

Want to join the bitcoin ride the hacker way? Build a service that uses the currency, or help people to use it.

Disclaimer: I have nothing against bitcoin, I just think it's a little sad to regret not making a quick buck on something you have no real control on.

<comment><USER3> > regretting having sold bictoins earlier because of some feeling

They turned a risky as hell deflationary asset into a low-risk slowly- inflating one :)

Hindsight is 20/20\. At any time, Bitcoin could experience... a problem. Which affects its value, badly. By selling, you simply dodged the cost of that risk, which is real.

There will be Senate hearings soon on Bitcoin. The guidance coming out of this alone could boost the value even further... or slam it.

[http://www.economicpolicyjournal.com/2013/11/bitcoin- senate-...](http://www.economicpolicyjournal.com/2013/11/bitcoin-senate- hearing-november-18.html)

And if it slams it, you should buy, as Bitcoin is a global phenomenon and is incapable of being controlled by the US Government no matter how they propose to deal with it. :) Germany and China are already quite positive on it.

<comment><USER4> low risk? We'll see.

<comment><USER3> _Perceived_ low risk :)

BTC is a nice hedge against that. I think people are beginning to realize that.

</comment></comment></comment></comment><comment><USER5> Bitcoin Average and Bitcoin Charts are two sites that provide much more information about the latest price than Coinbase's chart.

Bitcoin Average does a volume-weighted price average across major exchanges.

[https://bitcoinaverage.com/#USD](https://bitcoinaverage.com/#USD)

Bitcoin Charts gives you some historical information like the 30-day average for each exchange/currency pair.

[http://bitcoincharts.com/markets/](http://bitcoincharts.com/markets/)

If you want to look at candlesticks to track the latest price action, Bitcoinity tracks multiple exchanges.

[http://bitcoinity.org/markets](http://bitcoinity.org/markets)

<comment><USER6> Looking at the bitcoincharts link, why is the going rate a MtGox (~440) so much higher than BitStamp (399)?

<comment><USER7> It is notoriously difficult to get USD out of MtGox. I've heard that often the process will take weeks or even a couple months. The price there reflects that people are less willing to sell Bitcoins on MtGox.

</comment></comment></comment><comment><USER8> Right now, the market cap is nearly $5 billion. An eventual market cap of $1 trillion or higher, however, is very realistic, if global banks pick it up as their default method of exchanging wealth. It effectively replaces risky physical shipments of gold and cash, and solves the (also risky) reliance on corporate/government credit worthiness for digital transfers of ownership.

<comment><USER9> Banks don't exchange wealth with physical shipments of gold and cash. Large scale digital transfers of money is nothing new.

<comment><USER8> No, they do. Collateral for many debts require some percentage of physical (lower risk) assets as opposed to a contract holding that carries ove risk from a third party. Physical assets get moved around all the time.

</comment></comment></comment><comment><USER10> Does anyone have an explanation for why the price is going up so high so fast? Is there something legitimately pushing the price up or is it pure speculation?

<comment><USER3> China discovered Bitcoin, I believe it was featured on its state news recently, and the main Chinese bitcoin exchange (which is only 2 months old or so) is already the largest in the world. China has been hurting for any kind of financial investment vehicle of late, and historically they are big savers.

This is what happens with global phenomena. The soil (global internet) is already there, anything that will grow in that soil (like bitcoin) can spread VERY quickly like a wildfire.

What happens when India discovers it is perfect for remittances? What happens when Africa discovers they can exchange payments with just a mobile phone without even having a bank or credit card or any credit period? What happens when parents the world over realize this is a perfect way to give their kids money to buy stuff online with? Or for online retailers to be able to sell to the unbanked and to those who don't have good credit or a credit card? Anywhere in the world, to anyone with BTC? What happens when new uses for Bitcoin that haven't even been thought of yet, are?

Trivia: The head of the Chinese exchange is a Stanford graduate and his brother invented Litecoin.

<comment><USER11> Since such an exchange can circumvent Chinese monetary policy it is unlikely that it can keep doing so and become popular.

<comment><USER12> Wouldn't a country lose by placing restrictions on BTC if BTC became widely used in a global setting?

<comment><USER11> Countries place all kinds of restrictions that don't exist in other countries, they don't end up "losing".

</comment></comment></comment></comment></comment><comment><USER11> Which trading exchanges allow you to withdraw money easily and promptly and have low liquidity and credit risk?

</comment><comment><USER13> All of you talking about investing in bitcoins, why aren't you trying to _earn_ bitcoins instead? To some extent you'd be able to establish your own exchange rate, or at least not be tossing money in at an inopportune moment, and instead throw time/materials into some project and grow the bitcoin economy. And, by growing the economy, you'll help to ensure that BTC's value might mantain, rather than diminish, when speculators pull out or toy with the market.

</comment><comment><USER14> I wonder how much of the recent BitCoin run up is driven by CryptoLocker?

CryptoLocker demands 2 bitcoins (10 after initial deadline has passed) and there are only around 12 million BitCoins in circulation. I haven't seem any good estimates of how many people have been infected but it seems like it is quite a few. This additional demand could easily drive the price up although eventually the CyptoLocker extortionists would sell those BitCoins driving the price down.

<comment><USER15> I doubt it's much, since from what I've read, virtually nobody is paying the ransoms in bitcoins. Makes sense - if you have some already, you aren't likely to be the type of person who gets infected by that. If you don't, well, the deadline for payment is like 3 days. I've bought bitcoins already multiple times, and I don't think I could buy some in 3 days reliably. Somebody who doesn't know much about bitcoin already doesn't have much chance of making a purchase before the deadline.

</comment></comment><comment><USER16> Right, question time:

Market cap is now $5 billion. Wealth can't be created, so where has that money come from? Have other currencies fractionally devalued?

The cost of mining has been negligible until recently.

<comment><USER17> Why can't wealth be created? Value (of which wealth is a store) is entirely subjective, and is not at all a zero-sum game.

If John Lennon wrote a poem on a sheet of paper just before he died, that paper would now be worth a vast amount of money. Considerably more than the 1c value of the sheet of paper alone. Nobody had to pay anything to create that poem.

Bitcoins are currently valuable, precisely because (and frankly, only because) people put a value on them. That means that if I'm willing to spend $400 on a Bitcoin, and someone is willing to give one to me at that price, that is how much it's worth.

That single transaction may be zero-sum, in dollar terms, but next week I might sell the same Bitcoin for $500 or $300 in another (dollar-terms) zero- sum transaction. The Bitcoin is the same. The price (value) is all that's changed. Just like the price of the sheet of paper containing John Lennon's last poem after he wrote on it.

</comment></comment><comment><USER18> If you're thinking about trading bitcoin, I would suggest you don't use MtGox. It has problems with withdrawals of USD, and hence has an inflated bitcoin price compared to other exchanges [1]. Once your money is in there, the only fast way to get your money out is to withdraw bitcoin, hence the disparity.

[1] [http://www.cryptocoincharts.info/#jump-btc- usd](http://www.cryptocoincharts.info/#jump-btc-usd)

<comment><USER11> So what exchange should you use? And what type of assurances do they have in terms of not losing your money?

</comment></comment><comment><USER19> Funny that I almost invest in Bitcoin ten days ago...

Really, I always feel it's a good moment to invest when I look at the last 3 days chart...but then I look at the 2y chart...Big Bubble.

For the optimistics, I would suggest you to read that [http://www.forbes.com/sites/timothylee/2013/04/11/an- illustr...](http://www.forbes.com/sites/timothylee/2013/04/11/an-illustrated- history-of-bitcoin-crashes/)

<comment><USER20> Look at the 2y chart. Then look at the oil price chart from 2000. This spike will have a matching downspike with recovery.

</comment></comment><comment><USER21> I bought some at $30 and sold at $260 right before the last crash (literally, 2 hours before). I felt all smug…

<comment><USER22> haha yeah me too, I bought in at $40 and progressively sold out up to about $240... I too felt smug. :)

</comment></comment><comment><USER23> So I see different rates in different websites. What prevents me from buying in one and selling in another? Do these automatically account for the exchange rates? from a quick look it doesn't seem so - I am wondering if short term trading is a bad idea. (With tiny amount of money of course).

<comment><USER24> Nothing prevents you from moving bitcoins between exchanges, but moving dollars between exchanges turns out to be much more difficult than you might expect. Banks and governments introduce all sorts of roadblocks, charges, and delays. In order to arbitrage effectively, you need to be able to transfer dollars as well as bitcoins.

</comment></comment><comment><USER25> This graph is helpful:

[http://blockchain.info/charts/bitcoin-days-destroyed- cumulat...](http://blockchain.info/charts/bitcoin-days-destroyed- cumulative?timespan=all&showDataPoints=false&daysAverageString=1&show_header=true&scale=0&address=)

</comment><comment><USER26> I sold my remaining BTC when it was 140.. I thought that was high...

<comment><USER27> This points to a problem with the idea of early adopters getting an unfair advantage. Say you are an early adopter and you bought at $0.10. Should you cash out at $10? How about $100? At any point along the path an early adopter could cash out and a late adopter could get in.

<comment><USER13> This does not point out a problem with early adopter advantage.

BTC still appears to be a deflationary currency, which fundamentally favors the early adopter (though they may still screw up and lose that advantage). In a deflationary currency, over time, the cost of goods and services will trend towards smaller increments of the currency. Assume that the BTC economy stabilized, that it has a nearly consistent deflation rate similar to our nearly consistent inflation rates in other currencies.

If you receive a salary of 100BTC this year, at a 10% deflation rate you would expect your salary the next year to be about 90BTC, and about 81BTC the year after. 7 years into the job (barring other pay raises) your pay is cut in half (in absolute terms), but can still purchase the same amount each year. Now, assuming a modest 30% savings rate, after about 15-16 years you'll have saved up more than you will earn over the next 15 years. So now my kid is grown and entering into the economy, in his first 15 years he'll have earned what you saved, but have a fraction of your wealth. 15 years after him another kid has grown and entered the market and faces the same dilemma.

Today, BTC is unstable, the value fluctuates wildly, "early adopter" is a fuzzy term because BTC is still young. But this is the fundamental problem facing deflationary currencies over an extended period. The deflation rate, similar to the inflation rate for other currencies today, has to be tempered. If it's allowed to get out of hand it'll wreck the economy it's meant to facilitate.

</comment></comment></comment><comment><USER28> Already have been discussed [https://news.ycombinator.com/item?id=6724548](https://news.ycombinator.com/item?id=6724548)

</comment><comment><USER29> Things should get interesting when the Winklevoss' Bitcoin ETF is created. I wonder what the implied volatility will say about the cost of puts and calls...

</comment><comment><USER30> Bought some at the April bubble at 235, dropped the next day . So happy that it finally got back up but sad that I didn't buy more when it was at 40-75

</comment><comment><USER21> Dear Hackers, Do something to produce a crash so I can buy more Bitcoin… please?

</comment><comment><USER31> FUCK. Is all I have to say. When it was $200, I said "Fuck, I should probably wait". Same thing when it was $300. I'm so on the fence in investing in bitcoin. I feel like it's going to reach $10k/btc and I'll be living in a lifelong depression of "what could have been".

Tempted to drop like 5k into it...

I truly don't know what to do at this point. I _could_ wait and see a drop that may or may not come, and I'll constantly be in the state of indecision that I feel ultimately will cripple me in the future.

I think I'll buy 1BTC/mo and see where it goes from there.

<comment><USER32> Don't be sorry, you're looking at executing a buy high, sell low strategy.

When you want to buy bitcoin is when it's just experienced a big drop, you're too late to the party, when it hits $50 again, buy.

Pick a price point, make a buy order, as soon as your buy order executes pick another point, make your sell order. Don't time the market, price the market.

<comment><USER33> On a related note: Is the bitcoin infrastructure mature enough to support short selling in a sane way yet? I've yet to find a decent way to do this.

<comment><USER31> I use BTC-E. Too bad I'm an idiot and traded over 50BTC for litecoins. I'm legitimately stressed.

<comment><USER32> I refused an offer for my house in Aug 2007, don't sweat it.

Go into trades with a clear head not thinking about the past. Whatever you did you did, stressing about it will not help you make better trades in the future.

If you think BTC is going up, cut your litecoin losses and trade, if you don't stick with litecoin or something more stable til BTC reaches your price.</comment></comment></comment></comment></comment>


Iterative Algorithmic Plastic Sculpture: Fimo Fractals - <AUTHOR> http://www.evilmadscientist.com/article.php/fimofractals <comment><USER2> Cool! You could improve the contrast by preparing two at once (so a total of four colours), and then crossing them. Perhaps have one colour the same, to act as a "background".</comment>


Macron offers refuge in France to U.S. scientists, entrepreneurs - <AUTHOR> http://www.reuters.com/article/us-france-election-macron-idUSKBN15J0RQ <comment><USER2> How the hell can he offer anything ?He is _candidate_ for the election to come and even if he's elected this kind of law will need approval from senate and national assembly (read not likely to happen). Coming from Reuters this misleading title is a sad reminder of the state of journalism.

<comment><USER3> Sorry: Cela n'est aucunement une loi "Convention Relating to the Status of Refugees" (Article 1(A)(2)) Le sénat et l'assemblé nationale n'ont pas leurs mots à dire. C'est des juges et des fonctionnaires qui statuent.

<comment><USER4> Do you happen to have an English translation of your comment? The forum is overwhelmingly English; while we could use a service like Google Translate, it might be better if you posted a translation of which you approve.

<comment><USER2> Don' t waste your time. It's french politics. And from now on I'll downvote anything promoting a specific candidate on HN as this is not the place to discuss about it.

<comment><USER4> That of course is your perogative. While HN is not primarily for politics, sometimes the discussion is warranted, and certainly there's been a lot on Trump and Clinton over the past months. Personally I wouldn't want to dismiss it out of hand. Though, if the discussion persists in French I'd likely flag such comments.

</comment></comment></comment></comment></comment><comment><USER5> With Marie Le Pen about to be crowned, how is that going to help with the escape from an oppressive regime?

The amount of virtue signalling is starting to feel a little bit forced at this point. The courts are pushing back appropriately, and the Senate is already starting to worry about the midterms. Resistance is the answer, and always has been. Fleeing is the second to last resort when resistance fails. Cornered survival fighting is the last resort. We are no where near that point.

<comment><USER3> If Marine LePen is qualified for the second round the deferral of votes on are competing is virtually systematic "Republican Front". In 2002 this system gave a result of banana republic.</comment></comment>


SunVox: a small, fast and powerful modular synth with pattern-based sequencer - <AUTHOR> http://www.warmplace.ru/soft/sunvox/ <comment><USER2> I want to post a useful comment, but all I can think is that this is pretty awesome.

Actually, there's an awful lot of awesome stuff on this site. You could play with Virtual ANS for hours, and PhonoPaper is just plain awesome.

(Did I saw awesome enough?)</comment>


Why the Bronx Really Burned - <AUTHOR> http://fivethirtyeight.com/datalab/why-the-bronx-really-burned/ <comment><USER2> A curious omission in this is Robert Moses [0], who is almost single-handedly responsible for the creation of the South Bronx with his Cross Bronx Expressway [1]. Although waning in power by the mid-1960s, Moses began (and ensured the completion) of a number of public construction projects with disproportionate impacts on poor (and usually non-white) communities.

 _The Power Broker_ by Robert A. Caro is one of the best political histories of New York, which I recommend if you're interested in exactly why the city's infrastructure (and lack thereof) is the way it is.

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

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

<comment><USER3> Bizarrely, The Power Broker appeared in the Financial Times list of best books of 2015. It seems it was never published in the UK until now. It's one of the finest biographies ever written.

<comment><USER2> That is bizarre. It's a terrific book.

</comment></comment></comment><comment><USER4> _"Yeah, when we get the recommendations of which firehouses to cut, sometimes you get one that would be down the block from where a judge lived or it would be in a powerful city councilman's district. We would skip that one and move down the list." Where they knew they were going to get pushback, they actively did not cut in those places._

In other words people directly caused the problem not algorithms.

<comment><USER5> "The methodology was flawed, the analysis was rife with biases, and the results were interpreted in a way that stacked the deck against poorer neighborhoods."

A little bit of A, a little bit of B.</comment></comment>


Would you sell your startup to Microsoft? Why? Why not? (I am not sure). - <AUTHOR>

<comment><USER2> See here for more responses:

<http://news.ycombinator.com/item?id=11208>

</comment><comment><USER3> Yes I would. Y = for money.

</comment><comment><USER4> Absolutely, given the right terms of course.</comment>