Older blog entries for taj (starting at number 0)

Well I've been reading some diaries on here lately and was thinking of writing one for myself eventually, so this is as good a place to start as any. Let's go:

I've had a chance go get KDOC back to a working state again, one of the very few saving graces of not having Nicole (nicnacs) here with me.

There are few joys like a huge lump of code that compiles and runs the first time. KDOC compiles C++ a lot better now, and I'm amazed at the speed. It's noticeably quicker with the giant regexps I wrote and the

(?>..)
construct that perl offers. I guess this means my old parser and regexps were horrible and that perl's regexp engine is very quick indeed.

Much as I like perl, I'm having second thoughts about using it as a language for anything over a few KLOC in code size. In projects of respectable size, clarity and documentability matter more than the clever tricks you can use.

KDOC is now roughly 6000 loc, and while it tends to get smaller every now and then as I refactor bits, not having something like KDOC for KDOC doesn't allow me to see the "big picture" the way generating docs for a C++ or java does. One thing that really bothers me is my inability to find myself a coding style that doesn't go out the window whenever I learn a new perl feature (eg I just started using ($,..) in subroutine declarations).

Most one-night hacks tend to grow as time goes on, so I think I will choose python for my next castles-in-the-sky project.

A lot of people think I'm misusing perl when I generate regexps like the one below. I guess I'm just glad I don't have to do it manually.

This one matches a method/function declaration.

(?:((?:(?:(?:(?:(?:(?:(?:(?>\:\:)|(?:[_\w~]+))+)|
(?:\s*(?:<(?:(?>(?:(?>[^<>]+)|<[^<>]*>)*)|<(?:(?>[^<>]+)|
<[^<>]*>)*?>)*?>)))+)[*&]*)(?:\s+(?:[*&]+|
(?:(?:(?:(?:(?:(?>\:\:)|(?:[_\w~]+))+)|
(?:\s*(?:<(?:(?>(?:(?>[^<>]+)|<[^<>]*>)*)|<(?:(?>[^<>]+)|
<[^<>]*>)*?>)*?>)))+)[*&]*)))*)\s+[*&]*)?)
((?:(?:(?>(?:(?:(?:(?:(?>\:\:)|(?:[_\w~]+))+)|
(?:\s*(?:<(?:(?>(?:(?>[^<>]+)|<[^<>]*>)*)|
<(?:(?>[^<>]+)|<[^<>]*>)*?>)*?>)))+))\s*
(?:(?:\[[^\[\]]*\])(?:\s*(?:\[[^\[\]]*\]))*)?)|
(?:operator\s*(?:(?:\(\s*\))|(?>[^\(\)]+)))))\s*
\(((?:(?>[^\(\)]+)|\([^\(\)]*\))*?)\)\s*((?>const)?)
\s*((?>=\s*0)?)\s*(?::[^{;]+)?)

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!