defunkt’s hub is a command line utility that adds GitHub knowledge to git. Sweet. It expands GitHub repository references so you can do stuff like: git clone defunkt/gist, git remote add bmizerany, etc.
I've released a tool for authoring UNIX manual pages using a markdown-ish source format:
Ron is a humane text format and toolchain for creating UNIX man pages, and things that appear as man pages from a distance. Use it to build and install standard UNIX roff man pages or to generate nicely formatted HTML manual pages for the web.
It still needs some work but can produce useful output for both roff and HTML. The sources are on GitHub.
Google’s shipping official beta builds of Chrome for Mac and Linux. I've been using Chromium for a few months now and it’s definitely become my favorite browser. It needs a flash blocking extension and an ad blocker. I'm using userscripts for both but they’re a little janky.
In comments related to the recent shutdown of Favrd:
I’ve spent the past year or so reading and writing and doing my level best to chip away at 40 years of belief in the logical fallacy that one’s identity meaning – self-worth, self-image, whatever you want to call it – can accurately be measured in the thoughts of others. Much as you and I may enjoy being encouraged through recognition and praise and dislike being saddened by rejection or indifference (god knows we’re taught to right from the outset by caregivers: good boy, pretty picture, heckuva job Brownie), deriving personal value from these transactions in the absence of a well-formed internal frame of reference through which you can decide on your own what does and doesn’t work, and subsequently accept the opinions of others as feedback, is just plain faulty thinking, of the sort that makes otherwise capable, centred people all loopy and weird.
Disco.
Tobi’s log tail and grep app is precisely what I've wanted on every single syslog machine I've ever had to deal with. And the code has some great examples of using EventMachine features to do real async HTTP stuff.
Murray Gell-Mann’s (quarks, Nobel prize winner, peer to Feynman at Caltech) TEDtalk from 2007 on the relationship between beauty (simplicity) and truth in science and mathematics:
What is especially striking is that in fundamental physics a beautiful or elegant theory is more likely to be right than a theory that is inelegant.
He goes on to give a bunch of anecdotes that show this playing out over and over during the development of particle physics.
Nobody ever believes me when I tell them the Beastie Boys toured with Madonna in 1984-85. Here’s a great set of super high-res press clippings to prove it:
Why isn’t everybody this cool?:
Bill Adler was the director of publicity for Def Jam in the 80s. He allowed me to photocopy his press file on the Beastie Boys from the time when they opened for Madonna.
This is presently the topic of great discussion in the GitHub campfire.
ry’s talk from JSConf.eu. The leading paragraph says it all:
Node.js might be the most exciting single piece of software in the current JavaScript universe. Ryan received standing ovations for his talk and he really deserved it!
Wow. JavaScript is pretty damn big universe right now.
Perfect name.
This email exchange is quite possibly the funniest thing I've ever read on the web. Here’s a tiny piece:
Actually, you were asking me to design a logotype which would have taken me a few hours and fifteen years experience. For free. With pie charts. Usually when people don’t ask me to design them a logo, pie charts or website, I, in return, do not ask them to paint my apartment, drive me to the airport, represent me in court or whatever it is they do for a living. Unfortunately though, as your business model consists entirely of “Facebook is cool, I am going to make a website just like that”, this non exchange of free services has no foundation as you offer nothing of which I wont ask for.
It’s just pages and pages of that.
Thank you @mojombo.
UPDATE: @SimonEdhouse responds
UPDATE: zing
I agree. I played with it for a couple days and now I can’t shut up about it. That’s basically all I talked about at RubyConf :)
Chromium runs GreaseMonkey user scripts, apparently. It also says here that “script edits are picked up [from the file system] automatically; just refresh the page to see the changes,”
which is something that annoyed me with Firefox’s GM Addon — the files were buried, crazily named, and you had to use that janky addon manager bullshit to make/reload changes. What is that? A directory full of user scripts (now ~/.js on my system) is a perfectly simple setup. Combine that with right-now reloading and I might actually be able to develop these things when I need them.
Anyway, this AdSweep thing is what led me to investigate; looks pretty reliable if you can get through the GM setup.
I've released a bertrpc library for node.js. If you haven’t play with node yet, set aside a night and dig in. Hacking async server-side stuff in JavaScript is every bit as awesome as I'd hoped: easy to install, good docs, fast VM, clean and simple event idioms. I'm impressed.
Tim Pease’s unit test runner and reporter is sexy and has some really interesting features I've never considered when running unit tests. Here’s a piece of the README:
To use the solo runner.
turn --solo -Ilib test/
This will run all tests in the test/
directory in a separate process.
Likewise for the cross runner.
turn --cross -Ilib test/
This will run every pairing of tests
in a separate process.
Now that’s interesting. I'd love to have something like GNU Make’s -j option when running unit tests.
Jacob Kaplan-Moss:
It’s really tempting to use an auto-documentation tool like Javadoc or RDoc for reference material.
Don’t.
Auto-generated documentation is almost worthless. At best it’s a slightly improved version of simply browsing through the source, but most of the time it’s easier just to read the source than to navigate the bullshit that these autodoc tools produce. About the only thing auto-generated documentation is good for is filling printed pages when contracts dictate delivery of a certain number of pages of documentation. I feel a particularly deep form of rage every time I click on a “documentation” link and see auto-generated documentation.
Hate that shit.
You know what I want? Man pages. For everything. Wouldn’t it be cool if you didn’t have to write roff?
I recently started a repository for my dotfiles, shell environment, vim config, and utility scripts. As of right now, I'm about 25% through all of the stuff in my $HOME — it should all fill in shortly.
From the apparently just published, Coders at Work (Apress, 2009), Brad Fitzpatrick Talks About Programming:
In practice, nothing works. There are all these beautiful abstractions that are backed by shit. The implementations of libraries that look like they could be beautiful are shit. And so if you’re the one responsible for the cost of buying servers, or reliability – if you’re on call for pages – it helps to actually know what’s going on under the covers and not trust everyone else’s library, and code, and interfaces. (…)
They should have titled the book, “In Practice, Nothing Works”. Anyway, you can grab the — ick — PDF ebook for $20 on Apress.
Really excited to see Chris release the shiny new Redis-based work queue that’s been running GitHub for the past couple of months:
It boils down to this: GitHub is a warzone. We are constantly overloaded and rely very, very heavily on our queue. If it’s backed up, we need to know why. We need to know if we can fix it. We need workers to not get stuck and we need to know when they are stuck. We need to see what the queue is doing. We need to see what jobs have failed. We need stats: how long are workers living, how many jobs are they processing, how many jobs have been processed total, how many errors have there been, are errors being repeated, did a deploy introduce a new one?
I'm still getting my feet wet with the jobs system but I can’t wait to get my hands dirty in the guts of this thing.
I've dumped MacPorts for pkgsrc. This quick tutorial helped me get going and this package browser is awesome.
Not sure how I never heard of this program before:
dtachis a tiny program that emulates the detach feature of screen, allowing you to run a program in an environment that is protected from the controlling terminal and attach to it later.dtachdoes not keep track of the contents of the screen, and thus works best with programs that know how to redraw themselves.dtachdoes not, however, have the other features of screen, such as its support of multiple terminals or its terminal emulation support. This makes dtach extremely tiny compared to screen, making it more easily audited for bugs and security holes, and also allows it to fit in environments where space is limited, such as on rescue disks.
GitHub has rake tasks that use dtach to manage redis and maybe some other things.
In honor of the greatest xkcd ever, this is Primer in its entirety. It really is that fucked up.
Need more rdebug?
I sometimes forget how useful a debugger is for coming up to speed on a new codebase. This bare-bones HOWTO on rdebug was everything I needed and nothing I didn’t.
Nice little self-contained perl script that shows a basic memcached top display for a list of servers.
$ curl http://memcache-top.googlecode.com/files/memcache-top-v0.6 >
~/bin/memcache-top
$ chmod +x ~/bin/memcache-top
$ memcache-top --sleep 1 --instances memcache1,memcache2,memcache3
That gives you this:

