I haven’t written in 1.5 months. Hard to believe. I’ve actually felt a bit guilty about this already, so guilty in fact that I password-protected the blog so the lack of writing isn’t immediately apparent to the outside world. So what has happened in the last few weeks?
Well, not much, sadly, but even more sadly, also a lot. There hasn’t been too much going on in my research lately, but in my personal life a lot changed, and that definitely makes me depressed. My mother had to move out of her house, the house I grew up in, but my grief over this can only give me a small glimpse of how bad my mother must feel. And after nearly two years, my girlfriend and I split up. We’ve had our problems during the last half year, but I really thought we were going to solve them. It had been very comforting to know that, regardless of where my work will take me, I will be together with her. Now this certainty is gone, and quite frankly, I’m lost at sea. It’s a pretty hard time for me right now.
On the work side, I’ve gone through one major revision of my thesis, but unfortunately I missed the end of September to turn it in. Corky and I are now working on another revision, and we’re also looking at the concepts of a future extension of the invariant checking, and I plan to submit my thesis at the end of October. I feel that the text has become a lot more “crisp” after that first revision. Often I was unnecessarily verbose. I’ve also improved the samples in the listings, added benchmarks for different invariants, and removed two parts that seemed to criticize my own approach, even though the current alternatives also suffer from them and my work is in no aspect worse than what was already available.
I demonstrated some of my tools to Walid, and when I did that, I realized how much knowledge about the internals a user actually needs. For example, there was no simple way to relate the class-method-PC information in the deadlock monitor to a location in the source code. I could easily do that by disassembling the class file, looking at the line number table, getting the line number, then opening the correct file… This wasn’t convenient, but up to that point it seemed like that convenience would have a very high price.
After the demonstration, I decided to find a way to integrate DrJava into my tools. DrJava is an excellent IDE and has syntax highlighting and many other features, so it would have been absurd to replicate them. What I came up with now is a form of “remote control”: You can connect to an existing instance of DrJava and make it open files and jump to a certain line. Now I retrieve the file and line number from the class file automatically, then make DrJava display that file and line.
This also implements a feature request  posted on SourceForge. However, now that I look at it again, I’m running exactly into the problem that Chris has mentioned there: When user A is already running DrJava on a machine and user B attempts to run DrJava on the same machine, user B’s DrJava connects to user A’s DrJava. Right now, I’m just listening on a particular socket, and as far as I know, only one process can have a socket open at any time. I’d have to write some sort of registry, even though the RMI registry probably already has that ability. We don’t want to make the RMI registry required, though. I don’t quite know how to solve that problem right now.
I also gave another talk on concurrent programming and testing , this time hosted by the Rice Computer Science Club. As expected, the audience consisted mostly of undergraduate students, so I’m glad I focussed more on the fundamentals, like race conditions, locking, deadlocks, etc. I think I used some very simple yet powerful examples  to demonstrate the problems, simple enough to make them accessible to students in the 2nd or 3rd semester. Maybe I’ll get around to writing this up in a paper.
I also spend some time as interim TA for COMP 311, but I think this sums up most of what happened since my last post.