skysight-inc/HackerNews huggingface dataset:
The pgrep command mentioned in the article was new to me and does the job with a single program. Had it on my debian preinstalled.

http://en.wikipedia.org/wiki/Pgrep
I would normally be suspicious of something that keeps cropping up like this (ref. PG's "The Submarine"). However, sometimes something comes up because the truth will out.

I think the "discovery" of these shoes being American is not an accident. Other markets are too small, and the USA probably has the biggest contingent of foot-damaged runners in the world. Although I live in Italy, Vibram keeps its Five Fingers shoes out of the market (they are available in Germany, even though Vibram is an Italian company). Part of the reason is, people already prefer flat-soled shoes here. Nike style sneakers are almost non-existent.

Some alternatives to VFF: Closer to home for you, perhaps, is the Feelmax Planka, and the UK has Vivo Barefoots which may be a bit overpriced. I don't suppose thin soles will perform well in a cold environment though!

As for me, all through summer I wore what in a different age would be called "canvas plimsolls", and I am now dreading having to wear winter boots. If someone could make a waterproof canvas hi-top, I'd rest easy. So yes, I do think these articles are coming out because people experience the sheer joy of wearing minimalist shoes (perhaps explainable by the sensory organ density of the foot?).

These are almost identical to the shoes I wore. http://www.seejackshop.com/images/uploads/ASOS-plimsolls.jpg
I agree with Spolsky on this one; and I cant help feeling TDD is like agile. One of those things cool companies and corporates use to sound "cutting edge".

We used TDD for a few projects (and agile too) and found it does slow you down no end.

And it also ultimately doesn't catch many useful bugs and problems. We still had to go through the usual end-point testing cycles.

We write unit tests for any of our API's and also for some of our core code; but only after original versions are in place. They are supposed to catch any mistakes or errors in futures we enhance and evolve the programming so we don't break backwards compatibility.

I think it really does come down to what works best for your teams though. Im sure plenty of people find TDD a great addition to their arsenal.

But at the end of the day it's just a buzz word like everything else - and we've found that by avoiding those kinds of things we produce good, solid, working code at a fast (not necessarily faster pace) - but with less headaches :)
Agile vs Prince2 (Pic)
That's an interesting story there.

Especially how hard it is for 'digital' people to adapt to the speeds of things like publishing houses.

If you don't mind my asking, how many copies were sold ?
1001 Movies You Must See Before You Die
New in this edition are entries to describe such film hits as Lord of the Rings, Mystic River, Farenheit 9/11, and Million Dollar Baby. But in fact, this volume's team of critics goes back to 1902, describing such films as The Great Train Robbery, and progressing chronologically across the decades to cover the best cinematic dramas, comedies, westerns, musicals, suspense and horror films, gangster classics, films noir, sci-fi epics, documentaries, and adaptations of novels and stage plays made by filmmakers around the world.
10 New Design Blogs You Should Check
Microsoft Debuts Mobile Backup Service ‘My Phone’, Adds Premium Features
Why? Java is extremely well suited to crawling and parsing. Extremely well suited to backend tasks running on servers for months on end without crashing.

It's blisteringly fast, low CPU usage, and would suit the core task of crawling websites extremely well. The async NIO libs are fantastic for network io.

What would you use and why? (And why would you not use java)
Nearly all the uses of fork I've seen are usually followed by an exec call. So the OS goes to all that trouble setting up a duplicate process only for all that hard work to be eliminated by running exec.

http://en.wikipedia.org/wiki/Copy-on-write
Looks like this was plagiarized from here: http://www.turnleafdesign.com/?p=114

The code-purity post was from 10/6 and the turnleafdesign article was posed on 9/27. Also links in the code-purity article are referenced but don't exist, such as "For those who use Eclipse I would recommend these video casts."
Using Shell Icons
Coordination languages: Back to the future with Linda
I always figured SETI should be listening for neutrinos. Perhaps that's how aliens communicate?

What would it take to make this a practical method of communication e.g., have a reciever and transmitter in your phone? Would a super dense material work to capture them?
Yes. I saw that.
fork is really handy when you actually want multiple copies of your program (sharing only initial state) -- it can be used like creating a working thread, but you don't have to worry about sharing (subsequent) state. This means you can exploit multiple cores without the complexity (and bugs) of shared memory threads.

Actually, fork(2) has now evolved into clone(2) on Linux, so you can choose in quite a fine grained way what the threads/processes will share.

