Main | June 2004 »

May 26, 2004

My CTRL is stuck

I use a Logitech wireless desktop everywhere. I like the keyboard feel very much. It's not as good as the old PS2 IBM keyboard (BTW, if you have one of those for sale, let me know :) ), but it's better than most.

I use it with my Powerbook for two years now, and I always had this glitch with the CTRL key and a specific key combination. I use the portuguese layout, by the way.

Try this: in a Terminal.app window, type AltGr+2 (should print @) and AltGr+_ (in my case, it erases the @). The kick is that from then on, your CTRL is stuck. Type 'd' to do a CTRL-d and leave the shell :).

It's the combination AltGr+(@ then _) that triggers this. You need to plug out/in the USB keyboard connector to reset this.

The most infuriating part: I type that sequence *very* frequently. @_ is the default array in perl....

Does anybody has this problem? Or is it just me?

Pod::Webserver

The python folks had for sometime this tool that would convert the locally installed documentation into HTML and give you a small HTTP server to publish it. Can't remember the name, though.

Perl folks didn't. Until today. TorgoX has been working on that, and today he upload Pod::Webserver to CPAN. You need a very recent version of Pod::Simple (I had to force an update on my local CPAN mirror), but apart from that, works great!

Recommended.

New ecto release

Nuno had a problem with ecto because he was using a older version of MovableType.

The latest release, 1.1.6, fixes that, so all of you using Macs out there, and need/want a blogging tool, my recommendation is ecto. Works great.

May 25, 2004

So moblogging, yes?

Some people are never happy... Lets see what we can about this.

First, arch repositories will be online tomorrow for Kiwi (very alpha stuff), and others (SAF and Apache::WAF).

Second, moblogging seems nice, but does anybody knows what a moblogging app should do? What kind of protections you expect it to have?

If someone cares to write a spec of the ultimate moblogging app, send me a trackback to this entry, please. I would like to know what people want, so that Kiwi will at least make it easier to support.

May 21, 2004

IE 6 SSL Post bug

This IE6 bug is very bad. Very very bad. We do some SSL stuff at work, so it's time to update the Apache configuration.

Got to love Microsoft.

Thanks, grantm.

Favorite bash aliases

alias bi=vim
alias bim=vim

cfengine articles

cfengine is a great tool to manage servers. I'm starting to use it with my personal servers and at work.

O'Reilly ONLamp.com site has two articles on it. The last one shows a very nice setup for starting your own config:

Distributed Cfengine by Luke A. Kanies -- Automation is the most important skill an administrator can develop. Cfengine is great at automation and even supports distributed automation. Luke A. Kanies demonstrates how to distribute Cfengine rules to multiple machines.

It has a couple of errors though. The files update.conf (take 2) and cfagent.conf shown don't work for me. They assume a class cfengine_server, but that class is not defined anywhere. You see it defined in the cfservd.conf file, but that file is not relevant.

So to make the examples work, add the following lines to the top (before the control section) of both files. You need it in both files because cfengine discards classes defined in update.conf before starting the cfagent.conf.

groups:
  cfengine_server = ( my_cfengine_server_here )

I'll post more cfengine tips as I get to know it. So far, I'm sold.

Kiwi and Trac

From the Trac homepage:

Trac is a minimalistic web-based software project management and bug/issue tracking system. It provides an interface to revision control systems (Subversion), an integrated Wiki and convenient report facilities.

It has some great features, and although I don't use yet, I'm thinking on trying it out. The biggest problem is it's Subversion dependence. I'll have to see if I can make it use arch instead.

The idea is to get to know trac, so that I can make sure Kiwi will be able to be extended to support it or a variation of it.

May 20, 2004

It's a perfect day

8:30
wake up, feed António for the third time since midnight
9:15
take Ginger into the garden, throw the ball a couple of times
9:30
leave for the office, make small detour to coffee shop for breakfast
9:45
work: mostly cfengine stuff, trial and error
13:30
home for lunch. Play a bit more with Ginger to calm her down
14:30
back at the office again, cfengine getting much better and saves a lot of time
19:30
home. Play with Ginger, she's never tired
20:00
arrive at the beach, with António and my wife, for a walk
20:45
home, António needs a bath
21:10
Milk, milk, and more milk
22:00
dinner
22:20
play with António until he falls a sleep
now
see today's pictures and rest a bit. It's hot, 28º outside

