skysight-inc/HackerNews huggingface dataset:
salary/1000 is pretty good in my experience; I've usually gotten less than that (going through agencies) Getting /more/ than that is quite difficult. (I mean, the agency gets that for you, sure, but they aren't going to pay you anywhere near that.)

As an example, uh, last time I contracted full-time, I got $72/hr on a corp to corp basis. Right before that I was getting around $105K/year as a full time W2. (Last I looked, I was offered $95/hr, but had to back out 'cause one of my employees left for a better job, so I no longer had the time to rent myself out full time, and they didn't want me part-time. It was a good gig, too- just my thing. The company had just been bought and gutted, everyone that could had left. Just the sort of smoldering heap that I like.) I mean, obviously, if you value job security (I don't) then moving from $105K/year to $72/hr is a really stupid move... but I don't value job security, and I wanted to dump money into my hosting operation, so it was a reasonable choice for me. It's likely that I tipped my hand, though, and acted a bit too eager during the negotiations, and left some money on the table, but I don't think I could have pulled off $100/hr at the time. that was before I was published.

But yeah; from what I see with the agencies? They have lower expectations... much lower expectations than someone hiring on direct to the client, but they don't pay all that much better. On the upside, standards are low and if you are good, they keep you in easy work.

(It's also possible that I simply haven't fount the right agencies.)

It's different if you are going direct with a large corporation, but that's very hard to do. Usually large corporations want a buffer corporation between you and them (and a corporation you set up that derives all it's revenue from your consulting doesn't seem to count)

The rules are much loser for smaller clients, but smaller clients, generally speaking, don't pay nearly as much.

Where I am? It's difficult to get most agencies to do 1099 or corp to corp these days; most want you as a W2, which means you are taxed exactly as an employee. There's some law that essentially prohibits one-person consulting corporations, or something like that.

I've always negotiated a corp to corp deal, as I have a corporation that does other stuff, and when I consult, it's for venture capital, so for me, the tax benefits are very real (e.g. I get to spend the money on servers or support salary pre-tax) of course, any money I want to pass through to me, I've gotta pay the 15% on, as you point out.
I will grant that using this on someone else without their knowledge is more questionable

If you set that alarm, you know why and what for you are conditioning yourself, and that is even true if you know how and why someone else set it; but when it's just a faceless event that you learn to adapt to, possibly while even having a narrative about it that has nothing to do with reality, that's not just slightly different or worse, for me that's worlds apart.
What to do about GNU?
The Incredible Two-Headed Product Manager | The Mud Dauber Chronicles
That is correct. But you do know the indentation rule so you know that the int b only has 1 tab followed by spaces.
Sorry, but that advice about number.toString(radix) is mistaken.

JSHint does not complain if you omit the radix in a number.toString() call, nor should it. The default radix value for number.toString() is 10, and there are no magical surprises as there are with parseInt(). If you write number.toString() it means exactly the same thing as number.toString(10). There is no reason to provide an explicit radix of 10 unless you just like it better than way.

In the (016).toString() example, the problem isn't the missing radix; (016).toString(10) returns the same value, "14". The problem is the 016 constant itself. That is an octal constant and has already been converted to decimal 14 before the .toString() call. There is nothing that .toString() can do to fix this problem.

Now you're right that it is useful for a developer to know about the radix parameter, so you can easily convert a number to its string representation in hex or binary or whatever base you need.

parseInt() is a different story, of course. You are quite correct that you should never write parseInt(number) without a radix argument, unless you actually want the behavior of a leading zero making it octal and a leading 0x making it hexadecimal.

(edited for clarity)
Javascript closures as a way to retain state
heh, weasel words are weasely. sorry. Skype had a lot of changes due to quote marks changing too. don't take it the wrong way though, diffs are tricky i guess. (mobile typing, forgive brevity)
Your first point is fair. Of course, 'readability' is extremely subjective. It should always be judged in terms of the intended audience for the code - we'd have to ask a Haskell programmer to be sure.

Your second point I disagree with completely. Duff's device is non-idiomatic C that relies on oddities of C syntax (fall-through of cases in a switch statement, and the ability to jump into the middle of a loop). My code is reasonably idiomatic Haskell.
Thanks! The background was drawn by draculafetus on Fiverr (http://fiverr.com/draculafetus). I agree that the colors/opacity combo is really ugly.

Clarification: my colors, not the background's
Right. Some of these are legitimate issues, but not that one.

Given that the Ruby code in the gem has full access to the file system with the privileges of whoever is running it, I don't see how this makes things any worse (assuming you're not installing the gems as root or whatever).
Every framework has security holes. I have seen and used a lot of frameworks and Django is the best framework for me. Second nice framework is Apache Wicket, but it's stateful.
It seemed really slow to take my control movements. Is it sending each move to the server before moving the snake? Maybe it needs to make the change locally (optimistically), and reconcile it after.
I am excited to hear that. I know it means pulling resources away from developing features, but seeing the plumbing taken care of properly really lends confidence to those who might be early adopters of a young project.
>...individuals who all have their own needs and will need to be taught and treated differently.

So, so true.

I find it's a common source of frustration and tool of rationalization to blindly apply what appears to have "worked" for one kid to all of the rest, expecting if not demanding the same result. Kids aren't uniform data ready for predictable processing.

>Worse, I have a strong feeling most of them haven't talked to a kid in years, much less ever raised one.

Child-rearing is such a magnet for expert advice given from a position of zero practical experience. There are all sorts of things in life that would be more applicable to speak authoritatively on with only theory to work from, but I rarely see the same kind of absolute assuredness anywhere else.

I'm thinking folks tend to take their own childhood as years of "factual" evidence and experience in the matter.
The looming threat would be if a company declared copyright infringement to get rid of an embarrassing earlier version of a ToS from your website.
Is the Go source for this available somewhere?
IIRC, Fabio works at the Swiss Ruby shop Simplificator, who are all very nice chaps indeed! Glad he helped you along.

EDIT: I just checked, yes he does (well, unless we're talking about another Fabio of course, which is possible...)
Ha, I just went Kamikaze on someone. This is so fun. Hope traffic does not die for a while, because I plan to play the shit out of this one. Anyone interested in forming an HN league?
Right, so this is why I was loathe to call Potato out.

If you take a look at his comments he's been all over these threads about ruby: https://news.ycombinator.com/threads?id=PommeDeTerre

And he really isn't participating in a constructive manner. He gets away with his obnoxious behavior in other threads by intermingling his opinions and generalizations in with the substantive discussion.

I'm not going to engage him on the substance of what's happening in the Rubysphere, because he has made clear that he no intention of helping either move the discussion along, or to solve any problems.

That he occasionally raises legitimate points is irrelevant, others have raised the same points in constructive manners, and there have been fruitful discussions on the topics. Engaging this particular guy is only feeding a troll who is distracting from the conversation.

Regretfully there are two opposing goals that must be served here.

The discussion about how Rubygems is going to move forward is really of vital importance to the ruby community. Making sure that there is a civic engagement with Rubygems and the tooling that Rubyists rely on is something that really does need to be promoted better.

On the other hand, Pomdeterre's trolling is obnoxious and unhealthy behavior that HN shouldn't tolerate. Like I said above. Being right is important, but it's not the only important thing. You can be right and still be an asshole who's being a drag on a community, or an organized effort to do something.

I agree that my criticism of PomDeTerre's behavior does not touch on the heart of the discussion, but I hope you can understand that that was in fact the intention. It is not the subject matter that he is discussing that's the problem. It is his conduct.

It's unfortunate that it's distracting from the substantive discussion, but we shouldn't have to put up with people acting like this, or interfering with efforts to fix problems.
The classic "Replace Conditional with Polymorphism" design pattern, which took me way to long to realize that it also applies to Python.
Direct link: http://tweetping.net/
> When a new version comes out, I wait for a hardware refresh and just get a new Mac

Apple must love you.
As an expert in this area (I implemented snake, once, in ascii for kicks) the problem with that approach is there's no way to undo your presses. So if you erroneously press left when you meant to press right, you're screwed. The best control strategy I found, and the one that seemed to correlate with classic implementations, is to simply take the most recently pressed key at each tick, and only allow the keys that correspond to left and right relative to your snake's direction.
Individual API Deployments Will Get Smaller and More Numerous
Is there an excuse for short variable names?
Chatgir ,chat, sohbet
thank you admin
I would pay to play snake tournaments! Look into this please.
Surely these sorts of messages are prime candidates for opportunist phishing attacks?
FWIW the System Applications Working Group at the W3C is working on a Raw Sockets spec for the browser, but I don't think a final draft will be ready until 2014. Adoption across most browsers will then take a little longer.
Let me take a step back here and lay this out in a more reductionist way.

There is an scientific approach to parenting. We can take a testable metric like body weight, and apply rigorous analysis of contributing factors, like eating habits and exercise, and arrive at a more-or-less objective conclusion like, "Feeding kids lots of sugar will make them fat." That's not a conclusion that's amenable to subjective analysis, and non-parents are as capable of drawing them as parents are (and in fact, non-parents may be better, because...)

There is also an intuitive approach to parenting, which is how most parenting decisions actually get made, because once you get the little details of keeping your kid alive and healthy taken care of, you start running into abstract problems like, "I want my child to have a happy and fulfilled life," for which really actionable scientific evidence is thin on the ground. Parents develop this intuition over the course of years of near-constant exposure to their children, where every single little thing they do has some consequence which they have nowhere near enough time or energy to seriously consider. It's the sort of problem our brains are made to solve, and generally it works out okay.

Consider that if you aren't a parent or full-time-plus childcare professional, you have something like one one thousandth that level of interaction with children, and much less in a custodial role. So let's swap out some nouns and see if this makes sense to you:

There's a question about a programming language. In the discussion are a layman, who has never used the language, and an amateur, with fifty thousand hours of subject matter experience. Somewhere are educated people studying the language rationally, but they are not here.

The amateur says, "Look, I know you have your own opinion and all, but I don't think you're really even qualified to discuss this if you haven't done any programming before."

The layman says, "Why not? This stuff is just common sense."

The amateur replies, "I understand it looks like common sense to you, but, in the nicest way possible, you just don't know anything about this."

The layman protests, "Of course I know about it! I use computers almost every day, and so does everyone here."

The amateur is frustrated. "That's... not really the same thing as programming at all."

The layman feels challenged. "Okay, if you're the big expert here, why don't you just share some of this so-called expertise with the rest of us?"

The amateur is perplexed. "...that's what I'm doing."

This discussion will never arrive at a productive result. There is just no path from here to there.
Where Kim Dotcom and Mega have the edge on Dropbox and Box.net
Hacking and High School
>Or, have had the luxury of having great parents who never bothered playing such mind games with you. Of course, since such gifted parents are rare, it's easy to simply dismiss such a high standard. But once you go non-bullshit, it's just hard to go back.

It's interesting that you're responding from the perspective of a child to a statement from the perspective of a parent.

Do you have children?
Remember that the "BC" in ABC means "Base Class"
I don't love this refactor. I especially don't like how it generates names from other names -- e.g., given 'switch'/'submit', appends '_row', and then converts it to CamelCase so you get 'SwitchRow'/'SubmitRow', then instantiates the class named that.

Here's why: When I am maintaining somebody else's code, even if I guess that this is going on, I rarely trust these kinds of name-generation tricks. When I need to change some code, I'm going to grep the codebase for 'SwitchRow' and add a new line in whatever conditional to instantiate my new class. When grep can't find any instances of SwitchRow's constructor being called, I become suspicious and it costs me more time, because I am making sure I properly understand what is actually going on.
Being away from the computer even for a couple of hours can make you aware of the grip it has on you.
Haskell vs Ruby behavior: Redis database
The friends thing he's talking about is taking your reference contacts and then using them as future leads.

And there is a fixed cost to sending a resume and cover letter. Sure, the first one isn't such a pain, but if you're unemployed and sending out 30 resumes, it's sort of a pain if 10 of them are fake, and another 5-10 are duplicates of different recruiters trying to fill the same position. It increases the work I have to do, and provides an awful lot of false hope.

Again - one recruiter doing that amid a sea of legit openings isn't all that bad, but in larger markets it's not just one recruiter misbehaving.
While traditionally flights were cheaper when booked round trip and 21 days in advance, those requirements are often no longer required. I just did a month long search on ITA for one way flights from New York to Los Angeles. There are plenty of tickets for next Saturday (7 days from now) for $130. The round trip price is simply the two one way tickets added together.

Within the next 7 days, the price increases but not by much. You can travel anytime before Saturday for only $284 one way. Obviously if you want a refundable/changeable ticket the price is more expensive.

While this is only one example (and a domestic USA itinerary only) the point is that the days of requiring a round trip, with a Saturday night stay and 14 or 21 day advanced purchase are often no longer required.
Two things to note, though:
1) the script as given doesn't actually generate graphical output, just a text file;
2) something like Quartz Composer would be perfect for doing this with a GUI.
I've uploaded a sample image here, so folks can see how the site works:

