skysight-inc/HackerNews huggingface dataset:
CPS transformation is mechanical; don't take my word for it, there's plenty of documentation:

http://www.springerlink.com/content/dk7n7mbjx7blbelj/
http://moscova.inria.fr/~xleroy/publi/cps-dargaye-leroy.pdf
http://muaddibspace.blogspot.com/2009/02/cps-transformation-...

There is data tying the whole program together: the continuation, which is a closure.

Assuming a bastardised version of Python with C#-style lambdas, so that () => {} is a function taking no arguments and that has no statements in its body, and result => {} is a function taking a single argument, etc:

Direct form:

def A(x):
x = B(x)
C(x)

def B(x):
factor = SyncCall()
return x * factor

CPS form:

def A(x,continuation):
B(x, result => {
x = result
C(x,continuation)
})

def B(x,continuation):
AsyncCall(result => {
factor = result
continuation(x * factor)
})

Things are actually more complicated than they look here, you may need more than one continuation for things like exceptions etc., but hopefully you get the gist.

Key things in CPS:

* Method calls aren't actually method calls; they are jumps with arguments. There is no call stack - the return location is itself passed to the method you're calling

* This means that the stack is implied in the variables that the continuation closures capture. So, the caller of A, where it has to return to when it's done, is stored in the "continuation" argument; and that location needs to be captured such that it is part of the state of the closure passed to B, so that it can ultimately be passed to C.

* Since the stack is stored implicitly in the closure, it is simple for the implementation of AsyncCall to initiate the I/O, stuff the return location (the last argument, "continuation" I've called it above) away such that it can be retrieved when the I/O completes, and then go off and do some other productive work - such as check for completed I/Os and call their continuations.

If you have green threads, the state for the continuation is implicitly part of the stack, only with green threads, you own the data that forms the stack, and can reliably do interesting things with it. The stack itself is a kind of argument that gets implicitly passed around in imperative programs, e.g. it is passed in the ESP register on x86. The top of the stack contains the continuation pointer; and 'RET' is the jump instruction which jumps to the continuation. But using the stack for an implied kind of CPS limits some of the other things you can do with continuations, as it enforces a contiguous linear flow, rather than what you can do with call/cc etc. when the closure data that's part of the continuation is stored on the heap instead.
It is a very bad way to try and stop someone from copying. A better way used by quite a few media is to use javascript and copy a backlink at the same time (very good for blogging and the media at least gets some link juice).

You are right the headline is a bit sensational.
your example is a great point, and something that just isn't practically possible. Changing history is impossible once it's been pushed without making chaos for anyone else that uses your code. And in git, commit messages are part of history, not just annotation to it.

perhaps in other ways though, the closed subsets do exist. as long as what you want to do isn't "complex" in git. things like commits, pushes etc.

Most importantly I would say is the fact that branching merging and sharing that branched history is a closed subset. If you only ever use the commit/push/fetch/merge commands (with pull being the same as pull+merge), and perhaps local branching as well, then you have a relatively simple tool for sharing code and history of that code. by far you don't need to understand the plumbing to work within that work flow, and I think I could explain it to someone in a short hour or so of explanation and example.
see this thread:

http://news.ycombinator.com/item?id=789469
Top quotes for February
As high brow as we'd all like to be, the honest truth is the only measure in business relates to profits. How much you can make and how quickly.

Your investors don't care how you make money, so long as it doesn't impede the making of future money.
Tunnel Trouble
Http://soundcloud/
Scoops for iPhone – Stacking Game Takes Cool to New Heights
I’m sure most of our readers enjoy eating ice cream (who isn’t?). Scoops for iPhone is not about eating/drinking Ice Cream, but about having fun with ice cream, something I’m sure most of you have only dreamt of doing.
i know right, going in and asking for cupcakes
Actually this advice is pretty difficult to follow IMHO. We tend to give-in to the demands of clients/users and add complexity without even realizing it. So it needs continuous hammering.
An SVN customized bash prompt
Hmmm, this is why you always match data produced in "the system" with independent survey data from the population.
I'm not against the idea of such software being open source, but I don't think it's a guarantee of quality by any stretch. I've seen and used (or tried to use) some hideously kludgy open source software.
The Keiretsu Forum are famous for this after Jason Calacanis found out about them:
http://calacanis.com/2009/10/05/jason-jihad-keiretsu-forum-m...
Ask HN: Review my Firefox add-on idea
I often find myself reading long blog posts only to find out that I already knew most of what was discussed. Other times, I find out that the topic wasn't really relevant to my interests (indeed, headlines are often misleading).

That's what lead me to the following idea: a Firefox add-on that overlays short and concise TL;DR (Too Long; Didn't Read) messages over web pages. The system would be community driven and moderated: anyone could add their own summary of the content and the best TL;DR messages would be up voted by the community.