Today I got 10 out of 12. Tomorrow I'm hoping for more.

Garfield: the new designer drug

António is going to be three months old next week. Sometimes he is pissed about something and starts yelling at the make-father-go-beserk-pitch.

But, my wife found the perfect drug to keep him quiet: Garfield! Yes, Garfield is the new designer drug to make kids (well, at least our kid) quiet. You wouldn't believe it. It's magic. Show him a nice print out of a Garfield poster and he stops yelling almost immediately.

So my wife spent the entire day printing Garfield posters. It's going to be a good night.

%&#$%#$% typekey docs

Ok, maybe I'm not the smartest person in the World, but, when I read in the Account Preferences page of Typekey that to use it you must Enter the weblog addresses (URLs) into the fields to the left of this text, of course I put http://www.simplicidade.org/notes/....

Well, you are having the same problem as I am, please use the URL of your Movable Type installation, the URL where mt.cgi is located.

Tannenbaum comments about Linus and Linux

Tanenbaum comments about the idiotic Alexis de Tocqueville Institution report is an excellent read, and includes some precious comments worth quoting:

Thus, of course, Linus didn't sit down in a vacuum and suddenly type in the Linux source code. He had my book, was running MINIX, and undoubtedly knew the history (since it is in my book). But the code was his. The proof of this is that he messed the design up. MINIX is a nice, modular microkernel system, with the memory manager and file system running as user-space processes. This makes the system cleaner and more reliable than a big monolithic kernel and easier to debug and maintain, at a small price in performance, although even on a 4.77 MHz 8088 it booted in maybe 5 seconds (vs. a minute for Windows on hardware 500 times faster). Instead of writing a new file system and a new memory manager, which would have been easy, he rewrote the whole thing as a big monolithic kernel, complete with inline assembly code :-( . The first version of Linux was like a time machine. It went back to a system worse than what he already had on his desk. Of course, he was just a kid and didn't know better (although if he had paid better attention in class he should have), but producing a system that was fundamentally different from the base he started with seems pretty good proof that it was a redesign. I don't think he could have copied UNIX because he didn't have access to the UNIX source code, except maybe John Lions' book, which is about an earlier version of UNIX that does not resemble Linux so much.

The Linus was just a kid part is truly excellent.

Update: there is an followup to the original story.

Content removed

I removed this content because it talked about software that is still in beta.

I was not aware of any confidentiality clauses associated with the beta testing. If I where I would not post information regarding it.

I like the software this developer is doing, I'm a paying customer, and I intend to keep paying him for future versions. My intent was only to give some personal opinions about the software.

Safari Bookshelf

I signed up the Safari Bookshelf 14 days free promotion.

I wanted to signup for a long time now, but never did it, for some reason or another. Anyway, I saw some reference today to the bookshelf somewhere (I think it was a use.perl journal), and just did it.

I mean, talk about impulse buying rss-triggered... I must cut back on (sp|f)eeds...

My moment of zen of today

Calling this work-safe depends a lot on where you work :)...

Who said perl can't be fun?

Thank you gav.

Longs periods of silence

I really hate CD tracks that have long periods of silence.

Case in point: "Beyond The Sea" from the Swing When You're Winning by Robbie Williams. The music lasts for 4:30 minutes, and then you have this loooooong void, until 25:23 where we have small sound clips of the backstage.

Every time this song comes up in iTunes, I thing that it stopped playing and press the play button again, only is the pause button now... Arrggghh...

Hey, it's probably art, right?

May 17, 2004

Content removed

I removed this content because it talked about software that is still in beta.

I was not aware of any confidentiality clauses associated with the beta testing. If I where I would not post information regarding it.

I like the software this developer is doing, I'm a paying customer, and I intend to keep paying him for future versions. My intent was only to give some personal opinions about the software.

Kiwi

I really don't know what Kiwi is. Well, I know it's a project I've been working on and off for quite sometime now.

But if you ask me what it is, well, it's difficult to say.


Kiwi is a Wiki-style system with rich meta-data, with a object-oriented full-text search back-end. It also has some blog-like features. And you can also syndicate it's changes.

You would write nodes or pages with a language wiki-style (actually the parser is pretty extendable, so the actual format could be changed easily). You can include in each node live queries to the back-end. Those queries can target the meta-data or the full-text of the nodes. New markup can be genrerated from the results.