http://chatplode.com/c/ozffxd
I suppose MathBabe provides a service by constantly reminding us that human motivation is impure and leads to all source of bias that taints the numbers and the models used to evaluate them, but it does get tiresome to read a blog supposedly about math which is, in fact, largely written to support her political agenda. (Even if you agree with her agenda.) She recently attacked Nate Silver for "defending corruption" because he didn't use his book to attack evil, greedy Wall Street, and now Bill Gates for being naive, because he didn't use his annual report to state the obvious, about which little can be done, but instead chose to promote measurement, where progress can be made. Perhaps she should change her moniker to PoliticalScienceBabe?
Indeed it does. I have a large code base at work that uses this pattern for Django models with a bit of metaprogramming to create a template for types of input sensors. It's amazing what this kind of refactor can do when you need to turn a long conditional into something more generally extensible. New sensor types with custom column configurations take an average of 5 lines of code now, instead of about 30 before.
Brains also tended to run towards statistical analysis.
Might be hard to chat and play snake at the same time. I guess you could smack talk between matches.
They optimize away unnecessary monitoring inside the traces once the types have been propagated there. So only slow path code does the monitoring. All the active traces should get stable types without extra monitoring at some point.

Essentially it's moving doing type propagation in "batch"
to a "dynamic trigger" system. How effective that is really depends on the programs (or the programing style) and how often they really change types.

