« February 2008 | Main | April 2008 »

March 29, 2008

In case you are wondering...

... why BitTorrent is so popular:


Starting Transmission now, should be here in 15 minutes, I guess.

March 26, 2008

MySQL errno 150 - ERROR 1025

I get the 150 errno a lot when upgrading schemas. Usually this is a indication that the action I was trying to perform is not possible given the current foreign key constraints in place.

Last night I got a variation on the theme:

ERROR 1025 (HY000): Error on rename of './e3/#sql-17f3_f894' to './e3/cls_ev_items' (errno: 150)

The table was this:

CREATE TABLE `cls_ev_items` (
  `id` int(11) NOT NULL auto_increment,
  `evaluation_id` int(11) NOT NULL,
  `criteria_id` int(11) NOT NULL,
  `value` varchar(50) default NULL,
  `modified_at` datetime NOT NULL,
  `rank` int(11) NOT NULL default '0',

  PRIMARY KEY  (`id`),
  UNIQUE KEY `report` (`evaluation_id`,`criteria_id`),
  KEY `criteria_id` (`criteria_id`),
  CONSTRAINT `cls_ev_items_fk_evaluation_id` FOREIGN KEY (`evaluation_id`)
  CONSTRAINT `cls_ev_items_fk_criteria_id` FOREIGN KEY (`criteria_id`)

I was trying to drop the report index to replace it with a new one.

ALTER TABLE cls_ev_items DROP INDEX `report`

The error message is not clear enough, but in this case, the problem is that each CONSTRAINT requires an index on the foreign key field. If MySQL allowed the removal of the report index, he had no way to efficiently check the cls_ev_items_fk_evaluation_id constraint.

The best solution I could come up with is a temporary index on evaluation_id. You are then free to mess with the report index.

After you finish, if the new report index begins with the evaluation_id field, you can drop the temporary index. And everything is back to normal.

It clear the MySQL checks this chaining of indexes and constraints, so I hope to see better error messages in the future.

Update: the error log gives a bit more info, btw:

080326 10:51:32  InnoDB: Error: in ALTER TABLE `e3/cls_ev_items`
InnoDB: has or is referenced in foreign key constraints
InnoDB: which are not compatible with the new table definition.

So in case of a 150 error, check the error log for better pointers.

Update 2: as pointed out by NiN in the comments, run SHOW INNODB STATUS\G (the \G will make the report easier to read) and look for a section labeled LATEST FOREIGN KEY ERROR. The message is pretty good there.

March 24, 2008

Too busy, except for presents

Just a quick note to say that my fathers day present arrived today, a Booq Python XL.

Its a wonderful backpack, and my 17" is floating inside a bit.

Love it.

March 20, 2008

$%&#$% Music labels

So, a couple of days ago Alicia Keys did a concert in Portugal, and Radio Comercial is always playing what I assume to be her major hit, No one. I got curious about the rest of her music so I decided to buy one album to see if I like it.

So I clicky-click to the iTunes store only to be greeted by this:


Now, this is not some obscure artist. Radios are playing her songs constantly around here, and she just gave a big concert, and the music is not available for purchase? WTF?

So choices:

  • drag my ass to some music store and buy the CD and contribute to the growing pile of carbon-based things I have no use for after I rip the CD into iTunes;
  • download a eco-friendly MP3 from some site online.

The problem is that I won't to the first because I don't want a dead-weight CD, and I really don't like the second choice.

Stupid labels who still haven't a freacking clue about how to operate in a global economy. Just lost a good sale today.

Dear lazyweb: CSS question

This is something that I want to do for quite some time, but I haven't figure it out how.

If I have a HTML table styled with width: 80% but the total size of the content on each <td> is smaller than the 80% size, then the browser will try to make all the columns the same width, and add extra spaces at the right side of the cell.

What I wanted is to specify that some columns should shrink to the smallest possible size without causing line breaks in the content.

For example in an invoice with 4 fields, item description, quantity, value and sub-total, the default layout would be something like this:

| item        |         10 |         100 |        1000 |

and I wanted this:

| item                               | 10 | 100 | 1000 |

I wonder if there is some CSS combination that does this, that I can apply to a <colgroup> to say "give me the minimal possible width for these columns.

Any tips?

March 19, 2008

Happy fathers day

To all fellow fathers out there, happy fathers day!

I'm going to give myself a present today, I'll post pictures when I get it, but in the meantime, damn you Carlos!

On a parting note, have you called your father already? Don't do it like me who always leaves this for last and then forgets about it.

Elections 2008

I've been following the Democrat primaries with a particular interest. The weight of super-delegates and the delegate count, and how low can the democratic party can go if their candidate in the end is the one with less delegates.

I'm not pro-Obama, nor pro-Clinton. My opinion doesn't count either.

But if it did, I think that the latest Obama speech in Pennsylvania would force me to choose. I haven't seen such a good speed in a long time (and I'm the strange kind of person that actually likes to listen to speeches, when properly delivered).

