Ooooooh. Shiny!

When I built this computer I bought two very nice monitors to go with it.

I then promptly discovered that I had *no idea* how to make two monitors work under linux. X configuration is dark magic to me. Consequently the second monitor got shunted to my other machine and I’ve had a spare old monitor kicking around for a while.

However, my computer recently died and I had to reinstall, and in doing so and poking around with video settings I discovered that the “nvidia-settings” program includes support for making multiple monitors work flawlessly. A few quick clicks and I had the two monitors working side by side very nicely. Yay!

I do however note that Gnome doesn’t handle them that well. This will probably induce me to finally get off my ass and try a better window manager. I tried Enlightenment earlier, but E16 didn’t work, the repository version of E17 is kinda unstable (not to mention Enlightenment is *really confusing*, but I’m sure I’d get used to it) and I haven’t quite worked up the courage/botheredness to install the CVS version yet.

Anyone know what a good window manager is for use with xinerama? Should I be giving XMonad a try?

This entry was posted in programming and tagged , on by .

Best error message ever

“The program ‘apt-get’ is not currently installed. You can install it by typing ‘apt-get install apt'”

This entry was posted in programming and tagged on by .

I Aten’t Dead

Surgeon General’s Warning: This post contains an excess of hyperlinks. There is anecdotal evidence that excessive linking may be hazardous to your health.

I’m still here. :-) I’ve just been busy with my new job at Trampoline Systems and non-code things.

On the computer front, I’ve been learning (a bit) about spatial data structures and graph algorithms, mostly for work related reasons although also for personal interest. Tinkering with Haskell continues apace – I’ve been finding that it’s a very good language for thinking in, even if I don’t write anything big in it.

The Lazy Strings project may look like it died, but fear not! It continues. Ok, you probably didn’t care either way, but still it continues.

I’ve decided that a) Life is too short to write it in Java and that b) I should just pick an implementation and stick to it. Consequently I’ve moved to Scala, and have the basics of an implementation based on a finger tree, rather than the traditional balanced binary tree used in a rope.

Why a finger tree? Well, umm. Because. :-) Finger trees have nice performance characteristics, are easy to implement, and seem well suited to the task. The version I’m using is very heavily specialised to the task at hand, and measures a number of things up front (currently just length and hash code) to improve performance and allow for various nice optimisations.

The main thing to note is that I’ve been using scalacheck to test properties of the string. It’s been a great help. I’ve not found it that useful for actually tracking down the specifics of the bugs – its error reporting isn’t that great – but it’s been very useful for showing that they exist and providing enough of a general area that I can track them down myself. The fact that Scala has a REPL has been very useful in doing enough experimentation to pin it down.

The utility of these will come to no surprise to those functional programmers reading my blog. :-) Scalacheck isn’t quite as nice as Quickcheck and the Scala REPL isn’t as nice as most of the ML ones (it’s better than ghci though), but they’re both good enough, and it’s nice having these in Scala.

Scala itself I continue to have mixed feelings about. It’s a little too Java like. I very much like what it’s done with the object system (first class modules. Yay!), and about half of what it’s done with the type system, but the whole effect still feels kludgy to me. It’s definitely infinitely better than Java though, and doesn’t fall much short of being as pleasant as an ML (it’s better in some ways, worse in others).

Lisp tutorial

In a good cause…

I must admit I haven’t gotten around to reading it yet, but Practical Common Lisp looks really quite good, and is available online for free. Definitely a lisp tutorial worth reading.

This entry was posted in programming and tagged on by .

How to create sealed classes in Java

As far as I can tell, no one else seems to have spotted this trick, so I thought I’d share my latest corruption of the Java language:


public class Sealed
{
private Sealed() { }

public final static class Foo extends Sealed {
public Foo() { }
}
public final static class Bar extends Sealed { }
}

What does this code do? It creates a class Sealed which is *not* final, but only has a finite number of subclasses which you determine at compile time (you can make those subclasses themselves extensible if you want, although I declared them final above). No one else can subclass it because they’re not able to call the super constructor as it’s not visible outside of this class.

This entry was posted in programming and tagged on by .