I hope it's not just optimized for the usual benchmarks, but some real code.
Just so you know, the real-time chat usually works. Not sure what is wrong with it now. I will try to get it fixed soon. The idea is that multiple people can easily collaborate about an image in real time.
"What's maybe most striking about Tweetping is its presentation of data in pulses and punctuations: boomboomboomboom-PAUSE. That's largely an accident of interface, but it also suggests something profound about Twitter and the social web: This stuff has a beat."

No, it doesn't suggest that at all. I hate half-arsed attempts by 'tech journalists' to tie interface characteristics to some nebulous idea about the Earth being a giant organism that they learned in their liberal arts classes at college.
No but I told him 50/50 on profits
This may be silly semantics, but the idiom "a bad apple" typically means one bad person in a group of people who are good.
Plugging the laptop into the wiring loom without authorization is central to the computer fraud charge.
When Did Alicia Keys Break Up With Her iPhone?
I was coding in no-US keyboard for a while. But switching to US was very helpful for me. I think special characters in most languages are arranged to be efficient on US keyboards.
So take your time to switch and relearn. It will help in long run.
Show HN: iPhone/iPad Programming Book
yes thats why the original official secrets act was passed in the UK after they found a german national sketching away inside a dock yard pre WW1.

And if I find an open telecoms cab and tap your phone that is still an offense.
I have been asked questions like this before in interviews and it makes me wonder if the technical interviewers were so indifferent about their jobs they would pull clever questions from the web instead of practical questions applicable to the position. I rarely answer these clever questions correctly and I've been doing JS for a while.
>1. They do not know anything relevant about the technologies you are skilled in or the technologies required by the employer.

