I finally got sick of how much damage Blogger was doing to my posts with the excess of <br> tags it randomly felt like inserting, so I’ve turned it off. Unfortunately this appears to republish all existing posts. Sigh. So the formatting of old posts is going to look like crap. I’ll fix recent ones, and incrementally go around fixing older ones, but most of them will remain like that.
Archive for February, 2008
Formatting
Sunday, February 24th, 2008Open source project breakdown.
Sunday, February 24th, 2008I realised today that I actually have a fairly large number of open source projects published online (all on google code. Another thing I realised is that I should fix that).
I also realised that some of these are totally defunct.
I thought this would be a good time to do a quick breakdown of them, explaining what’s there, what they do and what their current status is.
JTypebuilder
Code generator for creating immutable data structures in Java. The idea was to define simple datatypes with a record notation and get an immutable class from them with correct equality, hash code and toString implementations, getters for the properties and a builder class for generating instances.
Status: Very very dead. It was at best a weak idea, and I have no interest in pursuing it. Use Scala’s case classes instead.
Generators4j
A brief foray into functional programming in Java. Lazy generators with functions like map, filter, etc.
Status: So dead. I didn’t get very far before concluding that trying to do this in Java was unusably awful.
Lazy Strings
Experiments in efficient representation of String types, with the aim being to provide a drop in replacement for java.lang.String with a different set of performance characteristics. Started in Java, moved to Scala.
Status: Just resting its eyes. I’m not doing much with this at the moment, but I occasionally peek at it and will probably factor out some of the ideas and turn it into a more tightly focused library.
Ranged Types
Very small Scala library for statically checked numeric ranges.
Status: Awaiting a use case. I occasionally think about picking it up again, but then I wonder why. It’s a fun idea, but I don’t actually have anything I need to use it for and as far as I can tell neither does anyone else.
SBinary
A small library for binary serialization and deserialization of Scala data types, based on Haskell’s Data.Binary.
Status: Very much alive. I’ve just released version 0.1 RC1, am using it as a dependency in other things and am continuing to tinker with it to improve its usability.
Prefer Scala
A wrapper around the Java preferences API designed to be nicer to use from within Scala and support a wider variety of preferences in a typesafe way. Uses SBinary to serialize Scala types to and from the preference backing store. It’s been factored out of the code for Hector’s Reminder Service.
Status: Fledgling. I’ve only just released it. It’s very small, and I intend it to remain so, so I expect to push it towards a 1.0 fairly quickly and then have it enter maintenance mode where future updates are just to fix bugs and bring it into line with the latest versions of its dependencies.
Hector’s Reminder Service
Unlike the other ones, this one is an application. It’s a small cross platform status bar application based on QT which gives you reminder messages on a semi-regular basis. Designed to be unobtrusive and simple and intended for the occasional casual reminder rather than of specific events. Uses “Prefer Scala” for persisting of state between application runs.
Status: Again, quite recent. I have a semi-official version released which works and more or less does what I want. I’m intending to polish that, add a very small number of new features (currently planned are a more expressive way of specifying message intervals, the ability to temporarily suppress a message group and possibly a simple API for other programs to interact with him) and then declare it to be feature complete. Once it’s reached that point it will enter a similar state of “Updates are only to fix bugs and match new dependency versions”.
Hector’s Reminder Service: QT Jambi and Scala
Sunday, February 24th, 2008Well, I spent a lot of today putting together the application I mentioned in my recent rant.
The program is called “Hector’s Reminder Service”. Basically it’s a taskbar reminder app. You specify a random lists of messages and their approximate frequency. It gives a little notification message (not a popup window!) on the task bar showing one of those messages about that often. You can configure as many different groups of messages as you like and they’ll be scheduled independently.
The code is available here. It’s GPLed, mostly because it depends on QT and I couldn’t be bothered to figure out the ramifications. Anything I consider reusable will be factored out into a library and released under a more moderate license. I have a few more things to sort out with it (mainly packaging) and will then release a version 0.1 of it.
Currently there’s no packaging system set up. If you want to build this you’ll need QT Jambi installed – both for the user interface file compiler and for the native libraries. It’s currently untested on anything except windows, but now that I’ve given up on Swing and switched to QT I expect it should by and large work on OSX or any X-windows setup with a compliant toolbar. No doubt there will be problems, but they should be surmountable. Give me a shout if you do want to build it and discover it doesn’t work on your platform. I’ll do my best to help.
Edit: Actually, unless you’re feeling brave you probably don’t want to build this. It depends on having Scala 2.7 and jerbil installed as well as the QT Jambi libraries. You can download a prebuilt version from http://hectorreminder.googlecode.com/files/hector.zip , but you’ll still need the QT Jambi libraries installed.
Edit 2: I can confirm that Hector does work properly under linux. You need to replace the qtjambi.jar in the lib directory with the one from your jambi install (turns out that’s windows specific. Oops). Other than that he works perfectly.
Wait, you believed them when they said "Write once, run anywhere"? That’s so cute.
Friday, February 22nd, 2008So, I’m writing a tiny little application that sits in your status bar and pops up occasional reminder messages in the corner of your desktop. It uses the Java 6 desktop integration stuff. It’s not very exciting – just fun and moderately useful.
I originally wrote this for Victoria with a set of hardcoded messages, so it only needed to run on windows. It worked really well, so I thought I’d turn it into a proper application – it should only be a few hours of coding to do so.
Especially, I thought, as it should run nicely cross platform.
Ha ha. Ha.
First off, Macs are ruled out – no functioning Java 6 yet. I took a brief look at using jdic instead, but it turns out that doesn’t support macs either. Argh. So, we’re stuck with windows and linux. Ho hum.
Yeah, linux? Not so much.
First off, Swing *never* works properly under linux. As far as writing cross platform GUIs, “Write once, run anywhere” is a blatant and utter lie. If you’re using Gnome or KDE with their standard window managers, it will just about limp by. If you’re using anything else, good luck.
Anyway, I use xmonad. However I use xmonad with gnome (at least on my laptop), and this is just a status bar feature, so given that I still have the gnome status bar I was optimistic.
Nope. Looks like Swing checks the window manager name, not the availability of the status bar. It’s really great the way the Swing/AWT developers actually understand the environment they’re developing for, isn’t it? On a related note, the resulting toolbar icon looks *really bad* even when I run it under normal gnome. That’s probably just a scaling and transparency issue though. I imagine I can sort it out if I try hard enough.
I have to say, despite this the desktop integration stuff is moderately nice. It’s a great way of writing once and running anywhere that has windows and the latest version of Java installed.
Sigh.
Anyone willing to put a word in for Groovy?
Wednesday, February 20th, 2008Groovy seems to come up in conversation a reasonable amount. People appear to be doing some interesting things with it. But every time someone tries to advocate the language it leaves me completely cold. Basically all the advocacy seems to come down to:
- It has “closures”
- It looks like Java…
- …but it’s dynamically typed.
Yay?
It has a few features that seem a bit more interesting. It has named (and default?) parameters, which is nice (not exciting, just nice). What little I’ve seen of its metaclass stuff gives me a simultaneous “yikes” and “ooh, that’s kinda neat” reaction.
This isn’t really intended to be a bash at the language. I just don’t know much about it, and none of the information I’ve seen seems terribly compelling. I’d like to hear some stuff about why it’s actually a nice language to use. I probably still won’t use it – I have enough languages on my plate as it is – but I’d like to be a little less ignorant about it.