You can also put objects inside each node. You could put your DVD collection inside Kiwi, a node for each DVD, with special fields for Title, Rating, Actors, Director, etc. And then reference those objects from anywhere in other Kiwi nodes. You could also query the back-end for DVD object matching specific criteria.

Right now, I'm working on the parser. I'm trying to make not a parser for Kiwi, but a generic extendable parser. There are no core elements in the Kiwi language. Everything is a plugin. The parser only job is to select a set of plugins that, based on the context, are asked to match the current line. The chosen one gets to influence the context for the next round.

I made some progress last week, but this week I hadn't had the time to work on it. I'm expecting to get back to this next weekend and finish the parser.

After that, it should be able to transform Kiwi nodes in HTML, with full meta-data collection and storage.

I expect that someday Kiwi will replace MT as my blog platform.

SAF

SAF is a temporary name for one of my projects.

I'm a big fan of event-driven programming, usually found in GUI programming. I always wanted to use it in systems or application programming.

The idea behind SAF is this: you take a system or application and split into several modules. Each module exports a specific API. The API is then implemented by each module as a event thats sent to a channel. All the modules hook up into that module, and can get involved in the processing of the event.

Let's see a simple example: imagine a user registration module and a comment system module.

Each user has a username, password and karma level. Karma starts at 0. It increases with good comments, and decreases with bad ones. The karma level of each comment is taken from a average of ratings done by other users of the comments.

You've seen this in a lot of places, slashdot probably being the most famous one.

To implement this with SAF, we would build a user registration module, with common methods like create user, login and change password. This module would also listen to "karma changed" events.

The comment module, would accept new comments, either fresh ones, or replies to other comments. It's only logical that it would generate events for each of those operations. It would also allow one to rate other peoples comments. That API, rate_comment, would send a event "karma changed" whenever a rate_comment event is completed successfully. The event would include previous and the new karma levels, the author of the comment, and the user that did the rating.

The system would work very well. One important aspect of this is the possibility of evolution without the need of complex changes everywhere. If we decide to give a karma reward for people who rate a lot, we don't need to change the comment module, only the user module.

Also, if you decide to allow the possibility to request that reply's to my comments are sent to me via email, or a notification of that reply is sent to me via Jabber, the only thing I really need is to add a new module, comment notification, with an API "request notification". This module would listen to events, and trigger the appropriate notifications whenever a proper reply is seen to a post from a user who requested notification.

This is possible because the modules are not tightly integrated with each other. The SAF architecture can grow as we evolve our system. Sometimes we need to go back to a previous module and add another event generated under certain conditions, but those changes are typically very simple, and unlikely to introduce many bugs.

The system "forces" you to split your problem in manageable pieces, and to take a systematic approach to the API each one will provide.

I already used this system in some applications. It works pretty well. I'm now cleaning the code, adding some documentation, and uploading to CPAN. I expect this to happen in the next few days. Expect a 0.1 release sometime this week. The full version 1.0 will follow in June probably, with full documentation and tests.

Right now, I don't have any plans post-1.0.

A arch archive will be available sometime tomorrow. I'll post details then.

Modified MT 3.0 templates

The default templates that come with MT 3.0 are almost OK.

I have two pet peeves: first, there is no full posts rss feed; and second, the individual archive template lacks the right navigation bar of the main index template.

I want the first one because it's my preferred feed type. Almost all my feeds that I subscribe in NetNewsWire are full posts.

To solve that, I added a new index template, named rss-full.xml, and changed the default rss 2.0 template to output full posts. The result of my work can be found in the full posts rss template.

The second one is easy to understand: all the RSS/Atom feeds point to the individual archive page, so it makes sense to have the navigation there too.

Frankly, I expect most of my traffic from the archive pages, and not the home-page.

The edited individual archive template for your download pleasure.

May 15, 2004

Welcome

Well, I finally decided to put up a website. And to make matters worst, I'm also starting to take some notes about the process of building my site, the projects I want to publish here, and some occasional rants.

The main purpose of this site will be to host all the projects I want to do, or that I'm currently doing.

Those projects are not related to my current employer, they are my own. There are a couple of exceptions, but those will be clearly marked as such.

There are 4 main projects right now: Kiwi, SAF, Apache::WAF and Test::Exception.

The first one is the largest one, and it will eventually take over the stuff I'm using MT for.

I really don't know if this is going to work, specially the blog part. Let try it and see.