The diary

16.12.2014 DDNS hurts
05.12.2014 Using ping -I
  • It turns out that ping -I is a bit tricky. The simplest thing to do is to use the interface name: kiko@anthem:~$ ping -I eth2 PING ( from eth2: 56(84) bytes of data. 64 bytes from ( icmp_req=1 ttl=49 time=259 ms but that is actually lying: the packet isn't going out from, which is the address for eth3, but rather from eth2's native address. I even tcpdump'd to confirm.
  • And if you use just the address, it doesn't seem to work:
     kiko@anthem:~$ ping -I
     PING ( from : 56(84) bytes of data.
30.11.2014 LXC aargh and NFS mounts
  • If you are trying to mount an NFS share inside an LXC container on 14.04, it won't work until you fix the apparmor profile: []
29.11.2014 Cron madness
  • I have been trying to get a find command to delete old files and directories under a tree; this is run in a cronjob and I've just been sloppy at it. Today I finally discovered -mindepth 1 and -depth were what I was looking for all along!
  • BTW, a trivial way to ensure only a single cronjob runs is to use flock: flock -n /var/lock/foo command Before I used lckdo, which is included in the moreutils package, but flock is part of util-linux and doesn't need perl madness.
28.11.2014 mtab versus /proc/mounts
02.11.2014 Happy Mailman Day: fixing unhandled bounces!
  • [] had the hint:
     grep ^"<[a-z]" ~/mail/bounces | tr -d \<  | tr -d \> | xargs bin/remove_members --fromall
23.10.2014 Magic SysRq actions disabled?
10.09.2014 Google Hangouts auto-mute
  • I hate it, but [] indicates a trivial way to fix it, which is adding a single line to a .config file for the talk plugin.
  • Gparted killed my Windows partition when resizing. Trying to get a recovery disk was crazy hard! It turns out unetbootin is the easiest way to do it, but Windows required NTFS which current unetbootin doesn't easily allow unless you use the hack in []
  • And once you get your Windows back you will discover that expanding the partition is instantaneous in the actual disk manager UI!
  • I messed up my GPG trustdb, but luckily: []
03.09.2014 Iodine
  • Finally got IP over DNS working and it's amazing to say the least! []
18.06.2014 CUPS & double-sided printing?
  • We have a decade-old Laserjet 1320 that is great for double-sided printing. That is, until recently -- perhaps even as recently as we moved our workstations to Trusty. What happened?
  • The best hint I found was at [] trying to set the default options for the printer. When I enabled double-sided printing, CUPS warned me there is a Duplexer Installed option -- which was off. Fixed!
30.05.2014 Updated Server BIOS for out S5520HC
  • Huge filename and pretty massive firmware update:
  • Moved from 0050 to 0064 -- a 4 year delta between versions!
  • Only issue was the the FRU and DSR update didn't get done because it printed a scary warning about not being able to detect a temperature sensor.
     Detecting Front Panel Temp Sensor Device. Please wait...
     Front Panel Temperature sensor device hardware is not found.
     Chassis fan Speed Control (FSC) will not work properly without this
     Do you want to still Continue (Y/N)?
  • I guess I'm just going to ignore that as I don't really seem to need the update for those bits. What do the FRU and SDR pieces do anyway?
  • Oh.. I guess I understand now. This is why my fans are screaming! [] [] [] [] [] []
16.05.2014 USB drives and burn-in
  • I'm replacing the server USB backup drives and looking for good alternatives. I've picked a few and am trying to burn them in before making the commitment (as previous drives I was trying to use ended up dying on me mid-flight). Burn-in for me is badblocks for a few days and some SMART self-testing.
  • One of the drives I got was a Seagate, and it annoyed me that there were a lot of errors in the two first SMART values listed by smartmontools as I did a badblocks on it:
     1 Raw_Read_Error_Rate     0x000f   100   100   006    Pre-fail  Always -       236840
     7 Seek_Error_Rate         0x000f   100   253   030    Pre-fail  Always -       204379
    I say it annoyed me, but then I read this: []
  • So the lower side of the number is just a counter. And math shows they have zero errors. Yay!
  • And if you have a USB drive that has self-tests being aborted by the host, check to see if it's not sleeping mid-test. At least that is what [] says; I'm trying it.
  • Daft Google syncml limitations: []
  • Saved my ass with DD-WRT passwords today not being synced between web and ssh: []
  • Quora just taught me:
     Answer from Susan Ng
     I learned this in 1st grade - it's a REALLY easy and simple way to learn
     your nine times table. Or to teach someone else to learn!
     1) Look at your (or someone else's) hands
     2) Say you want to find 9x7.  Put down your 7th finger
     3) Count the number of fingers to the left of your 7. This is your tens
     digit.  Count the number of fingers to your right.  This is your ones
  • What a trick: []
  • Typing the em-dash: []
  • Getting .bash_profile sourced: []
  • Just ran into: []
23.04.2014 Juju and LXC
  • Debugging session as to why I can't get the local provider to give me new machines in Juju. This is probably a regression in, but I still don't know yet.
  • One thing which is interesting is that the log for machine-0 is actually where a lot of the container traffic appears. machine-0 is the bootstrap node, and in the local provider, it's what houses all the other containers.
  • root@chorus:/etc/default# apt-get install lxc/precise-backports
  • Escape the console?
  • lxc-ls is busted?
  • []
20.04.2014 36ers?
09.04.2014 HP Virtual Rooms
  • The trick to getting [] to work is to know that the plugin and application they provide are 32-bit. That's not something which is obvious unless you actually read the page carefully, and the failure mode is completely unobvious (the installer runs, the plugin is there, the test page looks like it works but no virtual room ever opens, with a URL flashing quickly before loading back into the test page). There is a trick which you can use to test manually and see what is wrong:
     kiko@limpinho:~$ cd .hpvirtualrooms 
     kiko@limpinho:~/.hpvirtualrooms$ ./hpvirtualrooms 
     bash: ./hpvirtualrooms: No such file or directory
     kiko@limpinho:~/.hpvirtualrooms$ file hpvirtualrooms 
     hpvirtualrooms: ELF 32-bit LSB executable, Intel 80386, version 1
     (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15
    Aha! Okay. So I need some 32-bit libraries..
  • First step, I need
     sudo apt-get install libc6-i386 
  • That lets me see via ldd the situation. And it's pretty bad: I need a total of 44 libraries pulled in as dependencies from this core set:
     libsm6:i386 libpng12:i386 libfreetype6:i386 libxi6:i386
     libx11-6:i386 libasound2:i386 libstdc++6:i386 libfontconfig1:i386
     libxrender1:i386 libxrandr2:i386 libglib2.0-0:i386 libxfixes3:i386
  • But once that's done, it seems to work. I need to put a bit more effort into validating it in the office, but I at least now know how to do it. And best of all, it doesn't seem to need Java!
17.03.2014 Android and Account Syncing
  • If you look at your Android phone settings and all your accounts have "sync disabled", you will never figure out how to fix it. It turns out that you need to look in the Gmail app and enable sync. That in turn enables Android-wide synchronization, or at least that's my experience and what [] tells you to do. WTF.
  • Ah, now that I looked at [] it looks more sensible. So the reality is that you control that same setting in both gmail and in the Data Usage settings screen. I bet I disabled it while roaming internationally!
21.02.2014 DHCP in the eyes of Wireshark
  • We had a cable modem that was annoying the hell out of us because it needed to be restarted periodically -- twice a day in the latest weeks. So we called the cable company in and convinced them to swap the modem out. In putting the new modem in I did a lot of log-digging and realized that actually the request note that goes out periodically:
     Feb 20 21:31:05 anthem dhclient: DHCPREQUEST of on eth3 to port 67
    is actually not a request which is going unanswered, since Wireshark shows clearly that there is a Request packet followed by an ACK from that IP address. Oh, actually, I am just grepping the log wrong, because if you look at the full successful operation it looks like this:
     Feb 17 12:22:51 anthem dhclient: DHCPREQUEST of on eth3 to port 67
     Feb 17 12:22:51 anthem dhclient: DHCPACK of from
     Feb 17 12:22:51 anthem dhclient: bound to -- renewal in 4407 seconds.
  • The problem we were having previously was that at some point the modem stopped working, and the refresh DHCPREQUEST never got a response, which looks like:
     Feb 17 20:01:24 anthem dhclient: DHCPREQUEST of on eth3 to port 67
     Feb 17 20:02:32  dhclient: last message repeated 6 times
     Feb 17 20:03:35  dhclient: last message repeated 4 times
    Sometimes the modem would do 7 refreshes before stalling, but lately it was rare to get to 4. The log looks much healthier now!
  • One particularly weird thing is that in the actual IP allocation request comes from a different DHCP server than the one which provides the response:
     Feb 20 17:37:45 anthem dhclient: DHCPDISCOVER on eth3 to port 67 interval 3
     Feb 20 17:37:45 anthem dhclient: DHCPREQUEST of on eth3 to port 67
     Feb 20 17:37:45 anthem dhclient: DHCPOFFER of from
     Feb 20 17:37:45 anthem dhclient: DHCPACK of from
     Feb 20 17:37:46 anthem dhclient: bound to -- renewal in 4840 seconds.
    So provided the response, but if you look at the DHCP Server Identifier that comes back in the OFFER packet it says I don't think that's illegal, but it's certainly not what I've seen in normal site-wide DHCP. And if you look at the updates afterwards the refresh DHCPREQUEST is ACK'd by
27.01.2014 Undocked Libreoffice panes
  • I had this problem for the longest time, and just found out that it is actually a documentation issue: []
  • How on earth did they get to control-doubleclick, though?!
22.01.2014 ADSL and Telefonica
  • Once a year I try calling my operator to see if they can upgrade my uplink. I'm amazed that to this day I can only get a 4MB/s link on an ADSL connection from Vivo (ex-Telefonica, ex-Telesp), the local wired operator. It's even weirder that on my current line, which I've had for about 10 years, I can't get an upgrade at all from the current 1MB/s. At the same time, Virtua offers me 20 and 100MB/s on cable at not much more that Vivo charges for their measly 1MB/s. Maybe I won't call again next year!
08.01.2014 Reminder to self: DBL and sendmail access map
  • The [] DBL is great, but if it is blocking email you should be receiving, the way sendmail integrates with milters means you can't work around it by adding the sender address to the access map. The URI-milter package that we use doesn't provide whitelist support either; it's even mentioned in their TODO at [] Should I not be using 0.1-versioned software?
  • Another thing which sucks about the URI-milter is that /any/ match is considered positive; for the DBL, which I just found out lists even (see [] for details), this means that both the and are blocked, but they are quite different -- the first is for actual spam domains, and the other, for redirector domains which may be abused by spammers (see [] for details).
     Non-authoritative answer:
  • PS: I've been invited to speak at the Brazilian Campus Party this year! I'm presenting at the Socrates stage on the 29th from 15h30 to 17h00. Joining me will be Paulo Henrique de Lima Santana, Fabio Pires, Marcio Junior Vieira and Marcelo Marques.
07.01.2014 Spreadsheets and Locales
  • I hate locales in spreadsheets. [] -- why on earth does the locale change the ARGUMENT SEPARATOR in formulas??
05.01.2014 DHCP root-path weirdness
  • There is an odd bug in the DHCP root-path setting. I just don't know what it is.
  • I used dhcpdump to study it, FWIW; see [] for some handy DHCP debug advice.
  • Cooked up a very crude overall boot time measurement system using rc.local and /proc/uptime. I wonder how reliable it is.
  • PS: for the FAQ "why does /proc/uptime show a larger number for idle time than raw uptime", see []
04.01.2014 Ripening
  • Have you ever wondered what causes fruit to ripen? Well, I did tonight, and I looked it up on Wikipedia and was amazed to see the article is terrible! But it contained a link to an incredibly interesting entry in the Plant Physiology info homepage: []
03.01.2014 FSCache for the new year
  • I got a few 16GB SSDs to try as FSCache drives for our NFS-root diskless network. The idea of being able to transparently cache data in them and improve performance is really appealing, but at least on Ubuntu Precise the results weren't ideal.
  • Setup is fairly simple. I wired the SSD drive into the chassis, formatted it to ext4, installed cachefilesd, enabled it in /etc/default and modified /etc/fstab to mount the SSD and add the "fsc" option to the NFS mounts.
  • There is a problem with the kernel Yama security provisions that seems to be triggered by enabling FSCache; when running mutt a bunch of errors show up in the syslog like this:
     kernel: non-accessible hardlink creation was attempted by: mutt_dotlock
    However, it's possible to work around this (see post at [] for details) by just setting
     kernel.yama.protected_nonaccess_hardlinks = 0
  • It seems to be working (well, in fact it started working after I fixed the configuration file; I think brun can't be less than 10% or it errors out) as I can see the cache directory growing and nodes being added to the cache hierarchy. And it probably does speed things up, as repeatedly opening up a 6.5 GB-file (this box has 8 GB RAM) results in a pretty good speedup with the disk drive being read at a constant 70MB/s:
     $ time cat win_xp.qcow2 > /dev/null 
     real    4m17.169s
     $ time cat win_xp.qcow2 > /dev/null 
     real    1m11.031s
  • Unfortunately, there are three issues I've found so far. The first is that there is an obvious race that happens when opening files multiple times simultaneously. This happens most frequently when using mutt to try and open the same mailbox twice; when this happens I get a flood of kernel messages and mutt weirdly showing an "unknown" mailbox.
     CacheFiles: Error: Object already preemptively buried
     [kworke] preemptive burial: OBJb2 [OBJECT_RECYCLING]
  • The second issue is that the file UID/GIDs appear to come up busted, at least in some mount points, like you get with NFSv4 when idmapd isn't running:
     kiko@memento:~$ ls -ld .ssh/
     drwx------ 2 4294967294 4294967294 4096 Oct 12 21:02 .ssh/
    And while behaviour under concurrent reads may be fixed in newer kernel versions (see [] and [] the other issue is that this KingSpec SSD is actually not that fast, even when compared with loading bits over the GBe network. hdparm shows the performance is kinda miffy:
     $ hdparm -tT /dev/sda1
     Timing cached reads:   18356 MB in  2.00 seconds = 9183.84 MB/sec
     Timing buffered disk reads: 214 MB in  3.02 seconds =  70.85 MB/sec
    For the same comparison above, if I turn cachefilesd off, here's the result:
     $ time cat win_xp.qcow2 > /dev/null 
     real    0m45.817s
    Wow -- I see a sustained 120MB/s over the network for that read.
16.12.2013 Ubuntu LTS Kernel Enablement Baselines
13.12.2013 Certificate renewal
  • Our SSL cert is expiring and I'm trying to remember how to generate a new CSR. Let me find out.. ah, right, there is a guide at []
  • One odd thing is having to generate the combined PEM file manually; I guess they can't do it for you because you hold on to the key when generating the CSR.
  • Anway, all of this is stuffed into /etc/ssl/LOCAL for us now, with a convenient README.
  • Installed also the certificate to be used with our SMTP server; this required a change to starttls.m4 which uses the same cert config entry for the CA and for the server (which suggests to me that it should really be a combined PEM file..)
10.12.2013 Oracle Java dialogs
  • 2013 has been the Year of the Java Update it seems. We've had to update multiple times given the security problems raised, and this is a problem because Banco do Brasil heavily depends on Java for access control to both company and personal banking websites. And since this raft of updates, OpenJDK no longer works for the company banking site, so I've been forced to use a computer with Oracle Java just for this.
  • Previous issues with updates included annoying popups and an unreliable login mechanism; you would get in once every 10 attempts or fewer on my machine. When it failed it would redirect you to a page telling you to install Java.
  • With the latest update (1.7.0_45) there are no longer blocking issues, but there is an annoying dialog that pops up every time I access the bank website: []
  • Turns out it's because of a limitation in the security mechanism for LiveConnect , a JS mechanism to call from a website into an applet; there is no way to make it work for all versions of Java: []
08.12.2013 Minors and airline points
  • Did you know TAM only lets you enroll into their alliance program children that are older than 2 years old? I generally wouldn't care to give a corporation a children's data, but the round trip to Taipei is probably worth a free flight or two so it would be nice to get.
  • It turns out China Airlines and SAA don't let you either. I guess those points are void :-/
  • Just recharged my TIM and Vivo pre-paid chips with 50 and 60, respectively. They are supposed to last 180 days. Will they?
03.10.2013 NFS TUNE
21.08.2013 Catch-all
  • Lent: GoPro to Iuri
  • Lent: Wheel-bag to João (PT)
  • Lent: Wheel-bag to Ozias (Disc)
20.08.2013 GRUB2 RAID weirdness.. understood and solved
  • I rebooted the server for the first time (after the failed disk) to cope with a kernel upgrade. No, I haven't yet swapped out the disk -- the chassis makes it a bit painful. But anyway, to my surprise, the system got stuck in the grub prompt, and I couldn't get it to boot by specifying the linux and initrd lines. Why?
  • One symptom I found was that cat /boot/grub/grub.cfg returned garbage. The other was that there was only one kernel version listed in /boot, although I had just upgraded the kernel so there had to be at least two. And yet another was that a file I had touched in /etc was also garbaged up. What's going on?
  • It turns out that grub was assembling the raid array using the failed drive (with SCSI ID 8) instead of the spare. It's really interesting that grub does a read-only RAID mount, but with very little checking, so when you have failed drives it show you weirdly half-stale data. To address this I disabled the drive in the server's SCSI utility and booted again, successfully. It gives an indication of how the grub RAID code works; I wish I had a way of saying what drives were being used in an md array as it would have saved me a lot of pondering.
  • Oh, and I used the SCSI utility to verify the drive as well. I have re-added it back and am waiting for it to fail again. The IBM drive seems to be really slow.. or maybe it's that it's on the secondary SCSI interface with a slower tape drive on it as well.
05.08.2013 RAID drive failure
  • Our sdd drive (SCSI ID 8) was kicked out of the raid because of an abort SCSI command overnight, at 3:36am local time to be precise. I'll add it back to the array after a reboot to see if it is transient or if it's really dead. The spare meanwhile seems to be working okay, but the resync takes ages..
  • It's worth noting that this fall-back setup has become weirdly slow. I'm still trying to figure out if it's the disk or something else.
06.06.2013 Java Banco do Brasil Locale bonging
  • Banco do Brasil's Java authenticator won't work in Mari's chromium browser, but it works in Firefox. What is the difference? Well, in chromium, we run into this issue: [] which has shown up on [] and []
  • So Mari's locale is pt_BR.UTF-8. But the question is, if the error really is locale-dependent, why doesn't it trigger for Firefox?
  • I know now one more piece of the puzzle. We know the system locale is pt_BR.UTF-8. But if I visit [] with both browsers I notice there is an important difference when displaying the results of Locale.getDefault() -- Chromium displays:
     Locale.getDefault() :
     Language Code   en
     Display Language    English
     Country Code    US
     Display Country United States
    whereas Firefox gives me
     Locale.getDefault() :
     Language Code   pt
     Display Language    português
     Country Code    BR
     Display Country Brasil
    and that's likely to explain why Chromium fails (C locale parsing assuming a dot as the decimal separator) while Firefox succeeds.
  • I'm still not sure what triggers the BB machine authentication reset that we run into periodically. So far I know that kernel updates do trigger it. What doesn't: java updates, firefox updates. Unknown: changing from OpenJDK to Oracle Java.
23.05.2013 The Joule
  • My Joule was acting up, so I tried to kick it into submission by formatting its partition via mkfs.vfat. I ended up with a filesystem with a bunch of garbage files that I couldn't quite figure out. I called Saris up and they said literally "don't use FAT32 or anything, just plain FAT" which I took to mean mkfs.msdos. That ended up creating a 12-bit FAT. I ended up with an empty drive. So far so good. Then after disconnecting and reconnecting the device to the computer, maybe a few times, it automatically created a CycleOps directory with a config subdir below it. Perfect! I guess the corrupted FAT entries suggest that the device's firmware only knows to write FAT-12 to it.. I need to check another device to confirm.
22.05.2013 Packet Mystery
  • My firewall ends up occasionally seeing traffic on a certain interface with the wrong source IP address. Why is that?
  • This is interesting but I believe unrelated: []
  • Wow, Java history is complicated.. or maybe just interesting []
29.03.2013 Movie catch-up
  • Silver Linings Playbook
  • The Prestige
  • Un Cuento Chino
  • XXX bad movie about haunted house
28.03.2013 Shaping
  • We're planning on shaping our main incoming link to see if it can carry our regular traffic together with VOIP. I'm storing some pointers here to help me when we get to that: [] []
23.11.2012 Where is my /tmp/.X11-unix directory?
  • It's missing on all our diskless machines. What's going on?
  • Dunno, but it solved itself as part of regular updates and a pretty major fix to our diskless /etc/init scripts; there were subdirectories inside /etc/init with older copies of /etc/init/*.conf, and it turns out upstart also parses subdirectories -- oops!
  • Got an icalendar invitation viewer for mutt set up using [] though it did force me to use gem install which is so not the way to do it in Ubuntu!
22.11.2012 New link, and the shaping of ingress traffic
  • We had a new internet connection installed today, and it's a 4Mbps premium, unshaped link. In a weird encounter, however, this line from wondershaper completely kills my download performance (measured by a simple wget) on it:
     # tc filter add dev eth0 parent ffff: protocol ip prio 20 u32 match ip
         src police rate 3800kbit burst 10k drop flowid :1
    I can't figure out why. I thought that maybe the rate stuff was wonky and wanted to use the avrate policer, but that doesn't work either:
     # tc filter add dev eth0 parent ffff: protocol ip prio 20 u32 match ip 
         src police avrate 380 reclassify flowid :1
     RTNETLINK answers: Invalid argument
     We have an error talking to the kernel
    I thought that had to do with NET_ESTIMATOR being missing in the kernel config, as the LARTC meantions that estimators needing to be compiled into the kernel, but it seems that option is now gone and they are always built in. Oh, I see what's missing -- an "estimator" option. So this runs ok:
     # tc filter add dev eth0 parent ffff: protocol ip prio 20 estimator 1 2 
         u32 match ip src police avrate 380 reclassify flowid :1
    Unfortunately, I'm still only getting 50% of what I expected..
08.10.2012 Bike Updates
  • Swapped the F1SL's chain, and replaced the F2C's rear derailleur cable. And then the week ended, and I left the office!
12.09.2012 So halt -p huh? And rsyslog
  • It seems that /sbin/halt no longer turns the system power off, and you need to run poweroff (or halt -p) instead. Did you know that?
  • rsyslog in Ubuntu has a rule that provides an admin feature I've always loved; the ability to log stuff to /dev/tty*. Yes, it's a bit of a security disclosure but I figure if you have tty access anyway..
  • The problem is it ships broken by default in Ubuntu. The issue has to do with privilege dropping; [] notes correctly that the PrivDrop bits in rsyslog.conf cause tty writing to fail. What it doesnt't note is that you can use named pipes for this functionality and it works just fine; I found this out in a very unlikely blog comment here: []
  • So all you need to do to get this to work is to use "|/dev/ttyX" as the destination string for the facility. Cool!
10.09.2012 DD-WRT, time and NTP
  • [] has a pretty complete analysis of just how wrote the timezone and NTP handling in DD-WRT is busted. No wonder it was confusing me! For now, just using UTC on the device seems wisest.
09.09.2012 Cycling Metrics and The GoldenCheetah Performance Manager
  • For people looking for a way to get performance manager-style data from GoldenCheetah, in particular how to get the Performance Manager graph to make sense, check out the guide at [] which apart from making sense of the metrics and PM tabs is particularly useful in explaining that you need to have Power Zone data entered (under Athlete options) in order to get BikeScores -- probably the #1 gotcha there. You can also get an idea of the mechanics behind the Metrics tab in a webcast at [] -- particularly interesting are the pieces that describe saved charts and user-defined ranges, which are hard-to-impossible to discover through the UI directly. And the user-defined ranges are automatically available as seasons in the Critical Power chart, which I found out about in this post: []
  • And, if you're confused about TSS, CTL, ATL and TSB not appearing in GoldenCheetah, the thing to know is that GC 2.x uses Phil Skiba's metric system, which maps to the Coggan model as below:
     TSS => BikeScore
     IF  => Relative Intensity
     NP  => xPower
     VI  => Skiba VI (XPower/Average_power)
     CTL => LTS
     ATL => STS
     TSB => SB
    AFAICT Skiba VI is only visible in the metrics tab.
06.09.2012 PSU Again?
  • Actually, not so fast on the PSU fix. Ever since we put the drives back in the box, we've had somewhat random SCSI errors. This morning, when I installed a new network card, though, I'm unable to get the thing to work again. And get this: it only happens when the drive caddy is inserted into the case. If the caddy is sitting outside of the box, everything works fine. But the moment I slide it inside the case, SCSI errors galore. And I've replaced the cabling, improved the drive positioning, disconnected fans.. my hypothesis is a PSU grounding problem. But I need to get a replacement to actually verify..
21.08.2012 Clamav on Ubuntu as a Sendmail Milter
  • I am a bit surprised that nowhere is there good documentation on how to get Clamav running on Ubuntu as a milter. It's actually pretty easy.
  • sudo apt-get install clamav-milter
  • sudo freshclam
  • sudo /etc/init.d/clamav-daemon start
  • Add
    to your file.
  • make && /etc/init.d/sendmail restart
  • That's it -- you'll have a working installation that is already scanning, quarantining and updating the virus database. I'm not sure what exactly causes freshclam -d to run in the steps above, but it's a daemon that will keep your database up to date.
  • To test, just bounce a message containing a virus (you probably have too many!) to yourself. It'll be put in quarantine mode, which I took a long time to figure out is actually a special sendmail queue, which you view like this:
     kiko@anthem:/etc/clamav$ mailq -qQ
     MSP Queue status...
     /var/spool/mqueue-client is empty
             Total requests: 0
     MTA Queue status...
             /var/spool/mqueue (1 request)
     -----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient-----------
     q7LCqigM003096    40178 Tue Aug 21 09:52 
          QUARANTINE: quarantined by clamav-milter
             Total requests: 1
  • Quarantined messages are going to be in the same /var/spool/mqueue directory, but are prefixed with "hf". To remove stuff from the quarantine queue, you can use
    /usr/share/sendmail/ -d -Q /var/spool/mqueue
    and you can also use to remove individual files.
  • If you don't want the messages quarantined (I probably don't) you can just set the configuration option "OnInfected Reject" in /etc/clamav-milter.conf. Note also that Stephen Warren suggests "AddHeader Add" here: [] Once you've made any configuration changes, just run an /etc/init.d/clamav-milter restart.
  • So far I am /very/ impressed with how simple and well it all works. Kudos to the project team who has come up with a very simple design -- scanner daemon, milter, database update daemon, and that's it. The packaging is also really nicely done, with the user permissions set up correctly and intuitively. It eats up some memory on the server, but we have so much anyway..
20.08.2012 Avenging Spelling
  • Every once in a while you receive the odd surprisingly fantastic message, and this weekend's winner says this:
    Hi, there is a small typo in [] .. commecial should be commercial. No need to thank me, it's what I was born for.
    It's then signed "The Spelling Avenger". So how cool is that? I wish he had a website to link to..
17.08.2012 Pop and there goes a pirate
  • Our server's Corsair AX750 power supply just gave up the ghost, about three years in. Swapping it out was tough, in particular because the drives didn't seem to enjoy the whole movement. We installed spare drives, futzed around and finally remounted the original configuration correctly. Go figure!
  • Pretty cool reference on what directories to exclude from an Ubuntu backup: []
09.07.2012 Tracking Hangouts
  • Our somewhat complex multilink setup here at the office has a low-latency line which works really well for VOIP and video conferences, but to make the policy-based routing work, we need to know what hosts we are sending traffic to. Google Hangouts presents that challenge, since it's unclear what the hosts involved are. Plus, it changes! It used to be that was all you needed to track, but now they've added and I'm still figuring out if that's all I need to pay attention to..
08.07.2012 If Unity won't run..
  • []
     kiko@gasolinux:~$ /usr/lib/nux/unity_support_test -p
     OpenGL vendor string:   VMware, Inc.
     OpenGL renderer string: Gallium 0.4 on llvmpipe (LLVM 0x300)
     OpenGL version string:  2.1 Mesa 8.0.2
07.07.2012 War and the X7DVA BIOS
  • Our Supermicro X7DVA-8 server has ECC memory, and the memory and Northbridge run REALLY hot, so hot you can't touch the parts when the box is running, and if you load the server up too much the temperature trip squeals. So I decided that we could try updating the BIOS to the latest (albeit 2008) version. However, I was unable, I mean, TRULY unable, to get it to boot from USB. I managed to do it once, on a fluke, but the drive failed to boot, and after that I could never do it again. I ended up following Johan's advice and using a SATA drive with Freedos on it.
  • Booting USB on the server never worked because, although the BIOS could see the drive, it didn't seem to identify it as bootable; the drive would never appear as bootable on the F11 menu, nor on the BIOS boot order menu -- so though the drive /did/ appear in the BIOS listing, it never had a sequence number next to it, while the first 8 entries have numbers 1-8 next to them.
  • Getting Freedos on the SATA drive was less trivial than I thought it would be. I had a Freedos USB stick, and I can boot from that on another workstation, so it should be a matter of doing a format /s, or an old-skool sys c:. But getting the SATA drive to actually boot was tricky, and I ended up being reminded of the magical incantation:
     fdisk /mbr
    which was exactly what was missing. Getting fdisk.exe (and involved ISO-mounting the freedos ISO, but that wasn't so hard in the end. And once I managed to boot, the flashing procedure was trivial and only took a few seconds (just type in "flash x7dva208.rom").
  • However, after flashing, the system continues to run as hot as ever! At least the BIOS update got us up to DMA version 2.5, and perhaps because of it, or because I tweaked a bunch of BIOS settings, my lshw now reports I have L2 cache. This bothers me though... does it mean I didn't have this before, or that lshw can how see it?
                  description: L2 cache
                  physical id: 7
                  slot: L2 Cache
                  size: 12MiB
                  capacity: 16MiB
                  capabilities: burst internal write-back 
    Now why does the capacity not match the size? The mysteries of modern hardware..
04.07.2012 Vitamin D and the endurance athlete
  • My wife's serum Vitamin D came up rather low. So I did some reading about it over at [] and, particularly interesting for an athlete, [] Mariana never leaves home without a serious sunscreen, and we both always shower after riding, so it's probably advised to supplement, particularly for Mari whose serum levels are low. I like this coach's take on it: []
  • Iron, Creatine, Beta-Alanine, Lysine, Alanine, Niacin, Vitamin C, Zinc.. Sometimes I am reminded how crazy it seems to take this many supplements every morning, and I eat a /lot/ of variety -- that's life being a vegetarian athlete!
16.06.2012 spambayes 1.1 and persistent_use_database
  • If you used spambayes like me -- and truly apparently only me, since there are ZERO hits on Google for this issue -- and have recently upgraded to Precise, you will probably find your .proclog spewing errors like this:
     Attempted to set [Storage] persistent_use_database
     with invalid value True ()
    This is actually caused by a change in a spambayes' configuration key, which is being set in your ~/.spambayesrc to "True", which used to be the right way to do it -- and still is according to the Debian package's README. If you look at spambayes' you'll find out that this is now a string field, with the following options available:
     ("zeo", "zodb", "cdb", "mysql", "pgsql", "dbm", "pickle")
    Apparently the old format is dbm, which is sort of the new default (the default is runtime selected between ZODB and dbm), but it's probably sensible to be explicit about it, so into .spambayesrc it goes!
12.05.2012 rdiff-backup and a full disk
  • Do you know what you get when you mix rdiff-backup and a disk full error? I do now:
     File "/var/lib/python-support/python2.6/rdiff_backup/", line
     290, in restore_orig_regfile
     File "/var/lib/python-support/python2.6/rdiff_backup/", line
     1195, in write_from_fileobj
     copyfileobj(fp, outfp)
     File "/var/lib/python-support/python2.6/rdiff_backup/", line 64,
     in copyfileobj
     IOError: [Errno 28] No space left on device
    Besides being a royal pain in the ass you won't believe me when I tell you that to repair this requires actual surgery on the filesystem. Here's a bug report [] and a thread that discusses the issue more widely []
  • The solution I found was to find a couple of really large files (MOVs in fact) in the rdiff-backup-data subdirectories and move them around to a separate filesystem while running --check-destination-dir. Hopefully that won't error out completely -- still running.
  • Ah, indeed rdiff-backup can cope with that -- it basically creates zero-sized files where it would have placed the original file and moves on. In my case it's slightly more complicated to interpret because this is actually a recovery pass (using --check-destination-dir) from a backup that failed and therefore the recovery pass is trying to recreate files in the rdiff-backup master directory which are actually deleted in the live system. But that's easier to amend later!
  • The best solution I've found to this problem, so far, is to keep some easily-freed large files on the filesystem. That way, even if you /do/ run out of space and crash, well, you can move them away and then recover.
05.05.2012 Swaps
  • Swapped the battery on my Powertap Pro
  • Also swapped stem and handlebar on the F2C
24.04.2012 Cycling Complexity
  • Finding the exact replacement part I need from Shimano proves tricky: Y-4BN98060 is what I need according to [] but it did take a while for me to figure out I had an SL wheelset. In fact, I by mistake bought a pair of Y-4B909000 (confusingly labeled 4-4B909000) only to find it didn't actually work! Of course, that is for the WH-7800, etc, etc. Damn.
  • /usr/share/xsessions is where GDM finds the environments available for users to log in to the system.
  • How cool is [] huh?
19.03.2012 Sloppy focus on Ubuntu Unity
21.02.2012 TouchPlayer
  • Man I'm loving the HP WebOS Touchpad. I'll write up a proper blog entry about it, but if you're trying to get an application to play random AVI and WEBM videos on it, you'll need to install a third-party application. I installed TouchPlayer, which apparently is a build of mplayer. It wasn't exactly trivial, essentially because you need to use a host PC to do the whole process.
  • First, you enable "developer mode" on the Touchpad, which involves typing stuff into the tablet's search bar.
  • Next step, you run, on a host computer, something called "WebOS Quick Install". This is just a java archive you run doing "java -jar WebOSQuickInstall-4.4.0.jar". You can get it from []
  • Before running this for the first time, you need to install a "driver", which is called palm-novacom; you can download the .deb from [] -- beware, it will run a daemon, which kind of freaks me out.
  • You can now connect the tablet to the computer. You now run WebOS Quick Install, which should detect your device fine. Now, click on a little networky icon, and select "Preware". This gets installed on the actual device. You can later use this on the actual Touchpad to install applications, and there are quite a few.
  • Last stop! You then need to download two .ipk files and install them on the tablet through WebOS Quick Install. The first one is for the filemgr service, which should be installable through Preware, but which is currently 404ing -- no worries, a version is available from [] Touchplayer itself is available as a download from [] -- just install both ipks and you'll have it available on the device.
  • That's it -- disconnect and enjoy!
20.02.2012 Blobs
  • I just extracted Nvidia's driver source from Ubuntu's latest package and generated an ls -l on kernel/. It's interesting that it's a non-GPL'd kernel module, something which I know is both kinda rare and kinda controversial. The full list is at [] but the remarkable thing is this blob in the middle of it:
     [... dozens of 1-100K .c files]
     -rw-r--r-- 1 kiko mondo 13444768 2011-04-18 18:54 nv-kernel.o
12.02.2012 IcedTea and Banco do Brasil
  • I know that IcedTea really didn't /use/ to work with BB, forcing us to install Sun Java, and yes, even the bank says that at [] but while it is true that in Chromium it doesn't appear to work, if you run Firefox in Oneiric it works exactly as you'd expect it to. Yay!
29.01.2012 Google Talk IPs
  •, for the actual STUN and UDP media traffic
  • for the HTTPS traffic.
23.01.2012 Randomness
  • Installed today a new front tire on my Felt F2C, a Schwalbe Durano Plus; let's see how long it will last. The last one, a Specialized All Condition tire, is my current favorite, but I got a nasty sidewall cut in it with practically new thread that kind of miffed me.
  • I did a TV interview today about the educational work we're doing with cyclists and drivers in São Carlos: []
  • Also posted a reply to a rather misleading analysis of the effects of open source on the market, this time directed at Stoq, who the poster says is "killing commercial sales-focused ERP software" -- I do wish that part was right, though! []
  • Fixed my diNovo Edge keyboard again on Oneiric (and chattr +i'd the udev rules file to stop it from breaking!) as per []
  • Where did my panel volume control go? Well, actually, in 11.04 and onwards, the volume control is now provided by an indicator applet, so what's you're really missing is the indicator applet! Just add it back and be happy.
  • Need to replace your PowerTap bearings? Check out []
13.01.2012 Happy New Year
  • The random changes over the new year bring me a few new bits of wisdom. I'm doing the finishing touches on a migration from a 32-bit Lucid on an X61 to an amd64 Oneiric on my mom's new X220 with SSD. She's not sure she likes it yet, but I'm trying hard so she does!
  • The first hint is a workaround for the very odd 40 second hang that you get with OpenOffice (and co) when using your computer in a network whose DNS server doesn't respond to weird queries. It seems that OOO is doing a DNS lookup for, literally, "foobar.(local)" where foobar is your local hostname. The way to solve that is to add a weird entry for the machine in your /etc/hosts file. End of hang!
  • Second is how to install hamachi on Oneiric. Just pull the file from a helpful PPA on [] -- this and hachigui, which you can get from webupd8team's PPA at []
  • Third is a reminder of the Qt4 problem that happens on Oneiric; running something like GoldenCheetah fails because of [] -- or maybe I should say maybe because of, because that bug is fixed and yet this fresh Oneiric install can't run GC. Never mind, install qt4-qtconfig and then run qtconfig-qt4 to select Cleanlooks to get it working.
  • There is so much stuff that I just know nothing about. Today, it's Xen. I'm actually looking for cases of things that exist in the kernel source tree but which don't build into a kernel itself; I know perf is one such thing, and kvm-tools might be another (see [] for Ingo's rationale of why more userspace should go in). In fact, there's a bunch of stuff in tools/ -- cpufreqtools, turbostat -- enough that in Ubuntu you get this all through the linux-tools packages. Outside of tools, nothing I can see. Well, there's scripts, but the distinction between tools and scripts is blurry to me -- FWICT scripts is for tools related to managing the kernel source tree, whereas tools is for userspace tools you'd use inside the OS. (Sidestep into coccinelle, which I had seen in-tree but didn't know what was -- it's a tool to describe and help apply a semantic change to source code) There's samples/ too, which contains example kernel and userspace code. Finally, there's firmware/, though that's legacy firmware pulled out from old drivers that are being moved to use the external linux-firmware package and the request_firmware() API. So there are quite a few things, but none of them seems to be a hypervisor (or a similar runnable hyperthing).
  • Anyway, short story is Xen itself, the hypervisor (in other words, the 500k-or-so /boot/xen-*.gz) is not in-tree. It is distributed standalone from [] and includes quite a bit of code that is forked from the kernel (obvious examples are bunzip.c and the acpi/tables stuff). Support for running the kernel as a Xen dom0 guest works out of the box as of recent kernel versions.
01.12.2011 SRAM Chains
  • Are not directional. At least the PC1070 chain I replaced on my F2C isn't! Apparently all the Shimano 10-speed chains are, though: []
  • Insightful link on the risks of sendmail virtusertable remote forwarding: []
  • My Nokia 3250 was driving me crazy asking me "permitir ao cartão sim o envio da mensagem" (which actually means "Allow SIM to send message?"). Turns out you need to disable Settings->Phone->Security->Confirm SIM Services, and it happens because it's a 64K SIM and this phone doesn't support something called ENS. More information here: []
  • Do you have an old server upgraded to Natty that's not getting its grub updated when you install a new kernel? Well, I did, and the reason was it was missing a single line in /etc/kernel-img.conf:
     postinst_hook = update-grub
    Thanks to Tim Gardner and Steve Langasek who helped track the problem down.
18.11.2011 Multi-homed pain
  • Upgraded Anthem to Oneiric; everything works well EXCEPT for the fact that some packets are ending up in the wrong interface. Specifically, if a request comes in to the interface which isn't the default route, it's not being replied to on the same interface. What's going on?
  • Turns out that SOMETHING happened in the 3.0 timeline that finally made it mandatory to specify rules that explicitly set the right routing table for replies on each IP address. So the fix was just adding these two lines:
     from lookup dsl-eth2 
     from lookup dsl-eth0
    That was really all that was missing. And, if you read the rules, you gotta ask yourself how it is possible that this worked before!
  • Of course, after I've found out what it is I find this site from 2007 explaining exactly this: []
  • Ran into bzr bug with our managed /etc. Damn it! []
16.11.2011 The Eyes!
  • I've finally booked eye surgery for next week; Monday I go in for exams and then Tuesday or Thursday is the actual operation.
  • Interesting research in healing of Lasik-cut flaps: [] -- damn, 2 years is a long time to wait for safety, though!
26.10.2011 Clearing out the attic!
  • Just deleted my ~/tmp, ~/Downloads, ~/devel/FREEZER today, so if I need it, remember to look at yesterday's backup ;-)
07.07.2011 A History of Tabs
  • I'm today surprised and mildly annoyed that the shape of Chromium's tabs are exacly the same as the tabs I designed in the first version of the tool uses internally.
  • Was stuck doing a nfs-common update on the diskless, which seems to keep breaking in the postinst phase as nobody really runs nfsroot at Canonical (wink), but found out that dpkg keeps all the scripts in /var/lib/dpkg/info, and you can just hack the file to make the postinst pass and forget about it for now. Yay!
06.07.2011 Xen and Natty
  • Don't seem to mix, we found out when upgrading dragon2 to Natty, unless you update /etc/initramfs-tools/modules to include platform_pci and xen_blkfront. Read all about it at []
05.07.2011 GRUBbed out on a Sandybridge
  • Since in the office we only use diskless machines which use gPXE, I end up not worrying about Grub very much. It turns out Grub2 has some weird traits, some great, some bad, and some probably a bit buggy.
  • For instance, with the default settings
    I can never seem to get access to the menu. I ended up adding a boot tone -- Super Mario no less at [] -- and then cranking HIDDEN_TIMEOUT to 1, which allows me to press two escapes during the tune and getting to the menu. The _QUIET thing is interesting; if you mark it false you get an ASCII countdown instead of a blinking cursor.
  • When I update-grub on this computer, I /must/ do a grub-install /dev/sda or I get into an infinite reboot loop without any recourse. Recovering involves using a USB boot image which fails into an initramfs prompt without trivial access to my RAID1, so I am not really interested in debugging beyond this.
  • This is Maverick's grub2, so it might be a solved-in-Natty thing.
  • Oh and, please note: if you have a Sandybridge CPU, Memtest86+ 4.10 will hang before starting up. You need to run at least 4.20; thankfully it's pretty easy to replace it -- download and stick it into /boot.
  • Mari's new box also suffers from [] so I'm also figuring out an updated e1000e driver for her. Ended up using DKMS to do the build, which isn't as hard as it looks. Just use a config like this:
     MAKE="make -C src/ BUILD_KERNEL=${kernelver}"
     CLEAN="make -C src/ clean"
    make sure you have the right headers packages installed, and grab the latest e1000e driver from [] -- funny thing was, I had it all set up when I installed the headers, and it Just Worked as part of the post-install hook. I did an update-initramfs -k all -u just in case, though.
  • Finally, this specific Sandybridge Maverick setup ended up with a horribly slow Xorg; turns out it's trivial to get it running fast by using the PPAs suggested in []
27.06.2011 A RAID Tale
23.06.2011 An ARM Machine List
22.06.2011 Eating those leftovers
  • Started the day by noticing the backup failed because the disk was full. Turns out I was a) backing up a bind-mounted /proc and b) had an extra copy of the root directory backup. Cleaning these up via rdiff-backup --check-destination-dir.
  • Updating Chromium to the latest beta fixed the hang I was seeing -- nice when it's easy to fix something like that!
  • The GC loader worked, but I needed to update /etc/group in the diskless system to get it to read /dev/ttyUSB0.
  • Worked around the weird upstart hang by checking for statd running inside diskless-mount, and used the same approach to avoid having to do the ugly sleep 6s inside statd-start.conf.
  • My GF account is unblocked.
  • Note to self: just rename .conf file extensions to something else if you want to disable them.
  • The only weird thing is that I asked this machine to halt and it.. seems to be hanging; or at least, taking a real long time. Okay, it seems to be that initctl is telling portmap to shut down, but it isn't dying, or maybe it's not even getting that far. I change to do an emit --no-wait to work around this and move on.
  • If you're using nautilus on an NFS serve, for instance, looking at your home directory, you may find it hangs to a horrible halt. The problem is related to apparmor: [] -- the workaround is pretty simple, adding the nameservice stanza to evince-thumbnailer.
  • References you need when doing this sort of work: [] [] []
  • Finally, the command you want when you want all your UUIDs neatly presented: blkid(8)!
21.06.2011 Natty boot leftovers
  • Sometimes, I'm getting a weird hang at bootup that says:
     IP-Config: no response after 3 secs - giving up
     IP-Config: eth0 hardware address XXX mtu 1500 DHCP RARP
    Online reference: []
  • I've just noticed that cups and ssh get stuck in "starting" states; wonder what's causing that. SSH at least starts up okay at first, though if I stop and then start it, it hangs. I thought it had to do with both being "respawn" jobs, but acpid is as well and I can start and stop it without issues. Does this have to do with the /state stuff I made wait on both those services... or are they just being very very slow?
  • I wasn't logging stuff properly; turns out my rsyslog.d directory didn't have a proper 50-default.conf file, and nothing was getting logged out. But it is also being affected by this weird state blockage I am pointing out above.
  • Chromium won't load any pages. Gah.
  • Need to check if the PowerTap loader in GC still works.
  • Need to check if my GF account is unblocked.
  • rsyslog whines that xconsole is missing, but runs fine; Ubuntu bug: []
  • The backup failed because the external drive ran out of space. Guess it's time I went to bed :-/
20.06.2011 Updating Root NFS to Natty
  • I'm in the process of updating our default root filesystem to Natty. I started out a bit stuck on this because our previous filesystems used modified bzimages (XXX: which tool?) to indicate we were booting from NFS; reading through [] I just needed to update the initramfs.conf to indicate BOOT=nfs and regenerate the initramfs'. The server IP address and root-path is provided through DHCP, and this change AIUI tells the initramfs to look there.
  • Now, /dev/shm was coming up with the wrong permissions -- it's meant to be 1777, but wasn't. I can't quite figure out why this was happening, but it has to do with some leftover in /etc/init because I started from a clean slate and it's not happening now.
  • Next, when we boot NFS we get hung in upstart; if I use the alt-sysreq key to kill everything I notice that a) no portmapper is running and b) neither is statd. If I try and run the portmapper manually, it just exits without telling me what's going on. A strace tells me that a) /var/run/ can't be written to (sure, the filesystem is read-only) and /dev/log isn't running.
  • So first, let's see if we can mount that filesystem read-write up front. I try this first by putting an entry in the rootpath being served up by dhcpd, but I get nfs-premount complaints suggesting that it doesn't like the ",rw" suffix. Instead, I put an "rw" into the gPXE script commandline and it seems to work.
  • To check, I created an upstart script that simply spawns bash:
     description^I"BASH for the power hungry"
     start on startup
     # Output to the console
     console output
     # Tell upstart to wait (see
     # [] for more)
     # Run the command
     exec bash
  • And indeed, I can now write to the root filesystem. Great. Now on to debugging why portmap and statd don't run when they should. I can't seem to wrap my head around the statd-mounting and statd interaction, so I'm trying to break it into pieces. Now, I expected the following script:
     start on mounting TYPE=nfs
     exec start statd
    would block the NFS mount from going through until statd was running. But either start is asynchronous, or it doesn't block at all. I guess it's because statd takes a while to actually get going, and meanwhile the "mounting" event has completed and mountall. My workaround looks like this:
     start on mounting TYPE=nfs
     console output
     normal exit 1 2
         start statd
         # This apparently is necessary to ensure the statd run
         # completes; it's a hack but it seems to work more reliably than
         # anything else
         exec sleep 6s
     end script
    and so far it seems to work okay.
  • I then added in scripts, in the following order: rc-sysinit, udev-fallback-graphics, ssh, dbus and gdm. Reboot.
  • Worked. Added now rc and rcS.
  • Noticed I should have brought in mounted-varrun and the other mounted-* bits earlier. Done, though I question how useful mounted-tmp and mounted-dev are in this diskless setup.
  • Brought in a few more hopefully harmless bits: console-setup, dmesg, hwclock*, irqbalance, control-alt-del and module-init-tools.
  • Pulled in a slightly modified ypbind startup script and made gdm depend on it. The script comes from [] though I can't quite get it to work with the IFACE=!lo check that it uses; I just dropped that check which should work okay.
  • I dropped the mountall-net script which seems to be a hack to work around the lockd issue I think I worked around in a simpler (if slower) way.
  • Started using bzr to control the directory as it's a much better match than this ranting blog entry ;-)
  • I'm thankful for Johan's hint to radeon.modeset=0 on the kernel commandline which (in combination with disabling udev-fallback-graphics.conf) allows me to actually see what is being spewed in the log. I'd love to have upstart just log all the events to a file..
  • Overall, the main issues with upstart racing seem to be around the time the daemon starts up and is actually ready to handle events, and to a lesser extent around the complexity of the state transitions themselves. In our case, while we hooked on mounting to start statd, running the statd.conf script instantly allowed mounting to proceed, which would fail because statd wasn't yet running (why 5s of waiting addresses that, though..) Or in the case of NIS, which is running but not enough for GDM to actually show the list of users.
  • Spend a few minutes figuring out why file locking was broken (again). Turns out that a) /var/lib/nfs needs to have the sm and sm.bak directories mode 700 and writeable by the user running statd. Who, incidentally, is taken from the owner of /var/lib/nfs, and which was incorrectly set to syslog on this system (and there was actually no lockd user in the passwd file, oops).
  • It's unlikely postfix will actually work without /var/spool set up for it. But how do you get it set up initially? Easy -- just create /var/spool/postfix; the rest gets set up by postfix itself!
  • The diskless boxes write to /var/log early in the boot process; I've worked around this by mounting a tmpfs there and later on mounting directories under /state to handle that more gracefully. Looking at the tmpfs /var/log generated without /state. up to gdm running, so far what's written to it is:
     total 336
     drwxr-xr-x 2 root root     60 Jun 20 21:02 ConsoleKit
     -rw-r--r-- 1 root root 108599 Jun 20 21:02 Xorg.0.log
     drwxr-xr-x 2 root root     80 Jun 20 21:02 gdm
     -rw-r--r-- 1 root root    292 Jun 20 21:03 lastlog
     -rw-r--r-- 1 root root   1615 Jun 20 21:02 pm-powersave.log
     -rw-r--r-- 1 root root 208615 Jun 20 21:02 udev
    I've stocked this in 00early-log.contents files in the directory for later debugging.
02.06.2011 Bootable DOS USB Drives (for BIOS updates)
  • Have this annoying issue of having to update a BIOS, but not having a bootable DOS USB stick to actually run the update? Well, I did, and I spent a LONG time reading through various confusing blog posts until I stumbled upon one that gave me two important nuggets:
  • First, use FreeDOS
  • Second, use makebootfat (see [] for a manpage)
  • This actually translates into a very small number of steps. First, you download the fullcd FreeDOS image from [] and then you do something like this (watch out for sdX below):
     # You'll need to change only this line
     # Set up your DOS filesystem
     sudo mount -o loop fdfullcd.iso /mnt
     mkdir /tmp/dosboot
     cp /mnt/freedos/setup/odin/kernel.sys /tmp/dosboot
     cp /mnt/freedos/setup/odin/himem.exe /tmp/dosboot
     cp /mnt/freedos/setup/odin/ /tmp/dosboot
     cp /mnt/freedos/setup/odin/more.exe /tmp/dosboot
     # Set up a config.sys
     cat << __EOF__ > /tmp/dosboot/config.sys
     # Get the FAT boot sector
     cd /tmp
     unzip /mnt/freedos/packages/src_base/ source/ukernel/boot/fat16.bin
     mv source/ukernel/boot/fat16.bin .
     # Do it
     sudo makebootfat -X -o $DEVICE -b /tmp/fat16.bin /tmp/dosboot/
  • I'm probably overdoing it by using HIMEM, and selecting only a few files from the odin/ directory; you might be able to avoid the config.sys entirely, and just use the whole /mnt/freedos/setup/odin/ as makebootfat's argument instead of the dosboot thing.
  • The -X is the only gotcha. I think you need to use it because you're using the fat16.bin file (for compatibility, maybe?)
  • It's really that easy. I have no idea why people complicate this so much. The only other post I've seen which uses this strategy is [] but it is still not enough of a cookbook for me. I suspect there's some issue with BIOS compatibility, and that my method doesn't work for all USB drives or computers, but it does work for me. For reference, the original blog post that hinted me on this is at []
  • And wow, FreeDOS really does boot fast.
24.05.2011 Mutt, vim and auto-completion
  • I recently changed my mutt options to use autoedit, which is cool because it puts me in vim very quickly to reply to email, but not so cool in that typing in addresses becomes a lot harder. Well, today I spent an hour working up something that autocompletes the addresses when I type tab in those fields. Enjoy my quick hack here: []
22.05.2011 From 1TB to 2TB
  • Mari's computer needs lots of disk space because it's where she collects the photos and pictures she publishes on [] -- and photos are huge. This weekend I had to move the files from the existing dual-disk RAID-1 to a new pair of disks.
  • It's a long story, but to shorten it: a) I used rdiff-backup to back up the actual filesystem, except for the images b) unfortunately, the only external drive I had that was big enough to hold all her images was formatted as vfat -- I knew I was going to regret it c) I ended up just rsyncing the images to the vfat drive which worked okay because there were no permissions or ownership to care about d) I had to use a live-usb image to actually set up the new disks and copy the data across and finally e) I had a hard time getting grub to work, and I ended up stuck in the grub rescue> prompt once. When that happened, I found [] to be invaluable, so if you ever run into that prompt yourself and feel lost, just read that page. Once I had booted into the system once, grub-install and update-grub fixed it permanently. Two big hammers, but they fix things just like the old /sbin/lilo did ;-)
17.05.2011 Can't Mailman and LinkedIn just be friends?
  • We run a number of mailing lists at Async; quite a few of them are related to Stoq, our made-for-Brazil point-of-sales-and-everything-else management sytem. The lists are busy with lots of users that subscribe to ask about features and workflows and it is always cool to see the interactions there. However, there's one thing which really drives me nuts, and that is that because of web-based email integration, LinkedIn thinks it's cool to send email to our mailing lists. Well, it's not cool, but mysteriously, Mailman doesn't block the emails either!
  • The reason this happens is a subtle Mailman behaviour that I suspected yesterday but which Barry Warsaw confirmed today: by default Mailman also looks at the Reply-To header to check whether the sender is subscribed and therefore allowed to send mail to the list. The email we got had headers like this:
     From: Foo Bar via LinkedIn <>
     To: Bar Baz <>
     MIME-Version: 1.0
     X-LinkedIn-Template: invite_member_23
     X-LinkedIn-Class: INVITE-MBR
     X-LinkedIn-fbl: s-qakeuW-Xh7nGNqQ4F7rGOINKZVY7HNzQuIeYRlX2tnWAO4zNKkm
     Subject: [Stoq-users] Foo Bar quer manter contato no LinkedIn
     X-Mailman-Version: 2.1.13
     Precedence: list
     Reply-To: Foo Bar <>
  • The email is actually in a discard_these_nonmembers configuration rule for the stoq-users mailing list, so it should be getting discarded. But because the Reply-To address is of a list subscriber, Mailman thinks that the email is truly being sent by the subscriber, and not by a proxy like LinkedIn. It happily ignores other sender filters and delivers the spam. Ouch!
  • To fix this, you need to update /etc/mailman/ and set the SENDER_HEADERS variable; the default value (in /usr/lib/mailman/Mailman/ is:
    SENDER_HEADERS = ('from', None, 'reply-to', 'sender')
    I ended up using simply:
    SENDER_HEADERS = ('from', None)
    and then restarted Mailman. And now I'm waiting to see what my moderation queue looks like -- hopefully it will prove that the change worked! Barry tells me that in Mailman 3 this behaviour is clearer, and that they also have a debug mode planned which would allow us to send a probe email to find out why Mailman is doing what it does. But for now, problem solved!
  • (Launchpad, btw, also does this impersonation trick in order for its bug mail interface to work -- but because of how accounts are set up we don't really make it easy for you to send unwanted mail to a mailing list)
16.05.2011 shirt sizes, aggregate totals and SUMIF
  • I produced a spreadsheet in Google Docs today that was a pretty simple mapping of name and shirt sizes to quantities; something like this:
     foo S 3 
     bar M 5
     baz S 2
     poo L 1
  • I wanted to include an aggregate sum of each individual size; something like:
     S 5
     M 5
     L 1
  • It turns out that the SUMIF function is what I want. You just need to get the syntax right; I used, for each of the sizes, a cell like this:
    =SUMIF(B2:B31, "=S",C2:C31)
    That formula will check column B for cells that contain the string "S"; where they do, it will sum the numbers in the corresponding row of column C, which is exactly what I wanted.
  • There might be a way to do this without having to actually code a cell for each total. But finding out how eluded me in the five minutes I had for this task, so SUMIF remains as my favorite solution for today.
09.04.2011 MSN on Pidgin on Maverick
  • On Mari's computer, Pidgin doesn't like MSN anymore; it reports
     1 account was disabled because you signed on from another location
  • I've seen this mentioned in a few places, but nowhere as a big deal for Maverick users: [] [] [] [] []
  • I /think/ the problem is just that Maverick's Pidgin is old; as has happened before, the MSN protocol was updated and the implementation wasn't. At least upgrading pidgin to the version packaged in their release PPA (see [] for details) was enough to solve the problem permanently.
08.04.2011 Path MTU Discovery mysteries
  • Again, facing P-MTU-D issues on my secondary outbound interfaces, and I don't think it's not the fault of the upstream provider (well, I tried with both, and maybe they are both broken). Symptoms are the usual large-transfers-get-packets-dropped-silently-when-incoming.
  • It could be a network card issue, because I'm seeing errors only on that interface:
     RX packets:3058114 errors:14691 dropped:0 overruns:0 frame:14691
  • And I'm fascinated by the reply Stephen Hemminger gives at []
  • But for now the workaround is to use the good ole MSS clamping cheat covered at [] (how did that disappear from my iptables rules, though..)
  • For other possible problems, look at []
  • In updating the subnet entries, I cheated on the boolean math and used [] to calculate the masks and addresses, which is pretty neat.
06.04.2011 Building GoldenCheetah 3.0
  • Midnight project. Trying to build GoldenCheetah's 3.0 branch requires lots of package scavenging, installation and some makefile hackery. But when it does build:
     kiko@gasolinux:~/GoldenCheetah/src$ ./GoldenCheetah 
     Cannot open qollector_interpret program, available from
     QMetaProperty::read: Unable to handle unregistered datatype 'RideItem*'
     for property 'RideMetadata::ride'
     QFileSystemWatcher::addPaths: list is empty
     Segmentation fault
  • Sigh.
  • A make clean and make later, it seems to kinda work though! I am getting weird results on the graphs for imported rides, so I need to test next by downloading from the actual PT head to see what I think.
15.10.2010 Full CUPS and an empty lsusb
  • Mari's printer won't print. It's not the second time this has happened, but I keep forgetting what causes it. The symptom is simple: you ask the print dialog to print, and nothing happens. The printer properties screen says "/usr/lib/cups/backend/hp failed". The CUPS error_log says
     D [21/Nov/2010:12:30:49 -0200] [Job 43] prnt/backend/hp.c 745: ERROR:
     open device failed stat=12: hp:/usb/PSC_1400_series?serial=BR64H3G1K704BM
    And the final, odd hint is that lsusb just returns you to a shell prompt with no output. Do you know what the problem is?
  • It's related to working around a PowerAgent bug I wrote about a few months ago. To work around a Java library's fixation on /dev/usb I added a link from /dev/bus/usb to /dev/usb, and forgot it there. What happens then is funny: for some reason when plugging in the printer (or returning from suspend, it turns out) udev wants there to be a /dev/usb/lp0 entry, and since /dev/usb is linked to /dev/bus/usb, it ends up creating the lp0 node in /dev/bus/usb/lp0 which in turn causes lsusb to break, since it doesn't expect to find any device nodes on the first level of /dev/bus/usb. Delete the /dev/usb link and you're back in business. Pity it took me 20 minutes today to remember this!
  • PS: the same sort of error hit us on Anthem, our server, a few weeks later -- the hp.c backend complaining about open-device-failed. It ended up also being an issue with USB connectivity -- the USB hub we're plugging the printer into is just flaky.
14.10.2010 For a rainy Saturday
13.10.2010 The keyboard layout that won't go away
  • Is it happening to you too? Ubuntu won't let me get rid of an incorrect keyboard layout, and in fact defaults to it!
  • The problem is pretty complicated, but it's related to GDM, .dmrc and /var/cache/gdm/*/dmrc files. Or at least I've figured this from the various places it's been reported: [] [] [] []
  • I deleted .dmrc, /var/cache/gdm/kiko/dmrc, logged out, logged back in and the problem is gone. But I think there's definitely a bug in there..
12.10.2010 Anthem now 64-bit
  • After a whole day of work Anthem is now Maverick 64-bit installed on a simpler set of RAID-10s. Issues that we hit so far:
  • []
  • []
  • A weird long hang of sync and dpkg when under heavy I/O load that might a tuning issue or something else
  • No /etc/init.d/iptables to restore my firewall rules, but iptables-persistent saved the day.
  • Cold bootup via NFS to GDM screen in 55s; not bad IMO! However, I'm still stuck with a /var/spool filesystem that still won't mount at boot, though in recovery mode a mount -a fixes it. Mystery!
  • Note to self: /proc/sys/kernel/domainname can't be set to anything but the correct NIS domain, as ypbind will always use it (and not read files or anything else to get it right)
09.10.2010 From Jaunty to Maverick in many painful steps
  • Upgrading our serveraxis-hosted server from an ancient Jaunty to Maverick has proven to be trickier than I thought. Here's the list of problems:
  • The kernel we boot off is a Xen guest kernel and it's hosted outside of the image, so when I upgrade to Karmic mountall starts failing all over because the kernel is too old: [] [] []
  • Once we boot we get a recovery console. I manage to log in by using serveraxis' excellent webconsole, but to get the paste working there requires some tricking Firefox into letting JS apps access the clipboard: [] -- in particular you need to use the about:config trick for granting access to signed scripts.
  • Once there it's possible to bring network interfaces up and even to start sshd, but logging in via ssh doesn't work because there's no /dev/pts, which you can easily fix by just mounting it: []
  • I decided to contact serveraxis support about the kernel and continue recklessly upgrading with a non-booting system in the hope the kernel can get sorted out separately; apparently I'm not the only one and they've made at least one customer happy: []
  • When upgrading to Lucid, the installation fails to install the Lucid version of mountall -- again, because the kernel is too old, though this time it's because it triggers a tar bug: [] []
  • I managed to wget mountall and a new tar, but the new tar package doesn't install because of the tar bug. Not to worry: ar x tar_1.23-2_amd64.deb and grab the tar binary in the data.tar.gz, putting it in /sbin. Got the mountall package installed and apt-get -f install && apt-get -u dist-upgraded away, which brings us all the way to Lucid.
  • The reboot into Lucid was as eventful as the one to Karmic, but I'm now a pro at fixing it up so I can actually upgrade fine.
  • The server has been mysteriously halted as I was using it; either this is routine maintenance or somebody's doing something to the server for me! And indeed, here it is:
     kiko@dragon:~$ uname -a
     Linux dragon #0 SMP Mon Sep 20 18:32:22 CDT 2010 x86_64 GNU/Linux
    ServerAxis absolutely rock -- they are actually a bit scary even!
  • Finally, until the reboot happened I was getting for a brief moment a compatibility issue with dircolors that is best explained by this bug: []
  • Back to where I started: getting bitlbee-plugin-skype working on Dragon so I can use it to talk to people without proper chat clients. Pulled and installed the two packages from sid: [] []
  • Then installed a vnc4 server and client and ran skype manually on the server; after some rock and rolling managed to get it to log in and run, and the skyped configuration (once you understand it) isn't that bad in fact. The thing which I wasn't clear about is that a) you need to have skype running and b) running skyped is what will cause you to be prompted to allow Skype4Py to access skype. But now it's all clear!
  • Once the installation and skype were happy through xvnc, I installed xvfb and just ran skype and skyped with the display set appropriately; it seems to just work which is nice after a whole afternoon of things that just didn't ;-)
  • Found out this little command
     account set skype/display_name "John Smith" 
    That seems to work with MSN as well. Interested in knowing what it does (and if it's persistent across connections and Bitlbee restarts..)
09.09.2010 Memory and Amnesia
  • Upgrading a desktop to 4GB. I won't really believe that somebody can actually need four gigs of RAM on a desktop, but Firefox and OpenOffice keep surprising me as their appetite for memory grows! Anyway, the important thing to know about when doing this upgrade is that:
  • You really want a 64-bit installation if you are using more than 4GB of memory; you can use PAE if you want to stick with 32-bit, but I'm not entirely sure it's worth it.
  • Low-end motherboards, including those using the Intel i945 chipset, don't really support much more than 3 gigs of ram; they have I/O addresses within that address space, and they lack memory remapping functionality to make it work. [] has the skinny, and [] discusses the actual i945 chipset. There's a blog post at [] that presents it nicely.
  • Meanwhile, Frictional Games released a pretty amazing game called Amnesia -- and they have a version for Linux! Spend your US$20 wisely here: []
25.08.2010 unclutter hurts
  • I have two annoying things bothering me in Lucid. First .xsession-errors fills up to gig-size every other day with some weird
     "Window manager warning: Got a request to focus 0x2821bae (Terminal)
     with a timestamp of 0. This shouldn't happen!"
    messages. Second, if my mouse is highlighting a window and I alt-tab to another one, every other second or so the focus would shift to the original window. That essentially drove me CRAZY. So today, after having to delete the file for the Nth time because it was at 2GB, I found it that the culprit is UNCLUTTER!! [] has the scoop, but if you want a recommendation from me, it's "apt-get remove --purge unclutter for now. I think it's just buggy -- the idea is a nice one, though I'm not sure I want an extra daemon just for that functionality -- in particular because it seems that the mouse pointer blanks over gnome-terminal when I'm typing anyway.
  • Bonus Lucid hint for the day: if your sun java plugin is installed but your firefox or chromium don't see them, try Johan's magic combo:
     update-java-alternatives -l
     update-java-alternatives -s java-6-sun
06.08.2010 A Logitech DiNovo Edge dongle's embedded and HCI modes
  • I have a DiNovo edge and think it is absolutely fantastic, except when it stopped working on my way to my Lucid upgrade. What happened? The problem is that to Windows users the dongle normally works in embedded mode, meaning it appears to the system as a regular USB keyboard and mouse. Many Windows users hate that behaviour, and would rather the dongle behaved as a regular bluetooth adapter. However, Linux users have the flexibility of choosing in which mode they want the adapter to work, and the magic of selecting them is done through hid2hci, which is run by udev when the device is plugged in. Now it used to be that you could enable or disable hid2hci by fumbling in /etc/default/bluetooth; with the inexorable move to udev, however, on Lucid this behaviour is now hardcoded in udev rules and by default hid2hci is run, which means the keyboard only works if you perform a bluetooth pairing exercise. And since it's a keyboard, that exercise can prove pretty challenging!
  • The command which is run when the BT dongle is plugged in is pretty simple:
     /lib/udev/hid2hci --method=logitech-hid 
    Note the path points to the hiddev0 directory for the device in question. Note also that it seems you can't revert back to embedded mode once the command is run, for some reason.
  • People that are running into this problem on Lucid should know that it's possible to have the dongle still work in embedded mode as long as the hid2hci call in /lib/udev/70-hid2hci.rules for the keyboard isn't run. When embedded mode is active, an lsusb run will list 3 devices like this:
       Bus 004 Device 017: ID 046d:c714 Logitech, Inc. 
       Bus 004 Device 016: ID 046d:c713 Logitech, Inc. 
       Bus 004 Device 015: ID 046d:0b04 Logitech, Inc.
    When you issue the hid2hci run, a 4th device appears, representing the mini-receiver in HCI mode:
       Bus 004 Device 024: ID 046d:c709 Logitech, Inc. BT Mini-Receiver (HCI mode)
       Bus 004 Device 023: ID 046d:c714 Logitech, Inc. 
       Bus 004 Device 022: ID 046d:c713 Logitech, Inc. 
       Bus 004 Device 021: ID 046d:0b04 Logitech, Inc.
    In this mode, you'll need to connect through bluetooth. Note that I haven't found that works reliably on my powerpc mac mini, though it seemed to on a little netbook. The simple workaround seems to be to avoid bluetooth mode by commenting that udev rule out, and keep an eye out for changes in that area when you upgrade.
  • Embedded mode is kinda fascinating; from the OSs perspective it's just a keyboard and mouse that are plugged into a hub; there's no bluetooth anything. When you plug the dongle in, you get the usual dmesg spew of USB information. Here's what dmesg is actually telling you:
  • A USB hub is found; 3 ports detected (of which one is the hub, device 046d:0b04)
  • A keyboard (046d:c713) is found, though the device string identifies it as a "Logitech Logitech BT Mini-Receiver"
  • A mouse (046d:0b04) is found, with the same device string as above.
  • You can play with the dongle a bit when it is in HCI mode, by the way, with hcitool; here's some info on Johan's macbook, and on my Nokia e51.
     kiko@gasolinux:/lib/udev/rules.d$ hcitool dev
         hci0    00:07:61:E3:38:E0
     kiko@gasolinux:/lib/udev/rules.d$ hcitool inq
     Inquiring ...
         00:23:12:39:44:1F   clock offset: 0x1b9d    class: 0x38010c
         00:22:FC:4D:65:47   clock offset: 0x618c    class: 0x5a020c
     kiko@gasolinux:/lib/udev/rules.d$ sudo hcitool info 00:23:12:39:44:1F
     Requesting information ...
         BD Address:  00:23:12:39:44:1F
         Device Name: Johan Dahlin’s MacBook Pro
         LMP Version: 2.1 (0x4) LMP Subversion: 0x21b4
         Manufacturer: Broadcom Corporation (15)
     kiko@gasolinux:/lib/udev/rules.d$ sudo hcitool info 00:22:FC:4D:65:47
     Requesting information ...
         BD Address:  00:22:FC:4D:65:47
         Device Name: Kiko o substituto
         LMP Version: 2.0 (0x3) LMP Subversion: 0x6cc
         Manufacturer: Cambridge Silicon Radio (10)
    If you're in embedded mode, that won't work of course:
     kiko@gasolinux:~$ hcitool dev
  • References to this problem include [] [] [] [] []
05.08.2010 RAID1 Lucid desktops
  • I followed most of the advice provided by [] in installing a RAID1 array on a Lucid desktop, and in the end got to a booting system, but there were some things that I thought were worthy of note:
  • I didn't have network for the installation, so I just put the mdadm package on a USB stick and dpkg -i'd it into the system.
  • Perhaps for the reason above, upon first boot I ended up stuck in initramfs because my /etc/mdadm.conf had no ARRAY entries. I am still a bit surprised that we actually need that file to boot (see my posting of 2009-12-09 for more RAID-on-Ubuntu woes), and I am not entirely sure why the --scan option to assemble doesn't work, but I had to enter three ARRAY lines into it beore it actually worked. In the process I learned about the convenient -m flag to mdadm -A.
  • You can ask the installer to install GRUB on the MD device, which causes it to be installed to both drives, which is what you wanted.
  • I'm not sure I'm entirely happy with the speed of the desktop on the drives I have, though. Maybe it's just that it's RAID1. Interface-wise I know the drives support SATA-II signalling:
     kiko@hellokitty:~$ sudo hdparm -I /dev/sdb
            *    Gen1 signaling speed (1.5Gb/s)
            *    Gen2 signaling speed (3.0Gb/s)
    But I'm not sure this ICH7 motherboard supports 3.0Gb/s..
02.06.2010 iwlagn disconnects.. then connects.. then disconnects.. then
  • For some reason, since I've upgraded to Karmic and through Lucid, my x61 and Mariana's x61s have the same problem: they keep dropping their connection to our DD-WRT WRT54G AP, with the same pattern:
     [35502.041062] No probe response from AP 00:40:10:10:00:03 after 500ms, disconnecting.
     [35503.958234] wlan0: direct probe to AP 00:40:10:10:00:03 (try 1)
     [35503.968728] wlan0: direct probe responded
     [35503.968738] wlan0: authenticate with AP 00:40:10:10:00:03 (try 1)
     [35503.970691] wlan0: authenticated
     [35503.970731] wlan0: associate with AP 00:40:10:10:00:03 (try 1)
     [35503.973310] wlan0: RX AssocResp from 00:40:10:10:00:03 (capab=0x431 status=0 aid=1)
     [35503.973318] wlan0: associated
     [35622.060151] No probe response from AP 00:40:10:10:00:03 after 500ms, disconnecting.
     [35623.973605] wlan0: direct probe to AP 00:40:10:10:00:03 (try 1)
     [35623.976226] wlan0: direct probe responded
     [35623.976234] wlan0: authenticate with AP 00:40:10:10:00:03 (try 1)
     [35623.979137] wlan0: authenticated
     [35623.979177] wlan0: associate with AP 00:40:10:10:00:03 (try 1)
     [35623.981630] wlan0: RX AssocResp from 00:40:10:10:00:03 (capab=0x431 status=0 aid=1)
     [35623.981633] wlan0: associated
    ad infinitum, every 120s. Seems like the only people that have this so far are at [] and [] and [] but neither of them have 4965AGNs like our Thinkpads do.
  • I've found a bug at [] but it's not really the same issue I think; at any rate there are a number of patches attached to comment 113 there, so it might be worth looking through. And the guy at [] seems to have the same problem (though he's posting to a bug which doesn't describe the same symptoms) so let's try disabling ipv6 (though it makes no sense to me) since it is my only lead... no, of course that doesn't work. Oh well, let's keep looking.
  • So it /could/ be the issue at [] which is caused by network-manager rescanning every 2 minutes and the driver hanging while the rescan happens. But one thing that strikes me is that it only happens with the access point we use at home -- in the office it works just fine.
  • I now think the reason this happens is because there is some oddness with the WRT54gv6 that I have at home. It's configured in repeater bridge mode, and that's where we have problems. I've noticed that it is often out of memory and has difficulty answering to web requests; it seems this is more than just a wifi adapter driver issue. I've since replaced that AP with a WRT160NL and it is working much more reliably; I also no longer get the driver hangs and error messages I was getting above. It seems to be a weird interaction between the AP and the wireless card, but it's not entirely clear what it is.
  • Later update: if dmesg tells you "Firmware error" then check out [] which is another one of those ironic bugs that are a) hard to identify b) affect lots of people. As a workaround you can enable swcrypto (whatever that means!) and/or try grabbing the older firmware at []
01.06.2010 Reverse Path Filtering
  • We have a multi-homed server that chooses where to send traffic depending on its content; web traffic goes through one network, VoIP over another, and so on. One thing that has always left me surprised is the fact that we log so many martian packets on it with rp_filter enabled -- if reverse path filtering is desireable then why can't I use it here.
  • Turns out that I just don't understand RPF well enough. I used to think it was just going to drop packets that are from non-routeable RFC-1918 addresses and other obviously broken sources, but in fact it is more than that; the router when receiving a packet does a route check on the source address. It then will only forward the packet to another interface /if/ the packet was received from the interface it would return it to according to its routing tables. So if I receive a packet on interface A from a source address S destined somewhere non-local, that packet will only be allowed through if a packet destined to address S would be routed to interface A.
  • This works okay for "normal" routers, since there is only one path which packets should go through. but on our traffic-balancing setup it ends up being too simplistic. For instance, we have a default route set up to our primary network interface, and if /any/ packet arrives on our secondary interface, it gets dropped: the default route is on the primary interface, and since we use firewall marking to determine the route, the reverse path filtering check never realizes the routing table would have decided differently. I found the answer at [] pretty interesting in confirming that, and there's even a patch that fixes this up at [] but it was never applied as there was a design concern; the feeling was that netfilter could handle its part of rp_filter checking. If you care about how it's implemented, check out fib_validate_source() in net/ipv4/fib_frontend.c but it's not very easy reading unless you know that corner of the kernel fairly well.
  • Incidentally, really good commentary on forging of source addresses and what routers should do about it can be found here: []
30.05.2010 DD-WRT Wireless Bridging
  • Spent about 3h today trying to get my wifi bridge operational again. Here are some of the stumbling blocks I ran into in the hope they are useful to anybody using DD-WRT on a pair of WRT54g boxes from Linksys:
  • I'm using DD-WRT v24-sp2 13064 on both main AP and repeater, but the repeater is using the micro flavor, since it's a v6 box.
  • I wasted about 2h on the fact that the repeater would not join the main AP's network, and would never show up as a client in the Wireless Nodes listing in Status_Wireless. After trying pretty much every single configuration known to man, Johan convinced me to do a hard reset of the main AP, and guess what? It worked! @#!@*#*@! I would never have guessed this, because at least in theory the main AP has nothing to do with the repeater AP, but something was cached in the configuration that survived across reboots. So if you find yourself stuck where the repeater just accumulates TX errors and never finds the main AP, try doing a hard 30/30/30 reset of the main AP. Even if the documentation misleads you into thinking otherwise.
  • WPA Personal encryption does work, but if you set the advanced configuration option "Authentication: shared key" it stops working, and the password MUST be the same in the main and virtual interfaces. In WEP mode, which is what I was using before, the passwords didn't have to match, which I really liked. There might be something in the hardware which limits this -- I don't understand enough about how wireless encryption and DD-WRT's wireless bridging mode is implemented.
  • I have a pair of higher gain omnidirectional antennas but I'm not convinced they work very well, nor do I understand how or whether DD-WRT's auto mode for the antennas works. I'm going to graph packet loss between houses now and do one change per two evenings over this week to figure out what can be better.
  • There are many advanced config settings to tweak, but for now I'm starting with the same configuration on both, using a G-only network.
15.12.2009 Evolution and Google Calendar
  • This works the way you'd expect, just adding a new calendar in Evolution, and it syncing automatically to the calendar applet. But there are a few caveats to it:
  • Google provides you with https:// URLs; Evolution expects them to start with webcal:// and will unhelpfully tack on the method in front of the URL for you, so you end up with something that starts with [https] -- yuck. Just delete the https:// in front of the address and everything works (though I am surprised it does, as I'd expect it to be SSL-only -- oh well). I didn't use Secure connection and it still worked -- don't know if it should but I'm not pretending to know what I'm doing here!
  • If it doesn't work, I bet your system provides settings for a network proxy. For some reason, this doesn't work for calendaring -- perhaps [] has something to do with it -- but the workaround is pretty easy, just don't use a proxy for Evolution, or provide details there manually.
  • Whatever you change, it appears you have kill the additional processes Evolution spawns to actually have them pick up the changes. At least I did knock out evolution-data-server and evolution-alarm-notify for good measure.
  • If something goes wrong, you get notified of a problem with the ics URL through the statusbar, which might be a bit unexpected -- if you click on the icon in the statusbar you get a dialog with more details -- in my case, a connection problem.
10.12.2009 WCDMA and UMTS
  • For Brazilians, the important thing to remember is that 3G frequencies vary according to operator and location, and [] tells you more about that sort of thing. In general, for my operator, Claro, north american versions work, but that means no E52 for me, since the US version isn't out yet.
09.12.2009 mdadm, USB and SCSI, UUIDs and initramfs-tools
  • We've had a problem with our Ubuntu server since last year when I bought an external USB drive to handle rdiff-backups: when the bootup process starts, if the USB drive is plugged in, the RAID-5 arrays we have get confused because the drive names change -- normally sda is the first SCSI drive, but since probing is asynchronous, when the USB drive is detected first it's the external drive and mdadm fails into an initramfs shell. That's not nice!
  • A separate problem we were also running into was that the spare partitions, which normally live in /dev/sde, were not being automatically added to the array (even when the USB drive wasn't connected and the bootup succeeded) so I had to add an ugly rc.local command to add them in. This is similar to the issues found at [] and [] but not quite the same, as mdadm.conf's DEVICES entry actually included the spare drive.
  • So from 7pm to 11pm yesterday Johan and I worked on figuring out exactly what was causing this. And it turns out that it was a combination of two things, both related: the mdadm.conf ARRAY definitions, and a race condition during the initramfs process between the RAID autostart and the module-based kernel hardware probing. Here's how it works.
  • Ubuntu starts and mounts its RAID arrays in an initramfs. The initramfs image is packed with a set of shell scripts; the image is assembled from a bunch of code in /usr/share/initramfs-utils, primarily scripts with additional hooks that are run during the initramfs image generation and which modify the image itself. Anyway, while in the initramfs, the following happens:
  • Between initramfs' init-top and init-premount phases, it loads all essential modules. It knows to load the RAID modules through the work of hooks/mdadm (installed by the mdadm package), which adds them to the essential module list inside the initramfs. It knows to load the USB and SCSI modules because by default Ubuntu uses MODULES=most in its initramfs configuration.
  • Now, module loading order is deterministic, but in Ubuntu the SCSI probing is set to asynchronous (via the kernel option CONFIG_SCSI_SCAN_ASYNC=y; see [] for details) the actual drives show up as the bus scans are finalized.
  • Meanwhile, in init-premount, a udev script fires off udevd which goes away and kicks off 85-mdadm.rules' RAID assembly, using mdadm --incremental. This is a pretty magical mdadm mode, and a read through the manpage section is pretty interesting.
  • Also in init-premount, an mdadm script checks for degraded RAID and LVM devices, and figures out whether or not to try and run degraded arrays. It does this by scanning the RAID superblocks using mdadm --misc --scan --detail.
  • After loading the modules, a script is run to mount the local filesystems; on non-NFS systems this script is called "local", and this is where we see if the root device is present and mountable.
  • After all this is done, the init-bottom scripts are run; here is where the udevd process is killed and whatever handling of the available hardware stops until udevd is started again.
  • The problem we are running is that the initial SCSI bus probe is done in a flurry of asynchronous activity; if you stop and read your kern.log after a reboot you're find out just how random the ordering is. What can happen on systems with lots of drives (such are ours, which has 6) is a race between the SCSI bus scanning, udev's triggering of 85-mdadm.rules and the killing of udev after the root filesystem is mounted. The race happens because the bus scan is asynchronous, which in turn means that the devices (which if you noticed above, are being added via mdadm --incremental) might take too long to show up -- long enough that udevd is killed and the real init starts trying to mount the rest of the (still incomplete) local filesystems.
  • To solve this, we simply added a script which sleeps for 15s in initramfs' local-premount; this is enough time for the hardware probing and udev rules to complete firing, ensuring that all RAID devices have been assembled and are available for mounting once /sbin/init kicks in. Simple but does the trick. It is likely that changing the scsi_mod scan option to "sync" would also solve this part of the problem. Yet another option would be to load the scsi_wait_scan module in local-premount.
  • We had an additional problem, which was that our mdadm.conf file specified sdX-style partition names for each ARRAY:
     ARRAY /dev/md2 devices=/dev/sda5,/dev/sdb5,/dev/sdc5,/dev/sdd5
    This doesn't play well with mdadm's --incremental mode when the drive order is changing around -- so when the USB drive appeared as /dev/sda the array could never be initialized and we failed to mount the root device. Changing the ARRAY line to refer to the MD device through a UUID solved this problem:
     ARRAY /dev/md2 UUID=b3b855d3:d8ee85f4:2ee19fc3:ff71564e
    As a nice side-effect once we made this change, mdadm --incremental started assembling our spare devices into our arrays: I had never been able to specify spares using the devices= syntax.
  • I suspect that in part [] is caused by the on-demand nature of the module loading, but I'm not entirely sure -- perhaps specifying an explicit DEVICE line in mdadm.conf causes each device to be hit, which in turn means the right modules are probed. But I think it's actually a red herring, and that in fact the problem is with the modules Jan was missing in the initramfs.
  • Finally, it is strange but true that in the cases where mounting non-root local filesystems failed because of the udevd race, udevd in userspace never kicked the incremental mdadm again to finalize the running arrays, and even when running cat /proc/mdstat from the prompt, you could also see they were left incomplete or lacking spares. I'm not sure why this happens.
08.12.2009 Bad source addresses on my local server
  • Since a few reboots ago we ran into a pretty annoying issue on our server: packets originating on the server that were delivered to the server itself, handled by lo, were using the wrong source address. In more detail: our internal address for the server is If when sitting on the server and I did:
     kiko@anthem:~$ telnet 80
    the connection was never completed. If I looked at a tcpdump trace
     17:18:17.439479 IP 189.x.x.x.42826 > S 2220677816:2220677816(0) win 32792 mss 16396,sackOK,timestamp 6978218 0,nop,wscale 6
    it became clear that the wrong source address was being selected. But why?
  • I spent a lot of time reading and rereading the source address selection descriptions at [] and couldn't figure it out. Everything in my routing tables was kosher -- and even if I cleared out all our fancy ip balancing rules and used plain turkey kernel and default gateway rules, the address was wrong. The src hints were there. There was no funky ordering issue. So why was the address wrong?
  • I finally read a slightly unrelated post at [] that gave me another idea: NAT! I hadn't thought of this possibility, nor did I recall changing anything there, but it was worth a try.
  • Turns out it was exactly that. I had a rule which said that:
     -t nat -A POSTROUTING -s -o !eth1 -j MASQUERADE
    This would have worked perfectly if the packets were actually going to eth1. However, in the case where you are on the server connecting to itself, the packets go to the lo interface, but with eth1's source address, which matches that rule -- oops.
  • There are various solutions to this problem -- the one I went with was simple, specifying a destination network of ! -d -- in other words, we only masquerade packets that are actually meant to be routed elsewhere. I could also have specified two ACCEPT rules that came before the MASQUERADE rule, avoiding masquerading for eth1 and lo simultaneously.
  • The trickiest thing with masquerading is that changing the rules takes a while to actually kick in -- it's not instantaneous. So if you change the rule and run the test immediately, it will fail -- but if you wait a litle bit you'll see it's actually fixed. Gar!
  • The morals to the story are
  • a) source address selection is also affected by IP masquerading even if the documentation doesn't remind you of that
  • b) when a host connects to itself, the lo interface is always used, even if the address being used to connect is not, and
  • c) it takes a while for iptables rule changes to actually take effect, so wait a while before actually testing them!
03.12.2009 Google Calendar on the Ubuntu Desktop n more
  • []
  • When your sound goes bad, "sudo alsa force-reload" to the rescue!
  • When your xchat completion is weird, use "/set completion_amount 0"
23.11.2009 Git crack HEADs
  • Maybe git knows that I don't actually want to be using it:
     kiko@baratinha:~$ git clone []
     Initialized empty Git repository in /home/kiko/x11-maemo/.git/
     remote: Counting objects: 241288, done.
     remote: Compressing objects: 100% (73222/73222), done.
     remote: Total 241288 (delta 191071), reused 214443 (delta 165447)
     Receiving objects: 100% (241288/241288), 186.11 MiB | 64 KiB/s, done.
     Resolving deltas: 100% (191071/191071), done.
     warning: remote HEAD refers to nonexistent ref, unable to checkout.
  • I wonder what it means when I have just spent 30 minutes downloading revisions to end up with no working tree! #$!@#@
26.10.2009 Saris Poweragent woes
  • Every once in a while I end up unable to download my PowerTap power files because Poweragent can't contact the PT head. Today it's giving me a traceback:
     WARNING [com.cycleops.jpowertap.Manager]: Exception Occurred Opening Device 0
         at com.cycleops.jpowertap.CycleOpsDevice.readVersion
         at com.cycleops.jpowertap.CycleOpsDevice.getVersion
         at com.cycleops.jpowertap.CycleOpsDevice.getVersionFloat
     [catch] at com.cycleops.jpowertap.Manager.getConnectedDevices
         at com.cycleops.devicemanager.DeviceManager.getSelectedDevice
         at com.cycleops.devicemanager.DeviceManager.getSelectedDevice
         at com.cycleops.devicemanager.DownloadDeviceAction.performAction
    Wish I knew how to fix this.
  • Some more investigation using good ole strace shows this:
     [pid 19639] open("/proc/bus/usb", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_ CLOEXEC)
         = -1 ENOENT (No such file or directory)
     [pid 19639] open("/dev/usb", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC)
         = -1 ENOENT (No such file or directory)
    which suggests that we've got a legacy compatibility problem -- Ubuntu hasn't had a /proc/bus/usb mounted in a while. Let's see what we can do.
  • So I believe that /dev/usb was deprecated a while back in favor of /dev/bus/usb; in experimenting I add a symlink from /dev/bus/usb to /dev/usb and it seems to go a bit further. Next stop:
     [pid 21297] open("/dev/usb/005/012", O_RDONLY 
     [pid 21297] <... open resumed> )        = 126
     [pid 21297] read(126, "\22\1\20\1\0\0\0\10\3\4\1`\0\4\1\2\0\1", 18) = 18
     [pid 21297] read(126, "\t\2 \0\1\1\0\200", 8) = 8
     [pid 21297] read(126, "-\t\4\0\0\2\377\377\377\2\7\5\201\2@\0\0\7\5\2\2@\0\0", 24) = 24
     [pid 21297] close(126 
     [pid 21297] <... close resumed> )       = 0
    It turns out that this strace is misleading. The open() there is actually failing because of a permissions problem:
     ls -l /dev/usb/005/012
     total 0
     crw-rw-r-- 1 root root 189, 512 2010-10-05 12:08 001
     crw-rw-r-- 1 root root 189, 524 2010-10-05 18:31 013
    That's expected, since udev is the one expected to create user-visible device nodes under /dev -- for instance, /dev/ttyUSB0, which has the right permissions.
     crw-rw---- 1 root dialout 188, 0 2010-10-05 18:55 /dev/ttyUSB0
  • Anyway, a quick chmod 666 and poweragent runs again, and this time, it actually works! Here's the strace to show what happens:
     [pid 22794] open("/dev/usb/005/014", O_RDONLY) = 125
     [pid 22794] read(125, "\22\1\20\1\0\0\0\10\3\4\1`\0\4\1\2\0\1", 18) = 18
     [pid 22794] read(125, "\t\2 \0\1\1\0\200", 8) = 8
     [pid 22794] read(125, "-\t\4\0\0\2\377\377\377\2\7\5\201\2@\0\0\7\5\2\2@\0\0", 24) = 24
     [pid 22794] close(125)
    As you can see, the open() and close()s aren't unfinished this time. I'm not entirely sure why they don't finish when the permissions immediately fail, but maybe strace is tricking me, or maybe something's happen asynchronously. At any rate, once Poweragent has finished looking at all the USB devices, which it does in turn, it finally open()s the right device and then creates a long-lived fd to manipulate and download from:
     [pid 22794] open("/dev/usb/005/014", O_RDWR) = 35
     [pid 22794] ioctl(35, USBDEVFS_GETDRIVER, 0x9e4fdd10) = 0
     [pid 22794] ioctl(35, USBDEVFS_CONTROL 
     [pid 22794] <... ioctl resumed> , 0x9e4fdc70) = 30
     [pid 22794] ioctl(35, USBDEVFS_CONTROL, 0x9e4fdc70) = 30
     [pid 22794] open("/usr/local/lib/ftd2xx.cfg", O_RDONLY) = -1 ENOENT (No such file or directory)
     [pid 22794] open("/usr/lib/ftd2xx.cfg", O_RDONLY) = -1 ENOENT (No such file or directory)
    I'm not sure exactly how to fix this in a non-hackish way, but I'll write to Saris and see what they think.
21.10.2009 A Nokia E51 as a Vonage Softphone
  • So today I set up my E51 as a Vonage Softphone sip client; the instructions I followed were up at [] and [] and apart from the fact that I got the password wrong, because in their wisdom prints the password in a non-serif font (meaning lowercase L and uppercase I are kinda impossible to distinguish) it works really well. The other thing to watch out for is that the domain is "" -- if you use just the registration will be successful but you won't be able to dial.
  • The only bummer is that the international call rates are not the same as for the main service (that's kinda fine-printish but oh well). But hey, the portability is hard to beat..
  • Read a little bit about the ToS IP field: [] -- I used this to grok the instructions at [] which basically is a real upgrade from basic wshaper for VOIP; basically it puts the VOIP traffic in a non-balanced queue, and everything else in an HTB-set set of classes -- I read [] to really understand how the whole thing works, and it's actually pretty cool.
  • Upgraded the E51's software via Windows using a couple of hacks as well. Used NSS to change the product code, then ran the upgrader and presto, it all worked. Took a /long/ time but in the end it paid off -- the new firmware's VoIP stacks and applications work really well.
09.10.2009 Booting USB drives on old BIOSes
  • In preparing an old server to sell off today I actually ran into a problem which apparently affects lots of old computers: the BIOS, though it supports bootable USB drives, is really picky about the drive geometry. After swimming through a collection of links like [] and [] I started tackling the trial-and-error that fixing up the geometry implies -- reading through [] and [] for inspiration. And after 5 tries, I actually managed to get something that worked:
     16 heads, 63 sectors/track, 1986 cylinders
     Units = cylinders of 1008 * 512 = 516096 bytes
     Disk identifier: 0x00000000
        Device Boot      Start         End      Blocks   Id  System
     /dev/sda1   *           1        1986     1000912+   6  FAT16
  • Of course, It Never Works The First Time; installing from the Ubuntu Server USB key left me with a broken system because it installed grub onto the USB key instead of installing it onto my SCSI drive. I ended up booting with the USB key plugged in (it had grub installed on it by the installer, which ruined it but allowed it to boot my server!) and running install-grub to get that fixed.
08.10.2009 So it's old news..
  • Still, the blog post "If Version Control Systems were Airlines" at [] is the smartest and funniest blog post I think I've ever read. And it's true, too.
02.10.2009 London and pings
  • So when traceroute tells you
     send failed: Operation not permitted 
    it is time to look at your firewalls, because it's likely that you've got a wrong rule in the output chain.
  • In London for the week, and back again on Saturday to Brazil. I miss Mariana and the way she smiles when I arrive.
20.09.2009 iptstate
  • Ever wondering what your IP masqueraded connections looked like? I always did, but I just found iptstate(1) and it is exactly what I wanted.
  • It seems that Embratel's link blocks ICMP packets related to fragmentation; the MTU on the cable modem's interface is 1472, but when I set it correctly on my router's interface, I get PMTU-D problems with the internal network (which has an MTU of 1500). The solution I cribbed from [] involves using the TCPMSS target to iptables.
  • Other reading for today [] []
  • Oh, and for the record, even though [] says that MTU 512 works best with ADSL modems, it certainly does not work for the Opticom we have connected here to the Telefonica line.
19.09.2009 PPC Mac Mini on Ubuntu Jaunty and video playback
  • Next problem for the weekend was video playback on my PowerPC Mac Mini. Standard Jaunty was installed on it, and it worked pretty well -- networking, audio, removable USB. But one thing was bugging me: video playback with Totem no longer really worked. Most videos I have (for instance, old Giro and Tour recordings in DiVX format) would no longer play, and the ones that did (like a recording of the 2007 world's) would play at terrible FPS, massively dropping frames and totally burning up CPU in full-screen mode. I figured that this was the real end of the road for this little mini; after all, Ubuntu's not really supported on it, and there's no binary magic (like fglrx or even flash) to make it work. This is a standard old-school PPC Mac mini:
     0000:00:10.0 VGA compatible controller: ATI Technologies Inc RV280 [Radeon 9200] (rev 01)
  • Well, today I spent some time looking into the problem. Turns out there were a couple of problems compounded. The first things I looked into were acceleration-related, and because most posts on the web are around 3D acceleration, the first thing I discovered was that there's an issue with the stock Jaunty kernel that I was running: [] -- you can pretty easily diagnose this by running glxgears (yeah, we know, not a benchmark) and seeing that you get very low frame rates -- like 60 or so; in other words, falling back to swrast and not using hardware acceleration like the radeon driver in Jaunty should. The easiest solution I found to it was linked to from [] -- I just downloaded and installed the kernel at [] and that was it, glxgears was up in the 700s after that, and CPU pretty low.
  • Turns out that 3D performance has nothing to do with 2D video, and this was a bit of a red herring (though it's great to have accelerated 3D graphics, I guess). I spent some time looking into the situation: first, VLC would play most videos that totem and gstreamer wouldn't, but it was still horribly slow -- the hardware wasn't being used for playback, indicating something was wrong with Xvideo. I looked around a lot for a solution, and ended up deciding to try an updated X video driver pulled from Tormod Volden's PPA at [] -- just had to apt-get source xserver-xorg-video-ati, apt-get install the dependencies and dpkg-buildpackage it into existence. To save people the trouble of actually doing this, I put the assembled debs up at [] and feel free to use them if you ever run into this problem. Once this was installed, I ran VLC and sure enough, the video playback was as smooth as ice and CPU usage really low.
  • A couple of closing notes. First, I'm not sure why this was set up this way, but the reason Totem wasn't even trying to do Xvideo was that gstreamer-properties had it disabled; once I enabled it it was as fine as VLC playing back the videos that didn't crash it. The second thing was that my /dev/dri/card0 was set to mode 660, which may have meant that GL apps running under me couldn't actually do DRI -- I set it to 666 but I don't think that actually did anything, so maybe that's crack.
18.09.2009 WRT54g Wireless Repeater Bridging
  • After investing R$80 on a new WRT54g to connect the house and office together in a way which works reliably, I spent some time researching alternatives to actually wirelessly connect them. I was always under the impression that it was pretty much impossible to do wireless bridging (i.e. a wireless AP here extending the range of a remote wireless AP, including the local ethernet switching) without having multiple radios available (and I didn't think the Linksys unit has multiple radios, nor do I know now), but apparently not only is it possible, it's trivial to do with recent DD-WRT v24 (there's no need, for instance, to set up WDS, which I think is a standard mechanism to do exactly this). I followed a tutorial on the DD-WRT wiki which was pretty much exactly what I needed: [] -- there's a version in portuguese which is actually more complete, though I was a bit reluctant to trust it: [] -- ironically the DD-WRT wikipage was updated YESTERDAY to add one critical step to the recipe. Guess I'm lucky!
  • The only trick I ran into was when flashing DD-WRT onto the Linksys. I had a WRT54v6 (see [] for details) which makes the process slightly trickier -- the flash and RAM are really reduced so you can't load the standard DD-WRT image through the standard (VxWorks) web UI -- you need to go through the steps outlined at [] -- it is a lot simpler than the stuff in the DD-WRT wiki itself, which seems to be geared towards windows users. I managed to get the prep and killer firmware loaded in the initial stages, but I was surprised when the tftp upload of DD-WRT itself didn't work. The upload itself went, the unit seemed to be doing something (pings stopped) but the web UI never came up. I could still tftp files across, so it wasn't bricked, but.. weird. Well, guess what -- ascii mode tftp won't work. Doh! Took quite a few reboots when looking at the flashing light to figure out that I needed to type "bin" before the put. Guess I forgot the lessons learned in the old inet BBS days.
  • Once that was done, the other thing I got stuck with was that the DD-WRT's web interface would give me a blank page whenever I saved or applied any changes. Turns out this is related to something cached in the browser (I suspect by IP, some shared cookie between the VxWorks web server and the DD-WRT one); I eventually read some dozen threads that all said the same thing: CLEAR YOUR COOKIES AND CACHE. It worked, too ;-)
24.08.2009 Lipoprotein A
10.08.2009 Seen today on my "2gb link"
  • Up 517kbps and Down 144 Kbps. From my ADSL modem's console. And then a reboot back to the usual 659/2297 Kbps -- so you tell me, what the hell?
15.07.2009 Well yes it's been a while
  • And no, I won't post anything interesting apart from recording the time schedule for SESC's swimming pool here in São Carlos. It's from 13:30 to 21:30 from Tuesday to Friday, and on weekends and holidays it's from 9:30 to 18:00. And you need to do a medical test before you are allowed to start going; make sure you don't forget that part.
  • Found out that F-Spot can upload to Smugmug, but there's apparently a bug which is failing on Hardy and I wonder if it works on Jaunty: []
04.05.2009 The only thing I can do is read
  • MySQL pissed me off today. It started out with it going OOM and then corrupting Bugzilla's logincookies file. So I turned it off, pulled out myisamchk and it did the right thing. Or half of it, it turns out. Once I had done that, the table was marked read only, and how the hell does one get out of that?
  • Turns out there were THREE things that needed doing. First, I had to chown the actual MYI file to mysql:mysql. Then I had to chmod it to 660, because the perms were broken. After that I got stuck, because mysqlcheck wouldn't update it, still saying "Table 'logincookies' is read only". Well, damn it -- turns out the last bit missing was running a "FLUSH TABLE logincookies;". So how was I supposed to guess that?
28.04.2009 You can't make this stuff up
13.04.2009 Eastern Easters
  • Possibly one of the all-time best Roubaix climaxes ran yesterday as an Easter present for everybody. Or well, I guess everybody but Flecha, Hoste and Hushovd: []
26.03.2009 How can one not love Launchpad?
     <danilo> kiko: got any cheap offers for marriage in EU? and can I
     continue to live here? (fwiw, I am busting my ass with documentation
     this time around since I want to ask for longer visas, and I'll have
     Canonical lie a bit in the invitation letter how I am going to go to
     Spain 745 times in the next year :)
     <intellectronica> danilo: as soon as i get my EU pass i'll be happy to
     marry you
     <danilo> intellectronica: sounds good :)
     <intellectronica> (even though you're a bit too tall to my taste)
     <danilo> intellectronica: well, you'd not be my first choice either, but
     I'll love you as if you were :)
14.03.2009 Things I miss about Brasilia
  • I left Brasília many years ago, and I only lived here for 4 years before starting university down south. But there are some things that I really miss about it.
  • One is the rain. It is spectacular in the summer months how beautiful and shocking the thunderstorms are; my parents have a house which is glass everything and the sound is deafening. When I come here I love staying at home and just listening to the roar of the storm hitting the house and the lake. And the thunder, when it strikes, makes your heart race, eyes widened at how loud that could really be.
  • Home is another. It is very neat to be surrounded with all these weird mementos of your former lives; trophies from races you did who knows when, comic book collections that you bought in forgotten newsstands and in ancient trips to places you never visited again, bits of arcane computer hardware that might just work if you can piece it all together. And the sounds of that old life around you.
  • My parents. I have had a lot of luck in my life, but wow, it seems almost unfair that I had a pair of parents as fantastic as mine. They are two ever-surprisingly versatile individuals if I ever saw a pair, and every year they seem to decide how they want to reinvent themselves. And whatever it is you want to do, they are interested in doing it with you. Run 15k? Sure! Waterfalling? Always! Out to buy random stuff I need? Now! Never boring. What an amazing couple.
10.03.2009 The purposes of war
18.02.2009 Argus Tick tock
  • The Cape Argus cycletour is on the 8th of March. The route is nothing but spectactular [] and it's not as flat as one might think [] -- and I am so happy I will be there along with thirty thousand other people. If everything goes according to plan..
16.02.2009 Getting older feels great
  • But let me ride my 110km this morning and then tell you exactly how great. I just wish it wasn't raining..
15.02.2009 pioggia maledeta
  • After 105km of rain yesterday, you'd think that it would let up for a birthday lunch? Guess I'm kinda short on credit with the weathermakers. Plan B!
09.02.2009 The politics of scanning
  • If you own an Epson scanner and want it to work in Ubuntu without installing the debs provided at [] by hand, check out my comment 5 at [] -- basically, the versioning of these packages is psychedelic and somebody needs to get Avasys to make some sense of it so we can reasonably package and update iscan without breaking everything we ship based on it. Michael Casadevall and I spent a few hours on this over the weekend and though we have some packages in his PPA, they aren't really something which we can get into the archive for Jaunty.
08.02.2009 Some pictures are truly worth a thousand words
  • This gallery has such a striking set of contrasts I can't help but love it: []
  • Just got back from the first race of 2009, which was a 50km mountain marathon; out of the 800-odd registered I finished around 10th overall and, again, 2nd master. 42 seconds off! [] I rode well the first half of the race, but lost contact in the hard climb in the middle of the race and just wasn't in the mood for a solo chase. I felt strong on the flats but had a little difficulty staying in contact on the climbs, and I particularly hated the soft feeling my SID has up front -- it makes me really not want to stand up when I'm riding, which means I can't easily jump on wheels or deal out the pain. Santa, bring me a new fork?
02.02.2009 Oggplay is just amazing
  • I have for years been enduring the Nokia music player on my 3250, which is the phone I use on bike rides. It's a big fat phone but the built-in speaker is loud and it is as solid as they get; mine has a cracked LCD, a partially broken case and so much water and dirt inside it you'd be amazed it still turned on. Not only does it work, but it works as well as it did when I got it 3 years ago.
  • I have a ton of Ogg Vorbis files that are the format I rip from my CD collections into. I knew there was this software called Oggplay [] and that it played FLAC and OGGs, but when I looked at it I was worried that it was one of these applications that worries more about skinning than getting the UI right. I was also unsure about how much battery it would melt. I never tried it.
  • But, come 2009 music refresh program, I have Girl Talk in FLAC and I haven't been able to listen to it on the phone. I decided that today was as good a time as ever to try it out. And wow, it is amazing! The UI is so well designed I can already use it with my eyes closed (pretty essential for a player you use while riding). It has the file browser integrated with the playback screen, and it is really fast -- much faster than the built-in player. And FLACs and OGGs! Just really impressive. Guess I might just need to wait for Nokia to get over its DRM obsession before it considers shipping it by default?
  • One note on the installation is that downloading zips does seem a bit counter-intuitive to me; I was expecting a set of links from the website to installable SIS files. Maybe it has to do with how the downloads are hosted at Sourceforge?
01.02.2009 A campaign for modern music
  • It was last November that I realized it. When you're 33 all you think of is the songs you listened to when you're 23. That's rubbish. So I'm planning ahead and since December have been listening to everything mildly interesting I hear about. If you're in the same situation, here are my picks so far.
  • Foals, Fischerspooner, Chromeo, TV on the Radio's Dear Science, The Black Ghosts, Girl Talk, The Ting Tings, Cut Copy, Ladyhawke, Late of the Pier, The Whip, VHS or Beta, The Virgins, Buck 65, The Rapture
  • Not so new, but still great: Idan Raichel, Sad Lovers and Giants, Lene Lovich (can't believe I had never heard of her)
  • Stuff I (perhaps surprisingly given the hype) did not like: MGMT, Hot Chip, Les Savy Fav, Wire, Vampire Weekend
  • If you know me and want a USB mixstick put together just send me one through the mail; I'll fill it with my picks. Postage free.
31.01.2009 Waking up when it's dark
  • I kinda hate it when I can't sleep through sunrise. I go to bed pretty early and usually am asleep by 22:30; at that time my brain is already flagging and when it's not I remind myself of Jacobson's progressive relaxation method [] and that's it, Zs show up in my brain. The problem for me is that when I am at home I just can't figure out how to wake up after 6. Normally this isn't a problem, since I go to sleep so early, but if I have a late night, it is a disaster. Yesterday the Launchpad team leads meeting ended in a dinner which we walked out from at midnight (!) and this 'morning' I've tried reading, drinking water, PMR, etc and just around now have given up and come to face my 1177-message-strong inbox. Funny thing is, there are only two situations in which I don't have this problem, and one of them is when I'm travelling on vacation. Damn.
29.01.2009 got watts
  • This week I'm supposed to be gearing up for the first race of the year, which is a pretty unspectacular marathon in Itu. I mean, it'll be painfully fun as all races are, but it's not a particularly long or hard race -- though some people argue that the easier the parcours the harder your buddies make it. Anyway, so because I have this race I'm doing some moderate-to-high intensity stuff this week -- I had done pretty much only hard tempo rides between December and January. I did 3x5' of 20/40s on Tuesday and Friday (at 300/500W), which left my legs soft and bubbly, and nearly beat my PR for 5' (which is 398W from last November). 20/40s require a serious psychological edge: the first hit is fun, the second is hard, the third is painful, and the two last ones are just total regret. But because the rest is so short and constrained, you just keep coming back..
  • Then on Wednesday I did this killer workout on rollers (since it doesn't f**** stop raining here) with 10x2' at 300/350W and then a little 3x5' ladder going from 260W to 300W. But man. AIIII. I was so lost after it. Johan said something to me during it but blam if I can remember what it was: just the sweat pouring off my face and the black spots in my brain. I had dinner at Sal6 later with Martin and Johan and I was absolutely useless (and then you called and it was even worse). My legs felt okay, and the ride the next day was fine, but the system shock was hard to get over. But then again, I broke my 10' and 20' records at 332W and 326W, which is 5.1 W/kg and nothing to sneeze at. Never thought I could do that on a January! I could have done a few more minutes but I'm not sure how many more; my heart maxed out at 173 which means I wasn't self-destructing, but the last minutes took a loooong time to go by.
22.01.2009 Wow
  • "I think it's the kind of stuff I need to do, I need to get in the race and work that top end," he said. "Like I've said 100 times here, I can't get that in training so the more I can be out there... I mean, I looked down at my power metre and the average after two hours was 340 watts, you can't do that in training. You're just constantly going and going and going." []
  • Armstrong weighs 76kg, which means 4.4 W/kg, but still, pushing that hard for 2h is serious business. I did an average of 244 yesterday, in comparison, and it was a hard ride. Maybe he's talking NZAP or NP instead of average power, but does the SRM give you either of those?
03.12.2008 The Ting Tings
  • are probably the best new band I've heard this half of 2008.
02.12.2008 Subject: Songbird 1.0 PPA; Dear Lazyweb,
01.12.2008 Third and sick, or sick and third?
  • I can't decide. I made too many withdrawals from my immunological bank this week: travel, not a lot of sleep, delayed flights, indoor cycling and one or two big nights before Sunday's race nailed me. News at [] It will be a typing sort of day IYKWIM.
  • João and I didn't warm up properly before the race yesterday and my legs burned for the first 20 minutes, which means the pros dropped me on the first climb and I had to hang on to the next splinter until I figured out I actually had much more inside me and went out on a rampage. Clawed my way back to within two minutes of the leaders of the amateur ranking but only enough to land me third on the podium, flowers being the special touch this time. Why don't all race organizers give flowers to the winners?
25.11.2008 Riding in circles
  • Third day in Buenos Aires. Went to the gym yesterday and did 2h of spinning; 2 more today and 2 more tomorrow and then that's it for me. You can't do more than 6h of indoor cycling in a week. Or else your heart melts.
24.11.2008 I don't even wanna know
  • what the karmical implications are, but a search at a domain parking webpage returned this to me today:
     We were unable to find results for your search term - "Money".
     Are you interested in:
         * Money Laundering
         * Anti Money Laundering
         * Financial Opportunity
         * Money Com
    I guess they've got all bases covered.
18.11.2008 Testing testing 1 2 20
  • Did my first 20km test of the 2009 season. Average wattage was 276W, which for 66kg isn't all that bad. Now 20km is a LONG time for a test, and man those last 5ks take forever to roll by. But in the end I was pretty amazed at the result and let's see how well we can use it to kick some 2009 podiums.
  • It was Bruna's birthday today. She's 9! We had cake and popcorn and Pucca and Garu goodie bags complete with -- what else? -- "funny love". Everything a masters racer needs!
14.11.2008 The delta of 32
  • The news at [] is kinda tainted by the downer medical opinion about its low feasibility, but I personally find it just absolutely fascinating. Earlier this year I told myself that somebody would find a cure for AIDS; maybe I was just rehallucinating William Gibson's cure in Virtual Light but I figured there was enough known about the CCR5 variant [] which provides natural immunity to the virus, that it was time somebody figured out how to use it. Well, they had already done it, two years ago; the story just took a long time to arrive.
06.11.2008 6am phone calls
  • Are a great way to kick that jet-lag! The call was good but I only really woke up in the last half of it. I rode off to Damha and did a good 4 short 1200W sprints, and then did 4 6' repeats of the longer climb. I managed about 310W for the whole set which is not bad as I wasn't totally hallucinating over it, heart probably close to threshold. On the last climb I did it at a higher cadence than usual and.. it actually felt like it hurt less and I was better able to cope with the annoying fact that the climb flattens out twice in the middle. In the last minute I was always a bit cooked but that's cycling for you.
  • Called Vitor Costa up to talk about training for the new year. He let me in on that I'm second-ranked brazilian master XCM this year: [] -- wow, I guess I just wasn't expecting to have made it that far up.
05.11.2008 OOPS
  • When Johan did our Intrepid upgrade on the weekend there was one thing he left unfinished, and that was figuring out why the kernel was OOPSing mid-startup. Well today I figured it out, tragically, by discovering that it's not because I'm so great at cleaning up my inbox (533 today from 1200 on Monday is kinda fantastic). It's because my box isn't sending out any email from me, and it's postfix that is causing our diskless NFS to OOPS on startup. Gotta love Wednesdays!
     kiko@gasolinux:/var/spool/postfix$ sudo /etc/init.d/postfix start
      * Starting Postfix Mail Transport Agent postfix                         [ OK ]
     [  149.183761] BUG: unable to handle kernel NULL pointer dereference at 0000000c
     [  149.183895] IP: [] :nfs:nfs3_proc_setattr+0x69/0xf0
     [  149.183990] Oops: 0000 [#1] SMP
     [  149.187579] Pid: 5744, comm: master Not tainted (2.6.27-7-generic #1)
     [  149.187631] EIP: 0060:[] EFLAGS: 00010282 CPU: 2
     [  149.187688] EIP is at nfs3_proc_setattr+0x69/0xf0 [nfs]
     [  149.187699] EAX: 00000000 EBX: f5a89e7c ECX: f5a89f70 EDX: f59ddd80
     [  149.187699]  DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
     [  149.187699] Process master (pid: 5744, ti=f5a88000 task=f5996480 task.ti=f5a88000)
     [  149.187699] Stack: f7da4000 c1000000 f5716f88 f5a89f70
                           00000000 00000000 00000000 f8a98f08
     [  149.187699]        f5a89e3c f5a89e7c 00000000 f8a86e00
                           f57170a8 f5a89f70 f5a89f18 f8a633e6
     [  149.187699]        f59ddd80 f55f1770 c018cda8 f5a89e9c
                           c01b02e5 f65e9d80 00000004 f5996480
     [  149.187699] Call Trace:
     [  149.187699]  [<f8a633e6>] ? nfs_setattr+0xb6/0x170 [nfs]
     [  149.187699]  [<c018cda8>] ? file_ra_state_init+0x8/0x20
     [  149.187699]  [<c01b02e5>] ? __dentry_open+0x1a5/0x260
     [  149.187699]  [<c01c0e00>] ? fifo_open+0x0/0x2e0
     [  149.187699]  [<c01bdb1d>] ? do_filp_open+0x1bd/0x790
     [  149.187699]  [<c02549fb>] ? copy_to_user+0x3b/0x130
     [  149.187699]  [<c01b57b9>] ? cp_new_stat64+0xe9/0x100
     [  149.187699]  [<c0235724>] ? apparmor_inode_setattr+0x14/0x90
     [  149.187699]  [<c01c89d6>] ? fnotify_change+0x2d6/0x3b0
     [  149.187699]  [<c037e62d>] ? _spin_lock+0xd/0x10
     [  149.187699]  [<c01ca4fc>] ? mnt_want_write+0x6c/0x90
     [  149.187699]  [<c01b0714>] ? sys_fchmod+0xd4/0x100
     [  149.187699]  [<c0103f7b>] ? sysenter_do_call+0x12/0x2f
     [  149.187699]  =======================
  • Perhaps more annoying is the fact that nobody else seems to have reported this problem to anywhere Google knows. Normally with OOPSes you can count on somebody else having the same problem, but today it sounds like I'm gonna be either debugging or lazywebbing..
  • Easy 2h ride down 29 and then around Damha and the Tour of Flandres. It's always easy when you wanna rest and you're by yourself. Enjoyed riding the Felt but I have come to realize that perhaps the Time ATACs are a bit too wide and ultimately responsible for why my left heel swings in so much. Why don't I write to [] I wonder? Well, Stuart agreed to come over tomorrow to look at this himself on the rollers so let's see after that.
  • Swapped out the battery in my Polar wearlink strap; also ran a bunch of errands including dropping a spaghetti mix of about 20 punctured tubes to the amusement of the LBS mechanics..
04.11.2008 You never thought self-destruction could be beautiful
  • Man, Fabiano toasted me on the way back from Santa Eudóxia today. It started out harmlessly enough, even though it was crazy hot, but by the time we were past Água Vermelha he was taking no prisoners and all I could do was follow the melted pavement and dead animals he left in his wake. Second day riding after 20 days off and it felt profoundly painful. I had a little divine moment on the climb coming back out of Santa Eudóxia, you know, when your head goes really light and your arms feel soft and then all of a sudden these strange thoughts go through your head? I had thoughts of myself as a child, and (somewhat paradoxically) of me as a parent taking care of myself as a child, and of misadventures and surprises that have happened over my life.. so yeah, it was self-destruction, but it was oddly pleasant. And as smoothly as the hallucinations started, they ended as we hit the top of the last long climb, and I managed to roll back home and only mildly suffer through the rest of the day.
03.11.2008 Heat
  • I am back in Brazil, and wow, it is hot. Last week I was surprised by this weird flurry of snow in West London; today I've got a brand new tan. In a way I like the contrast, but you have got to admit it is at least unnatural. After a morning spent across immigration, customs, taxi, bus and a quick ride home, I managed to dig time out in the afternoon to do a fun 2h ride to celebrate my return. Arthur and I did a little loop out to Itirapina and on the way back he stuck behind a truck and revved it at a scary 70km/h. I kicked and slapped in behind him and put out a ridiculous 700W for some 10 seconds before a car rolled next to me and started honking. I thought it was somebody cheering me on, but in fact it was the police! Ai ai, one day in Brazil and already in trouble.
  • Swapped out the tires on the Bianchi today for the new set I bought in London just last week, when the world was still young.
02.11.2008 Um,. any similarity is mere coincidence?
22.10.2008 Nokia to Evolution syncing?
  • If you're not afraid of the commandline and getting a bit upset in the process, try this: [] -- it's the product of hours restarting phones and debugging obscure msynctool messages. It almost works reliably for me, too. Unfortunately it doesn't for my cousin, who was the prime intended recipient of those instructions. #!@#!@
14.10.2008 One more year
  • One more Tour of Santa Catarina, and this time I survived through the thick (and wet of it) to finish 10th overall and 3rd Master: []
19.08.2008 USB drive woes
  • So.. our new external USB suffers when I rdiff-backup to it. Turns out that it may be too fast (the old one was a WD 5400rpm): []
     Aug 18 23:57:01 anthem kernel: [519190.143537] EXT3-fs error (device sdf1): ext3_find_entry: reading directory #2 offset 0
     Aug 18 23:57:01 anthem kernel: [519190.143882] Buffer I/O error on device sdf1, logical block 0
     Aug 18 23:57:01 anthem kernel: [519190.143907] lost page write due to I/O error on sdf1
  • I'm trying out a suggestion to fudge max_sectors to 128 and see if that improves things tonight.. sounds like it did. All sorted and backups both fast and stable now. Rock on!
04.05.2008 NFS sync versus async and /var/run and /var/lock mystery
03.05.2008 After upgrading the diskless
  • Run a depmod -a, because otherwise my screen get busted. Reminder to self!
  • When a server nfs.lockd stops responding, what to do? Well, Bruce Fields sent me a suggestion:
    Perhaps a sysrq-T dump of lockd would show where (and whether) it's blocked? (So once lockd stops responding, log into the server, run "echo t >/proc/sysrq-trigger", and collect the output from the logs, especially the stacktrace for the lockd process).
01.04.2008 New office
  • First of April, joke's on us. But we got a new office as a special gift! Rui Barbosa 1977 is going through its finishing touches as we speak and with some luck we will even have the Internet installed there.
31.03.2008 The phones I've owned
  • Nokia 1100a
  • Nokia 3250
  • Nokia 7250i (Pink!)
  • Nokia 6120
  • All but the 3250 can be unlocked with the code calculator at [] -- the the 3250 can't be because it requires a flash update?
  • Somebody asked me if it was possible to have more than one SIM in a mobile, and I thought there were no models that allowed that. Well, not a phone, but check this out: []
14.03.2008 USB 1.1 sucks
  • Had to go out and buy a USB 2.0 PCI card for my server today. Before:
     102400000 bytes (102 MB) copied, 76.3268 seconds, 1.3 MB/s
     102400000 bytes (102 MB) copied, 4.79696 seconds, 21.3 MB/s
    Much better.
12.03.2008 Super Sony Storage Support
  • I have an AIT drive that I bought back in 2005 to do backups and archival of the content on our server. We do daily backups of the full content, and rotate tapes weekly.
  • So a few weeks ago the backup started failing randomly mid-process. This happened before in the DAT days, but AIT proved to be much more reliable -- until now. I ordered a cleaning tape (there's a myth that AIT is self-cleansing, but [] says it's not) and when that didn't fix things, decided to send the unit out to warranty. I had to fish a number out of the Sony UK support site but once that was done it was quite smooth!
  • There's this great little software package called sonytape that Sony distributes from [] and I used it to generate a trace file. One cool thing was that the support team at Sony was able to look at the trace file (after I sent it to them) and find out how dirty the tape head was and how many times the tapes I was using had been cycled (provided the tapes have [] which mine do). That's pretty impressive! One interesting result of that is that I know (now) you're not supposed to cycle a tape more than 50 times, which means that if you're using a tape a week, it shouldn't be used for more than a year. I hadn't heard that number anywhere else, and the only stuff I can find on the web says the tapes last 30 years. But that's shelf life!
  • In general, the support experience was outstanding. You call a UK number and get a support engineer that can actually tell you something useful and knows enough about the hardware to make the experience interesting and rewarding. If I ever run a support operation, I want to make sure my experience is as good as that one.
08.12.2007 The Royal Dutch
  • Wanna tell a dutchman from an eskimo? []
  • When apt says
      files list file for package `cpp-4.1' is missing final newline
    it's time to look at /var/lib/dpkg/info/smbfs.list and figure out what is wrong with the file. In my case, it was a very mangled file; probably a result of some filesystem damage that happened when my mac mini hung.
  • I finally discovered that mutt can record my multiple identities (well, actually, multiple email addresses) and make reverse_name work by using the "alternates" configuration variable.
  • Commands I learned how to use today: blkid vol_id md5sum gnome-mount, and all because I am investigating [] with Johan!
07.12.2007 Things gone missing
06.12.2007 The disappointment junkies
  • This week Johan is trying to convince me that when we upgraded from 10BaseT to 100BaseT that the diskless did not get significantly faster; I am upset at that suggestion but given that my memory is not anything to write home about he might be write.
  • So just to make sure we have a late 2008 opportunity for disappointment I convinced him to buy a [] switch so we can test our diskless at a full gigabit speed. We'll tell you really soon how much of a difference it didn't make!
05.12.2007 Some keywords
  • Ride João Arthur Catraquinha Me Santa Eudóxia Afternoon Felt Bianchi Melting Hammered Happy Dinner Sal6 Pizza João Just Like The Old Days
04.12.2007 Trails from a forgotten past (at UFSCar)
  • Today João, Fabiano, Dalcimar and I rediscovered a set of trails at UFSCar that made me remember how much fun I used to have there in the 90s. Crazy technical, fast and not too hard, which means you can do a hundred loops without noticing you're dead. I got whipped in the face and arm by a thorny bush, and after the 2:30h my legs and my back definitely hurt!
  • When I went to university back in 93, it was crazy how many bicycles and cyclists there were. The classrooms were jammed with them. If you wanted to skip a class and go for a ride, all you had to do is go down to the restaurant and you'd always, reliably, find someone who was there waiting for you. We used to ride to uni with cycling shoes because that's just how it was. I missed a lot of statistics classes riding over the Jedi trail. The interesting thing is that the trails are all still there; in fact, they are better now than they have ever been. However, there are no cyclists any more. And I mean none. Zero. Not a single student after 1998 has taken up cycling as a sport, and only a minority commute, probably on the days they can't get a ride with somebody else. That's a big change in demographics and culture.
  • I've been reading at Mary Poppendieck's suggestion a set of software engineering articles by Corey Ladas. They are very interesting! One that stands out is this sincere review of process models (a topic which fascinates me) I just saw at [] He also makes a pretty cool point about multitasking:
    One inspiration was a result from Boehm that programmer productivity peaks at 2 concurrent tasks. One task should be a high-priority primary task, and the other task should be a lower-priority task that you can work on when the first task is blocked. This was an empirical result, not just armchair noodling, so I thought it would be cool to build a process around it.
03.12.2007 The House of Heat
  • It's hot today. No, serious, it's like 35C in the shade. I went for a 3-hour ride today and towards the end my heart rate (which admittedly has been pretty high since I've come back from vacation) was in the 160s for a sustained 220W. That's not very impressive. The ride was good, just a loop towards Corumbataí and back, and I had this funny buzz from [] playing in my head for some of it. That's a great album even if it is a bit sick. I mean, not as sick as, say, [] but if you have heard either you get what I mean.
  • Today I had lunch with João, one of my friends who is a biologist and a teacher and also as much of a cyclist as anyone could be. Biologists are amazing people and I would strongly recommend lunch with one if you have the opportunity. As it is I privileged to have the best biologist friends a human could ask for! (The god of friendship must like me.) Speaking of which, Sal6 came back from Australia today, too. OK, different subject.
  • Anyway, during lunch João and I talked about mitochondria. Recently it came to my attention (and there's a dead-basic page up at [] that talks about this) that mitochondria and chroloplasts have their own DNA, and there are hypothesis that say they they actually derive from bacteria that came to coexist within more complex cells. I talked to João about the evolutionary consequences of that. Earth has a lot of O2 and CO2, and therefore, it's easy to see how organisms that consumed those primary gasses could have appeared. The fact that they could then develop this symbiotic relationship with an eukariot is to me, however, amazing.
  • More interesting yet is how different plants are to us and other fauna, and I am led to suspect that a lot of it has to do with how our energy processes work -- for instance, CO2 is abundant in different locations, at different times, and the process for consuming it places constraints on how a successful organism might develop; those constraints (to an extent) dictate the morphology (and other aspects) of plants. João and I talked about the existence of other little prokariot cells that consume other gasses; we know of various examples of deep-sea (barophilic) bacteria that reduce methane and sulfates (I recommend [] as a great paper on this). We also speculated on how we could have ended up with some wildly different creatures on earth if those had been abundant in our atmosphere instead of O2 and CO2 (there's even an article at [] strangely named "Symbiosis between methane-oxidizing bacteria and a deep-sea carnivorous cladorhizid sponge" that shows that it is at least possible).
  • So I'm left wondering if this doesn't make it much more likely that complex alien life could actually exist. I mean, finding a planet that has similar atmospherical components to Earth is hard, but if we know that one-celled organisms could use other stuff to breathe.. it suddently looks a lot less unlikely to me.
02.12.2007 A Sunday with God
  • Today I am pondering about God. Or rather his existence. Sorry, His existence. I mean -- if He does actually exist -- He gave me an afternoon at the swimming pool with girls in bikinis, and He also gave me a productive morning where I made PQM grant my fix to []
  • On the other hand, [] makes it clear that God didn't provide blankets where they were most needed. I used to take that to mean that He didn't actually exist, but I'm not so sure right now.
  • And today's working hypothesis, slightly inebriated one at that, is that there may not be actually one God, but lots of gods. And maybe that the god that gives blankets takes Sundays off too.
01.12.2007 San'kara
  • Cycled to Santa Eudóxia with Dalcimar, then took a nap, and then checked out [] and Shanti at this end-of-year edition of the local open-air rave. You weren't there, so you don't know anything about what happened here!
30.11.2007 Or.. do they?
  • Magno is never wrong. So when he saw my post yesterday, he went straight to the crux of the LASIK versus PRK matter: []
  • One thing I can never remember how to do is to allow remote users to relay through our server. It's as simple as adding the user to the SASL database, but I can never figure out what the domain is. I finally had the time to find out today: the SASL domain /must/ be I'm not sure why, and I don't care, but if it works for matsubara, it's good enough for me.
29.11.2007 LASIK, PRK and Cycling
  • And meanwhile (I don't have enough to do) I have started to look into eye surgery. You could ask me why I would even consider that given how great contacts and glasses work. I could then say it's because I keep losing (or ripping) my contacts, or because glasses are heavy and make me look like I'm about to retire, but that's not the truth. It's not because I spend the day looking at a computer screen. It's not because I adore movies and reading and drawing. Those are all things that I can do with contacts just fine. I have mild diopters: -1.50 sphere and -1.25 cyl. in the left eye and -1.50 sphere and -1.25 cyl. in the right. I've not worn any correction for the past month, and I'm not bothered -- it's not a serious handicap.
  • Well, except for the horribly true fact that contacts and glasses are terrible for cyclists. Yeah, I'm aware of just how much they have evolved and improved over the past 10 years, in particular because I was already a cyclist then -- and practically with the same diopters, too. No, the issue, really, is that cycling is this crazy sport where dirt and rain flies into your eye during hours, where you bang your globes out dropping off jagged rocks, and where you occasionally end up in the emergency room (as [] so painfully demonstrates). These particularities make glasses and contacts pretty painfully inconvenient, even if you need the visual acuity to survive through the event.
  • Glasses are great for their stability and protection. It's hard to beat them for value, too. But unfortunately, when it rains or gets muddy, they are useless. You can't clean them or dry them; you can only stick them into your helmet and hope they stay put. They are also heavy, fragile and prone to scratching. Peripheral vision is really bad, which as a cyclist I miss a lot, particularly when looking backwards or around in a pack; if you have rimmed glasses it is worse as you get this stripe of plastic in the middle of the screen. For mountain biking, where you splash around for at least part of any ride, you often end up with your glasses in your jersey pocket and red, myopic eyes full of dirt. And, without glasses, when you hit that technical section with that murderous rut to the left, you only see it when you've already picked the left side.
  • Contacts are great for peripheral vision, and somewhat better in the dirt-in-my-eyes aspect. You still get big chunks of dirt in your eyes, but if you blink madly and endure the sand in them, they clear up. You can wear regular sunglasses, which means you are not locked into your custom-prescription set, and which will still protect your eyes. Unfortunately, they have two very undesireable properties for cycling. First, when a pack accelerates to 70kph, it's hard to keep them in your eyes, and this is why I lose so many. They often end up stuck on my glasses, or melting on pavement. The second, more terrifying aspect to the toric contacts I wear, is that when you are banging down singletrack, they spin ever so subtly. When they spin, you can't see /anything/ for a few seconds, which is damned scary in the beginning and only slightly less so five years later. I can't really prove a unified theory of poor vision leading to bicycle crashes, but I have enough scars that prove I've done serious field research on the matter.
  • And this is why today at 9am I found myself doing a first consultation with a doctor that has practiced eye surgery for the past 13 years, Marcelo Torigoe (of [] fame). I had a great time and asked him almost everything I was curious to learn about: risks, healing time, procedure, technology. I had already researched the basics before going on, and I came out with a few interesting considerations for the R$200 appointment:
  • Corneal thickness is really the crucial factor when decising between LASIK and PRK; the fact that you need to cut a flap means LASIK requires a thicker layer of material to work with.
  • Marcelo defaulted to LASIK. He explained that the Bowman membrane stays intact in LASIK, and that photophobia, haze and halos were less frequent with it, and those were pretty much his stated advantages of LASIK. He said his ratio was 80 LASIKs to 1 PRK, which to me was surprising. This kind of freaked me out because LASIK has this serious flap-cutting side to it, though he reassured me it would be safe in altitude or depth.
  • He made a point of saying that I'd not wear contacts for 30 days before the operation, to reduce risk of infection and to ensure the eye was in its natural shape. He also, more worryingly, said no crashing, water or sweat for 30 days after the operation.
  • Modern eye surgery uses an eye tracker to follow the eye if it moves; it used to be that the doctor needed to adjust for this manually (well, with his foot; is that strictly manual?). You look at a bullseye on the operating equipment in order to try and keep your eye still. It appears to work, somehow, since so many people have had luck with it.
  • The operation itself would cost R$2,400 -- which I did not find too expensive, and it would include both a corneal topography and pachymetry done on the day to ensure my eyes looked good enough to cut up.
  • There is newer equipment (which they have) that does custom PRK and LASIK; they have one but haven't used it much yet, and it's a lot more expensive. It sounded like it had better.. uhm.. resolution, but he said there wasn't a strong advantage to using this procedure for my diopters. (He obviously didn't think my diopters were anything to write home about.)
  • He told me I have a little spot in the back of my left eye, about the size of my optic nerve. I hope that's not going anywhere!
  • I still have a few questions now that I have reflected on all this. Is LASIK really safe for a cyclist? Does the flap heal perfectly, or will it always be a delicate membrane glued by the corners, ready to be banged or wrinkled out of place by a crash? Will my eye be less robust because of it? And is the Bowman layer important enough to justify LASIK over PRK? Seems like dogs don't miss it much.

    Though, truth be told, dogs don't ride.

  • (I read through many threads today on the topic of PRK and LASIK while I was waiting for the doctor. The post I found the most quotable at [] -- blog school says all classic posts end with a quote -- goes like this:)
     > I think the faster the guy can perform the proceedure, the less
     > invasive he is in performing it.
     Invasive is invasive.  The speed of the procedure makes no difference.
     Speed is good in a sprint.  It's not good in surgery or sex.
28.11.2007 And back home
  • After almost four weeks somewhere.. no.. everywhere else, I'm finally back home, back to a strange world of bicycles, work and friends. Well, most of my friends, anyway. Sal6 is still out in Australia and I left Keren-Or back in Equador, and god knows I haven't seen Dieter for ages now (eternal shame on him for missing me when I raced the Satellite Tours!), but that's just how it is with best friends; take decades to see them again and you still have everything in common. I am very lucky for having these friends.
  • The last month went by in a flash. I was in Boston for UDS and some Launchpad training with Mary Poppendieck; then about 1h south in Plymouth for Canonical's yearly all-hands meeting. That was mad. Then, after getting stuck in Miami for a day and a night (which was even madder) I rolled into Quito, and from there, to the Galapagos. What followed is.. just not really fit to put into words, because every adjective sounds light, biased or clichéd. So I won't try. But I might post a picture soon!
13.11.2007 Random pausing for just a bit
  • I can't get to Quito because, well.. []
  • I annoyingly cracked my FSA K-Force Carbon crank arm bolt when moving it from my Specialized to my Felt F2, and I have been looking for a replacement ever since. On this trip I finally found one at [] -- the part I wanted was FSA 390-2060, a.k.a. CR3807. I have no idea what the codes mean, but I got exactly what I needed, except that my original bolt was a cheap alloy, and this one is definitely steel.
  • When it comes to airplane security for cyclists, Lennard Zinn said it best at []
    You absolutely cannot bring CO2 cartridges on the plane; not even in your checked baggage. Of course, what do you think inflates those life vests under the seats if you pull the tab? You guessed it, a CO2 cartridge! But, as with every airline security rule, ours is not to question why, ours is but to smile and comply.
23.10.2007 Cups Browsing Mysteries
  • So today Roberta tells me, mid-LP-release, that she can't print. There is no LaserJet available for her, which means that our server isn't sending out browse messages, which means something's broken in the Gutsy upgrade. Man!
  • tcpdumping IPP showed me that anthem isn't sending out IPP broadcast packets, but another box (with a dead printer, ironically) was. What's up with that?
  • Gutsy has cupsys-1.3.2; feisty has cupsys-1.2.8; ISTM that browsing for 1.3 must have been updated, because the configuration options are different. For Gutsy, I can use:
     Browsing Yes
     BrowseProtocols cups
    but for Feisty, I have to use:
     Browsing Yes
     BrowseLocalProtocols cups
    Note that BrowseLocalProtocols /is/ required there. There may be a way to have BrowseLocalProtocols defined as a consequence of some other setting, but I couldn't find out what. The code in scheduler/main.c hinted that it was involved, but oddly enough the source code is indentical in both versions.
  • Also solved my MRTG/SNMP problem with interfaces reordering today: [] -- take note to the hint in the MRTG manual, which allows you to specify interfaces using differing syntaxes: []
  • And on a final note: logrotate -d really means debug. I was getting a weird error when testing logrotate on a file:
     creating new log mode = 0644 uid = 0 gid = 0
     open("/var/log/named.log.1", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such
         file or directory)
     error: unable to open /var/log/named.log.1 for compression
    and was scraching my head. Why is this open() missing an O_CREAT? Well, doh -- the file wasn't created in debug mode, and that's why you get this obscure error. Silly logrotate.
21.10.2007 Gutsy and Network Interfaces
  • Upgraded Anthem to gutsy. Rebooted, no eth0. What's up? I spent a long time doing random ifconfigs until I realized that ifconfig -a actually did list the interfaces -- as eth3, 4 and 5!
  • Turns out that /etc/udev/rules.d now has a configuration file that persistently defines what the network interfaces are going to be called. It is regenerated by udev on startup (for the first time, I guess) and you can edit it to specify what you want it to look like. Fixed and restarted udev and they all look good.
  • Also finally figured out what was the deal with specifying interfaces for samba but still getting netfilter log spam: if you don't specify "bind interfaces only" it doesn't work! Read more at []
  • Final lesson of the night. If ICMP pings are going through your Speedtouch DSL modem, but TCP isn't, check if the interface isn't set to "napt". For some reason it doesn't seem to do double-napt the right way.
18.10.2007 PostgreSQL and daylight savings
  • So Brazil (for some reason) changes its DST date every year, based on calculations by "the scientists". I use Pedro's very cool tz-brasil package to handle that and it works pretty well most of the time. However, we run both PostgreSQL 8.1 and 8.2 in the server, and the 8.1 servers didn't update their time. What's going on?
  • Turns out that the reason for this is that PostgreSQL has its own copy of the timezone database, and tz-brasil doesn't update that copy (understandably). Martin Pitt explains to me that the reason for this is mostly compatibility with legacy systems, but that for Gutsy he's now just symlinked to the system zoneinfo database, and that upstream actually approved of this change. Whew!
  • Incidentally, the reason 8.2 worked was that its timezone was set to 'localtime' by default, which follows the default system time. 8.1 doesn't let you do that:
     kiko=# set timezone='localtime';
     ERROR:  unrecognized time zone name: "localtime"
    so you are stuck with updating the file.
10.09.2007 30 percent is steep
  • After riding over the unpaved, 30% gradient, mind-numbing Serra dos Lima at this long weekend's race, I was entertained at discovering an article at [] which discusses a few 30%-plus ascents across the world.
27.08.2007 Water landings
  • One day somebody told me that there had never been a successful water landing performed by a commercial airline. That's actually not true, as you can read at [] and [] -- in particular
    If you're flying from New York to Phoenix and you're smirking as the attendant blows into that plastic tube, remember that twice since the late 1980s jets went off the end of a runway at La Guardia and ended up in the bay. Both crashes left people very much alive and very much swimming.
03.08.2007 This TOS stuff doesn't work
  • So much for my apparent success of yesterday! I've found a couple of problems with this policy routing that are driving me crazy. First, Squid fails to put the TOS bits on some packets; while normally the 0x8 that I specified can actually be seen in an ethereal capture (though there it's called the "Differentiated Services Field", it's the same thing, really) in some cases, it just isn't: []
  • Apart from that, SSH also uses DSCP 0x8 midway in its connection when you are running a non-interactive command (it actually uses 0x8, 0x10 and 0x4 sometimes). This causes my server to also route the packets in the wrong direction! Very frustrating. While I could use netfilter to mangle DSCP away on the incoming interfaces, the fact that squid is giving me the headaches above suggests it's actually not likely to be worth it. Damn. Moved back to tcp_outgoing_address, with an ACL to avoid the host we want to route statically :-(
02.08.2007 It's been a while
  • but I just found a way to fix up squid and iproute2 to actually route the way I want to, and I think that's worth celebrating (and communicating) through a traditional diary entry. So first the problem: our server has two outbound connections to it; connection A is a static IP DSL link, which is pretty slow; connection B is a faster dynamic IP DSL link. We want most web traffic to route through connection B, but certain servers want to restrict per IP, so we want to route this traffic through connection A.
  • The easy solution to this is of course to use netfilter's mangle table and iproute2's ip rules to determine what goes where. We tell netfilter to mangle this way:
     -A PREROUTING -i eth1 -p tcp --dport 80 -j MARK --set-mark 1
    and we tell ip rule to divert this way:
     32765:  from all fwmark 0x1 lookup dsl-home
    To restrict host X.X.X.X to go through the other connection, I just added a specific IP rule:
     from all to X.X.X.X lookup dsl-business
  • This works perfectly, except for one situation: where traffic originates from the server itself, it always goes through the business link. The reason for this is explained in table 3-2 on [] -- in short, when packets originate on the local host, routing decisions are made before the packets can get mangled, which means the fwmark gets added too late.
  • Now that's such a corner case I would normally not care, except for the fact that we also run squid on this server. That means that all the traffic we direct via squid is actually getting routed through connection A -- which is slow and definitely not whatwe want. So for the past months, I've been using a very hackish solution, which is to use squid's tcp_outgoing_address to put packets on the wire with connection B's IP address. This works, but it's a big hack, and it requires that you actually avoid doing it for host X.X.X.X, because otherwise you're putting packets with connection B's source address on connection A. That means editing two configuration files for each host -- yuck.
  • Today I `discovered' the tcp_outgoing_tos config option for squid. I had not realized that iproute2 lets you do policy routing based on TOS! This actually end up being slightly more complicted than simply setting the same TOS in both places; first, because the squid docs mislead you into thinking that any TOS will do; a message suggests that rfc1349 doesn't agree with that, though: [] and even for squid there's some odd behaviour reported: []
     tcp_outgoing_tos 0x8
  • Turns out that there is actually a TOS bit in [] that makes sense in my case, which is 8 -- maximize throughput. So I set that up in squid and in ip route, and wow, the packets started flowing correctly. I discovered that ping also has a -Q option you can use to test the routing, and it works as expected, which is quite cool.
  • You need to disable the reverse path filtering for any of this (even using tcp_outgoing_address) to work. I'm not sure why, but:
     echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter
  • The unfortunate side to this story is that some connection-B-bound packets, for some reason, still end up on connection A, and what's worse, with connection B's source IP:
     00:55:36.352517 IP > R 2679150523:2679150523(0) win 0
     00:55:53.498535 IP > R 2759083133:2759083133(0) win 0
    I suspect it may have something to do with [] but I am not sure yet..
  • Did three months really just go by, or was that just my imagination? Where have I been?! Not New Zealand, like certain other creatures it seems: []
25.02.2007 Marmelópolis to São José dos Campos: 181km
  • World hold on..
24.02.2007 Visconde de Mauá to Marmelópolis: 148km
  • After a completely blacked-out night, I left Mauá after breakfast with Sylvia (Ivan apparently never has more than just coffee). I eat bread and spend the morning fighting the burning sensation it gives me. I fail to find a new camera at Mauá; I guess lots of people buy cameras for Carnival. I also forget to buy rehydration powder. I manage to fill my bottles despite all this incompetence, and call my grandmother to say hi and bye. She is lovely even when she forgets everything; she is definitely in the "face adversity with good humor" school and I have tried to learn from her as well as I can.
  • Mauá is a lovely place and I loved its activist community; everywhere you see signs of people rallying for all sorts of interesting and important causes. You feel that nature is well-kept by its inhabitants here; I end up wishing I felt like that everywhere. But in half an hour I wasn't feeling anything but the painful drone over the pass of Serra da Barreira into a village called Mirantão, about an hour out of Mauá.
  • The reason I ended up in Mirantão is that I've been unable to establish whether or not I can get from Maromba to Itamonte. Itamonte is on the other side of Itatiaia, and there isn't much in the way of roads around here; I should be happy that there is a way for me to get there at all without having to ride back to the tarmac of Dutra. I got my mother to try and call some travel agents around there but nobody was able to provide us with a reliable suggestion to go with, and the only story we heard was of someone that spent a whole day on a motorbike to do the 40km trail. Ivan suggested Mirantão, and I'm crazy enough to say sure why not.
  • So on this uphill to Mirantão I figure out that I feel only average today. This is a marked change from yesterday when I was able to attack all the uphills with a vengeance; today I feel sort of flat and it takes a while for the pain to become sharp enough for comfort. It's weird how a dull pain is rarely appreciated in cycling, but there you have it. It's amazing how I only really feel better after some 4 hours of riding -- before that I feel like I am practically dragging myself along.
  • Anyway, I wasn't very sure about this road to Itamonte. I had ruled out this trail from Maromba. I knew there was a trail through a place called Vale da Prata that Ivan had pointed out to me in his crumbling IBGE maps. But it all looked very sketchy, and at Mirantão a pair of guys on motorbikes explained how it was best to go through Santo Antônio; so after some Guará Viton (the black petrol from hell that god sent to save cariocas) I rolled off on that road. Man, was it hard. I'm not saying just "tough".. this was about 6km of really steep, really rocky uphill. I gasped all the way up. It was unexpectedly hard and will remain the second hardest uphill I endured on this trip (I think) -- and that's only because Passa Vinte had make me almost cry the day before. It actually made the 3km of uphill to Mirantão feel like a joke. At Santo Antônio I put on a healthy face and drank a coke at the local bar. I think bars are the only thing you can guarantee that every village will have, and this bar, next to the colourful little square that defines Santo Antônio, was the last sign of practical civilization I'd see before reaching Itamonte, some 3 hours later. It turns out that Santo Antônio to Itamonte is 54km of hard dirt road, and not a lot of locals had ever made the whole trip. My tour guide reassured me "even cars can drive on that road". Great. That makes it sound almost as bad as it actually was. Ouch. Long stretches of sandy flats ended up giving way to rockier and rockier uphills that would fit perfectly into a mountain bike marathon, and then finally a long, twisty and pretty technical uphill unfolded. My chain started to suck a bit at this pint and I was forced to keep ratcheting back and forth; at this point I felt pretty down and a bit depressed at how slow I was going, even after putting in an effort that I knew I'd have to pay for later.
  • But the area has got to be one of the most beautiful I've seen on this trip. Rocks and our native Mata Atlântica are everywhere; birds and butterflies and flowers decorate them. The road levels off finally and then bumps up and down through a handful of villages. One of these little villages has a bar whose owner is discussing VOIP with a customer. I have another coke there; this time it's warm but I am past caring. And then after an endless succession of up and down I reach the downhill to Itamonte, all 20km of it. I swear it's like an hour of no-pedalling downhill, not steep but fast enough to keep you honest. The road here is better, but not excellent, and the ruts and rocks teach me an "exit strategy" strategy. This routine is basically looking at a risky section and figuring out where I want to exit the section; it's really useful because what defines how much you have to brake is what comes after the section you are on (and not really how hard the section actually is). It's all about looking ahead, identifying risks and when and where to exit. Sounds like Barry Boehm and a VC on crack desn't it?
  • Anyway, finally hit Itamonte. It's an oddly small city with a million bikes per capita. I had a cheese-n-egg sandwich and a coke for lunch, and I don't really feel very good in the stomach. Finally manage to buy some rehydration powder from the prettiest pharmacy salesgirl I've met. Bloody expensive too!
  • I endure 20km of the most horrible road to Pouso Alto. I swear that I was in some sort of serious risk no less than 5 times in those 40 minutes of biking! The road is so narrow, the cars and trucks so fast, the vegetation so overgrown.. I have no clue how this nightmare of tarmac doesn't have a collection of crosses decorating it, but I'm not too interested in being the next cross there, so I take it easy and look back a lot. Friggin drivers honking their horns at me! At Pouso Alto I turn off from this horrible road, have another coke (burp) and hear from the man who runs this bar (another bar) that the road to Virginia would be "calmer". Well, doh. Only /one/ car overtook me for the collection of ups and down. This was a seriously peaceful 25km ride once I was past São Sebastião do Rio Verde (which is practically connected to Pouso Alto, really). I stopped only once on this road to appreciate it; this road which would appear to go to many places but which ends up in Virginia because "the gubmint didn't finish it". I wonder how many pieces of unfinished business has been left behind.
  • At Virginia it dawns on me that it is too far to get to Delfim Moreira today. It's getting dark and it's going to rain. I stop at a bar (yes) and get more instructions. So it's not too far to Marmelópolis, and I can probably get food and bed there. Now the funny part about that is that I had just read about Marmelópolis a few days ago in Itaipava, and now I was facing the possibility I would be sleeping there (if I managed to not die en route, which was easier said than done because at this point I had been riding for some 7 hours already). Fascinating coincidence? It rains at the foot of the 11km uphill I am about to face, and for the second time on the trip that little yellow Pearl Izumi jacket is called upon to save me. I clean my chain while I wait for the rain to go away, and it kind of does. The uphill is not too steep and is actually a lot of fun! I trick myself into just looking a the antennae at the far end of the valley and every once in a while I look up and admire how close they are already. There's a beautiful little waterfall on the way up, too. I reach a tiny village and am scared that this is all of Marmelópolis, but of course it's not, it's still some 6km beyond São José da Mantiqueira. I investigate the local bar and buy things that you put in your mouth and go crunch with nutrition or swish with hydration. And then there are signs, and then a steep bit of downhill, and there unfolds before my eyes Marmelópolis in all its splendour. I try and remember what I read about this place.. it used to host a pair of factories that made a sweet out of the Marmelo fruit, but they closed and the city has been asleep since then. But as I arrive the city comes back to life and I am in love with its peacefulness and its people. Hold on, find a pousada. Ring but no answer. Turns out the city's just had a blackout, but the owner's brother comes by and gets the owner to come by and open the place for me, the most humble and yet appreciative people you could find in such a place. As if they were honestly happy to hear your story, and eager to share theirs with you. So the owner worked at Scania, in São Paulo, and came back with his savings to set this place up; his brother lives here as well, with his mother, and they shower me in sweets photos and even a calendar (not sure how that's going to fit into my baggage).
  • That's all I get in terms of showers, though, because there is no hot water, and I've waited so long that it's now dark and real cold. Altitude. We've been chatting for hours, and no, there's no electricity, which is also a big problem for Marmelópolis because there's a major party supposed to run at the local club and everybody's bought tickets and is waiting out for this. We spend long hours looking at the mountains around us and figuring out if the trucks we see belong to the electricity company. So I mention stove-heating some water, because a man has to eat after some 9 of riding, and just as that is coming to fruition.. lights. It's a hot bath for me (luckiest human on earth) and then a stroll through the town for dinner at Monte Moriá. The owner, Jair, tells me about this Jerusalem landmark, while I eat an omelette, rice, beans, fries.. mmmmm. That's what I needed. He tells me about an alternative route, where I will see less tarmac and more mountains, and about the city, and about its history and folklore. I manage to avoid the disco on the way back, where washing and brushing and writing up is enough to trigger a shut down for the night.. night.
  • Marmelópolis is at 1303m, and about 3400 people live here. You need to have been there to see how pretty the stars are on a summer night, though.
23.02.2007 Conservatória to Visconde de Mauá: 123km
  • So it turns out that cycling clothes do not dry overnight, regardless of what is otherwise considered as fact. They are soggy and that's a bit depressing when you are awake at 7am looking forward to breakfast in dry clothes. I towel-dry them, and that does not work very well. Body-drying is a technology which /does/ work however. I have that early breakfast with an adorable housemaid and I pack my stuff. Nobody else is awake in this city. It is very pretty in the morning light. The road starts out up, as usual, and terribly steep; it then levels out enough for me to enjoy it. Some 3km out of the city I view the arched bridge which is an attraction in this area. It was built by slaves, I was told in Conservatória, and the railroad tracks used to go over it. I climb up and see what it looks like from up there. Somebody is building a little house on the right hand side, though you can't see it from below. Survival, I guess.
  • I had decided to change my route, which originally ran due west to Fumaça, to visit this bridge and another important feature: a 200m tunnel through which the old railroad used to go through. And it is amazing! It drips water through, and puddles and a river flow through it. You ride in and only have the light on the far side to guide you, and it's actually not a lot of light. I cross a man on a horse at this point and we wave to each other. I must admit I am happier to be cruel to a bicycle than to a horse. The road I'm following is narrow and twists and turns through the hills; I can only think of the train going through them, hauling cargo to and from god knows where. I pass by a house which has been assembled inside a deactivated railroad station; we have so many of these in my country. This one is called Leite de Souza, I think. The lady is amused at my request to take a picture of her house but in hindsight the sun was in the wrong position and it flares out the shot. I can still remember her holding on to her little baby in the morning light, though.
  • The road is not too hard or uphill and I roll through São José do Turvo and then Santa Rita do Jacutinga. São José is nice and small, but Santa Rita is amazing, and a waterfall runs through the city. This waterfall is walled off and you're not allowed to bathe in it; in fact, you can't even look at it from very close up and I was unable to get a decent shot of it. What is wrong with these people? I think the river is managed by this mining company set up close by and they must have some sort of weird voodoo with the river that they don't want me to see.
  • From Santa Rita to Passa Vinte it gets a bit scary. All I can see are steep mountains that look at me with evil cyclist eating grins, and the road is narrow and full of splintered rock. This is mining country. In fact, the state I have just entered is called Minas Gerais. This road splits up and there are two options announced, one through a named uphill, and one unnamed. I chose the nameless one; if this uphill has a name it's because it's got to be pretty nasty.
  • Turns out my option can't have been much easier. I go through three serious sections of uphill and downhill and it's not only pretty dangerous going down I fear I'll collapse out of heat going up. I can't remember if I used the small chainring here, but if I didn't, I should have, because the uphill that goes into the city is in three long and painful sections which I meditate through, click, click, click. When I finally reach the city I am afraid to say there is not much going on there. I stop at a bar and get the best information a man can get about the road on to Visconde de Mauá, and buy drinks at pretty much every establishment open here. I try and buy some rehydration powder at the pharmacy but they don't have any can you please try the local hospital. I'm in a hurry (what for exactly?) and say thank you very much and then ride off. And the ride is nice because it is mostly down and around and along the Rio Preto with its wide and charming curves. I stop for a while to clean and oil the chain which is a little bit worse for the wear, but still going okay. I pass by all these folks on holidays with their cars full of chairs, children and.. beer; I guess that's what these guys think is a holiday. Come to think of it, can't blame them given I'm giving a demo of the alternatives. But everybody I pass by is friendly (though not very curious) and waves me on into the right direction, and makes nice comments about the weather and how hot it can be and oh, it's a serious uphill to Mauá. I'm like whoa -- 12km of uphill? But that's what they say it is.
  • So I turn off in the wrong direction after a river and a bridge and then I turn off in the wrong direction again. What is wrong with me! I get advice, the second time after I'm some 5km off the track, but this road, it's so beautifully covered in trees, that I forget it. When I finally do get on the right road up to Mauá (no, not really, but I can't remember the name of the little village at the top of this pass..) I have been psychologically prepared for some serious handlebar-hugging but it never comes. There are only two steep sections and I negotiate them by spinning hard before hitting them, and then keeping the cadence high enough to get past them. I use another strategy too: stopping to look at waterfalls! There is a massive waterfall next to the road and I take this 2k detour because you only live once and this is no little waterfall. It's got to be some 500m down at least, and I hike up over the rocks and look at it from many different angles. I tell you man, this is a /lot/ of water. The rains of January are still being washed down the great fluvial veins of Minas, it seems. The uphill to the pass is not too hard; I think I must have climbed in total some 8km over an hour, but this is now behind me as I roll easily across the flat at the top. I run into an electricity truck and they all point me in the right direction (and I'm hungry by now, but I will have to make it). As I descend out of the hilly section at the end of the pass I notice that there is this massive rock towering over me, and from there on Pedra Selada watches me ride through the farmland that you run into approaching Mauá. The rock is particularly striking and once you hear its name you can't help but think it actually is saddled up. I chase a bus down and pass it and I must be going over 40 an hour if he's not keeping up (stopping for everybody in sight as he was, too).
  • I arrive in Mauá early. I run into Sylvia's house just after I decide to eat some of my food as I am just starved; it is right on the road I am coming into and it is a beautiful little cottage with a.. pizzaria right next door to it. You can't go wrong with pizza. Trout pizza, pizza with chèvre cheese, vegetarian pizza... I definitely need the calories. Sylvia and Ivan treat me like a king and I am already spoilt 30 minutes in.. hours later I can only move around by rolling. We spend a lot of time reminiscing about family (and we have lots of that) and the past; her grand-daughters join us for pizza and I can't help but laugh at the age gap. Seems like everybody has an age gap to me; where are all those 76ers I grew up with? And are any of them on a bike today? After 120km of dirt I don't think I can guess the answer to that today.
  • Mauá is at 1300m, population around 6000. The city itself is only a short little strip with shops on each side; most of the population lives in little country houses around it, I guess.
22.02.2007 Itaipava to Conservatória: 151km
  • So on my Carnival vacation, following the tradition of last year's epic ride to the beach, I decided to set up a bike trip from Itaipava, where my aunt Bia and my grandmother Alayde live, to as far west as I could in 4 days of hard riding. The map I bought with Tecão at the bus stop said that was probably São José dos Campos (which is where we ended last year's tour) and after being body-searched by the armed forces while getting into Rio, enjoying a raucous Carnival at Areial with my mother, sister, Crica, Mari, Emilia and Olimpia, and cycling with Brazil's finest Avancinis, I was more or less ready to go. Starting a bike tour is a funny thing, because it's just as if you were leaving home to go for a ride, except you don't come back, and instead ride on until you are past the point of no return. These diary entries will be in installments as they are large and mostly reproduced from a battered notebook which survived the rains on the fourth day (we'll get there), but they are about as much fun as actually going there, and they hurt a lot less to read than to ride.
  • I leave Itaipava at around 9 in the morning. It's hard to leave early when you have all your stuff to pack and yourself to prepare, though this does get a bit easier as you get into the pattern of doing it daily. My grandmother Alayde is lonely all by herself in that big house, as Bia and my uncle are down in Rio for a doctor's visit today. I think many lonely thoughts as I roll out feeling well but a bit confused. I ride past (closed) bike shops (damn, wanted to buy a Presta adapter..), sleepy Itaipava on this post-carnival Thursday, up and around and then finally out to the road where I attacked everybody (on a mountain bike) yesterday and survived with a smile. The road turns off to Araras and then starts going up and down, rolling in the beginning and then it's way up after some 10K or so; it is cold and I wonder if I should have pulled out that rainjacket that yes Michy you give me the most spectacular things but never mind, it's hard going up and I'm only cold because it's 95% humidity around here (as usual). The climb is probably around 15% at parts, and at least 10% average. I grind up in the middle ring (and will only end up using the small ring on Friday, and even then, only for a short while), overtaken by little busses and big pickups, riding up into the clouds. It was sunny when I left home, but here the valley is covered in pretty but dark clouds in those menacing patterns that make you think of Pearl Izumi jackets (like that one yes I have it stowed away way too carefully in my pack). As does the downhill after the unexpected pass (well, it's not so unexpected after you're twisting your frame left and right and looking up in hope of some respite); no, come to think of it the downhill makes you think about that black North Face fleece that you decided to send off via Brasília with the rest of your baggage because it was too heavy to carry. So, freezing hands and back, the road tilts down and DOWN and then it flattens out into Vale das Videiras.
  • So the Valley is the sort of place that the eco-riche enjoy; lots of little restaurants and pousadas and the kind of place that is tastefully painted and clean and delicious and unfortunately not our destination for today. I roll on past Malta and then through a tiny village where the tarmac finally ends. The road from here on is bumpy but hardly sandy, and I'm all questions as to how my little KHS will take the rack I've attached only 12h ago to its seatpost (I will later find that the rack grinded a millimeter off the post across these 600km, which is a rate of around 0.0017 mm/km; a good deal, I think). The rack makes noises and shakes a lot and occasionally swings out to the right (always right. always right. is that my crooked pedalling?) but is remarkably stable for the R$20 it cost a year ago. About this road: the views are magnificent, left and right. Black rounded rock that marks this region of Brazil is everywhere. I roll on to Coqueiros, a tiny village on the crossroads, and then it's actually tarmac into Maravilha. And on that tarmac downhill, once a kombi has ridden past me, something funny happens.
  • My bike is my old KHS, which is OX3 cromoly mostly assembled with XTR plus an assortment of parts some of which actually survive from my S-Works tour bike I used in the Great Travels of 1998. But the wheels are my old racing Mavic Crosslinks, except the rims have been replaced by DT Swiss, because rims don't last forever and even less so when they have two XTR vise-grips, designed by Japanese engineers, machining into their walls. So this bike is sturdy and has seen everything, and just last Monday it has seen a bearing replacement, because on the Sunday ride to Teresópolis and back the rear hub made really scary noises and then blew up completely. Now Crica and Mari drove me around Carnival Monday looking for a bearing shop and we actually managed to buy replacements, and me in my premonitious self buy two because spares are wisdom. And then my wisdom sends this same spare off straight home with my stuff because, yes, bearings are too heavy to carry around. Except that now, on this tarmac downhill into Maravilha (and only the portuguese-speaking can appreciate the irony), the bearing starts to make the same ominous noises. It sounds like little bones are being ground into the thing which they make Jello out of. Or maybe like the premature end of a bike tour. So I am depressed. But I roll on despite the noise, and the fact that my rear wheel has developed this pretty nasty wobble that at times rubs the right stay.. you know, it's OX3. Nothing can really harm it. A kid rolls by me into Maravilha and tells me that's what the place is called, no serious it really is. He rolls by me on a little BMX, and him and I know that it has no brakes which means skidding is the only way of stopping. I ask him, only half-jokingly, where I can find a bike shop, and he shows off his little-proud-blue and brand-new grips and says that at Paty do Alferes is where you get them. I conclude I must visit this shop.
  • So as soon as I get into town I roll down the cobbles, which means Unlock ETA on the Marzocchi because it's hard when it's that bumpy, and my hands were a bit numb this morning, probably because of the extra effort to hold the weight attached to seatpost, yes? I pass a typical small-sized town in Brazil. Lots of construction. Real estate. Everything for sale. Brazil rolls on too, regardless of crisis and scandal and success in my world it seems. I ask around and end up at the bike shop. I am destiny's fool today too. The bike shop is not what me, urban creature extraordinaire, am expecting, because not one bike in it has a quick-release skewer, and that is a simple way of saying bad news to a cyclist. So I try easy things first, and ask the guy who runs the shop if I can use his wheel truing device (which is doubtlessly and then confirmed of course to be a contraption machined out of a fork and some custom aluminum adjustment bits attached to it via complicated wires and plates) to try and get it straightened out, and he says that no, we don't do this sort of thing around here, you leave the bike and then you pick it up later. But this is Brazil, so I say "no, no, I can do this, really, and I can pay for the time I use the stand" and the guy says ok. So I fix the wheel as well as I can, except that it only depresses me further because the crackling noises and loose axle are self-evident as I spin and true it. Why am I even bothering? Well, because. And easy things first.
  • So I try and take apart the rear hub, and it's easy to do this on the Crosslink. But the left-hand bearing is fine, so we're going to have to disassemble the cogs, and though he miraculously has a cassette tool (what for I wonder) he lacks a chain whip. Well, chain whips are easy to cobble, and a bit of chain and a wrench make up for it. Out come the cogs, off I spin the nut that holds the bearing in place inside the freehub body, and.. oh. Out come lots of little steel balls and three almost triangular sections of a cylinder, which are obviously a cracked inner ring. But this is a sealed bearing hub, you see. These things aren't user-serviceable. They live their precise little lives inside walls of steel and virtually nothing but nuclear impact makes them come apart. So it's like when you look at your patient and you see his pancreas and spleen without needing an x-ray: you know it's gone the way of Mr. Eko. But hang on. I had just replaced this bearing last Monday. WTF?
  • So here I am standing inside one of the most understocked bike shops in the world, with a cartridge-bearing wheelset disassembled, and a very specific cartridge bearing that looks more like army shrapnel. How do I get myself in these situations? The bike mechanic is sympathetic in a really cool way and him and I end up having a great time musing about ways to fix the wheel. You can't really put ball bearings into a used cartridge, and particularly one which is in bad a shape as mine. So I instead walk over to a gas station closeby, axle and bearing bits in hand. There are two gas stations and both apparently sell automotive parts, but I choose the one on the left. And at this station there's a shop, where in turn there's a guy peering into a computer screen and I greet him smiling (you have to be positive when you're as busted as I am). He half-ignores me, then comes around to looking at me. So yes sir, I am looking for a bearing replacement. What's the code? Uhm, well, this is all I have of it. Display axle and mangled bits of metal. Eyebrows. I need a code if I am to locate a bearing. Well sir, unfortunately this is all that's remaining of the bearing; can we not do some measurement and searching? Young man, we seem to not be communicating. I say I need a code to locate this bearing, and you have none. What application is this for? It's for a bicycle wheel. Oh, then. Bike parts are found in the bike shop.
  • So I look at him feeling like 65 cents. Instead of cursing him, though, I measure the bearing, try to find it in a catalog, and when I conclude he only has bearings slightly larger than mine, I give up and walk away with his unfriendly replies stuck in my head. At the bike shop the mechanic is sympathetic again and asks me what I am to do. I consider this myself; call home? Catch a bus? Find a job? Meanwhile he is busy opening the counter and looking at a bottom bracket. Not a 2007 XTR BB I tell you. But inside this bracket you can see a little cartridge bearing. And you won't believe that it's exactly the same size bearing as I wanted, either. Well, neither did I, but it fit and after some copious hammering (yes, you often need to use hammers around this KHS) the old bearing was out and the new bearing was in. That's the way you fix things! Perhaps most curious was the discussion about pricing of this bearing. The mechanic tells me that yes, the bearing works, but that I'll have to pay a steep price for it given I've rendered the BB useless. I say whoa, here goes my lunch money. I am in the worst possible position to negotiate and prepare to shell out hundreds of reals. Then he does little calculations, and you can see the numbers bubble up in the ether of his thoughts. And he tells me: R$9.80. No, really. And all this while, the truth in the gas station salesman rings in my ears. Bike parts, bike shop. Doh. The mechanic even finds me a spare bearing in a box before I leave. I smile, confident that I've just confirmed that God actually exists. And on with this cycling business.
  • The road between Paty and Miguel Pereira is run alongside a set of deactivated railroad tracks which double as a bike path. Miguel and Paty are an odd continuum, even though there's supposed to be some kilometers between them, and I catch glimpses of bike shops over my shoulder. Maybe I'm not so out in the sticks after all. Miguel is a charming little town and pity it doesn't have a disposable camera for sale so I can show people just how much. Fair enough, my memory is my personal prize. So I ride along the road to Vassouras. It's hot and sunny but I hammer it out, faux aero-bar position just like Floyd taught us last year. The road rolls around and down, down and down, right, left, and I'm in Vassouras, university city which wins today's picturesque city square contest. And I finally buy a camera to prove it! Another irony: the bike shop here actually has the brake pads I've been trying to buy for a week, and it costs R$5 and change. I am being spoilt by this place. The pads are GTS brand, which my friend Gaucho always finds good things to say about. I figure they could improve, but at least they are still "starting". I forget to buy the Presta valve adapter though. Again. Roll away anyway, and off to Barão de Vassouras, and then to Juparanã, where I cross the Paraíba river in an odd but lovely bridge. I take a snapshot of the tracks and the river underneath it. It is sunny and very hot and I love being here.
  • I hammer along into Juparanã, over cobbles and around a square and somehow Ms. Tatoos and Mr. Bike can't seem to agree on the best way to advise me to get to Conservatória. I laugh, and it's the third time I ask anyway. Juparanã is charming but strange, as if it's a ghost town stuck in the wake of Carnival. The road climbs up and it's not too harsh, and then it turns into a hot and rolling race on tarmac. I must have been overtaken by at most 3 cars in the hour and a half it takes me to dust this section. The road is great until it disappears into craters and then it is great again; I muse how hard this must be to drive on, and it reminds me of driving to Ouro Preto two years ago, stuck on these secondary roads that cyclists love and drivers hate. I make it to the end of the road unscathed and then left towards Barão, but I turn off into the dirt road of Conservatória. 120km and almost there. It is a hard ride up and down, or maybe I'm just not used to being off-road. Conservatória takes a while to show up; I'm tricked into detouring to look at a waterfall which is really more of a pool, and it's not an easy ride up, but I have matches to spend still. That is, until I realize that Conservatória is not close! In the end I get there. It's a lovely little cobbled town, musical in every aspect, and with houses that are named and not numbered. You need to go there one day. And send me a postcard. I stay at the nicest pousada, and it's expensive but worth it; dinner is at a portuguese restaurant that is charming and delicious and serves tortillas like Emilia would have me eat after a long day like this. I complain very little tonight, 150km and change. Laundry, swap those brake pads and I am a dead man until tomorrow.
  • 150km in 7:25 (20.2 kph). Heart rate averaged 126, maxing out at 172 (I think out of Araras). My CS-200 tells me 3976 calories. Conservatória is at 518m; population 6500.
09.02.2007 TV on the Radio
  • Is so good it hurts. Don't walk, RUN and steal some of their music today -- while you still can <wink>.
07.02.2007 Ouch
  • My right thigh hurts; I think I have tendinitis somewhere in my sartorius.
  • I h8:
     ProgrammingError: ERROR:  for SELECT DISTINCT, 
         ORDER BY expressions must appear in select list
  • But I <3 science: []
    Harvard University psychologist Ellen Langer and her student Alia Crum found that many of the beneficial results of exercise are due to the placebo effect.
06.02.2007 First race of the year
  • And two crashes later I finish second and 22nd overall: [] -- my conclusions? a) 12 minutes off the pace b) base training makes you slow c) Larsen Mimo tires up front are too dangerous for me d) all eyes rest on March. Pictures up at [] and []
02.02.2007 U R what U 8
  • Remember that thing about me having plotted my blood tests in a spreadsheet? Well, I just discovered that Scientists also suggest that "Vegetarians and semi-vegetarians are less exposed to cardiovascular risk factors": []
  • Being a vegetarian is even good for the environment. I think TGI should factor that in to avoid me having to plant 100 trees a year :-/ []
01.02.2007 All that suffering works wonders
30.01.2007 Never let culture stand in the way of TV
29.01.2007 Fashion reigns, but fashion rains?
  • You won't guess that I was at [] this weekend. I was on biking holidays (for the first time in some 30 days too) and Emilia and Olimpia were down in São Paulo so I took the bus down on Friday evening and spent the days roaming the city. You always spend horrendous amounts of money in São Paulo, though this weekend was cheaper than usual because the fair was free (and the freebies were fun too). We saw Anish Kapoor's São Paulo exhibit (I had seen the one in Brasília which is very similar but has some peculiar differences in positioning and setup). We were late to the play that Emilia is performing this weekend and that was a pity but I have seen Autumn, Winter (by Lars Norén) before so not a complete catastrophe. Many other wonderfully bizarre things happened over the two days; one that immediately comes to mind is watching leadout man Chamorro (for Sundown) actually win Aberto da República in Brasília after dropping the favorites and his main man Morcegão in the final push to the line. I have never seen this happen before in a race.
  • Also presenting at SPFW was The Green Initiative, Osvaldo's reforesting project that has been making waves all over. The cool thing about TGI is that they make it easy for anybody to calculate how much they would need to plant in order to neutralize their equivalent six-month emissions, and it's trivial to actually go ahead and sponsor the reforesting for that amount. Very smart.
  • Apart from that it rained. It is raining here today too. Excessive rain sucks, and we've had way more than an excess this year. It hasn't rained fish yet though: []
28.01.2007 It almost happened
  • If Adam hadn't spoken to the cowboy, it would have all been shut down.
26.01.2007 Dismemberment pickups
  • I mean, Dismemberment Plan and Silversun Pickups. But I keep hearing Boards of Canada in them..
25.01.2007 An anecdotal investigation into NFS performance
  • Johan often complains. It's sometimes because of NFS. Today Johan pointed out to me that issuing a copy of a working tree over NFS was really slow:
         jdahlin@walrus:~/dev/sicem$ time cp -r gazpacho gazpacho-2
         real    2m9.621s
    and I was intrigued as to why indeed that is so slow. It's an average-sized tree: 33MB, and it contains about 2500 files. So why does this copy, which takes about 3 seconds on the server, take so long over NFS? The short answer is that file creation is synchronous, and I have tried to start a thread about this over at []
22.01.2007 Transform null equals?
  • Today was a day of many WTFs. So you tell me what's wrong in this picture?
     launchpad_dev=# select * from bug where owner != NULL;
      id | ... | date_last_updated 
      (0 rows)
      launchpad_dev=# select * from bug where owner = NULL;
      id | ... | date_last_updated 
      (0 rows)
      launchpad_dev=# select count(*) from bug;
      (1 row)
    Yeah. Salgado and I were bitten by this "feature" today in the karma cache updater and I just found it so dangerous that I have got to question the value of having this in the SQL standard for anything but cuteness. There's an option in PostgreSQL that gets the sane behaviour back: transform_null_equals. The funny thing is the only result you get back when you query for "transform_null_equals" and braindead is (as usual) a comment about Microsoft: []
21.01.2007 Google: Cinema São Carlos
  • "São Carlos produz 1º filme inteiramente local": []
  • Our apache dies every time logrotate runs. The logs tell us this:
     [Sun Jan 21 06:25:24 2007] [notice] SIGUSR1 received.  Doing graceful restart
         accept_mutex_on: Identifier removed
     [Sun Jan 21 06:25:24 2007] /usr/lib/apache-ssl/gcache started
     [Sun Jan 21 06:25:24 2007] [error] (2)No such file or directory:
         mod_mime_magic: can't read magic file /usr/share/misc/file/magic.mime
     [Sun Jan 21 06:25:24 2007] [notice] Apache/1.3.34 Ben-SSL/1.55 (Ubuntu)
         mod_filter/1.4 PHP/4.4.2-1build1 mod_auth_pam/1.1.1 mod_perl/1.29
         configured -- resuming normal operations
     [Sun Jan 21 06:25:24 2007] [notice] Accept mutex: sysvsem (Default: sysvsem)
     [Sun Jan 21 06:25:24 2007] [alert] Child 7177 returned a Fatal error...
         Apache is exiting!
    Funny thing is, it happens to a bunch of other people as well: [] []
13.01.2007 If you REALLY need to use PHP
  • Then don't do as I do:
         $open = 0;
         $filename = "../DIARY";
     <!-- BEGIN_DIARY -->.
         $fd = fopen($filename,"r");
         while (!feof ($fd) && ( ! $count || $i <= $count ) ) {
             $buffer = fgets($fd, 4096);
             if ( ereg("(^[0-9][0-9]\.[0-9][0-9]|^TODO)", $buffer) &&
                  ( !id || ereg("^$id", $buffer))) {
                 $open = 1;
                 $buffer = explode(" ", $buffer, 2);
             /* open day block */
       <TR><TD CLASS="diaryhead">
       <A HREF="diary.html?date=<?=$buffer[0]?>"><?=$buffer[0]?></A>
  • Instead do as I say: use a templating system like Smarty or FastTemplate.
           <p><b>{t}Last 24h{/t}</b></p>
           {if $24h_ip}
           <table id="TopIp">
             <tr class="Header">
  • Every time you use inline HTML in your PHP scripts, god kills a kitten. If you won't do it for me, do it for the kittens.
12.01.2007 Hand crafting
  • The ACM Queue supplement of this month, on the topic of 2007 development tools, has an editorial that says the following:
    The era of handcrafted code and tests, and then a hand-off of code via uncoordinated linear processes into production, is coming to an end.
    Really? Does anyone see an end to handcrafted code and tests? Not in the Free Software world, I don't. In fact, I see less and less code and test generation tools, while I see more and more abstraction in the form of frameworks and libraries.
  • Speaking of which, I finally hacked up an RSS feed of my diary. Blame Fabio C. P. Navarro for reminding me that it wasn't that hard. It is actually one of the ugliest hacks I've ever produced, and yet I am still proud of it. Yes, it too was hand crafted.
10.01.2007 Window scaling?
  • One of our clients is using a satellite link which carries Windows packets perfects, but not Linux packets. Why? Turns out the issue is some router on their outgoing path which doesn't handle TCP window scaling (as specified by RFC-1323) correctly. The horrible workaround is to disable window scaling on the Linux hosts.. but Dave M. would frown: []
  • Or could it be tcp_timestamps? There's some evidence that can be problematic with broken routers as well: [] []
09.01.2007 Speaking of fighting back
  • It seems Daniela Cicarelli and her co-star in their "home" video (available everywhere on the Internet you care to look) have managed to "fight back" and get YouTube banned across Brazil! It's more a beach video than a home video, to be honest: []
  • I noticed this on the cover of the newspaper when I was out buying food for Olivia this morning and I have got to say this is wonderfully insane. I guess there are two sides to it. On the down side, there is a lot of great content that we're going to have to miss out, but on the upside, you have many options to grab the amateur video elsewhere: [] [] [] [] and, oh yeah, Google, who owns YouTube still lists the video, anyway: []
  • What can I say. Thank god for effective protection of privacy? I wonder how much effort it would take to knock down Google, come to think of it. Zuardi has more to say about this, in softer words and a sweeter language than I do: [] and somebody's actually registered a boycott domain already: []
  • If you think you might enjoy Goodbye The Band, since the track above is lost and gone, try this: []
  • I bought a Kong toy for Olivia today. I'm reading about stuffing them, which apparently is something of an.. art? [] Wonder if I got the right thing? This guide actually says that "Kong Toys Are The Best Toys For Dogs": [] ... but... an automatic dispenser? []
08.01.2007 Fighting back
  • Hardware hell almost took over my weekend but I fought back and won. Upgraded the drives in the server to 73GB and added them one by one to the Raid-5 doing the musical chairs routine. It was unfortunate that along the way I got the SCSI transmission blues: I replaced the SCSI cable for a cable with more positions, then replaced one hard drive, then replaced the next, and that's where the SCSI errors appeared. I rebooted out, swapped the cable for the old one, and the errors went away. Swapped the rest of the drives. Swapped the SCSI cable back in. End of problems. Go figure!
  • Here's a bonnie++ run of the Raid-5 with the new Atlas Vs:
            ------Sequential Output------ --Sequential Input- --Random-
            -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
       Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
      7592M 18494  59 28195  34 21676  26 40032  92 74555  21 596.9   1
            ------Sequential Create------ --------Random Create--------
            -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
      files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
         16  2662  98 +++++ +++ +++++ +++  2746  98 +++++ +++  6460  97
    By looking over the internet I notice that the performance I'm getting isn't actually that great (I've seen setups that do twice the sequential read and write speed we do) but.. I'm not sure why.
  • Was reminded by [] of how to copy partition tables using sfdisk. It's actually too trivial:
    sfdisk -d /dev/sda | sfdisk /dev/sdb
  • Then discovered what /etc/iftab (and iftab(5)) was meant to do, and stopped the interfaces dancing around every time I rebooted; it was almost completely random, amazingly.
  • VMWare refuses to run over SSH on my PowerPC mac, and I haven't yet found out why. I discovered today it does run on my laptop, but only after I added the infamous
     xkeymap.useKeycodeMap = "TRUE"
    option to my ~/.vmware/preferences. Go figure. Funny thing is that Gustavo's email to the redhat list is what reminded me of it: []
  • I then got the new VMWare tools installed; I liked seeing that it actually allows you to shrink virtual devices (though I don't need to right now), and that it installed easily after I added a CD-ROM to the virtual machine (who knows why? I had a virtual CD-ROM there but it didn't work) and did the Add/remove programs thing.
  • I hear thunder on the horizon.. oh-oh.
05.01.2007 A Crater
21.12.2006 7 meters of rain
  • [] should make London residents feel better: 7000mm of rain fell in 2000 in an area in Calçoene, in Amapá, northern-most state in Brazil. That's like twice as much the second-most-rainy place registered, which is around Panapiacaba, near São Paulo capital. One interesting fact in the study is how much rainfall varies across the Amazon region: some places have almost desertic profiles, whereas others are almost as.. good.. as Calçoene.
20.12.2006 MySQL repair man of the day
  • I had to fix some corrupt MySQL tables today. If only I knew how. I was running into a problem: any insert into the bugs table for Bugzilla told me the following:
    Duplicate entry 'NULL' for key 2
    Thing is, there is no key 2 for the bugs table. Scratch head, right? Oh-oh: []
  • Turns out there are two great commands for MySQL I had never used: CHECK TABLE and REPAIR TABLE. A number of these tables were corrupted! I'm not sure how bulletproof the recovery is, but I hope it's good enough -- no 8am calls for me tomorrow please!
11.12.2006 The heat is on
  • At least inside the server case:
     kiko@anthem:~$ sudo hddtemp /dev/sd[abcd]
     /dev/sda: QUANTUM ATLAS10K3_36_WLS020W: 37°C
     /dev/sdb: QUANTUM ATLAS10K3_36_WLS020W: 37°C
     /dev/sdc: MAXTOR ATLAS10K5_73WLS: 44°C
     /dev/sdd: MAXTOR ATLAS10K4_36WLS: 39°C
    So maybe the drives which are higher up in the case are hotter, and the 10K5 is hottest. Why is that I wonder? Or could it be that the more modern the drive, the warmer it gets?
06.12.2006 That's why they call them scientists
  • Apparently scientists have discovered that environmental issues such as contact with family, exposure to drugs and poverty have more to do with people taking up harder drugs than being smokers of pot: [] -- and all I can really say is "duuuh". The study is interesting, though, in that it used a population with groups that used pot before or after cigarettes and alcohol, and neither of them had a higher propensity of serious drug addiction.
  • One of our server's fans is on strike. It's a Minebea 3110KL-04W-B69. Interestingly enough, I found in a message post at [] its CFM rate -- about 42.
  • You might ask yourself why I am looking at [] -- to be honest, I don't even know myself. But it's pretty cool, isn't it? Thule make a 4-bike one too, but it's more than twice the price, and this one is so nice and compact.
05.12.2006 Was it the shorts and sandals?
  • Yesterday evening something interesting happened that I didn't mention. So I went to see if everything's sorted for me to finally vacate and return my old house, and this is after an army of painters and workers have been over it fixing scrubbing and cleaning up, and my bank account has suffered the usual million little cuts in getting this sorted out. Now my landlord's had a bit of bad luck this year and his old lady is very sick, and the entire family has moved in to his place and are doing a good job of cheering him up. I've stopped by a few times to pay my respects and talk about the house and generally I think I've been a good tenant and a respectful neighbor. I mean, I've minded my own business, taken good care of the house, and made improvements during the years I was there to the extent the house is nicer than when I moved in. I think that's good karma to share.
  • And then there was yesterday. While I am walking into the house, my landlord's son greets me and we make conversation, in typical São Carlos fashion. How are you? Pretty good; how are you guys doing? Ah, not too bad. So.. you're a student here, are you? Me? No, I graduated a long time ago. Oh, really? Yeah. I finished my master's about 4 years ago and haven't gone back to study yet. So he pauses for a bit and then asks me what he's been meaning to ask me all along. So, do you, I mean, aren't you going to go out and get a job?
04.12.2006 and back
  • In second place, and third place overall, which was great: [] I was a bit miffed at having missed first place in our age group by some 8 minutes, given we led the race for a long while, and I am still asking myself how we managed to fall back 12 minutes from first place overall! However, I had only one very slight and uneventful crash at night, and the rest of the time rode super-strong. I finished the first lap in second place and the third lap (I had to do three in a row, which kinda broke me) in the top 5, which very a pretty pleasing experience. Next year we will shoot for number one, because it's been many years of #2 at this specific race. The last time I was on that same podium, I recall, our team ended up in a fist-fight! At least the runners-up were a bit classier this time. Pictures I found online include: [] [] []
01.12.2006 Almost there
  • The last great race of the year starts tomorrow: [] so today João, Gaúcho and I did some loops of Russian Roulette, and yes, you guessed it! The first mandatory crash was mine! João had a nastier one later because he had a chain skip and I hope he can sort that out until tomorrow. I may have pictures to share on Monday; here's hoping batteries last. I will take a video camera to shoot some of the training loops and well who knows, perhaps we can even manage to shoot one of the final laps. Wish me luck!
30.11.2006 I have been so busy
  • I've been unable to stay awake at the job: []
  • But still smiling through the rough of it all: []
  • It was Daniela's birthday over the weekend, so I had to do a marathon of work and travel on Saturday that ended up at 1am at the airport in Rio; highlights were me missing the flight in Campinas, Fabia and I driving to São Paulo in an amazing rail of rain, our flight delaying 2 hours, and actually getting to the club. Pictures of the really fun part of the trip are at [] and mmmm I realize I need to shave sometime soon: []
29.11.2006 The Forest (The Cure)
  • Today, after 14 years of negotiation, a law that specifies use and protection of Brazil's Atlantic rain forest (Mata Atlântica, perhaps my favorite forest worldwide, and one in which I have spent many nights, and left many pounds of flesh in) was approved by our state legislators. 14 years is a bloody ridiculous amount of time to do anything, but this is such an amazing success that I can't help getting a knot deep down that our bumbling government has actually managed to so something unequivocally good. So share my hope, and if you can savour the portuguese, read more about this milestone at []
28.11.2006 Gravity
  • Lennard Zinn finally explains why heavier cyclists descend faster using the math here: [] -- but the most interesting part of it is that he actually links to an article from a Brazilian site: [] -- and that article in particular is an amazing resource for both climbing and descending for cyclists who are scientifically inclined.
24.11.2006 So you have a Siemens Gigaset
  • And you are curious how to set the names of the extensions? You select the "internal" menu, and then each individual phone has its own menu where you can change its number, set its name and unregister it. I am still not sure how you get some of the extensions to not ring when somebody calls in. Tech support says it's not possible -- well that just sucks. I guess these phones are not really useful for companies with secretaries, after all!
22.11.2006 Jono says it all
     <kiko> I suck at mutt
     <jono> mutt? kiko, the 1980s called and want their mail client back
21.11.2006 They overcame ED!
  • Of the 16 bits of spam stuck in the moderation queue for the Kiwi mailing list, 14 of them mentioned Erectile Disfunction -- a few of them abbreviated as ED. Has somebody been leaking information over the INTERNET??
  • Back in Brazil after some good ole USAing. It was fun. I need to add some backlogged entries to ensure I actually remember what I did.
01.11.2006 Moving house..
  • I'm moving house today, and then moving city for a few days, and then moving country for a few weeks. Don't expect to see me on the hills to Analândia for a while.. I'm going to be up in Minneapolis, which is freezing: []
31.10.2006 Some things in cycling just make you go WTF
  • So how do you explain, after being caught red-handed with cash and dope, evidence stacked as high as the Galibier, Manolo Saiz is awarded a ProTour license for 2007?! WTF? At least somebody found the words to make it right: []
30.10.2006 In no particular order
  • In the next 5 days I need to:

    a) write two reports
    b) land 4 branches
    c) visit my grandmother
    d) go to Rio
    e) ride 300km
    f) fly to Minneapolis
    g) produce a plan for next week's UDS
    h) produce a plan for the Canonical all-hands
    i) rent bicycles in various places
    j) get 5 custom parts ordered and delivered at Michy's house in time
    k) move houses
    l) find a home for 2 dogs
    m) interview 2 people for random jobs

    Oh, hmm and n) write an obscene number of emails. I know I do that already but this week will be particularly obscene. I might even include profanity in them if you really ask for it.

28.10.2006 It's a hot saturday
  • and as usual the afternoon acid baths are scheduled. Tune in at 14:00 if you are that sort of person.
  • Mez and I yesterday tried to figure out how the hell to get Mailman to let messages with a certain header through without making the list unmoderated. It turns out that the spam filters can almost do what you want, if not for a strange design detail that the UI doesn't make clear. The bug report and a workaround are here: []
  • I was doing some google trawling of myself, and found a set of links that are historically interesting (and I don't even remember most of it): [] [] [] [] [] []
27.10.2006 Constant Gardeners
  • Today I am going to write about how amazed I am with gardeners in my home city. It's a long story, but, basically, I live between my house and my office in São Carlos. Each of these has a garden, and each of these gardens requires regular tending to. I do it occasionally, but I am really too busy to do it regularly, and for this reason we've tried to find somebody to come and do it regularly for a monthly price. This is the same sort of work I used to do up in New Milford in 1998, and I really enjoyed it. I enjoyed getting paid regularly, too. Funny thing is, it appears the gardeners here don't! You see, they come and announce good intentions in doing weekly work. Because there will have been some time since the last well-intended gardener has done trimming, there will be some initial heavy lifting required, and I offer to pay that work up-front as a sign of good will. So the gardener comes and does the work and we pay him and the houses look smart, and we say yes sir you do acceptable work let's do this regularly and we'll pay you once a month. That's the last we see of the gardener. At some point some other gardener comes along, and the story starts over, with an interesting overlap, because the old gardener comes back a few weeks later and says hey remember me I'm the gardener, to which I reply yes sir but it's a bit too late now as we've found a new and reliable replacement. And after doing this some six times, I realize what the problem is: I'm stuck in a Moebius loop.
  • Overweight and heating up the world. Hard to actually believe, but [] has a report on how weight increases in the American population have led to increased fuel consumption. I am blaming them for how hot it is here today.
26.10.2006 So far
  • It was an interesting morning. I did 5 repeats of the local Tour of Flanders, and for all of them my heart rate was way into the 170s, hitting 181 on the fourth. I was flying over the cobbles; at one point André stopped me and said "Dude, the laws of gravity still apply to you, mmmkay?". I wonder if it's because the Granfondo has brought me to a better level, or if it is a temporary benefit that will wear off in a few weeks. Maybe it's because I'm finally under 65kg. Whatever it is I really enjoyed it and ended up the intervals not even half-dead; we had enough energy left to chase each other in the downhill, with the sand in the corner making the turn at the bottom particularly fun. For some value of "fun" I mean. 1:44 total riding time. Today was so hot I put sunblock on at 6 in the morning. That's gotta be a personal record. Which reminds me..
    You're staring at the sun
    You're standing in the sea
    Your mouth is open wide
    You're trying hard to breathe
    The water's at your neck
    Your body's over me
25.10.2006 I'm really weird
  • But after listening twice to TV on the Radio I start to think I like it. What is wrong with me?
  • I tabulated my blood tests from the past 6 years today in Openoffice, and noticed a bunch of interesting little details. I am rather fascinated by blood tests in general: the idea that you can measure a net result of everything you do as an organism by measuring your blood. For instance, since converting to a vegetarian diet my LDL and Triglycerides have gone down by around 50%, and this last year, where I've eaten some fish and more egg, my LDL levels have gone up slightly, but my triglycerides are as low as ever. I rated high on glycosis, but I think that's just because I didn't really have a 12-hour fast before the test (I had dinner too late). I catch myself wondering how much daily variation in these levels may occur; I might request a second test in December at another lab to see what it looks like.
  • Back in 99 my test detected some calcium oxalate crystals in my urine; the portuguese article at [] is an excellent technical description of kidney stones and potential dietary contributors to them. I may have just been dehydrated when I took the test, though -- I often was back then.
24.10.2006 Granfondo Pinarello 2006
  • Results of the weekend race may tell a sad story; 9th in age group and 45th overall: [] However, that is but a fraction of the awesome experience that the race was. Riding up in the top-20 of a massive peloton at an average of over 40kph is an amazing feeling, and I climbed, attacked and paced with them all. That is, until we hit the 110km mark, I ran out of water, bonked on the larger uphill on the way back, paced Beto up the hill and then paused for a few minutes to fill up those bottles. I managed to latch on to a group which was riding okay, but not really spectacularly. I ended up averaging around 38, which means I covered the 150km in less than 4:15. It's amazing how much time you lose if you drop out of the peloton; it would have been impossible to chase them back if they were anything more than 100 meters ahead of me. I loved the race, and will definitely ride it again next year. And yes, I know myself enough to know that a dehydrated Kiko just doesn't operate smoothly; however, the logistics of getting water were complicated, and it was my first road race ever. Frances Farmer will have her revenge.
18.10.2006 You Could Have It So Much Better
  • [] It might not be *all* right, but beach, biking and 160km of blood-curling flats starts sounding really appealing now that the acid baths of the weekend have started wearing off the legs (and brain). I am curious to see how strong I'll feel at the end of it of course. And if we're lucky, it might not even rain: []
17.10.2006 São Carlos once more
  • After a late flight home and a seriously LONG taxi ride I made it home yesterday without passing out. Well I did actually pass out for most of the trip and was surprised that we were already at Analância after what seemed to be a blink. I did end up having to pay part of the fare with some US$50! Funny thing that the rain overnight didn't manage to ruin our morning ride (but no, no Tour of Flandres to celebrate either). I was wrecked from the aggression of the weekend war in Brasilia, so much that I was dropped on one of the last uphills.. thank god for offices.
11.10.2006 I did something
10.10.2006 Iron Biker
04.10.2006 The codes of ethics
  • Wouldn't it be great if political parties signed ethics codes, just like the Pro Tour teams do? I mean with automatic suspension of any politician involved in a corruption inquiry, and automatic suspension of the whole party if multiple politicians were found guilty. And why on earth is such a thing possible in cycling, but not in government?
03.10.2006 To say the least
  • if you are anything like me you should apt-get install the miscfiles package.
29.09.2006 What am I talking about?
  • As Johan points out, indeed, it was not a dog.
    Franco is not speaking Norwegian but making up the dialog. "Schmergsdorf" as Carpenter puts it. The subtitles, however, give the impression he is speaking Norwegian. The words spoken are actually understandable for Norwegians. Albeit broken Norwegian, the line goes: "Se til helvete og kom dere vekk. Det er ikke en bikkje, det er en slags ting! Det imiterer en bikkje, det er ikke virkelig! KOM DERE VEKK IDIOTER!!" This translates to: "Get the hell outta there. That's not a dog, it's some sort of thing! It's imitating a dog, it isn't real! GET AWAY YOU IDIOTS!!"
25.09.2006 Stretching
22.09.2006 Spam is weird
  • Check this out
     N *  40 Sep 17 Shari Morrow        ( 0.3K) 64% of members got laid
     N *  41 Sep 07 Issac               ( 0.3K) 66% of members got laid
     N *  42 Sep 20 Curt Randall        ( 0.3K) 67% of members got laid
     N *  43 Sep 13 Tomas Alston        ( 0.3K) 72% of members got laid
     N *  44 Sep 09 Tom Carlisle        ( 0.3K) 73% of members got laid
     N *  45 Sep 17 Weldon Tyson        ( 0.3K) 73% of members got laid
     N *  46 Sep 17 Brittney Villegas   ( 0.3K) 74% of members got laid
     N *  47 Sep 14 Virginia Rhoades    ( 0.3K) 75% of members got laid
    Do you think they actually run the statistics?
21.09.2006 Unless you are the sort that freaks out easily
20.09.2006 Kinda
  • sick. Not 100% but have that weird feeling in my throat, something of a headache. I'm feeling remarkably well given that though.
  • It rained today after a /very/ long time without serious rain; it was welcome, and the fact that I'm only cycling on rollers this week makes me appreciate it even more.
  • A crackhead technician connected our DSL filters the wrong way around this morning and we had an Internet outage for a while. I had to draw a diagram to figure the damned wiring out! Ping averages on our fixed DSL connection:
      Host            Loss%   Snt  Last   Avg  Best  Wrst StDev    0.0%   4958  24.3 175.8  19.8 2115. 241.0
  • And on our dynamic DSL connection:
      Host           Loss%    Snt  Last   Avg  Best  Wrst StDev 0.0%   3225 163.8 112.0  51.9 3765. 179.9
  • Trivial howto on setting up content-negotiated compression in Apache: []
  • Isn't is spooky that John Christensen, who plays the character in Waking Life that talks about techniques for discovering you are actually lucid dreaming, died before the movie was finished? I had noticed his name is on the credits twice.. [] (and then I noticed that whoever used to run [WWW.FILETHIRTEEN.COM] knew him, since I'm the only person on the Internet that seems to have noticed this connection..)
19.09.2006 I think I'm
  • SICK! Argh! I hate being sick. Tomorrow will tell, though.. and I've got the national championships this Sunday.. waaaah.
  • Results from the last race are finally up and I am not too far down this time: []
  • I know one of these dudes: []
15.09.2006 Returns
  • FSA granted my wish and is sending me a brand new K-Wing. I am so lucky sometimes..
  • Gross! My DVD of Torn Curtain has a blemish that makes it impossible to view what happens after 1:04, which frustrated Johan and I yesterday after enjoying Paul Newman's cool performance. How does it end?! I contacted Amazon customer service about this today; let's see.
  • Wow, Amazon customer service issued me a full refund in less than 2 hours! I'm amazed as always as how hard they work to keep their customers happy -- I can't say I have once felt unfairly treated by them.
14.09.2006 Silencio
03.08.2006 Raided
  • So /dev/sdb died again this morning. I think we're going to have to end up purchasing a replacement.. boohoo. Looked into a replacement at Misco, and funny thing is, a 73GB disk costs as much as a 36GB. So perhaps we will get that extra room for /home that Johan has always been bothering me about. :-)
28.07.2006 Tour de Beer
  • One week after we cheer a pretty mundane yellow-jerseyed Floyd into the Champs, we get some unexpected news down the pipe: [] It's funny, though, to have the subject of beer and testosterone come up so close one to the other, and I was surprised to discover that this article suggests that there is actually a link: []
  • Of particular interest to me, though, was the statement by Allan Davis, who rode for Liberty, and who was implicated in Operación Puerto before the Tour. His statement at [] reads:
    I invite or even demand that the UCI, ACF, Spanish Judicial system or whoever needs to, carry out a DNA test to finally clear my name from all of this. I understand that this is my choice and every individual is free to do whatever he feels he needs to do.

    Should the DNA test prove that I am associated to this case, I will hang up my cycling shoes the day after and head home to Bundaberg and start looking for a normal job.

    All of this is very frustrating when all I want to do is ride my bike and be able to make a living for my wife, kids and myself.

    Allan Davis.

    That's a pretty interesting -- and strong -- statement. I wonder what that means given that the general belief is that everybody involved in professional port, no matter where or who, is doping.
  • Following the Hardware Hell posting, I should mention that my K-Wing FSA handlebar has now cracked too. What have I done to deserve this?
  • Man, git is weird:
     Right now I'm running the Ubuntu 2.6.15-26 code with this set of
     patches, and things look good:
    as taken from [] highlights how obscure things are now!
11.07.2006 Hardware hell
  • In the past 7 days I have had: one KHS cromoly frame crack; one S-Works aluminum frame crack; a rear Bontrager hub crack (a first for me); and finally, a hard drive crash on anthem. Check it out:
     Jul 11 00:38:42 anthem kernel: kernel: [4926845.846000] SCB_SCSIID[0x97] 
     Jul 11 00:38:42 anthem kernel: [4926845.846000]  76 FIFO_USE[0x0]
     Jul 11 00:38:42 anthem kernel: [4926845.846000] SCB_SCSIID[0x97]
    That was last night. The server seems to have survived it but I got hatemail from mdadm this morning, so I attempted to re-add the drive to the array without rebooting. Not such a bright idea:
     kernel: [4970777.415000] SCSI error : <0 0 9 0> return code = 0x6000000
     kernel: [4970777.415000] end_request: I/O error, dev sdb, sector 651754
     kernel: [4970777.415000] md: write_disk_sb failed for device sdb14
     kernel: [4970777.416000] md: errors occurred during superblock update, repeating
    and a hung server. The funny thing is that it isn't completely broken; it's actually the second time this year it crashes on me, and if it crashes every six months, that's not so bad. I rebooted anthem and re-added the disks and they work great now. I am shopping for a replacement, though..
  • And then, 5 minutes later, Salgado tells me his brand new Syncmaster 173 LCD monitor is kaput. I wonder if Samsung has world-wide warranty...
31.05.2006 You only live once
  • And even then, /maybe/ once.
29.05.2006 I take the blame
  • I think I did my best ever mountain bike race yesterday. I placed 6th overall, less than 15 minutes behind the race leader, after 4 hours and 100km of scorching sun, blood-curling sugarcane and stomach-turning climbs. I have to say I couldn't quite believe it myself when I crossed the finish line alive and in first place of the sub-35 category. Man I love being 30! []
  • Carol apparently did 5th of her age group in this year's Ironman Brazil: [] -- amazing after the short training time she had this year, and given her history of injury and survival. Wow!
  • From a report by AT Kearney:
    Um programador brasileiro ganha em média US$ 13,4 mil por ano, bem menos que seu colega canadense (US$ 36, 4 mil) ou de Cingapura (US$ 33,5 mil).
25.05.2006 Continents
  • Really interesting article on how the continents appear to have come into existence, but only for portuguese-readers: []
  • Michy asked me to check my ideal frame size using [] so I went ahead and tried it out. I think I measure 174, and I measured my leg height to approximately 82cm. It is interesting!
     MTB min. height     17.88 inches    44.69 cm
     MTB max. height     19.38 inches    48.46 cm
     Roadbike min. height                54.12 cm
     Roadbike max. height                56.01 cm
    It appears from this that my 17" is slightly small for me (and it feels a bit like that when I ride it, because my arms could go out much farther). But smaller is lighter! It also says that my saddle height should be 71.52cm. I'm going to try that.
  • We appear to know where AIDS came from, now: []
23.05.2006 Pilotagem!
22.05.2006 Mondays!
  • Emails bloqueados esta semana para: (total 43308). No, that's not a typo. 43000 spams blocked at the SMTP level. Scary.
  • Today a guy told me the tree in front of the office is going to die because it is growing up sideways, like in a 60-degree angle. I don't think it is, but maybe he's right. He did, unsolicited, cut the rope that was tying the trees together, and said the rope was hurting the tree (it did indeed leave a mark in the tree bark). We will see.
19.05.2006 Le Grand Dernier Bivouac
  • Today, a good friend, and one of the greatest climbers of all time, passed away on the Everest. Vitor was one of the kindest, nicest, most positive people I've ever had the honour of meeting, and we spent some amazing moments together on the Amazon, for a week in 2001. He was strength, daring and laughs through disaster and fortune alike. But Vitor was something of a spirit of fire, and as much as I admired him, that particular mountain has no love for us, and you rely on having only lucky days when you are up there. I will miss him.
18.05.2006 Books
  • This person just donated 30 thousand books to the University of São Paulo: [] which beckons the question: how does one amass 30K books in a lifetime? That's like one thousand books per year for 30 years -- 3 per day pretty religiously.
10.05.2006 Sandbagged
  • Johan's making little waves into big waves: []
  • Little-known factoid about the London Underground: It is the oldest underground system and one of the three largest in the world. Operations began on 10 January 1863 on the Metropolitan Railway; most of the initial route is now part of the Hammersmith & City Line.
08.05.2006 Big
  • Came back from Big Biker yesterday; did a 3rd in my age group which was not all bad, considering that I'm only one year back into biking. Results are up at [] -- 27th out of 244 is not great but it is something already.
  • I discovered not all of's problems are gone; there seems to be more content that is not UTF-8 -- specifically, stuff in tarballs! I pester Gustavo to fix it.
05.05.2006 Encoded!
  • I finally reconverted all the pages on to be UTF-8-encoded. This was actually more work than it sounds; we had content with completely unknown encodings, and it took me a while to discover that 0x92 is actually not in latin-1 at all (it's a quote character in Windows CP-1252!). I ended up using iconv to detect files that were non-utf-8 and converted them manually; I then fixed up .htaccess to serve utf-8 again. One message in my inbox down!
  • Of interest during this research was [] which talks about how to highlight non-ASCII characters. Unfortunately it didn't work very well for me, but I'll save it for later.
  • Yesterday, I discovered listadmin, the command-line tool for managing Mailman lists, and today I have blazed through the lists in a tenth of the time it generally takes. It totally rocks! I had to install the Debian unstable version, though; I've requested a UVF exception for it. Let's see how that goes.
02.05.2006 FISL, biking and partial illness
  • Is the summary fo the past weeks.
  • FISL in particular meant generating painful pictures like this: []
13.04.2006 And finally, I am Rio
  • so if you do, look for me in the mountains.
11.04.2006 Today, I planted a flower
  • to try to make up for the rest of the day.
05.04.2006 I WENT TO BED
  • at 2am and survived the 5:30 bike ride of death. This was a feat; I have been riding about 500km every week, but getting up half-drunk in the dark and rolling out in the freezing weather must give me a karma bonus that I will want to cash in at some point.
  • Matthew pointed out [] to me, and I noticed that any advertisement program is bound to reduce the ROI for me. I wonder why.
04.04.2006 I am in a terrible mood
  • And I'm not entirely sure why, but I'm sure I'll find out soon.
  • I discovered today that a friend and journalist died last weekend; I knew Giordani Rodrigues from the brazilian antispam lists, but also personally from FISL and from an assortment of top-quality (and caustic!) security and technology-related news that he'd regularly publish. He ran [] I guess he'd like to be remembered for all the great work he did, so here's my bow to the greatest technology reporter Brazil has ever had.
  • I suspect I have developed a mild food allergy. I will need to investigate this week; one more fun task to go through.
03.04.2006 Destroy Everything You Touch
  • This new Ladytron album is amazing; you get electro-babes with the buzzsaw distortion that made My Bloody Valentine famous. I'd love to have the sensation of first listening to it kept in a little box. The Louis XIV album is, however, OUTSTANDING and should be placed in the eternal hall of fame.
  • It is demoralizing to see things like [] and [] floating around on the internet. 8.5kg for an M5? So the guy's a wimp (who removes his granny chainring and then shoots a picture of a dirty bike? who is he kidding?); his bike is still over a kilo lighter than mine!
10.03.2006 The shock waves of sent-mail
  • My inbox is pummelling me. I'm fighting back with the tools Matt and I have worked on perfecting: ruthless filtering, fast replying and delegation. It's now down to 30 again. Go me!
  • I gave up long ago, but I did watch Lost on DVD! []
01.03.2006 Will this be a DEATH MARCH?
  • I was shocked to read, today, this quote:
    Its chief executive, Eric Schmidt, alienated many on Wall Street last month when he told Time magazine, "The company is not run for the long-term value of our shareholders but for the long-term value of our end users."
28.02.2006 Riding there and back, in 5 days
  • Finished today a tour from São Carlos to the beach. It covered almost 600km, with the longest day being Saturday, from Campinas to São José dos Campos. The wind was on our backs for the whole 4 days of riding, excluding some 25km from Caraguatatuba to São Sebastião (and in the opposite direction, yesterday, remarkably). The uphill from Guaecá to Maresias is really the hardest stretch of uphill, though all of Tamoios was pretty rough, and in particular, yesterday, scorching as well.
  • Pix of part of the trip are at [] including the victory shot at []
23.02.2006 Looking back
  • To the first two months of this year, I have cycled just over 2000km. I'd say that's not bad considering I was stuck in the London Dungeon for 2 weeks and sick on the first week of the year. My neck hurts today however. Hmmmm.
21.02.2006 Apparently
  • The Nokia 770 was finally released today. I need to get an updated system image for mine..
  • It seems that MacOS Internet Explorer 5.16 and 5.17 don't tolerate quotes (single or double) in CSS url() instructions; just updating some CSS to avoid bustage.
17.02.2006 meus amigos (666)
  • It must be my lucky star shining!
16.02.2006 Super-30
  • I woke up, and it started to rain, but not before I managed to ride away from the clouds. Always south..
14.02.2006 Not Waving But Drowning
13.02.2006 Hold Tight London
  • The rain has given us truce today, so the morning ride was neither wet nor bad, but it did mean I sat from 6am to 7:30 waiting for it to clear up.
  • I keep forgetting how many times, but it appears we've landed on the Moon six times in those 4 years we were crazy (or brave) enough to try: []
  • And, just for the record, no, the moon is not hollow: []
09.02.2006 The rain in spain
  • ruined my bike ride this morning, so I went running instead. Turns out 5 minutes into my run this kid on a bike is run over in front of USP. I stop and assist him how I can while having J. Random Person call an ambulance. Calling ambulances is not a fun thing in Brazil, because they end up taking forever to show up. The kid wore no helmet and banged his head on the floor. It bled a bit. He scratched his elbow and shoulder as well. He didn't look so shaken after a couple of minutes and the guy who ran him over offered to take him to the hospital, since the ambulance still hadn't showed up. Before he left I told him to get a helmet. I have been run over about 3 times, and cracked a number of helmets in a lifetime, but I have never hit my head.
06.02.2006 CAN PEOPLE STOP
  • I am amazed at how crude and thin-skinned humans have shown themselves to be over this cartoon nonsense. The catholic church got over their excessive self-importance about 200 years ago, when they finally stopped burning people, and wouldn't the world be a better place if other religions decided to behave maturely as well.
  • (on "200 years ago" above, I actually thought it was around 400 years ago, but [] depresses me with the news that the Spanish Inquisition ended as late as 1834)
  • I am so jet lagged this week it is not funny. Yawn.
05.02.2006 Let the juices flow
  • To be honest, it is possible that the thing that bothered me the most about London this time around was the absolute absence of drinkable fruit juice. Now that may sound snobby and silly but I honestly can not fathom how people can live without fresh fruit juice. They should fix that situation, these scientist people.
04.02.2006 The doctor is in!
  • Back from London and the Soyuz rollout sprint, barbed wire finishing ribbon and all.
20.01.2006 New Horizons
  • We're going to take a closer peek at Pluto in some 10 years: [] -- I didn't know of all the crap that exists between Neptune and Pluto. I wonder if a couple of other planet-sized objects will be found there.
  • There's news at [] that makes me wonder at the investment in development of technology in this country. I mean, the text describes a little biodiesel processing plant, that takes vegetable oil and converts it into biodiesel -- at an efficiency of 60%, and costing less than US$20,000. This is something pretty impressive to me -- and vegetable oil is something we have lots of in this country. However, most impressive is that they managed to develop this thing with grants of less than R$1 million -- that means, less than US$500K. POCKET CHANGE! If only we had a serious attitude (and set of policies) regarding technology.. I bet we'd see lots of great new ideas emerge.
  • More end-of-year pictures at []
19.01.2006 More rain?
  • Woke up and it was raining, so I ran for 40 minutes instead of the usual heartshattering bike ride. Spoke to Michy, who leaves today for the USA in search of, hmmm, winter, enlightenment and love? She did not allow me to speak to my grandmother, which I entirely resent. The dogs only got a short walk because it was raining but they got three massive bones to chew on while they wait for the evening walk (and my dogs are not vegetarian).
  • So apparently some 10,000 years ago people were already enduring climate change in the land of Tripoli: these guys were the precursors of the Garamantian Empire. It appears that the desert there was once humid, too: [] -- Perhaps most fascinating about them is that a) it used to be land which could be used for agriculture -- it's now a desert; and b) they irrigated their civilization to death, because over 600 years the ground water level decreased to a level it was no longer usable. And isn't it peculiar how contemporary civilization doesn't really consider itself in terms of centuries?
  • It rocks that we're officially running a debris processing plant in São Carlos: []
  • I should plan on visiting [] next week. I think I want a road stem, perhaps a new helmet, a bike stand, some time pedals.. I should also go for a few swims at []
18.01.2006 And yet, I only grow thinner
  • Paradoxically, in Brazil, the highest obesity rates (70%) are in a specific demographic: poor women that live in the southeast (the more developed area). And even more interesting, favela-dwellers had the highest incidence of obesity: [] -- I guess the lifestyle has a lot to do with it -- both favela and female.
  • Visited Livia and her parents last night; talked to Du over VoIP and then chatted about better living through odontology, life in the USA and the future of democracy (no kidding). Stopped at Habib's and ate a pretty meagre meal, but the cheerful staff more than made up for the substandard food. At least I can say I've been there once.
17.01.2006 The end has no end
  • I also had a weird dream tonight, involving ex-girlfriends and kids on motorbikes. Woke me up at 6:30 and, well, when you dream of ex-girlfriends you don't really want to back to bed. Rode some 70km in a refreshing breeze that turned back into the furnace we know São Carlos in January to be.
16.01.2006 What started out just great
  • didn't really hold up to much. An average day with heat, interview and difficult problems to solve.
15.01.2006 Appropriately called SUN day
  • Hot as hell. HOT. Did nothing. Rode bicycles with Corbani and Lilian around UFSCar. Corbani says he likes his new bike. I am pleased. We go to the bakery. I sleep while listening to the Strokes. Dinner at Amici with Tecão. Estrela and Monica had a fight. Sleepy. Zzzz.
  • Some pix of notable São Carlos losers over the weekend are at []
14.01.2006 Hang in there it will be over soon
  • Woke up. Cut lawn. Yawned. Arrived late in office. Fixed a few bugs. Waited for Corbani and Lilian. Had lunch at Mamãe Natureza. Went home. Got dressed and participated in the weekly ritual that involves hours of riding over hills on bicycles. Got back. Felt sick and dehydrated. Drank copious amounts of liquid. Sat around and talked to Nando, Corbani and Lilian. Listened to music. Went out to dinner and talk with survivors of said ritual. Sat outside a bar for an hour while Matsubara laughed endlessly at my misfortune. Went home and slept the black sleep of the depraved.
13.01.2006 Each day is only as unique as you are
  • Two remarkable things happened this morning. Truly remarkable things happen every day, but not always do you actually get enough time to yourself to notice them. The first thing was that I noticed two parrots sitting on the telephone wire in the house in front of mine; I had never noticed them before, and yet they were busy chirping away at sunrise. And what a sunrise it was -- burning the tiles on the house and the tar on the street. So I rolled out for what would have been a typical 70km ride in the hot January sun. Except I ran into Osvaldo and his nephew, Felipe, riding from São Carlos to the beach; I had met Osvaldo's nephew at a party at Matilde's last week, and he had said this was going to happen. I enjoyed this coincidence immensely and did another 20km loop with them. Osvaldo told me all about the new projects that he was working on that dealt with carbon emission credits, and Felipe was just silent and content to ride on the Stumpjumper in Osvaldo's draft. I might be convinced to try and certify Async, you know -- we are not big fossil fuel consumers, really.. only one person actually comes by car.
  • Interestingly enough, my conversation with Osvaldo touched upon the same subject as the news that cam in today at []
  • The only really unremarkable thing this morning was that I arrived 2 hours late in the office, a bit too late for the Malone migration. I am so thankful that James H. and SteveA had it all under control, it was barely any work when I arrived. Now, to implement the features they are missing..
  • The 770 has VoIP, finally: []
  • We had a rock and roll dinner tonight, with Magno, Aline, Ivo, Lucas, Matsubara, Johan, Melissa and Nando all there. Notable absences were João (who doesn't have a phone yet) and Tecão (who said he had a runny nose, the nerve). We had nuclear beans, radioactive rice and superficial soymeat, and NO ANIMALS WERE HARMED IN THE PREPARATION OF THAT MEAL. I need to plant a tree to make up for the carbon deficit, though. Cleaned up the kitchen somewhat (I have guests!) and strolled out with the dogs at 2am. It rained a bit.
12.01.2006 And it fit me like a glove
  • I had a weird dream this night. I was in Ouro Preto, going to race the Iron Biker. Well, except that Ouro Preto was actually more like Ilhabela -- an island with waterfalls. And that I wasn't really going to race, but I changed my mind and decided to race in a double with a friend from Brasília, Bruno Santana, that I haven't spent serious time with for the last 15 years at least (though I did see him at last year's Iron Biker). I had forgotten all my equipment: helmet, pedals, shoes.. a disaster. So the dream turned into this bounty-race of sorts as I tried to get people to lend me these. Bruno at some point took a ferry across to the mainland (!) to pick up an extra set of shoes that were left in the car, and I meanwhile sat on a bridge. I think there were some guys with sunglasses in a black car that talked to me at some point.. I really love dreams.
  • Good sub-140 ride; the first in which I did not once bump it over 160bpm. I had to go pretty slowly up Liquigás to keep it at 159, but I actually managed to; it appeared to me that breathing out regularly helps. Will have to confirm tomorrow (and hopefully wake up earlier).
  • Went to UFSCar to do a short test at the new physiotherapy hospital, which turned out to be a lot more fun than I expected (and in different ways, too). Lucas met me up there and we rode back together. Sandra Abib managed to nail me into doing another talk in April while I rode down in front of the library (make mental note not to ride down in front of libraries in the future). Arrived in the office to find anthem spurting out a random stream of messages on the console:
     scsi0: REG0 == 0x60, SINDEX = 0x122, DINDEX = 0x116
     scsi0: SCBPTR == 0x33, SCB_NEXT == 0xff80, SCB_NEXT2 == 0xfff7
     CDB 2a 0 3 80 8 ac
     STACK: 0x29 0x15 0x125 0x125 0x25e 0x25e 0x25e 0x93
     <<<<<<<<<<<<<<<<< Dump Card State Ends >>>>>>>>>>>>>>>>>>
     DevQ(0:4:0): 0 waiting
     DevQ(0:9:0): 0 waiting
     DevQ(0:10:0): 0 waiting
     DevQ(0:12:0): 0 waiting
     DevQ(0:13:0): 0 waiting
     (scsi0:A:9:0): Device is disconnected, re-queuing SCB
     Recovery code sleeping
     (scsi0:A:9:0): Abort Tag Message Sent
     (scsi0:A:9:0): SCB 127 - Abort Completed.
     Recovery SCB completes
     Recovery code awake
     found == 0x1
     SCSI error : <0 0 9 0> return code = 0x6000000
     end_request: I/O error, dev sdb, sector 2073927
    we ended up having to reboot, at which point nothing using /dev/md11 worked because mdadm --assemble /dev/md11 gave me a message that suggested an internal bug: invalid argument or something. I ended up finding out that --force does what we needed and the arrays are back up.
  • I am so tired today I might be convinced to skip the gym..
11.01.2006 Took a wrong turn on the astral plane
  • "Estamos em uma cidade com 150 quilômetros por 150 quilômetros e que emite três vezes mais poluição do que toda a Suécia." is the good news that [] brings us.
  • Rode with the swede through the Valley of Pigs, all under-170bpm (and the average in the 130s). My heart is still a bit fucked from the typical holiday sickness, but I'm coughing less and my head is all systems go. Should remind myself to keep hydrated.
  • We're finally inflicting Malone on the world :-) []
10.01.2006 Lifeguard for a day, fool for a lifetime
  • Visited Bruno's mother at the hospital in Ribeirão Preto. Had a very interesting and enjoyable afternoon as we studied x-rays, family history, physical effects of emotional distress, and the future of Brazilian education. Some politics in the conversation. I had the thought, when coming back, that one inequivocally good thing you can do is to keep company and care for a patient you love.
  • (Added saran wrap to STIs at 6am, which solved the rattling. Did a sub-140bpm ride, hopefully first in a series of base-building rides)
09.01.2006 Scorched earth
  • Woke up feeling as sleepy as I was when I went to bed; I think this coughing keeps waking me up. Hopefully I'll have it nailed in a day or two. Did a one-hour ride towards the airport, rough road to Ribeirão made my STIs rattle again. I need to add more saran wrap to them. Stumbled my cadaver into the office once more.
08.01.2006 It never rains in the happy house
  • Sunshine at last. Couldn't quite believe it when I woke up and saw a clear blue sky; it had been a week of gray (and black) up to today. So I spent the day tending to the gardens, giving the dogs much-needed baths, and doing small home repairs that I've put off before. Johan gave me a hand and in the end it was only half a chore (and half a sunburn). We finally watched the end of The Breakfast Club (hey mdz) and took the dogs for a walk. Monica and Estrela still occasionally decide to cross the street on their own; in part this owes to their excitability (which is taking a long time to subdue, in retrospect) and in part to the fact that dogs love a bark-at-gate episode. Olivia is never a problem; she is so cool. We met Nando at random, had some juice at the office and took a cab to watch A History of Violence, which is quite good, though perhaps it's expected given the names on the roster. Cronenberg knows how to make a fun movie that still manages to raise interesting questions (and Fausto, remind me, why did this text formerly mention Sex, Lies and Videotape?) Johan and I strolled back through USP from the bakery, and were assailed by 14-year-olds that were bored of São Carlos. It's so interesting to observe the generation (cultural, too, perhaps) gap -- even though they were into rock and punk and lived in the same city as us, we were set worlds apart. Fed the dogs once more, took them out for a stroll and and coughed myself to sleep.
07.01.2006 Two thousand and six thunders
  • The suicide bike ride was actually a 4-man death-march into Analândia via the dry river. For the whole ride we could see the lightning flashing out westwards. It rained randomly, and I felt like crap on parts of the way back, but in the end Lucas and I sped away and stretched out in front of Parque Itaipu waiting for Tecão and Johan, who was so knackered he spoke in syllables for the final hour. Not a bad ride altogether. Had dinner out at Matilde's boyfriend's house, cooked an omelette, and, for the first time in a long while, laughed so hard I cried. Pity I was so sleepy I can only half-remember what happened; perhaps, thankfully, only the non-embarassing half.
  • []
  • Weirdness that breaks accessing through our external link:
     Redirect from on eth2 about ignored.
       Advised path = ->, tos 00
    Found out what it was -- DSL modem had an additional address and a broken netmask on its main address. Fixed.
12.12.2005 Aluminum pots rot
  • []
     O alumínio tem forte relação com doenças como o mal de Alzheimer,
     câncer de pulmão e eventos inflamatórios pelo organismo.
  • Interesting bit on productivity and self-conditioning at []
  • SSH and weird connections that go down after 5 minutes? Never again!
     ServerAliveInterval 300
08.12.2005 Moving right along
  • I feel for some reason strangely energized today. Perhaps it was my discovery of the artist and name behind a song that I've heard so many times and never found out what it was. It was Alter Ego's Rocker, and there are free mp3 downloads on the web! Oh, right. Mp3 downloads are illegal. Shucks. I really liked that tune.
07.12.2005 What a wierd day.
  • PostgreSQL died on our dogfood server.
  • Squid died on anthem.
  • The shipit exports failed to run.
  • Johan's box kernel paniced at bootup.
  • The backup failed.
  • Vim tip of the day from salgado: to search for tags recursively up the tree, use the following syntax:
     set tags=.tags;/
  • Second vim tip of the day from BjornT: if you have bicyclerepair installed, try running:
    on any method or function definition. It rocks!
02.12.2005 The end of the week
  • Did a morning ride with the venerable Sal6, Magno and Johan -- basic pigs. Felt fine. Have been doing lower-cadency rides lately and I feel a lot less like dying at the top of hills. It rained quite a bit, which made me feel a bit sneezy, but it cleared up over the course of the day.
  • After a few days of straight work Steve and I manage to finish our team reviews, in time for the deadline. Cool!
29.11.2005 Tuesdays are the days
  • Woke up really
  • Found jordi's post on Montreal at [] and later his quote about CDG:
    I have no idea of where my luggage is, but at this point I don't care. I only wonder at what time I'll get sleep. What I do know, is that these fucking idiots claim there is free wireless in this spot of Terminal 2F, but it's not true at all.
    If you know Jordi you can imagine how funny that really sounds.
28.11.2005 Mondays are mondays
  • Magno and I did a 7am ride for about 2h. I did it really slow and relaxed and felt a lot better at the end of the ride than I usually feel on MTB rides during the week (where I end up feeling like death is upon me). I should get more variety in these rides, though, and perhaps research something to improve my recovery, since my legs often feel dead during weeks of hard riding.
  • Had an early call with Abraão to help me decide on whether the XTR crank is really the right one to buy. We discussed some of the alternatives and in the end it was his reassurance that: a) you can replace the "bottom bracket" in the crankset when the shipped one dies for about R$100 b) there are FSA chainrings that fit it well that made me okay with XTR decision. Let's see how wise that was in a few week's time. We also talked about Specialized frames and his suggestions on what to buy if I was to replace my existing M4 frame (2000).
  • Had pizza with Niemeyer and Rudá where we discussed many entertaining fallacies of software engineering and I had the idea of a "Software Engineering Patterns" kind-of-thing.
27.11.2005 Racin'
  • Did a 4K race in about 15 minutes at UFSCar's 35-year commemorative sprint, finishing 8th overall (and perhaps 2nd or 3rd of students and ex-students, which isn't very honorable but looks good on the resumé). I gave away the t-shirt they handed out to Gaspar.
  • Also did a 2h ride with Magno, João and Johan; basically, a reverse ride of a route we sometimes do. I found it much better than the direct route. Was a gerally relaxed Sunday ride and João didn't cause me too much pain for which I am grateful.
26.11.2005 INBOX in control
  • I've put some serious effort into taking control of my INBOX. Following mdz's cookbook I've started doing absolute crazy filtering of almost everything that's hitting the INBOX, meaning I should be a lot more responsive to email than before, but also meaning I might let some list, bugtracker and auto-generated traffic slack off the radar. I believe this is a step forward though; the last months I was simply buried in email and could do nothing to keep up with it, which made me feel rather bad -- my INBOX is my life.
  • Uhm, that is, if I don't count the 3000 or so messages that are accumulated in my former INBOX that I haven't processed yet. I'll probably do 10 300-message runs to clear those over the next weeks.
  • Today was UFSCar's 35-year commemoration, so Fabia, Johan and I hung out around there talking to old-timers. Of note I saw Bruno from Santos, who works at Mormaii, Luciana and Fabiana Rosetta (who it turns out is doing another round of undergrad study, ironically with Bruno, one of the youngest interns that works with Evandro on Stoq), and Silvano, who is always too much fun.
  • Johan and I also managed to fit in about 2h of riding through that. I felt kinda flat but I guess getting back to speed was going to feel like that anyway. Did a longer ride out in the back; I decided to show him the Jedi path given it was a day of nostalgy. We also did 10 laps in the forest before going home. It didn't rain, but it should have.
25.11.2005 Ubuntu rocks
  • But you knew that: []
  • Set up the second link on Anthem yesterday, so we have some redundancy possible. The Speedy home link's latency is /so/ much lower I'm amazed. It's like 5 times lower. Priceless in setting up the links was [] and in particular, the issue with reverse path filtering: [] and []
  • Hit my head with snmpget until I realized that snmpv3 requires a username, and that -v 1 solves the issue nicely:
22.11.2005 ?
  • After yet another month spent in carpeted basements and cold climates, BACK IN OFFICE.
  • Finished 4th (out of other 4-people relay teams in our age-group) in the 12-hour MTB race over the weekend. It was good but not great; I did a majorly fat (and unexpected) stack and cracked another helmet, and was really tired out from the travel and I am still drip-dropping through the day, though I feel very healthy. Detailed results are at [] and [] and pictures are at [] and [] and, if you add "Christian Reis" to the textbox [] and cross your fingers, you get an extra set.
  • If you're really attentive (and you know portuguese) you'll see that the first link is actually typo'd. It must suggest an automaintained site, because the link is present on the main page of the site, and it doesn't 404 out. Agh.
19.10.2005 Swamped
  • Lots of bits and pieces to do. Some NFS performance study: [] [] [] [] [] [] [] [] []
     th 8 2747936 59079.566 14835.486 5952.540 0.000 3293.329 2232.819 1900.259 1999.936 0.000 6549.737
  • And now, with 64 threads:
     th 64 2748083 59125.361 14838.813 5953.420 0.000 3293.579 2233.022 1900.395 2000.066 0.000 6550.060
  • And now, after 12 hours:
     th 64 2748083 59543.017 14912.958 5959.034 0.854 3293.654 2233.022 1900.395 2000.066 0.000 6550.060
    From my reading of this it appears that we're now using up to 50% of our threads (albeit *very* rarely), and never more than that. There seems to be an odd bug with 8 threads because the 4th and 9th percentile are stuck at zero (and now that I changed to 64 threads we see some action in the 4th percentile). And yep, Neil Brown confirms this via some email to
  • Did some tweaking on the server -- increased read-ahead on the md devices, and reduced it a bit on the sd devices, poked around in proc. Changed export options to be sync and mount options to be async (where possible). Let's see how these numbers roll over the week.
  • Me next week: []
08.10.2005 Quest
05.10.2005 War
04.10.2005 Sport
29.09.2005 Art
22.09.2005 Because it's fun
  • 6:30 and some 50km of some good road biking on the road to Descalvado. My legs are DRAINED however.
  • Futzed around with sendmail to get TLS working again. The issue is that I needed to have an ssladmin group that needs to be able to create certificates; however, sendmail doesn't like having group-writeable directories. Rescue:
     define(`confDONT_BLAME_SENDMAIL', `GroupWritableDirPathSafe')
    and doing some chmodding to ensure that we don't have the certs sendmail and the CA use be group-writeable.
21.09.2005 Why blog?
  • 7am and 40km of the windiest road biking this year. I zipped back doing little fartleks, though.
20.09.2005 BATIDÃO
  • []
  • Twisted my right ring finger in the 7am ride. Still hurts a bit but today was one of the best rides of the year.
05.09.2005 Pretty crazy weeks
  • Back from RJ today, after a big rush to get to the bus station after a car's battery decided to die on us. Second time in a row something car-and-electrical-related happens which causes me to rush to get to the bus station, hmmm.
  • Finally, available for shipping: []
  • And for Christmas, get me []
  • I discover /usr/sbin/tz-brasil and timezones are never the same!
28.08.2005 Have you seen him?
27.08.2005 Upgrades
  • Anthem's moving on to its shiny new Hoary armor. A lot of work in between, including some sasl setup. For sasl2, here's how to add a user for smtp relaying:
     saslpasswd2 -c -u -a Sendmail [username]
    and for some reason it's very picky about the domain, and uses the unqualified hostname by default (doh).
  • I also had to recover a backup. So I don't forget (again):
     cpio --verbose --make-directories --preserve-modification-time --extract \
          --format=crc --block-size=64 -I /dev/tape '/mondo/*'
    and a big hint -- if the light's not blinking, strace is hung and you can't control-Z the program, something's wrong.
  • Ran into these issues: [] [] [] [] []
  • Enabled TLS for sendmail. It was as trivial as setting up my certificates properly, and adding 4 lines to my .mc file. It is so cool to finally have encryption set up properly for email authentication.
     Received: from localhost.localdomain (
             []) (authenticated bits=0)
             by (8.13.2/8.13.2) with ESMTP id j7SLKwXS030304
             (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO);
             Sun, 28 Aug 2005 18:20:58 -0300
  • More migration fallout. Imap in Hoary doesn't have plaintext login enabled, so we had to move all our users to SSL, which is okay apart from the fact that evo seems to behave a lot more flakily. Oh, actually, [] -- but too late now.
  • The php4 module doesn't support gdbm, so we'll need to convert the phpwiki pages to plaintext format. I've asked Johan to recompile. [] -- meanwhile, super-infinity is generating a package that /does/ have gdbm, luckily.
  • Made favicons available for the whole site (and cleaned up the error_log span too):
     <FilesMatch .*favicon\.ico>
         RewriteEngine On
         RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
         RewriteRule (.*favicon\.ico)$ [] [L]
  • Had to install Mail::Mailer and PatchReader using CPAN. I fought it out with CPAN because it insists on using ftp (non-passive) by default, and that just doesn't work. It's irritating because the question that comes /after/ that is what mirrors you want to use, but it hangs there and you need to control-C it away before actually getting a chance to provide your own mirrors.
  • Dealing with fallout because Apache now runs as www-data..
  • Evolution is complaining about our SSL certificate, similarly to what people reported at []
  • I wonder if this is a better plan for SASL: []
  • Properly split the bind database into primary (/etc/bind) and slave-content (/var/cache/bind), which is the only part that is really just a cache.
  • Fixed our Apache configuration to be a /lot/ neater (in many different ways).
  • Our backup software requires: cpio, buffer and ironically, bc :-) Hopefully it'll run tonight.
  • Discovered what Options MultiViews actually does, and why it was raising weird permissions problems on our webserver; []
  • Discovered snmpwalk, which is pretty cool:
     snmpwalk -v 1 -c public localhost
  • Had to do some hacking around in /etc/cron.d and /etc/logrotate.d for mrtg and webalizer but they seem to be working nicely now. One thing that is bothering me, however, is that cron isn't running for some of our users.
  • Friggin cron wasn't running nobody's jobs and I had no clue why. Turns out I was getting error messages (easier to spot now that I have a cron.log):
     Aug 31 12:08:01 anthem CRON[25067]: Authentication service cannot
     retrieve authentication info.
    This message also popped up when su was invoked for nobody. Turns out the reason for this is potentially two-fold: first, nsswitch.conf wasn't updated to account for nis; second, because nobody's password was marked with an "x" but it had no corresponding shadow entry.
  • A bit better from the flu.
24.08.2005 Sick
  • Again. Got the flu; it started yesterday but I only noticed after coming back from the 6:30 bike ride. Sigh.
10.08.2005 The bad bad blogger
  • My Stone Roses CD was a no-go. Apparently, it's not an unlisted discid, but one in which the TOC is too large for either sound-juicer or libmusicbrainz. Filed bug at [] and []
  • More preparation for conference, email catchup, prepared for some wiki review.
  • Looked for a locking module that worked nicely under Linux; was pointed to [] and proceeded to suggest this to Daf. Let's see what the people in the know think of it.
  • I see a dirty little hacker! []
  • Did some investigation of Musicbrainz again, now that I've found my copy of Exit Planet Dust doesn't have CD index entry there. Found out the tp_tagger utility which unfortunately doesn't support looking at CD indexes. Then checked out, which is part of the musicbrainz Python library which is supplied in Ubuntu's python2.4-musicbrainz. However, adding the TOC is actually possible via the Web -- there's just no UI to it. So I used the link provided by to add it, click-click-clicked, and had it fail because I didn't log out and in again when submitting my TOC entry. Luckily the #musicbrainz people helped me get it added, and I sound-juiced away.
  • Set up sendmail's virtusertable up with the help of [] -- it apparently worked without a single hiccup. Now, to get the actual users hooked up correctly. What fun!
  • In case you are unhappy with your vim colour scheme, try this: []
16.06.2005 Oink
  • Perled to death. Tip 1: you can check "perldoc perlmodlib" for the standard perl modules. Tip 2: $1 is only defined if a match actually occurs in a regexp, which led to [] Tip 3: checking for a number is easy using regular expressions and perldoc -q "is a number".
  • Did some research on Siemens Gigasets and decided to get this model: [] -- the CL50 apparently works fine with our S4010 base.
  • A blur of Sprintathon arrangements.
  • I WANT ONE OF THESE: [] but nobody sells them in Brazil anymore, apparently, these beloved Laserline CD120TKD CD towers.
  • 6:15 wakeup, PP and a solitary ride through the valley of pigs. Apparently people are getting scared by the winter. I need to advertise this morning ride in the hope of getting some extras coming. Nothing remarkable happened apart from the fact that I did the whole loop in 1:30 from door to door which was not so bad. I suffered like hell; my legs feel like lead and somehow my back kills me on the steepest hardest sections of the road. Maybe I need to go to bed a bit earlier and get those 8h of rest.
  • Backup completed successfully (makes me so happy):
     22:16: Setting up mt
     Total backup size: 44G, 290M, 997K, 612B = 1451103 blocks, 1088580 files
     Backing up...
     real    111m41.084s
     user    1m40.810s
     sys     7m37.550s
     real    71m28.453s
     user    1m16.430s
     sys     0m27.700s
     01:36: Ejecting tape
    So in 2:15 the whole 44G are on-tape. That's just awesome.
  • Dealt with the usual barrage of email, did some IRC coordination.
  • Did some planning for transport and equipment and lodging for the sprint.
  • Wiki hacking to update review instructions. Updated PreMergeReviews and created a TipsForReviewers.
  • In Python, why are there separate tuple and list types? []
  • If you're looking for companies that do transfers in São Paulo, with drivers, look no further than [] -- searched and contacted some, though I found them more expensive than I hoped for.
  • Canonical management meeting.
  • Did some more coordination over IRC, with multiple shots fired from multiple places (launchpad, hct and above!)
  • Reviewed Keybuk's HctOneDotZero wikipage.
  • Went home to write up the @#!$!@ LP report I am two weeks overdue with.
14.06.2005 I had a great title for today's diary entry
  • 7:30am wakeup -- rest day! But no rest day is complete without power powder, and I actually had a cheese sandwich today to celebrate. My, my. Picked up my copy of Orbital's Snivilisation at the post office (and celebrated Amazon Marketplace) and dropped my bike shoes over at another shoe shop to try
  • A flurry of CFS bugfixes and updates (over 15). Still need some traction on some of the nastier stuff and new features, but all in all, moving in nicely.
  • Looked for places which do DAT tape repair. Well, I want to at least trade in these old ones for AIT tape, you know? Fired off another backup over the night; let's get you the stats in the morning.
  • Went back rather late and assembled the cleat on my new shoes in preparation for tomorrow. The dogs only pulled one of the cleaning cloths off the clothesline so I am calling myself "very lucky" today. I tied the line down properly but we'll see how that goes.
13.06.2005 Do you like dags?
  • I used to, until I entered my house at 4am and found the front garden completely destroyed. They even chewed up my hose, man. Right, the hose to which they had chewed up the tip a few weeks earlier. I never got to use it. I am /so/ feeling like getting rid of Estrela and Monica over the weekend, just you test me! They got no food this morning in return. At least I cleaned up the back which really really needed it.
  • 7:30 wakeup and whoa it's late. Power powdered (of course; how I miss this when travelling) and fixed up my speed bike and did a 1.5h ride out on the road. It's been a while since I've ridden on the road (and a while since I've actually had a rest day too, hmmm) and my legs felt grinded. I'm going to take tomorrow off, just to rest my legs (and I might have to buy a bike shoe in the meantime, since both of mine seem to be falling apart).
  • Got to the office rather late, trawled through email and IRC logs and set myself up for a good day of work.
  • Installed the SCSI terminator and the 5-device SCSI cable! This was a lot of work (just to get the damned fans installed almost killed me) but the end-result seems stable and wasn't as expensive as you would have thought. I love Brazilian component manufacturers.
  • Meeting with Daf and Carlos.
  • Finished off my bizdev report, and my Launchpad weekly report -- almost in time for my next weekly report too, you know?
  • From the 5th of may till today I received 6111 spams. That's just a bit less than 200 a day. But then, Johan pointed me out to [] this week, and all these 'statistics' start to look like peanuts.
  • Some serious Bugzilla hacking and regression testing for a recent CFS update.
  • Went out to check on hotels for the warthogs conference, and started the painful process of planning arrivals and transport to São Carlos. I need Claire!
  • Purchased a nice little Specialized bike shoe and a floor pump to replace an aging Zefal double-shot I had. I am still feeling guilty about it, though, and I would much rather fix my double-shot. This reminds me I have a stack of stuff to
12.06.2005 It's 'catch the bus' for you young man
  • Rode with Michy and Mariana around the killer loop in Itaipava. Mariana was a brave girl and after a little dizzy spell recovered and roller her way almost to the top of the hill, and then rolled down in the dark (it's always dark there, but having sunglasses on doesn't make it any better you know).
  • Raced down to catch the bus after Xuxu's car refused to turn on. There was some heavy traffic coming into Rio and I ended up getting to the bus station 10 minutes late. However, all was saved when we realized the bus was delayed and still there! I actually ended up having to wait for some good 30 minutes before somebody showed up to let me put my bike and bag in the baggage carrier. I'm so lucky! It turned out that Xuxu's car didn't work because she was using the wrong key, doh!
11.06.2005 Fond of you
  • Rode with Michy around one of the killer loops in Itaipava, where we have real mountains that knock the wind out of you.
  • Had a massive fondue with representatives of all the families in Rio: Xuxu, Kiko, Nick, Michy, Crica & Mariana, Emilía & Olímpia, and of course the amazing and unforgettable and gracious and witty Alayde of Ribeirão Preto, SP (though that was about 86 years ago).
  • There's an awesome page I hit yesterday that talks about trams in São Carlos almost 100 years ago: [] -- it's in english, which is interesting, and it has all sorts of interesting little details about trams and the city. Neat how something like public transport really captures the essence of city life at a certain point in time..
  • 6:00am wakeup. Ran the dogs around the square and power-powdered but arrived at the terrible corner 15 minutes late, though Johan didn't kick me for it (not this time at least).
06.06.2005 No way
  • Yes. []
  • 6:30 wakeup. Broken shoe means no biking. Took care of the dogs, and then down for the good-ole ball-pitching (my left arm slowly gets better at it, but my right arm still dusts it whenever I try. It also hurts like hell so I avoid it as much as I can). Was accompanied by the illustrous Sal6 who hobbled away to meet his ex-supervisor to help him to something somewhere. It was all very complicated, or maybe it's because it was 7am and I was kinda hallucinating after a litre and a half of power powder and vitamin C. Did a grueling 1 hour run that took me around Marginal and up and down São Paulo (the final ascent is not as bad as I predicted); my plan was to run up to Sta. Felicia and /then/ around the rest of Marginal but luckily I talked myself out at it about 5 minutes into the run. I would have DIED.
  • Tried to sort out my rescision of my apartment's contract, but there's still some itsy bitsy details.. such as getting at least some of the money I paid back!
  • My Empirion and Sun Project CDs arrived, but Nando already confiscared the Sun Project one (luckily, not before I managed to rip it into trusty .oggs). Spoke to my mother who together with Michy and dad ran the 100k relay race in Brasilia this weekend. Apparently mom and dad ran with Brazil's sports minister (though this meant my mom ran 5k instead of the 12 or so she was supposed to). Dad and Michy had great runs too and they were all proud and cheerful on this cool Monday morning.
  • Hacked into email and caught up on activity on Launchpad. This isn't as easy as it seems because there's a /lot/ of email, bugmail and people involved, as usual.
  • Chatted to Mako about shipits, the Media Lab, graduate studies and how I should get my MSc stuff translated into English. I am such a slacker :-(
  • Malone IRC discussion and mail-reviewing.
  • General Malone QA.
  • Phone call on CFS process support, almost there.
  • Phone call on Bugzilla additions to better support group and privacy controls, made nice progress; commented on bugs to unblock people.
  • Handled spam and unsures. I don't have so many, which is nice. What isn't nice is that some spam started falling in my inbox. I got two pieces today after a /long/ time with none. Darn.
  • Fixed up conference details for the barzilian sprint.
05.06.2005 Backed up at last
  • Started a new run of the database with the full content that should be backed up -- I was omitting export and some bits of mondo. Just listing the files takes 16 minutes, and the total content looks like
     Total backup size: 43G, 1008M, 906K, 688B = 1441308 blocks, 1057712 files
    Backing up itself takes
     1432097 blocks
     real    116m25.890s
     user    1m46.150s
     sys     8m12.010s 
    and recovery is a scant
     1432097 blocks
     real    71m45.273s
     user    1m18.220s
     sys     0m32.260s
    I got one CRC error because a VMWare image changed, but such is the situation with all-live backups (and I'm a cheapskate at some things, aren't I). But damned, 43G -- and we can still fit triple that on a single tape. We used to take 180m to back up just 21MB on the old DDS-3 -- we take the same time to do backup /and/ verify. I'm loving this AIT thing!
  • Did some hacking on positron to make it stop crapping out when reading from my Neuros. It is getting back two long integers jammed into the same string which causes struct.unpack to bomb away. Found a report and a patch available at []
  • Spoke to goldeagle about becoming a MOTU member, seems interested. Pity he didn't pick up the Hoary CDs I burned for him at FISL.
  • Cooked some dinner with the infamous Sal6. It was two-pepper fusili bolognaise, not radioactive but enough to make you feel fuzzy and emotional. We also tried to watch Lars von Trier's Element of Crime but decided at 23:30 that we were to sleepy and left the ending for some other day. Totally surreal, will require multiple watchings to pick up the details. It kind of reminds me of The Third Man, in an odd way.
  • No biking today. Broken shoe!
04.06.2005 I couldn't get away
  • The backup ran /beautifully/ and even the tape eject went smoothly. This is a day to remember :-) Here is the breakdown of the times:
         738498 blocks
         real    94m23.440s
         user    0m58.940s
         sys     4m20.800s
03.06.2005 We got signal. Sorta.
  • 6:00 wakeup, took the dogs for some much-needed exercise, and cleaned up out back. The grass in the back is really suffering from the winter and I wonder if it will really grow back. Maybe I should just bite the bullet and get real thick grass planted back there (and hope the dogs don't destroy it as they usually do). I wonder if there is grass which is strong enough to handle these puppies, though.
  • We did about 7 loops around russian roulette and a few interesting things happened. First, Johan did them all, and very well -- hell, we could have done 5 extra ones and still survived. Second, I have reconquered that downhill, and blasted through it like there is no tomorrow. Third, I realized /why/ I crashed on that fateful morning (I hadn't realized it yet, imagine that). While I was careening down the third or fourth lap today, I realized that it became very difficult to see the ground and the exact direction of the criss-crossy trails; the reason turns out to be that the sun is directly behind you as you come down, and at around 7:40 it is blasting up the hillside and completely landing you in shadow. It's /really/ hard to see where you're going. The day I crashed Magno and I left at around 7, so at 7:40, the first descent of the day, the sun was already in that deadly position. It's tricky because the exact place you need to turn off to avoid crashing and burning is hidden, sort of sketchy, and right after a bumpy bit in the trail. No crashes today! Fourth, and finally, even though we had a great time and rolled like there was no tomorrow, we /didn't/ appreciate the fact that the cows and bulls walking up made a bit of a mess on the trail.
  • Oh, right, I'm back from Porto Alegre, where I had a whirlwind tour of FISL with the countries star hackers, including Sidnei, Dorneles, Xiru, Leo, Luciano, Senra and the rest of the python people. I miss them all already, and can't wait for next year (where I /will/ spend the full time there by brook or by crook). It's weird being teleported from one world into another, but fun all the same.
  • Sorted out our tape backup, finally. The 2 sample AIT tapes and SCSI cable arrived today and I proceeded to dismantle and reorganize Anthem. There was (hah) a catch, of course; I had put all my trust (you see it coming?) into using the existing terminator and #$!!@#!@ it is /INTEGRATED/ with the old four-stop cable. ARGH. Anyway, I had already disassembled and moved the server around; I decided to bite the bullet, remove one of the hard drives from the RAID array, and put the tape in. We now have a functional tape drive, a RAID array running in degraded mode, and a lot of money to spend left on tapes, terminator and a few hours of psychiatric treatment. I hope the block size of 32K is okay for this drive, by the way..
  • Reorganized my TODO lists, caught up with everybody on the channel, and pointed out to Mark where to find examples of the new Python 2.4 list DSU support: []
  • Kinnison and Celso did a grand demo of the build daemons and the pool manager; we see Soyuz 1.0 creeping into the horizon. I challenged Kinnison to get a publisher working by noon tomorrow; let's see how that goes.
02.06.2005 FISL v6.0
  • For Celso and Kinnison: [] and [] and [] for Company B's lost first track on that album.
  • And if you're curious to know where the coolest swedish hacker once lived, you should check out the picture shed at []
  • A taxi ride from FISL (at PUC-RS) to the airport cost R$20, which is about one fourth of which I spent to do a possibly shorter route in São Paulo on Tuesday evening. Life is not fair! The flight out from POA was delayed but I managed to swap in two of my upgrade vouchers for a business class flight, and I enjoyed a nice seat and extra food for perhaps two hours. Caught a R$60 (hah) taxi to the bus station (only to be disappointed at the changing bus timetable that eliminated a few choice times). I had a pretty rough bus ride into the night but arrived at 1:30 unharmed; scrambled back home and tossed and turned until 2:15 or so.
31.05.2005 In and out the rabbit-hole
  • 6:00 wakeup. Power powdered and fixed up the KHS' pedals to go for a ride through the valley of pigs with Johan. Was about two hours, which means that I have to either take care of the dogs earlier or wake up even earlier (or get Johan to ride the full loop in 1:30 which is on top of my list).
30.05.2005 ex-Brasilia
  • Back from Brasília, where I went to the dentist, to a doctor, to another dentist, to bed, to beto's to pick up a tandem, to altiplano leste for a killer bike ride with Michy, Rodrigo, Carla et al. (see [] for pictures), to a marriage (Leo and Ingrid had a beautiful jewish-ish wedding), to bed, to QI 17 for some more tandem biking, to a nice and crazy-looking natural restaurant called Toca da Tribo, to a little skateboarding banks with Dieter (where I proved I can still ride after a year of no practice!), to Tok Stok (we have furniture!) and finally to the bus station.
  • Arrived in São Carlos at 8am, and dragged a /very/ heavy bag home. Organized that home somewhat, and took the dogs for a walk before hiking up to the office (in the rain, I should add).
  • Dealt with email, IRC and bugmail.
  • Phone chat with SteveA on travel and the sprintathon, now definitely in Brazil. Hiked over to a hotel to check the place out.
  • From the weekend's news, I will need to buy /yet another/ SCSI cable. This is /so/ silly it hurts. Tapes arrive on Wednesday, but I need to find this @#!@#!$! cable. Aha, found some options (finally): [] [] [] []
  • Re-reviewed some specs and went out with Celso and Kinni for some dinni.
  • Assembled the new clothes rack in the middle room with Kinnison. Tried for the third time to make that damned bike rack stick in the second floor, this time using good old steel wool as per Sal6's recommendation. Also put the hooks and string in for a retractable clothesline! I rock!
26.05.2005 Body of Christ
  • 6:30 wakeup and it's VALLEY OF PIGS for sal6 and I (loser turnips not included). Was muddy as hell and quite cold, but thanks to my sleeves I felt not a bit cold. Climbing felt good (but it always does on the Specialized and the Cross-maxes help) but my legs hurt a bit from the run two days ago (I'm in bad shape cross-training-wise).
  • Dag control. Cleaned up and took the dogs for a walk, including a labrador which apparently got lost. Took the labrador in for today as well to avoid her being run over. Hopefully her owner will find her in able time.. 4 dogs, dude. 4.
  • Had some late breakfast, washed the bikes with Sal6, took a shower and rolled into the office.
  • Did inbox control -- the filtering strategy works pretty well, and set up some additional mailboxes. I noticed that mdz keeps "incoming" folders separate than archival folders, I should imitate him.
  • Set up a mysql tunnel for pbojanic. This was interesting because MySQL's complete special-casing of localhost pulled my carpet a few times. First, I set a password only for the account on localhost; I did this initially because I didn't want to use % and then, even if I /did/ use %, it doesn't cover localhost (for some weird reason). Second, I set up the tunnel doing
     ssh -p 922 -L 33306:localhost:3306 
    and tried to connect using the client
     mysql bugs -P 33306 -u foo -p  
    but mysql just refused to use the specified port, using the domain socket instead. Then I read [] in particular
    A Unix socket file is used if you don't specify a hostname or if you specify the special hostname localhost.
    It turns out that the right way to do it is to use a different host -- and yes, works fine. But then, because I had set up mysql to only allow connections from localhost, more trouble ensued! I ended up adding a permission for % and living with it.
  • Remembered MySQL's skip-networking option in my.cnf
  • Did some more random tasks and inbox management, and ran off to Brasilia. See you all on the other side.
25.05.2005 If it rains tomorrow I'm going to XXX
  • 6:30 wakeup, but boo, rain rain rain, so 7:50 wakeup with Kinnison trying to open a locked door. Breakfast and made the dogs happy and fixed a flat tire which has been bothering us for a few days now.
  • Nuked out email, knocked some reviews out the door.
  • Had a meeting with a person who's going through a test phase at Async, and with Gustavo from a Parqtec company, who wanted to discuss a PIPE partnership.
  • Sent some email to Nokia pleading for an OSS discount.
  • Did a valiant effort to triage bugmail and get my inbox under control. Getting there -- kicked about 100 today and instated more radical filtering based on mdz's suggestions from yesterday's IRC chat.
  • Short BradB and BjornT meeting.
  • Long management meeting.
  • The real meaning of having been born in the 70s these days:
     <you> your bug numbers are so short :)
     <kiko> heh. it's a young distribution :)
     * you fixed a 4-digit Mozilla bug once
     <kiko> when we were all 20 years old, right? :)
     <you> hm?
     <kiko> what's there to hm about?
     <you> who-all was 20 years old?
     <kiko> the 4-digit mozilla bug -- I was hinting it was solved a long
     time ago. was my humour lost on the fact that you /are/ 20? ;)
     <you> I'm 21
     <you> I was 19 when the bug was fixed
     * kiko cries
  • Got Olivia's stitches removed, finally. Also bought some Frontline to try and control the tick infestation there (but we need to get the lawn taken care of, then).
  • Discussed with mdz how exactly LaunchpadIntegration is going to work. We don't know yet. Got seb128 and jdahlin to discuss it and verify alternative solutions.
  • Assisted Jurandy with some CVS lock issues; I pointed him to [] which is a killer reference on the topic.
  • Did a ton of Malone bug triage and tried to poke everybody under the sun to get on top of reports. Activity reported. Spec reviewed!
  • Rolled back home at about 9pm, and made guacamole, rice and some sizzling soymeat for Sal6 and I. It rocked the system. Fabia ended up finally dropping by tonight.
24.05.2005 The eagle has landed
  • 6am wakeup. It SO sucks that it's raining yet again, so I hobbled around for about 40 minutes and then went out for a run. The run was great and my legs were remarkably fresh as I plowed up and down Sta. Felícia. The traffic on the road getting back to my place at 7:45 annoyed me and I'm determined to change the route to something that probably equates to some 12km the next time around. Hopefully it won't rain tomorrow, though.
  • Rolled into office early at 8:30, and did 1.5 hours of email catchup. Had a meeting with Daf and Carlos to try and find a way to silence their launchpad-errors spam, which was not as positive as I had hoped but apparently it's a bit involved.
  • Daniel arrived! Went home with him to sort out his lodging and so he could get refreshed for his first day of soyuz sprinting with Celso. This also means I now have in my hands an AIT drive of some beauty (but unfortunately no SCSI cable as of yesterday's fiasco. That will take at least a week, so alternatives are being sought out)
  • Chinese! Daniel got a load of yakimeshi and some açai -- that probably ended up being unusual for the northern-hemispherian!
  • Spent some time trying to track down back-button-erased-my-form mozilla bug at [] which lead to [] and []
  • Whacked out some email and did some Wiki-editing.
  • Phone call with SteveA to touch base and get some unresolved issues moving.
  • Bought some books for mpt.
  • Phone call with mdz. Set up to have an u-d meeting tomorrow on Bugdays. Matt asked what the meat was and I thought that was amusing.
  • Reviewed specs and packed up home.
  • Had the rest of the nuclear chilli with Johan and Sal6. Spent the evening reviewing specs and trying to guess music from Kinnison's music collection, which I did, let's say, average at. 23:30 sleep under some pretty intense rain. We need to get that roof fixed at some point..
23.05.2005 Slackin' back on track
  • 7am wakeup; took care of the dogs, got Sal6 and Claudia out of bed and stopped by the bike shop to get Claudia's bike set up (new stem and brake levers, minor other little fixnits). Sent her off to Campinas to pick up some bike shoes. Got into the office an hour late and lo and behold, 250 unread emails!
  • $#@!# SCSI CABLES. Bought the wrong cable for Centrin, and the next possible option costs (no joke) U$250. Decided to purchase internationally, checked out [] and proceeded to make a pretty complex purchase via Amazon to deliver in California. Fingers crossed that it will arrive in time, but suspect it won't given some sort of mismatch between Amazon and C2G. Called up Dee at Business Sales to try and sort it out. Pray. Sigh. And the prayer came through:
     We only ship UPS ground with  However, in order to help you
     out, we will eat the extra shipping cost and ship the product to you 2nd
     day.  This is for this order only.  I am going to add the freight that
     you would have already paid so that the order stays at the same amount.
    Man, this company /rocks/. I will definitely be sending more business their way in the future.
  • Man, I am for some reason /very/ sleepy today. I wonder what's gotten into it -- maybe just the lack of the morning bike ride? I hate it when it's rainy (boo Shirley Manson) and by the look of [] it's going to look like this through Wednesday. Apparently the power lines here in São Carlos don't like it either, and we had intermittent failures for the whole day. We still need to get this house's grounding wired up properly..
  • Arranged to have SCSI cable sent back to Centrin, swapped for two AIT-2 SDX2-50C tapes (so we have something to back up to when everything we need is finally set up). So who knows? Maybe that part of the backup soap opera may be coming to a close.
  • Sorted out some books that needed to be shelved.
  • Classic moments in IRC history
     <kiko> do you like dags?
     <Kinnison> erm, what are dags?
    He hasn't seen Snatch, but he will soon, I suspect. Celso's picking him up tomorrow and then they're in for some serious sprinting.
  • Some IRC and email discussion on Launchpad. I spent about half an hour user-testing Rosetta and the translation widget is /so/ much nicer, it really is getting there. Fought email down to 100 to-reply-to.
  • Worked on some CFS tasks and reviews in preparation for the deadline. Also mailed the TSP team to see what they thought of our changes.
  • Only sent out 26 emails, this was a weird day.
22.05.2005 Winter is here
  • Uhm, really. It's like 15C. We got Claudia's bike set up and went for a ride in the morning (after a pretty slow wakeup and breakfast process); Johan managed a pretty steep downhill and Sal6 and I had fun chasing each other like we haven't had in a long time. Had lunch at Ciao Bello, and then slacked around watching the pilot episode of Twin Peaks (though everybody but Johan either slept or got really distracted). Dale Cooper is /such/ an amazing character. I went to the shopping center and bought a shelf and a hose (mom, finally!) and Claudia knocked a pot over and cracked it. We fled red-handed. Keren-Or rang me up while I was mid-shopping and reminded me (yet again) that in Israel, Sundays are like Mondays. And movers come to your house at midnight. I like the sound of that.
21.05.2005 Are you ready to rrrrruruuuuruuumble?!
  • 7:20 wakeup. Guess I can't really sleep in predictably anymore. Assembled my tool rack, finally, with some help from Celso's drill and my ingenious use of spacers. Watered the front garden to ensure the gardener's work lasts. Took care of the dogs -- can you believe that yesterday, in 4h that I left Estrela and Monica with Olivia, they ripped off her lampshade. I've decided to not worry about it anymore. Picked up bits of gnawed leash; Estrela is like a little devil, man. Anyway, did some minor reorganization of the house, checked with Thiago that my bike is all a-ok, spoke to Claudia and Sal6 on the phone.
  • Rolled into the office. Tackled the usual mail, sorted out my todo lists and travel plans for June. Got my activity reports sent in. Minor bug triage. A bit of IRC chat. Helped Salgado with Makefiles.
  • Got the KHS finally assembled with the new Marzocchi fork. It is kinda high but rides pretty well even so. How do I know? Well, we did a monster ride to Analândia, all of us, today. No crashes, lots of fun, 3 flats and quite a few people - Johan, Osvaldo, David, Magno, Chinaglia, José Bones, me, Du. The KHS is riding spiffy, though I think the stem is a bit too high for it now -- could get it swapped at some point. Met up with Claudinha at Cuscuzeiro, had 3 cokes, went to Terencio's place and decided that all was good and enough and over; gave Chinaglia our bikes and drove back to São Carlos. Dinner consisted of some delicious fish at Castelo and then rode back in time to connect with the legendary Sal6! Visited Teia for their 4th anniversary and enjoyed that until everybody was feeling more than a bit sleepy. Ended up watching half of La Cité des Enfant Perdus but everybody was just falling asleep. All things considered, I need a better sofa.
20.05.2005 Bikes. Maybe bikes own my life -- after all, I sleep with them.
  • 6:20 wakeup, which was /bad/ because I had set up the ride for 6:30. It was a nice valley of the pigs ride, or would have been had I not broken my chain on the first section of the uphill, banging my knee /again/ and cursing because I had no chain tool. Magno lent me his and all was good for the rest of the ride. I feel totally rested and wickedly strong on most of the uphills and flats which is a great thing. My fork is now a lot better (stiffer!), and my /arms/ actually hurt this time. I've mastered the air adjustments in the SID.
  • After rolling back in, took care of the dogs and today for the first time a gardener that arranged a meeting /did/ show up! He did a nice whack of the front yard and I suspect it will come out pretty. Rolled off to the office 30 minutes late but happier. And then I realized I forgot my glasses at home.
  • Email cleanup. Had 200 because of some launchpad-errors list people opened the floodgates on.
  • Meeting with Daf and Carlos, looking very good.
  • Meeting with Brad and Bjorn, also spiffy.
  • Tackling email and IRC support and coordination. This project requires /lots/ of overcommunication.
  • Phone call with Mark to update status.
  • The mail from launchpad-errors keeps coming in -- hopefully somebody can nuke at least the empty mail that nags me horribly. Procmail to the rescue meanwhile.
  • Got a chain tool (yeah) and some sleeves at the bike shop; also picked up some tires that may come in handy in the very near future. Also spent some time at the bank dealing with the export paperwork. It's interesting how none of the security people at the bank figures me for a company owner, and they always make me say who I am and fidget and go inside and ask for permission before letting me in after-hours. Sigh.
  • Corbani called and said his dad, who had a pretty nasty cut in his foot about a month ago, is still in the hospital; blood clotting is such a dangerous thing. I wish him well. This also means it's likely Corbani will see no biking this weekend, which is a second tragedy.
  • Met up with Renata and Débora and had a conference with Camilo to try and get SAFE hooked up with Camilo's proposal for a toolkit to support MPS-BR. This is /such/ a good idea I just wish we had funding to be able to get people to actively work on this infrastructure.
  • Only sent 31 emails today. It's Friday!
  • Went to Café da Mel and listened out to Karmo rolling the house decks up till midnight. Had some great chips-n-guacamole, met practically /all/ the suicide bikers in the area, and even met a babe. Rolled back home at about 1am.
19.05.2005 Actually, dogs dictate my life.
  • 6:20 wakeup, though I rolled for an extra 10 minutes in bed -- YAWN. Checked out the dogs. So amazingly enough Estrela and Monica aren't ripping apart the front yard, though they can't seem to keep their water trough alone -- they'll just be thirsty. Small improvement on Olivia's side, still nothing amazing, but getting there.
  • Short ride with Du to pick up some pictures of some gym equipment so we can design something nice for the square close to my pad.
  • Rode up to the office rather early on cprov's request. Launchpad meeting first thing, sorted out launchpad-reviews and got some tracking on late-breaking issues. Dealt with email somewhat, but it's now at 75 messages.
  • Sorted out the launchpad-reviews mailing list. Talked to SteveA on the phone. Fixed up the reviews wiki page. Hours pass.
  •  <mako> oh man.. i just replied to an allcaps email in allcaps..
     and now i got my all caps reply
  • Email on reviews and bogosities on LP. Dealt with some spec reviews. Who can context-switch faster than I?
  • Inbox management post-lunch. More spec review.
  • Published our Speedy authentication script at [] in the hope that other Speedy users can avoid the hassle of having to relogin every time Telefonica has a hiccup.
  • "Published" my pictures from Australia at [] -- hey, there's Sydney harbor bridge at [] and none other than Jordi and the Canonical Mafia at [] and whoa, some odd buildings at []
  • Reorganized my TODO lists so I don't go crazy.
  • Found a gardener and arranged to meet him at 8:30. Let's see if this one shows up. Spoke to Corbani and he says everything is peachy and he might even buy me a clothes rack if I'm a good boy (I am a good boy). Visited Du at Teia who produced email requests. Baaah. Tried to offload them to Salgado, unsuccessfuly. I need to try harder.
  • Meeting with Celso and report.
  • Meeting with Salgado and report.
  • Got people on IRC to bother our DBA on the other side of the world. s/bother/wake up/ hoho
  • Wrote 46 emails today in total. Okay, this is scary. I have written since February 9th, this year, 2030 emails.
  • Finally, a hint to why we all love mpt:
     From: Matthew Thomas <>
     Subject: Quick guide to mpt's crusty olde ASCII art
     Checkboxes are square, and radio buttons are round. I promise I'll never
     use ASCII art in specs, but for future reference on the mailing list:
     ~        [ ] checkbox
     ~        [/] checked checkbox
     ~        ( ) radio button
     ~        (*) selected radio button
     [         ] text/password field
     ~ _________
     |       |A| multi-line text field
     |       |:| (<textarea> in (X)HTML)
     [foo    :^] option menu (<select> in (X)HTML)
     ~ _________
     |[/] Aa |A| multi-selection listbox (<select multiple> in (X)HTML, until
     |[/] Bb |:| we generalize the widget I gave Daf for language selection;
     |[_]_Cc_|V| see []
     ~ _________
     | Aa    |A| single-selection listbox (<select size=...> in (X)HTML,
     | Bb    |:| though we may want to roll our own widget for this too)
     And stuff we won't be able to use for a while yet:
     [       |v] combo box (<input> with <datalist> in Web Forms 2)
     [Bar     v] drop-down menu (<menu> in Web Apps 1)
     =====O===== slider without marked values (<input type="range"> in WF2)
     =====V===== slider with marked values (<input type="range" step=...>)
18.05.2005 I think email dictates my life
  • 6:20 wakeup, dag control -- Olivia still not so hot, Estrela close to perfect, Monica looking good. Estrela has decided to dig yet another hole in the left area of the backyard (protesting for not being taken out for a week) and I've put her and Monica up front for today; Olivia's hanging out in the back. I /so/ wish they get better and all this confusion ends, I miss taking them out every morning (though I guess I appreciate the extra 30 minutes of sleep).
  • Biked with Johan around UFSCar; did 5 1/2 loops in the forest and then did a short ride out back; nothing spectacular. My SID fork is still kinda mushy; I need to do some experimenting with that little pump, and get that sorted and understood; I'm pumping 150 in the top left chamber but it still squishes in when I do standing climbs. Had some juice at PQ Sul and stopped by the pharmacy before rolling into home.
  • Hacked on email. I arrived with 110, down to 45 again, but it worries me that I left yesterday with 40. I need to do some analysis of the traffic, but it's just bugmail combined with lots of LP discussion combined with random email on tasks for me to do.
  • So Johan and I, we want a pair of these: [] -- they are actually listed but unavailable at []
  • Phone call with Carlos and report.
  • Mako and I did careful research this past conference, and it has paid off: we have conclusive evidence that top-posting is associated with people who are social deviants or managers. Read all about it at []
  • Reviewed two Rosetta specs.
  • Out for lunch with email at 50 (+640 in my laptop's saved replies inbox). Did I say lunch? I meant CHINESE!
  • Back with email at 53.
  • Phone call with BradB and report.
  • Canonical management meeting, though only Jane, Steve and I made it.
  • Phone call with mpt and report. Only two left!
  • Meeting with evandro. 56 messages.
  • More IRC and email, but I'm loosing out this battle.
  • Arranged for a Marzocchi Marathon S fork to be delivered for assembly on my other bike -- we may have a winner there. Still need to get the hooks for my toolrack, but I'm getting there. Tomorrow, maybe.
  • Reviewed some CFS work, which is looking very good. We have a couple of hard deadlines for the next few weeks, but we will do it.
  • Wrapped up today with phone calls to Sal6, BT and my parents. Nice to see my inbox has only 45 messages -- I won!
  • Nando and Romaia stopped by last night. I took good care of the dogs; Olivia appears to be getting better, the cut slowly growing less swollen. Monica has taken to licking her stitches, and the skin around it is getting pretty raw and sort. Can't get her to stop without a damned lampshade; will check with vet tomorrow. Estrela is a star and never touches her's -- can't tell if that's why it's getting better or if the causal relationship is the reverse. Crashed at midnight after arranging some resolutions with Nando.
  • Wrote 48 emails today in total.
17.05.2005 Holiday, repeat, repeat
  • 6:30 wakeup but decided my knee needs an extra day of rest so I didn't go biking. The knee itself makes weird creaking noises when I press it; here's hoping it improves over today. Bought some screws and assorted hardware to assemble my homebrew tool rack; just need some hooks now and a drill to connect it all. Also picked up a ton of clothes that I sent off to mend (Johan must be happy now).
  • The dogs are a riot. They ripped apart half of the shirt I put on Olivia, and ate the bindings for the lampshade. So Olivia's grounded in the front for today, ha! I think she's improving, though -- the stitches today look less swollen. Monica and Estrela are fine, of course (as always).
  • Meeting with Evandro (about 40 minutes) to discuss the product editor for Stoq, looking quite nice right now. Let's hope we can keep this thing turned around and pumping from now on. These daily meetings help a lot, I feel.
  • Tackled email like there was no tomorrow. My LP email just keeps accumulating, though :-/
  • Decided on the internal AIT drive (it's easy to make decisions when there's no other option, isn't it?) and it should be arriving in the next week or so. I can breathe easier as soon as we have a tape drive. Bought a SCSI cable at [] and planned to buy the tapes next week, when our illustrous international guest arrives.
  • Don't you just love weather on the weekends? Just check out what we have in store for you: []
  • Reset some passwords today. These two links are pretty useful: [] and [] -- particularly because it appears just drops all packets from our host, no qualms about it.
  • Meeting with BjornT and BradB to check out the status on good ole Malone. Meeting with Daf to check out the status on language pack exports, had him offload a problem to fix to Salgado, in the hope we can debug it with two heads here.
  • Started on performance review meetings and phone calls. I have quite a few to whack through. Debonzi, Daf and BjornT tackled, and reports shipped off. Whoof, so much work.
  • Reviewed patches for BradB. I wish I knew this code better. Filed some Malone bugs in the process.
  • Arch is humour, too: []
  • Did a Bugzilla tag for timello's work.
  • Checked on CFS status, and wrote more email.
  • Called on Corbani and checked on his visit over the weekend. Weekends are fun! Algo called Guila up and asserted the little trek is good to go -- it should be, of course, but he tells me the tires are shot from lack of use. Hmm hmm. Tires.
  • So my IndexedCatalog/Python/PyGTK acquaintance Cliff Ilkay's brother is a competitive downhill racer, named Ender Ilkay. I'm looking for some pictures; this is what Google tells me: NOTHING. How can a competitive mountain bike racer have no pictures up!
  • Slept at around 11, after some dag control. Olivia /seems/ to be improving but I don't like the oozing out of the wound. Maybe it has to do with the cream we're using; I hope she gets better very soon. Estrela's cut was actually oozing plasma as well but given that her belly is now no longer swollen I figure it's just liquid that accumulated after the operation that's being put out. Monica was fine but still a bit swollen.
  • Wrote 45 emails today in total.
16.05.2005 Revenge of the pigs
  • 6:30 wakeup (sleepy) rolled out of bed, helped the dogs out. Olivia is definitely not so hot, though she may be a tiny bit better than yesterday. She's eating and walking around, so that's a good sign, at least. Arranged to go with the vet to check them out at 16h.
  • Rolled up with Johan to meet Magno and did a full valley of the pigs loop (took us 1:50 this time, though -- we need to push this down to 1:30 if we are to keep the 7am start). Nothing remarkable apart from the fact that my fork still feels a bit mushy and my knee @!#@$! hurts, still. I need to get some ice on it today. Johan apparently got a bit nuked from the ride, or maybe from weekend extravaganzas, who can tell? :-)
  • Knocked email back some 30 notches and hacked up a todo for today. Ugh, I need to go to the bank, man. AND to C&A. This is looking bad.
  • Organized and participated in UbuntuExpress meeting on #ubuntu-devel, introducing "the brazilians" to Kamion and ogra. Seems to be working well, surak is sharp and the guys are interested. Got to make them hit the practical goals.
  • The bugmail just pours in! Trying to vy for sanity with it. Failing.
  • During lunchtime went to C&A, the bank, the bike shop, C&A again. Oh, and stopped at a shop to buy a plaque of wood to assemble a little toolhanger in one of the rooms.
  • Meeting with Daf and Carlos on Rosetta. Action points, blockages analyzed, good traction on most of the specs. Daf's gonna email us with some (hopefully good) news on DB timing.
  • So I needed to get that crazy lampshade for Olivia, and some extra medicine. I think I've spent more on the dogs than on bicycles this year!
  • Stopped by Teia, and convinced Du to call city hall and get them to tell us what we need to do to approve him and I building a little workout area in the square next to my house. That will be a pretty nice addition, I think.
  • More IRC discussion with SteveA and BradB and the brazilian mafia. Some UI specs, some hackage, some email destruction.
  • Got Nicole at CFS to move to Thunderbird. Guess if her email problems weren't completely solved the moment she turned it on? :-)
  • Some nudging on #bugzilla do get things to go the way Joel and I need. It's interesting how good communication helps immensely on IRC.
  • Meetup with Evandro on Stoq bits. Slowly getting back on track, I feel.
  • Short meeting with BjornT on Malone status, mostly email-related. Still need one tomorrow. Off a bit earlier to try and deal with my INBOX offline, it may help.
  • Wrote 21 emails today in total.
15.05.2005 Sundays are like holidays
  • 9:15 wakeup! That's a full 9 hours of sleep. I had moved my bed into the back room and I suspect the extra quiet spawned by the position and the reduced traffic of Sunday paid off.
  • Bought some Time cleats, given the ones I have are just plain nuked out. Did a little weight/price comparison of the Time Atacs: Apparently my XE has the best cost-weight ratio! I wouldn't want to spend the triple for a bare 60 grams in savings.
  • Scanned through email for an hour, looking at spam, complaints, unfulfilled promises, nightmares, revelations. You know, the usual Sunday bugmail.
  • No, I'm not being a lazy bum -- it's an off day! I rode every day for the last 10 days or so, I deserve it.
  • Hmmm. Read up that now, no matter how little, we pay 60% of import tax when receiving things internationally, if the sender is a company. This means that I should probably only buy stuff used when purchasing from Amazon -- is the sender is a person, we have a U$50 lower limit for taxation. This is a regression from a couple of years ago, when it was 0% for anything under $50, 50% for anything between $50 and $100, and 100% for anything over $100. And they count shipping as part of the taxable value!
  • Signed contracts, looked through personal performance review, did a lot of PyGTK mail catchup, planned tomorrow.
  • Went out for dinner at a pizzeria with Salgado and Johan. Nothing to write home about (well, we /did/ have Ice Cream Pizza, wtf) but the girl who answers the door was pretty amazing. Had to leave my bike locked outside, though (I hate that). Rolled back home and took care of the dogs. Olivia's cut isn't the best, Monica and Estrela are fine (but their cuts were tiny, too).
14.05.2005 Diesel Power
  • 8:30 wakeup! Wooo! Saturdays rock. Looked after the dags, Monica and Olivia bandageless, but Estrella fine (she took a whack yesterday for not obeying me when putting them on so maybe that's the secret). I need to haul those bags of crap out of the garage, man. Maybe invite people to a "party" and have /them/ do it? :-)
  • Sent off activity reports for thursday/friday, slacker.
  • Sent off remaining activity logs (these no-lunch days have f**** me reliability scotty).
  • Installed daf's new shtoom package forcefully, tried to figure out why apt didn't see them from his home repository yesterday. Keybuk and I don't really know. Ah, elmo tells me to use
    -o Debug::Acquire::Http=true
    . Let's see. Hmm, it's telling me that the file isn't updated (but it /is/). More investigating. Aham. WHO COULD IT BE?
     HTTP/1.1 304 Not Modified
     Etag: "340c4c2-3a5-2e6f5340"
     Date: Thu, 12 May 2005 18:06:20 GMT
     Warning: 113 br-arq-fi-cd04 "Heuristic expiration"
    Whoa. br-arq-fi-cd04? @!#@!# TELEFONICA AGAIN #@#!@ Fired off an email to some people, but complaining about Telefonica is like complaining about the weather. Everybody does it, but what point is there to it?
  • Interestingly enough, the only apt option that /could/ help us, which is
     -o Acquire::http::No-Cache=true
    doesn't actually work. Filed bug at []
  • Also filed another bug on something which is more of an annoyance than a real issue: []
  • Pretty long and hard ride over to Analândia and back. The weather was perfect, and Ivo, Tecão, Magno and I rolled up and down the hills for what was for me the first time in months. Had a pretty unagreeable soft drink under the Cuscuzeiro (I must remind myself to avoid Tubaína and other soft drinks made in small cities, it turns out they are so sweet you could get diabetes from looking at the bottle). Rode back half in the dark (mostly because Tecão had a flat tire and Ivo and I didn't know). Met João and Paloma and Kicho and (better half) at a bar afterwards where we had some Gatorade to celebrate Ivo's birthday. Took care of the operated dogs, cooked some dinner for Johan and I but couldn't manage to get my act together to watch a movie (SO sleepy).
13.05.2005 hey bru. You know who I am?
  • Ssssshhhh. Go back to bed.
  • Ride started out with a slow roll to Parque Faber, and paused on the downhill into Monjolinho for a flat tire. About 5 minutes later, landed a massive crash on the russian roulette downhill. It was still very early morning and I chose a wrong path for all of 2 seconds before jumping over a massive hole (good going) and falling into the next one which was about two times as deep. SLAM head-first into the wall of the ditch, knocking knee and elbow in the process. Got up totally dazed, picked up my glasses, then realized I wasn't so sharp, put the glasses down, stumbled around the field and sat down. Whoa, that hurt! After about 15 minutes pansying I mustered enough courage to get on again and ride down. Crashed again about 20m forwards, and then started feeling a bit better. Managed to do an average roll around the sugarcane fields (though pedalling with my left knee is horribly painful) and stumbled back into my house.
  • F*** TELEFONICA. Dude, there has to be a better way of getting internet access than the horrible horrible service they provide us with their appaling Speedy. They kick us off randomly, expect us to use a /webform/ to log in, and this morning, they decided to kick us off more permanently, the issue being that there is some sort of speed mismatch between Terra, the ISP and Telefonica. Whoa, what's this ISP /and/ Telefonica business? Well, to hell with telefonica, and throw anatel too, who decided to regulate broadband in the most braindead way. Burn.
  • Anyway, an hour of my life wasted, and no progress. Why do they think people have to endure this sort of idiocy? If they told me it was a power outage, failure, I'd be content.
  • A final phone call on staff reviews and now I have around 30 action points. Need to offload these ASAP or risk going crazy.
  • Found a decent store to buy backup media here in Brazil: []
  • Set up an FWD account (655187) at [] so I can practice some shtoom. Hmm, attempts to get shtoom running work to the echo server but fail between salgado and I.
  • Interesting tidbit: my T42 has an embedded microphone, which is quite decent. If I crank the volume up in aumix, I hear myself type over the headphones. Is this sort of feedback intentional?
  • IRC assistance to LP hackers, discussions with SteveA, roundup of the brazilians who are to work on UbuntuExpress (Kamion and ogra to meet up with them on Monday, in particular, with surak).
  • So plan of action for the tape drive:
     x If swapping our motherboard is practical (see [] 
             and tomorrow morning, C&A)
         x Order the new motherboard
         x Order the external AIT-2 drive (752ukp) at []
     x If it isn't
         x Order a SCSI LVD cable with more than 4 connectors, perhaps
             [] (71ukp)
         x Buy the internal AIT-2 drive (611ukp) at []
     x Buy 10 cartridges at [] (R$227.50) 
         or [] (R$242.00) 
  • And, actually, you can find VS-160 tapes in Brazil, too -- [] and [] both carry it.
  • Took care of the operated dogs in the evening. They are already all jumpy and happy! This is pretty insane, man -- 2 days and that's it? Either dogs have an amazing healing system, humans have an appalingly bad one, or god has smiled upon us and bestowed us with a fast recovery. They keep ripping the bandages out, though.
  • Went to a really crappy show at CAASO. I mean /really/. The first band was bad. The second band (a Pearl Jam 'cover' band) -- amazingly -- was worse. The only consolation was that I slept for about 2h before that and thus was able to sleep like a baby.
12.05.2005 Slip slide melting
  • Woke up at 6:50! Victory! I seem to be back on track with my sleeping patterns. I actually woke up late (forgot to set the alarm clock, stayed up watching Alien with the new boom boxes, you know the drill) and had to rush out to ride with Johan. I didn't even take care of the dogs, but there's reason enough for that -- they're spending the day at the vet hospital, getting their insides removed. I walked them there in the morning, in remarkably beautiful sunshine. We weighed them before giving them the pre-anesthesia: 16, 18 and 22kg for Estrela, Monica and Olivia. Then we threw the three of them in little cells and I ran off to not be bothered about this decision for the next 12 hours or so. Here's hoping none of them are allergic.
  • The bike ride was an easy one through UFSCar, not wanting to ruin my legs further and in anticipation of tomorrow's ride with Magno. Magno is into doing long hard rides and we're still beginners, you know? :-) No crashes today!
  • Fought a barrage of email today. I'm getting good at nuking the evening's email, but unfortunately about 70-100 tend to pile up during the day and I don't really have time to go back and deal with them. I'm thinking about this. 110 kept, 93 deleted.
  • Whew! Almost 3 hours of phone call with Mark and Steve, and still another set of hours to run with tomorrow. Ah, well -- this is in fact really valuable and the team /does/ benefit significantly from it.
  • After a late lunch, visited the Linux Installfest at UFSCar, and watched a talk on Squeak and Free Software Licences (given by the one and only BT). Gave out some hoary and warty CDs. It's interesting how we haven't yet made the university kids here feel the Ubuntu love. We should try and figure out a way to get an Ubuntu community going here, it /is/ possible, I'm sure.
  • The dogs are operated. They look /fine/, amazingly -- they actually walked from the vet's care into home without as much as a sigh. 7 days of being careful with them, now, and then stitches off. The vet went into all sorts of grisly details of the operation, but the dogs seemed remarkably happy and aloof. Guess the anesthesics work wonders.
  • Did a serious review of backup options we have. I want a rock-solid system that can take at least 80GB uncompressed. This leaves me with a few options: DLT, VXA and AIT are the most affordable ones, and LTO is the expensive but cool one. So I'm doing maths and thinking about how this is going to work. It appears that one thing with LTO is that cartridges are a /lot/ cheaper, perhaps half-price of the other solutions.
  • Having an external drive would be a big plus, but unfortunately, the server motherboard we have lacks an external connector, so no external backup. This /so/ pisses me off -- I never realized that could be a problem some day. The model we have is an SE7501BR2: [] and the one I /should have got/ is a SE7501HG2: []
  • Now, that wouldn't be so bad if not for the fact that the server is in a very low position, so we'd need to kneel once a day to swap the tape. Not only that, but the SCSI cable has no free slots for a tape drive to hook onto it. COMPUTERS!
  • Hmmm. Maybe I could turn the server around and make it face outwards. And get a 7-position SCSI cable. And get an internal. If that's the case, the AIT-2 (50/130GB, not the AIT-2 Turbo, which is 80/208GB) is probably the cheapest option (790ukp total), followed by the DLT, which is damned expensive (929ukp total). Annoying. And an extra 60 ukp for the cable. Hmmm. Maybe my parents have my other cable; maybe I could swap them.
  • Some threads discussing different alternatives, with arguments on both sides (meaning that both sides are probably good enough): [] [] and the reasonable comment by a Novell Support operator: []
11.05.2005 Full gear
  • Woke up at perhaps 5:30 this time. I wonder if my body is getting adjusted to jet lag naturally (it's been a week since I've arrived) given I'm not taking the melatonin, or if it's just because I'm biking (and getting sleepy at about 19:00!). Dogs. Kind of fearing tomorrow's walk to the veterinarian, but trying to not think about it too much (and trying to be practical about it, too).
  • Rode with Magno for 1:50 into and out of the Valley of Pigs. This is the sort of ride I'm not quite ready for, and I huffed and I puffed and I almost had a heart attack going up the last steep section of the uphill out of it. At any rate, we sped back into town and the only thing I really missed was some oil for my chain. Scratch scratch scratch and it makes you feel all guilty. Buy a new chain every 2 months.
  • Matt Zimmerman and I were caught doing what can only be called "UDU Scheduling" (for those that understand what that phrase means, I hope you have rested enough since then): [] That pic is by JaneW, yes, the same JaneW that disappeared at the gay bar. I never said that.
  • Today an /english-speaking native/ told me that "indisposed" couldn't be used as a synonym of "displeased", but only as a synonym of "busy" or "not feeling well".
      3. To disincline; to render averse or unfavorable; as, a love
         of pleasure indisposes the mind to severe study; the pride
         and selfishness of men indispose them to religious duties.
               The king was sufficiently indisposed towards the
               persons, or the principles, of Calvin's disciples.
         [1913 Webster]
    Well, my movie english kicks ass.
  • Dealt with email in the morning, but it's already out of control. So many Bugzilla bugs I'm just going to have to find a better way of dealing with them. I mean, I spend the whole day dealing with email, trying to keep anything urgent dealt with, but I started out with 40 and I now have 110 unread. What's the secret?
  • Long management meeting that was great, filled out a ton of TODOs and have courses of action for a lot of interesting problems.
  • Helped mdz out with some Bugzilla patches to make the Ubuntu Bugzilla more manageable, and fixed a little bug for seb128 while I was at it.
  • Ran a meeting with ogra and dholbach on Ubuntu Bugdays; people discussed if giving prizes for people that did good work on the Bugdays would be a good thing or not (I think it would be, but what do I know :-) -- got that nailed into a concrete plan.
  • Phone call with SteveA to nail team issues; we have /another/ call tomorrow to finalize this stuff, but waaah.
  • Final note for today was yesterday's surprise. We signed a contract with a company a while back and so yesterday a box arrived from that company. Kind of like a box Amazon ships me DVDs in. Has fragile stickers on it and ESD-protection-touting tape binding it. So I'm all like whoa, what's this loot. Open it. A ton of bubble wrap. And inside the bubble wrap, slightly wrinked and rolled up into a little bundle... umm, these are... signed copies of our contract! It even included a packing slip with costs detailed. Large companies are weird, man.
10.05.2005 Keep em rolling
  • Woke up at 4:30 for some reason. Could it be melatonin withdrawal? Tossed in bed until about 6 when I got up (and promptly felt really sleepy, ironically). Dogs. My right arm seems to get stronger daily as I throw that pretty heavy rubber ball across the field. Monica appears to /almost/ always catch the ball, though Estrela does manage to snatch it here and again. Funny how twins can be so different. Olivia is quite recovered now (and ready to get in trouble again) and her fur is looking beautiful again. However, all that is about to change (hopefully for only a week), for on thursday they get the knife.
  • Did five laps at the russian roulette loop and even crashed once (so did Johan though). That downhill is so murderous -- really deep ruts criss-crossed all the way down the mountain, and choose the wrong rut and you may find yourself in a world of pain. You usually choose the wrong rut the first time down, too. The uphill is tricky but really good practice. Keep those wheels spinning and you'll cut it, but keeping them spinning requires a large heart.
  • Man, punching in these staff reviews is hard work. Two hours for seven. Another hour for the next four. Another hour for the last two. Whew. I have two left, but they are less pressing and at least my entire team is addressed. There's lots of work to be done there.
  • Redid the setup to grab LP code to my box. Isn't baz fun? If only you knew the setup process involved, you would understand why it took about 1.5 hours to get it all.
  • And today, because I felt particularly evil, I denied friendship to all Orkut people that had been bothering me about it. Sorry, I'm only your friend if I am comfortable asking you if I can stay at your place for a night. Well, at least I tried denying all of them, but try clicking on the "No" button 100 times and counting how many times Orkut blows up. It's a joke.
  • My Phillips home-theater-enabled receiver arrived! Lots of fumbling with speakers and wires throughout the night, but in the end my Neuros roared true. The one true noise! I'm in for a world of fun from now on -- music makes the heart brave.
09.05.2005 Hungry but happy
  • Woke up still a bit sleepy but nevertheless refreshed. Did dag control, and then a nice one-hour ride on the road (Johan had to `rest'). Called my parents as I huffed up the Liquigas `mountain' (though I guess people who have never seen mountains may think that!) They just finished opening a new store in Brasilia last week and I figure they are still a bit dazed from all the sleepless nights and overtime; I am planning to visit in a couple of weeks when Leo's wedding (yes, one more strike) happens in Brasilia. Weddings. At least this one is a Jewish wedding.
  • Two meetings in the morning, some email catchup, some IRC discussion on #launchpad, minor office reorganization, diary control and rushed off to lunch. Yes, Chinese. Is there anywhere else?
  • Cleaned up the mailman queue, another meeting, more launchpad IRC and email discussion, cleaned up email (including annoying bits and pieces I never seem to get around to). My email backlog is at the moment 381 messages, but it is improving, if rather slowly. At least daily mail is under control.
  • Worked on LP staff reviews, with SteveA for two very long phone sessions. I thought the staff reviews were fun, but the questions were difficult to adapt to everyone and, well, reviews are never entirely fair, are they?
  • Found out that buying an Apple keyboard and mouse on costs something like 5 times less than buying at a store here in Brazil. Maybe I shouldn't have cheapskated and bought one in Sydney. Sigh.
  • I've come to appreciate that companies are like rickety old space ships -- they fly, but they make all sorts of weird noises, and 70% of the vessel doesn't really work as originally intended.
08.05.2005 The Phantom of the Opera
  • Stayed in São Paulo overnight (stay courtesy of the one and only Bruno Trevisan, the man and parent himself). Well, overnight is a way of putting sleeping at 5am, waking up at 6, 7, 8:30 and then 9:30 when my beeper beeped me with news of an added 8000 miles to my Smiles account. I can probably visit a low-flying satellite by now.
  • Michy and Suzy and Claudinha Daltro and Johan and Xuxu and Betinho and I actually managed to go to the Phantom of the Opera; Xuxu arrived at the last-second and almost had to wait outside (for 20 minutes, but still). It was at Teatro Abril, and we had the /last/ places of /the whole theatre/. I'm not complaining, but it would be a big plus to see the expressions on the actors' faces, you know? The sound is quite spectacular, actually -- real orchestras are something else -- and the visuals of the Opera are nothing short of breathtaking. I didn't even think we /did/ that sort of thing here in Brazil, but I take that back.
  • On the theme of weird coincidences, Michy managed to run into her ex-boyfriend in a [not-so-random] restaurant in São Paulo, during mother's day lunch (though we had no mother present!). I mean, the city has about 20 million inhabitants. I haven't seen my ex-girlfriend /once/ over the last 4 years or so. There is no significance to any of this, but then again, neither is there to any of life, is there?
  • Slept from the bus station in São Paulo to the main turnoff for São Carlos, dragged myself home and then slept a lot more. Johan had to ride back to his place from mine, and I didn't envy him there..
07.05.2005 She lost control again
  • Johan and I hit the trails for a one-hour mountain bike ride at UFSCar this morning, after only about 4h of sleep. The great Warren Zevon said `I'll rest when I'm dead', and I am with him all the way. Well, except that he's dead. Anyway, it was only for a couple of laps on the usual forest track, just doing slow uphills, small jumps and the fat downhill (though not as fat because, alas, the KHS doesn't have the SID installed yet -- but just you wait). Ah, dear diary, I forgot to say that Johan had a pretty spectacular crash and is missing skin on palms (note 1: buy gloves) and on elbow (note 2: girls dig those) but is still a happy and brave turnip. Mountain biking is a real sport.
  • Had a great (for me!) meeting at Async, talked about changes, plans for this year, projects that are doing well, projects that are doing poorly, and did a roundup of all the major open issues with everyone. This has been a very interesting year; I wonder what surprises it will still have in store for me.
  • Almost lost a shoe riding down to have lunch at Chinese. Ran back and found it where I dropped it, right in front of Async. No, I wasn't wearing it. Every time something like that happens I remember the time I forgot my sweater on the school fence at Linden Park, Adelaide. It was night-time when I realized it, and my mom and I drove back to school kind of half-heartedly (I had probably already been told off enough for it), only to find it exactly where I left it. What a country.
  • Bussed with Johan out some 3h to São Paulo, and met up with Michy and Suzy and Xuxu in front of the theatre. No, we didn't make it in, but I tell you, it was pure luck, for a couple of hours later, Suzy gave up on the night (citing exaustion, imagine that) and Johan and I hit the #1 club in the world.
  • Yes. Madame Satâ. If you've never been there, you probably know better. It's a bizarre little soul-crushing venue, with the weirdest people and the best 80s and 90s punk, gothic, electronica. They played Lucretia, man, and I didn't even request it. That's got to be a perfect night.
06.05.2005 Another first day in the life of
  • We had an internet outage for about 10h today. Should I sue Telefonica? I could argue it cost us serious business..
  • SteveA asks me if all the brazilian education institutes have suggestive logos, based on a single sample at [] -- interesting, but just how scientific is that remark?
  • Did a short 40m road ride today, and I felt /great/! My road bike is nice but still needs to be seriously cleaned up. I have a stack of equipment to load onto the other bikes this weekend, but since I'm off to see Phantom of the Opera, it just might have to wait till monday.
  • Johan is off to Araraquara to try and sort out his visa extension. Meanwhile, his paperwork in spain is still stalled. Oh, some waves today, actually.
  • So one more hit against my bank account -- a certain Kleber posted a DSL subscription on 02.05.2005 with Terra. Phone calls to Terra result in a certain Pereira Campos cancelling the debit, but this is boring. actually refused to deal with the problem until I sent them a BANK STATEMENT and then I just think they've gone too far (wouldn't you?)
  • Did the usual blur of email and fixups and management and laundry here and there. Where did the day go?
  • This is going to be a great year. Went to see The Dead Rocks (and Crazy Legs too) at an old hotel closeby -- their psycho surf music really rocks the system, and it was cool to see all the old-timers and kids enjoying the evening. Even if I did forget to have dinner (offices are just so entertaining, aren't they)
05.05.2005 I miss my infancy
  • Flew back in from Australia yesterday. It was a marathon 30h of vegetarian plane food, airport corridors, red carpet clubs and melatonin. I didn't actually feel it as bad as I felt the way in -- I'm feeling better and better as time passes. Australia touches my heart deep down; as if I felt entirely in touch with the real nature of time as I walk through places I recognize from a quarter of a decade ago. It's something you never learn to completely understand, growing up, and just learning how much the passing of one, five, ten years feels like. Most of all I am sore of missing all the beautiful people I end up meeting when I go there; I feel so comfortable -- it's almost as if it was Brazil. Sara and Jason were the best brothers-in-fact a boy could have, and they just feel so right, so close and intimate; they just click in with me. Jenny and Geoff haven't aged a day in the last 10 years, though they may be all the wiser and still more enjoyable. And meeting Pip (well, really re-meeting her) was a heart-stopping event. I had totally forgotten how much fun a girl can be, and I had actually given up running into anyone as pretty that combined so many qualities.. music, extreme sports, travelling, beautiful honesty, all at once painfully smart and aware and charming. I wish I could freeze these moments in time and live them forever.
12.04.2005 Defrauded
  • So someone via Abril S.A. subscribed to Playboy using my bank account; I now have to call them up complaining. Dialed 08007042112. Adriana Viotto took my call, and explains that they are being delivered to one Roberto Villaronga Santos, Av. Paulista 1458, São Paulo. I love this. So the dude tells me anyone can subscribe with my bank acccount number to any number of magazines _without_ my signature or password. Pretty cool, eh? My lawyer's going to love this.
  • Someone via _also_ subscribed to a couple of magazines; more calling will be required soon.
  • We tried to play a DVD at the office the other day and were surprised when it refused to play a couple of them. Found out that it's not refusing to play: libdvdcss is just being /very/ slow when reading the DVD. It may be that the DVD is problematic, but just wait it through and it will eventually come up (amazingly enough). Why doesn't libdvdcss cache this work?
  • Also interesting: Ubuntu Hoary has DMA turned off on the DVD player by default. A little hack to hdparm.conf fixes this, and you can enjoy skipless DVD playback from there on. Why isn't this a default?
09.04.2005 We got signal
  • Finally set up a new gigabit switch and a UPS for Anthem. This makes us finally in decent infrastructure capability (well, the switch _could_ use a decent UPS, but that's wishful thinking). The new office is _so_ much more productive! Just waiting for our new desks to be set in and we're in total business. Still some loose ends to tie up but in general it's looking good.
  • Each workstation can sustain now a 10 megabyte/s download from Anthem -- I tested with 4 simultaneously and it worked fine; the switch said it was at 20% utilization which is pretty amazing, and other boxes don't really feel it. I wonder if latency has gone down or not.. actually, when plugged into the gigabit port, the latency is a _lot_ higher, and NFS is as slow as a dog. I wonder if gigabit is optimized for larger transfers and throughput in place of latency.. some experimenting is in order.
  • So here is what I found out: booting with UDP NFS, on the Gigabit interface, takes a standard machine 2:17. Booting with TCP takes 1:22. Booting with UDP on the fast port takes 1:18, and with TCP takes 1:20. I guess we can try running with TCP over Gigabit (since it's statistically equivalent to the fast ethernet runs), but if it's slow under normal operation, we need some more tweaking in order to understand what's wrong.
  • Bought gifts for Vine's birthday party with Johan. We had some fun just choosing, but I lamented that we didn't really have any Lego I wanted to buy (and you know, I really like little puzzles).
  • Finally built a cable for my Neuros to charge with my laptop charger. Unfortunately, it appears to only be lasting about 1h :-( Ah, well, at least it sort of works.
31.03.2005 Everything's new
  • We moved Async to a new, spacious, comfy and productive new office. Of course this takes lots of poking and adjusting, but it's getting there and tomorrow we'll try and get some of the final bits of furniture in. This is so cool!
  • Part of the move involved moving Celso's into our infrastructure, since they are sharing the office with us. Part of this involved some simple Apache hacks. Bear with me.
  • Part 1: redirecting to https from an http site. This is remarkably simple; it requires only mod_ssl and then something like:
         Redirect permanent / []
  • Part 2: redirecting to a site on the internal network. Again, this is pretty trivial, and requires almost no changes to configuration on the internal box.
         ProxyRequests Off
         ProxyPass / []
         ProxyPassReverse / []
    The only tricky part is realizing that the internal requests go through with the internal hostname (so the internal box gets a
    header, for instance). A bit of ethereal helped me discover that part, though.
  • I think I brought my Neuros back from the dead! Charging it with 12VDC as we speak, ah, the fun. 5V is a no go, though.
10.03.2005 I am sick
  • Ugh, still sick with the Norwegian Influenza. Named so because Peter and I caught it from a group of rogue norwegians that hung out at our mountain cabins in the Wapta traverse.
  • Did a flurry of email catchup, meetings, reports and house-moving-procedure. I'm at my best when I'm relating to people, at my worst when I need to do sit-down concentrated work, it seems. Why?
  • Wanna know what voltage they use in Iceland? []
  • Kick postfix. The default is not to enable SMTP AUTH PLAIN which is fine by me, but to turn off the default, how do you do it?
     smtp_sasl_security_options = 
    Right. Set an option empty to turn off defaults. How annoying.
09.03.2005 I am a bad blogger
  • I can't seem to keep up my writing with my fast-paced life <tm> I can report however that a) I bought a USB cable for my cellphone b) the USB cable has no available Linux drivers as per [] :-(
30.01.2005 Montreal is like your fridge
  • Except colder. I mean, your fridge probably runs at about 3 to 8 below zero; Montreal manages to stay around the -20s consistently. At least they use Celsius.
  • I'm counting the days to be down somewhere warmer; in particular because it could mean Fabia could pop down to the airport and make me smile for a week. She's been so great this year, it's warmed my heart. So remember, South America, South Africa, just keep me south of the hemisphere in January.
  • Fabia also tells me that Vine, amazing, has already put up the whole Lego robot I bought for him. The scary part is that this robot, well, I had planned for it to be something we kept for a year or two given he's still 3 years under the nominal age on the box; we ended up giving up on hiding it but man, he drilled right through it. So now I need to think about some sort of harder replacement. Maybe two. Luckily Luma hasn't tackled her gifts with the same intent to destroy or I'd be in boiling water.
  • Skipped at the local sports store and just gawked at all the gore-tex and other goodies they have there. Still need to skip there tomorrow and get some stuff for Fabia (brazilians don't often have snow-proof clothing in their closets, you know?). And the Lego. And something special for Luma. And another book for Michy. And, wha, where's that bank statement again? Ooof.
  • Ah, I put up a new directory with some pictures of Canada. Most of them are for UI we're hacking up for Launchpad, and therefore it sports the great mpt or the amazing BradB or some sheets on our all-star amazing flipchart (that cost about as much as a small pacific island might cost, but that's the first world for you): []
  • Ion and Gnome, a match made in heaven? []
20.01.2005 4h later
  • I woke up, walked down to the office. Renata ran into me on the way down and decided I was worth giving a ride to.
  • Got a Canadian Visa form filled out (ugh).
  • Lots of phone calls ensued. Nothing much actually happened during them (well, I lie) but in the end, it looks like I'm making some progress. Somewhere.
19.01.2005 It's always fun to be back
  • Got china CXS access sorted out, finally. Hammered it out with Moin with André into the wee hours, but in the end an example was set up. I hear Moin 1.3.2 is going to do a lot better speed-wise, though.
  • Today I broke them again. Change is hard. Grow up.
18.01.2005 Today
  • I mended my ventricules.
12.01.2005 Phat phamily
  • Thomas pointed out that gst-properties allows you to configure the default sink used by rhythmbox, and the fact that I was using ESD was what was causing crappy audio output. I chalk one up for Thomas!
  • Email and phone conference and RSI-provoking list editing.
  • Across the Atlantic once again. See you all on the other side.
07.01.2005 Chaos ensues
  • Morning erupts into a series of meetings, email, negotiations and delays. We get the Front Garden initially set up, but I want it redone..
06.01.2005 Keeping up
  • 7:50 wake up
  • 40 minute fartlek run around the city
  • 10 minutes talking to PJ and Buiu at the gas station
  • 30 minutes clearing up abuse
  • 20 minutes clearing up email
  • 15 minutes entering a CXS bug Brian detected
  • 30 minutes of more email backlog and communication
  • 1.5 hours of email tool hacking and sorting
  • 15 minutes of phone call to Mark
  • 1 hour of lunch (zzzhinese!)
  • 1 hour of renewing my driver's license (how annoying; because I went 40 days in advance instead of 30 it will only be valid for 4 years instead of the usual 5).
  • Lost track in the afternoon. It was a blur of meetings, work, scheduling, nudging and generally getting hungrier and hungrier. But in the end, I CONQUER! (self-esteem boost thing going on there)
05.01.2005 Skip a day, live a day
  • Did my keysigning duties from Mataro, using a fixed-up script Salgado fixed for us.
  • It's been raining non-stop for 3 days. I believe it will go on raining for another 5 or so. Wow.
  • Peter has invited me and I will be doing a week-long ski tour in Canada in February: [] has details on the traverse and [] has some scenery. Fun!
  • Late-night chore sorting out an upgrade from [] -- essentially, hitting the ftp server for all updates. Then it's a mad dash to find out where to place all these updates!
  • Assalamualaikum, In the name of Allah the Beneficent; the Merciful,the Master of the day of Judgement , I greet you in the Name of Allah, the Beneficent, the Merciful ?. To whom All the Praise (HQ; 31:26; 17:111); and the most Beautiful Names (HQ: 7:180; 17:110; 20:8; 59:24) belongs.
  • I am formally Miguel Marcos Llera from Cuba.I was born into a strong and devoted catholic family.All through my life i have been doing business and i was into gold mining and selling.I met our creator and the meciful one Almigthy Allah when i was having a business deal with one of my partners from U.A.E and from the day i was given the Islamic bath(Tawheed) my name changed to Al Ahli Usman.
  • On 10th Feburary 2004 myself,family and my business partner took a flight from kish to sharjah and we flew kish airline.We had a plane crash and all members of my family including my friend lost thier lives.I give thanks to Allah that i am one of the lucky ones that survived the crash.I had to return to my home town in Cuba and i am now left with my relatives to take care of me. Owing to the fact that my relatives knows i have reverted to islam,they have left me to suffer in pain and what disturbs me most is stroke that i have.I have developed paralyses from my waist region downward now.But thanks to Allah,that He does what He pleases (HQ: The Great Doer of what He Will. 85:16); and Is never unfair to His Subjects (HQ: Surely Allah Does Not Do Injustice to the weight of an Atom?4: 40)
03.01.2005 The revolution begins burglariously
  • Mako reminded me of how much fun Barcelona really was at []
  • We've started the silent revolution at Async. 2005. 2005. 2005.
  • Dropped off my notebook at the store to see if it can be repaired. Fell in love meanwhile with the Acer's keyboard, and decided that Salgado can have my old notebook if he wants it -- pity the battery life of this one is so short.
02.01.2005 48h into the year..
  • Apart from a best friend announcing his marriage, nothing surprising happened. I slept through a movie. I ripped some CDs. I broke the DVD player on my notebook. I worked.
01.01.2005 It's hard getting that `5' right.
  • Day started, well, yesterday, but the morning ended in a bakery, no, actually, at home in bed. If I can recall correctly. I remember sleeping with a piece of bread in my mouth. Sitting down. I need a .. no, not a holiday. A normal workday!
  • Woke up in the afternoon, went for a walk with the dogs and J. Met up with P. Mascarenhas at the bakery (god damned Guanabara was CLOSED @#!@# wtf is up with that), said hi to BT in RJ over the phone. Technology. More walking, then invited Celso and Janice for a movie night. Hmmm, movie night, movie night. Ah, yes. We watched.. THE GRUDGE.
  • It's actually not that bad; it's pretty damned scary to be honest. It has a lot of Ringu overtones and references, though when it's such a recent movie you might want to say it's a) a ripoff b) representative of how Japanese suspense/horror uses the same themes consistently. Though can't we say that of Western movies in the genre?
  • (less tongue-in-cheek, there is a difference, as Western movies in the genre that *I would respect* have original plots and interesting developments, and that rules out the common garbage we churn out regularly. We? Hey, I don't remember ever having seen a Brazilian horror movie!)
31.12.2004 It's over. Go home.
  • Ran for an hour in the morning. Was hot as hell but it felt good, and the mp3 player proved to be quite a distraction over it.
  • More email catchup. This is such a boring game I think I might just set up imap for myself given the fact that I'll be travelling even more this year..
  • Party night! Started out at Du's parent's house (without Du or Livia, though -- former at beach with Thiago, lucky fool, Livia in SP) where I endured some more `holiday feast menu' (I swear when I grow up my house will have real food for festivities).
  • Ended at a farmhouse closeby São Carlos with the usual ehhh 11 hours of psytrance. It started out rather boring but developed into something almost interesting. Ah well, at least it's over and 2004 is behind us.
  • (Five bucks to the person who picks up the movie reference in today's title! I watched that movie today!)
30.12.2004 The end is the beginning (is the end?)
  • One more year burned by me, and somehow I didn't feel all of it till today. Where did all those hours go? The Indian Ocean, Consave and Fabia and all the rest seem to be rumbling at their foundations. In the final hours of this cycle, I shake a defying fist at moribund 2004.
29.12.2004 Back again
  • I just put down a mortgage for an apartment. A nice one, even. In seven year's time, it may actually be mine, too.
  • Olivia has a skin condition -- again, in her face, lovely as she is. I figure it may really be resulting from depression but how can one psychoanalyze a Boxer? At least some worthwhile tips are at [] -- could it be ringworm, as described at [] -- or something else as per []
28.12.2004 On the road
  • My mother drove us in from Rio de Janeiro, Suzy, Johan, Olimpia and I. We had a nice drive down; stopped by Itatiaia, which was my mother's vacation house during her teenage years (and where we took some nice pictures of the river, even parts of it that I remembered from when I was 12, and my mother cut her foot, though not that badly).
  • Somewhere along the way I decided or remembered that I needed a change, and that courage is what makes it all worth being there for, and so I did. (And no, not a sex change.)
27.12.2004 Rio
  • Did basically nothing out in Rio. Oh, okay, I'll play nice; we did actually watch The Incredibles (not shabby) and walked out to the Arpoador (J and I) and saw Emilia and stayed out at tia Bia's place (brings back the memories) and heard that Beto had something of a fainting spell in Petropolis and cracked his nose and septum and bled half a litre or so and I'm sure other minor and major miracles and catastrophes landed during the 24 hours that made up today.
25.12.2004 Itaipava
  • Is the loveliest place in the world to be when you are surrounded by Grandmother and Crica and the rest of your sundered family. I so do miss them all. Didn't do much in the way of hard work apart from going for a run with my mother, father and Kiko -- and my mother actually took a tumble down a steep descent. No harm intended, no harm occurred, but I did get a dirty t-shirt out of it all. My dad is running so well! I'm getting back in shape.
24.12.2004 Being somewhere else
  • Reminds you of how much you miss being here. Happy Christmas everybody.
23.12.2004 Luck is what you make of it
  • Fast updates from the return to the third world.
  • My apartment was burglarized, but only a DVD player and my stereo were gone -- they were even kind enough to leave
  • One partition (sda8) in one of our raid-5 arrays (md6) was marked as failed this morning -- there was an apparent power "issue" at the office and that may be the reason why -- the server rebooted about 10h ago.
  • I'm off in Rio till Monday, again.
04.12.2004 Out of this world
  • Off to Barcelona. Catch me there!
03.12.2004 And it goes
02.12.2004 The Final Countdown
  • Did a talk at UFSCar to a group of first-year students that knocked off their socks. It was about our profession, Software Engineering, and what I hope they all manage to figure out for the duration of their university course: []
30.11.2004 Wow, where did 2004 go?
29.11.2004 Waking up
  • The first laugh of the day is provided by [] which has an interesting image up, which I've mirrored for posterity here: [] -- most likely it's a hack and will go down, and you don't want to miss out on that chuckle.
  • In a rather strange mood today.
  • Shop mode for gigabit: in order of preference, [] [] [] [] -- and some performance statistics, at [] -- and some newgroup chatter, at []
  • But, all in all, it seems like we're not really in the need for gigE right now. I thought we were, but just looking at the utilization graphs for our local network it becomes clear that typing text files and browsing the web doesn't really load the network that much. Ah well.
28.11.2004 Rainy Sun Day
  • Sysadmin's Unixersal Translator: [] is a cool tool for finding out what differs between Unix versions.
  • Did reviews and reviews and reviews. Did some office chores and updating of our family tree. Home to see Blue Velvet, finally!
  • Didn't watch it -- it rained when I was leaving and I stayed in to do some mail hacking.
23.11.2004 The days are just PACKED
22.11.2004 Lots and lots and uhhh
  • Lots of changes are happening at Async this week. We're getting some shade for the front section of the office, and personal storage boxes so people can keep their stuff together (and those dustcovers in one place!)
  • I'm getting so annoyed at Firefox in Ion that I decided to try and at least find out what's wrong with it. I found out :-) [] and [] seem to track the issue
  • Found this interesting blog with a related entry -- [] -- and the guy seems to be just like me! He rants on about everything he tries to sort out, he's installing Dovecot, he's evaluating Ubuntu, jesus, he uses Ion.
  • Ran into something really cool -- disknag, a per-user virtual quota manager, that basically complains when users are over their quota. I need to get this thing installed here! []
  • Priceless:
     From  Tue Nov 23 04:42:06 2004
     Subject: Oh God it's
     Folder: spam
19.11.2004 Fun and Games
  • Laugh at []
  • Gave the dogs a bath. They needed it, and the tick infestation has been really bad, so I'm waiting for two days before Frontlining them. Read some threads on Frontline and Advantage, and something called Program (alas they never seem to have fleas so it appears we won't be able to spend any money there): []
18.11.2004 More SSL
  • Day two in the way for SSL certificates. Yesterday I spend a good 3 hours fighing with openssl, just to be undone because I couldn't get the right serial number, or the wrong SSL version. So annoying. So today I'm going to start by reading about my problem thoroughly instead of just trying to wing it.
  • First thing is weeding out docs you *don't* want. For instance [] describes generating self-signed certificates, but only version 1 certs and not using our own CA. A cheap-ass copy of the currently missing How SSL Works Netscape document is at [] but it doesn't cover CAs either. So hum hum, I wonder how CAs fit into the picture wrt self-signed certificates. Time to find out.
  • Ah, looks interesting. Two nice docs cover self-signed and CA-signed certs: [] and [] -- and here's a simpler CA-howto [] There's even a book chapter by Chris Shiflett up at []
  • I discover the script /usr/share/ssl/misc/CA and my hope for a wing-it solution grows once again. Let's see here.
  • Robert Collins and Brian Murrell both helped confirm my suspicions: there are two slightly different things here. One is self-signing a single certificate you generated; another is generating a CA certificate and then signing a website certificate with it. Robert said something interesting: "a CA is essentially persistent metadata, a collection of revocation certs, and a keypair." It turns out that the reason my self-signed certificates aren't working as expected is really because of technicalities in openssl, and the fact that it's harder to get things right when self-signing because I don't have the CA persistent metadata (so serials get mixed up, for instance). In other words, it doesn't *really* matter if you sign with a CA or not -- the issue is that signing with a CA makes it easier to get all the data you need right.
  • Some more futzing with the CA script I found and it generates a legal certificate. I nearly cry! Comparing to Async's certificate, however, I realize that this one appears to be issued by the actual site, and not by the CA I'm trying to create. Still, it works -- and the right version and metadata, too. Oh, wait a minute. It worked *once* -- and why? Serial number zero. Gah.
  • And, after a LOT of sweating and typing, I produce a *standalone* set of scripts that can generate SSL certificates that are signed by your own CA. Seriously! It's *not* rocket science, but I am pretty sure it's not something that you can get right the first two hours you sit down to do it. I am SO happy this worked out!
  • The final bits were touch-and-go there -- I was using the wrong x509v3 options (I used the options for a CA by mistake) and Firefox told me the cert was invalid! Insisting a bit based on the fact that the CXS bugzilla certificate worked helped me out, of course.
  • Finally, Apache's documentation on ssl (!) is probably the clearest practical guide of them all, and I wish I had fallen here earlier: []
  • As a cherry on the pie, put the CA certificate available through the website; this is just placing the .pem file in a web-accessible directory, publishing the URL and adding
     AddType application/x-x509-ca-cert .pem .crt
    to the Apache config. No more warning dialogs!
17.11.2004 Reassemblage
  • In one fell swoop, swapped Anthem's memory for some new ECC bits, and added the last hard drive into the RAID-1/RAID-5 arrays that were set up last week. We're almost gold, bar one processor!
  • We're having trouble running Warty as a diskless box -- locale-related trouble that is. We're seeing something similar to [] -- essentially, mmap()ing this file is failing (for some unknown reason) and there are no directories to fall back onto. I copied some older directories in there and it works for now..
  • Discovered mutt's new assumed_charset option. This is what makes mutt assume that 7-bit-apparent content is really latin-1 stuff. Oh, the fun.
  • Discovered xchat-2 uses Ctrl-PageUp and Ctrl-PageDn to change channels -- just like Firefox! This is one massively welcome change. The Alt-n keybindings suck, but that's an easy change -- just hack the keyboard properties.
  • The next sucky thing is X-Chat's horrific new color scheme. Thankfully that's a FAQ, [] saves us, but don't you find it horrific when you discover there are no system-wide files to change to get everybody to enjoy the Right Theme? This stuff is hardcoded in the C code!
  • Finally, we needed to sort out emacs keybindings for Gnome -- I mean, how can one live in Firefox without ctrl-U and friends? Luckily, that's an easier fix:
     include "/usr/share/themes/Emacs/gtk-2.0-key/gtkrc"
     gtk-key-theme-name = "Emacs"
    in your ~/.gtkrc-2.0 fixes things. I wonder if I want to do that system-wide to make sure everybody here has the same sort of experience. I guess yes :-) and hack the /etc/gtk-2.0/gtkrc file into shape. Hints came from [] and the location of the system-wide gtkrc file, from []
  • Finally, discovered xchat's completion_amount feature to control how nick tab completion behaves -- see [] for details
  • Wow. Bart Decrem has started something called []
  • Did some certification generation. Learned in the process that Redhat allows you to to hack /usr/share/ssl/openssl.cnf to get the default parameters for creating new certificates right. Pulled hair out of serial which apparently can't be set in the version of openssl we have at the server, ugh. Hmmm, digging more, it appears that we really want to be generating version 3 SSL certs and not pooey old version 1. It doesn't help that the SSL-Redhat howto does NOT mention this, and offers commands that only generate version 1 certificates.
11.11.2004 Off to Belém!
10.11.2004 Formailing
  • Been investigating a way to remove all messages that are in mail folder A from email folder B. The solution I've worked up is pretty simple:
     rm -f idcache
     formail -D 100000 idcache -s < folder_A > /dev/null
     # idcache is reused
     formail -D 100000 idcache -s < folder_B > folder_B_clean
     rm idcache
    which of course works well. However it has a slight noose and I hadn't realized this previously: the idcache file, when reused in the folder_B process, will purge duplicated messages in folder_B. This is of course mostly great and welcome; however, it has one drawback which I never had realized: if you CC: multiple parties, the mailing list email has the *same* Message-ID as the originating email. If you store the mailing list email in the same folder as the CC:ed email recipient, well, one of them gets nuked in the process. It's basically just removing a duplicated message, but this means you can't rely on folder_B_clean telling you if your message managed to hit the mailing list or not.
  • I had initially thought this was a problem with formail's handling of MIME because of a trick MIME NextPart header in the email; it's not, although formail does indeed lack MIME-splitting capabilities: [] -- the hint was actually searching for the additional missing Message-IDs in the original folder.
  • And the additional hints in [] provide me with way to lock a mailbox file from a shell script -- precisely what I need here. Procmail's lockfile works like a jiffy!
09.11.2004 HD+2
  • Discovered sfdisk -d and the magic that automated partitioning can be. I had no idea that sfdisk was so easily scriptable or I would long have backed up my raid partition tables using it -- creating complex raid arrays is a jiffy!
  • [] is the perfect demonstration of what I spent the night working on. This is so great!
  • DNS queries and responses are going *really* slow today, and bind8 was timing out on us. The advice in [] was invaluable.
  • There's actually a hotspot listed at Viracopos airport, in Campinas, imagine that: []
08.11.2004 503
  • Magic number of the day.
03.11.2004 NO TITLE HERE
  • Hixie pointed me a really cool feature that the W3C is discussing related to web forms: datalist elements! Essentially, we're talking about comboboxes and autocompletion widgets -- read all about it here: []
02.11.2004 sarna
  • Got sar installed on moraine. I had to stop my email processing because, well, it's making the box damned slow and everybody else needs to work. Sar is pretty interesting, though I can't justify running it on anthem; the homepage is at [] and it's not really trivial to find because it's part of sysstat. Oh, it *is* running on anthem. tee hee.
  • For future reference, the cards Celso and Daniel bought last month were [] and [] -- and remember, you *don't* want the made in china variant.
  • To list all databases in mysql, use "mysqlshow" -- thanks Tiago.
  • Lifeless, Arch Wonder a.k.a. Robert Collins, teaches me "tla star-merge -t" and I go MAD! This is *exactly* what I wanted, it has been so long since I've been happy with an arch feature and this, well, is exactly what I want: INLINE CONFLICT MARKERS! That's awesome!
  • Was locked out of an SSL IRC server today, and couldn't figure out why -- Xchat would just slam and retry non-stop.
     --- Looking up
     --- Connecting to ( port 6667..
     --- Connection failed. Error: (336130315) error:1408F10B:
         SSL routines:SSL3_GET_RECORD:wrong version number
    Guess what it was?
     kiko@manonegra:~$ telnet 994
     Connected to
     Escape character is '^]'.
     ERROR :Trying to reconnect too fast.
     Connection closed by foreign host.
    Indeed, it seems that this error message is what openssl returns when it doesn't fine anything resembling an SSL negotiation header. Can't we be smarter about these things?
01.11.2004 SCSI is king
  • On the SCSI versus EIDE debate,
    Efficiency: The ATA devices lack the intelligence to perform command queuing as well as their SCSI counterparts which can queue up to 256 commands per logical unit. SCSI hard disk drives aimed at the extreme performance server market have had a lot of research and development time on optimizing seek patterns and rescheduling commands to minimize seek times and maximize throughput. This may not be evident by looking at desktop benchmarks but under heavy server loads, this is evident. Also, SCSI hard disk drives generally tend to be designed to work well in RAID-systems where I/O load is spread across multiple drives.
    [] []
    The intelligence of the SCSI controller and protocol allows some nifty optimizations. One of the most important is tagged command queuing; a device can absorb a number of commands and execute them in a different order than they were issued.

    The operating sytem will do the same to some extent: if you need to access a harddisk on, say, cylinder 0, 1000, and 500, it doesn't take many CPU cycles to figure out that you'd better swap the last two. But a device can always do a better job of it because it has complete information on its own internal structure and current state. Many devices aren't all that intelligent about it in practice, though. The effects are difficult to quantify but usually small.

31.10.2004 I discover
  • IMAP. And .mailboxlist. Wow, that's such a useful thing to know about -- when your IMAP server is wedged, hack it!
  • I learned quite a lot about email folder processing today; it's amazingly neat how formail, procmail and friends work together. I've also done some analysis of grepmail and a few mail scripts that assemble and reassemble mailboxes.
  • Some tidbits on the Google File System that Peter pointed out to me: [] []
  • That the site [] is actually pretty cool for tracking down bad suppliers on the internet; I was considering [] but they have *such* a bad rap I just decided not to. Internet vendettas are fun.
  • I get so much spam blocked that blockreport really isn't cutting it; I now have a script that makes a statistic of sender emails that were blocked, just for fun. | bin/blockreport-names
27.10.2004 Fame?
  • Gustavo and I made it into Python 2.4 with our pep-numeric fix: []
  • A Bonnie run on our current RAID-1 setup with the single Xeon:
            ------Sequential Output------ --Sequential Input- --Random-
            -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
       Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
      1100M 26435  91 52518  16 15618   4 23001  67 40422   3 560.7   0
            ------Sequential Create------ --------Random Create--------
            -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
      files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
         16  3316  97 +++++ +++ +++++ +++  3546  99 +++++ +++  8182  94
  • You can contrast it with the old run I did over a year ago (back in the entry for 29.06.2003):
     -------Sequential Output-------- ---Sequential Input-- --Random--
     -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --Seeks---
     K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU /sec %CPU
     11710 93.0 23140 16.6 13515  6.5 10569 82.7 40882 11.1 717.5  3.9
  • In short, I/O on this new box looks really fast.
24.10.2004 ZEON
  • We now have a Dual Xeon 2.8 server, and it *screams*. I'm setting up the RAID-5 this week too. Hmmm. But the processors have different steppings :-(
  • One has the martking SL72F on it, which leads me to [] which indicates that the core stepping is M0.
  • The other, get this, has a BOX labeled SL72F; I was convinced both are the same, but noooo, the processor is marked SL6NS, which brings me to [] -- IOW, core stepping C1.
  • Hum. The specification update at [] indeed marks us with an X saying M0 and C1 have "issues".
  • Interestingly enough, the box *does* indicate the stepping number (I just didn't know how to read it; the box's barcode includes an order code, and after that the stepping number). I am still unsure however how this relates to the stepping that /proc/cpuinfo reports; it says 5 for the first processor and 7 for the second.
  • I might want to look into updating the server board (a SE7501BR2 as per [] BIOS when I get around to it; there are quite a few microcode updates listed at []
  • OTOH, some sites can't access [bugzilla.mozilla.or] and [] explains why.
  • Keeping an eye on the hardware: []
  • Discovered the xmledit vim plugin at [] via Limi, and attempted to find out how it worked.
  • PDF, safe? []
22.10.2004 Cleaning up the house
  • Did some major cleanups in Apache's conf file, moving bits out and into private. I'm finding the PAM auth module is pretty cool.
  • Keep an eye out for the Zope3 book by srichter at []
21.10.2004 Lapstopping
  • Daniel Debonzi showed me the wonders of powernow_k7 and powernowd and I'm amazed! This is *so* cool to have the CPU frequency change as the box moves, and I suspect I am going to get *really* extended battery life after this. Though ACPI output has gone kinda whacky, hmmm.
  • Finally discovered WTF my notebook wouldn't activate TV out: it requires rebooting with the VGA connector plugged in! That is KILLER -- I was really mortified that I wouldn't be able to use it with projectors, ever. Though S-Video worked, in truth. Uhm, wait up. This Radeon Mobility U1 (apparently the same as an R7500, R9000, IGP 320M?) doesn't seem to actually drive its CRT output when X is run. Argh. A lot of trawling through Google ensues. I imagine the source code is the only place to go at this point: [] -- but maybe, just maybe, this is related: [] -- and maybe this: [] -- and even []
20.10.2004 Campinas?
  • Yeah. And I'm not a notebook-bag-luckier for it either.
  • FINALLY managed to track down the problem with ' + c producing a c with an acute symbol instead of ç (cedilla) in Ubuntu (on my notie). There is a lot of fun and games on the issue: [] [] [] [] [] Put a hack in /etc/X11/Xsession to see if it works.. no. Put it in /etc/profile for now, but there needs to be a better solution.
  • Ah. Salgado found out the right way to fix it: hack /etc/gtk-2.0/gtk.immodules and add an "en" to the list of locales using the module (it's not there by default). Fixed!
  • Christmas gift, most wanted: []
  • And this is why we don't have air conditioning at Async: [] (it's our secret)
17.10.2004 Oh no
  • I've been victimized by the Netgear WG-511: [] Oh, how you might ask? It's a card with Linux support! Well, true. However, it's not completely true. You see, the card that is Made in Taiwan does work perfectly, with the prism54 driver and firmware. But behond, the Made in China card *doesn't* -- and it's the same PCI ID, packaging, PCMCIA identity. I thought I was crazy, but since one of my card works and the other doesn't.. it was actually confirmed by multiple sites: [] [] [] [] [] []
  • Update! I sold it *evil laugh* to a WINDOWS USER! I LOVE YOU JEFF!
  • Update 2: the issue is that the chinese card is a softmac card, which leaves 802.11 management to the driver: []
15.10.2004 Brasilia
  • Ran around on a wild goose chase with BradB, trying to track down a problem with python-apt. Turns out he was trying to install an ancient version from So here I go apt-get sourcing away something. To be complete, BradB is on OS X, and I want to get python-apt running there half for the fun of it, since it's an evil C++ Python extension. I grabbed source code for him, and then the fun started. Apparently it bombs out for some reason or other. So I ask for an SSH account. One hour later..
     (gdb) where
     #0  0x90034728 in semaphore_wait_trap ()
     #1  0x90009c18 in pthread_mutex_lock ()
     #2  0x0081e208 in std::locale::classic() ()
     #3  0x0081da64 in std::locale::locale() ()
     #4  0x0080bc44 in std::basic_filebuf>
         ::basic_filebuf(__sFILE*, std::_Ios_Openmode, int) ()
     #5  0x00819630 in std::ios_base::Init::_S_ios_create(bool) ()
     #6  0x008199b4 in std::ios_base::Init::Init() ()
     #7  0x00849188 in __static_initialization_and_destruction_0(int, int) ()
     #8  0x8fe16350 in __dyld_call_module_initializers_for_library ()
     #9  0x8fe160e4 in __dyld_call_module_initializers ()
    It hangs inside libstdc++. And *that's* after hours tripping up includes and libraries. So I file a bug and quit. Enjoy: []
  • Backup Lesson #1: know how to restore thee backups.
  • Backup Lesson #2: remember to use screen to run restores.
  • Backup Lesson #3: @#$@#!@#! cpio doesn't do things recursively, so be explicit. This means:
     root@gasolinux:/# mt-st -f /dev/st0 setblk 32768
     root@gasolinux:/# cpio -vVid '/home/evandro/*' 
     and not just '/home/evandro/'. 
  • Backup Lesson #4: try to avoid making blunders like the above. These backup things, they take 3 hours every time you need to think about the tape drive, let alone restore somebody's home directory. Don't believe me?
     real    173m48.619s
     user    1m50.530s
     sys     9m33.380s
14.10.2004 Busy
  • Too busy to write much up, but finally understood why my cpio extractions were failing. It's silly:
     /bin/cpio -v --no-absolute-filenames -d --extract --format=crc
               --block-size=64 /home/evandro/* < /dev/st0
    What's wrong with that picture? *almost* nothing.. except for the fact that the globbing pattern /home/evandro is *unquoted*! This actually works, you see, because the shell expands it successfully, but cpio just goes and clobbers the original files with versions in the archive. It's actually more fun than obvious here because it actually prints a number of blocks read message, and you sit around confused thinking wtf did those bits go to. Answer's easy -- you just overwrote whatever was there!
  • Apparently from [] cpio extracts relative to your current directory, too, so I should be careful about where I'm extracting this. Unfortunately this process takes hours on our current DAT and, well, the backup for tonight is already running. On the wrong tape :-(
29.09.2004 ENGLAND
  • And I guess I need to learn about SQL joins one day. Maybe tonight. Here's help: [] and []
  • Celso and Daniel are the guys to travel with: [] -- lots of hard work but lots of laughs and fun with everything under the sun. And 400 lines of code per day!
  • XULRunner! []
  • I should really consider subscribing to ACM Queue -- if only I could read it. Read up a really interesting interview with Jim Gray (of Microsoft) here [] where he discusses what he things is the future of storage. Of note is that he thinks that processing is going to gradually migrate into the "peripherals", so disk drives will have gig-level CPUs. Sounds like what's happening to video GPUs, doesn't it?
  • Learned about [] -- Cooperative Bug Isolation, a project that does something like "talkback-enabled builds" for a subset of GNOME applications to collect crash data and study it to improve quality. Pretty interesting stuff all in all.
  • For cross-site authentication, do we need [] -- ?
  • [] is weird, but they're still putting it into Ubuntu. :-)
  • Neat-o subversion change to use FSFS is live in 1.1: []
25.09.2004 Shorts
  • A thread to watch (Snort and Passive Fingerprinting integration!) []
  • Started paying my house mortgage plan, and bought a new drivetrain for the ole Giant ATX who is chain-skipping on the crank.
21.09.2004 Boom
  • Minutes after chiding Lamont for being offline all the time because his internet connection is down, Async is hit with connectivity problems. A router four hops down is dropping 80% of our packets. Just got back in, thank goodness -- just five minutes.
  • Updated cups at Anthem to a backport. Minor snag in the backport required an updated ucf (luckily I found [] that saved my bacon). Better printing hopefully!
  • Juliana Aravechia's and Vaner's wedding party. The real wedding was a while back, private and enjoyed by a select party. The party was killer, with select tunes rocking us out into the night. It was a lot of damned fun to see Tangerina, Cegonha and Renata together after quite a long while. Minor incident involving Cegonha's uncle. Rode back to São Carlos with Cegonha and Renata, with a temporary stopover in Araraquara to pick up some sort of document for Renata. Turns out Cegonha is living and working in Rio Claro of all places. Man, I'm out of touch with the world.
17.09.2004 Argh
  • Discovered dlocate.
  • New workstation at the office (so people can actually work without butting heads). It has an NForce2 chipset, which means.. FORCEDETH! Easy peasy: [] has PXE images for it, and 2.4.27 has forcedeth driver support out of the box, so the box is up (after some fidgeting because I needed to upgrade mknbi-linux and we all know that's a lot of fun). 2.4.27 booted up everywhere fine, the GPL is maintained, and I'm a happy camper.
  • Fixed snort. Apparently the only thing wrong with it was an incorrect $HOME_NET or -h option in the commandline. It's hard to test because you need to wait for events to show up (the symptom of my problem was no events ever appeared in my logs, or only bizarre ones that I didn't care for). I don't know, I should have backed up /etc/snort/ before installing snort-pgsql..
15.09.2004 Today I
  • Lost 70% of all the clothes I own (don't ask).
  • Worked with Daniel and Celso on Canonical open tasks.
  • Signed a contract to buy a house in a lottery-style mortage plan.
  • Arranged more UK tickets.
  • Participated in a Canonical meeting about LP.
  • Helped Limi with the Ubuntu and Canonical pages by providing some anti-aliased PNGs.
  • Had lunch at Mommy Nature with BT and Adriana.
  • Signed a change to Async's social contract assigning ownership to me alone for 180 days.
  • Provided my accountant with details for hiring Johan.
  • Paid taxes due on the 15th.
  • Guided Nando into more of how GNUcash works, and provided him with a tasklist of things he can do instead of me.
  • Assisted Breno into getting snort working with PostgreSQL (you need a special Debian binary package!) and configuring it properly (you also need ident installed and snort.conf needs to be set up correctly).
  • Explained to Breno about HTTP/1.0's Host: header.
  • Assisted Tiago and Manduca into more merging and hacking on Bugzilla.
  • Spoke to Peter about a potential notification system that via bugzilla-submit could automatically process replies to whine-email.
  • Updated the CAIS wiki pages a fair bit.
  • Spoke to a very distant cousin (about 10 levels off on my genealogical tree) for half an hour about the Robottoms and their bizarre, unique history.
  • Reviewed six Consave bugs.
14.09.2004 Some people are slow
  • After years of me yelling about this problem, somebody has something interesting to say about server-based client installation deployment: [] It's actually funny because Havoc's PDF at [] contains some of the phrases I used in our diskless whitepaper.
13.09.2004 Managers need Calendars
  • Some howtos on setting up calendars and DAV servers using Sunbird/MozCalendar: [] and []
  • To get X-Chat to use a channel password, you supply a space and the password after the channel name. However, in the server auto-join field, you need to provide two space-separated lists of comma-separated channels and password, respectively. Say wha?
     #bar,#foo noogie,boogie
    will get you into #bar with password noogie, #foo with password boogie.
  • Alguma informação sobre a contratação de estrangeiros no Brasil, graças a uma apresentação da Amcham: []
12.09.2004 Burn your SUEXEC
  • Man, I just spent 2 hours tracking down an apache-related problem that turned out to be the result of Debian installing Apache2 with suexec enabled by default. I am *so* mad at not having looked at /var/log/suexec.log before, but I was honestly *sure* it was a configuration problem and (suexec not being present in the mods_enabled/ directory) nothing indicated that it could have been to blame. It really sucks that error_log is so concise in reporting what exactly is wrong:
     [Sun Sep 12 16:08:25 2004] [error] [client] Premature end of
         script headers: foo.cgi, referer: [localhost]
    and the fact that the *same* configuration works for a DocumentRoot-based directory but not for userdir is really a kick in the guts. Only when I looked at suexec.log could I see:
     [2004-09-12 16:22:13]: uid: (1000/kiko) gid: (1000/1000) cmd: foo.cgi
     [2004-09-12 16:22:13]: cannot get docroot information (/home/kiko)
    spewing all over the place. The part that kicks me the most is that disabling suexec requires moving the suexec wrapper to another directory -- what's wrong with a configuration directive, for heaven's sake?
  • Got my Netgear MA111 USB device working in about 5 minutes. It was a matter of apt-getting linux-wlan-ng and setting up /etc/network/interfaces to set wlan0 up -- and that was it. My real surprise was with the quality of the connection -- my 11g WG511 works on and off (flaky but in practice good enough) when I'm a bit away from the AP, but this little USB gadget is rock-solid and actually 11b's its ass -- at least on my HP notebook.
  • Snort has a surprise for me today:
      87.35   511  WEB-MISC http directory traversal (1:1113:4)
    I wonder what the hell that means, to be honest.
  • Found the pump adapter I was looking for -- at [] -- but shipping to Brazil is like US$ 43,00! That's MAD. But wait, there's more: []
  • RSS 2.0 central: [] (after trolling through places trying to find out what was the deal about pubDate and RSS 0.91).
  • Watched Till Human Voices Wake Us. Rather liked it, though I wish the story was a little less contrived.
  • Crashy gstreamer turned out to be an ASF file being decoded. Was crashing inside gst_asf_demux_get_type.
  • Crossroads in Bugzilla UI. Perhaps related: I have a hypothesis that says that Phoenix was started because the Mozilla process has a critical defect related to major changes to any component: it is possible for commenters and reviewers in bugs to indefinitely stall any changes on the basis of opinion, without providing hard data or denying the changes explicitly, and there is no way out inside the project without forking. I suppose that's true of any OSS project without a leader with a good knack for UI, but most projects are too small to have UI concerns of any sort beyond what project leaders stipulate, or too large to not have a decent UI team with good guidelines and active enforcement. We are neither here nor there, and we are in need of major UI changes that noone will agree to do piecemeal.
  • Back from SP. Had dinner with Daniel Rolim yesterday, amazingly it's been over 10 years since I'd seen him. Hasn't changed much, though he works in a bank now moving around millions of dollars worth of OPM.
  • Did initial CAIS import.
  • Managed email during the morning.
  • Took dogs for a quick run.
  • Had lunch with cprov and debonzi. Fought it out with the warthogs over Soyuz features and progress.
  • Hacked through Consave and Bugzilla reviews.
  • Reviewed a contract for Consave.
  • Printed out a set of pages from [] that discuss Patterns Of Cooperative Interaction, which is a pretty awesome discussion of patterns in communication artifacts.
30.08.2004 At least backup ran
  • Off to Campinas and then São Paulo. Write me if you need me.
29.08.2004 insert title here
  • Neat little introduction to RSS building: []
  • Backup didn't run. Now WTF is up with that. More SCSI blowouts at midnight?
  • Bugzilla hackery fun. Reviews, updates, the works!
28.08.2004 It's Adaptec time again
  • For the past two days we've been getting SCSI device blowups on our 29160. I'm not entirely sure why, so I did what logic tells me to -- first, check the hardware. The terminator seems okay, as do the cables; I disconnected one of the fans that had stopped spinning (thinking it might be doing something funky to the power supply) and kicked it. That was yesterday at 8am. The errors are pretty similar to the ones I've pasted in below:
     Jan  8 21:44:14 anthem kernel:  scsi2:0:3:0: Attempting to queue an ABORT message
     Jan  8 21:44:14 anthem kernel: CDB: 0x12 0x0 0x0 0x0 0x12 0x0
     Jan  8 21:44:14 anthem kernel: scsi2:0:3:0: Command not found
    but of course I can't cut-and-paste them from the console since everything's frozen but trusty alt-sysrq works (for rebooting, of course).
  • Today, 9am, I arrive at the office and the same damned thing -- hung since 12pm last night. So it's the next step: check SCSI drivers (we updated to 2.4.27 not too long ago). Found out that Justin's drivers at [] are at a newer revision (6.3.8) than the version included in 2.4.27 (6.2.28) but unfortunately I'm too clueless about the ChangeLog to understand most of what changed. So cross fingers, recompile and try again. During recompilation I checked that some of the parameters being configured in the driver were a bit extreme and moved them to more moderate numbers.
  • Next thing would be to carefully check pins on the cable, I guess.
  • So something funny happened yesterday with Olivia. We went down to the square we always visit and she ran around with Estrela for a while. There is some construction work going on in the streets in front of the square, and they put up a little deposit shed on the grass in the square. Now Olivia is a Boxer, and boxers are famous for the amount of drool they accumulate in their mouths. Well, so we have Olivia, thirsty and drooling (as usual) sniffing the shed, when all of a sudden the drool on hey face formed a perfect bubble, and floated off her face. She became totally alarmed and barked at it until it popped and then ran across the square to where I was laughing hysterically. This episode is interesting specially because I recall from reading when I was an infant the book E.T. and one of the thoughts of one of the characters involved something similar. Life's funny.
25.08.2004 More junk
  • So our wireless stuff is here, and installed (or rather hodgepodge-installed, since it's still a mess of wiring and tape). It works well, and the Netgear WG511 cards worked perfectly in 11g mode with the prism54 module (and binary drivers, whee), but I am a bit disappointed with the range for the PCMCIA card -- it's not more than 5 meters if I have walls in between AP and card. I suspect the USB device (which is 11b only) has a better range, but I need to check to be sure.
  • Kind-hearted Roman and Victor the crackhead (can there be a greater antithesis?) both made it up Aconcagua during the winter, and survived to tell the tale and become 5-minute sensations in Brazilian news: []
  • My days this week seem to have been a sequence of emails and IRC conversations. I have gotten very little `real work' done, and that is *SO* frustrating. The fact that we are spinning a collection of projects is fun but also very scary and I need to stay focused if we are all to get through 2004 in one piece. This week I need to put an end to this and get back on track.
  • Wrote a massive email on CXS work that was long-leftover. Took me about four hours on and off. The neighbors decided to through this amazingly loud and stupid party and I have no idea how the police haven't been hauled in yet. Estrela is completely out of whack and runs around in circles in the garden non-stop. Thank god for .ogg files.
  • Orkut says:
     You have 1595 unread messages.
    and I don't care. To finish off the day, what happens? ANTHEM SCSI BLOWUP! FEELS LIKE 1983!@#!@!@
23.08.2004 Trinkets
  • Purchased (for Timello) a Linuxant driver for a Conexant PCI Winmodem. While I am in principle against softmodems, I'm not entirely against paying for drivers if there's nowhere else to run. So I'm now supposed to generate a key somehow at [] -- but I haven't actually found out yet. Serves me right for buying stuff without reading.
  • Now all I need to do is to fix up *my* notebook's modem: []
     PCI: 00:08:0: chip 10b9,5457 card 103c,0024 rev 00 class 07,03,00 hdr 00
  • Apparently I'm going to be racing at [] one of these weekends. Wow.
20.08.2004 Saturday Siesta
  • Did a slow bike ride this morning after doing the initial office cleanup.
  • Picked up some old reviews, cleaned up email, found out that adding more memory to my notebook is a mere R$180 -- I'm there on monday!
  • So Jacob Bresciani wrote me about a potential solution to a problem with Samba and CUPS I found a while ago. He suggests:
     Printcap Name = lpstat
    instead of
     Printcap Name = cups
    which we have in there currently -- it's supposed to do an lpstat -v every time the printer shares are requested, instead of reading the printcap file from Cups (which can end up holding a stale list every once in a while). I'll give it a spin in Consave next week.
  • Nice little APT tutorial at []
  • Talked to a Stoq user named Tony over IRC about Stoq2 and where we're going with it.
  • Did some serious work on's Bonsai installation -- the CVS checkin database processing took over two hours, and that's for more than 170,000 files.
  • Spent the afternoon installing Bonsai on This involved filing multiple bugs on the relevant Debian package ([] wrestling with the somewhat obscure configuration, pestering daniels and anholt into helping me with this and that, and discovering (thanks again to anholt) that's CVS repository is actually assembled on top of a number of CVS repositories. Yes, this means there are nested directories with CVSROOTs -- no wonder I was confused initially!
  • An excellent text on SVN's features compared to CVS is up at [] -- it made me want SVN already, imagine that.
18.08.2004 Back from the beach
  • Beach? Hah! That trick title was designed to put off people thinking I am working too much. Did it work?
  • Found a nice site about the brazilian time zones and time legislation: []
  • Ran into an odd problem with mutt and gnupg. While mutt *does* say that it's verified my key fine in the message body:
     gpg: Signature made Fri Aug 20 14:37:56 2004 BRST using DSA key ID 797EBFAB
     gpg: Good signature from "Enrico Zini <>"
    I *sometimes* get in my footer a message that says
     PGP signature could NOT be verified.
    -- haven't been able to find out why, though [] has the same problem as I do described. It only occurs in *some* mail folders -- in others it's fine. OH! Found it out while upgrading to mutt 1.5 -- and it's soooo obvious. The reason it only occurs in certain folders is downright silly -- it's because the actual error means in this situation that it couldn't verify the *whole* message, and do you know why? Because of mailing list footers, of course! These are tacked onto the signed email *after* it's been signed, so it can't really be dealt with. Funny how these things aren't obvious until you spend some time figuring them out.
  • At least I found out that adding
     keyserver-options auto-key-retrieve
    to my .gnupg/gpg.conf provides for less typing, faster downlaods and auto-downloading when mutt tries to view a signed message.
  • Discovered [] and realized it's actually an *awesome* use of a Java applet.
  • Installed mime-support on anthem and finally got mutt to display HTML email even when viewing mail from there.
06.08.2004 Networks
  • Spent four hours trying to track down an idiotic problem with a network. In the end after a lot of tcpdumping (which is interesting because it is bizarrely lagged and only starts tracking packets about 30s after being run) I decided the problem is in somebody else's network. I Hate Fridays.
  • Had a proposal declined -- a Brazilian company, of course. So much harder to do business in your home country, it seems.
02.08.2004 In case you were wondering
  • SWIFT actually stands for Society for Worldwide Interbank Financial Telecommunication. Financial institutions communicate to each other via SWIFT, which is a secured network. Every member of SWIFT will be assigned a SWIFT code, sometime called a BIC code. [] has a lot more information.
  • For instance, the SWIFT code for Citibank NA, New York is CITIUS33. By using its SWIFT code, all parties to the transaction will know who is the bank involved.
  • Hey, PSP sounds actually pretty cool: [] -- could this be the TT-alike thing I've been hoping for?
01.08.2004 Departures and Arrivals
  • Sunday had so many hack attempts and sendmail spam harvest that blockreport blew up, ate up anthem's memory, and had a few critical processes dropped.
  • It's going to be airport time again in one week time -- off to Oxford!
29.07.2004 Landings
  • Landed most of my open changes to Bugzilla and the CXS preview site. Found new ones to bother me :-/
  • [] was finally released as OSS.
  • Hacked around Apache's FilesMatch. It's so interesting to notice the way Apache uses it to check for access to a file -- for instance, you may allow access to a subdirectory, but when accessing it you'll find that hits for index.html (and other DirectoryIndex files) are generated and may very well be blocked because of the way Limit inheritance works.
  • There's also the funny issue that Order takes *no spaces* between commas joining Allow and Deny!
  • AllowOverride Limit Indexes is very useful in general: it allow for limiting access to files, and customizing file directory indexes (when active).
  • Hacked some mutt keymacros. I found out you can have multiple-control-key sequences in .muttrc which made me really happy once I came up with control-d-control-w-control-d-control-x.
  • Estrela went to the vet today. The vet says she's healthy, beautiful and weighing 14.5 kilograms. Gave her some medicine, nonetheless, to ensure she's parasite and sickness-free. And apparently I need to take Olivia for rabies shots tomorrow!
  • Ran into some funnies with background-image on a table row and Mozilla and Firefox tonight to fix bug 252810. Used [] to ensure I wasn't mad, but the problem turned out to be the fact that table cells now inherit background style (including background images) from their parent rows. Weird thing is Firefox 0.8.x doesn't. Then turned out that IE didn't support anything of what we were doing so I had to add a class hack instead. Ugly.
26.07.2004 Adventures in the land of a pach E
  • Wanted to turn off the silly "Parent Directory" link in apache. Of course,
     IndexIgnore ..
    was all I needed.
23.07.2004 Croaking
  • Debugged a fair bit of Bugzilla's internals, and found out I know my way around already quite well. It's a big fat [ugly!] system.
  • Discovered Carp::longmess (and its cousin confess), which is precisely what I needed to make debugging easier -- it's just like trusty old traceback.print_stack()!
  • Caio's box burned up one day before his DJ-set, so I lent him one of ours. Line-up here: []
  • This is precisely what I mean when I say "wtf": []
22.07.2004 Missing bits of information
  • For instance, php_value can only be specified if AllowOverride includes "Options". The FAQ for Gallery at [] mentions it, but doesn't say if it's Options or Fileinfo, so I had to test to find out).
  • PHP's includes are always processed relative to where the *script* runs, not where the include file is (maybe it's that way everywhere, but this is where I felt it :-). So your include_path *must* state relative paths considering where the script is going to run, not where the middle-level includes live.
  • Interesting set of documents and an article about what sort of deliverables are interesting for discussing UI design: []
  • CSS fun. BZ told me an interesting thing: that the CSS box model implies that a box doesn't care how wide its children are (unless in float or absolute positioning). This makes for some peculiar things, such as a box where its children trigger horizontal scrollbars but its parent only takes up the space in the viewport.
     clear: both;
     white-space: nowrap;
  • When encoding POST data to submit somewhere, remember: first you want to encode it in the proper character format (in my case, UTF-8 via utf8_encode) and *then* you need to urlencode it to avoid it going bananas because somewhere in the content someone placed an ampersand and then boom boom parser.
  • Quick references are fun: []
21.07.2004 Must be funny
  • Compiling PHP with freetype2.x is fun on Woody. It hits the freetype1 headers (because /usr/include comes *before* /usr/include/freetype2/ in the compilation commandline) and we get hundreds of messages like:
     In file included from /mondo/src/APACHE/php-4.3.8/ext/gd/libgd/gdft.c:65:
     /usr/include/freetype2/freetype/ftglyph.h:104: parse error before `FT_Library'
     /usr/include/freetype2/freetype/ftglyph.h:104: warning: 
         no semicolon at end of struct or union
    The really fun part is finding out a solution amidst the hundreds of -Is strewn around the screen. Found a tip at [] that basically said "rename /usr/include/freetype to freetype1 and you'll be happy". Happy.
  • Fought with map and Bugzilla's trim. For some reason, you can't do "map trim, @list", and I have no idea why. You need to use "map { trim $_ } @list".
20.07.2004 Why we need Tim
  • I declare today to be international Tim Peters day, for some reason.
     > > This violates the Python C style by putting an assignment in a
     > > conditional.
     > Where is this documented?  Assignments in conditionals are used widely
     > in the C sources, including such places as gcmodule.c, object.c, and
     > typeobject.c.
     It's not actually part of PEP 7 (the Python C style guidelines).
     It was an informal rule in PythonLabs (at least the non-Guido part of it
     <wink>), triggered by noting how many subtle bugs in real life
     ended up involving an embedded-in-a-conditional assignment.  I don't run
     around getting rid of those for their own sake, but if I'm rewriting a
     piece of code for other reasons it's a transformation I routinely make
     now.  And you can count the number of Python bugs traced to my C code
     over the last decade on one finger <wink -- but avoiding doing multiple
     things on a single line really helps, and so does avoiding side effects
     in the interior of expressions>.
  • To Barry Warsaw, on the supposed inexistence of PythonLabs: []
  • Have any other life-changing quotes? Send them to me.
19.07.2004 PEPsamar
  • And we have (after a year or so) a PEP registered on the LC_NUMERIC issue that was solved a while back by gjc and Martin: []
  • Did some more Bugzilla reviews and guided people around, but not a lot of hard work got done beyond delivering the layout part of some of the Web work we're doing this week.
  • Learned about SQL-unstandard ifnull(X, Y) which returns Y if X is not set.
  • Some bonsai snort activity makes me wonder. Find some related documents, but in Russian :-/ [] -- the funny part is that this exploit is silly because we all know that bonsai isn't written in PHP (sorry). The fact that 6 different originating IPs probed this seems to imply that there's some coordinated work going on.
  • Discovered /allserv /nick kiko_fud and made my life easier :)
16.07.2004 Back me out!
  • Went to the dentist and got my protective plate installed. It's not that bad, but it's tight and makes you talk as if you were 5 years old. Hopefully my teeth will surrender themselves after a while of fighting the new configuration they take when the plate's in.
  • Looked at alternate stylesheets for Bugzilla, using some code and styles from [] (that I picked up from Hyatt's weblog of all places). Took about 30m to hack into Bugzilla, the charm of it :-)
  • Hmm, realized I might have been required today in Curitiba at Telepar for some things.
  • Found an SSL-enabled version of X-Chat 1.8 for woody! Viva []
  • Discovered cvsps -- generating patchset information, hmmm, to help me back out a bunch of stuff. And in conjunction with -d and trusty old patch -R, it works!
  • Ran into something.. weird. 4-headed boxes :-) []
  • Had a few rough days and nights but work has been progressing nicely. Made lots of contacts and cleaned up my backlog quite well. This morning murdered email and dealt with PyGTK bits, mainly looking into GTK+ source code to see how gtk_module_init works and thinking about a tough question relating to dynamic loading. The rest is just the usual fare.
  • Found out that manpages in XML can be parsed using xmlto -- found a woody backport of it and happily fixed up a few bugs in bugzilla-submit's manpage (using man -l bugzilla-submit.1 to test). Also touched up some of the error verification so it works as expected, fixing bug 244324. This required subclassing URLOpener and doing something like Michael Reilly suggested in []
  • Tried to find a way to make my dependency tree work as Joel wants it to; however, having a hard time making styles conform to the way I want. Discovered that getComputedStyle is not standard over browsers: [] :-(
  • Had an IndexedCatalog bug reported: we're ignoring the excluded attribute option! Fixed with major band-aiding, I should really think this through better.
  • Confusing. Javascript can't be embedded using LINK, apparently -- only using SCRIPT SRC. Go figure.
  • Finally, after years of waiting, the hot new PyGTK 0.6.12 crack hits the street. Fuel your addiction here: []
  • Me escreveram perguntando sobre tutoriais CVS em português. Encontrei dois, de qualidade, digamos, "mais ou menos": [] e []
  • Using codewarrior? Don't know how do compile via the command-line? Here: []
  • Discovered hyphen-show, a utility that helps find out if LaTeX hyphenated stuff it shouldn't, from a tip at [] -- it's even in Debian.
  • Did some CSS futzing around with [] to make my dependency trees work as expected.
11.07.2004 A lot of nothing
  • Hacked some CSS for Looks a lot nicer than I thought it might.
  • Tried for the second time to get a recent firefox binary running. Oh, I feel like am back in 1996, during the glibc wars. Seriously, this is ridiculous. I managed to get XFree86, pango and friends running nicely, only to find out that firefox (apart from all the other @#!@#! requirements) needs frigging glibc-2.3. Jesus. The worst part is that my upgrade to XFree86-4.3.0 has put me in a fix because pygtk isn't happily compiling again because of stupid freetype version skew issues:
     /usr/bin/../lib/ undefined reference to `FT_Seek_Stream'
     /usr/bin/../lib/ undefined reference to `FT_Get_Short'
     /usr/bin/../lib/ undefined reference to `FT_Forget_Frame'
     /usr/bin/../lib/ undefined reference to `FT_Access_Frame'
     /usr/bin/../lib/ undefined reference to `FT_Get_Long'
    Don't I love free software. The solution? I don't know either. The problem is that pango wants an older version of freetype (2.0.9), basically (and somebody set up dependencies wrong). So now the solution is probably grabbing a newer version of pango/gtk2 that work with freetype 2.1. Or compiling the whole shebang.
  • The issue really is freetype compatibilities, and I decided to recompile everything into /usr/local. We don't normally use /usr/local for locally-installed stuff, but this is an exceptional case -- these are development libraries, really -- and I decided to bite the bullet. The dependency graph isn't too deep for GTK+, thankfully: once you have freetype6 and fontconfig and Xft2 available (via backports), it's a matter of forging pkg-config files and getting glib, atk, pango and GTK+ itself built.
  • Fudged Openoffice fonts (yeah, the reinstall made me upgrade openoffice). It's annoying, but basically the bug open at [] explains the problem -- the solution is both to use the options dialog to replace the mysterious Andale Sans UI and to hack openoffice.conf to follow my gnome preferences (even if I don't have gnome installed).
  • Read off another long thread about why __del__ is not reliable in Python at [] -- it's interesting that Oliver actually managed to make Martin say "Hmm". Must be a first. More here: [] It's not easy to define what semantics we want in a dynamic language, because we don't want to garbage collect *every* object that goes out of scope, and then if we want to use reference counts, well, the issue becomes that of discovering at the end of a function call which objects need to be finalized -- which isn't possible in CPython (though could be implemented) and which isn't possible in Jython either, Jython being a more serious problem because a) objects created in Java can't be reference-counted by Jython and b) there is no Python runtime to change -- it's just Java bytecode.
  • Seth, the linkrotter, broke the GtkFileChooser spec link, but I found it again at []
  • So of course on the first holiday we have in a while, and the day I plan on picking up my stuff so I can go biking, what happens? It rains, I go too late to grab my biking stuff, and miss the ride. And then what happens? The @#!@#! sun comes out! Feels like calling the department of weather and yelling at them over a landline.
  • Talked a bit to Marcelo about what sort of work it is to hack support in Linux for platforms based on processors -- processors we already support, of course. Apparently, for PPC there are a set of Platform CONFIG_* options that more or less tailor what sort of infrastructure the hardware has around the processor -- I wonder if quite a few of these weren't available for 2.4 as separate patches. However, AFAIK PPC support hasn't been merged proper into 2.6 either -- not out of the box at least.
  • So guess what [] is? Something nice, right? It's the new name of the Phillip Morris conglomerate!
08.07.2004 The nerve | 300 or die
  • I'm getting spamcop bounces from people spamming my *submission* address to Spamcop ( I'm serious, these people need help.
  • Talked a bit with mhamilton at #mozwebtools about tinderbox3. He works at Meyer Sound, who apparently make these evil apocalypse-grade speakers and a bunch of software tools for tuning them like [] The interesting part is that he said that although you can spend over US$200K+ on speakers easily, there appear to be quite a few setups in Brazil: []
  • Control-enter as a form submission thing for textareas: []
  • Hacked some websites that were in dire need of updating. Found out it's quite hard to track down exactly what you've been up to over the past year or so.
  • It's official, I must have hit some Orkut superstar status thing.
  • José put up some awesome pictures of his stay here in Brazil, including some of Fabia and I: [] -- the finger of god is where Magno, Sal6, Corbani, Tição and I were struck by lightning almost three years ago. Lightning rocks.
07.07.2004 Out of band
  • Hopped over to Campinas to visit Jacomo and Guilherme Venere at CAIS, the incident response center for the Brazilian research network. Arrived an hour late given multiple incidents, though rather of the "public transport" sort. Jacomo was so cool to have given me a real vintage can of SPAM that would make Hermann proud of me.
  • Saw Guila in his new home in Campinas. Let's not omit the fact that he got the number of his own house wrong and had me, Guilherme and Atanai driving around mad in search of a house that didn't exist! He's got three dogs to keep him company, and a bunch of DVDs and CDs, and he works as a carpenter and furniture restorer. He's even starting to look like Jesus, I swear.
  • Jeremy gave me a different idea about the ConflictError thing -- something resembling what he wrote about back in [] ; basically, it involves creating a data structure in which conflicts will be very unlikely to happen. Something like a dictionary with pre-created keys, that stores stuff from a certain connection in a Bucket in each of its keys, and which has the contents of those Buckets emptied individually. I think :-).
06.07.2004 Dentists, Scholarships and Conflicts
  • Went to the dentist to get my protective plate done. This involves getting a mold made of this weird greenish vanilla-flavored goo stuck on your teeth for around 30 seconds. Luckily I'm not the squeamish type.
  • Fixed up scholarship requests for Evandro -- with a lot of help from Fabia yesterday this is coming to be a simpler process than, say, building a house, but still not quite as simple as it needs to be.
  • Worked for about 1h on meeting at CAIS tomorrow.
  • Investigated some more ReadConflictError issues with IndexedCatalog. This work is really pending a customer coming up with a reason for paying for the change, but for what it's worth my investigation seems to have uncovered two alternatives. The first one is simply porting IndexedCatalog to ZODB-3.3+ and taking advantage of its MVCC. This involves hacking ICPersistent to become a persistent.Persistent object, and taking care of the imports required to make IC work as expected (hopefully not that complicated). The second alternative was proposed by Casey, today, and which invites a more detailed discussion, if not for plainly academic reasons.
  • One of the main RCE issues is in the OOBucket used to store changed items in IndexedCatalog.Catalog when in queued mode. In a way, this is ironic given that this feature was implemented precisely to *avoid* conflicts in the indexes -- however, in reality it has become a concurrent write bottleneck. To understand why, let's cook up a simple example RCE. Client A loads an object, changes it, and commit()s. The Shelf commit is now actually done in two phases; the first one commit()s changes (which have been stored during __setattr__ in the _change_buffer OOBucket), and the next one clears out the OOBucket into the indexes. Now let's say Client B starts loading the catalog before the first commit, but loads _change_buffer *after* the commit runs. Oh-oh, you guessed it -- client B will RCE on the OOBucket, and with good reason since it's been changed before its state was loaded. I would have thought this wouldn't be a problem in practice, but my client logs full of RCE tracebacks have forced me to reevaluate my position. Tim Peters' take on it is the best explanation I've heard of the problem:
    In the absence of MVCC, RCE is expected if an object O has been modified between the time the current transaction began and the time O.__setstate__() is called.
  • Casey Duncan suggested one alternative, which was making use of _p_independent. This hook allows one to say that a certain persistent object's state is valid no matter what other persistent objects' state is -- IOW, it doesn't *want* to be notified of ReadConflictErrors. Interesting thing is that Dieter Maurer proposed creating versions of BTrees/Buckets that were independent over a year ago; the middle of the thread is on ZODB-dev at [] However, both Tim and Jeremy had serious reservations to the approach, because there were a number of scenarios in which BTree state could get corrupted by ignoring RCEs (interestingly, the real solution was something like MVCC which was originally implemented in ZODB4 and then moved back to 3.3).
  • This is where Casey's original suggestion comes back: we *could* declare _p_independent and just implement a _p_resolveConflict method; this is more or less what QueueCatalog does, and there's code to show for it: [] -- all that we're waiting for now is for somebody to actually come out and sponsor the wicked thing.
  • Back in office, catching up on email and tasks left over from yesterday.
  • Some crap is just unbelievable. Try figuring out *why* the PyGTK FAQ Roulette is up here: []
  • Hiked with José and Fábia up to the base of "The Finger of God", the life-threatening lightning-inducing rod of rock that juts out from under Teresópolis. Had a nightmare of a bus ride back to São Carlos with highlights such as a 4:30 stopover at Campinas that lasted two long hours and a weird dream inside the bus where I thought I had woken up and left the bus to walk about this weird (and seedy) downtown area of some nondescript metropolis.
03.07.2004 The Forest of Family
  • Weekend fun in Itaipava, for my grandmother's 86th birthday. I printed out our (pretty massive) genealogical tree and watched in glee as the relatives fought it out to update their data, add new bits, and complain about this or that part of the rendered tree. The tree was fairly expensive to print out (R$90) but, given it was done on 6m-wide plotting paper, I think it was worth it.
02.07.2004 Bugzilla layout comparison | Yakissoba or die!
  • Did a small survey comparing Bugzilla layouts today. Here's what I found.
  • Redhat [] : Redhat places an odd-looking (but simplified) form at the top of the bug display. Bug comments come ordered by time, followed by the comment box, followed by the same bug form, followed by attachments and actions at the bottom. I find the layout wastes a lot of vertical space (and therefore uses lots of vertical scrolling).

    They also have a tab-navigation system at the top of the screen, and a bug-number entry to the right. This part I think is quite nicely done.

    Dave Lawrence sent me a link to their new testing site at [] . It uses a more conventional form layout (which is unfortunately too wide for the 640x1024 window I use), and offers a commit button right under it so people doing bugdata editing can do it quickly.

  • Ximian [] : A table summarizing the current data comes first, followed by comments ordered by time. Ximian places the controls above the new comment box. They use a single item <select> for Product -- in part because they have fewer products and many components.
  • GNOME [] : GNOME places comments above the controls, and adds a small <div> containing the most important info in the upper right column -- perhaps the approach I like most if you want to place comments before the header. Attachments come directly under the comment box and the usual mess of controls at the bottom.
  • KDE [] : surprisingly enough, KDE Bugzilla's layout is similar to.. GNOME Bugzilla! Luis Villa let me know that the KDE guys actually wrote most the of the original code reused in the GNOME templates (which goes to show that there's always more collaboration than immediately apparent). It also uses a <div> to the right, with comments at the bottom and the comment box at the very end. There aren't too many bugs, and more surprisingly -- well, at least to me who doesn't have editbugs -- the bug form is not displayed. You get the feeling it's nice and short until you realize you're missing something :-)
  • Helix [] : Helix has something I never thought I'd see. It's a sourceforge/forge site that -- instead of the *cough* tracker that comes with SF -- has an inlined Bugzilla! The login system is somehow integrated with the SF site, too. Unfortunately I can't see much of the site because all bugs are assigned to groups (what's up with that?), though the search form looks just like the original one with some weirdly hacked CSS for the form controls.
  • XPertNet [] : This Bugzilla is the most unusual of all the other layouts. I know Ludovic put a lot of work into CSS-ifying their templates, and it has separate View/Edit modes for the bug -- clicking on the relevant "button" makes the Advanced section grow form controls and the comment box. The funny part is that they still use the same old 1970's comment header:
      ---- Additional Comment #1 From Ludovic Dubost  2004-05-14 18:00 [reply] ----
    They also have collapsable comments, and saved queries show up in a CSS-ified popup menu at the far right. Navigation is at the top of the page (hooray), and there's a Task browser.
  • Async [] : We use a slightly modified layout, that simply groups controls in the main form, reorganizes the dependency view, and uses tables to display the individual comments -- it avoids names and dates jumping all over the place when viewing a long bug. I can imagine placing timetracking information as part of the table columns as well.

    We also lay out the bug actions horizontally, ans use <label> where possible.

    We have a compact "shortcut bar" which is placed at the top and bottom of the screen which gives access to saved queries and most Bugzilla tasks.

    Our layout is adequate for 640px-wide windows, which is what normally is used here (people have screens split vertically at the middle, with 640px to each side).

01.07.2004 OH NO JULY IS UPON US
  • Man, years are really short time units.
  • Anyway, :%!xxd is what you want to get vim to show binary stuff -- it does this by piping stuff through xxd to get the hexadecimal dump. Hex is cool.
  • On the topic of decompressing vmlinuz files, basically, you want to find the gzip signature "1f 8b" (which is octal \037 \213 in your magic file), see what offset it occurs (in my case, 0x3f6c, which is 16236 in binary), and then issue:
     dd if=/boot/vmlinuz of=~/vmlinux-stripped.gz skip=1 bs=16236
     gzip -d vmlinux-stripped.gz
    -- which is more or less what Russ write to lkml recently: []
  • Oh, and btw, make bzImage doesn't mean we're using bzip2 to compress the kernel image -- it just puts the kernel image offset further ahead. See linux/arch/i386/boot/compressed/Makefile for details.
  • Ran into Nic Henke, who did the IndexedCatalog C-extension work, on IRC. The funny thing is that I started out giving him a hand with this kernel unpacking thing without us realizing who was who. I suppose there aren't that many kikos on IRC, though. Anyway, he's trying to convince me to use Gallery by showing off his at [] -- maybe I'll adhere. But is this really the point in my life where I want to look at more PHP?
29.06.2004 ?n-0208057040540
  • Cryptic, but meaningful. []
  • Question: is there a way in perl to use an array as a hash key. The answer is NO, and the real answer is doing ugly hacks like joining the keys or pushing the second half into the values and ugh. Tuples.
  • Also fought with MySQL, and really cursed the broken aggregation in 3.x. This was really frustrating, and the resulting loop is SLOW, and when I say SLOW, I mean, SLOW. Still need to find a better way to do that.
  • Ran into Trac: [] via Sidnei's tip.
28.06.2004 Priceless.
     <radix> hooray I am famous
     <tjs> radix: your already famous
     <exarkun> radix: Again?
     <dash> radix: turn your fame into cash
     <radix> dash: how?
     <elspeth> radix: can i have some then?
     <moshez> radix: famousness!!
     <dash> radix: sheesh, i'm an idea man; details aren't my department
     <moshez> radix: remember the people who were you friends before your
     * moshez hugs radix
     <moshez> radix: steal dash's money and count on your fame to protect you
                     from reprisals!
     <radix> he doesn't _have_ any
     * moshez comes through with details
     <moshez> radix: steal his stuff, and fence it
     <exarkun> radix: Why are you famous today?
     <radix> because kiko put me in his quotes list
     <moshez> radix: wuuuuuu quotes list
     <moshez> radix: your fame is scary!
27.06.2004 Hair sucks
  • I got that VERY-MUCH-NEEDED haircut today. Nando!
  • Formmail seems to be staying ahead of the pack in the snort logs; would be funny if it wasn't tragic. Along with the CVS access attempts, this makes for a colorful melange of security complaints and responses during the week.
  • More stoqlib z3 interfaces discovery. Now with value-added PERSISTENCE. Or not yet.
  • Oh, no. Another one of them. How many ORMs do we need for Python? []
  • And on the topic of Workflow (since I grilled Sidnei about this for hours today): [] and [] -- oh there's more [] [] [] and of course his script that convers DCWorkflow to graphviz format: []
  • Radix, about people that use RDBMSs:
     <radix> kiko: who cares about those cavemen
    I love #twisted.
26.06.2004 WTF
  • Found in our snort logs today an amazing profusion of attacks to /cgi-bin/formmail.cgi. Of course no such file exists, but it's gone from a sporadic occurence to the #1 item on snort-report:
      25.00% 33  WEB-CGI formmail access (1:884:8)
      15.15% 20  WEB-CGI formmail arbitrary command 
                                 execution (1:1610:5)
    Given that up to yesterday top offenders were Squid scans and WEB-IIS crap, this has got to mean something special. Some of the logs also have these weird Via: strings in the HTTP header, which is set to stuff like SERVER and WWANDW. WTF?
  • Updated my Orkut photo album with captions. I guess I really like captions. Time to look for photo album software with less security issues than the market leader.
  • Twisted's documentation on adapters and interfaces at [] is possibly one of the best documents I've read to date. It's straight to the point, full of examples, and talks about real-world problems. It's not hung up on concepts, but it still manages to deliver precisely the relevant ones at the right time. Kudos to the Twisted doc team, all the way.
25.06.2004 Upgrades
  • Going to give a spin on ZODB-3.3 with IndexedCatalog. Clients are really hammered by the ReadConflictErrors, and hopefully 3.3's MVCC is going to make everything "magically better". There seem to be two options here: either forego ExtensionClass completely, inheriting from the new-style persistent.Persistent, or install the new-style ExtensionClass bits. Problem with the latter part is actually finding them! They don't live in the ZODB package, nor anywhere I've been able to find so far.
  • Okay, they're in Zope/lib/python. Now the next question is how to pull all of this out, and whether it's going to keep on working with IC, which has a few C hacks for speed. Pulled via SVN because nothing else seems to quite work (and I didn't want to have to leech all of Zope because of three crummy files):
     svn co svn:// 
    and immediately liked the fact that svn uses the basename of the repository provided as the local directory. Was confused by the third option to checkout, but then realized it's just a local path. Neat.
  • However, getting IndexedCatalog to run with this new creature is scary. Apart from evil module layout and name changes, the ExtensionClass rewrite has made it close to impossible to figure out how to build Persistence again. Or even figuring out if that's what I want.
  • In the process, found out that ZODB actually uses zope.interfaces (optionally, masked by an except ImportError) as well.
  • In the end, Tim suggested something I was leaning towards: goodbye ExtensionClass, hello new-style classes for IC. Hopefully won't be too difficult.
  • Managed to update X to the backports version which no longer crashes on a firefox query for .nscdrecover. However, it apparently still generates a massive fd leak, and I can't run an rxvt after the query finishes displaying without getting
     Xlib: connection to ":0.0" refused by server
     Xlib: Maximum number of clients reached
    which is sort of summarized at [] -- the feeling I get is that it's really some weird X server bug that I can't get hold of. I could try the 4.3.0 backport at some point to see if it cures things. The funny part was that the rest of the team came into work and booted up -- into Gnome 2.2. Can you imagine everybody going "where's Ion?" Our Xsession hacks need to be preserved over X upgrades, and I sort of keep forgetting that.
  • Had lunch with Renata, talked very little about SAFE. Everybody's a bit unhappy because of the University strike and because the grant is taking a long time to set up because of various beaurocratic issues that keep popping up here and there. Project's been approved for a month.
  • Started work on a Bugzilla modification that involves summarizing timetracking information. Looked at the DB schema, and filed a few bugs on UI issues that popped up while I was customizing.
24.06.2004 Strange motions
  • It finally happened. []
     Brazil          31.26%
     United States   29.77%
  • Went to see Consave at Sertãozinho. System's doing well, though the ReadConflictErrors are bothersome to say the least.
  • Looked a bit at Zope3 interfaces and adapters to see what sort of presents they have for me. [] and [] and [] and [] have some bits of guidance. Twisted's excellent docs that predate the z3 move are here: [] The ZODB text about persistent modules, however, still confuses me: []
  • Read something about Aspect-Oriented foo at [] and realized how horrifically horrible AspectJ really is. Compiling cross-cutting updates into Java bytecode has got to be one of the crummiest ideas ever thought up. It brings in so much potential contextual complexity that it probably makes reading the code an exercise in futility once you have the bugs jumping. And after years of writing code that's in production, believe me, bugs jump. Sidnei puts it much better than I do:
    <dreamcatcher> now add interfaces to that and you have a nuclear bomb ;)
  • So Nafai tells me we have some other interesting persistence systems for Python: [] and [] -- I wonder how they rack up against the ZODB.
21.06.2004 Ten Poles of Dume
  • Talked "The Turnip" into getting his wrists sore over [] -- Yes, Johan *does* rock, it's just that most of the girls on orkut haven't found out yet.
  • Since I seem to always forget, we check if a property is defined in Javascript by using:
     if (typeof != "undefined") {
         k =
     } else {
         k = undefined
    This tidbit comes from ajvincent and rginda's excellent "Tackling JavaScript strict warnings" guide at []
  • Hmm. Ran into something weird as hell: []
20.06.2004 Templates for Disaster
  • So I missed out on the party yesterday. Boo.
  • Tracked down an odd GTK+ change that affects the way the Kiwi proxy works. It could be related to [] -- basically the issue is that "changed" is only fired once when issuing multiple GtkEntry.set_text() calls with the same string. It's, of course, a literal interpretation of the word "changed", but this is programming, not semantics class. Worked around it but wrote off a message to gtk-devel to raise the question if it's intentional: []
  • Found out that GtkSpinButton now *requires* a set_range() or stuff doesn't work as expected. What a strange change. Anyway, for convenience's sake, I argue we should offer min/max or a range tuple as a convenience argument to the constructor, and I've found there's precedent to this in TreeViewColumn's constructor, which in GTK+ takes no arguments but in PyGTK takes title, cell and kwargs for attributes. Shouldn't be too hard to do, though the PyGTK 2.0 backport is going to be boring.
  • Links of the day include [] and [] -- the first one is particularly remarkable because it's such a perfect example of how this color of life we've chosen is just.. unique.
19.06.2004 Spot-on hacking
  • Did the first part of the Kiwi2 port. I have two examples running and a number of tests there. The fun part is that it's much easier than I thought it would be. Soon will have something nice to gape at.
  • Hacked with Sal6 an abstract-parser to deal with the braindead format he received some article index from a congress I don't want to hear about it. It didn't involve TOO MUCH hacking, but it did involve a fair bit at least. I had to make extensive use of regexp's magic "(?:" which is a complete hack IMHO but what can one do when the real world sends data your way?
18.06.2004 Grab-bag of grueling guerillas
  • Pushed myself through a round of Kiwi-hacks and found out things weren't so hard to figure out once a testcase had been written. I love testcases (after I've written them -- the writing process makes me want to give up computers).
  • Helped sal6 boot up his raid server again, since it decided to crap out after a power outage. Found out that the stock vmlinuz compiled on my box won't boot straight off a floppy; you need to use something like mkrescue to transfer it to a floppy disk with lilo.
  • Read through PEP-1 [] and PEP-9 again and then submitted an updated version of the LC_NUMERIC PEP draft to the PEP maintainers at
  • Very interesting fight between me, Stoqlib and pychecker ensued today. It really boils down to what the #twisted people tell me all the time: never ever ever use relative imports, though in the pychecker case, it has a twist of its own. Relative imports are evil because they are ambiguous relating to how sys.path is set up. For instance, if you have something like:
    and something like
    and you use the simple form
     import baz
    from one of's sibling modules, you can't really be sure which baz is going to be imported. It ultimately depends on how sys.path is set up.
  • The fix for this situation is (obviously) using, throughout, the full form
     import bar.baz
    of course. HOWEVER, because of how pychecker works when you specify multiple filenames to its commandline, this isn't guaranteed to work either -- and the reason is that pychecker puts everything in sys.path, making it highly sensitive to the order things were imported. The lessons to be learned here are a) never ever ever use relative imports, b) careful when naming a subpackage with the same name as a top-level package and c) have a top-level package. Should make life a lot simpler, although paying attention to all these rules is already a lot of complication as down payment.
  • Since I've thought for a long time I knew what allegory and parody were but found myself unable to explain to Nando yesterday what the difference between then was, skipped over to Wikipedia to get a decent definition.
    An allegory (from Greek allo*s, allos, "other", and agoreuein, agoreuein, "to speak in public") is a figurative representation conveying a meaning other than and in addition to the literal.
    and the most significant part
    An allegory is distinguished from a metaphor by being longer sustained and more fully carried out in its details, and from an analogy by the fact that the one appeals to the imagination and the other to the reason. The fable or parable is a short allegory with one definite moral.
  • A parody, on the other hand, is
    a form of satire that imitates another work of art in order to ridicule it.
    where satire itself is
    a literary technique of writing or art which principally ridicules its subject (individuals, organisations, states) often as an intended means of provoking or preventing change.
  • So the remaining question, after this, is whether Cien Años de Soledad -- yeah, I finished 100 Years of Solitude two days ago -- is a very intricate allegory of life or not. The most fitting comment about the book I've read is
    Saying it is a story of a family is like saying the New Testament is a book about a carpenter.
    from []
  • Visited the dentist. Though he was happy to see my teeth were utterly clean and cavityless, he suggested strongly that I've been damaging my teeth through bruxism (basically grinding and gnashing the enamel away) -- I had noticed myself that quite a few of them were chipped and cracked, but he says it's not as limited as I expected. Two x-rays later I've got an appointment to have a custom protective plate developed for me. Great.
  • Had to skip the pre-arranged meeting at Tecnoworld at São Paulo given the fact that Consave needs some serious reviewing and updating. Read thousands of LOC, and helped Rico put together his new reportlab wrapper.
  • Had a quick meeting with Renata and the SAFE team about what's going to be worked on this year.
15.06.2004 They are upon me
  • Arranged a meeting to demo Async Diskless Desktop at São Paulo on thursday, so Fabia (yay) and I have it sorted out.
  • Fought with compilation and installation of the psycopg module. Okay, granted that my Python stuff isn't in the right place, and that I fumbled with the configure options that seemed to be so clear at first sight. Still, it beckons the question.. why not distutils? SQLObject was an easy trinket to sort out once that was done. And then I dove into a sea of bugs in another application. Good grief :-)
  • Kicked some reviews out the door, set me up for some serious disasters, and slided off into dreamworld.
14.06.2004 100 Years of Kernel Panics
  • Anthem hung on a SCSI/AIC kernel panic today from 6:26am till somebody noticed it (10:33am). I hate it that this happens periodically when I can't seem to understand *why*.
  • Had a rough weekend, most of which involved going to a wedding which I did not attend, and surviving through what was left of it.
  • Almost finished reading Garcia Marquez' novel "100 Years of Solitude". I'm down to about 80 pages left. To be honest, I'm having a hard time airing an opinion of what I think about the book. It's an interesting story, but somehow I've been regarding the story as secondary to what the book is supposed to mean. I haven't been able to read it as a simple "touch-and-go" book of fiction, as I have with any science fiction or fantastic book I've read. It may have to do with being very surreal (which doesn't let me quite believe in the plot, since I expect it to kick be in the guts every couple of pages or so) or with the almost comical tone most of the story is told in (which is so subtly tongue-in-cheek that you feel the author is chuckling at you while telling the story) or with the fact that it's in Spanish (and a lot of the words I just bulldoze over obliviously).
  • But somehow I realized that all this time I've been trying to read the story beneath the story, and that's probably not the best way to read this book the first time. But anyway, the story is.. about.. something. The *storyline* involves a family and a city and a chronological (though not strictly sequential) perspective on how they evolve over a century (or so I'm told -- I haven't reached the ending yet). It feels very much like a description of the late nineteenth centry in tropical south-america (which is good, because that's what it is) but it's got so much ideology and symbolism bleeding through it I can't seem to pay a lot of attention to the story itself. Of course, the fact that there are ghosts and levitation and incredible facts mixed in with very down-to-earth reality doesn't help. So now I've confused you, all the while without helping myself figure out what I think of the book. The only thing I can say at this point is that it's beautifully written, and somewhat depressing. Maybe I'll have another opinion when I'm done.
  • More reviews and email cleanup. I need to do something about email, I'm starting to realize, but more urgently, I need to get out of this damned dream-like state I've been since I stepped off that plane from Portugal. I can function like a human, but only for very short periods of time; I then devolve into my original alien state which should wear off eventually but has a tendency to stick right when I don't want it to.
  • A week ago, I read the final 50% of John Krakauer's masterpiece Into Thin Air. Now when I say masterpiece I tend not to put it lightly, and in this case, it may be beyond it. I have yet to read a better-written, more touching -- in particular here, devastatingly honest yet beautifully personal -- account of survival through a tragic disaster. It could be that it's because I've felt similar under -- sure, less extreme, but still pretty life-threatening skull-numbing extreme -- similar situations while living it out in the wild, but I think there's more to it than just the personal bond that connects us survivors together. The book is horribly sticky, and once I picked it up (in passing, over dinner, and just looking at the photographs in the middle) I could do nothing but finish it. It took me a short 4 hours to read the final half, and once I had finished, I felt both melancolic and sadly enlightened.
  • Spent yesterday afternoon painting the fence. Arrive at the office today: dog has chewed bits of fence and atrociously dirtied the unchewed bits. Controlling murderous impulses, move towards desk for immersion in virtual problems.
  • Also watched Harry Potter's latest sequel, though I slept through a great deal of it, coughed spasmodically for another significant period of time, played with Luma for the last 50%, and generally misunderstood the ending.
  • CVS has played a trick on me to fix my loginfo format strings -- but syncmail hasn't been fixed yet. Read through [] and realize that I don't *really* want to fix the strings right now (since that means hacking syncmail, which can't fit in my job description now can it.) I now amusingly get a new set of warnings in place of the old ones:
     cvs commit: Using deprecated info format strings.  
     Convert your scripts to use the new argument format 
     and remove '1's from your info file format strings.
  • Time for the good ole apache/modssl notch-up. Made significantly easier by keeping around the previous trees for config.cache stealage.
  • Jdub and James found new jobs: []
  • So Joel is a smart-alec and everybody knows it. It doesn't stop him from pushing a nicely-summarizing phrase every once in a while:
    If you're noticing a recurring theme, it's that I never like to talk about whether or not to do X. The question should never be "X, yes or no?" As long as you have limited time and resources, you always have to look at the cost and the benefit of X. Questions should be "Is X worth the time" or "Will X or Y have a greater return on investment?"
    which anybody but the hopelessly impractical will nod to.
  • Did a massive number of reviews and code fixups -- feel like I'm getting back in gear. Finally.
  • Starting to feel better, though I'm still coughing up bits of the alien that nailed me. I went for a short bike ride (~40m) this morning and it made me feel much better -- I was quite miserable waking up.
  • Took care of the usual office duties, and noted that my Fapesp salary is already back in order. Hopefully they'll decide to credit me with my previous salaries as well :-)
  • Did a whole lot of futzing around but not a lot of work got done. Cleaned up email, set up mailing lists (but didn't send out any messages), coughed some more, helped Evandro decide what his application is supposed to look like (and what design tradeoffs made sense here and there). I'm so rusty at this it's not even funny.
  • Spent the night trying to track down ridiculously simple Kiwi bugs that actually cost hours to analyze. The damned Combo initialization is so complicated it hurts my head. Do I deserve this?
  • Back from FISL, and guess what? Sick again.
  • Very few people know that the same spammer that inspired the Anti-Spam group in Brazil is the medicine student that fired a semi-automatic weapon against people inside a cinema screening Fight Club in São Paulo years later and was condemned this week to 120 years of prison for murder. I didn't believe it myself a few years ago when people told me, but the despairing reality is that it's true: [] and [] cover the trial's outcome.
  • Picked up my notebook at the bus station (mom thankfully shipped it back from Brasilia to me) but we're still missing a power cable! We should fix this ASAP. Olivia appreciated the walk to the bus station, at least.
  • It's not so cold today as it was, but the weather is still classifiable as miserable. *sigh*
  • Enabled CVSWeb's tarball/zip functionality, which is quite cool and which can help when CVS is barred off by draconian firewalls at north-american companies :-P
  • Fought with Python's asyncore till I understood more or less how to deal with it. The hints I didn't see anywhere were: a) handle_close() needs to call close() when it's finished b) to handle timeouts you should use asyncore.poll and loop around it yourself, using instance variables in your dispatcher class to control if (and in what part) you're actually timing out. I should consider submitting documentation patches to Fred.
31.05.2004 Monday Monday
  • Had a meeting in the afternoon to watch the presentations for the papers sent to WSL2004 at FISL. All presentations were quite interesting, and Marcos' was specially because it reminded me of all the hard work and cool results I put into my masters' research. I need to work on some papers from there.
  • Raked the backyard in the hope that the grass will last a bit longer over this winter. Unfortunately, the sun is already too low to shine on the left-hand side of the yard and already small spots (spots which I never managed to get to grow nicely, anyway) of dirt start to show. I have a pile of raked leaves, grass and crud under our lovely flowerbush.
  • Over the weekend, helped Fabia cook up a spreadsheet of hundreds of resumes she's been organizing for an alcohol plant out in Pirassununga. Typing and thinking of the odd patterns is fun, but after 10h straight you start wondering how people do this for a living.
  • Paid off some Embratel phone bills and Parqtec membership fees that were a bit overdue. Did some phone-hopping to find out if there are any more apartments worth checking out (I'm considering buying something).
27.05.2004 The Third World is STICKY
  • Back from [] and a number of other side adventures. More on this later, hopefully.
  • So the CVS exploit is popular with the skript kiddies now: [] shows up as our #1 attack method on our snort logs.
  • Read up on some cache discussion at kerneltrap, which lead me into a Compressed Caching patch for the Linux kernel, up at [] and written by a Brazilian undergrad at USP, Rodrigo Castro. Unfortunately it doesn't seem to be maintained past kernel 2.4.18.
  • Actually sick for the week over 17.05 to 22.05 -- fever and half-life endured for the last three days and really knocked me out. Can't actually remember much of the Marrakech-Tangier train trip because of that.
15.04.2004 Unhopefully
  • Reminded people of why PyGTK bug 96658 was WONTFIXED: it's hard to check if a parent's constructor was called correctly. []
14.04.2004 Hopefully
  • I'll have time to update this before I run off overseas.
  • But, just for reminders, the util which updated rcX.d links from the init.d scripts is called... update-rc.d! Thanks #debian.
13.04.2004 Typed to death
  • I'm post-overburdened. I'm going to try and write up about that but not right now -- I'm also late :-)
  • Just so I don't forget, here's the "PHP sucks, officially" document: []
09.04.2004 Packed and Ready to Go
  • Did some minor researching of DOM events after people bugged me on Bugzilla bug 155502. You'd think a simple thing like default form focus would be easy to hack, but nooooo people want me to take into account page load times and crap like that. So I start investigating if there's a way to find out if a widget is currently focused in a page. Of course this isn't easy, and as far as I understand it the only way to do this would be using a handler attached to the window's focus event. Neil wrote a small example for me at [] but it seems to be incompatible with IE, which uses Microsoft's own event methods: []
  • Truthfully, [] is quite cool.
  • Played around with snort-stat a bit more. Found out something horrific about Perl: you can't use arrays as hash keys. Maybe that's a bit obvious, but in Python you can use tuples or objects as hash keys, and it works as expected. It's damned useful too when doing serious data structures for holding stuff you're parsing in runtime. So snort-stat gets a hack instead of a real fix (it uses commas to separate arrays joined as hash keys, but the array elements can contain commas and that's just broken).
  • Sobre nossa escolha por Python, e replicação de esforços em Software Livre:
     >       Estive lendo um pouco sobre o python e nao consegui entender
     >       algumas
     >       coisas. Por que vc escolheu programar em python ao inves de
     >       java, c,
     >       c++ ou outra qualuqer?   
     Era a linguagem que achamos que combinava na proporção correta alta
     expressividade, massa crítica de desenvolvedores, processo de
     desenvolvimento aberto, extensibilidade em C/C++ e boa gama de
     componentes para acesso a outros recursos (bases de dados e etc).
     Achamos uma boa aposta de longo prazo, já que C/C++ estavam
     definitivamente fora de questão (gerenciamento de memória explícito) e
     Java tem tantos problemas quanto qualidades ().
     > Ele segue a mesma filosofia do java, interpretado e compilado em
     > memoria apos a primeira execucao?  
     Um pouco diferente; compila em runtime para bytecode, on-demand. A
     tipagem é dinâmica. É sensivelmente mais leve que java. E vem com um
     console interativo que deixa você experimentar código com muita
     > Pq fizeram mais uma linguagem ao inves de tornar o C interpretado?
     > agregar funcionalidades, bibliotecas e etc.
     Putz. Tem idéia do que seria tornar o C interpretado? Seria algo que não
     fosse C :-) Python tem tanta diferença de C que seria impossível
     implementar seus features nesse framework.
     >       Outra grande curiosidade que tenho é, pq no desenvolvimento de
     >       sw
     >       livre as pessoas ao inves de contribuirem com os projeto elas
     >       querem
     >       é desenvolver o seu? 
     Pergunta bem aberta. Resposta genérica: porque em software livre as  
     pessoas fazem o que querem. Resposta específica: porque normalmente é
     mais divertido começar algo do zero, ou porque ler código e contribuir
     para outro projeto muitas vezes é difícil e requer paciência e
     habilidade que as pessoas não tem. Outro motivo é que as pessoas sempre
     acham que sua idéia tem algum diferencial essencial que nenhuma outra
     tem (você mesmo não tá escrevendo todo o seu código de RDS? :)
     > Ou seja, tenho hj o mozilla, konqueror, kmail, messeger-mozilla, gaim,
     > amsn etc. Estes sao os principais, se eu fosse listar aqui o email ia
     > ficar com mais de 50 megas (risos). A mesma coisa acontece com  Linux,
     > temos hoje tanta distribuicao. Seria muito bom que todos se
     > concentrassem em apenas uma nao?
     Hmmm. Difícil dizer se seria *bom* -- certamente projetos teriam mais
     desenvolvedores interessantes, mas a variabilidade (que é uma das forças
     do software livre) entre projetos diminuiria e teríamos menos
     oportunidade para avanço/pesquisa e troca de idéias entre esforços
     Mais importante é entender que a questão não é tão relevante quanto
     parece porque mesmo se concordarmos que seria bom concentrar, é
     impossível forçar as pessoas a fazer o que você quer (no caso, trabalhar
     em um único projeto de determinado domínio).
     Um ponto importante a considerar é que os trabalhos de padronização
     trabalham para manter todo mundo interoperável, independente da
     implementação. Padronização requer esforço e consenso, no entanto, e às
     vezes as pessoas acabam desencanando e se concentrando no código, de
     onde tudo vem :)
  • Sent off a fixed-up version of snort-stat that actually works to the Debian maintainers (perltidified it, which was veeery welcome).
  • Sent off report after proof-reading, merging, fixing references and generally hacking up the text. It looked quite good, and I didn't even keep a copy :-/
  • Spent hours trying to track down a weird ZODB issue. I'm getting ReadConflictErrors on objects whose state is *already in my cache*.
  • Another ZODB oddity pops up: using [:] does *NOT* create a list of a *BTreeItems instance -- instead it just returns a copy of it. You *need* to explicitly use list() there.
  • Found out my finish_transaction() changes to Stoqlib make it *really* hard to select an object I just created in another connection (mainly because after I've called finish_transaction the connection is dead and there's nothing to lookup() in connection 2 anymore). Maybe we should cheat and save the OIDs in these cases..
  • In the WTF department of today, PT, the government party who's making all the waves about moving to open source, has moved their webserver from Linux to Windows 2K: []
  • Hacked the end of the report in the morning. Still needs reviewing, but it's very close now.
  • Did assorted things in the afternoon -- prepared notebook for writing task #2 of the week, did cleanups in homedir, sysadmin duties, a bit of bug triage, filed bugs, caught up on email, organized tasks for today and tomorrow. Talked to random people about random issues. Didn't feel very productive, but at least something's getting done.
  • This is so weird. Days after checking in my changes to make IndexedCatalog catalog updates happen in queued mode, I read that Ian Bicking has implemented *the same feature* in SQLObject: [] -- not only that, but it has the *same* limitation as I do, namely, that I can't queue object creation! Waaah!
  • Found hyperplain.bst which should do exactly what I want: plain.bst with a URL field for hyperlinked references: [] ... hmmm, no it doesn't. It's actually quite broken. So phoey -- here's a version that actually works (yes, I hack bibtex now): []
  • Gnucash tried to trick me into not running with an odd
     ERROR: In procedure dynamic-link:
     ERROR: file: "/usr/share/guile/g-wrapped/", 
            message: "file not found"
    message, but I wasn't fooled, straced it and decided Debian just wanted (for some reason) libgwrapguile-dev installed. Fixed.
  • When I have time to look into this again, there are some interesting Python-UML tools avaliable: [] [] [] -- and Jim's interesting reply on the subject from 1999 at []
  • Filed []
  • So many days late with my report it's no longer something worth joking about.
  • Watched Mystic River while at Brasilia. Complicated movie, though not one I disliked completely.
  • Watched Almost Famous yesterday; was actually quite fun, though perhaps not as deserving of its place in the IMDB top 250 list as others around it.
  • Google updated their layout. Funny that it actually looks *cleaner* than before. (And I'm up at #3 again.)
  • Hacked some consave cleanups, documentation updates, and Pinazo updated the image over there. I'd like to start them using the experimental "low-conflict" changes I made to IC this week, which would involve Pinazo going there this week to verify.
  • More snort and IDS verification, avoiding false positives and keeping an eye on security alerts.
  • Went for a bike ride with Mateus; his friends were intent in transforming two afternoon hours into living hell and I decided not to go along with their plan after about 30 minutes of it; the remaining ride was pure fun, all the way back to the good ole CHINESE.
  • I should note I watched A Streetcar named Desire (pretty weird -- definitely not what I expected, with pretty complex characters and a very unusual plot) and Wo hu cang long (definitely one of the coolest movies I've watched this year; surprising view of the chinese countryside and the Gobi desert, and the language is awesome). With that I'm close to attaining the unenviable position of "so miserably behind Johan he doesn't even consider me competition". I should give away my DVD player before it rusts.
  • Watched Repulsion, Polanski and Deneuve's quirky (and very dark) nightmare about sexually-induced depression and psychosis. It's sad that the Brazilian title had "to sex" tagged on to it, and even sadder that the version I watched was dubbed in french with portuguese subtitles. I was actually confused because at first I thought it was just very poor lipsync, but some scenes made it clear that people *were* mouthing english, regardless of the sounds coming out :-)
  • While crossing the street coming in to the office, my handlebar felt sort of wobbly. I look down, and gasp: my handlebar stem has ripped half-way through. Scared senseless, the only thing I can think of is "Aluminum fatigues". There are so many terrible things that could have happened instead of this that I don't know if I'm grateful or not.
  • Apache's "Order" statement is so silly it won't accept spaces after the comma in "deny,allow".
  • Updated CVSWeb, fixed CVSROOT/passwd, removed external access to .inc and .content files. Looking over the snort logs gives me so many good ideas of how to improve security it's not even funny, but weeding out the positives sucks (and how many of these am I supposed to report to other site administrators?)
  • Did a lot of reviews and mailbox cleanup -- down to 18 again for the first time in a *long* time. Did a lot of communicating and checked stuff I had coded in, but not a lot of "new production" if you get my meaning.
25.03.2004 Easy does it
  • Finally it's all set for my "escape 3rd world oppression 2004" tour:
     TP  190 N  15APR SÃO PAULO-GRU/PORTO 1715  #0850 (Change at Lisbon)
     TP  185 N  17MAY PORTO/SÃO PAULO-GRU 0720   1545 (Change at Lisbon)
    Many thanks to Alberto and Johan who helped make this happen.
  • Lots of email cleanups (5 hours worth of it) a tape rescue, mnogosearch-debian discussion and IDS monitoring. Things are starting to pan out on the first front, which is giving things on the second front time to spike -- bugs and bugs reported on Consave make me uneasy. And my report is.. still late.
  • I walked up the street to lunch thinking about regressions that come from fixing software at the client installation. How can we fix that sort of thing? It's almost too harsh saying "Sorry, I can't deliver a fix on the spot" when you really can, but what do you do with the bits you break in a high-stress checkin? Anyway, I looked up when I was crossing the street to the restaurant and a guy with a t-shirt written "BUGS" on it grinned at me. Damned wabbit.
24.03.2004 A Bleak Winter
  • Fixed up checksecurity to actually report setuid changes correctly, which beckons the question: if I hide a process from readdir (via suckit etc) will it show up in a find tree walk? I think not, which severely limits its usefulness. Asked about this on linux-admin and debian-security to see what people think.
  • Ran into an odd bug with Firefox, when running the query [] -- seems to have something to do with the fact that there's an odd charset on the page. Perhaps an Xserver bug?
  • Found a mistake in snort SID 2197: [] -- it's "cvsview2.cgi", not "csview2.cgi".
  • Hit my head against snort's threshold rules till they made sense. Using snort -T is *essential* to figuring out what's wrong.
  • Whomp. Read about a Squirrelmail issue at [] and then [] -- time to upgrade (though [] leaves you wondering, doesn't it?). (I wonder how you're supposed to keep on top of all the advisories that come out.. beyond reading bugtraq daily?)
  • Remembered to handle the forwarders I had defined in bind's configuration so they don't come up as agressors in snort.conf. Handling the amount of false positives in snort.conf is NOT FUN.
  • Our stupid speedtouch modem is to blame for the packets that are hitting the wire (and snort logs) that say
     03/24-20:12:01.128187 0:90:D0:5C:49:B4 -> 0:4:75:7D:2B:6B type:0x800 len:0x3C 
     # -> TCP TTL:120 TOS:0x0 ID:27870 IpLen:20 DgmLen:40
    -- I know because the MAC address is a telltale (00:90:D0 isn't any common interface prefix here). A message at [] seems to imply it has to do with the blaster outbreak. It's odd, because our *modem* shouldn't be sending in those packets, but maybe it's just bridging crap that is coming in on its other side..
  • Webmail is now SSL-only, as it should always have been.
  • Revamped our mnogosearch installations with Debian's backend package and the PHP-based frontend (which uses PHP's included mnogosearch support).
  • Spam came in today, of all places, from [] -- and even the phone number matches. Amazing, though not in that good way you'd hope.
22.03.2004 Monday's Tragedy
  • Hacked. Cleaning up day. Boxes we reach have been compromised too. This definitely *sucks*. Using debsums to try and track down what's been changed (apparently not that much). It bothers me significantly that I don't know the attack vector yet (though it may have been passwords sniffed externally).
     debsums -sg -p /var/cache/apt/archives/
    is invaluable to track down what's been mugged after leeching fresh debs back from
  • For some reason, I never realized that DES crypt() only uses the first eight characters of the key, and Rico pointed that out to me today when he complained his ssh password ignored the last character in his password. I dug up confirmation in the manpages and at redhat's security tips: []
  • Verifying packages that need to be reinstalled; [] has the tips you're looking for.
  • Ran into something very similar to [] but with domxml being explicitly included in php.ini.
  • Read a bit about the .nscdrecover I found lying around (googling for it blew up firefox, how fun) at [] -- was related to a exploit, though probably not limited to it. Turned off PHP's allow_url_fopen parameter, at any rate. Did some audits of PHP and hopefully we're almost there. Should look into [] which seems like a damned cool thing.
19.03.2003 Fire
  • Off racing. Today unfortunately coincided with Jorge's GRUSI event; I just *had* to skip it this time.
18.03.2004 Too fast for love
16.03.2004 Fame
  • Ever got the dreaded CVS messaged "File XXX exists, but has been added in revision ZZZ"? It sucks. Wrote to info-cvs to see why it's happening on my relatively simple merge. Ah. The issue is that HEAD doesn't play nicely with date specifiers, because it's an exact revision (date specifiers are ignored in that case); see Jim's reply to my question at []
  • Noticed that vim wasn't picking up my modelines (for some reason I keep thinking they're called taginfo or taglines).. know why? Because modelines was set to zero! That's a pretty silly default.
  • I can't believe it, but I think I'm going to be sick *again*.
  • tpage is THE way to test Template Toolkit code.
15.03.2004 Fame
14.03.2004 Letters for tomorrow
  • Did a long 3-hour run with the dogs. Was quite nice all things considered (it was raining, nobody showed up) and best of all no stupid security guards telling me off because Olivia doesn't have a leash. Faah.
  • Had lunch with Fabio and talked all about modern music and where it's going (I tried to openly flaunt my newly-acquired electronic-genre-ninja skills).
  • Looking through what I need to put together this report (due Friday). And I have a race starting Thursday and quite a lot do to in the middle. It's going to be a long week.
13.03.2004 24 hours in the life of a madman
  • Finally understood how user plugin installation works on Linux (firefox apparently does *not* use ~/.firefox/plugins or whatever, but in reality ~/.mozilla/plugins) and set up a number of nice plugins for Async users.
  • Removed the delaycompress option from the httpd logrotate script to save up some /var space which is murdering us. Remembered that there's a funny thing about log rotation in /var/log -- it's actually taken care of by /etc/cron.daily/sysklogd and not straight logrotate.
  • Found out (about 4 months late) that the easynet blacklists were discontinued: [] -- this because I noticed a leftover lockfile somewhere and didn't know what to make of it.
  • Ran into a funny issue when a box had its X server killed in an OOM condition. It *seemed* as if the box had hung, but I managed to ssh in (and happily acknowledge it wasn't bad hardware) and check it out. I found some tell-tale bits on dmesg:
     __alloc_pages: 0-order allocation failed (gfp=0x1f0/0)
    which made me realize that OOM had caused something to be killed -- in this case, the X server. Read an interesting LKML thread at [] that managed to convince me to reenable the feature; since we run on a swapless diskless network, OOM is a pretty nasty condition to run into, and I guess I've never seen a deadlock actually happen to be scared of it.
  • Pretty interesting article on software bloat in Microsoft's regclean: [] -- oh, I doubt it's a good program to take as an example of the programming prowess of MS, but it's an interesting read even so.
  • A read on the Geneva Convention's "Unlawful Combatants": []
  • Finally, this is *awesome*: Ishkur's guide to electronic music, a (flash-required) interactive tour of electronic music, complete with samples and a linked map with descriptions of the genre. Wondering what the difference is between Dark Nu-School and Speed Garage? Check out []
  • I'm pretty amazed. The guide pointed out o me that Snoop Doggy Dogg's "What's my name" is actually ripping off bits of George Clinton's "Atomic Dog", and that Daft Punk's "Harder Better Faster Stronger" rips the melody off Edwin Birdsong's "Cola Bottle Baby". Hey, another one -- PWEI's 10-note "riff" in "Def Con One" comes from Lipps, Inc.'s "Funkytown" -- that's one I've wondered about all my life. The whole 80's section is just such a fun trip for me -- Flock of Seagulls, Human League, Ultravox.
  • Also picked up something that I had never realized: Thiago and Dieter are really into stuff separated as Psytrance and Goa which are actually quite different from "traditional trace". And that there's this thing called "Heavy Metal Goa" which is exactly what stuff like Skazi sounds like to me. BUT WHAT'S THIS RIO FUNK HERE?!
  • This bizarre trip lead me on to a timeline of electronica: []
  • Lots of Consave hacking in the afternoon. Cooked up a massive patch that cleans up a *lot* of Sale and PaymentGroup.. now to get it reviewed.
  • In the morning helped Joel and Neil track down what was up with Mozilla bug 235937: window.getSelection() loses newlines in preformatted text. The code for nsSelection is *not* easy to follow!
  • Back in office. Johan released PyGTK 2.2.0 behind my back! Discussed the platform bindings issues with jdub on IRC and murrayc over email. Found out that gtkmm is split in something like 15 separate tarballs: [] -- I have to say that's a lot of work for a release. Managed to understand what the Platform/Desktop split is actually all about; it's described in the GNOME release team tasks: []
  • Some porn actress, two wannabe artists and a translation company have knocked me into #5 at google. NOT FAIR. The worst part is that Sidnei is #1! I guess not a lot of peple are called sidnei (50,600 references versus 485,000 for kiko). But still, I *was* #3 a short while ago. The damned googledance.
  • There's something called David Allen'd "Getting Things Done" methodology, which they seem to love over at OSAF: [] -- for me, getting things done involves simply making sure the phone doesn't ring in the office.
  • Looked up loan rates for purchasing a house. It's average at my bank: [] -- for a $50K apartment I'd be looking at $500 per month for around 180 months. That's 15 years for the math-impaired. I am somewhat reluctant to contemplate a 15-year loan but maybe that's something that always gets to pseudo-young people.
  • Called James up. He's still alive :-) Said he was quite busy and had tons of email to dredge through -- said he was okay about pygtk moving on, and happy that 2.2.0 was finally released. We discussed the platform bindings thing a bit -- I'm getting around to realizing how different James and Murray's view of what bindings are just from their diverging positions on how the packages should be organized.
09.03.2004 Con save us
  • At Consave, till tomorrow.
  • Helped Silvio do a /home cleanup at Consave to avoid having them call me up every time the database is dead because there's no space on the device. Did the same over here to ensure we've got more than 800K free on a Monday morning.
  • Found out about chattr +c, e2compr, and the fact that it's still not integrated into the mainline kernel: [] (a pity, it would have rocked to have OTF compression for our mailman archives..)
  • Bugzilla reviews, email cleanup (27 left!)
  • What's typeof null in Javascript and other oddities comes up at []
  • More work on the PyGTK release. Wrote dozens of emails to PyGTK-list. Triaged a few bugs, and started checking out what I can do next on Consave.
  • Ran out to Rogerinho's PhD presentation.
04.03.2004 The future and beyond
  • My dad's birthday; phoned him up and he was all happy about the presents he got, which included a Godfather boxed DVD set, and a Rolling Stones documentary (he's a Stones fan ever since I can remember; I have all these weird recollections of vinyl covers with weird people in flares).
  • Did some PyGTK retriage, and some Bugzilla reviewing. My queue has been nicely empty over the past weeks, even if I haven't been writing any code myself. It's tough when you're drenched with work. We're trying out pygtk-2.2.0-RC1; the nice part about it is that ten minutes of RC1 already caught two blocker bugs :-)
  • Did a cleanup to which helped me understand what I had actually done when optimizing AND queries. Code is funny; you get to think very deep, structured thoughts about a very concise section of text. Pretty unique in terms of what a human (in the biological, evolutionary context) is used to, I think, which brings me to wondering why we're good at it. Maybe the explanation, however, is that we're *not* good at it at all :-)
  • My Consave team has done a good job of dismantling itself over the past weeks, so much that I'm finally realizing I need somebody to look after the project if I am to be able to efficiently deal with my other priorities. And the plot thickens:
  • And it's the Debian security updates, the ESR-provided leaked documents, the SCO-provided sideshow carnival of the bizarre and uncomprehensible, and a nice night out to wrap it all up in a blinding flash.
03.03.2004 Adaptations
  • I've spent the last hour or so reading through Larry Lessig's essay on how we lost the Eldred case, up at [] It's a moving account of acknowledged failure, perhaps one of the most candid, intelligent and sad stories I've ever read by someone contemporary to myself.
  • 1 month, 1830 spams caught by Spambayes.
  • Helped Sal6 solve the same problem people had here: [] -- Xvnc was running without a fontpath and certain apps (tnimage in particular) had little squares or boxes instead of fonts (like xchat gives you when you use a font with a weird encoding). Just a matter of making xfs listen on tcp port 7100 (it was excluding tcp listening) and making /etc/vnc.conf refer to it.
02.03.2004 XXX
  • A generally crappy day.
  • Worked on a print dialog for Stoq, found out about lpstat -v/-p/-a.
  • Here's what /proc/sys/vm/overcommit_memory *really* means: []
  • Python's new tempfile.mkstemp is weird. It returns a C file descriptor (an integer) and not a file object, so you need to os.fdopen() around it. exarkun thinks it's because it's stupid, since an open fd already has a mode associated with it (O_RDRW | O_CREAT | O_EXCL | O_NOINHERIT | O_NOFOLLOW). Then again, those modes *should* be compatible with pretty much anything you'd want to do with a new file.. The general problem with the idiom, however, is that you end up with an open file, which forces you to rethink all your APIs that passed around filenames happily. Oh well, passing filenames around was dumb anyway in retrospect.
01.03.2004 The Ides of March
  • If you're looking to buy DAT DDS-4 tape, be warned that the 150m varieties (the 20/40GB kind) cost three times what a DDS-3 tape costs. No idea why, but it's true: []
  • Did assorted hacking on Consave, landing my changes one by one. I have two rather large ones up my sleeve but there's time tomorrow (hopefully) for both. Started work on a smoketest file for Sales, which went rather well I think. I need more of these so I can pester people into testing stuff before releases.
29.02.2004 Sundays aren't.
  • Hmmm. More mozilla history research, more pygtk-web work, some ZODB email, discovered xine (and its bizarre UI) and spent some time helping Vlad out on Bugzilla work. Enough for today, though.
28.02.2004 Saturday's forever
  • It must be that.
    How Do I Keep My Immune System at Peak Performance?

    The answer is a combination of proper diet, adequate rest, reduction of stress, belief in a higher being, moderate exercise, hand washing, liquids in volume and supplementation of the immune response by natural and non-toxic vitamins (NSC Gold recommended) and U.S. Patented MG Beta Glucan in NSC-24 Immunition products including NSC 100 and NSC-24 Respiratory formula. Vitamin A, C and E are known anti-oxidants and immune system boosters; but we need still more.

  • Helped out C. Safferling fixup more addresses. Found searching through [] a great way to keep track of who's currently on Bugzilla, and where all these Netscape people ended up. Part to the foundation, part to AOL itself, part to IBM, at least one to Sun.
  • Did some work on, trying to shape up the developer links, and cleaning up the People page.
  • This awesome extension lets you telnet into a running Mozilla instance and debug it; really cool idea for development. []
27.02.2004 I'm here
  • Email murdering fun-time, down from 170 to a manageable 30 or so. Lots of using the D key.
  • Found all about wget -N, which solved my problems with the pygtk updater. It's a cool flag which tells wget to use timestamping to decide if it's going to pull something or not. No idea why it's not on by default, but for keeping a tarball synced with a remote copy, it's magic.
  • Found out about hypens in front of syslog: []
  • Found out that postgresql doesn't respond to -HUP nicely, and the only way I got it to reopen its logfile is a full restart. I wonder why! Hmmm, I learn about copytruncate and decide to use it instead: []
  • Helped Cristopher Safferling collect addresses from Bonsai for Mozilla checkins over the past year. Involved bonsai queries, wget and some good memory-testing for stale and changed email addresses. I'm amazed that I actually know by name the ~ 200 people checking in from their email addresses. In the process, try and find out what CVS module I should be querying for, and timeless provides me with []
  • Started merging in changes that I worked on over the week. It's a lot of complicated itty bitty changes that require me to be *very* careful. I need to say that I'm lost without a CVS diff.
  • Minor correction for Arturo over at Should remind jdub to fix the autoupdater someday.
  • A flurry of orkut invites came in today. I guess Brazil has woken up to it finally -- but it really makes me cringe at my bad memory; I can't remember some people for the life of me.
  • Helped Jim Gettys sort out a Tinderbox3 installation for Did a short tour of Mozilla's tinderbox facilities, which are really cool and he seemed to enjoy well enough; I wish we had enough time to set up test rigs like that for all the projects. We'd have a killer toolset to go up against the pros -- I really think one of the main reasons Mozilla has done so well because its toolset rocks. That and bz, dbaron, darin, jst, timeless, biesi, ...
26.02.2004 I'm still not here
  • At Consave. Benchmark pr0n:
            ------Sequential Output------ --Sequential Input- --Random-
            -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
       Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP/sec %CP
         4G 32462  94 38347   7 19467   3 32602  92 44841   2 396.4 0
            ------Sequential Create------ --------Random Create--------
            -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
      files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP /sec %CP
         16  3604  96 +++++ +++ +++++ +++  3848  98 +++++ +++ 14857 99
    Never mind the +s I guess. Wow.
20.02.2004 I'm not here
  • I'm in Brasilia -- complain there if you need me.
19.02.2004 New World Order
  • Still sick. Had breakfast at bakery, took dogs for a spin, and sat down and fixed the accel_group bug. Of course, the fix took about 10s to imagine and didn't require anything else apart from a deep understanding of what was happening. I love code.
18.02.2004 Bonk
  • Did random cleanups on the consave tree, but beyond that, tried to pick up what is generating GTK+ critical warnings when we attach accelerator groups. It's not as easy as it seems.
     Gtk-CRITICAL **: file gtkaccelgroup.c: line 188 (gtk_accel_group_attach): 
         assertion `g_slist_find (accel_group->attach_objects, object) == NULL' failed.
  • The error occurs when you try to attach an accel_group to the same object. In this case, the same object is the window that holds the slave, and it's damned weird at any rate because I only try to attach each accel_group to the window once.
  • ISTM that what happens is that the GtkNotebook holds a number of accelerators which, when realize() or something is called, are attached to their current windows. That's not something I can find out from reading the GTK+ source code, but empirically sounds reasonable.
  • I tried tracking down duplicate groups, but to no avail -- the groups I'm pulling *are* unique. I don't see who's creating accel_groups, but somebody is. Weird as hell. Hmmmm, now that I think of it.. libglade! AARGH! Of course! And it's not realize, it's map!
     static void
     note_page_mapped (GtkWidget *page, GtkAccelGroup *accel_group)
         GtkWidget *dialog = gtk_widget_get_toplevel (GTK_WIDGET (page));
         gtk_window_add_accel_group (GTK_WINDOW (dialog), accel_group);
  • It had to be obvious, but it took me some good 5h to find out. And it's actually quite cool: libglade enables and disables the notebook page accelerators according to which page is displayed. What isn't obvious, now, is how on earth do I work with this fact. It's definitely something I can would like to take advantage of..
  • Home early; it sucks being sick and alone at the office. Parting note:
     >>> len(PaymentCatalog)
  • This means that we're growing almost 1800 entries in 7 days. That's not something I imagined would happen!
17.02.2004 It's the third wave or something
  • Back in office for the millionth time. Spent the past days either in Aguas da Prata with Nando, Fabia and co., Pirassununga, Sertãozinho or Ribeirão Preto (take your pick). Nothing much worth mentioning apart from the fact that I have a mildly sore throat. It's been 3 months since I've been sick, so I was starting to wonder whether it would happen.. tomorrow will see. Actually, that's wrong! I was sick over new year's eve, in Rio, so that gives me a 45-day flu interval this time. Damn.
  • No need to wait for tomorrow -- apparently, it's started. Hi ho.
  • Incredibly, did some *more* fixups to make the AutoCombo work correctly in modal dialogs where modality was nested more than two levels high. Took about 3 hours total to figure it out.
  • Big pychecker day, did a thousand little cleanups in the codebase. It's now probably better, though some of the return thingies make you uneasy about the changes required.
12.02.2004 It's like those crocodile head things
  • You know, the game where you have to hit the crocodiles' heads and they close their mouths, and the objective of the game is to keep those puckers shut?
  • I did a boo-boo in the data import and ruined the serial number of, oh, about 4000 bills. So I'm in the process of fixing them, and cursing myself via CVS commit messages.
  • Did reviews and cleaned up my tree in preparation to update Consave tomorrow to a new version with lots of ... new bugs? I must be mad.
  • And in a flurry of news today, scientists claim they cloned humans, the northeast blackout was caused by software bugs, and god damn, the Win2K source code is apparently out in the wild. Slashdot is cruel.
  • Sleep? Nah!
11.02.2004 One down, sorta
  • Well, I finally understood the issues with pointer_grab. The problem is that it needs to be called *before* the popup window is shown, and nobody can have the current grab (i.e. nobody can be modal, or nothing will happen). The only way to have mouse clicks get through to the popup window in my case is to set the parent dialog as non-modal *for the duration of the popup*. However, the problem then becomes that the application windows are then accessible, and this *is* after all a modal dialog.
  • The solution/workaround I found (because I'm not sure what the real solution might be, apart from using a central point to do all entry manipulation, which means pretty much rewriting gtk_entry_key_press, which isn't something I'm entertaining right now) is, for the duration of the popup, remove modality from the window and immediately call a keyboard grab on the dialog, and pointer grab on the popup window, *restricting the cursor to the popup window*. This has the unfortunate side-effect of moving the cursor, but apart from that it's exactly what we want.
  • Special note on owner_events, which had be a bit confused but which I now understand. If I set owner_events to TRUE, only the GdkWindow where the pointer grab occurred will receive events; this is no good because the widget that needs to be clicked upon is a GtkListItem, which is inside a GtkList, which is inside a GtkScrolledWindow, which is inside a GtkFrame, which is inside a GtkEventBox, which is inside a GtkWindow, which is attached to the GdkWindow in question (wheew). It's not at all useful to have the clicks processed by the window -- I need them processed by the list items -- so owner_events must be set to FALSE; however, this has the side-effect of not restricting events to *anything*, which means that the "modality effect" is broken. The only way to work around this was restricting the pointer, which isn't beautiful but works (and is only used for the time the popup window is open). So count that bug as RESOLVED FIXED/2: []
  • The next problem is getting reportlab to flush its buffer when an exception inside it is raised; otherwise, when we print, it stores the pages that had been generated so far! Hmm, this one was a bit embarassing.. for Johan :-)
     @@ -259,7 +259,6 @@ class ReportTable(Flowable):
      class ReportTemplate(SimpleDocTemplate):
     -    flowables = []
          currentY = 0
          def __init__(self, filename, report_name, do_header=1, do_footer=1,
                       timestamp=0, landscape=0, **kwargs):
     @@ -268,6 +267,7 @@ class ReportTemplate(SimpleDocTemplate):
              self.do_footer = do_footer
              self.timestamp = timestamp
      +       self.flowables = []
    message to our favorite "python newbie": never ever ever store mutables as class members.
  • And as a 3am parting note:
     >>> len(PaymentCatalog)
10.02.2004 Easy problems, look elsewhere
  • This has got to be "impossible mission" week. I'm barely out of the IndexedCatalog bustage, here comes the "problem of the day": getting an autocomplete widget to work in a modal dialog. It sounds easy, but it's not: the problem is that the main window is modal (and therefore, has been grab_add()ed via set_modal()) and no events pass through to the child widget. Yes, you can make the child widget modal, but then guess what? The keypresses don't go to the main entry (of course). How to solve this..
  • Apparently, the "easy" solution, which would be doing a gdk_pointer_grab() on the popup window *only for the relevant events* doesn't work -- perhaps because the modal dialog already has an exclusive grab? Havoc's message at [] is enlightening at least, as is the code comments at [] -- I'm trying to understand *why* you would do both grab_add *and* pointer_grab in the same call. It may have to do with children processing events that were intended for the main widget.
  • So I attempted to do a poor-mans version of the thing, just calling pointer_grab on the popup window, and hoping that would keep things modal. No such luck -- I was able to focus and manipulate parent windows. I assumed pointer_grab had worked, but I set a cursor to be displayed during the grab and noticed that it didn't, at all. So for some reason, the pointer_grab doesn't work on the listbox window.
     watch = gtk.cursor_new(GDK.WATCH)
     win.get_window().pointer_grab(TRUE, mask,  None, watch, t)
  • I'm beginning to think that the only way this can work is allowing the popwin to be modal as well, and shifting the keypresses from the popwin to the main window. Problem is, I don't seem to be able to just call an entry.emit() because of the popup window modality -- it gets all the events generated!
  • Perl lovers.. []
08.02.2004 In the land of conflict
  • More bulletproofing. It's quite unfortunate that I have stumbled upon a pretty hard-to-solve issue, which is avoiding an RCE when getting a new oid. During the search for a solution, of course, I've found a (rather unrelated) optimization that cleans up code somewhat, but the real issue is still there.
  • I'm so let down by this that I've began what could be the ugliest workaround ever -- putting up a dialog letting the user know that a conflict has occurred. At least this can be done with minimal impact. But it says with big red letters "THIS CODE SUCKS" and I'm ashamed of it.
  • Had lunch at Mateus' house, though he was so lazy he wouldn't even go for a walk with the dogs with me.
  • Did the regular inbox cleanup, review queue review, pygtk-web whack. Pretty lame sunday, all in all.
  • Actually, it's starting to improve. Towards the end of the sunday I started to realize that I indeed have most of the problems with IndexedCatalog pretty much minimized, and I might have the guts to try out a test this week.
  • Data point: it's been ages since our tape backup has acted up on us. I mean, something like 3 months. Good news or what? Of course, now that the drives are the only things on the SCSI buses, every once in a while one decides to drop out of the RAID array, and it won't even let me do a raidhotadd -- device busy?
  • Ran into an odd bug when calling close() on a connection, which called abort() on a transaction that hadn't been comitted -- it was asserting that one of the objects were None. I was surprised and almost posted a question to the list, and then remembered I do some evil _p_jar hacks in the constructors of Catalog and IndexCollection. Thank god I didn't bring that up in public. The workaround is simply to commit() the transaction once before calling close(), but it just goes to show how hacks go a long way.
07.02.2004 Conflicted to death
  • I discover [] and my life as a reviewer changes. editdiff was another pretty interesting one for producing hacked patches.
  • Found out that you can pass in an integer flag to diff (i.e. diff -5) as shorthand for how many lines of context. The interesting issue here is that a "diff -1" produces more hunks, which means it's better for merging, and that diff -5 produces less hunks and more context, which means it's better for viewing.
  • It's time to delve into ZODB conflicts and how I can help when they blow up inside IndexedCatalog. I've been putting this off for a while so I guess I should have known it would pop up. Let's walk through this slowly.
  • First knowledge that's priceless when handling conflicts is grabbing objects by their oids. This is the right way to do it:
     # You got
     # ZODB.POSException.ConflictError: database conflict error (oid
     # 0000000000000022, class IndexedCatalog.Object.FieldOptions)
     from ZODB.utils import p64
     oid = p64(0x22)
     print conn[oid]
    IOW, the oid you get back is actually a hex number that needs to be string-packed into a format the connection understands. I think this if FileStorage-specific, but let's move on.
  • First thing I found out was the my FieldOptions are getting updated every time autoincrement_fields is called. Not good. Fixed :-)
  • Another random note: the xxBTree classes in the ZODB have empty __bases__, as do the related Set and TreeSet classes.
  • Hit a segmentation fault in ZODB-3.2, related to RCEs in a BTree. Can't track it down right now, so I store the whole IC tree and move on.
  • Hmmm, seems that my buffer trick is slowly getting to work; pretty amazing that it involves so few changes to only one file.
  • Actually, I realize there are a couple of snags to my plan. Snag A was one I was counting upon, of course: queries and dump() and has_object and len() won't work before flushing the buffers. We also have the problem of type checking -- today the checking is done upon insertion; it would need to either be changed to be done at flush time, or some up-front checking in combination with buffering.
03.02.2004 Sleepless in São Carlos
  • [] was useful.
  • Suffered with reportlab. This makes me realize it's not an easy time in my life.
  • Off to Consave again, just my luck.
02.02.2004 A new beginning
  • Wish I had been wiser about [] a couple of years ago; as it turns out, I was led there by PEP 327, which has just been published: []
  • This weekend I did some gardening. While doing some minor hedging, I poked a thorn into my right hand's middle finger's tendon. The thorn -- apparently, at least -- came right out intact. However, the joint's now red and swollen and it hurts to type. Moving the whole hand seems to hurt, which suggests to me just how much your fingers need to move to keep them from rusting -- my dad broke a finger a while back and he's still unable to close his hand completely.
  • It's a damned gloomy weather forecast when the next 7 days have rain and thunder predicted.
30.01.2004 Finally, "Users".
  • I've been sequestered for the past 10 days at a client site putting up Consave 0.9. This means back-to-back 19-hour days, SQL database debugging and filtering, and lots of bad meals. It also means that for the first time in quite a few months, I have some real users to worry about. Or enjoy, as that's the attitude I've adopted now. :-)
  • First day back in office feels great, but it also feels short. It's midnight and the readjustment index updates are still not quite finished. But how can I think "finished" when my logs tell me that more than 200 Sales need to be manually checked and adjusted?
19.01.2004 Mars needs women
  • Great weekend over at Fabia's in Pirassununga. Part of it being so great was that I biked there and back (about 90km each way), and part of it was that the birthday wasn't a disaster as planned!
  • Hacked around Consave. We've got a new intern this week at Async, Diogo.
  • Early in the office finishing off the database imports that I started last night. Amazingly, this one took a whole night to run and never finished! Pinazo took care of it, as usual. But this is getting to a scary point:
     >>> len(PaymentCatalog)
    Almost at the turning point!
  • Is a better world possible? []
  • I had to look up this page again, so I'll keep it here: Jeremy's hints on Python and GDB []
  • Lots of Consave fine-tuning and hacking. It's not looking all bad, I tell you!
15.01.2004 The Dodo Hacker
  • Day started out a complete mess -- flat tire, unworkable bank, time utterly wasted on phone -- and evolved into something more acceptable.
  • Worked a hard on the data import issues we have pending, and did some serious updating of the customer installation. This is really the tipping point for this project -- scary when it happens so late in the cycle -- where I can finally face my fears and understand whether this bird is going to fly or not. If it's going to pull me an albatross -- put me the way of the dodo. The database imports have been *scary* stuff, but we all knew we were running into 100,000+ payment catalogs, and we (perhaps naively, but bravely) shrugged it off to "premature optimization".
  • The interesting thing about this part of the story is that I'm not sure if this *does* qualify as optimization done at the right time or not. Can we always say that using an interpreted language up front fences the idea that we should not optimize beforehand? Or are there certain dead giveaways that you *need* to optimize up-front? I get the feeling there must be.. but I'm not sure. The design decisions I made for Stoq have always been respecting a holy priority: First, Ease of Development (essential when you're a poor 3rd world company); Second, Ease of Maintenence (essential when you want a long-lived product that is actually maintainable by a poor 3rd world company); Third, Usability (which is really the purpose of all of this). Sometimes this sounds like a very sensible trio, but sometimes I worry to death that I forgot that this thing needs to run.. hopefully fast enough to avoid murdering our Third priority outright (we all know the horror stories Nielsen published about expected reponse time).
  • So a thought for tonight: is optimization a matter of tweaking the hotspots, improving data structures (which may be hard to change non-trivially given that they tend to be really used throughout the codebase), or placing progressbars in the right spots? $50 bucks to the best answer.
14.01.2004 Strangedays
  • Did some work on bugzilla-submit since esr wants to use this actively as a part of fedora's package submission process. Still hung up on compatibility cruft, though. I guess the proper thing it to hang on to the config.cgi validation until 2.18 is released, since before that not enough instances will offer the required functionality.
  • Found out (via spam-br) that a notorious whacko that shot against folks in a movie theatre during a screening of Fight Club (murdering 3 in the process), Mateus da Costa Meira, was a notorious spammer before pulling a kaczynski. I guess this says a lot about what fine folks spammers turn out to be, grandmothers nonwithstanding. Good riddance.
  • Depressed myself at Terra's headlines. Today they stated something to the effect of `a participant in a recently-started "reality show" has already shown her titties on the first day of the show'. Why am I constantly being subjected to such crap? Fuck television.
  • On a happier note, I discovered [] and spent some time trucking through it.
13.01.2004 [Not] Paris Hilton Porn is Googlewhacking Deluxe
  • Holidays are fun things, but coming back to work takes a lot of guts. At least that's how I feel every time I take a break from work. I guess that's the hardest part of working doing development; the concentration and involvement required obliges me to work like a cabin recluse for weeks on end -- and interruptions are murderous. Perhaps similar to how Neal Stephenson writes when he describes *his* productive barriers, I am constantly aware of how much immersed in my work I need to be to function optimally. Even lunch is an unwelcome distraction, often.
  • Using 32768 as an NFS rsize/wsize for a mount option makes things *slower*, apparently. At least a random bonnie tells me that the block speeds are around 30% slower than a previous benchmark. I've jumped back to 8192 and the speed is actually noticeable. Weird, but here are the numbers.
            ------Sequential Output------ --Sequential Input- --Random-
            -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
       Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
       496M  8215  86  9197   1  9972  11  8982  98  7126   6 740.4   6
            ------Sequential Create------ --------Random Create--------
            -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
      files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
         16   774   2  5596  10  2805  10   754   2  5904   8  1443   4
  • Rebooted the server and ensured the SCSI driver for the Adaptec 29160 is 6.3.3. I noticed later that this is returned when looking at /proc/scsi/aic7xxx/0 -- unfortunately, too late to have checked before rebooting. I would really like this to be a simple driver bug, but I'm pretty sure that the controller is acting up somehow with the drives, cable or terminator. And it all happened in the same week. Let's see how long till we have a problem again.
  • The saddest part is killing the 50-day uptime anthem was running :-(
  • My Inbox has 60 messages (the sane level again); however, each one of these requires some attention, and a few are serious projects. Let's see how I progress through these over the week.
  • Maybe I'm being silly, but I just found out I'm the #1 kiko this cycle of the google dance! Die [] die!
  • Did a major cleanup of my homedir, but I'm still topping out at 800MB, which is a tad too much IMHO. I should try moving all these PDFs and PS files into a separate directory..
29.12.2003 Spaceboy
  • We seem to have a busted SCSI drive on Anthem. It's just a sector failure, but the logs seem pretty clear that this is not a driver problem:
     Dec 27 00:02:39 anthem kernel: (scsi0:A:9:0): SCB 0x4f - timed out
     Dec 27 00:02:39 anthem kernel: sg[0] - Addr 0xb219000 : Length 4096
     Dec 27 00:02:40 anthem kernel: sg[1] - Addr 0x30b89000 : Length 4096
     Dec 27 00:02:40 anthem kernel: (scsi0:A:9:0): Queuing a BDR SCB
     Dec 27 00:02:40 anthem kernel: (scsi0:A:9:0): Bus Device Reset Message Sent
     Dec 27 00:02:40 anthem kernel: Recovery SCB completes
     Dec 27 00:02:40 anthem kernel: scsi0: Bus Device Reset on A:9. 64 SCBs aborted
     Dec 27 00:02:40 anthem kernel: SCSI disk error : host 0 channel 0 id 9 lun 0 
                                    return code = 8000002
     Dec 27 00:02:40 anthem kernel: Info fld=0x4005, Current sd08:1c: sense 
                                    key Hardware Error
     Dec 27 00:02:40 anthem kernel: I/O error: dev 08:1c, sector 7340520
     Dec 27 00:02:40 anthem kernel: raid1: Disk failure on sdb12, 
                                    disabling device. 
  • Some discussion on related stuff (including termination problems, which doesn't seem to be the case here) at []
  • Ran into a Bugzilla problem today:
     [Mon Dec 29 10:01:36 2003] attachment.cgi: DBD::mysql::st execute
     failed: MySQL server has gone away [for Statement "INSERT INTO
     attachments (bug_id, creation_ts, fil ename, description, mimetype,
     ispatch, isprivate, submitter_id, thedata) 
     [Mon Dec 29 10:01:36 2003] attachment.cgi: VALUES (585,
     now(), 'Gia 0730 DOS.doc', 'Orientaes para alterao do
     Lay Out Gia 0730', 'applicati...
    when attaching a large file to a customer's Bugzilla. It *seems* to be related to Bugzilla bug 91664: Bugzilla does not enforce a maximum patch/attachment size.. Bradley says that 2.16 will give a sensible error message here: [] but I haven't run into it yet. Hopefully it's just a matter of fixing something trivial.. it could be just the fact that I need to fix my my.cnf file:
    Administrators can now configure maximum attachment sizes. These should remain below the maximum size for your MySQL server, or you will get obscure MySQL errors if you attach a bigger attachment.

    To find out the current size attachment that MySQL can accept, type the command 'mysqladmin variables' and find out the value of the 'max_allowed_packet' varible in bytes.

    To change the maximum size that MySQL can accept you can alter this variable in your 'my.cnf' file. (bug 91664)

    as the Bugzilla release notes tell me: []
  • The most amazing stuff happens in Pythonland, it seems: []
  • And the forecast for this new year's eve in our chosen destination: RAIN [] RAIN [] RAIN [] . Hey, at least this year I don't have a car for people to steal: []
23.12.2003 Taint
  • Found out that VMWare's vmmon.o taints your kernel, which is why my is complaining that it's out of sync with vmlinuz. Interesting that is only started since the last reboot or so.
  • Ran into a
     DeprecationWarning: integer argument expected, got float
       return DateTime(year, month, 1) + \
    which matches []
  • Found out someone contributed a Brazilian translation to Bugzilla right under my nose: []
  • Moving out to Brasilia for the boring season.
22.12.2003 Blame it on Canada
  • The next time somebody tells you that software projects are always late, and that we software engineers as a profession are a display of bumbling incompetence, remind them of The Big Dig, five years late and billions of dollars over budget: []
  • I guess Murray *really* wants us to be a part of the Gnome Platform Bindings release set: []
  • Kicho, Renato and Zuardi made it, which means they, too, will shortly be going through what I finished not very long ago: []
  • Recompiled Python to 2.3.3. Interesting that I finally found out that Modules/Setup doesn't need to be hacked up if you don't want the relevant modules compiled in statically (wow).
17.12.2003 Refocusing
  • Made numerous copies of my keys and spread them once more through the more trustworthy people I know (me excluded).
  • Became interested in Mozilla bug 3247 []
  • Compiled some inputrc bindings so we have functional keybindings for Home/End and Ctrl-Left and Ctrl-Right in our bash prompts:
     $if mode=emacs
     $if term=xterm
     # rxvt
     "\e[7~": beginning-of-line
     "\e[8~": end-of-line
     "\eOc": forward-word
     "\eOd": backward-word
     # xterm
     "\e[0F": beginning-of-line
     "\e[0H~": end-of-line
     "\e[5C": forward-word
     "\e[5D": backward-word
     # the console generates the same code for ctrl-left and left, so I can't
     # provide bindings for it :-(
     # Works fine
     "\e[3~": delete-char
     "\e[2~": quoted-insert
    -- using ctrl-V works wonders to actual discover these silly keycodes. Please don't ask me why I prefer emacs bindings for emacs but not for vim, that's not something I'm at the liberty of discussing.
  • Finally merged in the IndexedCatalog branch Sidnei and I opened ages (it seems) ago. The trunk has some nice goodies :-)
16.12.2003 My Keys Reappear
  • It's amazing, but my keys have reappeared in Brasilia, and then Nando tells me that he has a working set! Nando rocks the system!
  • ZEO/ZODB research into authentication bustage. Now somebody needs to explain to me how I'm getting logs from my ZEO server it I don't have EVENT_LOG_FILE set. Hmmm? Let's give this a try. Hint: []
  • More ZEO research suggests a bug in, but I can't pinpoint where it is, so I bet Sidnei 5$ he can't fix it instead.
  • So Sidnei explains to me the particulars of
     import pdb; pdb.set_trace()
    and with a couple of well-placed prints, I have a tentative fix posted to ZODB-dev (ready to be ignored by all the regulars!)
  • Did some reviews and email catchup. Did some ext2 -> ext3 upgrades, and suffered with the Linux Desktop. The day seems to have flown buy unnoticed.
15.12.2003 Mondays.
  • Misripped Blag Grape's Kelly's Heroes in my latest ogg compilation CD :-( -- basically, all Black Grape songs were overwritten by Primal Scream songs, which may or may not amuse you depending on your taste for music.
  • Had a pretty crummy bus ride home. The bus driver missed an important turnout and ended up losing about an hour, which was further worsened by the need to swap busses after he busted the transmission while attempting to turn the bus around on a very narrow road.
  • I also left my keys behind in Brasilia, so I am temporarily homeless.
  • Fabia's home was robbed over the weekend, so I'll be staying with her tonight -- she's planning on moving out tomorrow, though it being Fabia, what's planned rarely is.
  • Spent an hour trying to get ZEO authentication working again. Failed. Mondays!
12.12.2003 Size Matters
  • Found a *very* interesting page on read-only root filesystems by Thomas Hood at [] -- it's really cool to see all the solutions I banged my head about presented in a coherent way.
  • Brazil's Caixa Economica Federal has scored the fourth largest OLTP database in the world:
     Organization		DB Size	DBMS	Arch.	DBMS	System Storage
     Caixa .E. Federal	6,914TB	CA-IDMS	SMP	C. Ass.	IBM	EMC
    Go caixa! []
11.12.2003 Backlog murder!
10.12.2003 The Need for Speed
  • Lots of random hacking all over the Consave tree. We're getting close to good now, it feels. A lot of performance work remains to be done, though.
  • I suck at sed. Really. Every time I need to do something at it, I feel like crying. I want to add a line to the beginning of a number of files *if* the file doesn't already contain it. In this case, it's the string "*.pyo". I ended up doing a mix of for and sed with a grep and an mv thrown in for good measure. *sigh*
     for f in `grep -rL "*.pyo" .  | grep .cvsignore`;  do sed '1i\
     ' $f > $ ; mv $ $f ;  done
  • From over a year now actively using the ZODB as a primary database I've been able to gather some experience on how it works, what it does fast, and what takes ages to do. So lately I've been working on query optimization, which is a fun topic and gives users back a lot of time if implemented correctly (sadly, at the expense of a lot of developer time).

    Now in IndexedCatalog we have a very simple approach do indexing: keep [ZODB] BTrees that map attribute values to OIDs [we used to map to the instance references themselves, but Sidnei had the insight in proposing the change]. This works well for many types of queries, but we end up being bound by the time it takes to unghostify the instances from the database.

    So very consciously we've always tried to build the UI in a way that the user could get easily to the specific data he wanted, without needing to parse long lists (which would take a long time to generate). Our applications have great browsing, search and filtering interfaces, and these really help here. However, even when returning few objects, certain queries take a long time to run -- in particular, boolean queries that are composed of subqueries. If one query is fast but another query takes a long time, even if we're only going to return a few instances, we are bound by the time of the sum of the query times, which is at times a lot.

    So one thing I've been working on is improving this. I have a particular problem which generates slow queries -- certain queries we need to do end up returning lots of items by definition; in particular, queries for an object's status, which is usually a flag, and for which there are only a few possible values, end up returning *many* instances, which is slow. Boolean flags are even worse, and for statuses that assume boolean values which have equal distributions, we are often returning half the objects in the database for a single query.

    Now this problem in itself is very hard to solve, since we're bound by the time to unpersist the instances. However, it's only rarely that we do a query by status alone. No, usually we query for a status together with a filtering attribute -- a string, or a date, or a certain subobject. This filtering part of the query usually returns very few instances, and herein lies the key to my proposed technique.

    When we are doing boolean AND queries, IC normally performs both queries and then intersects the results. Beyond exploring potential paralelisms here (we could run both queries simultaneously, in theory) there is an interesting optimization to make: when running a filtering query, one of the sets is small, which means that the possible result set is going to be small. This is perfect for my flag query -- if I could make the flag query only search through this subset we could make it run really fast.

    Turns out this is possible (tough with our current indexing system it's not ideal). What I've currently implemented unpersists all objects returned by the first query and generates a temporary index, and runs the second query *on that second index*. For small sets, this runs at 10 time speed improvements, which I'm of course happy about. But unpersisting the objects is still required to grab the attributes -- I don't have an index that maps from OIDs to attribute values.

    However, the fun part is that, if we *had* these reverse mappings from OIDs to attribute values, I wouldn't need to unpersist the objects -- just grab the values and use them as keys in the temporary index. I've been talking about reverse indexes with Johan for a long time now, and hopefully I'll have time to implement these in the future.

  • Another optimization note comes from trying to pull *all* the OIDs in a certain index. As our indexes map values to sets of objects (which is obvious, since many objects can have the attribute size set to the value "3") we end up having to join all the sets to get a sequence of all the OIDs. [Of course, we have a separate index for the objects, but we don't have a list of all objects that *have* a certain attribute; we don't index None, currently, though I have a mind to see how much would break if we started doing so.] Now the interesting part here I've found is that going through the keys of a BTree is not slow at all -- it's quite fast. Queries that do sequential scans through all the keys normally run very fast. However, joining the sets of values can take a *long* time -- even using multiunion, as I reported yesterday. So I'm going to need to add an index, or do something smarter with ours, if we're to run these queries fast.
  • My optimization list right now includes simpler indexes for unique fields, optimized boolean queries, and optimized range queries when both ranges are bound (i.e. 3 <= foo <= 5), which should take advantage of both the max *and* min attributes to BTree.keys(), but currently use only one.
09.12.2003 Gnome.orginess
  • Moving to put an initial version of up on a server, which means taking care of finding out how to organize the site templates, and getting account for people that need to work on the website. Had a hard time getting information about the CVS account policy; mostly, it's described at [] but the link for online password script at [] came from []
  • Ran into an interesting discovery after futzing around with IndexedCatalog for hours trying to optimize queries for None. I ended up posting to ZODB the following blurb:
    ISTM that, when accessing a persisted BTree that holds Sets as its values, using multiunion (I've tested in particular with IIBTree's version) has no significant speed advantage over using a list comprehension to glue the sets together. IOW, assuming tree is a yet-to-be-unpersisted BTree with a large number of items stored,
    takes about the same time to run as
     [value for set in tree.keys() for value in set] (*)
    My hypothesis is that even though multiunion() may run a bit faster, we're bound by the retrieval of buckets from the persistence mechanism, which is [comparatively] slow.
  • Found out that Jeremy put up Tim's general ZODB tips in a reply sent to the Chandler folks at [] -- these notes are really interesting if you want to grab a hold of how the trees work internally.
  • Fixed a Kiwi buglet with accelerator groups that Rico pointed out to me today. Easy!
  • Did some major IndexedCatalog hacking to get it to optimize boolean AND queries. What I do is a bit evil -- I generate an index on the fly based on the results generated so far. When you think about it, though, it makes a lot of sense -- if only our indexes didn't make it so hard to actually do the subsetting. As it is I need to instantiate all the objects, pull their data, create an index on the fly, and query it. The cool part is that for small sets it's a *lot* faster.
  • Found out that Python's sort doesn't support latin-1 characters by default -- you need to use something like locale.strcoll to evaluate the strings (with your locale set correctly). But much worse than that is the fact that the CList *doesn't* support it, period!
08.12.2003 Boozing in code and bugs
  • A couple of busy days have gone past.
  • Was requested to pull some stuff from backup today. Logged onto the backup host and issued at:
     cpio --no-absolute-filenames --extract --format=crc -F/dev/st0 /etc/foo
    -- waiting to see if it works (started 18:43). Wow, it's still reading, at 20:57. Hmmm, I wonder if it wasn't *VERY* slow because I didn't specify a block size to read, hmmm? And where did the file go? WTF?
  • Added some logrotate love to mozbot and mailman to avoid filling the server drives with junk.
  • Ran with Gui, but it was sticky slippery hot and I was still really tired from yesterday's bike ride.
  • Bugs bugs bugs and more bugs. My life is a blur of bugs filed and fixed.
05.12.2003 Mucking around in bugland
  • Did minor fixups to Consave. Suffered tried to bring a file in the repository back to life -- turns out what was wrong was a state: dead instead of state: Exp. Simple file formats rock.
  • Who's the current "miserable failure"? []
  • Mutzed around with tempfile.tempdir after my ZODB commit(1)s were blowing up because /tmp was too small (!).
  • You know it's time to sleep when everything seems to be a Pynchon conspiracy:
     AssertionError: <Lot (49: -1251674100) at 1082031664>
04.12.2003 It's fry day again
  • Finishing up the patch for bug 840, with Johan's help. I learn I've messed up with reference counting again: PyList_Append() adds a reference to the item added, so we need to Py_DECREF everything being added to a list. A cleanup here, a comment here, and finally accelerators work in slaves! w00t!
  • Interestingly enough, not all mnemonics seem to work as expected. We have forms with quite a few controls in them, and it seems that at least B, F and D don't work consistently. Why? Aha! [] points out that these are used for per-word navigation/manipulation inside text fields, which is why they don't work when you have an entry selected. This sucks, but it's one thing that seems to be fixed in GTK+ 2.0. Yes, the port, I know..
  • Moved a bit with the thing. Spoke to Owen over at #gtk+ and he was pretty happy about it, and suggested I write to gnome-sysadmin to try and get someone to set it up.
  • Minor survey of my saved spam places me at 20 spams/day over the past two months. This means spam that managed to get through the fascist blocklists we're using -- those stop 150/day on average, 50 of which are normally addressed to me. That adds up to 70/day, which is not bad.
  • Cancelled my ISP account with Terra, now that the guys are moving out from the other apartment: 20105413
  • If you won't do it for me, do it for the kittens: []
  • On the trail of W.A.S.T.E.: []
  • Oh, this is f*** ridiculous. I'm the last link at "top anal position sex tips"! []
04.12.2003 Distilling Existence
  • I've been re-reading UML Distilled since I've been lately thinking about documentation and diagrams -- it's such an awesome book.
  • Massive breakin spree tells me that I should update my kernel and avoid the do_brk issue. Sighed and signed up for debian-security-announce at []
  • It always bothered me that Debian reniced X to -10 (which shouldn't really be necessary for kernels with a decent VM). Colin Kolivas has an entry on this in his (mostly hodgepodge) FAQ: []
  • Smashed the unreviewed sites on the Rio de Janeiro category at [] to a bare 50. That's a 50% improvement!
  • Funny how these things are. I've been putting off fixing Kiwi bug 840, which basically involved some C hacking to pull the AccelGroup from a SlaveView's toplevel window and attaching it to its parent window upon attach_slave. Tonight I was really considering going home, given that I'm tired and a bit demotivated. But somehow I decided that some PyGTK hacking would be cool, so I sat down, and in 1 hour solved it in a clean way. This was a major usability bug in Consave, and it's *really* nice to see it solved! If only Johan could review it for me now..
03.12.2003 Shikata Ganai
  • Why do I find myself drawn to these weird facts? The Web is a bizarre place. Today's pseudo-random bit of information is that, in Japan, the birth control pill was only recently legalized, and that abortion is one of the main means of birth control (over 350 thousand in 1994 alone: [] -- though it seems to pend to anti-abortionism, it's an interesting story).
  • Read a bit about NFS and `found out' that the *server* NFSSVC_MAXBLKSIZE is hardcoded to 8K, which means that these silly rsize/wsize mount options have no effect if you don't change and recompile your server's kernel. Most interesting discussion at [] and, if I get a chance to do this and benchmark, the file to hack is:
     include/linux/nfsd/const.h:#define NFSSVC_MAXBLKSIZE    (8*1024)
    Would be fun to find out it's significantly faster, though I'm not sure our server has enough unfragmented memory to take it over time. For the record, I'm seeing 498317 RPC calls, and 139 retransmissions on a random diskless client which has been up for 5:30h, which means we're retransmitting less than 0.03% of the time.
  • (Amazingly enough) I discovered mbmon and xmbmon, which allow us to check the temperature of our motherboards *without* patching the kernel! I can't believe I've taken 5 years to discover this, but that's how things are in OSS. I have *no* idea how noone has noticed and plugged this before, but to anybody wrestling with kernel patches for lm_sensors just to check out temperatures, take a look at [] and enjoy -- it's just a (./configure; make) away.
  • As always, Gustavo Niemeyer rocks: [] teaches me about os.path.commonprefix, which should be useful pretty much anywhere, not just for paths.
02.12.2003 Play it again, Sam
  • Finally managed to watch the entire length of Casablanca. No, it's not long, I just kept being interrupted. It's actually quite interesting; I initially thought it would have been slow and a bit too much for 1am, but I was wrong -- it kept Fabio and I enthralled. Bogart is as always the cynic, and it was fun to find the whole Maltese Falcon set rearranged into a completely different movie. "I think this is the beginning of a beautiful friendship." A cool remark on this is that a Brazilian, João Luis Albuquerque, edited the ending and screened it at the Rio Film Festival in 1997; in this version, Ingrid decides not to go and stays with Bogart, in Casablanca. 5$ for a DivX of that ending!
  • Johan reminded me of the diff for the recent do_brk bounds checking fix that was the means by which the Debian servers were exploited [] -- lifted it off bkbits, he did: []
  • Spent the morning doing Bugzilla and Consave reviews, and realized that we have a problem when deciding if a certain product is paid for. Discussed at length the issue with Pinazo but we're still not happy with how it looks, given that it's going to bloat us for a very slight change. Slight, but essential.
  • Hacked around Kiwi bug 818, and it's not as ugly as I thought now :-)
01.12.2003 It's that time of the year again
  • Last month to go!
  • Did an experimental change on our server, linking the diskless /var/cache/apt archive to the server's main archive. This way I get to do only one apt-get download; the next one has the packages already downloaded for free. I'm not sure this will work correctly if I run two apt sessions in different boxes, but that's not very important anyway :-)
  • Backup was blinking dirty again but the backup rolled out fine.
  • Hacked a lot of Bugzilla, did the usual reviews.
  • Did the aforementioned 10k race. It didn't go as fast as I planned (a disappointing 46'), but the course was a hard one and it was hot as hell. I got a blister on my left toe but it healed up a couple of hours later -- cool that it was nothing severe. Next year I should be clocking under 40" if I get some decent training done; this year was just too hopelessly busy.
  • Also had assorted fun around the weekend with Michy, Sal6 and Cadu -- visited Cadu's 88-year old (twin!) great-grandaunts, had a nice long walk around São Carlos, good Sunday post-race lunch, and a really rainy trip to Ribeirão Preto (fallen trees everywhere, much of the trip done under 60km/h given the lack of visibility, and yet I survived).
  • Today, for the first time since I've moved the backup device to the new box, the backup failed. The tape light was blinking dirty when I picked up the tape this morning, so maybe that's the reason why. Stay tuned.
  • Backported an annoying problem in Mailman's checkdbs script which kept complaining when it ran into strings with non-ASCII characters. It's a known bug, of course [] so all I did was backport the fixed code from the CVS version on [] -- I had already checked this out and was applying band-aids instead, but sometimes you just gotta go ahead and do the job.
  • Did an exhausting bike ride from São Carlos to Descalvado with Osv8, all 70km of it uphill and downhill (they apparently didn't like flat sections out there). My road bike has some massive gears, and pushing them up the 500th slope made my legs feel like lead. At a point I got so giddy I had to stop and giggle with Osv8 about our condition, at which point I dropped my water bottle and had a hard time retrieving it from the ground. Stopped at the farmhouse, picked some acerolas, made juice, and did a 15m pasta run that left us both rested enough to tackle the remaining 5 uphills. São Carlos is fun.
  • When I got back, I found out that Pinazo got bitten by world-famous bug 818! :-)
27.11.2003 Apocalypse Now
  • Woke up to the sound of a telephone ringing. The telephone contained a message from my sister that suggested her hard drive had broken. Half-dazed, I stumble to the bathroom and find it's flooded; a pipe has cracked and will need to be substituted. I walk out to fill my bike's tires and my bicycle pump leaks air through some unfindable joint; the handle pops off when I try to pull it back up. I get to the office and one of the dogs has eaten parts of the fence. A client writes to tell me Bugzilla isn't working over there. See the pattern?
  • Part of the client's problem has to do with the fact that some very large files are being pulled over for backup from another box -- they end up filling our precious /var. The twist is that these files are only available for retrieving via HTTP, and I naively used a plain wget -r to take care of the issue. I ended up writing a Python program this time to parse the Apache DirectoryIndex output, which avoids grabbing duplicate files and therefore should keep us all sane. I wish somebody had written a good HTTP directory parser, but I guess the existence of Webdav puts off anybody from doing the long haul.
  • In a bizarre twist -- since I actually decided to make an effort to prepare for it -- the race I had scheduled for 12/12, [] was postponed to February!
  • I finally managed to get Sidnei to remind me how to move back to the INBOX: just use the exclamation point when issuing a "c" to change folder!
26.11.2003 Owna Chroma Diploma
  • In the morning finally managed to request my MSc diploma from USP. It cost me a bundle, and I'm sure I'm going to regret it as soon as I grab hold of it, but what the hell. Also signed everybody up for the 10k race and shelled out what money I had left over. It's frustrating to be poor again.
  • Had some great lunch with Renata. Food in Brazil is usually good, but this was just great (pancakes and all!) We discussed family sports and the topic of the English Channel (or La Manche) came up. Gustavo speculated it was 40km wide, but it's actually more like 34: []
  • Googling is sometimes funny. While researching for the last item, I ran into something I never knew: Brazil had a *very* famous long distance swimmer in the 50s and 60s, Abílio Couto. This guy is the brazilian who broke the most swimming world records, and he's got stuff like 3 English Channel crossings, and a Gibraltar strait crossing under his belt. Incredible stuff: [] and [] (pt_BR) list the feats and tell a bit about him. There's this tidbit: 98km across Lake Michigan in 42 hours. He passed away in 1998.
  • And, as the final WTF entry of the day, a human-powered *airplane* that also did the English Channel: []
  • Did some random Consave hacking to make it Python 2.3-capable. This has mostly to do with fixing up encodings for PEP 263 [] and fixing up fallout resulting from the use of the boolean True and False inside IndexedCatalog and Kiwi. IC's problem was particularly interesting because I had to tackle SimpleParse's grammar and figure out how to get variables *not* to match "True" and "False", since the symbols could potentially conflict with variables named True and False. This involved some reading through [] and figuring out that the ?-FOO modifier indicates exclusion, and is what you can use to manually disambiguate a grammar like ours.
  • Late-night Bugzilla checkins, and home-boy!
25.11.2003 Catching up
  • Michy and Cadu are coming over next week for the yearly 10k race in São Carlos [] so I bought them tickets. Well, sorta bought their bus tickets -- it consisted more of throwing a wad of money over the counter and telling Marcio at Real Expresso to take care of things as my bus home was departing in a fraction of a minute. I didn't miss it.
  • Sal6 is coming for the race too, w00t! Subscriptions are up at a webpage: [] and a nice map of the 10k circuit is at []
  • Read through email (my friend D was there all the way!) and sized it down to a manageable 33 messages, which will be further trimmed. Thankfully the PyGTK FAQ seems to be soaking up all questions to the list and I have only 2 messages to go through today. Also did a news, weblog and tinderbox update read, and picked up the subliminal information on the world of OSS that is what gives me an edge over less informed ninjas of the 3rd world (or something).
  • Did the final reorganization of the backup box, and it now holds the CD burner too. I was deciding if I should place a hard drive on it, but I suppose the network is fast enough if we're doing tape backups over it at a rate of 5G an hour. Time and potential coasters will tell!
  • Dumped an audio CD to burn using cdda2wav. Salgado pointed it out to me, but it was really 'man cdrecord' which did the trick:
     kiko@manonegra:~$ cdda2wav -v255 -D0,0,0 -B -Owav
     Type: ROM, Vendor 'CREATIVE' Model 'CD4020E ST980807' Revision '1.00'
     cdda2wav: Warning: controller returns wrong size for CD capabilities page.
     724992 bytes buffer memory requested, 4 buffers, 75 sectors
     Read TOC CD Text failed (probably not supported).
    and on goes the rip. It's fast, but of course not as safe as cdparanoia. Then you just need to use the -useinfo and -dao flags to cdrecord, and [hopefully] be happy with the result.
  • A set of reviews for a lot of good work by ole Pinazo.
  • Did some LaTeX hacking. As always, I forgot how to change the title of the Abstract section.. aha, \redefinecommand{\abstractname}{foo}!
  • Did a run of chkrootkit after the Debian compromise (following [] mostly) and it came out a nice blank.
  • Email down to 21, and now it's mostly reminders of things I should do but haven't done yet. Of note was the announcement yesterday of the kernel tinderboxes to lkml, though we don't have a lot of attention yet.
24.11.2003 Another Weekend in the Capital
  • Spent a few days in Brasilia, taking care of my Grandmother and getting into random family fun. Ran a 10k with the family out at the park. Ran a 20k with my mother over the new bridge, the last 5k or so done at a blistering pace. My foot still hurts somewhat, but I suspect I'll live through it.
  • Among other random events, I interviewed a couple of people for my mother for work, and I reckon we're a good team altogether for finding out odd personality quirks and hidden abilities. Some are so hidden you almost need to twist people's arms to get them to talk -- you'd think that people interviewing for a job as a salesperson would be eager to put up every single time they've done work in the field, but apparently there's some sort of secret cabal that has ordered it's forbidden to speak of previous work experience when interviewing with someone wearing shorts and earrings.
21.11.2003 Mucho Maas
  • Got some funny bugmail from Tobias on a bug I fixed at [] :
    Thanks for the fix. This looks really looks like a:


    <jargon, programming> /shroh'din-buhg/ (MIT, from the Schroedinger's Cat thought-experiment in quantum physics) A design or implementation bug in a program that doesn't manifest until someone reading source or using the program in an unusual way notices that it never should have worked, at which point the program promptly stops working for everybody until fixed. Though (like bit rot) this sounds impossible, it happens; some programs have harboured latent schroedinbugs for years.

    Compare heisenbug, Bohr bug, mandelbug

  • Bought some crap downtown and had lunch with Jorge and Jurandy. Ah, which a great day when you get to run around town on foot and buy stuff :-)
  • Interviewed a nice chap for work.
  • Experimented a bit with Python 2.3 and our system. The funniest bit are the warnings for PEP-263: [] but most of it works as expected, which is great. Oh, okay, so Kiwi broke column sorting. When a butterfly sneezes in Khartoum, Kiwi column sorting breaks. It's not news.
  • Did a lot of something, but I can't really say what. Oh, not that it's a secret. I just can't remember :-)
20.11.2003 Same Ole Same Ole
  • Put up the remote DAT backup document I was writing: []
  • Edited the Async wiki to update changes over the past month.
  • I feel I'm actually starting to understand Perl :-)
  • Ran with the dogs, and at night did some serious trampolining at a gym closeby; I managed to do some pretty evil somersaults. Strangely enough my foot is busted from the run today; maybe my shoes were too tight on.
19.11.2003 Special-cased to death
  • More perl hacking. Studied and finally understood how namespaces and package imports work (down to the :EXPORT and :DEFAULT details). There's a cool FAQ on scoping at [] and there's a Perl Module Anatomy guide over at []
  • Configured our new HP640C printer. A bit of CUPS hacking reminded me that BrowseAddress needs to be configured for it to work as expected, and of course, ServerAddress should never be set to the same name over multiple boxes ;-). It works really nicely, all the network clients now being able to print to all printers. I should eventually get around to fixing the margins according to [] Experimenting with HPIJS is another idea.
  • I was reminded today of HTTP's 302 code while reading through a discussion on bugzilla bug 214466, which involves IIS ignoring cookies that are set when this code is issued. Jouni ended up having to issue a header() call and literally supplying a -refresh line; the redirect() call issues a 302, and IIS sees it and just chews up the rest of the headers: [] -- that is, unless you prefix the script name with "nph-", which is MS' totally bogus way of ignoring RFC-2616 (and any other applicable standards): []
  • Did quite a lot of Kiwi and Consave hacking, and cleared out my Bugzilla review queue.
  • Bought ticket for another weekend trip to Brasilia. These things are recurring at an amazing rate!
18.11.2003 Back on track!
  • Worked to triage and close the Consave items we have pending.
  • Hacked up Suzy's box, and it's finally ready to go. The videocard, a Diamond Savage4+, is amazingly fast for a PCI card, and amazingly HOT too.
  • Fought with mozbot and lynx cookies. I can't seem to remember how I make the cookie persistent. It's a matter of setting PERSISTENT_COOKIES:TRUE in /etc/lynx.cfg, but there's a twist if you're a poor old user (i.e. non-root): you need to set the LYNX_CFG environment variable. And you *also* need to make sure that lynx accepts cookies, which involves using the hideous option panel, which refuses to allow me to save my cookie preference for some bizarre reason.
  • Futzed with Pinazo's printer till it was too late for it to be a good idea.
17.11.2003 Titles often suck
  • Burnt some CDs today. Actually burned one by piping data from a CD-ROM dump into buffer into cdrecord. Perhaps using buffer isn't such a hot idea, and I should just leave the job to cdrecord's inbuilt buffer.
  • Did some cleaning up on anthem, and a long-required kernel update.
  • Starting a Linux reinstallation on a P100 I have that I long delayed. I actually have a DSL hookup at home and never use it because I don't have a computer there. Unbelievable, I know.
  • We got a glass box installed for the office's shower.
  • One day, I'm going to get fed up with all the "i8253 count too high! resetting" messages in my kernel log. It all has to do with some sort of timing glitch on the server's motherboard.
  • And, for benchmark weenies, here's what we get on our 100BaseT network, over NFS for linux-2.4.22 (using bonnie++):
           ------Sequential Output------ --Sequential Input- --Random-
           -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
      Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP
      496M  8181  88 11327   3  8171   8  8815  98 11481   2 630.4   5
           ------Sequential Create------ --------Random Create--------
           -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
     files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP /sec %CP
        16   807   3  5498  17  2818   8   784   3  5910  13 1465   5
16.11.2003 Wrap up my Mesopotamia
  • Read through half of Neal Stephenson's Snow Crash. It's one of his older novels, and it's a weird amalgam of cyber-babble, religious history and post-apocalyptic society. Reading back on that phrase, I realize that Neal must be really into history, since it's an essential part of his books (I read the gargantuan Cryptonomicon a while back, and I just picked up the equally massive Quicksilver). Or maybe it's just that he has a normal interest that I share, and most people are abnormally ignorant of history.
  • Fixing up backup a bit more. Almost setup as I would like it to be, just a hitch here and there, but overall looks tasty.
  • Listened to the killer PIL track Warrior, which is one of my all-time favorite songs (read about it at [] PIL is a unique experience, really, and all the more surprising that John Lydon managed to pull it after the Sex Pistols era. By the way, I never knew that Steve Vai played on PIL, but that's that it says at [] (which is, most curiously, for sale).
  • Should take the time to integrate notes from the presentation Sam Docknevich made on Linux on the desktop and mine, the next time I have to run this presentation: []
  • Also, an interesting blog by Andy Oram on the subject is at []
15.11.2003 Adventures in Tapeland
  • Painted the picket fence and cut the grass. I need to buy something -- scissors, or a knife -- to cut the vine that grows on our fence. I've tied the vine against two concrete pillars that tower over the fence itself; my intent it grow them into something resembling two massive green horns.
  • Did some procmail filtering and email abuse@async *all* the blockreports generated, so I can search through them when a user complains of something and has lost the file. I can also order them and see how how the rejection statistics change over time.
  • Did a lot of DAT hacking as I moved the tape drive to a new server. I've written up a large file on the matter of DAT backup over a network -- with benchmarks -- and I'm deciding how I'm going to publish it. In the process found out that a. iptraf is way cool (albeit colorful *wink*) b. SSH is expensive for old MMX processors c. I don't know how to do basic math.
  • More Win2K hacking. I moved Suzy's disk to a new box, and now when booting up I'm getting INACCESSIBLE_BOOT_DEVICE. It seems to occur because the IDE controller changed (unbelievable, right?) as per [] Seems the easy fix is to boot up the Win2K setup and ask to repair the installation. Should try sometime..
  • Checked out ProFont at [] Installing the fonts themselves are dead easy, but I'm not sure I like the result *that* much on my CRT monitor. I wonder, however, if it doesn't look really good on the notebook's LCD, which at 1024 pixels wide doesn't allow me two rxvts side by side in Ion. I figure the *ideal* size would be a 13pt font, so I'll just write someone and ask for it :-)
  • I should remember to let Glandata know about Testcomplete: []
  • Was reading through Compiere, that open source ERP system written in Java. It may actually be interesting, but the funny part is that it *requires* Oracle to run, and this means shelling out a couple of thousands of dollars to put it in production. Quite unexpected.
  • I realize that NBD isn't a solution for backup up stuff over the network:
     kiko@anthem:~$ ls -l /dev/st0
     crw-rw----    1 root     tape       9,   0 Jun 13  2001 /dev/st0
    but, OTOH, I discovered rmt (1) (and tar and cpio support for it).
13.11.2003 Asleep at the Wheel
  • Just got back from a week-long marathon. Oh, not the fun kind of marathon where you run for a week, but the kind of marathon where you race a 12h mountain bike race on Saturday and Sunday (sleepless), travel to a client on Monday morning, visit another in the afternoon, travel to São Paulo at 4am on Tuesday, work 14h shifts for tuesday and wednesday, get back to the office on Friday at 4am, sleep for around an hour, catch a bus at 6am, do a presentation at 9:30 am, have lunch and catch a bus back at 2:30pm.
12.11.2003 Away from home
  • I hate not being home.
07.11.2003 Tinderclient and the Flu
  • So Salgado and I are trying to get tinderclient running non-stop on our Windows 2000 setup. We futz around start /b ([] nohup and disown and realize they're not going to do what we want. To cite the great David Shu from [] (warning: random offtopic link) "why nohup not work".
  • I turn to Google and it suggests the magical SRVANY.EXE. That sounds like the way to go. I dig up a first informative page [] and then the MS HOWTO at [] . I then futz around running the tinderclient from the commandline. It seems the right way to do this is to use cmd.exe to run perl, and then sort out problems with perl from there.
  • Turns out Perl has this great -I parameter which you can pass it to fix the path to what you need it to be. The only other problems I have commandline-wise are fixing up paths inside to be absolute as it seems running perl.exe from cmd.exe gives me a pretty useless path.
  • I move on to the last step, INSTSRV.EXE and SRVANY.EXE. I download the trusty critters from the techeez link, and install them into (where else?) WINNT/. The hints on the howto are pretty accurate, and the only thing (well, apart from the usual regedit.exe frustration) I'm left wondering about is how to pass additional arguments to the Application I specify in the Parameters key (since I need to pass in the script name and options to perl.exe, right?). For that last part, the really cool BitTorrent Tracker win2k HOWTO at [] provided me with the AppDirectory and AppParameters subkeys, which is exactly what I needed. And guess what? I had a red tree in front of me already!
  • And oh, sure, I got sick. Again. From my diary entries, it's been exactly 2 months. Let's wait and see when the next one comes.
  • Gnumeric turns out to be *great* at viewing CSV files -- precisely what I wanted!
  • Posted to ctags-users yesterday about an odd problem that jkeiser pointed to me: ctags doesn't parse [] -- this turns out to be a bug in ctags, which I promptly report: []
  • Hacked a major patch to Consave, bug triage, random fixes and an IndexedCatalog bug close.
  • Maybe I should move to []
06.11.2003 What happened to today?
  • Paid bills, Consave and Bugzilla hacking. Can't remember much else.
05.11.2003 UI idiom evolution considered sluggish
  • Fought a bit with CVS.exe on Win2K, and discovered that it requires the DLLs to be *in the same directory as the executable* (and NOT in system/ or system32/) -- otherwise, all it does is complain about pserver being missing.
  • Registered the domain in preparation for the next step in world domination.
  • xwininfo, xprop and xev are useful critters.
  • Jef Raskin complains about the cut-and-paste UI idiom in ACM Queue:
    The reasons why cut-and-paste causes problems are rather obvious: You can't see what has been cut; it is in some invisible hideaway ("buffer" to the cognoscenti) where it can be easily forgotten. A number of actions, such as closing the document or making another cut, cause the cut material to disappear as a side effect; furthermore, there is a delay between cutting and pasting during which you have to perform a visual search (or worse, a computer-mediated search) to move the cursor to the desired paste site. A cognitive psychologist might point out another reason for the cut-and-paste problems: All that mental and physical activity usually takes longer than the decay of the short-term memory of having made the cut, but we can be less fancy and say that in the hustle of editing we sometimes lose track of the fact that we've cut something.
    He goes on to say:
    A very few systems avoid the entire issue by using a "move" command. You make a selection, which persists (and so remains visible and in its place) while you move the cursor to the target location. You then issue the move command (which requires no more effort than that required to issue the paste command) and the selection moves. Not only have we eliminated one command (before you had to issue both cut and paste commands; now you issue one move command), but the text you are moving never vanishes; and if you start a second move before completing the first, nothing is lost.

    That such a simple solution exists, has been available for decades, yet is rarely used shows how interface designers have become slaves of fashion and how corralled they are by convention.

    My comment on this is that taking into account previous user experience is also sound UI engineering. While it may be proved that having a Move command is a lot simpler than cut and paste, it does present a few challenges of its own (how to move into a defined region, which probably means you need primary and secondary selection, for instance). That's not the point, however. The point is that cut-and-paste is a *familiar* idiom for 80% of the Windows users out there, and that's that they look for when they want to move objects around. While it may be arguable that that should change, Jef doesn't really explain *how* that should change, and *that* is the essence of the argument which is missed altogether.
  • There's a neat article on IPv4 address space (and its potential shortage) at [] -- the most interesting bit is that it adds "myth" to the "potential shortage" bits.
  • Jeremy's article on contention in the ZODB, at [] , is interesting because it shows how much his vision of the indexing problem differs from ours; a batched catalog would never suit us, since we rely on the Catalog to return application-essential information. If the catalogs aren't updated immediately, objects you just created won't be returned in queries for it, and that's not good to end user.
04.11.2003 Back to life, back to reality
  • Brian Henderson-Sellers (I for some childish reason think hyphenated last names are really neat) writes something in the latest CACM that really hits the spot:
    Many [methodologies] are highly prescriptive, that is, the methodology elements are highly interconnected. This inherent complexity makes it difficult for a methodology to be adapted to project-specific circumstances, especially (and usually) when project managers and developers are advised by the methodology's creator that they must use all or none of the components of the methodology.
    That is really my beef with software engineering: instead of teaching us a set of simple techniques and tools that can be mixed and matched as your organization sees fit, we're given this big fat pill that could cure cancer, if only it didn't choke us to death while swallowing it.
  • Disappeared to Brasilia for a while, updates hopefully later.
  • Meanwhile, Google pushed me back to #4!
  • Ran into a mailman bug:
     Traceback (most recent call last):
       File "/home/mailman/cron/checkdbs", line 136, in ?
       File "/home/mailman/cron/checkdbs", line 80, in main
         text += '\n' + pending_requests(mlist)
       File "/home/mailman/cron/checkdbs", line 123, in pending_requests
         text = NL.join(pending)
     UnicodeError: ASCII decoding error: ordinal not in range(128)
    that was already solved in []
  • In turn, this lead me to [] which solves a problem Dawn posed to me a while back, which is a script that does mailman queue maintenence without the web UI: []
  • Did some reviews and ended up running home. Freezing cold!
03.11.2003 Alayde and Bugzilla 2.16.4 and 2.17.5 out the door
  • My grandmother finally came home, and we got her a pretty cool wheelchair and a hospital bed complete with pneumatic elevator. She's recovering steadily, and can even hold a phone conversation now (though she tells me to hang up after about 30s :). For somebody in intensive care a week ago, that's a long way to come.
  • Managed to release, in almost perfect accord with Dave and Vladd's efforts, the latest releases of the stable and development branches of Bugzilla. I put most of my release effort into writing the release notes and status update, at [] and [] respectively.
30.10.2003 Planning for the Apocalypse
29.10.2003 Settling for #2
  • It happened. I moved up in life. []
  • (die of envy, []
  • Checked in two Bugzilla bugs [] and put the tree on fire -- what's this business? ;) Next time, make sure perl [--verbose ###].
  • I read, this morning, notes of the hearing of the Tennessee State Legislature's Joint Committee on Communications Security at [] I think the most interesting part of the text is how on-the-ball the representatives comments were. Stuff like
     The first speaker after Ms. Briggs was Brian Allen, Director of
     Corporate Security at Time Warner Cable. He began to list items that he
     claimed were not covered under existing law. After a few acronyms and
     bits of tech jargon (Wi-Fi, head end, digital filter) were bandied
     about, Senator Trail stopped him and said "As long as you're talking,
     pretend that none of us up here understand ANY technical term unless you
     define it first." Senator Person quoted Trail's great line from last
     session: "I feel like I'm at the U.N. and my earpiece has fallen
    This is really the sort of wit I'd appreciate from a politician -- it's what makes a *real* politician.
  • About Gnome and fonts, from Sidnei, zope-rouser extraordinaire: []
  • Did a presentation at UFSCar, something like "Love and Hate and Software Engineering", in portuguese: []
28.10.2003 Can't Cover Consave Coding Crimes
  • Reviewed parts of Renata's request for financing on a software engineering toolkit project.
  • Fixed random Consave bugs, and did email support for Kiwi and ZODB.
  • Intriguing tutorial on converting ext2 to ext3, which is a *very* smart idea: []
  • Lots of Consave hacking, once more.
  • The Mozilla Korea team is amazing; they've cooked up a guide to understanding the Hangul alphabet proper []
27.10.2003 Your most regular weekday
  • Somebody decided to actually write a paper on something we all, intuitively, knew: [] brings us "Bad Mileage: 98 tons of plants per gallon.".
  • In sendmail, blocking hosts connecting with no reverse DNS is not too hard to do: []
  • Lehy pointed out to me pop-before-smtp, which enables pop users that log in to not need to do SMTP AUTH when sending mail through a relay host. That's why our script from yesterday didn't work :-)
  • Lots of Consave hacking in the afternoon and evening, though I've still got a couple of bugs to clear.
  • Had dinner with Fabia and Deonisio, surprisingly. It was pizza, but it was a real dinner, too.
26.10.2003 A thousand Bugzilla reviews later...
  • Spent the morning doing Bugzilla reviews and triage. Realized that I really would appreciate having some documentation that explained what is done where for the basic Bugzilla functions. Maybe I'll do some work in that area sometime soon.
  • Signed up to be an ODP editor (because Vladd coaxed me into it!). When I have a moment, I should also sign up to be an editor for this section at [] which is a pretty interesting one for me.
  • <jdahlin> golden star to me
  • Note to self: in TT, if you PROCESS a form, it has access to the variables in the caller's context. You can supply variables to help reuse, though.
  • TT note to self 2: POST_CHOMP means that whitespace after a %] is ignored. You can override it with +%]. If it's not active and you want it to ignore whitespace, you can do -%]. PRE_CHOMP removes whitespace before, and you use [%- and [%+ to override at the beginning.
  • Had ice cream and Açai with Nando and Rico. If you're a foreigner and you don't know what Açai is, then that's a *real* pity ;)
25.10.2003 Bound for Canaan
  • []
  • Ran out with the dogs and Gui this morning, but damned if the security people at UFSCar didn't give me a hard time for, well, sitting around while the dogs drank water. Seriously.
  • Alex Martelli always has a speed hack up his sleeve; Andreas would be proud of []
  • One of the nicest things about working on OSS is that many of the community members are really witty. Alex Bishop posted an example of this at Henrik Gemal's blog entry about the Bugzilla recategorization Hixie and wants to run:
    Yeah, it's always annoying when somebody dies without telling you.
    Posted by Alex Bishop at October 24, 2003 06:45 AM
    See this and mpt's ITYS over at []
  • Sorted out the problems with database updating I started working on yesterday.
24.10.2003 Gardener by Day, Hacker by Night
  • In the morning, dug a deep hole to store the presents our dogs leave us. Also cut grass with a weed-whacker that Tiago lent us. I discover that weed-whacking at 110v is not recommended when your whacker is 220v. Definitely.
  • Organized the article cabinet after waiting for over a year for this moment to come. I savor filing articles in the appropriate folders and amaze my co-workers in my fuzzy matching skills.
  • Spent 10 minutes looking at the progress patch from [] -- tried to get it running, and while the patch has been updated to the latest kernel at [] it includes zero documentation, which definitely hurts new adopters. I guess [] is a better way to go, though I'm not entirely sure how it works.
  • Implemented a stable sort for Kiwi using the DSU pattern I had hacked in a while back, with some help from [] In the process, found out (finally) what zip() does (merges two arrays) and, more importantly, that map() takes multiple arguments (and can be made do almost the same thing -- the behaviour actually differs when the list sizes are not the same, since map None-pads).
  • Also rehacked the binary search/insertion function that Pinazo and I wrote to use the simplified algorithm that Neil Rashbrook implemented in Mozilla's config.js at []
  • Fixed more bugs in Kiwi and IC than I thought was possible. But sleep has overcome me, finally.
23.10.2003 Library Dash
  • And even though yesterday was slow, today was slower. Spent the day running after documents to get my MSc diploma cooked.
  • Nice note at []
22.10.2003 Slowly moving along
  • Working to get myself back into gear (though the weekend interruption will once more stick me), hacked a number of small changes into IC and Consave.
  • Added a cvspasswd script that generates passwords for CVSROOT/passwd files -- isn't it a bit silly that something like this isn't included by default in the cvs distribution? The hint came from the FAQ at [] So I hacked up a cvspasswd script (okay, it's perl, and I don't know the salt rules):
     #!/usr/bin/perl -wT
     my $salt = chr(int (rand 26) + 65) . chr(int (rand 26) + 65);
     print crypt($ARGV[0], $salt) . "\n";
  • In the process I stumbled upon cvsd, a wrapper for cvs pserver: [] -- this looks pretty interesting, if not exactly what I needed. It *does* include a cvsd-passwd utility, though.
  • For some odd reason, CVS also required me to add passwd to the checkoutlist to notice and automatically regenerate it. I need to get this down in a FAQ file.
  • Worked on bug fixes for Consave, most of which involved nice little refactorings of odds and ends such as bill printing. Did a mass reassign to so I'm not tricked into thinking people are working on one bug or another.
  • Sometimes you just don't know where they come from: [] (japan rocks)
  • Ran into a problem running Cygwin over Win2K terminal services that seems fixable by following [] However, I don't see any "create global objects" privilege anywhere. Yuck. Aha. SeCreateGlobalPrivilege: [] Why didn't anybody say so before!
     editrights.exe -u [User/Group] -a SeCreateGlobalPrivilege
    But now the problem is identifying *which group* my Samba users belong too *sigh*. I manage to get my user to run an "id.exe", which gets me this far:
     uid=21214(kiko) gid=13009(mkgroup) groups=13009(mkgroup)
    Now, I have no idea what mkgroup is, but there's a command called mkgroup and running it with a -l option lists out a bunch of groups. I glance through pages [] and [] and decide to give the
     mkgroup.exe -l > /etc/group
    trick a go (but what's /etc, and how do I have permission to write to it?). Hah, my id now reports something new:
     uid=21214(kiko) gid=13009(mkgroup) groups=545(Usuários),13009(mkgroup)
    -- and from there, I can see that Usuários is the group I want to add the privilege to (avoiding adding it per-user, which was my real goal). Fixed!
  • Finally, it seems you need to logout and back in to get Windows to refresh your permissions too :-)
21.10.2003 XP SUX
  • Oh, did I say I installed Debian on that laptop? Well, I just erased its MBR. Windows XP gave me the finger when I tried to boot, refusing to let the keyboard work after LILO initialized it. *sigh*. Reverting the MBR fixed things, of course.
  • While researching that problem, I ran into " LinuxBIOS: A Study of BIOS Services as used by Microsoft Windows XP" at [] which is a project to describe BIOS services being used in Win2K and WinXP. Pity it doesn't tell me why LILO hangs my keyboard here :-(
  • Hmmm. I didn't try "linux nousb", but then again, it's not Linux hanging, it's XP :-(
18.10.2003 ?
  • In Brasilia. Some serious hospital business has kept me from working hard on "the projects", but I did manage to check in a short patch to IC, and I provided assorted fixes to Consave. Having said that, I managed to do a full Woody installation on this Toshiba laptop, complete with repartitioning.
  • A very interesting guide for debian installers is at [] -- this is something I would love *us* to have written.
16.10.2003 ?
  • Hacking a printer over ssh. Server runs CUPS, and I'm getting a silly set of messages:
     D [16/Oct/2003:10:43:13 -0300] StartJob() id = 17, file = 0/1
     E [16/Oct/2003:10:43:13 -0300] Unable to convert file 0 to printable
     format for job 17!
     D [16/Oct/2003:10:43:13 -0300] CancelJob: id = 17
     D [16/Oct/2003:10:43:13 -0300] CloseClient() 4
    -- so it's time for some more detective work. Somebody decided that installing a newer cups on top of the old one was a good idea, and I'm now doing the usual rming and apt-getting to try and get it back to the original state so I can debug properly.
  • Well, after rming the files cupsys wouldn't install on me, but luckily salgado and sidnei pointed out the magnificent --purge option to apt-get remove. Hah.
  • I ended up removing and reinstalling half the packages. It seems that something wasn't done right with the installation, or perhaps it was the use of the gimpprint drivers (package cupsys-driver-gimpprint) that made it go. I hate solving problems like that, but I have better things to do with my time than debug dependency breakage.
  • It's amazing. I forgot about kernel modules so much I had to make sure that "alias eth0 via-rhine" was what I need to add to modules.conf to get the ethernet card working on debian's 2.4.18-bf kernel. Shame on me.
15.10.2003 A day in the life of Perl
  • Updated Bonsai to CVS HEAD. This lead me to read a bit of Perl (again) and I've decided to write a set of notes to self on Perl. Here's a start (some of which may be wrong):
    • Compare strings using the 'eq' operator, ints with ==.
    • Pull function parameters out of @_; by using shift (which gobbles up an element) or unpacking.
    • if/for/foreach clauses always have parenthesis, and they require braces.
    • concatenate strings using '.'
    • The =~ attribution operator applies a regexp to the variable and reassigns it.
    • require imports based on a string name, use imports the name in code.
    • check for existing variables using defined()
    • There are a number of "flags" to if: -d, -f, -x, -r.
    • detaint variables using a =~ regexp with parenthesis and reassigning the variable to $1.
    • The length of the list is obtainable through $#listname
    • Iterate through hashes using 'each' and unpacking the result.
    • Function calls don't need parenthesis and function definitions don't either.
    • Perl uses 'next' in place of 'continue'
    • Perl indentation often sucks. Use perltidy to make is acceptable.
    • In doubt, 'use Data::Dumper; Dumper(@foo);'
  • You may think this is funny if I'm one of the Bugzilla maintainers. I don't.
  • Put up the new layouts I wrote for the kernel tinderboxes, and hacked it a bit on the way to link to an external CSS file.
  • According to Sidnei, xrdb .Xdefaults seems to do reload default without needing to restart X (which Debian requires, since it disables runtime resource lookup).
  • Setting up a java plugin for Mozilla has led me to understand the specifics a bit better. You are supposed to *link* to the plugin in the JRE directory, not copy it.
  • Woke up, and news is that Alayde now has pneumonia or a related infection in the respiratory system. I have a conversation with my mother about medical errors and how we (should be able to) avoid them. I'm probably going to Brasilia in the next days.
14.10.2003 Algorithm Anarchy
  • In case I need to remember how to turn off the damned Motorola's ring, it's PROG-#-5-MEM. I wonder how hard it is to add a switch that says "Ring [On - Off]" to a cordless phone?
  • Spent the day running after perfect algorithms during a speedup spree. The first stop was improving Kiwi's insert_sorted to use binary search to find out what row we should insert the data into. This is *not* as trivial as it sounds, since the binary search algorithms I ran into are for simply locating data in a sorted list. What Pinazo and I wanted was a way to find out *where* we should insert our element. The Python solution isn't too ugly, but we had to add two checks for "windows" with 2 and 1 element -- I don't know how to solve the problem without them.
         low = 0
         high = len(l) - 1
         while low <= high:
             middle = (low + high) / 2
             value = cmp(x, l[middle])
             if high-low == 0:   
                 if value == 1:
                     return middle + 1
                 return middle
             if high-low == 1:
                 if value == 1:
                     low = high
                     return low
             if value == -1:
                 high = middle - 1
             elif value == +1:
                 low = middle + 1
                 return middle
  • I also decided to whack CList's old and rotten and inlined _sort_rows_by_type, using a decorator pattern that the #python gang suggested to me a while back. The code was so ugly it did *not* touch my heart to remove the 40+ lines of multi-line lambdas. Pity I had to add 4 single-line ones to make up for Python1.5's lack of list comprehensions.
  • Finally, worked on rehacking Sidnei's versions algorithm attempt. It's not finished yet, but I have a good idea of what I need to do now.
  • My grandmother is in an intensive care unit, to see if she can be nursed into a well enough state that she can be operated safely. For some random definition of "safely", it appears to me. I've been informed that she's being operated by the best orthopedist in Brasilia; I'm unable to assess how true that is, and if true, how much of a compliment it is. I'm afraid of having to wait to find out.
13.10.2003 Synchronizing synchronized synchronizators
  • Sidnei and I have been hard at work writing a synchronization service for IndexedCatalog, and (amazingly) it seems we have an initial cut that works -- or almost. We sat down and wrote a number of use cases, and Sidnei's initial proposal for a data structure actually seems to work.
  • It's been damned windy and cold over the last two days. What's up with the weather?
12.10.2003 A bumpy weekend
  • Two days go by as we hack up IC to further levels of functionality. I clean up the Registry mess with him, we switch the index values from OOSets to IISets and then IITreeSets when I figure out it will provide us with good performance releases. A number of checkins go through that only Bonsai can tell us about: []
  • We're getting closer to database synchronization; Sidnei worked out the data structures and I contributed with random complaining and nitpicking that turns out for the better in the end.
  • Yesterday went to a (rather personal) party at Erika's: Eduardo and Jere just got older. I steered clear of the party consumables (except for strawberries) and managed to have a good set of laughs.
  • Ran this morning a short 6K XC race. This was actually not that bad (me and Gui arrived pretty close one to the other, though he dusted me somehow) though the course was fairly hilly and it was hot. I was annoyingly deprived of proper running clothes, so I had to make do with a (slightly ridiculous) pair of shorts and no t-shirt. The times in the results seemed to be messed up; I figure we did around 26 minutes, they say we did 23.
  • My grandmother last night fell and broke her leg. This is a larger tragedy than it might have been for the fact that she will probably need to undergo serious surgery, and her heart (more precisely, her whole cardiovascular system) is not in the best shape in the world. The upside is that she gets to stop putting off a much-needed operation to the same leg she broke (are we allowed to annotate this event as `luck'?), so, if the operation is successful, she'll be a lot happier than before. Needless to say, that's a big if.
  • Meanwhile, parents and family are at the hospital. Moral being: if you get to be old and rusty, I sincerely hope you've exercised, eaten properly, and taken care of yourself, because if you haven't, from first-hand experience, it *will* suck.
11.10.2003 How hot is hot enough?
  • Note to self: when cooking pasta, *NEVER* accept using non-boiling water. My last two recent (and hopelessly unexpected and unusual) cooking fiascos were related to a momentary lack of patience. Listen to me! If it's not boiling, don't do it -- you'll regret it 5 minutes later while you and your guest are savoring some rather unsavory food.
  • Did a short google run to find out what the Oasis title "What's the Story Morning Glory" meant. Dieter once told me it was a reference to a road racer but I can't confirm that over the dozens of pages I saw. Weird. The closest I get is [] which is at least interesting.
10.10.2003 There's no limit to this
  • Slacked too much this morning and late in the office. I'll attempt to blame it on Sidnei
  • Hey mpt, my diary software has the same bug as your IRC client.
  • Did some syncing up of the different extensions installed for Python2.3 so we can do some testing here.
09.10.2003 IndexedCatalog whacking
  • So Sidnei is over from Garibaldi to help us out with perf on IC, and on the first day he's already been all over the tree. I did a small breakup for SelfIndex and it now avoids using an OOSet for each object. Sidnei's hack was more extensive: basically, we stopped storing objects as values in the OOSets, and put IISets of the OIDs in. Guess what? An amazing speedup, which results mainly from not having to have Connection load() all the objects just to throw them away later.
  • Added a dynamic range to our DHCP to allow poor Sid to have his laptop up. This is (quite surprisingly) trivial to do: just add a range { } entry to /etc/dhcp3/dhcpd.conf.
  • Sidnei pointed out to me that I wasn't looking close enough to sudoers: I was logging in to the tinderbox server at OSDL about 1000 times per day, and then I realized timestamp_timeout was set to zero -- oops and fixed.
  • Closed Bugzilla bug 221391, which means Bugzilla has a QUICKSTART guide now, whee!
08.10.2003 The Dynamic Documentation Drone
  • Worked on Tinderbox documentation, and a minor bit of code-reading.
  • Worked on Glandata documentation, and prodded people to read it too.
  • Working on the same day on multiple Wikis is not a sane proposition. Does every damned wiki *need* to specify its own syntax? At least it's not as scary as STX, which scared me away quasi-permanently.
07.10.2003 Midnight madness
  • The best advice in our profession: []
  • Hacked tinderbox3's Pg support to get it back in line; in the process, fixed []
  • Amazing is all I can say of the election turnout so far: []
  • BZ wrote some useful docs for openWindow up at []
  • Hacked on Glandata docs, and some Consave cleanup.
  • Found out a bit more about how Tbox3 works, and visited the Sherrif page (nice stuff).
  • Shopped for food as I was morning-starved, not much else. Looong day.
06.10.2003 Arthur Robottom and the brazilian timezone
  • Worked on random (not really work-related) subjects in the morning. It's not nearly as hot today as it has been lately. Of note is the fact that the neighbor's dog barked so much that I invited him over to play with ours, and after an initial barkfight, they decided to mellow out.
  • Tried out Tom's root/boot [] for the first time ever; the installer runs pretty easily but *why* isn't the FAQ or a README included?
  • Installed tbox3 at OSDL, and it really appears to be dead simple (I only had to fumble with the perl debian modules -- what's up with the bizarre naming conventions?) -- the howto up at [] is quite complete (if somewhat randomly organized :-)
  • Atualizei o arquivo do horário de verão Unix levando em consideração o Decreto 4.844 que foi circulado hoje na lista Spambr: [] -- se precisar, pegue-o em [] (e veja [] se tiver dúvidas de como atualizar o seu sistema)
  • Hacked on Bugzilla/QUICKSTART for a minute. This brings up memories of installing my latest Bugzilla -- I had to install the perl modules into a non-standard directory, which eventually led me to justdave:
     <kiko> but how will I tell bugzilla to use modules in a non-standard
     <kiko> or rather, tell *perl*
     <justdave> when you do "o conf init" in cpan, one of the questions it
     asks is parameters to pass to Makefile.PL
     <justdave> PREFIX=/path/to/wherever
     <justdave> I think is the standard way of doing that.
     <justdave> normally you would put the path in the PERL5LIB environment
     <justdave> that won't work for Bugzilla because it uses taint mode
     <justdave> you'd have to put a "use lib" line at the top of each script
     <justdave> if you have access to the core perl libraries, you can add
     your path to the list in [archdir]/
  • The alarm installation in the office caused so much disruption it has rendered me unable to produce anything that I actually *needed* to. It's times like this that I feel like using []
  • After chasing a bug in Bugzilla that was actually related to uppercase statements in the documentation, I added "alias less='less -i'" to my .bash_profile to keep me sane.
  • Genealogy is a peculiar science, if you can call it a science. I've been exchanging correspondence with Sheila Watson, who is a distant (think "light-years") relative through the Robottoms, my mother's family through her father. Now today an interesting tidbit has come up; Sheila showed me some pages of a book, written by Arthur Robottom at the end of the last century, called "Travels in Search of New Trade Products". Now the first and only google hit for *that* is a PDF converted at [] which lists it as part of [] "Africa Rare Collection". Unfortunately, it's already been *sold* :-/
05.10.2003 Sunday == random hackery
  • A slow day unfolds. Maybe it's because it's amazingly hot?
  • Ran into the ASCII Art FAQ [] -- which includes a pretty cool exhibit done by none other than our infamous mpt!
  • Over this week, I've come to realize that the lyrics of a song in Daft Punk's Discovery are a perfect description of my life []
  • Updated the Sony tape drive entries from some days ago now that I realized what I was doing wrong. Ran into a thread on Usenet that suggests that a tape can also be used to do the upgrade: []
  • And finally, it seems that this drive is also capable of being flashed to Audio firmware (reportedly, from SGI): []
  • Found out about []
  • Just before looking into buying Snatch from, I read up a bit on RCE at [] -- and guess who's listed? I need to check what model my DVD is.
  • Did some genealogy research (it's Sunday, after all) and ran into some information that I ended up posting to [] -- there's a strand of Robottoms at Napier, NZ, it seems.
  • Finally, I added permalinks to my "weblog software" (I should really call it "gross php hack for producing HTML output based on a lame textfile"), and I added years and titles to match up. Link away!
  • Slept in this morning, did some much necessary household organization, and rolled over to Bike Tech. My SID fork is leaking air from the leg shafts, a defect which is bound to provide me with lots of wholesome entertainment (and those pesky "unexpected expenses" we all love).
  • Long bike ride in the afternoon. Schneider had a tumble on a steep section of downhill and banged his leg into a rock. There was no apparent cut, but he probably cut a vein inside his leg because an oval area mushroomed into a remarkably rosy hill. He sat down in the waterfall for about 15m and the swelling stopped, and he managed the remaining 2 hours with some hassle. We had a series of 3 flats in 100m, which probably runs for the most irritating delay of 2003.
  • I watched Dangerous Liaisons for the.. 10th time perhaps? tonight. I really like that movie.
  • It's time for Grusi 2003: [] (The title is `Free Software on the Desktop: Are we there yet?' for the non-pt_BR-enabled)
  • And, of course, Roma Locuta Est, causa finita est: []
  • When I come back tomorrow, I can read about stuck tapes on [] and [] -- poor Google, only 4300 hits. Now wonder why I hate DAT.
  • Wow. All this time, I had this silly SDT-9000 drive, and I never noticed that Sony has a whole support site for it at [] -- INCLUDING a LINUX utility at []
  • Unfortunately, the Linux utility doesn't seem to work:
     kiko@anthem:/mondo/src/sdt-9000$ ./sonytape /dev/st0 -i
     ERROR: SG_IO Inquiry
    which is really an
     ioctl(3, 0x2285, 0xbfff7a90)            = -1 EINVAL (Invalid argument)
    -- sigh. Will I have to install Windows<tm> on this computer to be able to update the firmware? The readme file is full of broken links, too :-(
  • Aha. The 0x2285 ioctl is actually expecting a SCSI Generic device (just see [] so modprobe sg and I can access the tape via /dev/sg0. So far so good.
  • The sonytape thing works okay if you pass in the -t flag. It doesn't if you pass in -i or -r (maybe it's for changer models? ah, it's in the readme file). But the most amazing thing is that the ROM upgrade flowed straight in (I had expected some sort of input message, to be honest, but...)
     kiko@anthem:/mondo/src/sdt-9000$ ./sonytape /dev/sg0 -f
     SONY tape device detected.
     SONY SDT-9000   Revision: 0123
     Firmware file size = 633160 bytes
     Upgrading tape device firmware.
     Warning!! Do Not Power Off Tape Device!!
     This process can take a few minutes.
     Firmware upgrade complete.
     SONY SDT-9000   Revision: 0601
    -- I did have to run scooby once, of course, to pull sdt-9000_0601.t90 out of the win32 executable installer Sony provides on their support site.
  • At least it used double exclamations!! Scary, but it seems to have worked. Now for the erase test. Well, the erase test takes about 30s, which isn't very comforting. Another bothering aspect of this utility is that the "nori trace" (wtf are nori, tahoe and sagami?) reports some peculiar error (not mattering if something is in the drive or not):
     SONY tape device detected.
     SONY SDT-9000   Revision: 0601
     Getting nori drive trace.
     This process can take a few minutes.
     Nori drive trace length = 0x80040
     Request Sense data: 0x70 0x00 0x05 0x00 0x00 0x00 0x00 0x12 0x00 0x00 
     0x00 0x00 0x24 0x00 0x00 0xcf 0x00 0x03 0x00 0x00 
     0x00 0x00 0x00 0x00 0x00 0x00 
     H.@Illegal Request, Invalid field in CDB
  • And finally, the read/write performance test is not the most encouraging:
     SONY tape device detected.
     SONY SDT-9000   Revision: 0601
     Checking tape drive write and read function.
     Warning!! This process will write over data and takes several minutes.
     Data compression disabled.
     1,638 MBytes of incremented data was written in 1387 seconds.
     Write transfer rate = 1.18 MBytes/sec
     1,638 MBytes of incremented data was read in 1392 seconds.
     Read transfer rate = 1.18 MBytes/sec
     Data compression enabled.
     1,638 MBytes of incremented data was written in 422 seconds.
     Write transfer rate = 3.88 MBytes/sec
     1,638 MBytes of incremented data was read in 422 seconds.
     Read transfer rate = 3.88 MBytes/sec
     Write and read function check complete.
    -- I mean, not if you compare with the times the readme lists for the SDX-700C (ah, but it figures: []
  • You think you've seen it all and then Zach comes and shows you a Web Controlled Power Strip: []
  • Worked a wee bit on the tinderbox server. Found out it requires bonsai pretty much up front (and webtools/registry) -- wrote to jkeiser about tbox3 and now all we have left is praying.
  • First, the dogs chewed up the housemat.
  • Second, the backup last night failed.
  • Third, the DAT tape wouldn't eject.
  • Fourth, "mt lock" hung the SCSI bus and forced a reboot of the server.
  • It's still 8:30am. What a world of pain can a Thursday be.
  • Ah, about the Post Office. Well, I went to the post office to send off some t-shirts to assorted celebrities all over the world. Now post offices are normally full of rules on weights. Well, the first package I was going to send to Sweden was about 40g over 500g, which would incur in 200% the cost to send. So, not being a light-hearted fellow, I opened the envelope, pulled out the CD case, put the CD back in, and ended up with a net reward of 100% the sending cost and a CD case.
  • Then came India packet's turn, and when weighing it, the scales tipped in at 253g. Now those puny 3 grams were going to cost me 200% of the 250g value, except *this* time, there was nothing to remove from the inside (except for the t-shirt, which, well, I wasn't going to remove for obvious reasons). So I asked the guy for some scissors, and he looked at me as if I was asking him for a bowl of plutonium. I insisted and he gave them to me, and I trimmed off the corners of the envelope, and weighed it again. 252g. More trimming. 251g. Yet more trimming. 251g. I try the scales in the other aisle. 256g. At this point, I look at the guy, and he looks at me, and I say the equivalent of "for bloody hell's sake". The guy silently picked up the envelope and threw it in a bin next to him.
  • In Brazilian currency, that means an upmarket dinner saved with scissors and a curse -- not bad for a Tuesday.
  • Why would somebody send me files packaged with RAR? Over to windows, pick up UnRAR from [] and use it to grab what, 5 measly text files.
  • Compiled Python-2.3.1 so I could work on bugs-bugzilla since 'somebody' decided to force me to upgrade :-) Worked a bit more on the script for bug 220724, and in the process, was pointed to (by timeless) [] -- an RDF output of Bugzilla's local options, pretty cool.
  • Dan Morin of GenoPro wrote to me about the performance problems I was having a while back -- it was pretty amazing, to be honest, since I never expected two diary entries to get me under his radar (must be a good radar over there). Apparently I'm #1 on a search for links to on altavista: [] -- go figure. I'll try and see if I can help him track down the problem.
  • Looked up a Win32 GDI object monitor for Dan, and timeless (again) pointed me to [] -- I wonder how that works. Over to scooby! So, it's a pretty cool utility called GDIobj.exe -- it lists the number of GDI objects in use, and which apps are using them. Hopefully it will be useful to Dan, too.
  • Landed another large change to Consave, and it finally looks stable again. The hardest thing about hacking a large project is learning to live with the bits that you can't agree with, or want to redesign but don't have time/personnel or the guts to fix. At least not this late in the review cycle.
  • Something pretty curious happened at the Post Office today, but I don't have enought time to write about it! Tomorrow, hopefully :-)
  • Today. Hmm, so much already.
  • Reviewed ESR's proposed bug-bugzilla Python script.
  • Reviewed LGS' tutorial on GObject in PyGTK: []
  • Hacked a number of PyGTK FAQ entries.
  • WTF link of the day: []
  • All productivity grinded to a halt at 14:30 and I need to take a break. Still have my daily obligations to hack on.
  • Did a slight change to the Webalizer setup to see if we get better output.
  • Spent some money on a decent genealogy software package I had plugged before: [] -- and I even got a bonus key to give my cousin :-) Now we only have to get it to stop leaking memory on win2k!
  • Hacked a big change for Consave, but more yet to come.
  • Slow Sunday - garden, dogs, hack.
  • Did a small survey of disk usage reporting tools, since I'm having such a hard time cleaning up ~kiko. I found discus at [] which is a prettified df -- it reports with a little graph to show how much of the disks are used.
  • xdiskusage is pretty cool, too (though the original xdu is horrid!) -- it outputs a great graph, and it even has a Debian Woody package: []
  • Filelight would have been a favorite, I think, but it requires QT3 and there's no Woody package for that (makes you sort of long for Sid, now!) []
  • However, my favorite turned out to be DuTree, from [] which is a graphical GTK+ app which displays directories as rectangular blobs. It's surprisingly easy to find the major hogs, once you're used to the interface.
  • Ended up deleting a bunch of repeated and archivable junk that shouldn't have been around for a long time now.
  • Checked out [] for a short bit
  • Hacked into shape a short python script that does bug posting. I had written this ages ago for Glandata, but ESR requested it over #mozwebtools and I morphed it into something more generally useful (not a programming product, eh, but at least it contains error messages!)
  • Major hackery on Consave -- a flurry of checkins and the day's gone.
  • Watched Identity at the movies (not that common an event lately!) [] -- it's interesting, the story itself, though it is a touch cheesy at times. It's not a repetitive movie, but the middle bits may get you into a 'this is pointless' mode, till you get to the final parts (which justifies the middle, but then twists towards an unfortunately unsurprising end).
  • Having trouble with some printing problems with Samba at consave. Apparently, the printing.tdb file gets corrupted, and nothing besides erasing it brings it back:
     [2003/09/26 07:03:42, 0] tdb/tdbutil.c:tdb_log(475)
       tdb(/var/cache/samba/printing.tdb): remove_from_freelist: not on list 
                                           at off=122688
     [2003/09/26 07:03:42, 0] tdb/tdbutil.c:tdb_log(475)
         tdb(/var/cache/samba/printing.tdb): tdb_free: left free failed at
    There's a message with reference to this at [] and a proposed workaround at [] but the workaround (erasing the file) isn't a very good one -- after all, the file goes on being used until we HUP the Samba server, which I can't given that it makes all active connections to the samba server drop and restart. [] proposes the same thing. Stumped :-( Ended up opening [] on the matter.
  • Added port 2401, CVS, to our wshaper script, which allows us to still work while people are leeching CVS :-)
  • This week, I was subscribed to a weird list on, and I'm still trying to find out if anybody knows about it: []
  • One of the coolest quotes I've ever seen in a movie is the dialogue in the Big Lebowski between Lebowski and co. and John Turturro's Jesus character. Well, Johan provides us with an .ogg sample of it so you can laugh out loud at the office, too: []
  • Helped Michy install WinSCP and connect to Async to send me some files to debug some Mozilla bizarrities. Apparently, however, she couldn't connect as guest :-(
  • Found out that TkInter does something similar to what the Kiwi Proxy does, except that it's inbuilt into the widgets! It's pretty neat, and the documentation describing it at [] gives me some neat ideas.
  • More activity at []
  • An interesting note on an error that shows up in the samba logs all the time:
     [2003/09/26 16:30:40, 0] rpc_server/srv_netlog.c:api_net_sam_logon(206)
       api_net_sam_logon: Failed to marshall NET_R_SAM_LOGON.
     [2003/09/26 16:30:40, 0] rpc_server/srv_pipe.c:api_rpcTNP(1200)
       api_rpcTNP: api_netlog_rpc: NET_SAMLOGON failed.
    -- is available at [] It turns out it's a "normal" message, which is printed out because of the way the login protocol is initiated by the clients.
  • Did a server upgrade at Consave, which worked out amazingly well. The new server has 2G RAM and two fast SCSI drives, which means (I hope) that the network is probably past blazing speed now.
  • If you run Debian woody, and you don't want to give any traffic away to the idiots at Verisign, just pull and install a couple of debs from [] or even []
  • Did some configuration updates at Consave. It seems the fine folks at consave can't stand to go for one day without rebooting:
     kiko@samba:~$ uptime
      11:37:12 up 21:36,  1 user,  load average: 0.00, 0.00, 0.00
  • Some basic Glandata support on the topic of using bugzilla, and SQL Server to PostgreSQL migration. Hacked a fix for bug 220183, to allow us to use the status_whiteboard field to store the client (hackety hack, I told you).
  • Wrote up a ton of comments about proposed sales material for the next product. Commented on some user documentation on PHPLdapAdmin we wrote internally, too.
  • Mozilla's tbox has a definitely funny filesystem setup:
     Filesystem            Size  Used Avail Use% Mounted on
     /dev/md2               29G   16G   11G  59% /
     /dev/md3               67G   15G   48G  24% /data
    -- and note that tinderbox lives in /data!
  • Did some minor researching and tweaking of a script with __mka__, and decided to understand a bit more about graphics contexts and pixmaps. So read up on what a GC actually is here: []
  • Reviewed documents and folders at the office, but didn't get around to writing or fixing any code, which much flusters me :-(
  • Suresh Ramasubramanian provided us with a really nice favor today, and we're all dead appreciative of it :-) []
  • Worked on some Bugzilla reviews.
  • Ran with the dogs again. Stric and Oli were amazingly hungry today - I fed then twice her their usual rations, and Stric was actually snarling while eating. I wonder if we need to up their food intake?
  • Spent the morning fixing my Rio PMP-300. It had a bad case of broken contacts, and I had to solder, crack, saw and glue my way through it. In the end, I hacked it so bad it needs tape to hold the battery pocket closed. But it works, and not in its (original and customary) flaky way. The guys that did product engineering for this thing at Diamond sure didn't have "ROBUSTNESS" on the requirements list. :-(
  • Purchased via [] a replacement for my NC-6WM rechargeable battery. Apparently Sony doesn't provide this battery anymore, so I bought an NH-14WM hoping it's compatible. They're both 1.2 volts, but the 6WM is 600mAh, while the 14WM is a whopping 1100mAh; I'm thinking this thing must run for hours.
  • Skipped over to the office, researched with Lia the proper way to clean a monitor of fingermarks. Most entertaining.
  • Worked on generating an HTML report of the Robottom/Carvalho family tree me and my mother have been working on. It's fairly complete, already -- 525 individuals listed. I'll have to plug the (commercial, non-free!) software we're using, which took some time getting used to, but which has proven to be the nicest and most usable interface I've had to deal with in the field of genealogy software: [] The HTML report is up at []
  • Went for a run with Rico, Olivia and Stric. Guess who almost got left behind! Amazing that my legs still hurt after almost a week of slacking after the sunday 21k.
  • Hacking IC is amazing. You work on it to get everything neat and consistent, then you move to the application side and boom, everything seems to blow up. I now realize how much "lonely" is an achilles heel in IC, and I'm determined to find a good solution to this by the next version. For Consave, we'll just have to manage as it is, I'm afraid.
  • Did more work on the documentation wiki.
  • To start off the day, walk the dogs, get into assorted telephone discussions, and brief Sidnei on the wonders of Bugzilla XML: [] (admitting beforehand that I had never thought about it before).
  • Next, fix transferring the SJRP database over to us. Realized (almost too late) that the reason cron isn't writing me is that *THERE IS NO MTA INSTALLED*. I must be a latent genius. For some reason, cron doesn't like running my tar command as a crontab entry, so I move it to a script. It works :-)
  • Next up supported my sister asking about an odd Mozilla bug. The bug turns out to be bug 73759 or perhaps we have a more modern dupe... well, jesus, there's a ton. Bug 73565, 216081, 199805, 168606, 191424, 195583, and more. But they all seem to be dupable to bug 73565. Or maybe, and more probably, bug 209501.
  • Next up, try and find out why Glandata is having to convert their table and column names to to lowercase when using PgSQL from Windows. I'm assuming this problem is related to their ODBC driver, so I'm trying to see what they're using. From what they tell me, their using the official psqlodbc package, assorted versions available from []
  • However, Hiroshi Inoue has some snapshot versions cooked at []
  • Interesting tidbits at [] indicate that the problem is quoted table names; when table names are quoted, they are used literally. This starts to make more sense:
     survey=# select * from "SLOCS";
     ERROR:  Relation "SLOCS" does not exist
     survey=# select * from slocs;
      project |  lang   |   loc   
            2 | python  |    4073
  • Did a lot of discussing about kernel tinderboxes, and in the process, learned about STP, PLM, ABAT and other stranger things. The STP framework can run a ton of tests, including its native tests at [] and tests fed in from []
  • BK2CVS instructions are at [] in case anybody's wondering (I was).
  • JayPee posted some pictures of Netscape's tinderbox lab at [] -- [] is part of the setup, and the infamous christimas lights are viewable at []
  • Installed ActivePerl on scooby. It's nice.
  • If I ever decide to try and refund a laptop EULA, this comment to an LJ story on [] is pretty interesting: []
  • ssh tried to stick me by failing to do public key authentication with Zope CVS, but I noticed there was something wrong with my config on anthem -- and all because I used IdentityFile ~/.ssh/identity. That's weird, because it seems that it was trying to use an ssh1 RSA key on an ssh2 connection. The only hint I got from ssh -v was:
     debug2: we did not send a packet, disable method
  • As a parting note, heed this: for some people, [] is going to be an active effort. For others, it's just another day.
  • James Henstridge, into the Davy Jones Locker []
  • Had a phone conference with OSDL and Intel folks on the kernel tinderbox setup we're planning.
  • Watched DeMarco and Parnas on DVD at USP. DeMarco is as always amazing, even if it's the third time you've seen him do the same talk.
  • Today, Brazil is voting an arms control law. But it amazes me that the first thing that was shot down was the minimum age to buy firearms -- 25 years was the proposed minimum, but somehow "THEY" managed to bring it down to 21. And they actually decided that the class of TRUCK DRIVERS should be allowed to purchase weapons as well (the original law restricted guns to law agents only). Now what the hell does a 21-year-old trucker need a gun for? []
  • Interesting how Twisted's rebuild() provides something similar to [] but using interpreter introspection to swap classes on-the-fly.
  • Instant migraines for free: []
  • Visited, #osdl, to try and get somebody enthusiastic about building a tinderbox setup for the linux kernel. But everybody was idle :-/
  • By the way -- yesterday's problem with the via-rhine board and network booting seems to be a problem with Etherboot 5.2.x. I now seem to remember something about mknbi needing to be upgraded... duh. Idiot. The clue is that the IP address that the kernel reports after booting is completely nuts:
     >Silvio< IP-Config: Guessing netmask
     >Silvio< IP-Config: Complete
     >Silvio< device=eth0, addr=
     >kiko< isso e' que ta' uma loucura.
    It's on the damned cover of []
    NOTE: These Etherboot versions *require* that Linux kernels be tagged with mknbi-1.2-10 or later or they will not work!!
    I'm a dork! Added some options to the root-path argument in dhcpd.conf to make sure we mount the root filesystem the right way:
     option root-path ",v3,rsize=8192,wsize=8192";
    and all seems well.
  • I never knew about the "info threads" and "thread N" gdb commands. Neat.
  • Somehow gnome turned off my keyboard's auto-repeat. Luckily, we have "xset r on". :-)
  • Apparently, today is the "everything just break" celebration day. Every single thing I tried to operate today failed miserably. You don't believe me? Watch.
  • Kelly phoned up from Glandata saying that her CVS tool ([] wasn't logging in to the repository. So I try and fire up vmware to see what it could be.
  • Holding to the day's theme, vmware refuses to start and gives me about 30 minutes of headaches as I try with no success. It seems to be some sort of license problem with the terminal server, I now conjecture.
  • So Kelly's problem is somehow related to the fact that she's using Windows Millenium, which doesn't seem to like cvs95.exe. The regular cvs.exe executable, however, doesn't run on anything less than NT -- windows is fun! I suggest she test on another box, and if it works, just reinstall a decent version of windows (how's that for an honest suggestion?) Now later BT comes and tells me that you have to
     set HOME=C:
    to get cvs login with tortoise to work with windows 9x. And yet, that's NOT the problem, either. I am actually able to reproduce it on our windows box by doing:
     C:\x>cvs login
     Logging in to
     CVS password:
     cvs [login aborted]: Error reading from server -1: No such file or directory
  • The error is annoying in that it seems to be relatively random -- if you try 20 times, it works for 3 of them. The problem has been reported before, too: [] and [] and []
  • It seems to be some sort of weird network problem that has, but we're seeing it on *OUR* server. (time passes) And that, of course, was the hint. This is a very stupid error message, in hindsight -- but when you see it, you can be sure that it's a network connectivity problem. Check out an excerpt from auth.log:
     Sep 16 11:59:30 cvs cvs-pserver[13394]: refused connect from XXX.XXX.XXX.XXX
     Sep 16 12:04:16 cvs cvs-pserver[13467]: warning: /etc/hosts.deny, line 15: 
         can't verify hostname: gethostbyname( failed
    -- so of course, it's an idiot's excuse for a network administrator to blame, again. Has anybody employed in the DSL providers in Brazil ever read an RFC, I wonder?
  • Summarizing: if when trying to login via CVS you get these very bizarre error messages about -1 file not found, 0 EOF and other bizarre errors, the network is almost surely to blame. I added an entry to hosts.allow to override the PARANOID setting to hosts.deny, and it works smoothly. Fired off an email to the relevant ISP technical people to see if they get a clue.
  • A diskless box that I'm trying to boot up remotely is complaining that it can't mount /tftpboot. Now tell me, what on earth should that mean? No idea, but it seemed to be a problem with two NICs in the same box. No, it's something to do with the VIA Rhine-II VT6102 network card, apparently. Or the VIA APIC..
  • A nice writeup on Win2K TS here [] -- however, it still doesn't explain to me why I still get a temporary license.
  • I'm also getting a Trident video card to run, and it tells me that 640x480 is all that it's going to do on the AOC monitor we have set up for it. Somebody has actually ran into a similar problem with the same monitor: [] -- and, oh, this one was silly. The video card only has 1MB of memory, so it can't do more than 8-bit color here. At least one easy fix (pushed bpp to 8). Specs for the monitor can be found at []
  • Next comes our beloved new ssh bug, which forces me to shut down port 22 incoming for today. Advisory at [] and debian bug report at [] (but still no package for woody).
  • Apart from that, verisign's takeover of *.net is making me want to boil their board of directors in motor oil.
  • Back from Brasilia, where I ran a scorching half-marathon in 1:38. It could have been better, but it also could have been (much) worse. Except for the fact that my legs hurt like it really was the full 42.
  • Trying to compile pine (after [] but it keeps complaining about a missing OpenSSL. Luckily, I can read spanish ;-) [] -- Updated.
  • Looked up specs for the 753DFX monitors we have here. Best place to look ended up being [] -- Marcelo's eyes are sensitive to flicking at 60 KHz, but I can't find a straightforward way to move to a 65 KHz setup.
  • A fascinating article on Fernando Pessoa showed up on k5, and anybody interested in writing of one form or another should read it: [] Amazing how it takes 20 years and an article in english to make you actually value what they try to teach you at school :-(
  • For some reason, in Python, hash(-1) == -2. The odd part about this is that writing a __hash__ function that returns -1 seems to fail for IndexedObject. So I paper over this in the OID generation anyway :-)
  • Prepared some stuff for our diskless systems. Did install of a couple of boxes (remotely) for Consave.
  • Reading through Marco's excellent tape minihowto (at [] I found out that the max block size for our Sony SDT-9000 is 32k. I didn't understand very well how dd bs= worked, apparently. Marco: you need to fix the page title, dude. There's nothing about TT fonts there!
  • Linked yppasswd to passwd, which I should have done ages ago!
  • QOTD, referring to a comment (`First Love, now Joy! What's NEXT!') on Bill Joy's departure from Sun (yeah, I'm slow):
    We could have no Love, no Joy and no Jobs.
  • An interesting analysis of Template Toolkit performance: []
  • Today I ran into a pretty odd bug in IC, that's pretty much related to good ole bug 817: Subclassing an object declared as weak fails to create a catalog for it. At least it's a reported bug. :-)
  • So I think the correct fix for this is to just forbid subclasses of weak attributes, by design, and release-note it. I mean, it's just too complex -- how do we create the catalog, and where do we store it? -- to be generally understandable, and therefore useful.
  • Discussed benefits of transaction subgroups with Shane on ZODB-dev, and he gave me some cool ideas about Connection.register().
  • So I ripped another twenty or so CDs, found and fixed another bug in IC, and have reindex almost under my belt. No more silly bugs in update_schema, either.
  • The core functionality in IC is now actually stable, and I'm happy to say performance is showing to be very acceptable.
  • Wrote a report-on-the-fly for Consave.
  • And, after a good weak of hacking on IC, today, at 8pm, I FOUND ANOTHER SET OF BUGS. Good grief. Fixed those too. They seem to crop up in bunches. Sorta like a family of cockroaches when you're cleaning up that last pile of dirt in the attic.
  • And I actually started trying to force myself to believe that somehow somebody is going to be interested in maintaining it. Right.
  • Tracked down further problems in IC related to mutables and objects as keys (don't you know it). This time I have a good grasp of what has been causing so many problems to us: lonely objects wandering around the database pegged to objects that are in the database, never being inserted. This situation really underlines the main weakness with IC, which is here only being signalled to use via the ZODB BTrees, but which *really* derives from the basic nature of identifying data in a database, and made worse by mutables, which are really non-identifiable themselves.
  • In relational databases, you never have any trouble with mutables (and, really, do we even *store* mutables in RDBMSs), because any potential change to the database is done in terms of (very) concrete values of simple types. It's an automatic fact that anything you stick in a database is going to stay unchanged until you decide to change it explicitly. Even when you have weird stuff like PostgreSQL's list attributes, the list never has a life of its own outside the database.
  • In an OODBMS, when handling mutables, you don't have this luxury. Mutables might be indexed, but just try and change them behind our backs and you'll end up with broken indexes.
  • IC actually makes this worse by using these mutables as keys. Me and Johan considered this problem months ago and wrote a set of classes that would serve as indexable mutables, which notified their catalogs when the mutable changed. So far so good.
  • The problem derives, however, from *what* we put in the mutable. Oh, sure, we update the index every time we touch the mutable. But if you store a persistent object in a mutable, one that doesn't have a stable ID and your custom __cmp__ method, oh-oh-oh. Right. It'll blow up over runs.
  • Now you could go out and blame the BTree on this limitation -- why doesn't it just know that the damned object is itself, without the need for a unique ID and this __cmp__ nonsense. And then it dawns on you. It's impossible to overcome this limitation, for the obvious reason that the ID is the only way to actually tell one object from another, and an RDBMS knows this in very essential terms, when it allows you to fetch stuff from rows only based on a concrete value that is stable over runs.
  • This somehow feels like a chess game. I'm a pretty poor chess player, not because I don't entertain decent strategy (I normally do), but because I tend to overlook pretty obvious stuff like the fact that the opponent's knight happens to have in target range the specific square I'm moving my queen to. I'm so bad at doing that people actually take as a given that they need to warn me about these mistakes to make the game actually last over 10 moves.
  • Now this is a very critical time for these damned problems to show up, because we have very little time to ship the database in a usable state to the customer, and I'm probably the only person who understands what needs to be done, and I'm definitely the only person who is willing and able to fix it. The problem is doing all this in time.
  • Guess tomorrow I'm going to be writing a plan with a schedule :-)
  • free software == free to break and fix it yourself
  • Hacked the hell out of IC. But.. there's still a lot more left! Didn't do a lot more apart from that. Well, I started off a bad chess game, I got my house cleaned (anybody who knows me will say "amazing!"), and I tried (not very successfully) to get rid of my flu. Damn, I'm tired.
  • More index checking for IC. It now looks quite stable; however, the problems it's uncovered, and how to fix them, are on my plate now. Cleaned up the Checker classes a bit and have them ready for checkin (it took me two full days to get them to this point, and that doesn't include fixing problems that have been uncovered by them -- sigh).
  • tcpflow is awesome! Trying to debug some problems -- it's hanging after accepting mail from me, oddly enough.
  • James wrote a cleaned up version of the functions we suggested for the LC_NUMERIC, with a short testcase: [] However, my writeup to python-dev assesses the situation directly. This is an attempt to clarify the decisions that need to be made with relation to this situation -- let's see how things develop.
  • Researched a bit into how CVS treats binary files, and how conflicts are handled. It's neat to have access to the repository files, because you can really get down to it and figure out what's going on.
  • So, to start off, binary files (specified with -kb) only differ from non-binary ones in one line:
     expand  @b@;
    It's quite interesting that this seems to only be used for linewrap conversion and keyword expansion, since it should impact the way merges are attempted, too. Let's give this some more experimentation.
  • Hmmm. Okay, so this test was interesting. I had two checkouts, A and B. I changed a -kb file in A and checked it in, then changed and tried to check in the same file in B. Boom, of course:
     cvs server: Up-to-date check failed for `'
    Now that's pretty obvious, and it happens for non-binary files too. However, when I did a cvs up, here's what I got:
     kiko@manonegra:~/dox/PIPE/Ricardo_I-X$ cvs up
     cvs server: Updating .
     cvs server: nonmergeable file needs merge
     cvs server: revision 1.2 from repository is now in
     cvs server: file from working directory is now in
    Wow. So CVS does know that it's not able to merge this sort of file. Now let me try the same with another, binary but not added with -kb file. It's in principle unmergeable, but CVS doesn't know it's a binary. Well, lo and behold, it *does* merge the files. It mangles it horribly, but it does merge. Now *that*s scary. I really need to audit and update those binary files!
  • Another interesting (unrelated) point has to do with sticky tags. When you pull a revision with a sticky tag, and you change it and try and commit it, CVS complains that it's not a branch -- of course, you can't check in with a specified tag unless that tag denotes a branch. What needs to be done here is a cvs up -A, which brings the file "forwards" to CVS HEAD, merging in the changes that happened since then.
  • I hate it that CVS on windows adds these crappy kopt lines, and I hate it even more that bonsai chokes on them. The main problem is that running a sed to clean them up is faster than solving the problem..
  • Setting up cvswrappers is a good idea, but it's usually best done *BEFORE* importing the code, of course: []
  • Unsurprisingly, the flu beat me. Gross.
  • Damned cool: []
  • Found out about the CSS2 cursor property, which is pretty cool, via this testcase: []
  • Spent the day hacking an index checker for IC, and it's close to getting where it should. In the process, I uncovered some ugliness introduced into the code; this is getting fixed, slowly.
  • Skipped to a marriage this weekend, where Roman finally gave up being a bachelor for good (note also that he's stated to be a father quite soon, which was the most decisive blow here). It rained in Santos for the weekend, so, besides watching some TV (including late-night bits of La Cité des Enfants Perdus, which is *downright amazing*) and visiting an exhibit on advertisements at the local art gallery, I can't say I did much of profit.
  • This morning lots of activity surrounding my LC_NUMERIC proposal has started to fall into my mailbox and I now want to believe it's actually going somewhere. And amazingly, it seems that Guido has conceded that it may actually be acceptable! I bet right now Gustavo is rolling over in bed crying over the demands to clean up his patch, though.
  • Hmm. I seem to be trying to develop some sort of flu. Let's see if I can beat it.
  • Finally managed to swap the second drive at Consave. I noticed that lilo 22.2 doesn't support raid properly, which is quite tragic, so I had to compile a pirate version just to make sure the box is bootable on both disks. Now this new lilo is pretty weird. It tells me to do lilo -x mbr -- let's hope it worked! I tried to build a deb, but it kept complaining that /usr/bin/make couldn't be used as an interpreter and I just went
     <kiko> dude
     <kiko> I GIVE THE FUCK UP
     <jdahlin> :/
  • Did some random Consave hacking, another diff for bugzilla bugreplies, and reviews, support and the usual nudging and winking.
  • Thanks to spambayes, I nearly didn't notice the over 500 Sobig messages over the past three days I received. That's pretty amazing, I tell you.
  • Grrr. I had to reboot anthem after 26 days of uptime just because damned lockd didn't want to restart. It's very frustrating after running portmap again that all the services "disappear", including the very important lockd! So let's find out how to kill the damned thing for next time.. Hmmm. So somebody else has had my problem too: []
  • Maybe a solution is to call lockd_down repeatedly from the client-side, but I doubt it's something we could do without a kernel module. More research tells me that too -- it doesn't seem like
  • Hmm. I just ran into the thought that maybe lockd *does* answer to kill -KILL, it's just refusing to die because it's blocked by something.
  • Trond writes to me reminding me of pmap_dump and pmap_set. Of *course* that's the way to do things -- never mind killing lockd. Though it seems my hunch is correct -- lockd is waiting for everything to unmount.
  • Trying to track down a weird postfix bug when trying to use ldap. We get an error about damned ldap_url_search_st being undefined -- HOWEVER, it *is* listed in the file. So hmmm. Aha. It was a version mismatch -- we had installed from debian testing and we were trying to use postfix-ldap from woody. That's not entirely smart. Fixed.
  • Wow. Almost a week without news here. Well, I'm back from Rio (where I enjoyed some well-deserved beach-time) finally. This week's going to be a hard hit on the development head, so I'm starting right now.
  • Swapped one of the disks at consave yesterday, but the second disk I was going to swap into the raid array is (smile) TOO SMALL for the damned partition. So now I have to wait for another one, visit consave again... patience, grasshopper.
  • Flamed some Telefonica people on the spambr list for kicks. It's amazing how they have the guts to complain they are working on solving their spam problems after years of doing nothing. They may be working on it, but don't write to us until you've actually accomplished something!
  • Put up some pictures of the trip after doing some Gimp (despeckle is *so* cool) magic on them. Funny how my camera seems to blur pretty much 80% of the shots, and darken 100%. Maybe it needs some fixing? [] -- yeah, family :-)
  • Speaking of cameras, time to check on my *other* camera to see how it's doing. Hmm, the repair shop said 60 to 90 DAYS. That's pretty bloody amazingly slow for something I've already paid to fix. Dammit.
  • Tried to get Apache::AutoIndex to display thumbnails for apache directory listings, but after a hard time getting every single dependency to work, it just core dumps on me. *SIGH*.
  • Tried to get nbdswap to work, but it's for kernel 2.2 only. *SIGH*2* How does one swap over NFS on 2.4, I wonder.
  • Nice article on writing nice regexes at [] -- I think it's one of the only places I've ever read somebody discussing aspects of *legibility* for regexes!
  • Fixed up logrotate to properly rotate logs for mysql and mrtg, and ended up realizing that I need to sort out /var/lib sizing issues. It's currently past huge and I really need that space on /var.
  • And, finally, I'm #3 on google for "kiko" ;-) Now all I need to do is defeat kikoveneno and the evil web japanese translation and promotion. The latter is probably not going to be very easy.
  • Sent off the 11th patch for Bugzilla's bugreplies. I have a hunch caillon is actually going to approve of this one.
  • Today I realized that I didn't patch anthem's kernel for i2c/sensors, and amazingly enough, that may be the reason for the current rock-solid stability we're seeing. We've been up for 25 days already! Oh, sure, for Linux that's nothing -- as soon as you realize we had been rebooting almost daily previously. NFS, RAID, SCSI, HIGHMEM, name your acronym, I've had a problem with it.
  • Among the top search keywords that end up hitting Async's site, I'm a bit startled to realize that "kids sex", "sex kids", "flagras sexo" and "sexo kids" are listed in the top 20. We get this traffic because we host an archive of all the spam we get here.
  • Another interesting feature of *that* is that people write to me regularly asking for datashows and other hardware. Don't they actually read enough to understand it's a SPAM REPORT? No, we all know, Users Don't Read<tm>: []
  • Hey, found a good friend online: [] -- and hacking too! He linked via advogato to rcastro, at [] , which has worked on some cool stuff in the kernel.
  • Hacked a small auto-logon script for out damned DSL provider, which sucks rocks and logs us out occasionally. They use a stupid Web form (!) to authenticate us, imagine that.
  • Alex sent his agreement to the PSF (and python-dev) today. Let's see how long it takes for them to acknowledge it!
  • Did reviewing for consave, trying to merge this big fat branch in by tomorrow.
  • Created a small file that describes how we got to our current Ion keybindings, for posterity (ION-KEY-RESEARCH).
  • Did an extraordinary amount of documentation updates. Wrote docs for HNC's database update, for Consave's processes (for about 4 different parts of it), and for Glandata's proposed software process. Of course, I still need to prepare a presentation for Glandata tomorrow.
  • Still pending are major reviews for consave, one big IC checkin to solve the list problems we've been seeing, and the end of the soap opera that Bugzilla bug 207754 turned into.
  • Interesting bit on the brazilian DNS registry: we get billed for domains even if we are not the financial contact for it (we just ignore the bill). You can actually check if it's been paid or not in their web interface at [] anyway.
  • Did some documentation updates for IndexedCatalog's Registry Mess! This is on my hitlist for the next time around with IC.
  • Interesting high point of the day was pizza for the third day straight, and me finding out that this amazing beast phpPgAdmin also exists. I guess someone might code a Unix kernel in PHP if we're not careful these days. Now *that* would not be a pretty sight.
  • I've got some extra reading to do sometime soon too: [] and the original [] (why does it all come from JavaWorld?)
  • Hacked small change in snort -- it seems debian's reconfigure had broken snort's setup for our server. It should run correctly now. The lowdown is that the problem was in the definition of HOME_NET and -i, so I'll do some explaining here.
  • It seems that snort looks at the sender and recipient in the IP header. It only logs packets that are *to* hosts in the HOME_NET network, and received on the interface specified by -i. Now on our firewall, this means that the externals come in *to* *through* interface eth1. Originally it was set to the internal network number (which is an RFC-1918 network) and obviously packets directed to that network are never going to be seen on the external interface.
  • Hacked a small fix for blockreport.
  • Recorded some extra oggs and burned CDs for posterity.
  • Hacking more on bug 207754 after caillon's major review. However, it seems that I've lost Microsoft IE compatibility (snicker)! Oops. A minor typo in a compatibility hack I added.
  • There's gonna be an event this week at the Brazilian Congress about free software. It sounds pretty pedestrian -- all the topics are very broad (and resulting as very vague), but it's interesting to see a government event with some pretty important politicians showing up. Check out the program: [] -- there are actually some friends of mine talking and I am now a tiny bit envious.
  • Ripped some extra CDs, set up devfsd permissions (just hacked perms to add another REGISTER line) and went to bed.
  • More work on the LC_NUMERIC politics: contacted Alex Larsson, and asked him to fill out a PSF form contributing the g_ascii_* functions from glib. People keep confusing glibc with glib -- it's G-L-I-B.
  • Spent some time doing support for a site on Locaweb, which needed backing up and moving.
  • Hacked Async bug 902 for a slight change in Consave.
  • Hacked the IndexedCatalog list stuff and fired it off to Johan.
  • Fired of YET ANOTHER PATCH to bugzilla bugreplies. This is getting silly.
  • Back from a trip to SP organizing a development environment for a pretty neat company that builds business software. Still tons of work to do, including some Visual Basic study! This is bound to be lots of fun.
  • So some links on VB unit testing: [] and [] and still [] and yet []
  • Some interesting bits about VB's error 429 and DLL compatibility are here: []
  • Did some woody updates to keep people honest.
  • Worked on some IC updates to make sure we are going to be safe for this month's work. Also coded up a big patch that originally came from Johan that fixes List and Dictionary support -- all in all not a bad bit of work if I may say so.
  • Finally, changed referrer filters on webalizer to filter internal links -- while it may be nice, it's much cooler to see external linkers. Unfortunately, 90% of them are *.google.* :-P
  • Some more dog-running this night (with Nando!), and Olivia's leg today seems to hurt a bit. I'll give her a rest for the week.
  • Did a long run with the dogs, and they swam for hours. Was really nice. It's still a bit too cold, and while Olivia *loves* the water, Stric won't go in (unless pushed :o)
  • Fixed (well, workarounded!) my mutt's bindings for Home/End. Apparently, Home and End are not 100% standard on all terminal implementations. I think there may be a bug in Debian somewhere, but for now my .muttrc contains:
     bind index \e[7~ first-entry
     bind index \e[8~ last-entry
     bind pager  previous-line
     bind pager  next-line
     bind pager \e[8~  bottom
     bind pager \e[7~ top
  • I'd like to know that the defaults expected were, though. There's a lot of discussion on the subject here: []
  • Delia Derbyshire is apparently the first person to have produced electronic music, and for what? The Dr. Who soundtrack, of course: [] [] and [] have info and clips.
  • The funny part is that.. I've heard it before. I have a CD that has the song as a clip.. but which one (people who have seen my collection will agree it's a scary prospect). Oh, of course. Orbital: []
  • Scary stuff: Front 242 is coming to Brazil! []
  • Prepared a big IC checkin, but held it off till I'm back to make sure the boys have enough support.
  • I'm up from 6 to #4 on a google search for kiko: [] -- no, I'm not as famous as mpt. YET. :-P (You could argue that kiko is a lot more common a word than mpt, but it's also more common than gcc and see who wins in hits)
  • Some UI discussion ensues with the famous mpt about the confounded SOrder draft window (see [] mpt suggested putting action buttons at the bottom of the lists (as I have for approval), like safari's (+) button for bookmarks: [] -- the rationale being that the action is specific to the selection in the list.
  • The other suggestion was to use 4 different lists for the different states the sorder is in. This is a more controvertial change, but he followed it up by providing me with a screenshot of IE's type association dialog -- see [] -- problem here is that the CList widget I have doesn't allow multiple rows per list.
  • I still don't have a good idea for it, but it's developing.
  • I did some rips of some CDs I had while checking out [] I actually had to re-rip three of them because there were continuous mixes, and I decided to include the track number in them to make sure they could be played back in the correct order to acheive the intended results (i.e. not interrupting the songs all the time).
  • For some reason, I'm having a bad day. My main achievement seems to be keeping my INBOX at 1 message. That's pretty amazing, for me :-)
  • I also sent personal requests to certain sites that are blocking us, using my newly opened yahoo mail account -- let's see how long till I get some spam there?
  • This site is pretty cool, altogether: []
  • So nanas-sub has moved to killfile, I find out today. Duh. Even though was blocking email from me :-)
  • Did some Win2K maintainence: defrag, SP4 install, etc.
  • Did some work on bugzilla bug 207754, for quoted replies.
  • Hacked IndexedCatalog to actually support reindexing, and added some warning printout to make sure everything's going as expected.
  • So the KISS DP-500 DVD Player is now something I crave, if only for the capability to play Ogg-encoded sound. I realize I really need to start pushing Ogg support if I want to do it right. And I've found two places that sell it pretty sweet: [] and [] -- maybe somewhere 3000km closer would be even better ;)
  • My box is probably the fastest rip+Ogg encoding box I've ever seen! Three CDs in an hour! And none of it was pirated :-P
  • Worked a bit on Bugzilla layout on our site; I think I'm actually starting to like show_bug! []
  • And just when I thought I had seen everything, a Cockroach FAQ: []
  • Cleaned out the hard drive from the old box, and lent it to Salgado to hack a bit on the mozilla webtools.
  • This is really funny. My Amazon Message Center told me today:
     You may also be interested in:
     Date        Subject
     08/07/2003  Isn't it about time you broke down and bought Windows XP?
  • Want a really weird bit of trivia? The song Britt Ekland sings in the Wicker Man, "How do", is covered by The Sneaker Pimps in their album Becoming X, and I bought that CD about a month before I learned about the movie for the first time (in a ripped apart newspaper at a bus stop).
  • So I learned the most bizarre and grotesque fact today. It *is* possible, in runtime, to change sys.stderr and sys.stdout to point to other open files. So you can do stuff like:
         import sys
         log = open("/home/.foo/foo.log", "w")
         sys.stderr = log
         sys.stdout = log
    and catch your customer's bugs before he calls you ;) The interesting part is that no, we aren't changing FDs 1 or 2; the printout code (and the exception code) looks up those attributes in sys before outputting.
  • Note that it *is* possible to change FD 1 and 2 in runtime at the libc level -- you'd close the FD, open() another one, and dup() it to the original number. I'm not sure if this is used in practice, however.
  • Today I got brave (well, actually, after 10 days of 15 spams/day I decided I *had* to) and installed spambayes, and I'm giving it a good first push. It seems to work wonderfully after some initial training, but I haven't set it to filter yet; I'm just classifying and making the header apparent so I can see how it looks. The only big fat showstopper in using it for me was the lack of a default rc file! Amazing I can't find one in the distribution (or something like a QUICKSTART file) but here goes mine, for anybody in the same situation:
         persistent_use_database = True
         persistent_storage_file = /home/kiko/.hammie.db
         messageinfo_storage_file = /home/kiko/
         train_on_filter = True
  • Mutt is quite nice for configuring this sort of stuff (if quite unusable for other things -- such as searching!) Though maybe the searching part is just that I'm clueless. Let's see.. [] hmmm, so there's a (l)imit command, and so I limit "." to get back the regular display.. hmm how do I do a full body search..
  • To top off the day (and make me call it quits), Brazil just lost its very own Citizen Kane: []
  • Been offline for a couple of days -- first in SZ, then Brasilia, and today SZ again. It was Suzy's birthday party and I attended; yesterday stayed around for long enough to take Alayde to the hospital with some sort of infection. (What fun weekends off are.)
  • Today some serious havoc has been happenning over at Consave. We've been getting odd kernel panics and oopsen over the past weeks, and I'm trying to track down the reason.
  • So one of the potential reasons could be kernel plus memory: we upgraded this box to 1GB a while back and the kernel hasn't noticed it (still reporting 512MB). I recompiled with HIGHMEM and it now seems to recognize the full gig. However..
  • Another problem has been IDE bustage -- all sorts of weird hda DMA interrupt problems. This has also been happenning pretty regularly and there are so many potential causes it's mind-boggling. One could be the fact that we had a 40W cable and a 40W HD case -- I swapped the cable first, then checked the case and ripped it out. When I did that - lo and behold, more hda DMA bustage (in rather different manners than before).
  • So I think "hmm maybe a busted drive" and swapped hda for hdc and rebooted. Guess what? No more problems.
  • Or maybe all of this was a dream I had, and I now need lunch.
  • []
  • Did some hacking on IndexedCatalog, though the List bug is still there (I need to really get down and look at it)
  • Jon Nelson's baby was born! Congratulations, sincerely: []
  • Devised with BT a half-decent system for tape rotation or archival. Basically, we have tapes for two weeks, labelled with the weekdays they are supposed to be used (with 1/2 denoting the week). Every month a tape goes out of the rotation and into archival; that way, the tape's life in the rotation is at most 14 months. Now I need to find out if 28 repeats is acceptable for a tape :-) Hmm, come to think of it, it would be best to archive a fairly new tape.
  • Well, numbers (for *insertions*) that have popped up in *one thread* are 25, 50 and 200: [] but trust the definitive reference by Kan Yabumoto: [] -- 100-150 backup operations.
  • An interesting page on Seagate describes two `industry-standard' rotation schemes which aren't very much like ours: []
  • While that may be seen as a bad thing, ours was custom developed using proprietary techniques ;) -- no, seriously, I think we are a special case (*seriously* ;), because we perform full backups daily, and we don't need a history of more than 2 weeks of tapes (apart from the monthly archival). Plus, the system needs to be simple, or else we halfwits mess it up, right?
  • A decent tutorial on GDB is hard to find: []
  • Did some fidgeting with my DNSBL lists. I think I figured out something important; I need to check with *enhdnsbl* if the provided blocklist returns Not sure if this is correct, but it's made the trustic blocklist start working. Unfortunately it gave me so many false positives (and it seems my whitelist wasn't working, either!) I had to turn it off. Let's see what time makes of it.
  • Massive hacking work, incredible stuff and mostly working (apart from the ZEO bits). Still need to fix up some security issues, but we're looking *much* better now :-)
  • On a sad point, Anthem had a SCSI hang today. Again, this time in the afternoon (around 4pm).
  • Spent half the day chasing down bugs in ZEO and authentication. Papered over one of them, horribly. Details: []
  • An amazing amount of hackery is going on meantime. And when I say amazing, I'm saying 1500 lines of Python and Glade changed per day, by 3 people!
  • Over this weekend I watched a could of nice movies. First off the bat is Donnie Darko , which I had to end up buying, so hard to find it was in Brazil. I'm trying to find out what the name is in portuguese, and it's not very easy (I think it's the same name, oddly enough); I don't think the movie was actually released here. And it's a shame, because it's a smart, peculiar movie. It's an odd movie about a kid with psychiatric problems, but it's got a serious twist of weirdness in it. The depiction of the late 80s -- one of the quaintest periods, I'll say in another 20 years time -- and the portrayal of your average `growing up' teenage life in the american suburbs is superbly realistic, specially if I think about the time I spent in Maryland during the same period of time (and yet, it's not stereotypical.. the characters are nice and believable and somehow, things fit.. though perhaps not Drew Barrymore, who's too much on the cornish side..). The loopy ending of the movie is understandable, but making sense of the middle bits has me fixed. Luckily, I own the damned disc :-)
  • Also watched (hah) The Wizard of Oz. Found it particularly odd that I didn't recall many peculiar aspects of it -- that the `real world' is black and white, for instance (and how ironic), and how young Judy Garland was when she shot it (she's Liza Minelli's Mother, believe it, and she marrid the Tin Man, Jack Haley ;). Also shocking is the odd citation, "Pay no attention to the man behind the curtain." I noted another often-referenced bit, but.. I lost it. There's an odd plot hole in which the WW of the W refers to a bug she's sent to take care of the stalwart, just before sending off the flying monkey -- but guess what? It's a cut scene: [] Also notable is that in the book the characters wear special glasses to not be blinded inside the Emerald City. This detail didn't survive the movie adaptation.
  • I'd like to find a couple of movies to finish off the first 50 in the top-50. Part of the problem, interestingly, has been *finding the portuguese names! Looking through google is slow, unfortunately.
  • Spent too much time looking at Trustic. It's a pretty cool service; if only it had a bit more cool statistics and datacandy it would be addictive.
  • For some stupid reason, my spamfilters aren't working tonight! What on earth is the matter with sendmail?
  • Checked today for something I was always curious about. Is it okay to mount a hard drive upside down? It seems it is: [] [] and so on.
  • Updated Apache again. It's funny that some people complained that Bugzilla released security fixes over 2.16 when they do it all the time.
  • And now, for something a bit bizarre: []
  • Ran into an odd GTK+ bug when firing a modal dialog from a double-click handler, just like this guy []
  • Off to SZ. Anthem did the SCSI thing to us again at 8am.
  • Lately I've been sent cease-and-desist-style letters from a Brazilian judge via a company telling me to remove a site from our webhost. Unfortunately for them, it's not actually kept here - I just link to it. Nonetheless, they insist on amusing me by sending me these ridiculous letters: []
  • At least they know how to use whois, though they have the wrong domain ;) []
  • The letter itself is the same one (perhaps even the same bit of paper) that lawyer tried to deliver a couple of weeks ago: []
  • This morning I was asked how to get a list of modules from the CVS server. There are 'cvs co -c' and 'cvs co -s', but they list the modules kept in CVSROOT/modules, but I wanted to know the top-level directories in the server. There's a cool FAQ that explains how to do it at [] and I coded a small script to do it using the "cvs up -dp" method, which is quite fast. Grab it here: [] -- put it in your patch and it "just works".
  • I keep forgetting but bash can check strings using "-n" and "-z".
  • Cleared up some LaTeX string formatting using DeTeX, from [] (not a bad program, after all, though I had to do a bit of manual cleanup).
  • James Henstridge took the time to explain to me a bit about what X atoms (and GTK quarks are):
     <kiko> what's a g_quark? :-)
     <jamesh> similar to an atom
     <jamesh> but smaller
     <jamesh> :)
     <kiko> jamesh: what is the purpose of _get_data_by_id vs. get_data ?
     <kiko> it seems that the ID is generated from a string anyway (see quark
     <jamesh> kiko: one takes a quark, the other converts the string to a
     quark and calls get_data_by_id
     <jamesh> kiko: if you are going to call get_data() a lot, you can do the
     string -> quark conversion once.
     <jamesh> kiko: the difference between quark and atom are that quarks are
     used inside GTK as process-local identifiers
     <jamesh> kiko: atoms are handled by the X server
     <kiko> XCreateAtom... or something?
     <jamesh> kiko: so you can set a property on a window to an atom, and
     another X client can get the atom and convert it back to a string
     <kiko> I see.
     <kiko> and X stores these strings somewhere?
     <jamesh> in the X server
     <jamesh> try running xlsatoms
     <jamesh> which will list all the atoms in your X server
      they stick around til you restart your X server
      pygtk is set up so that functions that take atoms as parameters
     can also take strings
  • Found a news bit on one of our recent clients: [] The site it's on has a very very evil footer that forbids copying, memorizing, photographing and maybe even reading (or linking 8).
  • My god, what a hacking frenzy. I can't even remember all the things I did. Let me try.
  • I reviewed a bunch of patches for Vlad Joccuri over on b.m.o. I also coded a tiny patch to fix the CSS display for bugzilla's buglist.cgi.
  • I did some random fixups of to make it a bit nicer. Our new buglist is a treat, really: []
  • I hacked two small features into Kiwi -- sane editables, and an error handler for setters.
  • I added about 1000 lines to consave in about 10 days or so :-P
  • I found a couple of bugs in IndexedCatalog and even one in Kiwi (I think). I filed Gnome bug 118036 [] because of a reparenting issue with libglade.
  • I wrote a proposal PEP that deals with Python and the LC_NUMERIC issues I've tracked down with GtkSpinButton. The original GNOME bug is here: [] and the PEP text I sent today to python-dev is here: []
  • Gustavo did some great work on the code for the PEP, but unfortunately Martin Löwis hasn't been too thrilled at our proposals which is particularly frustrating for a first-time effort. Sometimes OSS is very hard to work with -- it's certainly not easy or `free' contributing to a project. So now I have to bother Alex Larsson to submit some code to the PSF..
  • Fabia undergoes surgery tomorrow so I'm trying to fit real life into this tight schedule. It sucks.
  • As time marches on, our Sales app starts getting better.. slowly.
  • Last night I watched The Wicker Man, and finally ended a year-long wait.
  • One odd bit is that Britt Ekland, beyond having an affair with Rod Steward (who tried to buy off the Wicker Man), *married* Peter Sellers!
  • Another list, 100 top british movies: []
  • More consave hacking. Watched Carnival of Souls, which is a spooky weird [short] movie.
  • My sister is funny: []
  • Rico's been working on printing bills for brazilian banks. He's got a nice little library put together for Python already. He also found a reference for VB programmers: []
  • After over a year, I now know that sendmail's access list *permits* comments to be entered prefixed with a # symbol. Oh, I guess I *could* have guessed that the manpage for makemap would have included the information, but the real tip came from this page: []
  • Closed a new deal on a consulting project, which means some bugzilla hacking in the near future!
  • So Roché started a thread on unique sequential IDs on ZODB-dev: [] and I added what I think is a decent analysis of the problem: []
  • Funny part about it is that SteveA suggested we used a *separate* server to provide unique IDs! That, being that we *have* a database in our hands!
  • Finally took the time to implement an IP-catcher in my duo that adds IPs to the access list. Now we'll be safe from repeat spams if I'm fast enough. Just remember the right GID for the file!
  • We should start one of these in Brazil: []
  • Time for some movie updates. I saw Fargo this weekend with Fabia; it's a pretty nice movie, though I guess the special part about it is that it's a really `normal' movie that is *very* well-made and acted. It has the odd `real but unreal' feeling that is the typical Coen brothers' trademark: []
  • I also saw Orson Welles' The Trial. Now *THAT*'s an incredible movie! It's a surreal and sickly dream, and the visuals and music are haunting. I suppose the real credit is of course Kafka's; the story is outstanding. Interesting that Welles thought it was the best of all his movies; I would tend to agree, it's by far the more unique of them.
  • Johan recommends one of Bergman's movies: []
  • More on instance reloading []
  • I think Python2.2 (at least 2.2.1) does imports in a weird way, and this ends up triggering circular import bugs in consave. I've solved them here, but it's damned weird why it shows up. At least I know now why I ran into this problem two weeks ago at Consave itself.
  • [] is a hilarious URL, but the content is actually well-balanced and to-the-point.
  • An interesting message by lupus describing the sizes of GtkPerl vs. PyGTK; unfortunately, it's old: []
  • I just found a very fun way to work with our GUI. It takes quite a while to load, and debugging gets to be *very* annoying when you need to change, re-run, bonk, change, re-run, bonk. So I got the idea -- let's start being smarter about this in runtime.
  • Okay, so it's not exactly rocket science; still, I hadn't seen the solution so close. So I fire up the holy google and ask it "python imported modules list". Guess what: []
  • Jackpot!
  • If you didn't know all about the Punic Wars, you will soon: []
  • Fixed about 3 consave bugs, one of them a very old and rather critical bug (it wasn't even that hard!)
  • WTF: [] and the official [] and the amazingly bizarre [] and finally []
  • The ctypes module for Python is damned cool: [] (not that I'm doing anything with it right now).
  • Today a lawyer showed up at Async presenting a paper signed by a judge demanding we removed [] from our server. He represented the company that is being sued by the domain's owner. Since it wasn't an official request and I didn't recognize the judge's name, I apologized for not signing. (He waited outside in a taxi for about 30 minutes after this and then rolled away). I wonder when I'll hear from him again.
  • Today one of our clients was caught in a false positive by spamcop. The worst part is that his provider indeed *is* a spamhaven!
  • And, while I was fidgeting with the server case today, just when I thought everything was great, boooooom:
     Jul 10 18:58:03 anthem kernel: scsi0: PCI error Interrupt at seqaddr = 0x8
     Jul 10 18:58:03 anthem kernel: scsi0: Data Parity Error Detected during
                     address or write data phase
     Jul 10 18:58:03 anthem kernel: scsi0: PCI error Interrupt at seqaddr = 0x8
     Jul 10 18:58:03 anthem kernel: scsi0: Data Parity Error Detected during
                     address or write data phase
    the hints I see are [] and [] -- the funny part being that our *network cards* stopped working; the drives went on fine. I had to do a full reboot; firmware bug somewhere? The conclusion I run into is that the adaptec and the NICs don't get along too well in certain conditions. Seems to be something to do with A PCI bus bug and the new generation of the aic7xxx driver (maybe a lower TCQ would work, but...). Let's hope the error doesn't show up again.
  • This is a random update just to let you know I'm still alive (though not completely). If you ever wonder how to check whether you are on a box that has an ABNT2 or US keyboard configured, try this (it works for me and rdesktop):
     has_ced=`xmodmap -pke | grep cedilla | grep dead`
     if [ "$has_ced" ]; then
         echo "Ativando teclado internacional"
  • Setting up midentd via inetd in debian is silly and doesn't work for me.
  • Exabyte's VXA and Onstream's ADR are what I am looking for.
  • SCSI still ok. Wow.
  • Debian annoyances: /etc/init.d/sysklogd, though it has that name, has a K in the name for no purpose I can imagine. If you want to change the kern.* logging configurations, you need to restart *klogd and sysklogd* or klogd writes to a dead pipe. At least that's what my brief attempt to filter out netfilter logs seems to have uncovered.
  • Seems like SCSI is stable so far.
  • So the SCSI drives were plugged into the wrong port on the adaptec 29160 (the wide connector on the SE bus instead of the wide connector on the LVD bus). Why is SCSI so @#!@#!@ complicated?
  • The result is that the drives now run in 160 mode.
  • I also moved the terminator to the last slot in the LVD cable; that seemed to work nicely, but I'm still grepping for SCSI errors.
  • Interesting facts about the 29160: there are two `logical' busses on the card; one LVD and one SE. On the LVD bus there are two connectors; the external one and the internal closest to the external. The SE connectors are mounted one right above the other: on the card lives the narrow one, and on the top of it lives the wide one.
  • Here's bonnie for you on the new setup:
     -------Sequential Output-------- ---Sequential Input-- --Random--
     -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --Seeks---
     K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU K/sec %CPU /sec %CPU
     11710 93.0 23140 16.6 13515  6.5 10569 82.7 40882 11.1 717.5  3.9
  • Helpful docs including [] and [] make me wish we hadn't bought an OEM card.
  • NFS locking explained: []
  • Distracted myself by browsing /proc/locks using A nice reference on /proc files: []
  • Q&A:
      so how do I retrieve a file based on its inode?
      kiko: Two ways: walk the file-system and look for files with
     that inode, or learn to use fsdb.
      jafo__: so a "find -inum" is the canonical way?
      kiko: You'll want to restrict it with -xdev, of course.
      kiko: For ext2/3 on the various Linux, it's called "debugfs".
      For reiserfs it's called "cat".
      kiko: [2] debugfs /dev/hda1
      debugfs 1.32 (09-Nov-2002)
      debugfs:  ncheck 21
      Inode   Pathname
      21      /vmlinuz-2.4.20-8
  • Wow, what a rant: []
  • A rather cool link to Elephant, a file-system with versioning: []
  • The weekend's fight with ExtensionClasses and BTrees has left me a bit wiser on what the particulars are, but I still have a lot of thinking to do. The question is when will this thinking time be available?
  • A small victory: today my sister told me that she got Dad to use Mozilla, and he's been using it now for a week instead of Outlook. My family rocks.
  • If you can choose, pick composition over inheritance whenever possible.
  • More on the rdesktop license mess: []
  • AHA! Zope3 and fssync! Guido rocks! []
  • Very cool medical info: [] and []
  • Spent the whole day in a rut. It seems that everything I tried didn't work. I realized that when I am coding, I usually make a guess at what will work, and `bet' on that approach; today was one of those days where *all* the guesses I made were wrong. I'm not sure if it's because I'm a bit sick, a bit tired, or both. All in all, it sucked.
  • Problem #1 I ran into was a data corruption bug I'm seeing in IndexedCatalog in ListIndexes. One of the lists complains that it doesn't have an element that is *clearly* in its keys() -- obviously some sort of BTree corruption. I spent hours trying to get what was wrong, and it ended up being very simple: an append() was being called on a PersistentList, and the resulting list was *usually* ordered differently (depending on the memory location of the empty list, which sucks, but is a result of the __cmp__ method on these darned IndexedObjects). Tim Peters was a great help when he pointed out the existence of a check module in the BTrees package, and Jeremy hinted that I was doing something very wrong to start off with.
  • I think the error occurs because the empty list is ordered randomly wrt lists that contain IndexedObjects, but I'm not entirely sure. The fact that it's ordered randomly is understandable, though, since __cmp__ falls back to id() comparison (and an empty PersistentList will end up trying to do id([])), but it's nasty to only run into this in very special occasions. Now I *really* believe []
  • I'm stuck on *another* issue I don't quite comprehend, too. I see Greg has brought it up before: [] -- in summary, cmp() doesn't work as expected for ExtensionClasses. I'm trying to understand this better, but it's hard. It *seems* that cmp() doesn't work when comparing basic types to ExtensionClasses. The cool part is that it *seems* that lists *do* work! Dicts, however, do not. How weird.
  • There's yet *another* issue with our class:
     >>> from IndexedCatalog import IndexedObject
     >>> x = IndexedObject() 
     >>> 0 == x
  • Argh. I start to hate Nicholas. So this last bit is because, for some reason, the IndexedObject type defines tp_as_number, which causes ints to try and coerce it (and somehow, succeed!). That needs fixing! But how?
  • Man, a bug in the ZODB BTrees almost bit me today. I was getting KeyErrors in IC's Indexes, and there was no way they should have been happenning. I just installed CVS ZODB, and cleared the database, and it seems to be cleared up, but now I need to test to make sure.stuff
  • So today's SCSI test is turning on termination on the narrow bus on our adapter. I had tried this before, but it always complained that too many devices were terminated on the bus; I assumed that only one of the ends of the cables needed to be terminated, and since we were using both cables I thought it wasn't necessary. I'm still now sure, mind you.
  • Turning off termination power on the CD made the message go away, so I'm hoping it's working. How can I be sure though? Wait a couple of days with grep on /var/log/kernel, that's how!
  • Nice take on the recent Webproxy patent: []
  • Following the author, we get [] and [] -- very nice comments on patent law indeed!
  • I decided to learn what double-underscores were for in Python method definitions. They rock!
  • Hacked a lot of tiny issues in consave and started on the test suite. Helped pinazo through a round of reviews, and fixed some Kiwi and IC bugs on the way.
  • Funny that Python allows you to use latin-1 characters to define symbol names.
  • Another interesting point: when you refer to a method inside the *class'* scope (and not the method's scope) it is an *unbound* method you are referring to. This makes a difference in certain cases (for instance, when setting a callback function) and it bit me today when setting up keyactions for a window.
  • Here's some terminator talk: []
  • Hacked urlview to use lynx by default on debian. This involves creating a .urlview file in your homedir and then using your own url handler script, which is actually *much* easier than it sounds. Now spamcop is happy again.
  • Did a lot of adds (around 50) to our spammer access lists based on DSL email that got through yesterday and today.
  • Did a bit of cleanup in the clients directory.
  • Trond is funny, but not always helpful:
     From: Trond Myklebust 
     > What if the client never reboots, but instead is turned off and
     > another client turned on? Should the lock persist? For how     
     > long?
     It will persist forever.
  • More people tried to help out though: []
  • I averaged our outbound email today (as an incidental effect of an answer to Alan, who works on the Spamhaus listings). It's pretty low:
     zgrep Sent old/mail-200306* | grep -v mailer=local  | cut -d" " -f2 | uniq -c
  • More IC buggage.
  • Funny: []
  • Installed my Wacom Intuos again at the office, which involved installing the appropriate module as described in []
  • My pet peeve of today: starting a big scp and the first file transferred is called `core'.
  • I really don't like the syntax for ctags' command-line options.
  • Interestingly enough, it seems the diskless sendmail barfs if the machine is not defined in the local /etc/hosts, even though it *IS* defined in nis. I think sendmail doesn't respect nsswitch.conf!
  • So does my box boot diskless? []
  • Caillon introduces me to the magic of nsContentAreaClick.js
  • Spent about 1h trying to help Boris Zbarsky track down a mozilla hang. It all started out with:
      #0  0x40575972 in connect () from /lib/
      #1  0x40159bc3 in connect () from /lib/
      #2  0x4282b682 in esd_connect_tcpip () from /usr/lib/
      #4  0x41e2e53e in nsSound::Init (this=0x83d7978) at 
      #5  0x40bd612a in nsTypeAheadFind::KeyPress (this=0x8157a00, aEvent=0x840ada8) 
          at /home/bzbarsky/mozilla/profile/mozilla/extensions/typeaheadfind/src/nsTypeAheadFind.cpp:586
  • Checked out esound from gnome cvs, went digging to see why esd_connect_tcpip would be hanging. Most likely the connect() call. But why is a connect to a port on localhost hanging?
  • Could be a firewall, but bz has none. Could be something hanging on the port, but a) netstat -ap shows nobody is b) if somebody was, esd wouldn't hand run manually.
  • Turns out he didn't have the localhost interface up! Duh. I even suggested looking at hosts, but the thought that localhost was down never crossed my mind (and even if it had, I wouldn't have expected hanging -- but of course, we're routing these packets to out the default gateway, and I bet even though some boxes might accept and answer them via eth0, how broken, they wouldn't know how to reply).
  • The funny part is that this is a hang from typeaheadfind, and disabling typeaheadfind *does* work :-) The niceties of debugging complex software.
  • Michy today had Win2K RAS problems. I love MS error messages: "Error 640 Code 0x23". Sounds like trouble: []
  • Doing a survey of thin client possibilities. Prices are US$.
  • Iwill ZPC [] (P4, etc)
  • Hush [] (Via C3 700/1Ghz 128+ ~ 700$)
  • Mocha []
  • Shuttle []
  • Neoware [] (Geode 300Mhz 32, 64 ~ 250$ or Via C3 800/1000 64+ ~ 700$)
  • Espritsys [] (Geode 300Mhz 64 ~ 379$)
  • Visara (Cyrix MediaGX 300Mhz 64M ~ ???)
  • Shuttle Barebones []
  • NCD Thinstar (Geode ??? 32+)
  • Maxspeed (??? 800 Mhz 128M+)
  • Wyse Winterm
  • Mappit? []
  • Midcom? []
  • VIA also makes a processor called Eden that could be usable, but seems a bit slow (400-600Mhz range).
  • From what I see (and the table at [] helps lots) there are basically two solutions for processor/mainboard in use: Geode, which is sluggish at 200-300 Mhz, and VIA which has options varying from 700 to 1Ghz. I see some thin clients using Intel stuff but the prices are not compatible.
  • All in all, I have come to realize that a thin client based on standard AMD hardware is probably still the best solution for a Brazilian company, unfortunately. The VIA M10000 is almost there performance-wise, but it would cost more than a standard solution, and perform a bit less. It is important to point out, however, that the cost in hardware maintenence that a VIA can provide (fanless operation! zero noise!) may pay off in the long term. We just need to wait another year for it to get faster and cheaper :-)
  • Funny that Gabriel Torres comes to the same conclusion as I do: []
  • Had to load/eject the tape to get it out.
  • I lost damned accounting papers for DECORE, whatever the f* that is.
  • Recompiled the kernels for the diskless boxes adding kernel-preemption patches, and turning on ACPI for powerdown (which is quite cool). No apmd necessary!
  • Heard a long rant on #mozillazine about netscape and mozilla.
  • Worked hard to reduce my email back to the original 5 messages. It's HARD.
  • Fabian did some *more* great work on some docs for the Mozilla DOM: []
  • Mozbot decided to attack itself :-) by running a run-mozbot on top of itself. Luckily the kernel is smart enough to apply the OOM killer :)
  • No surplus of good news over the last week.
  • Today's Johan's last day in Brazil. It's going to be hard to live without him, but if we don't let him go, he'll never reach the second part of this great experiment.
  • Certain things in life are really weird. I'm a member of a commission that evaluates government spending in our town; however, all their correspondence consistently arrives here two days late!
  • I'm going to have to track this down sometime:
     Jun  1 15:04:16 anthem kernel: (scsi0:A:4:0): parity error detected in Status phase. 
         SEQADDR(0x1a6) SCSIRATE(0x95)
     Jun  1 15:04:16 anthem kernel: (scsi0:A:4:0): parity error detected in Status phase. 
         SEQADDR(0x1a6) SCSIRATE(0x95)
     Jun  1 15:04:16 anthem kernel: (scsi0:A:4:0): parity error detected in Status phase. 
         SEQADDR(0x4e) SCSIRATE(0x95)
    It kicked one of the disks (in the swap partition) out of the raid array the other day. I raidhotadded it back, but something seems bad.
  • Added the last table to HNC's database. Man, DBF importing is SLOW.
  • Fixed some IC bugs. More IC buggage.
  • Finally back from RS. My talks had some media repercussions: []
  • Slowly eating up 500+ emails in inbox.
  • Updated talks at, zipped and updated at too.
  • Paid electricity bill which by some (not odd) case wasn't paid last month.
  • Snort is still not getting the logs right. It's a bit odd, but the kernel firewall logs aren't getting sent to the AUTH facility for some reason. Apart from that it doesn't like the logs generated by iptables right now. Ugh.
  • So Sid got picced: []
  • [] is fun :-)
  • Time to finish this presentation. So here's some screenshots for Thunderbird I was looking for: [] and [] and [] and even []
  • As a random update, here are two of them ready: [] and []
  • A while back, I took the care of carefully reviewing all the blacklists I used. We started out including:
     - (SPEWS)
    But they were dumped because they gave a ridiculous amount of false positives, and I trimmed the list down till it `felt right'. The situation with SPEWS was awkward because while we did filter using it, *OUR* address is listed! So no more of that. The current list has been giving me NO false positives (whee) and I'd recommend it to anybody:
     -  # awesome
     - # a bit extreme, but not totally
    The last ones almost never catch anything, though. Ah, I also do an automated rsync to pick up's extended spamlist (which contains sender addresses). All in all, it keeps us at this level: []
  • Random support, discussion and UI design for client history.
  • Discussed FieldOptions versus Registry for IC.
  • Wrote a lot of email and did a lot of thinking for consave. It's hard to snap out of it.
  • [] is *hilarious*, but bz rocks.
  • Man, you Americans are weird: []
  • Nice link on configuration by moshez: []
  • And on releases by radix: []
  • I look so lovely []
  • The saga of [] continues!
  • One of the greatest movies ever made made its way into today [] (yeah, made made made). The 12 monkeys is a masterpiece, and it's a fun script too.
  • And *HERE* is a university that works []
  • And today I found out that you are not allowed to directly modify JS DOM objects! I was enlightened by kirun and willll and [] to do pic.setAttribute("src", target)!
  • Did a lot of random hacking and QA on IndexedCatalog, Consave and Kiwi today. It's nice that the `unknown' bugs in Kiwi are getting hammered out; I need to update the docs and release though.
  • mpt is funny []
  • Some very early Javascript hacking to add a Reply link to Bugzila. It proved to be much easier than I thought! So I went ahead and produced []
  • One really nice thing about the ZODB is that you can pickle references to classes and methods and it `just works'. IC however doesn't like it all that much.
  • Put samba at consave to restart periodically (at 9am) to make sure the CUPS lists are refreshed correctly.
  • Went to see the house next to ours with Du from [] -- let's see how I can tackle this matter properly.
  • Fabian wrote a killer one-page `whatis' on DOM and JS: []
  • Why don't we have a president like this one? []
  • Worked a lot on getting Purchases banged into shape. It now seems like we have a plan.
  • Interesting bits on [] pointed by way by A. Rodriguez; I guess I need to do some extra research.
  • Did some CVS reorg for PIPE, nailed some long-leftover emails.
  • Cleaning up an INBOX is a funny process. You go through it looking for emails that you can answer quickly, and do so. The issue then is making sure that the barrage of incoming emails is kept at bay -- this problem being much larger because many of the people you are replying have quick fingers and throw back hard questions at you (now that they've noticed you're alive). I'm now going to change my policy on email: personal email gets answered once a day (and from replies); work gets high priority to avoid blocking reviews, the rest gets stored.
  • These are my 3 main folders: replies (personal stuff); projects (fsw work that I need to get to); msc (research issues). Every evening I go through them and clean up what I can. INBOX contains the pressing issues that I *need* to solve, which have higher priority over everything else.
  • That's life when you grow up, for the unwitting. :-/
  • Planning to watch Arun Ranganathan at USP today; [] and [] have the mini-biography.
  • The talk was great -- actually some historical stuff that I considered well worth knowing about (f.i. Brendan says he wrote the first incarnation of Spidermonkey in two months). We meandered about discussing XUL and whys and won'ts. Interesting to note that David Baron is working at Netscape now.
  • I still have a rough cough -- it's been weeks now. Is it ever going away?
  • Got the win2k install in shape and we now have *COUGH*msoffice2k*COUGH* running on it. I would rather we didn't, but Fapesp and MDBs are always in the way of freedom.
  • Worked with stanislaw on the first re-batch of SPOS-1.1 bugs.
  • Did some discussion of with Pinazo for the latest Stoqlib roundup. Sometimes it makes me a bit worried to see how much hacking and specification we need to be doing for the whole framework, but I guess that's life with the system.
  • I ended up watching the Maltese Falcon today too. It's a damned weird movie, so weird you're not really sure if it's really a movie or a twisted joke on you. I must say: Bogart is such a phoney! The nice part is having some really old names defined for you (aha that's where Sam Spade comes from). Nice bit of trivia from IMDB: `Sam Spade refers to Wilmer as a "gunsel," a term the censors assumed was a slang reference to a gunman. It is, in fact, a vulgar Yiddish term for a homosexual.'
  • Using the gc module to do refcounts is FUN! However get_referrers is Python 2.2 onwards only. In that case, sys.getrefcount is your friend.
  • So perl does NOT have a break statement. It has `last' statement instead. UGH.
  • For a change I watched a movie today *not* in the top 250. Guess which one? Victory, that 1981 movie with Michael Caine, Sylvester Stallone, Max von Sydow and Pelé (of all people). While almost strictly TV fodder (it's a bit too boisterious for it's own good), it's got charming details and even a touch or two of controversy -- perhaps to the point of anti-establishmentism (oh-oh neologism alert). The trivia listing for this one is pretty interesting: []
  • Electronic voting the way it should be: []
  • Ghostscript update for debian broke my fonts.alias for misc. I learned of the magic of update-fonts-alias and installed [the default?] xfree86 misc alias file into /etc/X11/fonts/misc, re-run update-fonts-alias, and it seems to have worked. I just wonder now why I didn't have an xfree-base file in /etc/X11/fonts/misc/.
  • For kicks, filed spellchecking bug [] with patch based on wordlist at []
  • Fortune gave me a poem by Edna St. Vincent Millay. Looked it up. [] -- but what's up with that background-color?
  • Cleaned up a lot of email. About 80 left in inbox. I'm shooting for 40 later tonight, let's hope.
  • So sendmail *was* fixed properly by the changes I did last week. The blockreport contained no false positives I could ID!
  • So I got to the bottom of TMPDIR and vmware. The truth is it does NOT use TMPDIR for its (pre-deleted) /tmp/ram0 file. So Jim Simmons here gives the real tip: [] seems like you NEED ~/.vmware/config with a tmpDirectory = foo. Otherwise it will happily ignore everything else :-) This message is also a nice analysis of it: []
  • Ecodenuncia should be up by now: []
  • Went to see Ultraje a Rigor at CAASO, the local hall, with jdahlin, guila and Nando. They rock so hard! [] has a weird splash screen though. Wow, they have a blog too: [] This band is so cool, I used to listen to them when I was 10, and now, 16 years later, they rock even harder. The lyrics are outrageous, and it makes me sorry people can't read portuguese: []
  • So Windows today thinks it's supposed to be in Remote Administration Mode. WTF is that? Ah: []
  • So I think I made a bad choice when selecting the type of terminal service to offer. :-/ Is there a way to change it.. hmm.. ah: []
  • And the final, rdesktop solution: []
  • If you hate evolution when it word wraps your patches, see []
  • Alerts should not have titles, period: []
  • So why do Blackbox and Ion not like them?
  • Remember: running the ZODB tests *must* be done using ZODB3/, and not anything inside ZODB3/ZODB/tests/ :-P
  • Why does fuser NOT tell me that the damned filesystem is exported by the kernel and that's why it won't let me unmount it?!
  • Finally got vmware running okay. The win2k setup SUCKS and I hope I never have to use it, but Samba is authenticating users nicely, and I am saving a copy of the image so if I have some unfortunate accident I can just untar it and be happy.
  • Xvfb doesn't like running in anything but 8-bit mode on anthem, and to be honest, I don't care. :-) It's frustrating because running it 16/24-bit makes xwud show nice black screens with nothing inside it.
  • Final tip. Yes, DGA must be disabled to run vmware 4 inside an Xvfb, just like it is for vmware 3: []
  • Johan says that rdesktop in CVS can run 16-bit colours! Unfortunately it also seems to SEGV when trying to run 16-bit colours. :-)
  • Bought tickets for Johan. Need to sort this out next month with parents since my CC didn't work. I sorta envy him, going to Dublin and then to London and finally to Sweden. I guess it's a matter of not being born in the third world :-)
  • Set up a mailing list, did some admin. Had lots of meetings today, both business and technical. The bad part was that not much work was actually done (such as releasing Kiwi or fixing up other consave bugs).
  • Played around (too late) with rxvt to try and get it to resize automatically, fired off bogus patch but went to sleep frustrated. :-(
  • Found a very cool evaluation of GTK+1.2 [] that takes the viewpoint of an embedded systems/PDA developer.
  • setxkbmap us_intl saves the day when vmware tries to eat my keyboard. Just don't try using it when running vmware (it *wants* us and won't accept any other keymap over ssh at least).
  • So the trick to avoid vmware bugNr=5788 is *not* to use tmpfs. I did
     export TMPDIR=/export/tmp
    and it appears to have done the trick. Or maybe not; I still get crashes and fucking vmware still reports the same bug number. THIS IS SO FRUSTRATING.
  • [] has some tips (including TMPDIR but no dice seems to have come of it)
  • Aha. [] indicates that TMPDIR might not be passed into suid programs, and suggests using tmpDirectory = "/a/b/c/d" in my .vmx file. Hmm. Still no dice. It *might* be because I set the tmp directory to be a subdir of the directory I placed my workstation file in. I'll need to double-check.
  • I reduced the memory a bit and it worked. However, it is *still* using shmfs on /tmp (no idea *how*, as a du shows nothing large at all). I'm going to have to disable tmpfs, as much as I like it :-(
  • Apart from this, I'm trying to torture myself by installing a blog on the Zope site. Oh, what fun. BlogFace was my first try, but I didn't like it at all -- even after tweaking it to run with Zope-current. Next stop: PaBlog. Nope, it's CMF-based. Maybe bloggem? Too ugly. [Ed: actually, it's not all that bad, now that I revisit [] -- I just didn't like the general UI semantics, but didn't have enough time to propose a nice redesign. Sorry!] Groan.
  • I've been trying to track down the lm_sensors message I get in my kernel log:
     May 21 07:59:05 anthem kernel: i2c-ali1535.o: Resetting entire SMB Bus
     to clear busy condition (08)
     May 21 07:59:05 anthem kernel: i2c-ali1535.o: SMBus reset failed! (0x08)
     - controller or device on bus is probably hung
     May 21 08:04:02 anthem kernel: i8253 count too high! resetting..
    but nothing seems to come up very interesting. There are a few threads such as [] and [] and even []
  • Found out I'm not giving one but THREE talks at FISL2003 this year (a bit to my dismay, and I have no idea how to prepare for all of them).
  • Went to consave yesterday, fixed annoying AutoCombo bugs.
  • Discussion with kris about GtkEntry completion results in []
  • Today my aunt's husband (almost an uncle, right? ;) called me up saying he had received a court order to take his website [] down because the company he is reporting about has challenged what he's saying. It's sort of a counter-sue for his. I found a number of hosting providers (of course), but the trick was he wanted to be able to edit pages in a web form. It turns out that the google keyword to get this is "file manager", so the search [] gets back a number of interesting ones, including Yahoo, Arachnonet, FortuneCity, etc.
  • Helped gezick track down a conflicterror he's getting in Zope. Interesting facts: a ConflictError is a *write* conflict error (the read conflict error class is the only one that has a qualifier stapled onto it). Also mucked around with _p_jar[_p_oid] and understood why "\x066" is actually "\x06" + "6" which is actually "\x06" + "\x35" except the last string renders into a 6. If you ever need to know, ZODB OIDs are strings of packed 64-bit ints.
  • This mail was useful [] as was Maintainer.txt in the BTrees distribution. It's interesting to note that BTrees have inbuilt conflict resolution which will only trigger if you try to modify the same key at the same time. I think. :-)
  • Random reviews and trying to reduce inbox to the original 30 messages.
  • Had an idea about SlaveViews today. One problem we have is that we need to use some ugly idle_add()s when using Slaves because the slave is initialized *before* it is actually visible and plugged into a main window. There are a number of alternatives possible: use an internal callback that is triggered on attach_slave, have a user-defined callback, use signals, try and catch when the slave becomes visible.
  • I think the real work is trying to summarize what *needs* to be postponed till visibility arrives. One thing I know, for instance: widget focus. Another thing: autocombo window keypress handlers. Another thing: framework window keypress handlers.
  • I ended up implementing an experimental on_attach() hook that does downcalls as necessary. I think it's a decent solution, but let's see.
  • Did a lot of cleanup and fixup to make sure we got a stable consave rolling out tomorrow. However, things are slacking a lot and I'm going to have to adjust the timeschedule. Amazing how 2 weeks fly by.
  • Somebody did it: [] and it rocks!
  • Aargh. Sendmail decides to refsck me over after doing a debian upgrade. This sucks. I'm looking, I'm looking. Right, it doesn't like to NOT be suid on this box because we use mqueue without a separate sender. This happened not so long ago, dammit.
  • So sendmail is giving me temporary lookup failures here. Looking into it. Aha. It seems that if you use dnsbl or enhdnsbl, you shouldn't supply the third parameter or temporary failures will reject email. More details: []
  • Next problem is when we have temporary DNS bustage, we get something like
     39 From:                     May-5-16:58:11
       Domain of sender address does not resolve                
    Now I'm not sure how this one is fixed. More googling. Well, it seems that FEATURE(`accept_unresolvable_domains') does the trick, but it's not exactly what I want. I am trying out for now:
     define(`confTO_RESOLVER_RETRANS', `10s')dnl
     define(`confTO_RESOLVER_RETRY', `8')dnl
    and seeing how it goes.
  • So today's problem is that ttmkfdir on our Debian diskless isn't creating lines for ascii encodings in fonts.dir. This was an easy one -- ttmkfdir needs "-c -m 100" on the commandline -- but I don't understand exactly why it needs to be done. No, I understand what the switches *do*; I don't understand, however, why the original ttmkfdir I compiled for slackware worked fine. Go figure.
  • Now that phoenix is no longer, the correct xpinstall line for it is:
     make MOZ_PKG_APPNAME=firebird MOZILLA_BIN="\$(DIST)/bin/MozillaFirebird"
  • Makes me wonder why they chose to use StudlyCaps for the binary name, what a sad idea.
  • WTF? []
  • Talks at FPTE (Unilins, Lins) and FIPP (UNOESTE, Presidente Prudente) about free software and case studies. Lack of internet was a bit of a shame, but the second talk was packed to 300 people and I had to use a weird microphone.
  • Tomorrow I'm off for a talk in Lins, SP (4pm): []
  • Then Tuesday I'm at Presidente Prudente, for another talk (at 8pm).
  • This means two things: a) I'm famous (everybody knows that) b) I can't work c) The Kiwi release got delayed another two days. I'm going to try and spend this time atoning for my past mistakes and thinking properly about the kgetattr/ksetattr `problem' -- it's a fun topic, it makes Andreas happy, and it sure as hell beats smoking crack as a way to make your brain soft.
  • So Allen Holub *was* criticized for his Visual Proxy thing. Hmmm. Here we go: [] and here [] and []
  • More AutoCombo hacking. This was after about 13h yesterday where I proceeded to dissect the damned widget. You might surmise I am now an expert on combo behaviour and implementation, to which I will answer "eh?" Today I made the button work (more gtkhacks.c) and did some fidding around to make the corner cases behave well. At least it's Python.
  • After some nice lunch with Guila, I proceeded to.. SLACK! Oh, right, I need to write these articles. Well, I did some tinkering with HTML and helped Blizzard (of all people) to understand selectors (child vs. inheritance). Was enlightened by Bernd about { border-collapse: collapse } for tables which is *very* useful in substituting TABLE BORDER=1 for something `smarter.' There's also the fact that there's a hidden TBODY inside all tables (who would have guessed ;) Example fun at []
  • So today started off debugging a broken commit in Ricardo's code. What a surprise, somebody storing an object in the wrong connection. So now I want to make the ZODB report the errors properly. How? Hmm zLOG is the approach I think.
  • Wow! I'm now #5, having kicked [] out: []
  • I've paid off half my monitor, another 600 to go.
  • So I spend about 5h after a GTK+ bug. The code I was working with had a very subtle hack that ended up making the bug hideously difficult to find, but I made a very simple example and it breaks too. Here:
     def changed(*args):
     c = gtk.GtkCombo()
     c.connect("changed", changed)
     w = gtk.GtkWindow()
    where WORDS is about 500 words separated by spaces. Now that this crashes isn't entirely surprising -- after all, we're changing the items in runtime inside the handler. Why it crashes, however, is much odder. The reason is tied to the fact that we are removing items in the list while there are still signals tied to them, I think. Yep, it's clear_items() which makes things crap out.
  • Instant Python debugging:
     import os, signal; os.kill(os.getpid(), signal.SIGINT) 
  • Started thread on ZODB-dev about catching closed storages: []
  • Did some massive hacking. IC, ZODB, Kiwi were on the hitlist.
  • Did some HUGE reviews -- two 1000-line reviews in the afternoon were the highlights -- and got some nice code in.
  • Discussed AuthZEO with Jeremy and helped him fix the testcases.
  • Had to remove ALL: PARANOID from /etc/hosts.deny to allow certain people with broken ISPs to connect to us :-( Debian is funny sometimes. PARANOID breaks with people that have direct DNS but not reverse DNS, as is the case with the 200.225.144/20 netblock. Don't you love iG.
  • Finally, indexed: []
  • Renewed my ACM subscription. The main problem with it is that I receive an enormous amount of spam from that address! :-( I wish ACM was a bit more draconian with its spamfilters. I also fired off some requests to see if I can find out where my lost publications went (old office address! Bad bad bad!)
  • [] holds some samba answers.
  • I think testparm is a really bad name for a samba-specific script, but it's a helpful one all the same. In our case:
             machine password timeout = 604800
    which isn't all that helpful.
  • So lalo suggested I had a look at [] [] and other things related to "staging". So that's the term :)
  • This is damned cool: []
  • Ran off to Brasilia for the weekend for Michy's birthday.
  • Filed GNOME bug 112395 in preparation for a new release of 1.2. Jamesh says "just sync from HEAD and you'll be good".
  • Working on Consave docs, filing bugs, and getting things organized. Still a lot to do.
  • Wrote to samba-list to try and find out why CUPS printing doesn't like samba: []
  • I'm no longer broke! :-)
  • I'm almost dead broke! :-(
  • Fixed anthem's snmp (was loading mibs from wrong place, and snmpd.conf didn't allow public access), got VMWare to run, trying to fix issue with diskless cron. Fixed snort. Thought a bit about cron trouble.
  • Accomplishment of the day: we are hit #9 on google for the query "Lonely Married Women". The sort of thing that makes you go WTF?
  • Hmmmm. So the default runlevel on debian is 2?
  • Uhm, IBM bought Rational?!
  • A nice link for a hacker: []
  • I watched Le Placard [] today, which is a trivially funny movie. It's full of nice french subtlety (some of it not all subtle) and controversy, and both Danny Auteuil and Depardieu are fabulous (and hilarious). Watch it if you have the chance and are in the mood for an upbeat story.
  • I case I forget, navigating with :grep in VIM is done with :cn and :cc
  • Fixed up my tax declaration as we needed to include this extra car somewhere.
  • Fixed nobody to save htdig pidfiles in /var/tmp, where he can write
  • Discussed and decided to make FrameWork into a package, to better accomodate yacc's work on Adapters and accessors..
  • Started work on Consave wiki.
  • If you use Spamcop and Mutt, you can try out this set of configs that I altered based on Cleber Mori's suggestion and []
     send-hook   spamcop set signature=""
     send-hook   spamcop set mime_forward="yes"
     send-hook   spamcop set editor="/usr/bin/true"
     macro index \cw "<forward-message>spamcop\n\n\n<send-message><save-message>=spam<enter>" \ 
         "Forward to SpamCop"
    I don't use S because I sometimes want to read the message before sending it (!) to be sure it's spam :-) and S is bound in the pager view. Don't forget you need a spamcop alias there.
  • Watched Hitchcock's Psycho yesterday (beautiful movie, interesting plot, great ending).
  • I want to watch Donnie Darko, but nobody has it! And The Wicker Man too! /me adds to amazon wish list.
  • Fixed up my resumé for Fapesp so we can request scholarships.
  • While cleaning up the logs, I just realized I turned firewalling on on June 27 2001. That's not too far away, eh?
  • I watched Jacob's ladder, the Adrian Lyne/Tim Robbins movie, and it's in my top-30 list forever. It's an amazing classic. I'm not going to ramble on as I usually do, but I should point out some notes. The original screenplay has some interesting bits left out in the final cut: [] -- personally, I like the movie more because it is a lot less obvious (I can imagine Adrian discussing with Bruce over it - `I'm not so sure' with a smug face) I should also point out that Louis (Danny Aiello) talks about Meister Eckhart and hell, which are nicely discussed at [] -- this makes sense now that I realize he's actually a philosopher (and he has a PhD to boot :-)
  • Cute detail: the taxi driver is called A. Garzero -- now look at the credits here: []
  • There's another weird bit - just before entering his apartment for the first time, Jacob picks up a doll and places it on a table nearby. I'm not sure that that is supposed to mean, but we hardly see any `free' shots in a movie, so it's at least charming.
  • Nice board about the movie here: []
  • The discussions go on, but there are three interesting views to the drug issue, which is very murky in the movie (but clear in the screenplay): a) there is no drug, just bad luck b) there is a drug, and Jacob *is* Michael c) there is a drug, and Jacob somehow understands it before dying. I've got an opinion, but I'm not..
  • So I've got an MSc now! Time to update the webpage..
  • Ran into an interesting feature in our change to Debian -- the shadow package seems to make sure that inactive users (ones with ! in the passwd fields) can not authenticate at all. Maybe it's PAM - I'm not sure. The fact is that one of our users had a ! in when it should really have been an x. Oops.
  • So it turns out lynx has a bug with 302 redirects and caching. If you issue a 302 to a page that lynx has in its cache, it will use the cached page. RFC 2616 states very clearly:
    10.3.2 301 Moved Permanently

    The requested resource has been assigned a new permanent URI and any future references to this resource SHOULD use one of the returned URIs. Clients with link editing capabilities ought to automatically re-link references to the Request-URI to one or more of the new references returned by the server, where possible. This response is cacheable unless indicated otherwise.

    Interesting that it seems lynx is not the only one broken: []
  • Jacob's Ladder: []
  • Anthem's NFS has been hanging when large amounts of I/O occur :-(
  • So I've been sick the past days, watching movies and doing pretty much nothing apart from that (some spurious hacking and fixing of course). I did go and watch the crappiest movie on earth `Maid in Manhattan', which beckons the question "when is he going to africa?". I saw the (much better) Rhapsody in August, where R. Gere passes an acceptable image of a japanese descendent (or so my godmother tells me "he has the eyes") and even scratches out a fair amount of japanese to make me wonder if he speaks it or not. But google knows better: []
  • Fixups on anthem. Sendmail needed a permissions fix, NIS wanted an updated securenets, my crontab from anthem was busted (a couple of lines were missing the last asterisk!), syncmail hadn't been installed (hooray for Andreas and [] /dev/tape was missing. I still have some fixups left to do though.
  • I hate mount options. If you want a world-writeable mount, instead of the familiar mode=XXX for iso9660, fat/vfat want a umask setting!
  • So something's driving me crazy on anthem: the hardware clock. It simply won't save and restore the correct date. The darnest thing is that is seems related to hwclock:
     root@anthem:/boot# hwclock --localtime
     Tue Apr 22 20:45:37 2003  -0.915026 seconds
     root@anthem:/boot# hwclock --utc      
     Tue Apr 22 20:45:41 2003  -0.952518 seconds 
  • Being that my local time is BRST, which is GMT-3 at the moment, this is bogus! The next funny thing is that I think it used to work, so what's going on here?
  • Operator stupitidy of course! Since debian links /etc/localtime to /usr/share/zoneinfo/whatever (which is *not* a good idea since /usr is not mounted at startup!) I decided to copy over the file. However, as I was copying over a *link*, it crushed the file pointed to. This file *happened* to be Universal, which meant (right) boom, UTC was set to the same system as localtime. You could argue that UTC shouldn't even require a damned file since it never changes, but never mind me. I copied over a fresh (pristine!) file and the system was back into sanity.
  • Though it still hangs. Ever since we did the debian move, the box has been hanging every 2 days, and worse, sporadically. I'm not sure if it's the kernel or the SCSI, but we'll find out.
  • mysql still refuses to let me in, though. I'm not particularly sure why only my user is rejected, but even having a valid password and valid entry for the database in the db table it fails.
  • I erased my user, recreated him and lo it all works. I really think all that was wrong was forgetting a flush-privileges after changing my user, but why did mysql_setpermission not work?
  • So we took the plunge and moved anthem to Debian woody. It's been a rough night (the whole process took about 6h) but the fact that we have RAID made things *substantially* easier -- we plugged one of the HDs into another box, booted it up (as diskless) and made a new raid array with a failed-disk. Then it was a matter of untaring the minimal debian install we had and doing some major apt-getting (about 200MB worth of packages). I've been putting the services back up slowly, and we've got most of them running nicely now. I've got some TODO lists to finish off (mostly involved still-unworking web services) but it looks like we can say it's been a success. Just have to see if cron is doing what we want :-)
  • Getting SMTP AUTH to work was not trivial, even though I've done it before. I created sasldb, set sendmail up and put the .conf files in /usr/lib/sasl/. I guess the fact that I had to create the directory was pretty suggestive - of course, I forgot to install the sasl authentication modules! I got the hint from [] -- all that was missing was libsasl-modules-plain and libsasl-digestmd5-plain.
  • Did some cleaning up on /var, so we have 1G free on all partitions. I think anthem will be in general much snappier, but only monday will tell.
  • Saw the rest of Amadeus. Wonderful movie, and it would be even nicer if it was closer to the truth :-)
  • So [] is the reason why I don't have my DSL back. Darn.
  • Added Andreas to our CVS users, using the very special tip on []
  • Watched bits of Amadeus, but I need to resee it. Gui thought it was one of the best movies he had seen.
  • I've been DSL-less for 3 days now and counting. This is what happens when you forget to pay a bill and your ISP has a major disaster right after it. It appears Terra's engineers have been working around the clock for 3 days, and they blamed it on... hardware.
  • Because of Nautilus, people at Consave can't access their floppy disks or CDRoms. We're to blame that autofs didn't work as expected (at least I found no way of mounting the floppy as the end-user, and I'm almost sure it's not possible), but dammit the desktop context menu *had* to work.
  • Because of Nautilus, we missed the bus, and BT had to drive 200km to pick us up.
  • Because of Nautilus, me and J watched an amazing movie called "El Hijo de la Novia", which is set in Buenos Aires, Argentina. I say amazing because it's been a long time since I've seen a movie which I would call `flawless'. It's a very simple story, centered around a man who has a heart attack and gradually decides to `change his life' -- you might say the typical `awakening' movie in the spirit of American Beauty and others. But that's the end of familiarity right there -- the movie's performers take it to a totally unexpected level. The acting is superb (honestly, as *superb* as it gets), and the story is touching yet hilarious -- the amount of subtle but very intelligent jokes just kept everybody laughing over the movie's 2 hours. More praise at []
  • I ended up watching my 101st movie of the top-250 race this year. It ended up being The Green Mile. Now while the acting is superb (it really is!), and I think the casting was very good, the story is a bit pokey. Oh, it's not that I'm not moved by the theme -- it's probably one of the most popular movies to carry an anti-execution message (however), and the story itself is really full of very nice details. But somehow, the all-loving character that is transmitted doesn't match with ordering meatloaf as his last meal. Deal animals dot com?
  • So I worked over the weekend on putting Kiwi.Proxies on a diet, and the change was pretty successful. I managed to break apart VirtualProxy, which was pretty damned ugly, and now we have custom handlers for each widget type and a set of nice base classes. The Proxy has automatically become *much* easier to port, so much that I daresay it could run out-of-the-box on PyGTK2 with a bit more work. Oh, no, Johan saw that!
  • The Toshiba SD-2107U, back home, has rom version 1.570. A hack is buyable at []
  • Vine's birthday -- party, baloons and cake!
  • I'm still #6 [] but I'm getting there :-)
  • Once I met this guy in a Boston hostel when I was down and out a million years ago [] I had just bought a skating magazine and went up to the room for a sleep. Whoa, that guy looks just like this guy in this photo. And he was! He even had been to Brasil the previous year, and there's photographic evidence to prove it: [] I think he's out of the rollerblade business, because I can't find any references after early 2002.
  • It's probably not a coincidence, but yesterday I say the very average A Beautiful Mind, and today a *really* interesting article about schizo-affective disorder up at [] I've thought a lot about mentail ilness in the past, and this article makes many points very clear. It's really nice to get first-hand experiences described in such an honest and precise way.
  • The movie is average. The story *seems* like it might have been interesting, but Hollywood can't portray the life of tecnically involved people without making it ridiculous.
  • Did some benchmarking and got kgetattr() proposal into better shape.
  • While installing beep on the Redhat diskless, I realized some points. First, rpmbuild is actually okay. Second, not using devfs is suicide, because ownerships of /dev/* get all futzed up!
  • Experiments with robots.txt and htdig should be confirmed tomorrow.
  • Rearranged cron jobs so they run at saner intervals - it's amazing how long it takes udmsearch to run!
  • More NFS drama. Now that we've been running okay for a few days with nolock on /var/log, another issue has showed up. Today, at exactly 13:10 in the afternoon, nfsd ran into a bug that Neil describes here: [] The problem seems to be related to an invalid entry in the server dcache (the nfsd dentry cache). The server tries to look for a file with the correct inode number, and there is already an entry in the dcache with the wrong number. Reiserfs is kinda wierd with inodes, so you know these things can happen.
  • I'm just hoping this is a silly coincidence. A touch on the file solved the problem, of course. But it was a symbolic link...
  • So what supermount implements as a kernel module is actually doable with autofs? Amazing! [] and [] give you the rub-a-dub.
  • Look:
     >>> 3.1 == 3.1000000000000001
    and read: [] and [] and []
  • [] is pretty neat.
  • Talked to Rico about his Fapesp request, and it looks great!
  • Discussed the mini-CMS with Guila and tried to push JD into it. Maybe he's too busy fixing autofs on the diskless.. or maybe NOT.
  • So I tried to fix to parse headers properly. I almost did it too, but then a fake header fell into my inbox and boom, false report. Darn.
  • What does the "p" in pserver mean? Guesses: public server, password server, patch server..
  • Some fucking idiot stole my helmet, one I had only owned 4 days. Sometimes it sucks to live in the third world.
  • On the brighter side, I managed to get mutt to view HTML mail inline using lynx. It's actually pretty cool. All you need to do is add a line auto_view text/html in your .muttrc, and add a line into your .mailcap file:
     text/html;lynx -dump %s; nametemplate=%s.html; copiousoutput
  • I am the proud new owner of a SyncMaster 955DF - 19" of luxury! BT rocks as he got it as a surprise for me (sorta, since I'm paying ;-) but it is *reaaaly nice* to not feel so blind looking at all these black rxvts.
  • There was a silly bug in my webalizer script that made us count accesses from some of the boxes in the local net. This means our hit count will go down, but at least it will be realistic now :-/ The error was forgetting a @#!@#!@ dot in my grep -v line which filtered out local boxes from the httpd logs.
  • For future reference, we once won something: []
  • Linux presentation went on fine. I updated the pages at Async so you can catch the presentation at [] (in portuguese) and the presentation program is at []
  • Nice page on backup performance tweaks: []
  • Someone (don't laugh) at [] replies to an article on IEEE's homepage `The Software Developer as Movie Icon'. I think the most interesting part of the reply, however, is this paragraph:
     On a "career day" we had, all those years ago, I dutifully went to the
     class that had a Software Engineer (with a big "E") available to tell us
     what working in the field would be like. I don't remember the details,
     but I recall being completely underwhelmed by the whole thing, and
     generally discouraged. I pretty much gave up on the whole thing that
     day, as it didn't sound anything like what I did in computer science
     class or on my home computer.
  • Basically worked the whole day on my presentation in time to present it :-)
  • Very cool Linux timeline here: []
  • Just so I remember forever, Linus announced using BitKeeper publically in the beginning of 2002 (January or February).
  • Email off to DHCP-list, pygtk and tex2pdf.
  • Moved the UDMSearch indexer to run a little later to avoid clobbering out backups. This brought up another question: how does cpio behave when the file it is copying changes. We know that cpio-2.4.2 had a nasty bug that was fixed in 2.5, which caused corruption in the archive when a file had changed during write, but I want to know if 2.5 will write a corrupted file or if it "buffers" it before writing to avoid suffering if it changes during the write process.
  • It seems that it will only "buffer" in 512 byte chunks; at least that's what I get from cpio-2.5:util.c:disk_fill_input_buffer(). Since I assume read()s are not prone to races with write()s done to the same file (at least not if the number of bytes read is slow, such as 512 bytes in cpio's case), I believe the read() itself is consistent, but the sequence of reads is probably not guaranteed to be.
  • This would explain why the CRC check is redone at the end of the file of course (if we were sure the sequence of read()s is consistent, why do the check, right?). This also underlines the fact that changing files during backup are bound to be problems. I've moved out the script that changed the database, so it won't be updated continuously. If we run into trouble, Jon Nelson suggested []
  • Swapped the IP on consave's firewall and amazingly (as you always feel after a remote IP swap) everything is still working :-)
  • Put Guila back into school today so he can make it into Uni this side of 2010!
  • Studied Bitkeeper for a whole 2 hours. It's a pretty interesting tool, to be honest. The revtool is an awesome substitute for Bonsai, and it's amazing how much *local* metadata it stores - you have an actual *clone* of the repository, not just a copy with pointers. It's got *real* support for disconnected operation, not just the basic functionality of editing disconnected.
  • I did find the checkout model a bit complex. I guess I need to take a second look at it to understand it properly.
  • Larry actually emailed me *twice* in the space of 20 minutes while I complained about problems with [] and revtool, so we know he *is* listening with a lot of attention to what people say about it. A pity lots of people won't contribute because it's not OSS.
  • Fixed up some problems in blockreport for very small files, and added some tests to make sure it behaves saner. The script is pretty useful for people using DNSBL blocks in sendmail, but I'm surprised that somebody I had never heard of emailed me about it.
  • I also ran into a very interesting description of a problem with connection tracking and NFS. In [] Harald discusses some problems with NFS' large packet size and the resulting UDP fragments. It seems these can confuse the conntrack handling, which is quite a surprise to me. I've now reduced the MTU on anthem's internal interface to 1484 to see if it makes any difference. Note to self: look at logs in a week's time to find out.
  • However, it seems that this particular problem may be related to redsea alone. All the kernel logs that come up are from it:
     UDP: short packet: 3084/132 to
     UDP: short packet: 144/132 to
     UDP: short packet: 3224/132 to
     UDP: short packet: 2968/14 4 to
  • Sure as hell beats me. I'm not really sure what causes this damned NFS problem, but I am pretty sure that the fact that anthem runs conntrack, iptables, NFS, and pretty much every other damned service under the sun makes it a prime candidate for problems.
  • Okay, 1484 causes path MTU-D problems, so that's that for chasing down another probably red herring.
  • We got the Fapesp answer back! w00t!
  • Fixed a very dumb bug in, I suck :-(
  • Had a quick look at why sendmail doesn't block by domain name in my access map, but I can't seem to find out why.
  • For the past months we've been running into some trouble with libglade. The toolbar buttons *always* show up on my box with both text *and* icons, even though in the gladefile they are explicitly set to GTK_TOOLBAR_BOTH. At the office they are fine. It turns out that the reason behind this is that glade-gnome.o is used when it is available, and since it includes GNOME versions of all the methods in glade-gtk, glade-gnome.c:toolbar_new() is called instead of its glade-gtk counterpart. Now the interesting part is that the gnome version of the method doesn't check for type in the gladefile - it only checks for the gnome preferences. My current workaround is brutally removing* from my library dir, but James says that in 2.0 this is solved in a better way, since glade-gnome is only loaded for gnome applications.
  • I read an interesting (but old) article at OnLamp today about Python web applications: [] and from there I went on to look at Webware (it also cited Quixote which is what we've been playing with lately). From Webware I learned of Fusebox, which sounds very interesting but requires some further investigation. Shot off emails to renata and bt so I don't have to worry about it. ;-)
  • So VIM's :help foo gives a list of all help files that contain `foo', neat. I did some research into how Vim works and it's interesting to note one thing: it doesn't define the filetype text for .txt files (from looking at /usr/share/vim/vim60/filetype.vim). The reason? I think the fact that .txt is used for other things (Robots, mail for instance) apart from plain text. But it does annoy me a bit, so I'm considering adding an au line here.
  • Some excursions in ctags-land have made me very pleased to have started it, and now I think the best solution is really to store tags for most of your important projects in a ~/.tags file. Or to have vim somehow guess that you want a tags file kept in the top-level directory of your project.
  • I wrote a mutt macro to ship off my spam to spamcop. It's stil not perfect, but
     macro index \cw hfsc\n\n\n\nys=spam\nh
     macro pager \cw hfsc\n\n\n\nys=spam\nh
    sort of does the job.
  • So I have a new chore today; get SMTP AUTH working with Outlook Express. This should be trivial since I have already set it up to work as expected from my home box. What a mistake. I've now spent about an hour trying to understand WTF this doesn't work. Having looked at the tcpdump and ethereal dumps, it seems that Izis' box does the proper EHLO, gets the AUTH lines back, but simply ignores them.
  • The funny part is that a PDF document in *Chinese* has given me a hint as to why it doesn't work -- I can dimly grasp from [] that Outlook wants to use SMTP AUTH LOGIN which we don't support at the office. It seems, however, that it doesn't work because I forgot to add a LOGIN to my file! Oops.
  • Since I was going to futz with my .mc file anyway, I've taken the deliberate and painful step of removing SPEWS from my RBL list. It's going to get us more spam, I know, but SPEWS just gives us so many false positives it hurts.
  • However, even just adding LOGIN doesn't help us. Here's why: [] says that you need to rebuild the Cyrus SASL libraries. I'm lazy but I think it's done now. Now I think it works but we still need some client-side tweaks.
  • So André Pignata, Célia and Frank stopped by at Async later on and we made some plans about courses we could offer with Cati for students. Ended up also discussing some of the issues I think are wrong with CS undergrad school in Brazil: not enough applied work, and teaching compiled, complicated and strict languages to beginners.
  • Flight out tomorrow: CQRUMB Vasp 16:05
  • Today a CompEngineering student asked me about software tools we use at Async to aid development. The discussion in portuguese follows:
     >   Queria saber quais os programas que vc's utilizam para auxiliar na
     > analise de requisitos, preparar entrevistas para clientes, testes,
     > reengenharia, etc....
     >   Queria saber quais sao os softwares que vc's usam pra fazer um
     > seminario conivincente de que existe softwares de qualidade alem dos
     > proprietarios (se bem que ser proprietario de ser de qualidade sao
     > duas coisas bem diferentes).

    Vamos lá.

    Para guardar requisitos levantados, usamos uma combinação que pode variar de projeto para projeto, incluindo arquivos .spec em texto simples (um documento técnico com introdução e descrição) -- normalmente detalhando aspectos mais complexos da aplicação -- documentos Wiki online e bugs no Bugzilla. Nossa intenção é mover o mais rápido possível os requisitos para código-fonte, evitando que tenhamos que nos basear em documentos quando sabemos todos que o código é a resposta autoritativa. Pode ser pouco ortodoxo este approach, mas é bem mais frequente do que se esperaria.

    Documentamos o projeto do software apenas após algum tempo dele consolidado em código-fonte. Considero a documentação de projeto importante para alguém que chega para compreender em nível um pouco mais abstrato a divisão de responsabilidades do sistema, mas até esta divisão ter sido testada e implementada na prática não considero uma boa idéia solidificá-lo em um documento -- de que adianta documentar algo que ainda não foi testado e aprovado? Obviamente esta propriedade se mantém para nossos projetos, onde há sempre boa dose de inovação e pesquisa; projetos mais convencionais, para os quais não há tanta exploração de domínio ou projeto, podem apresentar necessidades distintas.

    Note que algo do projeto acaba sendo codificado nos specs de requisitos, já que não são tão separadas assim as atividades como parece.

    Para codificação, todo mundo aqui usa a tela preta e algumas ferramentas para desenvolvimento visual (glade, browsers para apps Web). Todo o código-fonte é armazenado em CVS, mas estamos pensando em comecar a testar o Subversion. Acho que é um assunto interessante para você estudar, porque usa DAV e um formato de armazenamento bem mais interessante e escalável. De qualquer forma, o CVS é importante permite que sejam utilizadas uma série de ferramentas online para visualizar e acompanhar o desenvolvimento, e é um padrão de fato entre os projetos de software livre.

    Para esta parte de gestão e visibilidade do desenvolvimento, usamos ferramentas voltadas para o código-fonte. Exemplos são o bonsai e o lxr (visite [] e [] para ter uma noção), e são usadas diariamente tanto para acompanhamento do desenvolvimento quanto pelos engenheiros que estão trabalhando nos projetos.

    Para projetos um pouco mais maduros, ou onde o prazo permite, buscamos registrar todas as alterações no Bugzilla, que é uma ferramenta de controle de alterações. As vantagens de usar Bugzilla são a facilidade de localizar e gerenciar alterações e defeitos no código, mas como toda ferramenta, seu uso impacta em algum overhead nos desenvolvedores.

    Usamos para teste de unidade as ferramentas da série *Unit, usando principalmente o PyUnit (que vem no Python como o módulo unittest) para testar as bibliotecas de backend que usamos. No IndexedCatalog, por exemplo, e no antigo orbit-python, montamos grandes suítes de teste. No Kiwi, por possuir interface gráfica, é mais difícil montar uma suíte de testes automática, e o que faço é guardar scripts que testem funcionalmente o código.

    De certa maneira, fica clara desta descrição que nossa empresa se preocupa primordialmente com o código-fonte produzido, e acho que se pensamos bem, é claro o por que: este é o nosso produto. Tudo mais que se faz para garantir qualidade tem impacto reduzido se comparado à intenção de motivar a escrita (e reescrita) de código de qualidade, e desenvolvedores motivados e interessados representam 70-80% desta garantia.

  • I think somebody needs to be reading [] with a lot of attention!
  • The next time you write an article defending a position, read this first: []
  • If you ever want to buy Onstream tape drives in Canada, a solution is to look at this page [] and do a lot of clicking. However, it's not entirely clear which tape drive you should buy from all this. The ADR2 SCSI drives are just so expensive you'd have a heart attack! I guess an ADR30/50 is nice enough.
  • Took care of most of my email backlog by now -- 140 is the number I'm looking at at the moment. Sorting the list different ways is a good tactic to read over most of the deletables, I've learned.
  • It's pretty amazing, but it takes 3h of wallclock time to erase a DAT tape on our Sony SDT-9000.
  • On the weekend I went down to Broa and sat around doing not very much (and eating not very much either, since it was mainly a barbecue). I did have a lot of free time to unwind, which was good after all the effort that went in to last week. On Saturday night when putting together the sound system I realized that 3 out of 4 of the Bose mini-speakers I have are toast (not fun).
  • I also went wakeboarding with Mano on Sunday morning. He's got a new boat which is quite cool, and since I had never wakeboated before it was a bit rough going. Oh, I could get up very easily, but staying up for extended periods of time is a lot harder. I did some small jumps and tried doing very simple tricks, but it's very tricky to use the edge of the board correctly, and the issue of keeping your body's position in sync with the extension of your arms makes things tough.
  • Also managed to watch Midnight Cowboy, which brings up my top-250 list to 98 movies. This is a pretty odd movie, and a bit unexpected even though a few people had given me descriptions of it. The party scene is one of the most interesting `trippy' scenes I've watched. The Rico/Buck relationship evolves in a very realistic way; a touching rendering of male friendship in despair.
  • On Sunday evening I went out to see `Houve uma vez 2 verões', which has a wicked theme to it; basically, this teen falls in love with a girl after meeting and having sex with her on the beach, and from there on it's a series of plot twists as he tries to find him and she, well, `tries' to `find' him. Anyway, it's a pretty upbeat and naive story, this time without losing its charm.
  • Activated my Zope CVS account, at last. Committer guidelines are at [] --- and [] describes the layout. The funny part is the page that takes care of updating your account settings is written in PHP :-)
  • Cleaning up my email. I was at 850 messages this morning, but the number's down to 400 now. My target is 30 or so, but that's going to take some serious action.
  • MSc dissertation delivered, all is well :-) If you're in a hurry to check it out, see [] Be forewarned, however -- it's in PORTUGUESE (waaaah). My department didn't allow me to publish it in english, even though it means I'll have to translate (rewrite, in other words) pretty much all of it now.
  • XFree86 has a new release, which includes two of the most sought after features of all time: PS/2 autodetection, and on-the-fly mode switching: []
  • Took Olivia for a swim. It's the first time I've actually gone swimming *with* her, and this time she wasn't half-drowning. Actually, she was far from it - I sort of supported her for a bit, holding her up, and then she realized she didn't have to flail around. She learnt to stroke quickly, and swam a good set of 150m laps on the dam we went swimming in. A couple of kids were nearby, and though scared at first, they were interesting in the dogs and ended up played a lot with them. Olivia and Gota really fight over the sticks we toss to them, and at one time Gota swam back with a stick in her mouth, sort of towing Olivia by the mouth. Was great fun.
  • I watched M*A*S*H over yesterday and today. I really remember the TV series from my parents watching it while we lived in Australia and Canada, and though I remembered it as being irreverent and charming, I didn't recall much of it. The movie itself is really great; the obvious improvisation and overdialog -- and don't let me forget the wonderful characters portrayed of Hawkeye, Elliot Gould's Trapper and Duke.
  • I also got to know a bit more about Robert Altman, since the DVD is a double with a lot of extras on it (though most of the stuff is unoriginal, though the documentary comparing the war to the movie is interesting). I remember now where I know him from: Gosford Park and Cookie's Fortune. If I can induce from only 3 movies, a trademark is the abundance of characters and the `collage' effect that all the different mini-plots intertwined. Gosford Park is one of the best movies I've seen, really.
  • Man, I HATE portuguese, confounded crapped-up lexicon. Not ONE @#!@#@! bookstore has a damn thesaurus in this stupid language. ARGH.
  • Found at least a decent free online dictionary, though it's in Portugal, which points out that `contribuidor' *is* a word.
  • If somebody asks me why I used the word `elicitados': [] [] [] [] [] -- who knows, maybe it's now part of our language :-)
  • So, is it on-line or online? Hmmm. google tells me 165 MILLION pages say online, versus 91 MILLION for on followed by line (so it could be on-line or on line). Which?! Other quizzes: e-mail vs email, ad-hoc vs. ad hoc..