So, after listening to the 40 minute speech, here's me hoping to see a Obama Democratic candidate to the White House.

Israel response to the US

Great response of Israel to US about copyright laws. Choice quote:

Israel objects that it is under no obligation to implement such a system, and notes that it chose the current arrangement for a reason. "A 'takedown' system which operates on the basis of a mere allegation of infringement would be an invitation to censorship and abuse of process," it says in the filing. "It is not the role of the ISP or Host to become a policeman of content. Requiring such would effectively bring the Internet to a halt."

March 14, 2008

IETF Wayback machine

So the IETF has a solution for all our bandwidth problems, taking us back to 2000 levels.

No, its not a super-chip design for a mega-hiper-refixe-router, its something that you can find installed on most PCs and Macs.

But fear not, as you can read at the bottom of the article, the porn industry is well aware of the technology and they will take care of bringing us back to the future in no time.

IETF Wayback machine

So the IETF has a solution for all our bandwidth problems, taking us back to 2000 levels.

No, its not a super-chip design for a mega-hiper-refixe-router, its something that you can find installed on most PCs and Macs.

But fear not, as you can read at the bottom of the article, the porn industry is well aware of the technology and they will take care of bringing us back to the future in no time.

March 13, 2008

Link files in Catalyst error messages to Textmate

When you develop with Catalyst, if you have an error condition, you get a pretty interface with access to all the major objects in the request.

At the top, Catalyst will place the classical perl error message like "Caught exception in MODULE, at FILE line LINE."

This hack takes that classical format and links the "FILE line LINE" with a txmt: link. If clicked, it will open directly into your project in TextMate.

The code is simple. Stick this into your main application class:

