Archive for August, 2005

Challenge!

Wednesday, August 31st, 2005

The new, tougher sudoku! No numbers to start!

Mini elbeno is on the way!

Wednesday, August 31st, 2005

9 weeks old, with a head and a heart and a bunch of other not-so-recognisable parts.

Imminent IM wars?

Monday, August 29th, 2005

Some interesting speculation on the impact of Google Talk and the reaction of the other IM players.

I am increasingly of the opinion that Google is going the way of the corporation, to the detriment of the user. I agree with : Google missed the point about IM in producing yet another private system. IM is in a parlous state that we would never accept from email. Fair warning to all my IM contacts: I log everything.

I currently use Gaim for my IM needs, and I have accounts on MSN, ICQ, Yahoo, Jabber. I do not use gmail, and I won't be using Google Talk other than if it's open through my Jabber account on jabber.org. Google's number one talent is making money from targeted advertising by analysis of data, and they have got very good at it. I don't intend to have all my mail and IM conversations subjected to marketing analysis.

If the existing IM players sunset their clients and close their networks, you can reach me through Jabber.

Ask the LJ readership…

Monday, August 29th, 2005

Quite often, I will listen to the same song on repeat for several hours. Is this strange? Mrs. Elbeno thinks I'm certifiable. Maybe I am, but I don't think for my musical habits.

In case you are wondering, songs which I have employed thusly include:

