Ok, so I haven’t blogged in a week, but that doesn’t mean I haven’t done anything in that time. Although my activities have been a bit different. First of all, about 10 days ago, I somehow hurt my shoulder (Doc says strained rotator cuff muscle, which was my diagnosis as well; I don’t really need a doctor, just a DEA number, really), so I haven’t been biking since. Rotating my arm to hold the handlebar and supporting part of my weight on it hurts, so I’ve mostly worked from home, and twice my girlfriend has been absolutely wonderful by giving me rides to the office and back.
Second, my mom arrived on December 13 and is staying with me for two weeks over Christmas. We haven’t seen each other in a year, so this is long overdue. I didn’t have the time to go back to Germany during the summer, and if you know anything about my personal life, then you also know that this was a good thing. I’m taking some time to talk to her, about our family or what is left of it, philosophy, and about life in general. It’s good. I think it’s soothing for both of us. My girlfriend and my mom are getting along well too. I expected that, and they already met last year during Christmas, but I’m nonetheless very happy about this, for the present and the future.
I’ve spent a few days grading for COMP 311, the last time I have to do that as a TA at Rice. I had to fix the auto-grading templates for assignment 7 in OCaml and do some of the auto-grading itself, even though it wasn’t my turn, but fortunately we have a very reliable group of TAs this time, and I don’t have to take over other people’s work this time. Tomorrow we plan to discuss the final grades for the course. People have also been picking up their final exams now, and some have been haggling over grades. I wish there were a better, more automated way of returning the exams.
I’ve been adding more to the documentation of the Thread Checker, and I also started implementing the new “random yield” strategy that Corky has suggested. It works, but I haven’t evaluated how well it does. I also improved the build script and the custom instrumenting class loader.
I’m now dealing with a small but interesting side problem: Changing the probability constant of the yield strategy without having to recompile, and therefore reinstrument the entire rt.jar. The constant has to be in the rt.jar (at the beginning of the boot classpath), otherwise VM initialization will fail, and basing it on some kind of command line flag or value in a configuration file is impossible if I want it to affect Java programs from the very beginning, so it has to go into the rt.jar. If it’s
final, however, the Java compiler may propagate the constant, and it can’t just be changed in one place anymore, so it has to be a non-final
static variable that is initialized in the
<clinit> method. Now I’m writing a strategy that can change the value that gets assigned to such variables. It’ll save a lot of time later, especially when instrumenting on-the-fly.