I believe it could be valuable to lots of people for the same reason Twitter's 140 characters limit contributed to its success: reducing information overload.

That being said, I might be wrong and the only way to find out is by asking. Go ahead and tear my idea into pieces or let me know if you like the idea (and why)!

TL;DR: Community-driven Firefox add-on that overlays short summaries next to long texts.
I'd be more inclined to agree if the piece wasn't entitled "Games Development in a Post-Agile World". The central conceit of the article seems to be to debunk agile as a workable method. The article doesn't argue that agile is a hugely useful approach for most developers but a poor approach in some specific niches, it argues that agile is complete claptrap.

I will happily agree with you that there is room for a number of development methodologies.
Why the "Green Police" Is So San Francisco
Did Apple Change Their Tune on Media Pricing with Glee
Tourist Trap: Build the Nation's Greatest Vacations Game Download Free
From the World’s Largest Ball of Twine to the great Corn Palace nothing says Americana like the zany roadside attractions scattered across the good ol’ US of A. In Tourist Trap - Build the Nation’s Greatest Vacations, you become the mayor of a small Middle American town. Your citizens are full of unique and wacky ideas for what will entice the stream of family vacationers, college students and the buses of senior citizens with hope that they’ll choose your exit ramp on their cross-country travels.
Incredible article, good to see how far Foursquare has come.
I greatly appreciate his reddit post and hope to see more from people like him. My comment was directed at those people here and in the reddit thread trying to figure out who he really is.

Stop and think for a moment... Here's someone who made it! He's got what most of us want.
And he's offering to talk about how he got where he is and how he thinks about his future direction. He's asking for comments on that direction... sure... but he's also giving us a gift.

Since he values his privacy, he asks that people respect that and not reveal who he really is.

So... instead of taking part in the real discussion, some people want to out the OP. which would effectively kill the interesting conversation and chill any potential other people out there who might be willing to to post the same kind of thread.
Thanks for the link.

hn-api only makes one request when it gets stories or one request when you get a user's karma -- that doesn't seem like too much. I knew there was a velocity check on IPs (and that I was making an unofficial API), so I made it as light on HN as possible.
RAMCloud: Storage entirely in DRAM
The world's best accountant probably hasn't seen an actual balance sheet in ages.

He's probably struggling to be an effective manager somewhere.
My Impressions of Google Web Toolkit (GWT)
In Chrome, would "imdb <my movie>" or "amazon <my book>" show up as googling a website name? That could explain some of it.
if only they had rsync support...
Just to elaborate on what you are saying, I'll write a pythonic version of the handleBlogPostRequest described in the article. This example is a line by line copy of the one in the post, no real library is used.

def handleBlogPostRequest(request, response, postSlug):
db = yield DBClient()
post = yield getBlogPost(postSlug)
comments = yield db.getComments(post.id)
html = template.render('blog/post.html',
{'post': post, 'comments': comments});
response.write(html)
response.close()

The 'yield' command turns the result of handleBlogPostRequest into a generator. When you "yield getBLogPost(...)", the generator returns a request to the database for a blogpost. When it is ready, the framework passes it back into the generator and assigns the result to post.
Not immortality, you can still get hit by a truck. Just indefinite lifespan.