The separation of the functionality of spawn between fork and exec is surprisingly handy (even though people occasionally still come up with vfork(2)).
ActionScript 3.0 for Adobe Flash CS4 (book review)
Because a 'fork' is the most natural way for one process to transform itself into another process while continuing to run by itself.

I actually think it is one of the most elegant system calls in unix.

Think of all the alternative clunky ways that OS's before unix had to use to start a process at a given depth into the process. Lots of flags to make sure that you started off where you left in the 'parent', to recreate all or most of the state required for the child process. Fork passes all that state 'for free'. And copy-on-write makes it fast.

It's a bit like biology. Split the cell, then let them both specialize a bit towards what they have to become. The moment of splitting is almost 100% symmetrical, the only difference being who is the 'parent' and who is the 'child' process.

Other ways of starting new processes feel clunky in comparision, you have to specify a binary to run, you have to know all kinds of details about parameters to pass and so on.

Fork essentially abstracts the creation of a sub-process to the absolute minimum.

Fork is atomic, it's got 0 parameters and it returns only one integer (or it fails for a simple reason, no more process slots).
What happened to NewMogul.com?
well we know it happened at least once in this universe
The OP was asking why we need to copy the state at all, not how to optimize it.
Twitter Data: An Investor's Perspective
"given that Chicago is broadly seen as discredited by the recent crash"

By whom exactly? Mostly by those who tend to propagate further government influence on the markets. There are equally valid arguments which were made that government intervention in mortgage markets, fed policy etc. caused the crisis and the crisis could have been averted by having a truly free market.

I just want to point out that you seem to be influenced by biases as well. To point out other people's biases but not to acknowledge your own seems unfair.

That is why that whole 'lessons from the crash' thing is so difficult to grasp. Because everyone's analysis is ridden with pre-conceived notions and biases, it's hard to make out the actual truth.
Did Pownce do either of those things?
Perhaps you're talking about Java SE 6, not Java runtime of 10 years ago?

> Extremely well suited to backend tasks running on servers for months on end without crashing.

Running for months without crashing - maybe. But by the end of that month (well, week really) it will be so slow (i.e. due to memory leaks ironically) that your only option will be autorestarting it every now and then...

AFAIK Larry and Sergey chose Perl at the beginning. Now it should be mostly Python and C.
Just like some people point in the comments, why is he saving his passwords anyway ?
Needing an exact copy of the current process is an atypical use case in my experience. And the typical use case of running another binary isn't made any more elegant by fork(), it just shuffles the complexity into exec().
Keep your teeth sparkling white
Preventive and regular care is one of the finest ways to make sure that your teeth are well maintained with bright and white appearance. Taking adequate care of teeth can be a bit tough and require loads pf patience. For more information log on to gosmile.com
Enterprise Patterns is a classic, that alone redeems the man's non-hackish career.

P.S. I also enjoyed Enterprise Integration Patterns by Hohpe and Woolf.
Because plenty of times what a child will do is dependent on what the parent was doing just before the fork, and in fact may simply be a bit of code to run a background task related to the parents foreground task.

Also, and this is a very important bit I think, fork started out before 'threads' were common, so another process to run the same code was a common solution. The communication between parent and child was through a unix pipe. That way you could write one single program, with all the state shared between the two sides of the fork, so both parties have access to all the context.

The copy-on-write bit set on all the pages with state in them in the child guarantees that fork is very fast and pushes the copying of the state as far in to the future as it can get away with. So forking a process with 10M resident is as fast as forking a process with only 100K resident. When you modify the memory in the child you get to pay 'bit-by-bit' for the cost of the cloning of the parent, but never more than you actually need.

Clever programmers make sure that the state variables that are going to be modified by the child live close to each other.

An alternative to that is to use shared memory and mutexes, that way you can get pretty close to the 'threaded' model using only processes.
think that's where the phrase 'a spanner in the works' comes from too.
An interesting question. I don't know of the design decisions or whether the fork idea predated UNIX. But to me, it's just the sheer simplicity. Compare to the basic process creation function on Windows, taking 10 arguments: http://msdn.microsoft.com/en-us/library/ms682425(VS.85).aspx

Another useful application of the implicit descriptor sharing is http://en.wikipedia.org/wiki/Privilege_separation
Ouch david, quite some acts to follow, but I know you can hold your own :-)