Toxic – Britney Spears
Lonely Rolling Star – from the Katamari Damacy Soundtrack
Who Am I – from Les Miserables
Harder Better Faster Stronger – Daft Punk
In A Party Mood – Jack Strachey (the themetune to “Housewive's Choice” on Radio 2)
Freestyler – Bomfunk MCs
Fantaisie-Impromptu in C Sharp Minor – Chopin

Make of that what you will.

World of Warcraft

Sunday, August 28th, 2005

It works under Linux.
Rock in a box with chips.

Universal Studios

Sunday, August 28th, 2005

Mrs. Elbeno and I took a trip up to Universal City today. Had a free lunch (company summer picnic), and since we had been before it was nice to just wander about and take a look around the City Walk rather than try to see everything in the park. Since it was so hot we went into air-conditioned shops and such.

Upstart Crow claims to be a bookshop and coffee shop: in reality it had approximately 4 bookshelves, a Starbucks outlet, and the rest is souvenir merchandising tat. Not impressed. We took a look in the EB Games which was better, but I tend not to buy from EB any more since I have a local indy games store that I like to support. Besides, there's a dearth of games in summer.

We also saw the Blues Brothers show in the park (short but good) and courtesy of our $100 cinema voucher we saw Deuce Bigalow: European Gigolo at the cineplex they have up there. It was really a bad movie. But despite that it was pretty funny in a totally brainless way.

My first crossword

Saturday, August 27th, 2005

Beginnings by Elbeno

1A. Short dance mix anticipated (2,3,5)
6A. Point: many a sailor breaks a strike (4)
9A. Girl cooling the French fiasco (7)
10A. This French herb has a tail (7)
12A. Chief follows a parasite found at a dinner party (8,5)
14A. Precisely implement: takes time (4,2)
15A. He's livid – play's diabolical (8)
17A. Charm school admission (8)
19A. I mix tinge to enflame (6)
22A. Vegetable clothing? (5,8)
24A. Work with Liz, and it's something to work on (7)
25A. Conspiracy about calls (7)
26A. Help! None is average (2-2)
27A. Servants wait for workers (10)

1D. The chances aren't even! (4)
2D. Addiction upset the explorer business (7)
3D. Pay I concealed, shuffled into a reference book (13)
4D. Spies that use instruments? (6)
5D. Fraud: olympian gets a hundred points (8)
7D. Church doubled money in one sculptor (7)
8D. Outcast flat without Dickens character (5,5)
11D. Separated and gossiped about smart user interface (13)
13D. Sons aspire to scatter slander (10)
16D. Account deposit? Charge (8)
18D. Relate point to scientists, clerks (7)
20D. Wax in tavern is abnormally formed (7)
21D. Inner workings revealed by mind science egghead (6)
23D. A goddess' only sibling (4)

Computer niggles

Tuesday, August 23rd, 2005


… of my efforts to run a dual boot Gentoo/WinXP system.

The other day I ran across 10 days as a Linux user, the account of a Windows user’s self-imposed Linux odyssey. And it makes fairly interesting reading. As you know I’ve been a Linux user for hmm, over 10 years now (Slackware, Redhat, Mandrake, Debian, Gentoo at various times), but I’ve never quite managed to give up Windows. I recently upgraded my machine to an Athlon64 and I’m still in the process of smoothing it out.

There are problems on both sides. More on the Linux side at the moment, but the problem with Windows is that should I meet any problems there, they are much less soluble. Here’s the state of things at the moment:

My partitions are approx 40GB NTFS, 40GB ext3, 220GB FAT32. And miscellaneous gubbins for a Linux boot partition and swap partition. I use Grub as my bootloader, which works fine. Windows sees the NTFS and FAT32 partitions; Linux sees them all (but the NTFS is read-only). I set it up this way so that I could have a nice big data partition visible to both where I could store mp3s, code, etc.

So here’s my feature checklist, what currently works, and what doesn’t.

– Graphics drivers: Fine on both, thanks to nVidia. I have decent resolutions and hardware acceleration in Windows and in X.
– Sound drivers: Windows fine. Linux had some teething problems with mixing. I have it configured OK for most apps now, but I still get no sound out of KDE.
– Video playback: Windows fine. Linux untested. Playing back protected content under Linux is tricky.
– Web browsing: Firefox on both. No flash plugin on Linux because I run a native 64-bit system and the flash plugin isn’t available for 64-bit mozilla. I tried installing 32-bit Firefox binaries with the plugin, but I got sound issues. I only need flash for Homestar anyway. Java does work since I use the Blackdown native 64-bit Java VM.
– iPod: Windows fine. Linux a bit flaky on automounting with coldplug, but I can reboot the iPod to fix that if needed. So I can access the iPod as a normal drive under Linux. The real problem is that I haven’t got gtkPod working yet – it hangs all the time. Not sure why.
– Games: the only game I play on PC is World of Warcraft, and since I keep a dual boot, I haven’t bothered to try to get it working under Linux.
– Development: This is where the shared drive comes into its own. I have installed Eclipse on both sides (again, on Linux using the 64-bit Java VM) and use it pretty much interchangeably to compile the same source code. I also have Cygwin (to support Eclipse CDT) and MSVC on the Windows side; consider the 32-bit Windows vs native 64-bit Linux too and I have a fantastic level of portable code potential. The one problem I am running into is actually on Windows: I’m still trying to get OpenGL hardware acceleration running.
– Email: I use Thunderbird on the Linux side. I suppose I could set it up to use the shared drive, again, but I haven’t yet. So I have nothing on the Windows side.
– Webcam: Basically works under Windows, although it continually claims to find the new hardware. I don’t know why it can’t just treat it like a pluggable device and not complain. Under Linux, I load the pwc module but I haven’t got the pwcx yet. And there is some config yet to be sorted – camstream just displays grey, although it detects everything correctly.
– IM: Usually Gaim on both sides. Identical. But no alternative on Linux – I can’t videocon with the family like I do in MSN. Is gaim-vv getting anywhere?
– Printing: More difficult to set up on Windows than Linux. Since I use a networked print server, it works basically the same way on both systems. But as always Windows likes to hide the details.
– Office software: I simply don’t use it on either platform, so far. When I want to, I’ll grab OpenOffice.org on both.

Overall: I’ll be keeping both for a while. Windows because it has a few apps that I can’t replace (World of Warcraft, MSN videocon, flash plugin). Linux because it is cleaner (I know what is running), safer (I don’t need to run AntiVir, Spybot S&D, or Ad-Aware), and nicer in my daily usage (web browsing and coding). I have Grub set to boot Gentoo by default.

Monday, August 22nd, 2005

Mrs. Elbeno and I took the car down to the local place for a minor service yesterday. We spent a pleasant Saturday morning wandering around the cafes and shops downtown. It was too early to see a movie, so we stopped in at a coffee shop and had a cup of cocoa and an almond croissant. Mrs. Elbeno had a pain au chocolat. Then we headed east a bit and found a thrift store which sold books. So I picked up a copy of Chaos for $2! I've been looking for that, too.

Doxygen and C++: <i>not</i> a marriage made in heaven

Friday, August 19th, 2005

I briefly interrupt your scheduled browsing…

Doxygen is a documentation system for C++, C, Java, Objective-C, Python, IDL (Corba and Microsoft flavors) and to some extent PHP, C#, and D. So it says on the website, and so it is. It’s also a Good Thing, most people would assume.

Doxygen has its roots in Javadoc, a documentation system for Java. I’m sure auto-generation of documentation is great for Java. But you see, Java needs it. In Java, you write functions right in the class definition. No header file prototypes to browse. And so a documentation system is necessary to collect everything into one readable place. Imagine trying to browse Java without docs – you’d be picking through 10 pages of code to find the function definitions. The same applies to C#.

Doxygen seems to have taken the C++ world (at least the corner of it which I inhabit) by storm too. For a couple of years now I’ve heard it touted as some kind of panacea for finding one’s way around APIs painlessly. And actually, auto-generated documentation (whether from Doxygen or some other tool) can be very handy. But this kind of documentation can be poor too.

In C and C++, we have header files! And here’s the thing: I see far too much autogenerated (Doxygen) documentation that tells me precisely nothing I couldn’t have learned from looking at a header file containing sensible function names and parameters. It is not helpful to read documentation (to make up a hypothetical example) that says:

DBConnectionHandle OpenDatabaseConnection(const char *dataSource);
Opens a database connection.
Parameters:
dataSource – String specifying the data source.
Returns:
Handle to the new connection.

Point 1: Poor Doxygen documentation is rife.

In fact it’s worse than “not helpful”, it’s actually harmful. Generating this documentation has now polluted the header file with probably 10 lines of superfluous comments to feed Doxygen and has made the actual code harder to read. It would have been better simply to choose decent function and argument names, and add one or two lines of comment if necessary. Header files are the fastest available documentation for a function: the programmer’s hands are on the keyboard, and the function definition is only a source-browser hotkey away.

Point 2: Doxygen makes plain header files harder to read.

There is another problem, too. Because much more typing goes into Doxygen comments, it encourages laziness – copy and paste, failure to keep comments up to date. And we all know that inaccurate comments are worse than no comments.

Point 3: Auto-generated documentation is more likely to be stale (or plain wrong) than normal commenting.

One more thing: auto-generated documentation has a limited audience. Normally, an API or class can have several intended audiences: the maintainer, the client API user, and the client API extender. Or to put it another way, someone interested in internals, someone interested in usage only, and someone interested in deriving classes and overriding methods. Now the fact is that C++ doesn’t do a very good job of servicing these roles anyway – but at least the class author can go some way and tailor parts of the class for one audience or another. For example choosing whether to group areas by functionality, or by visibility. Doxygen can’t easily make this distinction.

Point 4: Doxygen only wears one hat and only serves one audience well.

Doxygen does do some useful things. Showing a tree of include files is a good aid to optimising compile times, for instance. But as documentation for C++ and C APIs and classes, I think we’re better off writing clear definitions, and if necessary, leaving the documentation for a human to write. I’ve used good auto-generated documentation, and I’ve used bad. I’ve used Doxygen to document my code, and I’ve written plain documentation for my code. And I prefer a well-written header file or a well-written API usage guide over an auto-generated API reference any day of the week.