Building simplicidade.org: notes, projects, and ocasional rants

Notes

last update:

38

One down, a lot more to go. Or so I hope...

Offline

For the past week or so, I've kept myself without network access for the larger part of each day. I check my email and RSS feeds early in the morning and late at night, just before bed, and keep my IM and IRC clients closed. I needed to take a break, really. I found myself in the worst productivity slump ever, and something had to change. I have lot of work piled up that I really want to get done:

Security

One recurrent worry that I had was about my laptop security. At least once a week I get an email from a local portuguese Mac-zine about stolen Macbooks. When I got them, my first thought was always: if that happened to me, my $bussiness is screwed... So a couple months ago I started looking around for options to secure my two macs (desktop and laptop) and their Time Machine backup drives against physical theft.

OpenID

I've switched providers of OpenID. I was using ClaimID, but now I'm using MyOpenID. The anti-pishing features are great, specially the personal icon feature. It basically sets a cookie on your browser, with a picture URL, and shows you that picture on the login page. If you don't see the picture, then the site didn't get the cookie, and the URL is probably fake. Simple and effective. I've also gained OpenID 2.

Last year, I was amazed with the power of Cappuccino when they showed off a Keynote.app clone written entirely with JavaScript. The 280 North gang released version 0.7 this week, and inside there is a new tool that made my jaw drop. The nib2cib tool allows you to design your application with the gorgeous Apple Interface Builder, and then translate the resulting nib/xib into a cib that your JavaScript app can use directly.

Marcus started it, Tim teased me. I was bitten so many times by this that I had to take a stab at it. Following Tim's leads, I checked that the pod2man was producing proper nroff, with a \- for each -. It was. I tried to understand the groff tmac files, but I think we have here the first real proof that there are aliens out there, and they speak wonderful languages.

Love/Hate and package managers

I have a long standing love/hate relationship with package managers. On one side, you have access to most of the software out there already compiled (presumably by someone who knows and uses the software and therefore is able to choose the proper, most useful, configuration options) and with all the administrative bits (startup scripts, example configuration files) in the "right" place (usually dictated by some standard like the LSB). On the other all the package managers that I know of (and this is really a cry for help, please tell me of exceptions to this rule) have a Highlander-fetish with regards with package versions: there can be only one.

Fast DNS queries with Perl

For some jobs, you need to quickly resolve large amounts of DNS queries. The AnyEvent::DNS module allows you to resolve DNS queries fast and in parallel. To test this, I wrote a simple command line tool to check XMPP SRV records of a list of domains. Both server-to-server and client-to-server records will be checked and results printed out. All queries will be made in parallel. The code is at my Ironman repository.

Third time is the charm

I stop following a bunch of people on Twitter, and I've stopped using any kind of real-time Twitter client. Its an amazing waste of time. My new relation with Twitter can be summed up like this: I'll post links that I find interesting;I've subscribed the feed of mentions of @pedromelo: this allows me to read responses or comments about such links in my RSS reader, when I feel like it;I've created a feed with all the twits from my friends that contain a link: allows me to catch any links they find relevant.

My usual projects involve event-driven asynchronous servers, and as a general guideline I try to make them as a set of loosely coupled components, running on the same process space. To tie them together, I create a set of extension hooks on each component. Those hooks can be used for notification, or for delegation of responsibilities. For example, in a XMPP component, the Roster controller usually has two hooks, new_buddy, and accept_as_budy.