P.S. I still have a Tclplugin app deployed at my brother's office. A construction company using an in-browser tcl-plugin for their office automation software. If I had the foresight to publicize this I could have gotten some exposure. And yes, the backend for that app is in Lisp, Allegro Serve running on Slackware 9 and SBCL 0.8.2 :-) That was way before github, social coding and blogging; we got no props for deploying "fringe" technologies haha.
Being careless is a security risk. Please place the blame in the correct place. When it is trivial to avoid the risk and not at all unobvious why you would want to, the risk does not lie with the program.
Forking predates threads. It's also makes more sense as a system call, since a library writer can implement spawn() in terms of fork() and exec() but not vice versa.

It's also still a good model when you want to run N copies of the same code concurrently, since the processes are isolated from each other, making it easier to reason about correctness. There are some wrinkles (primarily due to inherited global state such as filehandles), but they're reasonably well understood (by Unix+C programmers).

If you need significant shared state between concurrent paths of execution in the same code, then threads are probably easier.
fork is a really elegant call.

Maybe you should be using higher level calls, but back when I was writing linux assembly programs fork was awesome.

There's not really that many caveats to using it at all.
Servers & Shells.

i.e. the things Unix systems are good at, but Windows systems are not.
That's because you want to do an exec, which essentially transforms a running process into another process. I think people generally overestimate the complexity of fork on the part of the kernel, it's not all that bad. Create a new process slot, copy the VM configuration, set the 'copy-on-write' bit and the 'write-protect' bit on the pages in the memory image of the parent and return (twice!).

If all you want is a subprocess to do something interesting to the data you already have then fork is ideal. This is - or maybe was - a very common use case.

If you also need exec then why not first abstract out the fork, you need that any way, and do the exec in the child. It's one of the most elegant solutions to the problem I've seen.

Otherwise you get a whole bunch of functional duplication between system calls.

Already the 'exec' zoo is a good example of the kind of functional duplication you'd get. Adding 'forking' and 'non-forking' versions would not seem to improve matters much.
fork() and exec() work well as separate system calls
for the common situation where the child (but not the
parent) needs to adjust something before executing
the new program. Changing file descriptors to implement
> and < in the shell, for example. It's common to see
sequences like

pid = fork();
if(pid == 0){
close(1);
dup(pipefds[1]);
exec(...);
}
Is Google's Native Client the second coming of evil ActiveX?
The ugly side of blocks: explicit declarations and casting
4 Tips Which Will Cut Your Weight Loss Efforts by Half
Why spend all the money on a nice website if you're just going to throw a pain-in-the-ass pop-up over it all? I left immediately when it came up and I have no intention of ever going back.
Why Metalinguistic Programming?
Except fork() doesn't do what CreateProcess() does. I'd actually be pretty interested to see a fair comparison: a list of Unix system calls, with arguments, that covers all the functionality of CreateProcess(). Are you completely sure that it'll be smaller and more elegant?
http://news.ycombinator.com/item?id=775507

http://news.ycombinator.com/item?id=862458
> So the OS goes to all that trouble setting up a duplicate process only for all that hard work to be eliminated by running exec.

That's just it, creating a process that's an exact copy is the path of least resistance. Due to the way the VM system works in most modern hardware, it's much cheaper to create an exact copy of a virtual address space (you're just copying TLB entries) than it is to create a brand new one.
When listening to this talk I did have a moment of 'wtf' on the "Start a podcast" part. It's clearly a big part of Kevin's success - the whole rockstar celebrity diggnation thing.

But how good are podcasts now? Any startups finding them effective? Or am I just biased because I have no attention span to listen to them, so automatically discount them?

How about online video? Back when digg was young, podcasts were the thing; is video today's equivalent, or is it just 'being interesting on Twitter'?
I wish even agile had a different name, one that isn't so tempting for people to use incorrectly, with no clue that it means something other than "able to change direction quickly". I've heard (very non-technical) people cheerfully volunteer to clients and developers that the project they're involved with is "agile", but they just mean "we have no real plan, anything can change at any time" - they have no concept that there's an actual methodology being implied by what they're saying.

I think using a term like "fluid" would have similar results - "we're using a fluid methodology so our project will be able to flow around any obstacle/mould itself to any scenario".

On the other hand these ideas spread so well because it seems like they're easy to understand...the first thing you think of when you hear something like Rational Unified Process is men in white coats with pocket protectors.
Coders heaven?
How many of you (and I am talking to senior coders) would take this opportunity:

You

...are a senior coder that is working in a company setting right now but who has a good idea about a new product and is willing and able to develop it.

...would be free to develop any product you like - as long as it is related to your coding and will create first revenues in the first 18 months

