Older blog entries for pphaneuf (starting at number 75)

24 Nov 2002 (updated 24 Nov 2002 at 08:59 UTC) »
XPLC

Whew, I'm on a roll. I have been shooting down design problems faster than I can hack them in code. I'm also decided at getting serious for a talk at the OLS 2003 about pervasive component-driven software (where the heck is it?) and XPLC, of course.

I have been thinking about the "why" a lot lately, and I just feel that there are only a few key features that add most of the overhead seen in current component sytems, either in ease of use or in actual performance, and that makes people give up on them or not think about it at all. Distributed objects have hardly anything to do with components (heck, objects themselves could be done without, as PILS and others shows), but its a sexy feature, so there it goes, dragging everything else to hell with it, even if nobody really needs it.

Come on, think about what widely deployed distributed applications using "transparent" RPC and its ilk exist. There's NFS, NIS and SMB, all great favorites, right?

So off developers go, going without components if they can, and rolling their own specific solutions if they can't (think of Apache modules (particularly in 2.0), Netscape plugins and all these others). Guys, if you want to compromise a bit about running your objects halfway across the planet, you could use components for almost everything...

XPLC

Went and hit the SourceForge compile farm. XPLC compiles and runs fine on sparc64-unknown-linux, i686-pc-linux, i386-unknown-freebsd4.7, alphaev67-unknown-linux, armv4l-unknown-linux, with at most some minor glitches.

Red Hat is annoying me a bit, because a workaround for a bug in gcc is now unneeded, and I'll have to write an autoconf test for that. No biggie, but it won't compile because of that.

Mac OS X and Solaris are giving me more trouble. Both seem to have different way of handling sonames (maybe they don't support them at all, but I think I saw stuff related to that in man pages), and Mac OS X annoyingly doesn't support __attribute((weak)), but I don't see any way I could test for that or make it good. I might have to lose that weak reference trick, but that would be a shame, it is really nice when it works.

Life

I wrote this as I was waiting for my two previous years taxes to get done. Can you believe this? I forgot to do my taxes! To my defense, this kinda happened through my previous employers HR department massive lossage.

What happened was that my given salary was X, but with things like extra for standby and overtime, my actual taxable income would reliably be something like 80% higher. That sounded nice, until I found out that the amount that they kept aside for the taxes was based on X rather than X * 1.8! Also, when I asked them to retain money for RRSPs (Canada's equivalent of 401k I think), which would save me taxes, they told me it was okay without actually doing it. ARGH!

But it doesn't make me less of an irresponsible person.

Tribes 2 (gaming)

Boy, was it a long time that I played that game! A few days ago, I found out that there was a new patch for the game, so I updated. Wow! Not only did they fix the crashing bug in the community browser, but they added the one feature I always though was missing, some audio hit confirmation (now, like Quake 3, it goes "plink" when you hit someone)! So it is now the perfect team game. :-)

If that wasn't enough, I found out that NecroBones, my favorite server, is back up! Well, that made my day. I gotta find a bit of time to go there and play a bit with the old buddies...

XPLC

XPLC is getting growth hormones it seems. It's getting better and better, I'll have to make a new release soon!

27 Oct 2002 (updated 28 Jan 2003 at 00:00 UTC) »
XPLC

apenwarr started a CVS branch for WvStreams that adds support for XPLC to it, adding an interface for the core implementation of a stream, so that new streams can be dynamically loaded (for example, adding HTTPS support to a program only involves adding the SSL stream, and linking with SSL is not required for basic functionality).

This is really nice, because it's the first real-world code using XPLC, and it is pushing it to be better and more usable. [apenwarr] commented on how the whole object creating was too involved and how re-implementing getInterface over and over got tiring, so I made object instantiation a one-liner and made a generic getInterface implementation that only takes a (compile-time defined) array of supported interfaces.

Also, it happens that this library is popular and is in most Linux distributions (it is used by the popular WvDial program). So if it goes through, XPLC would come with just about every Linux distributions, thus furthering my world domination plans. ;-)

It is interesting to see the collision of two such libraries, seeing WvStreams become slightly stricter and XPLC slightly easier to use, while not actually taking ideas from each others, just by having them rub in a single binary and making it work.

Reposted that diary, it was about to fall by the wayside, lost in testing of my ColdSync Advogato conduit...

Life: Went to "100% Ads Festival" (used to be the "Ads Night") this weekend, my first time! Was really cool, I recommend it heartily!

One of my friends just got herself a job in Québec City (a three hour bus ride), which is a bit sad, since her boyfriend (also a good friend) just got contracted here in Montréal. Looks like he'll move there when he's done, I'll miss them! Its not like we won't visit, but you know...

I'm just back from their place, we watched "Chasing Amy", one of Kevin Smith's movies. I like it a lot, I feel like it resonates with some things in my life. For example, the two comic store guys, so nerd it hurts :-). We're so broken, but we can't notice (see "Goedel, Escher, Bach" for why).

Palm: After posting a question on the Plucker developer mailing list, it looks like I should be updating the creation time of the PDB in order for Plucker to invalidate its metadata.

Now, the problem is that ColdSync's generic conduit doesn't sync PDBs headers, quite understandably. Argh!

I had started doing a "sync" conduit to update the creation time, but ColdSync::SPC doesn't seem to have anything to set the creation time of a database. So I thought about just deleting the metadata, but this should only be done if the database has changed. Hmm, I could put a "sync" conduit on the database itself, and just delete the metadata if any records have the dirty attribute. I really don't know why ColdSync's "fetch" conduit interface doesn't allow making DLP requests?