Nifty.
It’s definitely misconfigured in one way or the other as evidenced by the fact that it sucks and has sucked consistently for over a year.
Gemcutter will become rubygems.org and Rubyforge will eventually go away entirely:
So, what does this mean for RubyForge? The Ruby-specific functionality and data will be moved into RubyGems.org, and the parts that other hosting sites (GitHub, Google Code, SourceForge) can do better will be pruned away. Migration paths for those projects will be provided, we’re not throwing any switches without warning. RubyGems.org will not be gaining any “bloat” from rewritten RubyForge features.
Wow. Congrats to @qrush and the Rubyforge team for pulling this off so quickly. Also, it’s pretty cool to see Heroku hosting a major/official piece of Ruby community infrastructure.
This is pretty rad. You can do web searches and whatnot without leaving a command line style interface but you can also do stuff like read news feeds. Check it:

I'd love to settle into this kind of workflow but these shell interfaces always have one thing or another wrong with them. Maybe this is The One. We’ll see.
Good article. The comments are even better:
reading this article reminds me countless time I have looked at the clock and the second hand it not moving and then it starts, I am sure this takes longer than a second
That’s always freaked me out. I've mentioned it once or twice but people just think I'm crazy so I don’t bring it up anymore. This guy, Frank, explains the phenomenon:
In more ‘joe sixpack’-terms. After you move your eyes fast, they are unable to collect information for a fraction of a second. When the eyes comes back ‘online’ the brain collects motion-information for an equal fraction of a second, and extrapolates the information backwards to create what things should have looked like and fills this fabricated visual information into your memory. Since the needle (or digit) didn’t move while the brain was collecting info for the extrapolation, it won’t be able to predict that it moved in the past either.
Crazy. I knew something was going on.
Cloud computing at its best.
Turns out
tig, the ncurses front-end to git,
is all kinds of customizable. Quick tip: set the author-width
to 5 or less and author names are abbreviated to initials:
$ cat <<E > ~/.tigrc
set show-date = no
set author-width=3
E
$ tig
RT harmful specs - disable them
KN [defunkt/master] I shine the shoes around here
CW don't let daemon serving ruin the public / private flow
CW ensure the listeners are notified, just in case
CW add "open sourced" event
CW Turns out we're still stuck on 1.0
CW let's try this again
CW allow overriding of the queue during job creation
Boom.
Simon Willison on using Redis with the Python REPL to get complex shit done quick. Insightful piece, as always.
Redis’s SORT does a lot more than just sort stuff. Something clicked when I first saw this. I always wondered if/how more complex relational operations could be accomplished with key/value stores.
I usually don’t like these web based regular expression editors but this one’s just right. Best part is that you can create a permalink for regular expression + text combos.
It’s with great pleasure that I today announce:

