Older blog entries for jonabbey (starting at number 19)

30 Jul 2001 (updated 31 Jul 2001 at 15:33 UTC) »

I'm really tired. Was up til all hours last night getting Ganymede 1.0.5 released.

At the moment, I'm feeling a bit burnt out on it. I don't know whether people out there are finding it useful or not, and I have no idea whether much of anyone is actually using it apart from us and one oil company in Canada that adopted it in a way-way-way-too-early form from one of the 0.94 pre-releases.

Also, I've been tracking down and reading a lot of Brett Glass' anti-GPL rants, and I have started to wonder if releasing software under the GPL really is such a great public gift or not, as versus a FreeBSD-style license. I know lots of people say that Brett Glass is a whiner who wants to be able to make money off of other people's software, but it is true that when a GPL'ed piece of software exists for a particular purpose, it can suck all the air out of commercial versions of the same thing. I'm just not sure that the FreeBSD license is all that better on that count.

Anyway, I just wonder whether Ganymede will ever be 'done', and whether it matters a great deal. If it was a commercial product, I'd at least know whether it was worth anything to people. I've had useful bug reports from people, but no significant contributions from anyone outside of people that I work with for the last five years that I have been working on it.

<sigh> I'm just tired right now.

27 Jul 2001 (updated 27 Jul 2001 at 06:41 UTC) »

I'm looking at the tail end of a 14 hour work day today. It's been a very long time since I've done that. Wound up reworking part of Ganymede's permissions system. I had left a hole in the permissions system, where the "built-in" fields that all objects automatically have (Owner List, Notes, Expiration Date, Removal Date) did not have their permissions tracked independently of the object as a whole. That meant that if an end user was allowed to edit an object to change their password, that end user was also capable of mucking with those four fields.

Bad, dumb, silly, senseless. But I fixed it good, and put in a number of explicit permissions rules in the server that will make everything a lot safer in the presence of a malicious client. In general, I've been very good about making the server not trust the client for anything, but there were some subtle aspects to the permission rules that assumed good behavior on the client's part rather than being explicitly enforced. No more.

So.. a good, old-fashioned late night hack session, with lots of good music (Morcheeba, the soundtrack to Trainspotting) cranked up way louder than I can do when I'm not the only engineering staff member in the building. And I've got some good changes that will make version 1.0.5 worthwhile soon, yay.

Well, I'm starting to get a feel for C again. I had forgotten the joy of hand-crafting pointer loops to do any kind of string manipulation.

That's irony, of course. But it is neat to run my 500 line C program in a debugger and to be able to step through it statement by statement.

On the other hand, I have almost never needed to use a debugger on my 250,000 loc distributed Java program.

Doing some C hacking tonight, trying to write some SETUID shims to allow a PHP script to do some root-privileged file management stuff safely. setuid, chroot, all that rot.

And, my god, I had forgotten how horrific it is to program in C. I can't believe I wrote 50,000 lines of this crap working on GASH back in the day. It is just mind-bendingly awful to have to come back to this after having been working primarily in Java for the last five years. I do have a pretty decent sized library of C functions that I wrote eight years ago that I can use to build on, but I am appalled, now, at the primitive state of C when it comes to elementary string functions, memory management, etc.

My esteem for the Linux kernel hackers is much, much higher now, for seeing once again the pathetic state of the tools that they are working in. That goes for the rest of you C hackers out there in advogoto land as well.

Ganymede this week: got support added into the Ganymede launcher for Sun's Java Web Start which is the sweetest new thing I've seen for Java in quite some time. Ganymede users at the lab who are running on Windows can now launch the Ganymede client outside of the browser. Much faster, much fewer resources needed. Almost like a real Windows application. UNIX users have had a command line launcher for it forever, but now my Windows users can join in the fun without my having to hack together messy .BAT files and stuff. Highly recommended. Ganymede in general is getting a really polished feel to it now.

Personal: The plan for the day is to get out and get a hair cut, get my car inspected, and go to the Bikram Yoga studio here in town. Bikram Yoga is the hot yoga, where you do 90 minutes of relatively gentle stretching poses in a 103 degree studio. Lots of sweat, lots and lots of stretching, as the heat loosens the muscles up. If you've read about people having estatic experiences in sweat lodges, that's kind of close to what it's like in Bikram.

Just got back from a weekend with Barbara in College Station, TX, where she is working on her master's in computer graphics at the TAMU Vizlab. Saw Final Fantasy at the big megaplex on the edge of town, followed up with lots of kibbitizing on the graphics technologies used.

More work on Ganymede. I downloaded the 1.4 JDK beta towards the end of last week and made a few fixups to get everything to work under 1.4. So far as I know, all of the Ganymede code, server, client, everything, now work on every version of Java from 1.1.7 to 1.4beta. Pretty impressive if you ask me.

I keep finding myself scheming about things to do once I officially drop support for JDK 1.1, though. In particular, I'm thinking how much fun it would be to implement support for a more scalable, disk-based database system using the random access file methods and the Java weak reference API for implementing a memory cache.

