Building notes, projects, and occasional rants


last update:

Where to put you validation

Yesterday I saw a question by fREW Schmidt regarding where to place the validation code in your apps. I made a mental note to answer it, but as most of my mental notes, it was quickly forgotten. Today, a new article describes the answer he got. In the end he decided to put the validation inside the model. I can only say: good for you. But one of the reasons against the validation-inside-the-model that he received baffled me: Models don’t know about the current user (or other higher level information).

Hardware relax

I like to tinker with hardware, specially old servers. I spent an hour upgrading our office server this morning. In a world of Ghz speeds, be prepared to slow down a little. The server was a dual-pIII (yes, Pentium III, Katmai generation) at 450Mhz (yes, mega) with 512Mb RAM (at 100Mhz, in 4 DIMMs). The upgrade replaced the CPUs with a pair of pIII 500Mhz (a 11% increase, not bad), and the memory to 1Gb at 100Mhz.


Another puzzle by the Bram Cohen (the same who created BitTorrent) and Oskar van Deventer: the Geary cube. Some of their previous puzzles are very interesting like the JumblePrism or my two favorites, the RotaCubes and the Bramboules. Oscar van Deventer creates stranger things: the WimTvane or the Topsy Turvy are just two examples He also has a beautiful adding machine for kids. I like puzzles. Puzzles good.

PGP WDE update

I mentioned last week that I had started using PGP Whole Disk Encryption on my laptop (a first generation MacBook Pro 17" btw, it has a 32bit 2.16Ghz Core Duo with 2Gb RAM). I encrypted the external FW800 500Gb hard disk that I use exclusively for Time Machine last night. It took about 8 hours. So far so good. When I connect it to my mac, a PGP WDE dialog pop-up shows up, asking me for the correct pass-phrase.

XMPP Waves

Google kettle let go a cloud of vapor and named it Wave. Of course we cannot know how it works and how similar it is to Until we do know more about it, we can look through the Wave protocol draft spec, and notice that its built on top of XMPP. At the same event, the new XMPP-powered mini applications where also announced. Each one is a XML file with all the HTML, CSS, and JS files packed together.

The Github gang developed a Mercurial plugin, hg-git, that allows Mercurial users to push/pull from Git servers. It seems very good (I'm not a Hg user, so I don't really know). Lossless bi-directional synchronization. Nice.


An article about immutable data structures (which is an excellent read in itself) has two interesting paragraphs about Git: Casual observers initially criticised git for having a model so simple it was actually naive. It turns out they were confusing the model with its on disk representation. Git makes this distinction very well, and the result is that it implements powerful features (for instance idempotent patch application) which are apparently too complicated in other systems.

Psi with voice calls

The first release candidate of the 0.13 version of Psi was released just now, and it includes voice calls using Jingle RTP. I'll keep it running in case you need a guinea pig for tests. Very good news.

Pig farming is... strange

I love TED presentations, and I was curious about one of the latest ones: 10 things you didn't know about orgasm by Mary Roach. The presentation is very good, but starting around 10m25s there is a sequence about pig farming in the Netherlands that make me laugh out loud. Weird stuff. Update: well, chickens are even worse (PDF)...

local::lib bootstrap

The local::lib module is an essential piece of my workflow nowadays. It allows me to easily keep each project Perl modules separate, and therefore minimize breakage. Bootstrapping local::lib was reasonably simple but it got a lot simpler with the latest 1.004001 version. Basically you can just pipe the output of a URL into perl to bootstrap it. The URL is some long beast in the site, impossible for me to memorize, so I created a shorter version, http:://bit.