At the rate at which fertility is dropping, and at the rate at which technology is progressing, it would probably be pretty sustainable. But even if it causes problems, these would probably be much smaller than the problem of aging we have right now; besides, we can't make that choice for the future. If people decide they want to die of aging, they can stop taking the therapies. But if they want to live, they'll have to figure how to make it work.

edit: I'll add that the main motivator of many people working on this is curing horrible diseases (cancer, alzheimer's, diabetes, etc), and living a really really long time is a side-effect of not becoming decrepit and frail.
This may not be 100% relevant to your question, but am posting this FWIW.

My last paid job (C++ and Java developer at an investment bank) required a 2:1 split between debugging and development work. I identified the following areas that could use improvement.

1. Knowledge of our code-base. I spent downtime at work reading code and documenting the system architecture. This also called for an improvement in my code-reading and debugging skills.

2. Development work flow and knowledge of tools/technolgoies (GDB, Linux kernel architecture, Perl and Bash scripting for handy scripts).

3. Domain knowledge (finance).

4. Knowledge of other technologies involved (Sybase, etc.)

I found that most situations didn't really call for expert knowledge of C++ and Java or of algorithms (as I was led to believe in the interview), but actual understanding of the code-base, the existing system architecture, and how our portions interacted with the back-end systems.

IMO, with any technology, you will hit a point beyond which there's diminishing margin of returns on gaining deeper expertise. But you should read the technology reference manual (e.g., the Sybase Reference Manual or the Bash Manual) thoroughly at least once so that you build a mental map of options available that can be used when you need them.
That's a good point. Google does seem more nimble in their ability to fix this kind of problem than most companies these days.
note that what you're exploiting here is the fact that it's a lot easier to identify "a mess" than it is is to identify a gap in your understanding of the language; identifying the mess helps guide you to the gap.

That's an interesting way to look at it. I guess I do struggle, because of the way I learn a new language or a technology. I spend a lot of time reading books, or other people's code, but I don't spend enough writing out a solution for I fear it will be not the right way to do it. Your suggestion turns this around on its head - try and write a solution, no matter how unpolished or un-idiomatic is, then step back and see what could be improved.

I like your take on this. Although, I will admit, I am still a little puzzled. Take, for example - I am currently spending time learning Clojure, and decided to attack the 99-Lisp-Problems to help me out. For a particular solution, I wrote a function that was about 8 lines long and I could not find a better way to solve the problem. A quick Google search revealed a solution that was a one-liner!

I guess that's my feedback loop - Other people's solutions to the same problems.
Can't you cache the users state ? It's not like you need karma updates every time you do a request to the API.
I use Twisted Python, and disagree that async is too hard. Lets sprinkle a bit of syntactic sugar over Twisted and consider this example:

@defer.inlineCallbacks # Python2.5 and up
def login_and_do_something(args):
server = yield factory.login(username, password)
rval = yield server.callRemote(args))
print rval

It looks fairly straightforwards and isn't the complete change to coding style that has mortal programmers scrambling for the hills. Doing the same without inline callbacks, I must admit, is quite a bit more to wrap your head around.
The iPhone Obsession and Lying with Statistics
There are probably at least a quarter of the angel groups if not almost half here in Texas that charge. I would have thought Texas wasn't that different than the rest of the country but I could be wrong.
Evolution and Open Source Software (last roar of the dinosaurs)
Linux Mint 8 KDE edition released - Linux Critic
I think one of the best things you can do is start trying to solve something in a very public way. The faceless mob on internet will correct you, and you can quickly learn from your own mistakes.

However, this method has its drawbacks. You need to be able to simultaneously take the criticism with a (large) grain of salt, and be able to keep on trying after the eventual hash comments.

