Outcry: streaming again

Some former colleagues might think I'm reinventing my own wheel here. They would be right. I didn't feel like resurrecting a Python 1.5/omniORB zombie (or did it use SOAP later on? Or maybe both? I forget the details...) that didn't do everything I needed it to do and probably was mostly horrible. Anyway.

No guarantees for it working for anyone else, or for it to be interesting for anyone else, but Outcry is a remotely controllable (via plain old XML over HTTP messages) Icecast streamer. It's written in Ruby (which I'm enjoying, a lot) and requires libshout and ruby-shout. It streams MP3, converting FLACs and Vorbis files on the fly.

It's the latest step in my ongoing quest to play music in our living room without CDs. My KiSS DP-1500 isn't really very good at playing OGGs (it crashes a lot) and even worse at FLACs (it doesn't do them). Also, it doesn't play WAVs. My computer can't convert from FLAC to MP3 quickly enough for things to work out OK when I let the KiSS box control what it's playing, so next try is moving the control to this end of the pipe. Which kind of sucks. Oh well.

I should probably release my own kissd replacement written in OCaml, too, but it's even less ready for the masses. Email if you're interested.

Article page

Tag, Milou, Tag

Tomboy meets Leaftag.

Tag note

Select tags

Find the tagged note with Deskbar

And finally, after convincing gnome-open to use Tomboy to open note:// URIs, selecting the entry in the Deskbar menu will open up the freshly-tagged note.

Yeah, it's bit of a hack, but it's a start.

You need Leaftag (the latest version from SVN plus, at least at the moment, a patch for libleaftag-gtk), .NET bindings for leaftag (no tarballs yet but a mirror of my darcs repo is available) and the Tomboy plugin (again, there's a darcs mirror.)

Article page

Thank you

Right, so we got the utter turd of a new copyright law. Here are the results of the final vote in the parliament. "Jaa" is for the new law, "ei" against the law, "poissa" is away.

A friendly message to anyone there who might be listening: I won't vote in any election for anyone who wasn't against the law.

Article page

Caboodle 0.3 and 0.4

Two new versions of Caboodle: now it has better level generation logic, it caches level images so the whole thing doesn't get redrawn all the time, it includes a randomize level menu command and an option to display line intersections interactively as you drag vertices around. The last thing will probably grind the whole thing to a halt on larger levels.

Article page

Caboodle 0.2

So I released 0.1 and 0.2. Now Caboodle has a menu bar (whee), an icon and a .desktop file.

To clarify something: you do not need OCaml or the Gtk+ and Cairo OCaml bindings to run Caboodle, just to compile it. I do not provide binaries at the moment, but if there's demand I can put up a pre-compiled Linux/x86 version.

Article page


Caboodle is a puzzle game. See:

As you are probably able to tell, it's a clone of Planarity. My excuse for the blatant clone is that I wanted to learn OCaml and the game was a nice, simple project to tackle. And at the same time, I got to learn a bit of Cairo, too. Of course, I was — and mostly still am — totally clueless about graphs and the related math.

Still, the end result, even its current state, isn't too bad. It's definitely faster than the original in most aspects, which shouldn't come as a surprise given the ass-kickingness of the OCaml compiler especially compared to Flash. The most significant slowness is due to the currently very naïve redraw logic: every time something moves, everything is redrawn. As you can probably guess, it starts to slow down with a large graph and fast mouse movement. I'll have to see about fixing that. And I'm not totally satisfied with the level generator, even though that's the part I've spent the most time with (no, the math didn't come back easy after too many years of not using it at all, you can all point at the source code and laugh); it does generate too many vertices with just two edges. But I think that should be pretty easy to fix.

About OCaml: a nice language with an impressive compiler, and quick to learn, at least up to a point. I haven't used any objects in Caboodle, only the stuff that comes with LablGTK2. And I didn't write any functors. Or a bunch of other stuff. And I still don't find code written by others very quick to read and the compiler error messages can be pretty puzzling, at times. Part of the learning curve is probably caused by the fact that I've never before used a language with a modern (you know, from the 70s) type system, just the basic stuff provided by C, Java, C# and friends. Still, I'm not quite sure I like the ML syntax, but I suppose it's not too bad. And I wonder if there are some limits to the language that I would have hit on a larger project. It is mostly very, very strict, and doesn't offer any of the runtime type frobbing that Java does with its happy casting back and forth, reflection and stuff.

Cairo turned out to be surprisingly easy, too, at least for this simple a project. I have to thank Olivier Andrieu's cairo-ocaml examples, though, without them the going would have been a lot rougher. But I can't really compare it to other systems, because I've never done much graphics programming.

Also, turns out I'm not the first one with the same idea: back before I had anything showing up on screen, xiphmont was on #gtk+ posting screenshots of his version. Oh well. Seemed to be a silly reason to stop, given that my objective wasn't to write the game as much as to learn the tools, so I ploughed on.

I haven't yet done a release, but it should be ready for 0.1. I'll post it at gnomefiles once I get around to it. In the mean time, it's available in the darcs repo from the Caboodle home page.

If you wonder what the name is about, it's just a random word I got out of /usr/dict/words. That's my preferred way of naming software.

Article page