I've taken a full-time engineering position with GitHub! It starts today.
Matt Taibbi in his latest Rolling Stone piece on the banking fiasco: “We’re in a place we haven’t been since the Depression: Our economy is so completely fucked, the rich are running out of things to steal.”
Maintenance release that fixes a bunch of issues under Ruby 1.9, some multipart form problems, and various other minor bugs.
“Frequently Questioned Answers,” that is. A big list of why C++ sucks, basically. Also, here’s some solid C++ bashing by notable programmers. All of this and I'm only half-way through Eli Bendersky’s recent essay on C++ hate.
Nick Quaranto shows why you need to start thinking about bundler.
Brand new PeepCode screencast on Sinatra by Dan Benjamin. The production on this thing is really exceptional and they get into some meaty topics. Highly recommended.
Jeremy Zawodny takes a look at the * is Unix thing and throws in some additional goodness: more on fork(2), the benefits of copy-on-write, and atomic file operations.
GitHub documents the how and why behind their Unicorn setup. Also, for the record, the fork(2) + shared accept socket technique described in my Unicorn is Unix piece was first explained to me by Chris and Tom.
The CodeRack Rack middleware competition has begun. All entries get a $30 credit from Heroku and the top three pieces of middleware get special prizes (to be announced). You should submit something. I want to see it :)
@paulsmith’s simple preforking echo server in C.
Aristotle Pagaltzis comes through with the simple preforking echo server in Perl.
Unix Network Programming, volumes 1 and 2, and Advanced Programming in the UNIX Environment. Yes.
Warning: PDF. This is probably the best high-level, everything about HTTP caching all in one place resource on the web at this point. Good stuff. I'm kicking myself for not being a part of his track at JAOO now.
Jacob Kaplan-Moss does the prefork echo server example from my Unicorn is Unix piece in Python. Awesome. Let’s see some more of these. Where you at, Perl?
Eric Wong’s mostly pure-Ruby HTTP backend, Unicorn, is an inspiration. I've studied this file for a couple of days now and it’s undoubtedly one of the best, most densely packed examples of Unix programming in Ruby I've come across.
Unicorn is basically Mongrel (including the fast Ragel/C HTTP parser), minus the threads, and with teh Unix turned up to 11. That means processes. And all the tricks and idioms required to use them reliably.
We’re going to get into how Unicorn uses the OS kernel to balance
connections between backend processes using a shared socket,
fork(2), and accept(2) — the basic Unix prefork model in
100% pure Ruby.
But first …
Chuck presents the results of a few ab runs against Thin and Unicorn. Surprising, even if the benchmarks lack rigor. I'd like to see good autobench runs for all of the backends on same hardware/network.