Older blog entries for jonabbey (starting at number 6)

Code: Ugh. My threadlock fix over the weekend for Ganymede turned out to leave some things unsynchronized that shouldn't have been and, presumably some things synchronized likewise. I spent most of the day at work trying to cope with Ganymede having decided to just drop selective portions of data entered into it on the floor. This after dealing with a few deadlocks and a JVM (Sun's HotSpot Server VM version 1.3.1 rc 2 on Sparc Solaris) that took a liking to dumping core.

Ugh, ugh, ugh. I tried to work my way through one deadlock thread report, only to find myself completely unable to find why a certain monitor was hanging.

Despite my ignorance, I spent several hours doing a bit of a deadlock audit through all code related to the hanging monitor and rewrote a fair bit of it to make it as impossible as I can make it that the monitor in question will be held while the code proceeds to take another monitor . This should prevent any deadlocks on this monitor, but too much of my code is starting to feel like it is depending on baling wire and prayer. This is especially troubling given my agnostic/atheistic worldview.

But, all in all, the code today should be cleaner and more resistant to deadlock than last Friday's code, and I have continued to cut new (unannounced) release candidates for 1.0. If the server performs well over the next couple of days at work I'll go ahead and bless the current code and see what people make of it all.

Personal: I dreamed of Anchorage last night. It has been 16 years since we left Alaska for Texas, but three years living there was evidently enough to leave a quite permanent impression on me. I especially get this way when Texas starts asserting that "I'm going to make your life miserable for the next five months" summer time vibe it has.

4 Jun 2001 (updated 4 Jun 2001 at 07:04 UTC) »

Got a lot of attention from a post about Ganymede that I put up on Slashdot. Lots of page hits, and even a bug report from Romania! I love it when a plan comes together..

My hands are aching some. I've been slacking on the exercise and pushing hard for the release. I skipped Yoga on Saturday and didn't get out running at all. I'm going to have to try and wake up early enough to go to the gym and run a couple of miles on the treadmill. Cardio and Yoga both have proven essential for my health when it comes to RSI-type things.

I did fix the threadlock problem that manifested in Ganymede over the weekend. One of the central classes in Ganymede now has a far cleaner synchronization regime, one that I feel a whole hell of a lot better about. I think the 1.0 release is going to be really solid.

3 Jun 2001 (updated 3 Jun 2001 at 10:04 UTC) »

Well, I have put together a strong release candidate for Ganymede 1.0 this evening. I sent out mail to the Ganymede discussion list soliciting feedback on the release candidates I posted, we'll see if I get much of a response come Monday. There are 116 users on the Ganymede discussion list right now.

And as I went to my work system to check on the size of that mailing list, I found that the Ganymede server had deadlocked. It has been months since that has happened, but deadlocks due to race conditions are the big achilles heel of the Ganymede server. Java makes multithreading very easy, but doesn't provide a lot of high level synchronization primitives. Very very easy to get into a deadlock with as many threads as the Ganymede server juggles all the time. Fortunately Sun's JVM takes the -QUIT signal and dumps out a list of all threads and where they are all blocking, so it's pretty easy to track down these things.

So I have something else to fix before 1.0. ;-)

25 May 2001 (updated 25 May 2001 at 15:51 UTC) »

Got npasswd and Ganymede hooked up late last night. It's actually really cool.. whenever a user changes their password through Ganymede (be it through the GUI, the CGI, or the text client), Ganymede turns around and checks the password out with a small C program that reads from STDIN, calls the appropriate libcheckpasswd.a routines, then writes the results to STDOUT. Only takes about a second, and the Ganymede server passes back a nice dialog explaining to the user why their fifteenth try at coming up with a valid password is still too weak. Neat-o. And if the user actually commits the password change transaction into the Ganymede database, Ganymede runs a second C program to record their new password (crypt hashed, of course) into npasswd's password history database, so that users can't re-use passwords that are less than a year old. All transactional, all very clean.

And the cool thing is that the external C programs I'm using for this are actually dirt simple, given that someone has installed npasswd in the first place. So simple that I think I can even bundle optional support for npasswd checking with the userKit, and allow users to figure out for themselves how to make all of the npasswd stuff work. Less documentation work for me, way way more password choosing hassle for their users. Everyone wins!

This whole diary thing is getting addicting. A post a day, on any topic I want, woohoo! ;-)


Last night I had my first real taste of pain from the martial arts (Tukong Moosul) class I'm taking here in Austin. Got bruises on my hand and arm, and I got my left leg crunched really good right under the knee. Hurts to walk a bit, I think I won't be going to Tukong this evening after work.


Today at work I'm going to be investigating how to incorporate Clyde Hoover's npasswd into Ganymede. I need to incorporate strong password quality checking, password aging, and password history into Ganymede for the lab's use. npasswd is a C program that I'm going to have to interface into Ganymede's Java code, which will be a bit of a pain and will lead, I'm sure, to a significant delay whenever anyone changes his password.

I would much rather work on things that would be of general utility for Ganymede so as to get 1.0 out the door for everyone's sake. Any work I do to customize Ganymede for the lab's peculiar requirements is work that doesn't get me closer to getting Ganymede 'finished'. Ganymede is already complex enough that I wonder how I'm going to find the time to document it all well enough that others can really jump in and use/maintain it. We have another programmer coming on board, though, one with a lot of Java experience, so I imagine that I'll be able to make more rapid progress soon.

On the positive side, there is a team in the laboratory that is looking at adopting Ganymede as a configuration management system for a network of satelite monitoring stations. Every new adopter of Ganymede helps test its robustness and flexibility of design, so I'm quite excited about this.

23 May 2001 (updated 23 May 2001 at 20:52 UTC) »

Interesting synchronicity. I have just been engaged in a quite civilized discussion over email with an HP contractor that was looking to incorporate the multithreaded Ganymede scheduler classes in a piece of commercial software for HP. We quickly got into some of the same issues that are being discussed in the VirtualDub case as to what constitutes linking, etc. I found myself surprised that knowledge of precisely how the GPL worked wasn't ubiquitous throughout the tech world.

Sometimes I forget how unusual the situation in working for a university laboratory is, compared to the "real world."

Came back by advogato tonight and for the first time spent a bit of time creating a project page for Ganymede and generally checking things out.

I have for the last few months been putting the finishing touches on Ganymede, and a really very robust and well polished 1.0 feels like it's right around the corner. All of my change log for the last few months have been isolated bug fixes, resource usage improvements, and fit and polish improvements to the GUI.

Unfortunately, things at the lab are busy enough that system administration tasks around this place are at a higher priority than stamping Ganymede with the 1.0 rubber chicken, but I'm still awfully happy with where the code is now.

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!