You will grow fast this way.
And there's nothing wrong with your approach as far as I'm concerned. It's appreciated that you are as up-front about your strategy when many aren't but it does affect how I come to your articles.
As an educated person, obviously I'm aware of this. I'm not rejecting the possibility of designing a government that can handle immortality; I'm merely remarking on what I perceive to be great difficulty in designing such a system. I haven't said anything regarding the correctness, justifiability, or longevity of our current systems of government.

Having a degree of skepticism is a far cry from supporting the status quo; I want to be clear that I do not support it.
Douglas Crockford, who's website really opened my eyes to the capabilities of Javascript about 4 years ago, recommends only one book: JavaScript: The Definitive Guide (5th Edition) by David Flanagan

Since he wrote that, he's also come out with his own book, JavaScript: The Good Parts.

Disclaimer, I have not read either book, but I highly recommend his website: http://www.crockford.com
More explanation and pictures at Wikipedia:

http://en.wikipedia.org/wiki/Dazzle_camouflage

(...including the fact that Austria still uses dazzle on speed trap booths to confuse motorists.)
Yes, the people at Ludicorp (http://en.wikipedia.org/wiki/Ludicorp) were making Game Neverending (http://en.wikipedia.org/wiki/Game_Neverending).

And as pointed out in the Wikipedia article on GNE: "Occasional signs of this legacy are visible, such as the '.gne' file extension appearing in Flickr's URLs."
I'd guess snapshots aren't retrieved fairly often so the additional CPU and IO overhead of reconstituting a version are totally worth it given the space savings, unlike for data that's used regularly?

(Disclaimer: I have no experience in snapshot system implementation so I don't know what I'm saying)
Australia's Internet: nonneutral and proud of it
Your Computer Use, Visualized Like a Jackson Pollock
Lala's marvelously inept Music Mover
Accurately estimating programming time
wow, that's really interesting. thanks. do you know of any production level languages that feature this kind of approach?
A darker story: I was out of state, at a friend's house party, a few years ago and the discussion got non-superficial late in the night, as it sometimes does. His friends were talking about a friend who was not there.

Some time prior, this woman had an argument with her mother that escalated into all-out shouting, petty criticisms, damning accusations, anger. The last thing she yelled to her mother was "F* y!!"

The next morning her mother died suddenly. At the party, her friends were discussing how she regrets to the utmost of her life - that unfortunate and final send off. How she would give anything to undo what cannot be undone. How hard it is for this woman to try to forgive herself (the most important person of all to forgive).

I know it's a cliche but this is a true story. You may not see someone you love again - so don't part in anger. Don't curse out your parents or your significant other.
Wow that made me cry like a baby. That was intensely powerful on many levels. Thanks for sharing.
Previous HN discussion: http://news.ycombinator.com/item?id=887999
On Fact and Fraud: Cautionary Tales from the Front Lines of Science
While your utilitarian philosophy (the only measure that counts is success) might make sense on the surface, many people (including me) believe that utilitarianism has a number of problems.

First, your relative success today doesn't mean that you will be more successful or successful at all today. This is similar to the fallacies of greedy algorithms in computer science, if you're familiar with them. Secondly, utilitarianism will not give you happiness, which is pretty much the most important thing in life, more important than financial success.
> It's not like you need karma updates every time you do a request to the API.

Obviously.

When a request is made to get stories from HN, no HackerNewsUser objects are created (and thus, no karma gets updated). hn-api will only update karma when you, the coder, make a HackerNewsUser object or call the HackerNewsUser.refreshKarma() method.

Like I said -- one request when it gets stories or one request when you get a user's karma.
FWIW, most people don't even realize that phone contracts exist to subsidize the handsets. Most of the time, when I explain to someone that contract cancellation fees are basically just the phone company saying, "Well, can you pay us the rest of the money for the phone we gave you," their consumer ire abates somewhat and is replaced with a contemplative, "Oh."
Very impressed by CNET spending the resources to embed a reporter like this.

Here's a great gallery of in-progress art, prototypes, etc:

http://news.cnet.com/2300-10797_3-10002397-1.html?tag=mncol
And yet you were perfectly willing to waste your time on a snarky reply.
2010: Finally the year of the Mac?
I'm working on the list (the annotations will take a while, and I'll probably post it section by section); watch this space, and I'll email you a copy as well.
If I had a nickel for every time someone had an idea for community-edited overlaid content on other web pages, I'd be a very rich man. It has never worked. What will make your idea work? That is your fundamental problem, not whether or not it's a good idea. How you will make it work is the problem.
But... but.. I have to go to school! And write essays no one will ever want to read, essays that don't even aspire to be something interesting!
Applying Mathematics To Web Design
> "it argues that agile is complete claptrap."

