StevenRainwater, thanks so much for all
your hard work!

Released a new version of vulcan, sporting an improved user interface (screenshot).

I was going to add an impromptu rant on the suckiness of Java generics, but what's the point.

Released version 0.5 of vulcan. There was a lot of new things I wanted to add, but it was taking too long, and it's almost a month since the previous release, so I just removed some stuff and packaged.

Here' s an interesting paper by Oleg Kiselyov. From the abstract:

The present examples as well as available theoretical and experimental results pose a question if OOP is conducive to software development at all.

He shows that you can't enforce the Lyskov substitution principle using standard OOP tools, and proposes a strict, group-theoretic definition of subclassing. Interesting read, but I can't help feeling that the whole thing is an excuse for Oleg to show off his wickedly clever Set-as-subclass-of-Bag C++ code. :)

After more than a year, a new release of vulcan.

I shall release earlier and more often from now on.

Looks like Linus has something to say about C++.

My dead tree copy of The Tao of Programming arrived the other day. It's pretty cool.

Pages alternate between English and pseudo-Chinese. Unfortunately, that's just a gimmick to make it look like so many English translations of the Tao Te Ching - bi tells me that the pseudo-Chinese doesn't mean anything.

Omnifarious: event-driven makes sense if all your
code is I/O bound, but it's a mistake to generalize.
Consider a streaming video server. One possible design
has an I/O bound thread talking to the
network, and another CPU-intensive thread doing the
encoding (an actual example). Making
the video encoding thread event-driven would be very hard.

Interesting problem (ps). I wonder if it's possible to do better than O(n^2).

On other news, rewriting a pet project.

Back from a vacation of two weeks. I forgot how to type.

acs
: you don't need to write a program to
solve that problem. The prime numbers that appear between 1
and
20 are 2, 3, 5, 7, 11, 13, 17 and 19, so they must appear
in the prime factorization of the number you're
looking for. The maximum powers of those primes that
appear between 1 and 20 are 2^4, 3^2, 5^1, 7^1, 11^1, 13^1,
17^1, 19^1. Multiply all those together, and
*voilĂˇ*.

*Update for completeness*: in case you really want to
write a program, you can write one to solve the more
general problem of finding the *least common multiple*
of a bunch of numbers. Euclid gave an algorithm for that a
few thousand years ago. In Perl:

sub gcd { my ($a, $b) = @_; ($a, $b) = ($b % $a, $a) while $a; return $b; }

sub lcm { my ($a, $b) = @_; return $a*$b/gcd($a, $b); }

sub multi_lcm { my $a = shift; return @_ ? lcm($a, multi_lcm(@_)) : $a; }

And, to solve the original problem:

print multi_lcm(1 .. 20);

robogato / StevenRainwater: another Advogato HTML bug - check out the <a> tag right at the beginning of the latest entry in ncm's journal; the entry is not visible on *cough* certain web browsers *cough* *cough*.

**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!