While ColdSync looks fine from what I've seen, the Perl module to make conduits could use some improvements. It requires Palm::PDB for no good reason, and dies at the slightest provocation (the PDB doesn't exist for a "sync" conduit? what if I'm about to create it? or I don't need it?).

Work: I have been using this Palm hacking to learn about the mechanics of synchronization, but I'll have to go back at project related stuff now.

I have managed to find how to make a proper makefile (non-recursive, with a complete dependency graph) handle generated header files, including correct auto-dependencies! The trick is simple: have a dependency for every source file (the .c or the .cc file, not the .o file!) on a build-header .PHONY target. Then, make that build-header target depend on the header files that need to be generated (you can generally figure them out from their source file names) and let an implicit rule do the rest! This will build all of the header before they are ever used, which then allows for usual auto-dependencies to work correctly.

This will help both for XPLC (to support IDL source files) and for work stuff, I'm rather proud of this hack, however simple.

Now, to make non-recursive makefiles scale to a large project smoothly using an unpatched GNU Make... :-)

XPLC: Speaking of that, did just a bit of tweaking this friday, after looking into making a Debian package for it. I'm rather disappointed with this. A bunch of files in an unsightly directory (that I can't specify the name of) at the top level, rather sparse documentation, etc. RPMs require a file at the top level (and only for automated packaging), but its a single self-contained file, and you get to pick the name yourself (save for the extension, of course). Blah, I'll ask one of my coworker to help me with this next friday.

21 Oct 2002 (updated 3 Feb 2004 at 21:04 UTC) »
Life: Went to "100% Ads Festival" (used to be the "Ads Night") this weekend, my first time! Was really cool, I recommend it heartily!

One of my friends just got herself a job in Québec City (a three hour bus ride), which is a bit sad, since her boyfriend (also a good friend) just got contracted here in Montréal. Looks like he'll move there when he's done, I'll miss them! Its not like we won't visit, but you know...

I'm just back from their place, we watched "Chasing Amy", one of Kevin Smith's movies. I like it a lot, I feel like it resonates with some things in my life. For example, the two comic store guys, so nerd it hurts :-). We're so broken, but we can't notice (see "Gödel, Escher, Bach" for why).

Palm: After posting a question on the Plucker developer mailing list, it looks like I should be updating the creation time of the PDB in order for Plucker to invalidate its metadata.

Now, the problem is that ColdSync's generic conduit doesn't sync PDBs headers, quite understandably. Argh!

I had started doing a "sync" conduit to update the creation time, but ColdSync::SPC doesn't seem to have anything to set the creation time of a database. So I thought about just deleting the metadata, but this should only be done if the database has changed. Hmm, I could put a "sync" conduit on the database itself, and just delete the metadata if any records have the dirty attribute. I really don't know why ColdSync's "fetch" conduit interface doesn't allow making DLP requests?

While ColdSync looks fine from what I've seen, the Perl module to make conduits could use some improvements. It requires Palm::PDB for no good reason, and dies at the slightest provocation (the PDB doesn't exist for a "sync" conduit? what if I'm about to create it? or I don't need it?).

Work: I have been using this Palm hacking to learn about the mechanics of synchronization, but I'll have to go back at project related stuff now.

I have managed to find how to make a proper makefile (non-recursive, with a complete dependency graph) handle generated header files, including correct auto-dependencies! The trick is simple: have a dependency for every source file (the .c or the .cc file, not the .o file!) on a build-header .PHONY target. Then, make that build-header target depend on the header files that need to be generated (you can generally figure them out from their source file names) and let an implicit rule do the rest! This will build all of the header before they are ever used, which then allows for usual auto-dependencies to work correctly.

This will help both for XPLC (to support IDL source files) and for work stuff, I'm rather proud of this hack, however simple.

Now, to make non-recursive makefiles scale to a large project smoothly using an unpatched GNU Make... :-)

XPLC: Speaking of that, did just a bit of tweaking this friday, after looking into making a Debian package for it. I'm rather disappointed with this. A bunch of files in an unsightly directory (that I can't specify the name of) at the top level, rather sparse documentation, etc. RPMs require a file at the top level (and only for automated packaging), but its a single self-contained file, and you get to pick the name yourself (save for the extension, of course). Blah, I'll ask one of my coworker to help me with this next friday.

9 Oct 2002 (updated 9 Oct 2002 at 13:37 UTC) »
Sorry!

I was testing my Advogato conduit a bit, sorry for the inconvenience! I think it works fine now.

Palm

I should add a few LaTeX-style shorthands for common HTML in that conduit, it's already getting a bit annoying...

9 Oct 2002 (updated 9 Oct 2002 at 04:16 UTC) »
Palm

I started hacking a bit on ColdSync, setting up Plucker with it and getting the mail to work on my Palm. I think that I'll have to write a conduit for both of these.

plucker-build doesn't update PDB files, it just overwrite them, and since the version on the Palm and the one on my workstation are the same number, the new one is not uploaded. So I think I'll have a fetch conduit that will modify the existing PDB instead.

For the mail, ColdSync just has a conduit for sending mail. I'll have to make another fetch conduit to gather mail from my IMAP account(s). I find it nice that the two sides (send/receive) can be separate like that.

But at the moment, I am currently hacking on an Advogato conduit (I wrote this entry on my Palm)

XPLC

Oh my. Finally got around to doing the unit test and the implementation of the module loader. I think XPLC might actually be usable now!

Photo

Got myself a new camera, a Canon Elan 7e (EOS 30). Wow, is it fast! I'm used to the 1.5 fps, long shutter lag and long viewfinder blackout of my Rebel 2000 (EOS 300), this thing is really quick, and rather quiet too. Very impressed. Now I just need to get off my ass and scan some good stuff!

66 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!