This... this shocks me, every time. I mean, in my experience, it's usually true, but damn.

What, then, is the value the recruiter brings the client?

I mean, sometimes they function as body shops, where the company pays them and they pay you, and the company then doesn't have to worry about labor laws and stuff, that becomes the body shop's problems, but I fail to see how that would justify the huge markup (and, generally speaking, but not always, lower quality) - Labor laws really aren't that bad. Do the standard things you do when dealing with programmers that get paid $90K+ per year, and you are in compliance with most of it.

I mean, besides that, they are keyword matchers; personally, I don't think keyword matchers are particularly useful, and in any case, they are not particularly difficult to implement.

But then, in defense of the recruiters (or, at least a reason for a developer to use recruiters):

>3. You will be legally bound to a three way relationship between the recruiter co. and your new employer. There are no benefits to you in this binding agreement.

Generally speaking, recruiters bring in a bunch of sub-par recruits. Way worse than if you had asked the people around the office to bring in friends (and worse than having someone in the office go over the resume slush pile.)

What does this mean? this means that if you are a sub-par programmer, and you failed that google interview your buddy got you, or if you are a good programmer who, for whatever reason, looks like a sub-par programmer (say, for instance, that you had a [mental] health issue impacting your performance for the previous year, or just had a run of bad luck and have been unemployed for a while and don't know anyone to get you interviews) then recruiters can be a godsend.

Recruiters are a fairly sure sign that the standards for the job will be low. The competition will be weak. And sometimes? well, comeon, most of us have needed to hit the bunny slope at least once in our career.
That sounds exactly like the workaround a mildly autistic person would come up with after being lied to a couple of times. Where are you on the autism spectrum?
Smart defaults. Requiring enter to start is not smart. It just isn't. Sorry.
I'm guessing that you don't find this code readable because of the $ operator. Admittedly, if you aren't used to it, it does look weird; however, once you are used to it--and it doesn't take too long--it makes the code readable.

In particular, it naturally splits apart the different function calls. So you can look at the parts separately: L.intercalate "\n", cut (b'-b+1), map toChar, elems arr. Now you have a nice little pipeline.

Perhaps to somebody without Haskell experience, the version with parentheses would be easier to understand:

L.intercalate "\n" (cut (b'-b+1) (map toChar (elems arr)))

However, in general, I find the $ version easier to follow.

I also think that this version is better than the same code broken up into arbitrary temporary variables. The pipeline is short and clear; adding temporary bindings would just give me more things to keep in my mind at the same time.

One way to think about this is that the $ is very similar to the | in bash, just backwards. So in a bash-like pseudocode, this is something like:

elems arr | map toChar | cut (b' - b+1) | L.intercalate "\n"

Hopefully that clarifies the structure of the code and why that structure is actually very reasonable.

Basically, my point is that the given code is clear and simple; chances are you find it hard to read because Haskell is somewhat foreign and not because the given code is particularly complicated or obfuscated. In fact, I think this way of writing the code is clearer than what you would get in most other languages because it forms a very clear sequence of transformations on the input.