... would be paid 80k for all your expenses. You could work from home or anywhere you like. But you will have to quit your current job. No safety net.

... would give up about 10-20% of your project/product to the investor.

... would be an active part of a community, being able to share and discuss your projects with other coders and with experts in marketing, product design etc.

I am evaluating this scenario for a VC. Some of the ideas sound similar to YC. But we are geographically independent and do not focus on the SF area at all.
Here's the problem. The author says:

"But unless someone actually forces Apple to play by the rules, why should they?"

What rules? It's their damn phone. They can do whatever they please with it... and it really is true, if you don't like it, you don't have to use it. When you're selling a product, you get to make the rules (to the extent that they aren't illegal or dangerous). What are these "rules" that he says Apple is not following? Whose rules are they? His?
I've been using Java for backend/net crawl tasks since about 2001. It definitely improved drastically with the addition of nio, and there were some irritating segfault issues a few years ago, but nothing a rollback to earlier JVM didn't fix (Until sun fixed it).

You can certainly run for months without issue (memory/crash/speed) as long as you don't have any leaks in your own code.

I'm pretty sure Java is still widely used at Google.

If I was writing the google crawler from scratch today, I'd certainly start with Java, then probably use perl/python for less critical scripting glue, and maybe rewrite any CPU intensive stuff in C/asm.
The thing with unit testing is, a lot of the time it's used to try and make a weakly-typed language with uncontrollable side-effects behave like a strongly typed language in which pure functions can be written.

A team lead who doesn't understand the above sentiment is at best only going through the motions with unit testing.
In New Orleans, Home Floats To Withstand Floods
This is the first time I've really thought that the form classes were a benefit in Django. Usually it's just annoying that Django doesn't have model validation working yet.

Really, I was surprised (and grateful) that the article went so far beyond the trivial surface issues that people usually bring up - like the automatic admin interface or Python vs. Ruby arguments. I was expecting a flame piece and got a well thought out piece exploring what is good about both frameworks. Well done!
Absolutely - I think the original article implicitly assumes that it's a successful product that is being acquired. After all, why would anyone buy a company with an unsuccessful product? (but then, there are a lot of good reasons to do so.)
RethinkDB (YC S09) looking for a technical cofounder
We're RethinkDB (YC S09). We're building a database optimized for solid-state drives and are looking for a technical cofounder to join our team.

What you get:

- A significant equity stake.
- Very interesting and challenging work on disruptive technology.
- The opportunity to define a product and lead a team of people to execute your
vision.
- Introductions to great people: a part of our job is getting advice from extremely
smart and successful entrepreneurs.
- Free housing and food in sunny California, with the possibility of moving to NYC.
- Some compensation (with room to grow).

What you have (you don't need to have all of these qualifications, but the more, the better):

- The determination to move heaven and earth to make things happen.
- You know C like the back of your hand.
- An understanding of the complexities of systems software, and what it takes to
make these systems very fast.
- Introduction to Algorithms by Cormen and Leiserson is your trusty friend.
- You have good mathematical intuition.
- You're not afraid of modifying Linux kernel source code.
- You're not afraid of modifying MySQL source code.
- You know a functional language (like Haskell or Lisp) and understand some purely
functional data structures.
- Implementing software transactional memory (STM) doesn't scare you.
- You have experience scaling a large website.
- You understand database internals (no SQL, we promise).
- For that matter, you think SQL is a terribly designed language.

Here is an example of the kind of work we do: http://www.rethinkdb.com/blog/2009/10/rethinking-b-tree-bloc....

This blog post has an open problem - given the numbers in the blog post, what is the optimal page size if we can cache 8GB of the B-tree in memory? Assume the cost of memory lookup is negligible, and the queries are uniformly distributed.

If you're interested, please send the solution, your resume, a list of impressive projects you've started (and completed), and a quick blurb about yourself to founders@rethinkdb.com.
On a related note, the Plan 9 system call rfork() gives a system call by which you can create new processes or lightweight processes(threads) with a single system call, deciding on what resources are to be shared between the new processes. There are no 2 discrete entities called processes and threads, just processes !

"In Plan 9, fork is not a system call, but a special version of the
true system call, rfork (resource fork) which has an argument
consisting of a bit vector that defines how the various resources
belonging to the parent will be transferred to the child. Rather
than having processes and threads as two distinct things in the
system, then, Plan 9 provides a general process-creation primitive
that permits the creation of processes of all weights." - Rob Pike.

You can read more about it here - http://groups.google.com/group/comp.os.research/browse_threa...