No it doesn't. It says that Agile proponents who claim it's a silver bullet are talking claptrap. If anything, it says that Agile is a tool and you need to pick the right tool for the job.

Based on the Agile manifesto, the author proposes a scale with "people" at one end and "process" at the other. Ostensibly waterfall is strongly "process" and Agile is a more "people", but he argues that Agile consists of a number of elements that exist at different points along that scale.

He says that the elements down at the "people" end of the spectrum require good, experienced, self-motivated people. If you have these then Agile is more efficient. If you have juniors or average coders (more likely on a large team) then the overhead of a process-based system may work better.

He also identifies the points within the product's development lifecycle where Agile-like approaches work best and when the more hierarchical methods work best.
Parsix 3.0r2 has been released but still plagued with issues. - Linux Critic
The most notable features in Visual Studio 2010 in my mind are F#, a proper functional programming language, and ASP.NET MVC, which is ASP.NET that doesn't suck.
Do not ever cut and paste while writing code; type it again. When I learned programming in the ZX Spectrum / C64 era, magazines and books were also used as a software distribution media - and you'd have to type in the program to get the latest and greatest.

I typed my share of programs (a few tens or hundreds of pages, I would guess), and doing that helped me figure out stuff like

- which constructs are easier to memorise when you move your eyes back and forth from page to screen;
- that shorter code is usually better
- to keep only comments that would help me understand the code, NOT retype all the idiotic/historical comments originally in the program
- you actually get intimately familiar with lots of code styles, good and bad
I remember this one from a /. discussion: "SAP is how Lucifer interacts with our world."
"One of her friends is Hockey Night in Canada commentator Don Cherry, who joked during her 87th birthday that while 98 per cent of the city voted for her, he was looking for the remaining 2 per cent that didn't."

http://en.wikipedia.org/wiki/Hazel_McCallion
I spent a year+ working in corporate finance after college at a Fortune 500 company, and at the entry-level, this involved quite a bit of cost accounting/balance sheet work so I became quite familiar with SAP and its intricacies.

In my experience: SAP is painfully slow, incredibly non-intuitive, and the server inevitably crashes during every month-end close or year-end close with high usage.. so company wide everyone could be locked out of SAP for hours during the most critical times.
Compare that to The United States Postal Service (aka snail mail) that delivered just over 200 billion total packages in 2008.

Wow. Go USPS.

I'm sorry, but delivering 200 billion physical objects is so much more impressive than nearly any amount of electrons.
Scheme is implemented via a CPS transform, so a server built around this approach ought to be quite possible on a good Scheme implementation, or a Lisp implementation that supports the moral equivalent of call/cc.

Functional languages are also frequently implemented using CPS as an intermediate form.

Smalltalk also supports continuations, as I understand it; the Seaside framework for Smalltalk is a server implementation oriented towards continuations, though I think they use it for picking up where you left off in between multiple request/responses, not necessarily for I/O optimization. I could be mistaken.

F# has a feature it calls async workflows; I haven't delved into it much, but it looks like it's trying to make writing async code as close to direct style code as possible. But the full benefit comes from the compiler being able to rewrite all functions on the call chain between you and the function that performs the I/O, so I suspect it may be limited. Ideally, the CLR itself would support CPS transformation into its Begin/End-style async support, like I advocate here:

http://blog.barrkel.com/2006/07/fun-with-asynchronous-method...

(I've been banging on this drum quietly for some time now...)