This post was written in 2008. It's preserved here for historical purposes — the technical details may no longer be accurate.
🔍
2026 retrospective
Lighthouse (the project tracker by ENTP) shut down in 2012, and its GitHub integration is long gone. If you’re looking for commit-to-issue linking, every modern platform (GitHub Issues, GitLab, Jira, Linear) does this natively.
If you use github-provided lighthouse integration, from the “Admin” pages of
your git repository, you may have stumbled upon a glitch: every changeset on
lighthouse appears as done by the lighthouse user that configured the
integration on github.
This happens because lighthouse uses the API token to link changeset authors to
LH users, and that’s not good when you’re not alone committing :-).
A simple solution is to use a post-commit hook, as described
here,
but that’s not satisfactory because it means that every time you issue git
commit on your console, the commit message will go public, and if you --amend
or reset --soft the index you’ll have to browse to lighthouse and delete the
changeset.
A much smarter solution is to push all changed revs when pushing them to
github: I modified the original post-commit
hook and installed it alongside the git
command in $(dirname which git)/git-lh.
This gives me a new git lh command that fetches the current HEAD revision
from github using refs/heads/master and POSTs every changeset between that
rev and the current tip in the working tree to lighthouse.
So, if you issue git lh before issuing git push, every change you’re
pushing to github will go to lighthouse, too.
UPDATE: A simple bash script like:
#!/bin/bash
git lh && git push
saved as git-lh-push saves you from typing two commands when you want to push
:).
When things in your life seem almost too much to handle, when 24 hours in a day
are not enough, remember the mayonnaise jar and the 2 glasses of wine.
A professor stood before his philosophy class and had some items in front of
him. When the class began, he wordlessly picked up a very large and empty
mayonnaise jar and proceeded to fill it with golf balls. He then asked the
students if the jar was full. They agreed that it was.
The professor then picked up a box of pebbles and poured them into the jar. He
shook the jar lightly. The pebbles rolled into the open areas between the golf
balls. He then asked the students again if the jar was full. They agreed it
was.
The professor next picked up a box of sand and poured it into the jar. Of
course, the sand filled up everything else. He asked once more if the jar was
full. The students responded with a unanimous “yes!”
The professor then produced two glasses of wine from under the table and poured
the entire contents into the jar effectively filling the empty space between
the sand. The students laughed.
“Now,” said the professor as the laughter subsided, “I want you to recognize
that this jar represents your life. The golf balls are the important things –
your family, your children, your health, your friends and your favorite
passions – and if everything else was lost and only they remained, your life
would still be full. The pebbles are the other things that matter like your
job, your house and your car.”
This post was written in 2008. It's preserved here for historical purposes — the technical details may no longer be accurate.
🔍
2026 retrospective
Eighteen years later, I wrote a retrospective on what we built, why we were too early, and who’s doing it today. The full technical deep-dive is in the 2010 series.
Today we released the output of 9 months of hard work: myousica.com, a social networking site for musicians. Have a look at the promo video and check out the site. Have fun! :)
UPDATE 2009/02/23: The site is now paused.
UPDATE 2010/10: The source code has been released on GitHub under the name Mewsic.
2026 retrospective
Context for younger readers: in the mid-2000s, “Chuck Norris facts” were an absurdly popular internet meme — an endless list of hyperbolic jokes about the actor’s supposed invincibility (“Chuck Norris can divide by zero”). Naturally, someone had to implement them in Ruby. intinig’s blog is gone, but the GitHub repo is still up — a ChuckNorris class that refuses to be instantiated (“No one initializes Chuck Norris”) or subclassed. The best part: if you try, it walks ObjectSpace and nils every instance of your class. Roundhouse kick to the entire Ruby runtime.
intinig ported
Chuck’s roundhouse kick
power to Ruby! Have a look…
2026 retrospective
The joke: Apple had just announced Snow Leopard (Mac OS X 10.6) at WWDC 2008, over a year before its actual release in August 2009. On a Mac, the “About This Mac” version string is stored in a plain text plist file (/System/Library/CoreServices/SystemVersion.plist). Edit it, reopen “About This Mac,” and congratulations — you’re running an OS that doesn’t exist yet. Apple has since made this file read-only on modern macOS via System Integrity Protection.
And this is the proof:
(Of course, if you know about SystemVersion.plist, skip this entry ;)
A friend of mine told me that on techie
blogs there is a new meme going on: show off the most used commands, starting
from shell history:
history|\
awk '{a[$2]++}END{for(i in a){print a[i] " " i}}'|\
sort -rn | head -15
I’ve got 20 times the default bash history size (10k lines), so it’ll yield
interesting results. I also use the history timestamp feature, so I’ve added a
little sed to the code in order to strip timestamps out.
Let’s see:
vjt@voyager:~/code*$*history| sed 's#^[ 0-9\[\/\:]*\]\([^ ]*\).*#\1#'| awk '{a[$1]++}END{for(i in a){print a[i] " " i}}'| sort -rn | head -15
928 l
577 ssh
389 ping
381cd300 dig
259 telnet
153 sudo
126 ifconfig
125 whois
113 ps
96 svn
91 cat
73fg68 vi
61 ..
Yeah, I do a LOT of ls, l is actually ls -alFGs (I’m on Darwin). This list
exposes my recent habits, because I’m coding less and managing more (no gcc, no
irb, lots of dig & whois). svn is still there, of course ;). ssh means that
these results should be aggregated with other histories coming from the other
boxes I log on to.. but that’s a topic for another post ;).
This post was written in 2008. It's preserved here for historical purposes — the technical details may no longer be accurate.
🔍
2026 retrospective
LightWindow is long dead – it was a Prototype.js-era modal library that vanished around 2010. If you need modals today, the <dialog> HTML element does the job natively.
Well, this is the result of 2 days of head-banging with lightwindow:
Index: public/javascripts/lightwindow.js, line 444
_removeLink:function(removed){// remove it from the links array
//
this.links=this.links.reject(function(link){if(link==removed.href)returntrue;});// remove it from the gallery links array
//
if(gallery=this._getGalleryInfo(removed.rel)){klass=gallery[0];name=gallery[1];if(this.galleries[klass]&&this.galleries[klass][name]){this.galleries[klass][name]=this.galleries[klass][name].reject(function(link){if(link==removed.href)returntrue;});}}},
Call this function from your .rjs template, something like this:
Well, it seems that I’ve got no reason to be paranoid about my age: I still can
do inline like I did (everyday) when I was a bit younger :).
On international workers day, 1st of May, Sam literally carried me out from
home, far from the computer, and we went skating. It’s been an awesome day,
we skated a lot, and shot some nice photos.
But the real good ones have been shot when ndstr caught
us. He is by far the best photographer you could meet, and of course my
favorite one (take a look at his site!).
He’s been also a skater, so he knows very very well how and when to shoot in
order to take out the most from your tricks :). Here are two of them,
portraying me and Sam while doing our best!
It was fun. Really fun. Thank you Sam for taking me out of home :D.