sub finalize_error {
  my $c = shift;

  return unless $c->debug;

  my $error_msg = $c->response->output;
  return unless $error_msg;

  $error_msg =~ s{(\s+at\s+)([\/]\S+)\s+line\s+(\d+)}
                 {"$1<a href='"._mk_textmate_link($2, $3)."'>$2 line $3</a>"}ge;

use Cwd qw( abs_path );
sub _mk_textmate_link {
  my ($file, $line) = @_;

  my $abs_file = abs_path($file);
  return "txmt://open/?url=file://$abs_file&line=$line";

It works for me so far. If this breaks anything for you, you get to keep both parts.

Here is a sample of the output with this hack applied (click for bigger version):


Update: a new version. The big change is the use of the abs_path method to make sure you get the absolute path. This solves problems that I was having with symbolic links. TextMate was opening a new window, because the project and the file path in the error message had different prefixes.

March 12, 2008

Bye, Bye, MSN

When I worked at SAPO, I started using a MSN account to keep an eye on the pyMSNt transport that we have there. Eating your own dog food and all that.

So now is the time to stop using it. I'll unsubscribe the MSN account from the Gateway, and I'll no longer be available on the MSN network. You can add my XMPP address as a buddy: melo@simplicidade.org.

Right now, you have a lot of open and decent XMPP servers out there: SAPO Messenger, Google Talk, Jabber.org and a lot of others. So there's really no excuse not to have an account on one of them.

So hop on to the clients list and join the fun side.

March 11, 2008

Alter Ego, your friendly agent

If you want to try some agent-love, then let me introduce you to Alter Ego, your friendly pluggable agent.

Alter Ego is a XMPP agent, where everything is a plugin. You can clone the current version with git (recommended, easy to keep track of new features and fixes) or use the tarballs.

Right now, you can find it running under my own JID, so yes, I trust it enough to run it on my main account.

The only plugin I wrote is a User Location (XEP-0080) updater. With all the cool geo toys (like Fire Eagle) around, I wanted to play a bit with location-aware services. So the current UserLocation plugin does a very simple thing:

  • discovers the mac address of your default gateway;
  • searches the mac address in a local database;
  • if found, he publish the information to your User Location PEP node.

So you do need a PEP-enabled server like ejabberd 2.0 or OpenFire.

Also, nothing prevents you from using other sources of location like a GPS. For example, I'll probably include something like this perl-GPS simple example in a future version of the plugin.

You can look at the roadmap to see what I'll be working on, or you can subscribe any of the zillions of feeds that github provides. I usually keep all the development of each plugin in a separate topic branch, so you can track a specific development easily.

If you want to pitch in, I recommend that you get an account at github and fork the project. Github has some nice workflow tools that make it very easy to track each other work. If you need a github invite, ping me via XMPP.

Negative priority

One of the things I mentioned in my XSF Membership application was my endless curiosity about negative priorities in XMPP.

When most people talk about XMPP, they focus on the Instant Message network thats built on top of the XMPP federated network. Some also focus on the aspects of application automation. But even this second group rarely dwells into the wonderful and mystic world of the negative priority.

For those out of the loop, the <presence> stanza you send at the start of the session to signal your availability has some child elements. The most common ones are <show> that tell the other users your status (like away, busy, and the rarely respected do not disturb) and <status> that holds your claim to fame on the "I'm smart and witty in 100 chars or less"-category.

The other standard attribute is <priority>. Priorities range from -128 to 127. If you omit it, your priority is set to 0. Servers use the priority to decide which of your multiple connections (usually called resources) will receive messages without a specific resource in the destination to attribute. So if you send a message to melo@shakespeare.lit/a_resource, then the message is delivered specifically to the resource a_resource, but if you send (as you should on the first message) to melo@shakespeare.lit then the server decides which resource will get the message based on the resources priorities. You can find the all the dirty details in RFC 3921, in particular section 11.1, paragraph 4.1.

The second part of the last paragraph is where things become interesting for negative priorities. If you send a <message> to my bare JID (without a resource), and the only resources available have a negative priority, the server will treat you as an offline contact and store the messages in offline storage.

So negative priority resources work as a non-chat connection, that you can use for other purposes, like automation or application-to-application communication.

The usual bots that you see online have their own JIDs and you talk to them over chat-based interfaces. But with negative priorities you can have a different kind of bot, one that connects with your own JID, but with a negative priority. To distinguish these two types, I'll call the second one an agent. It acts on your behalf inside the XMPP network.

Imagine that you write a agent that has access to your calendar and task list. Given that this agent also has access to your roster, you could use that as an access control mechanism to allow your buddies agents to consult your calendar, negotiate meeting requests based on a free time calendar, or even delegate a task to you.

Or another one: you have a agent running on each computer that you own, and you configure it to export certain directories. Again, you can use your roster group structure to define who has access to what. You can re-arranje your buddies in your main roster, the agent receives the roster push and immediately adjust his ACL.

The possibilities are pretty much endless and this is a area where very little work and study has been done until now.

But there are some road blocks ahead. The first one is that most clients out there don't deal properly with negative priorities. If a buddy of mine only has negative priorities, my IM client must show him as offline. Most clients right now, don't do that.

Worse: when I was trying this over the weekend, I was able to crash some clients (I could see them logging off and login back in continuously).

But that's ok. There was no reason (and right now, there still isn't a good one) for client authors to worry with this. Nobody was using negative priorities. And I'm sure most authors will fix this as time goes by.

Next up: communication with your agents.

March 09, 2008

He can mary again!

Well, the good news is that he can mary and get divorced two or three times now.

Update: for those who where wondering what Net::XMPP2 has to do with all this, lets just say that copy&paste are two techniques that I seem not to have mastered yet.

GPS fun

So there are all this ingredients floating around:

  • a nice Fortuna GPSmart BT: it has a mini usb that can be used for power, but I still prefer to fetch the NMEA feed over Bluetooth;
  • a Macbook with BT;
  • a 3G phone with good connectivity in Portugal, also with BT;
  • a ejabberd server with PEP support, so I can publish my User Location.

The glue of course will be Perl, and the first step is already working. This program will print my location once per second:

use strict;
use warnings;
use lib 'lib';
use GPS::NMEA;

my $gps = GPS::NMEA->new(
  Port => '/dev/cu.GPSmart-SPPslave-1',
  Baud => 9600,

while(1) {
    my($ns,$lat,$ew,$lon) = $gps->get_position;
    print "($ns,$lat,$ew,$lon)\n";

This is a pure copy-and-paste version of the script in the GPS::NMEA manual page, it just works (after you set the correct Port), and it was my first version.

I did get some warnings, so be sure to download and install the latest development version of perl-GPS (You must specifically tell cpan to do it).

Next steps: hack some bot with Net::XMPP2 to publish this information.

March 07, 2008

yoda operator: do, or do not. there is no try

Ok, this way cool.

As such, the JSR-666 expert group recommends the introduction of the yoda code-word to the Java language. This keyword commands that the virtual machine "Do, or do not", where there is no corresponding try.


Warning: the yoda keyword should only be used in places where the presence of an exception would indicate the Java Runtime Environment is misconfigured or broken. Misusing the keyword may cause a great disturbance in the Virtual Machine, as if millions of voices suddenly cried out in terror and were suddenly silenced

I so want this in Perl.

More limitations

The limitations slide that Jobs presented yesterday is of course incomplete. You would not expect it to have the full set of limitations.

In the next weeks, people will go over the documentation and find some more. I'll try and keep a list of the ones that are relevant to me, in order of importance:

  • third-party applications cannot run in the background (link via Gruber): this is most unfortunate to those of us who are thinking "XMPP client, XMPP client". I hope this is only a temporary restriction, or that a specific certification program is setup up to gain the right of running in the background;
  • a temporary limitation, but a big one. The last line of the iPhone SDK readme: "Interface Builder is not yet included in this beta of the iPhone SDK";
  • "Applications may only use Published APIs in the manner prescribed by Apple and must not use or call any unpublished or private APIs": not a restriction by itself, but is interesting to have this in the License Agreement. I think this will mostly be used as "If you mess up, know that we can go out and get you, legally" (article, via gruber).

perl warnings

You have to learn to ignore the forrest.

There are some perl warnings that hide the real problem. My most hated perl warning is this, the first three lines below:

"my" variable @prob masks earlier declaration in same scope at sbin/some_script line 1640.
"my" variable $count masks earlier declaration in same scope at sbin/some_script line 1641.
"my" variable $t masks earlier declaration in same scope at sbin/some_script line 1642.
syntax error at sbin/some_script line 1504, near "next "

Those lines are there because the parser had to bail out after detecting the error on line 4, and failed to notice the end of scopes.

This could be less of a problem if the warnings and errors where ordered by line number, but they are not. So learn to look at the line numbers first to decide which warning to pay attention to.

iPhone SDK

I suppose that one of the words we can use to describe the iPhone SDK is sexy.

I played a bit with Cocoa a couple of years back so I haven't followed to improvements of XCode. I hear João Pavão complaining about all the bugs but thats about it.

So while watching yesterdays event stream, and while I was looking at the game that the Apple dude wrote in (cof, cof) "two weeks", and all the nice tools, my though was: do the other mobile environments have such a sexy SDK, with such good tools?

The SDK seems better than expected, even for developers who just want to give away your apps. The integration with maps, the photo and pictures, it all seems to fit well. And it all works with both the iPhone and the iPod Touch.

The games we saw yesterday, and the fact that you have all that accelerometer stuff built-in makes the iPhone a potential mobile Wii, and I think we will see amazing games for this. I think Nintendo is considering adding a accelerometer to the DS as soon as possible after seeing this. We know (looking at sales of the Wii) that the new controller is the best thing out there (I own a Wii, and my four-years old is starting to be able to control it with precision, scary), so games on the iPhone, its going to he huge.

All this seems like another leap forward for Apple. I mean, competitors like Microsoft, RIM, Nokia, really, do they have the entire package that Apple is offering for download today (err, strike that, maybe tomorrow, the developer site is slashdotted)? And something that you can run on your iPhone and iPod touch today with the beta release of the firmware? My magic ball says: definitively not.

As for the limitations, the two that caught my attention where porn and VoIP over EDGE. The last one was predictable, as a protection to their revenue stream from the carrier deals. But porn, I was surprised. Sure, they don't want to piss off prude consumers, but mobile porn? In a gorgeous screen like that? Dude, iPod XXX series for sure!

The deal to distribute apps ($99 setup, as a "don't waste our time"-fee, and 30% of the price we set for the app) is something I cannot judge. I've never developed for the mobile platform so I don't know how much it cost developers to distributed applications for say, RIM, or Nokia. But on the other hand, no other mobile device producer has the reach of iTunes and the new App Store. Sure, as Rui says often, Apple and the iPhone are a spec in the windshield of Nokia globally, but the ecosystem that Apple is creating is something out of level 18 of Spore.

And jailbreak? sure, the next version will allow you to install applications without the App Store. Thats the logical step for them, to build an alternative distribution channel (I was going to say competitor, but really, it doesn't stand a chance as competitor, but as an alternative, it could be very good). But even so, it will not be worth it for most users, I think.

And me, I have one application I want to write that affects my standard of living. It ties with a e-learning site I operate. The thing is, I'm still running 10.4 on my Macbook and I don't want to change right now, and the SDK is 10.5.2-only. So what is a person to do?

(those iMacs really look cool, and my birthday is coming... hmms... the lower end model is "just" $1100...)

iPhone enterprise features

Nothing more to add, just linking to Fake Steve. Sure, its the extreme position on the Apple fan boy club, but then, there is also a grain of truth in there.

Oh, and yes, it runs on the iPod Touch also. Everything presented yesterday also works with the iPod Touch except stuff that depends on the particular characteristics of the iPhone hardware, as any reasonable person would expect.

And yes, you have to pay for it again. Why? The official response as far as I can tell boils down to the Sarbanes-Oxley Act, but I would like to hear a definitive explanation about this. We all get updates to the iPod, the Apple TV, the Airport Extreme, and other devices by Apple for free, so why not for the iPod Touch?

On a roll

While searching the the link for the SDK post of Fake Steve, I read the previous posts just for kicks. The one about Sarah Lacy just got me laughing out loud. Choice quote:

See, there's just these two things you notice about Sarah right away when you meet her. They're right there in front of you, just staring at you, and you can't look away from them and you find yourself watching them roll from side to side and getting hypnotized by them and just agreeing with anything she says.

Ultimate Game

A most excellent Ultimate Game strip at xkcd.

By the way, in case you haven't figure it out yet, half the fun of xkcd is usually buried in a alt/title tag on the image, so always hover over the image to see it.

March 06, 2008

Doing Acid

A quick post to point you to some Acid3 test results. The thing that got my attention is that IE 5.5 has a better score than IE6 and IE7.


Also, a piece be the Webkit team (currently leading the score with an impressive 90%) telling us how did they get there and why those numbers should be taken lightly. The sense I got from reading that article is that Webkit will reach 100% real soon.

Search in Project with Ack command for Textmate

One of the biggest problems I have with TextMate and large projects is "Find in Project":

  • it is a bit slow;
  • it searches everywhere, even files it shouldn't.

There is a nice alternative that uses grep by Henrik Nyh. But I'm a big ack fan, so I hacked Henrik command to use ack, and the result is Search in Project with ack-command for TextMate.

A future version might move to tm_dialog. Maybe I'll copy the GrepInProject++ as the basis for the next version.

Update: ok, this has been working better than expected. The difference in speed makes me use it without thinking about it. Also, it does not block TextMate. So for really huge projects, you can start it and keep working on your code.

Update 2: oops, a disk problem and the link went 404 on me. I've updated the code to the most recent version I'm using. The uuid of the command is changed so you might need to remove the old version before updating.


IE8 Beta 1 hit the streets yesterday, and it is good. A much needed improvement over IE7.

My favorite feature: WebSlices.

Pity they are not hAtom-compliant though. One can only hope they improve on this in a future beta.

Open AIM

The Open AIM effort is a welcome step by AOL. But is it in the right direction?

If you are thinking about writing a XMPP Transport/Gateway using these specs, you should read carefully the Terms and Conditions page. There are two issues I can see:

  • most of the required "compensations" listed (Ads, Buddy Info, Expressions, AIM start page or AIM toolbar) are very difficult if not impossible to do in a server-side scenario;
  • the mandatory ad usage above 100.000 users could be a problem for some of you.

And if you though these could be worked around, then let me point you to the "Are there any restrictions on what I can build?" FAQ entry in the General section so that your hopes go bye-bye:

Although we have removed many restrictions on usage and development, we still do not permit developers to build Open AIM applications that are interoperable with other IM networks. (Multi-headed applications are now allowed). Please refer to the Developers License Agreement for additional details.

So no, you cannot write a AIM transport with this.

So yes, our best hope is still that the XMPP client-to-server gateway that AOL was playing with sees the light of day.

And yes, in an ideal world it would be a server-to-server gateway, but I think it takes a lot of little steps to get there.

This Open AIM is just not one of those steps.

ejabberd cool coder required

If you want to get your hands dirty in ejabberd goodness and have a more erlang'iang brain than my own, here is a simple request: hack and slash into the PEP code, and allow the use of an ACL to decide which users (JIDs) can publish to the node. Bonus points if you limit the nodes/namespaces to which I can publish to.

I need to authorize a trusted external component to publish into PEP nodes hosted at my domain.

The final goal is to bridge Fire Eagle to User Location (XEP-0080). It goes like this:

  • you use Fire Eagle to publish your location;
  • you then visit a site I'm working on and tell me that yes, you want to publish your location into you PEP node. PEP nodes are only visible to your roster buddies BTW, so privacy issues should be ok;
  • I start polling the Fire Eagle service (yeah, this is the sucky-part) and publish any changes of your location to your PEP node.

In an ideal world, I should be able to request permission to publish to the JID PEP node, you would get a nice little message with that, and you would give you permission. But support for pubsub in clients is still very poor, so we have to use this ACL-in-server-hack.

Mind you that this required cooperation of server operators to authorize publishing to PEP nodes. Again, its the best we can do right now.

Also, an ideal Fire Eagle API would also notify me with Web Hooks that the presence of users I subscribe to was changed.

(hey, and if you are reading this and are currently at ETech 2008, please talk to any Fire Eagle developer you can get your hands on and ask them politely to support Web Hooks).

March 05, 2008

Paranoia sets in

I did a quick read over the article from The Wall Street Journal about the Apple shareholder meeting. I was mostly interested in any iPhone SDK tidbits.

But the following paragraph about Flash support caught my attention:

As Jobs put it Tuesday during the company's annual shareholder meeting, Apple's iPhone, with all its cutting-edge mobile Internet trickery, needs something much better than the current Flash player that Adobe makes for cellphones. The Flash Player option that fits the bill is made for devices like laptops that are larger than the iPhone; as a consequence, it performs too slowly on the iPhone, he said.

Emphasis mine.

I don't know if those are Jobs exact words. If they are, there is a lot of meaning and future directions we can extract from the choice of words. Is Apple preparing a Silverlight-style maneuver, with a Flash-like language? Or are they writing their own Flash player?

In the end, I think its just a curious choice of words, without any second meanings. But the mind did wander a bit for a while.

March 04, 2008

Tim Bray on OOXML

Tim Bray has been writing about the entire OOXML standardization process recently. Tonight he posted a very nice summary of all the major issues he sees with the OOXML format and with the process itself.

Recommended reading.

Perl hackers using Git

I was wondering if all Perl hackers that are using Git, do you keep a separate repository for each module, or a single repository for all your modules?


Ok, I need to get my hands on this Fez game. Such a beautiful design and concept.

Really, take the 5 minutes it takes to watch the video. It starts normally, but less than a minute into the video, your jaw will drop.

update: the Fez author website.

git hosting sites

A couple of weeks back I started looking for Git hosting sites. My two picks where Gitorious and Github.

At the time, and in the weeks that followed, I was too busy to start comparing the sites. But this week I want to start pushing my code out to these sites to see how they work.

In terms of feature list, Github received a lot of love in the past weeks, as you can read from their new blog. But Gitorious is not standing still either. Both are working to provide an easier collaboration feature around git pull which is very cool.

Right now, based solely on the feature list, I think Github has a slight advantage. If I had to point one Github feature that stands out, I would have to pick a Web Hooks-powered Post-Receive hook.

update: arrgh, I'm a moron. I forgot to add my Github password to my Keychain, so I'm locked out of my account. There is no "recover password" functionality on Github yet (its on the Feature Requests page though) so I sent an email to their support account, and I'm hoping for the best.

update 2: Ok, access to Github restored, big thanks to Tom Werner. My profile page is at http://github.com/melo/. I have 5 invites now, so if you want one, send me an email or ping me via XMPP/Jabber. My address for both is melo @ simplicidade.org.

Hiveminder IMAP access

Ok, this is very cool. Best Practical announced yesterday that they now support IMAP access to your task list in Hiveminder, including the most common operations.

They are so getting my money now.


melo@simplicidade.org (XMPP/email)
+351 302 029 050 (voice)
melopt (Skype)

IronMan challenge

Iron Man badge Are you ready to be an Iron Man? Join the challenge and find out! (what is the meaning of this little man?)



Recent Comments

Powered by Disqus
Creative Commons License
This weblog is licensed under a Creative Commons License.
Powered by
Movable Type 3.2