skysight-inc/HackerNews huggingface dataset:
I agree with your point, although I think you miss the author's point slightly. In our personal lives, the choice to buy the cheap analog version of things is still an option, while those of us with access to technology can leverage it in a way that makes our lives easier. This "widens the gap" between the haves and have-nots. At the same time, as technology advances, tools and services that the poor relied on (e.g. payphones, print newspapers, and coin-operated parking meters) are declining in availability. There is an ever-increasing pressure on people to adopt new technology, and those who can't afford to must find ways to work around these limits.

In a way, we already live in the world described in the article. Imagine the impact on cars when they first arrived. "The wealthy can afford to take jobs farther away, while the poor are limited to work only as far as they can walk!" Having the perspective of a century of progress, I can tell you the impact, and I doubt many would argue that automobiles are a net loss to society. Unfortunately it sometimes seems like the only equitable solution is to restrict the use of technology so that those without it are not too disadvantaged (i.e. "If we limit cars to walking speed, everyone will have the same job opportunities").
That is not addressing it, it is projecting his own bias into a situation he doesn't know. You are assuming because it types slowly, it isn't worthwhile to have all of wikipedia, google, and every other website out there available. For someone who has never had a smartphone, having the internet on your phone could be a TREMENDOUS deal.
While they are fixing the bad SEO they should fix the spam too :)

e.g. http://rapgenius.com/albums/09166007251-91-9166007251-marria...
Yeah, in thinking about my example a little more and generalizing, I think one of the problems that people have with reading clojure is that it doesn't have as robust a syntactic indication of scope that other languages have.
>kidnap them like they usually do

Although that would be impressive, I'm sure you know you are full of shit, but other people don't.
That's just a flat out lie.
Nonsense. Everywhere you turn, people are now aware of the issue. Whether we force long-term change is up to us. Snowden did more than his share.
No Kool-Aid, I just believe that there's more than a million people in the world who want Square (yes, under served merchants), regardless of the current group of 40k. Give Square a few years and I think you'll agree.
And the point of this post was... What exactly?
Although I don't agree that "What Rapgenius is doing is very innocent", I do have to agree on the general (black) SEO tactics that startups do, and even blue chips do.

This is my first hand experience: I was contacted by an "SEO Consultant" who wanted to publish an article in one my sites for $40. I went along, exchanged a few emails, and managed to get the "article" this company wanted to publish.

Bottom line was that they wanted to place link's to Tesco's LED bulbs site:

Text: decorative and useful living room accessory
URL: http://www.tesco.com/direct/home-garden/lighting/cat3376614.cat
A pretty useful example of how despite recent innovations in shoe technology, a lie still goes halfway around before the truth has its shoes on.
Right, but blocking sales to another country has absolutely nothing to do with how an entity in another country pays their taxes. Italy is objecting only to the fact that the ad-selling-Google is in another country, and trying to make them build a local version.
A designer's guide to collaboration
I'm wondering why not build a tree of bloom filters with a bit array at each level being the bitwise OR of its child nodes. Hashing only needs be done once, and a comparison happens at each level of the tree, which can be traversed to easily find matches whilst discarding branches that are certain to be fruitless.