Anyone have any good white papers on simple key-based transactional database systems? I've looked at Berkeley DB, but I'm thinking I shouldn't need to create a dependency on their code with as much transactional logic as is already in the Ganymede server. How hard can it be to implement a random access paging file with discrete indices for namespace constraints? Seems like the only real trick would be figuring out how to make transactional commits reasonably atomic on disk. The way Ganymede does it now, by keeping a ganymede.db file and an ongoing journal file is easy, File append and atomic rename make reliable transactions simple to do.

Anyone want to email me with suggestions on books and/or web pages describing simple transactional disk models I might look at?

Ganymede is now at 1.04, with some nice improvements to the GUI, a fix to an exception thrown if a user gives a bad username/password pair to the xml client and, most importantly, a fix to the schema editor to make it check for the effect on the namespace constraint indices during schema editing.

I've been thinking some about how to make Ganymede support an object containment hierarchy, and it seems that the way to do that would be to make the Ganymede schema more restrictive, rather than less. Right now, a single object may be owned by more than one owner group, which makes a strict tree ownership structure impossible. Making objects only able to have one owner would make it possible to have objects structured in a proper tree, which might be quite nice for the client. Ganymede effectively allows arbitrary object graphs to be implemented using object pointers, but some people seem to be freaked out that they can't stuff things inside other things and make the client display things that way.

I've also been thinking about how to make the Ganymede server more scalable. SleepyCat's Berkeley DB libraries look nice, but the Ganymede server was designed with heavy multithreading in mind, and is in many ways dependent on a lot of the flexibility and insane concurrency that the RAM-based database provides.

As with the schema containment hierarchy issue, it seems that the way to move Ganymede forward may be to actually reduce some of the degrees of flexibility, which I find an interesting outcome.

24 Jun 2001 (updated 24 Jun 2001 at 05:42 UTC) »

goingware: nope, and not freshmeat.net, neither. I am thinking less 'DOS' and more 'rumors of VA Linux layoffs', as all three are owned/run by VA Linux/Andover.net.

Ugh. Been sick for the last several days. Slightly feverish and horizontal mostly. Watched several episodes of the Clerks cartoon DVD that someone brought by. Pretty funny stuff, but not the stuff I would ever expect ABC to have broadcast.

I did stay awake long enough Friday night to put out a new release of Ganymede with a bunch of bugs fixed from the 1.0 release that a fellow from Hungary, Miklos Muller, caught and documented. There were more than a thousand downloads of the software, but only one person reported the bugs that anyone would have had to have run into if they had actually tried to do much with it. My faith in my downloaders is slipping a little bit. But I carry on for I am blithely unaffected by my audience. ;-)

Neat, advogato only lets you have one diary entry up per day. ;-)

Yawn, back to bed for me real soon now.

23 Jun 2001 (updated 24 Jun 2001 at 00:09 UTC) »

Ugh. Been sick for the last several days. Slightly feverish and horizontal mostly. Watched several episodes of the Clerks cartoon DVD that someone brought by. Pretty funny stuff, but not the stuff I would ever expect ABC to have broadcast.

I did stay awake long enough Friday night to put out a new release of Ganymede with a bunch of bugs fixed from the 1.0 release that a fellow from Hungary, Miklos Muller, caught and documented. There were more than a thousand downloads of the software, but only one person reported the bugs that anyone would have had to have run into if they had actually tried to do much with it. My faith in my downloaders is slipping a little bit. But I carry on for I am blithely unaffected by my audience. ;-)

Yawn, back to bed for me real soon now.

21 Jun 2001 (updated 21 Jun 2001 at 06:57 UTC) »

<rant>

You know, I am amazed at how much the Discovery channel sucks. Two parts science, three parts commercials, five parts sensationalism. I am so happy to be a PBS contributor. I know it's expecting too much to see a 'high energy physics' channel, but is it too much to expect to see a 'don't insult my fucking intelligence' channel? Bill Nye The Science Guy doesn't insult anyone's intelligence, and he aims his show at ten year olds, for heaven's sake.

Sightings! Do UFO's exist? "We could explain to you why the science and statistics imply strongly that people who claim to see UFO's are lying, and what the real scenarios for exobiology are, but instead we'll do a he said/she said bit to keep the suspense up and to sell commercials to the gullible."

The more time I spend on the Internet, the less patience I have for advertising-driven media.

</rant>

Ganymede is going well. I've had a lot of good feedback and bug reports on the 1.0 release, and thousands of downloads. Some of the reports coming in are really good, detailed, user-oriented things that I really couldn't have generated myself. There are just too many places where I know how it's supposed to work. Getting a fresh view really helps. There is a full range of users, though, from the 'i know you wrote some readme files, but i skipped them, could you explain this to me?' type to the 'you used an O(nlogn) algorithm in module DBQueryHandler.java when you could have used an O(logn)'. Both kinds are gratifying, nonetheless. Just so long as people are using my stuff.

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