Building notes, projects, and ocasional rants


last update:

In my workspace I use two laptops to increase the number of screens available (low quality picture of the setup I use). I have everything the way I want it right now: the mouse, keyboard and clipboard are in sync using Synergy, and all my backup apps are installed on the Tibook (SuperDuper! and Retrospect, the best backup application for your small network), including the big external disks. They are connected with Gigabit ethernet so transferring files is a breeze, even gigabyte sized files.

The problem with threads

A couple of years ago I came across an article on Dr Dobbs Journal about the future of programming in a world of multi-core machines. It was a refreshing read, that took me back the early 90's at college and to some of the distributed operating system classes I took there. Back then we had a 80 CPU box to play around, the size of a 4U rack more or less (compare to this for fun), so conventional threaded programming was already looked at as "odd".

Installing Ruby XMPP Simple

I'm no Ruby expert but a friend of mine was asking me how to write a simple XMPP bot using Ruby, and I had seen a couple of recent posts announcing a simple ruby library. So after installing RubyGems (I had a total virgin Mac OS X stock install of Ruby), I did the usual: sudo gem install xmpp4r-simple That did not work well. One of the dependencies, rcov, does not install in my system.

SAPO Messenger for Mac

One of my favorite projects in the last years is finally public. The first public version of SAPO Messenger for Mac, a Jabber client tied to the SAPO Messenger community. The client has both English and Portuguese and given that most Portuguese Mac users have English as their default language, we choose to ignore the settings of the International preferences pane for now and force the Portuguese locale. To switch back to English, do this:


It can't be that easy... I have to try this later in my wife laptoy.


Hey, kudos to pfig for getting his photo published. I like his Tube set. He can fall a sleep before sex like no other, but he takes good pics.

Module of the day: encoding::warnings

Today I was tracing a double-encoding error in a web app. The Fun never ends! Anyway, with encoding::warnings the problem was easily spotted. So, if you are getting "garbage" output on some of your Perl scripts. do yourself a favor and try it. A good tip from an excellent write up about UTF8 and Perl. And remember, boys, girls, and mix-ins, $1 after m/(.)/ is a character, no matter how fat he is.

Pixels! Pixels! Pixels!

For me, the thing that most improves my productivity is pixels available for work. I would love to be able to connect a second external monitor to my Macbook Pro. For now, I've settled on using my old TiBook with a external monitor, and synergy, to expand my workspace to 4 screens. I already searched for DVI or VGA ExpressCards, but so far found none. It's a recurring query I have on Google Alerts.


I like the concept of OpenID. I remember when Brad announced it, when it was still called Yadis. I remember because at the time I was cleaning up the code that Clix used for global authentication across all their properties, and that one shares a lot of ideas with Yadis/OpenID. In recent weeks we've seen AOL, Microsoft (63 Million OpenID potential users just there, plus all the Yahoo! logins), Verisign, BitFrost (of the OLPC project), any XMPP account, and even Mozzila Foundation is thinking about OpenID inside Firefox3, and this makes me believe that OpenID is now in his teen years.

Lighttpd, file uploads and Safari

On one of the web applications I have, the setup is more or less like this: a lighttpd 1.4.x front-end to serve static files, both public and protected (using mod_secdownload);a fat Apache2 with mod_perl2 running a Catalyst application.In this case, lighttpd is used as a reverse HTTP proxy to Apache, using mod_proxy. I was trying to get file uploads to work on this setup. Uploading directly to Apache works flawlessly, but via mod_proxy, Safari would hang at the end, never terminating the request.