A bit of googling shows me this already exists and is called a bloofi tree.
http://kuehnast.com/s9y/uploads/langs.jpg
In fairness, the articles submitted from the domain rapgenius.com are appropriate for HN. (e.g. the Heroku incident: https://news.ycombinator.com/item?id=5215884 )

They aren't using HN to submit content spam. (fwiw, there was another YC startup in a similar niche doing just that earlier this year. That startup appears to be dead/zombie now.)
> is to find blogs whose content we think our followers will enjoy and ask them to link pages on Rap Genius that are relevant to their posts.

So, this is just a lie, right? The original thing on HN [https://news.ycombinator.com/item?id=6956658] makes it pretty clear that they were asking for random links to Justin Bieber songs on any old blog post regardless of relevance. Or is Justin Bieber relevant to jmarbach's blog for some reason I'm missing? Also that they were hardly being selective about 'blogs whose content we think our followers will enjoy'.

So they're just plain lying, right?

[I _almost_ made a rap genius account for the purpose of annotating their statement to point this out. I might still do it, but the idea that they might find it gratifying that I created an account puts me off.]
Is there a legitimate way to "tattle" on competitors that are blatantly abusing SEO practices?
While the generous severance package and transparency about the process ease my concerns over whether it's ethical or not to cut employees so frequently, all I really got out of this is that I will probably never apply to Netflix.
I have met women whose goal in life is to become a single mother, with the government as the breadwinner. (And then to have more children, since pay-out rises in proportion to number of children, and "being thrifty" can leave money free per-child, so the more children you have, the more money you keep.)

If "welfare mom" was an insult, it would probably refer to that.
The language of the Gods is clearly Lisp. Unfortunately it's such a pain to work in that most of the time the Gods just use Perl anyway. Oblig. XKCD: http://xkcd.com/224/
So say I have a bunch of NES games stashed away in my attic in a box. How can I extract the data off of them and play this on my computer?
To go off on a slight tangent: WTF have they done to their links? They open crappy preview windows, totally breaking the UX in the process?
The type of code swapping you are doing with the repl, eg coding on the fly in the prod systems, and the type you are doing with erlang are completely different.

Erlang does have a much better deployment story than jvms as far as code swapping.

But AFAIK Clojure is compiling to bytecode and is under the same constraints as the JVM that it is hosted in.
You can also build a Java project without any kind of ant/maven/shell script at all. Apples vs. oranges.
Because I Say So (TM).
perhaps, but computer science -> code.
List of military strategies and concepts
Java Multithreading: Stopping Callable's using Future
I can so related to this. Thank you for articulating the problem (I thought I was just doing it wrong). To elaborate on what you're saying in pseudo code, imagine writing this in algorithm in clojure:

take a collection -> split by is-even? -> for each collection, sort ascending -> take the first of each collection

This is the level of abstraction I want to think about. But, when one of these functions takes or returns something you don't expect, debugging the problem usually took me 30 minutes. The error messages were very opaque to me.

I could never figure out a good work flow to debug these problems. I still feel like there's something I'm doing wrong. People on IRC tell me you eventually understand the errors better, they're just confusing at first. I never got to that point though.
> Learn technologies that are specifically different from those that you already know.

Careful with this point. A lot of people take this to heart a bit too much and dip their toes into 10+ different languages with only a couple weeks each. This is definitely a big mistake. While it's good to learn technologies that are different from what you know, you need to actually learn them, not play with them for a week. This means actually building something substantial and at least a few months of heavy usage. You need to really understand the technology and the reasons for the decisions the technology makes before the learning will be transferable beyond meaningless syntax.
"Is your wife cheating on you? Well you have the opportunity to figure out by joining the NSA today!"
There once were two guys who had completely different opinions about programming languages:

First guy: I love studying programming languages and compare them all the time. I think about different features they have and how that impacts me as a developer. I have a very strong opinion about different languages, because I have invested a ton of time researching them. I love to use the newest languages around, because they excite me and keep me motivated.

Other guy: I hate all programming languages, and I'm sure they're all pretty much the same. It's just Narcissism of small differences [1]. I just do a little research and pick the most obvious candidate. Then I Get Shit Done. Programming languages need to be stable, predictable and maintainable. I avoid hipster languages at all costs. That's just good engineering.

I am both of these guys.

http://en.wikipedia.org/wiki/Narcissism_of_small_differences
For what it's worth, I think most people think their financial situation will eventually improve (even if they're wrong).
From what I've been able to gather, since the majority of the States did not expand Medicaid to additionally cover those making straight poverty line incomes, and since Obamacare has increased the cost of insurance premiums across the board in all but a few states (300% in NC alone), the poor will simply not be able to get or buy insurance - period.

Only those making over $11,500-$15,000 or so will get the credit.

The real kicker to all this is that if you don't end up making that amount this year (2014), even if you are off by $20, you'll be forced to pay back the entire tax credit the government allowed you!
Hey, thanks a lot for linking this-- very much appreciated.
Question #4: are you a virgin? According to Wikipedia, "In the Middle Ages and Renaissance, [the unicorn] was commonly described as an extremely wild woodland creature, a symbol of purity and grace, which could only be captured by a virgin."
You are generalizing your experience and treating it as though it were some universal truth. I am far more productive in clojure than in go.
you don't know what Rap Genius does, huh?
While not so extreeme, I have a friend who is similarly an heir to wealth, and eats noodles and fast food and lives in a teeny appartment.
To be fair I see C and C++ used all over the place. Pretty much any game out there has at worst a 50% chance of being written in C++. C is less common, but is still used quite extensively in the open source world. Most devices with firmware are written in C (or at least their drivers are).
The Java Button Demo translated (or transliterated) into Clojure. If this doesn't lead to instant employment, I'll switch to OCaml.

(ns buttondemo.core
(:gen-class)
(:import [javax.swing AbstractButton JButton JPanel JFrame ImageIcon]
[java.awt.event ActionEvent KeyEvent ActionListener])
(:use [clojure.contrib.swing-utils]))

(defn create-image-icon [path]
(if-let [img-url (clojure.java.io/resource path)]
(ImageIcon. img-url)
(.println System/err (str "File not found:" path))))

(defn enable-buttons [button-flags]
(doseq [[button flag] button-flags] (.setEnabled button flag)))

(defn initialize-buttons [b1 b2 b3]
(doto b1
(add-action-listener
(fn [_] (enable-buttons [[b1 false][b2 false][b3 true]])))
(.setVerticalTextPosition AbstractButton/CENTER)
(.setHorizontalTextPosition AbstractButton/LEADING)
(.setToolTipText "I can disable the middle button.")
(.setMnemonic KeyEvent/VK_D))
(doto b2
(add-action-listener (fn [_] (prn "I told you not to click me.")))
(.setVerticalTextPosition AbstractButton/BOTTOM)
(.setHorizontalTextPosition AbstractButton/CENTER)
(.setToolTipText "Don't click me.")
(.setMnemonic KeyEvent/VK_M))
(doto b3
(add-action-listener
(fn [_] (enable-buttons [[b1 true][b2 true][b3 false]])))
(.setMnemonic KeyEvent/VK_E)
(.setToolTipText "I can enable the middle button.")
(.setEnabled false))

)

(defn -main []
(let [[b1 b2 b3 :as buttons] (for [[title file]
; [["<html><center><b><u>D</u>isable</b><br><font color=#ffffdd>middle button</font>" "right.gif"]
[["Disable middle button" "right.gif"]
["Middle button" "middle.gif"]
["Enable middle button" "left.gif"]]]
(JButton. title (create-image-icon file)))
panel (doto (JPanel.) (.setOpaque true))]

(doseq [b buttons] (doto panel (.add b)))

(initialize-buttons b1 b2 b3)

(do-swing-and-wait
(doto (JFrame. "Button Demo")
(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
(.setContentPane panel)
(.pack)
(.setVisible true))))
)
I disagree that "fewer lines of code definitely mean less bug probability"; particularly with the word "definitely". Consider a section of six lines of code that checks several conditions for the validation of a string. Now consider a complicated regular expression that is on one line of code. I would contend the likelihood of a bug to be much greater in the latter. Yes, this does intersect with the concern of obfuscation, but I'm addressing the concern of the number of lines of code. The complicated regular expression can make certain edge cases nearly invisible, whereas the six-line conditional series lays out the problem more clearly.
This reminds me of how Datomic clients download read-only segments and process queries locally. http://docs.datomic.com/architecture.html
You can report them using Google Webmaster tools. I have done this for several sites, but the link buying & ranking within Google continues. The system is broken.
There will never be a shifting of taxation from X to Y!

You have such a high tax because of your governments incompetence.

That being said - I'm no fan of that kind of tax avoidance, they should definitely pay their taxes.

But what will happen until the EU has ruled on this (which can take many years), is that Italy will further reduce its competitive advantage because suddenly Italian corporations will be unable to buy Adwords, Facebook Ads and so on which should make them invisible to international customers.

Good luck competing with a startup/small business that cannot buy any ads.
On the first glance this seems like a complete list of "language wars fallacies", but I'm 100% sure people will still come up with many variations on those and call them arguments. Just as they did for the past... half a century? So no need to worry, next time there is some PHP thread you'll see exactly the same thing you're used to.

Anyway, it's very well written and it provides a framework for selecting threads and comments to ignore. While I had a vague idea how to recognize unproductive flames now I have a solid template, which can be a great time saver.

Now I wish for someone to write this for "editor wars" as well!
Bingo! People talk about single wage earnings supporting a family and owning a house. Keep in mind that house was likely small by today's standards.

I don't think it's reasonable to complain that you can't sustain a family and a house that is 1.5x what they were in the 1950s, on a single income.
From the article "Then, Salon.com reported on the story and changed the wording of the tweet." This highlights my second point.

As to the first, your words hurt me.
Do you think that would increase or decrease the chances of the North Korean military launching nukes?
SEO is more important than UX, apparently/unfortunately.
I'm surprised that the NY Times refers to North Korea as only Korea in the title of the article. I wonder if they found they got more click throughs when which country they were referring to was ambiguous?
I'm so confused at this backlash, this is hacker news- mahbod, tom and the rapgenius team have built an amazing product, and found a clever way to help with search engine optimization. Good for them. They're optimizing EVERYONES search experience-
I think it's ridiculous in this case for them not to have preferential page rank... If the average user would prefer them over a competitor ( which I beg someone to argue) then who cares if they creatively by-passed some ambiguous google guidelines.
That doesn't follow. Loads of software is written with inferior and suboptimal tools for all manner of reasons. Unix was first written in PDP assembler. That doesn't mean it was a good idea, it means it was done.

Popularity is a bad, bad metric of a tool's quality.
I find it interesting that there are about 50 comments in this thread discussing the best/better ways to model the problem in Scala, and no controversy at all about the Clojure implementation.

That's a feature of Clojure, IMO.
This post belongs to Shawn McCool of Big Name (http://heybigname.com/2013/01/21/how-to-become-a-better-deve...). Though he was credited, I think we should use the original content source when possible.

McCool does make some excellent points and his contributions to Laravel and other projects have been very helpful to me.
E-bikes - Turning Santa Claus into Lance Armstrong
> I have a very strong opinion about different languages, because I have invested a ton of time researching them.

This doesn't follow? I mean, research leads to knowledge, which is about facts and facts are not opinions? Or am I missing something?
Ahhh, a Bieber fansite. That explains it :)
i dont think anyone would have cared if she was just a normal person, but she literally WORKS AS A SOCIAL MEDIA MANAGER. she bloody tweets for a living and does public relations, ffs.
Ryan Carson is the next Steve Jobs
Justine Sacco And The Self-Inflicted Perils Of Twitter
Sure, here is the link. https://www.google.com/webmasters/tools/paidlinks?pli=1
Facts ... can still be subjective.
> Why should I care?

You dont have too,but if you like your job, you should be curious about stuff you dont know. Dont you want to learn how you could solve problems a better way?
I am counting my blessings that my contact with a Netflix recruiter did not go past the initial phone screen. At that time I had no idea what kind of company it was.

Unsurprisingly, even though this happened less than three years ago, all the people I had been in contact don't work in Netflix any more.
A basic income would help jobs follow people.
> Kernel contributors aren't background-checked so all you need to do is to pay someone to do some legitimate kernel hacking in a sensitive area

People vastly overestimate the worth of background checks, and underestimate the effect of current hardship.
I don't know if I believe that Guido Van Rossum has to spend 50% of his time on not making python better, but perhaps it's true. Isn't he at dropbox now as well?
Eh, as long as HN doesn't censor bad press on its startups (I don't know, maybe they do?) I'm fine with it.
I saw that on Google Play, I did not update the CC when it expired but I was able to buy apps.
This is a serious issue, but I don't think it was given a very serious treatment by the author. Smartphones offer objective benefits, and maybe cheap smartphones are worth buying even for the very poor. In that case, making everything smartphone based would benefit everyone.

The claim that requiring smartphones to access certain services will be a net minus for the poor is not obvious. For example, what if welfare could only be applied for online, but the process was much simpler than paper forms? Would this help or hurt the poor?
I didn't say buying links doesn't work. I said asking for a series of exact match anchor text links, on the bottom of a blog post on a site that is likely irrelevant, is very unlikely to work.

More importantly, any strategy that is against Googles quality guidelines that works today, probably wont work forever, or even for another several months. The pain and suffering of getting slapped by google is much too intense to justify the short term gains.

Matt Cutts himself said recently that the best way to discourage spammers is not just to hurt their bottom line, but to "Break Their Spirits." http://searchengineland.com/googles-matt-cutts-on-search-spa...
CanBuildFrom is essentially a typeclass in Scala that is used for converting between collection types. Ignoring the coherency issues associated with using implicits for typeclasses, it makes the implementation of the collections library significantly more complicated and causes issues with type inference.

In the rare cases where you actually need to convert between collection types, it's usually trivial and more efficient to do it manually. Essentially they've added tons of complexity for negligible benefit. One of my main gripes with the Scala collections library is that it's overly complex and that this complexity has been the source of hundreds of bugs.

If there was any real benefit to the way it's currently done they wouldn't be hiding the true type signature for things like `List.map` in the official Scaladocs.
The reporting on our work has been of mixed quality. Check out our actual blog-post here: http://webpolicy.org/2013/12/23/metaphone-the-nsas-got-your-... for more accurate details.

We used data collected from voluntary users' phone logs as our phone number data set. This means that if Joe called number X a few weeks ago and then decided to participate in our study, number X was in our database. We then used a couple techniques too see how well we could identify who number X belonged to.

We didn't put together actual profiles of users, though that is a possible next step. However, I think it is clear that putting together profiles of users is possible given how easy it is to identify who you are calling and receiving calls from.
Due to an inconveniently timed cold, it may still be another day or two. Soon.
Something missed in this article is the need to reflect and have personal retrospectives. Back when you first learned to code, you may have chosen names for your variables like `foo` and `bar`. This was fine when you're learning how an if statement or a for loop works. But once your program gets a little more complex it's hard to keep track of what `foo` or `bar` represent.

I notice a lot of people who run into these types of problems and consider it to be just the way things are. This makes your productivity plateau. But, the reflective programmer notices the meta problem and asks, "How can I make this easier to think about?" In this specific example, the answer is to give the variable a meaningful name. I think you've gotta be reflective to learn this lesson. You can be taught and you can be told why you should do it, but it won't click very well until you feel the pain and the satisfaction of solving the problem.

---

New cynical topic: The real way to become a better developer is to be passionate about development. Everything else will fall into place. I'm not sure that this can be taught. I've seen a lot of people with the attitude of, "even if I'm more productive, I still have to work an 8 hr day so what's the point?" These developers (which in my experience is the majority of them) won't improve because they don't want to. But for me, maintainable code is its own reward.
Now that explains why I can't get a unicorn job!

In a more serious note, while it's a well written article, it has a very narrow
scope, since you can really say the same stuff about almost every aspect in life.

Not only there are no unicorn jobs, there no unicorn hobby projects either. You
can every easily feel "trapped" and tired from your own hobby project.

Oh wait! There are no unicorn relationships either! And there are no... well you
get the idea.

The reason is simple of course; everything "unicorn" assumes that a certain something
(you, your projects goals, the market, etc) stays the same, while the whole world around you is constantly changing and evolving.
People mostly benefit from immutable state, which is very useful for avoiding extra bugs. All other "expressiveness" garbage is for those who really dig it.
Ok. Just skimmed the wiki page on "fact" and discovered that the word doesn't mean what I thought it means. :)