The Weblog

Halting Problem

The Weblog

Part of Roland Sadowski's website

November 20th, 2008

Autumn Update

Since the end of the year is near, and because at the beginning of January I’ll be pretty busy with other things (see below), I decided I’ll post something while I still have spare time on my hands.

On a personal note, that was a good year (I finished school, among other things). On the professional level, well, I didn’t work anywhere, was too busy with my thesis. But in September I started sending out my CV and found something really nice. In Denmark.

I’m starting in January, that’s why I won’t have much time at the beginning of next year for fancy retrospectives. I’ll spend 1+ year in Denmark. I always wanted to live there, at least for a while. I mean, they invented Lego, best toy ever.

But till then, I have lots of free time and so far I’m spending it mostly on reading and programming. I’m gradually replacing Python with Clojure as my weapon of choice and I’ll post something on that topic shortly.

§

August 31st, 2008

MathTalker Went Live

On friday I uploaded the 1.0 version of MathTalker to Google’s servers. It’s a simple chat application which allows you to write mathematical formulas (using syntax similar to TeX). It was written in Python and runs on App Engine.

MathTalker has pretty steep requirements for a web app: Firefox browser and special math fonts (download links on MathTalker page). Displaying math formulas is possible thanks to ASCIIMathML library, which converts ASCII to MathML. I know about the plug-in that lets you render MathML in IE, but I decided to drop support for that browser after spending a couple of hours trying to make the UI work.

App Engine

App Engine SDK comes with a little web framework and that’s what I used. You can also use Django, but I wanted to keep things simple. The built-in framework is nothing special, but it doesn’t get in your way. What requires more attention is Google’s Datastore - their distributed database. Honestly, I used only relational databases so far (oh, and flat files…), so I had to watch one or two talks from Google IO conference to get the idea.

What pissed me off the most was lack of support for nested transactions and some bugs in existing transaction code. To run some piece of code, you have to pass a function to db.run_in_transaction(), but whenever I tried to make the code more generic (as in: not to write two almost identical functions) stuff exploded. It’s pretty bad, because creating an entity and updating a counter should be a single atomic action. But they aren’t, so you end up hoping for the best.

JavaScript

Little bit of history: At first I hated it, then I really liked it. Now I’m just using it and ignoring its deficiencies. And regarding the period that I liked JS: it was the time that JS libraries were becoming really, really good, and I was just impressed (shocked, even) that it’s possible to build anything with it without cursing like mad.

But even JS 1.7, which has generators and list comprehensions, is pretty verbose, and you can only take it so far as jQuery - the best attempt for creating domain specific language in JavaScript. Great for traversing/manipulating DOM.

Another thing: I used Emacs with js2-mode. The style of formating code encouraged (somewhat) by jQuery drives Emacs insane and beaks the indentation. At the beginning it bothered me, but then I stopped nesting function definitions and js2-mode let me do my work, and my code looked more readable. I don’t know if that was how js2-mode supposed to work or if it was just a bug, but it’s done more good than harm.

Blueprint

I’ve also tried out Blueprint CSS framework. I’ve used Yahoo’s CSS reset library before (and I don’t want to work without CSS reset ever again), but never Blueprint. It’s pretty good, but somehow feels not clean enough. I guess it provides to much defaults for my taste. But I’ll probably use it again someday.

§

July 20th, 2008

Functional

Recently I tried to rewrite a particular algorithm for generating permutations in a functional manner. The original was written in C#, therefore lots of mutable data structures etc. My first attempt at rewriting the code in Clojure went something like this:

As you can see, I got lost halfway through. But this is what you get when you try to write procedural/OO code in a functional language, using immutable data structures. Usually the right way to get out of a mess like the one above is to use map or its syntactic brother: list comprehension (Clojure’s for macro).

I ended up with a lazy list of permutations, where the laziness required zero effort from me - got that for free from the language.

I’m still stumbling while writing programming in Clojure, but not in the frustrating way like when I tried to write something of use in F#. Probably getting to know Scheme beforehand helped a bit.

§

July 6th, 2008

I’m no longer a student.

A little more than a week ago I defended my thesis and now have a Master’s degree in mathematics. The title of my thesis is "Particular classes of functions holomorphic in the unit circle," topic related to the Bieberbach conjecture, for those more oriented in math. For the next month and then some, I’ll be writing code and learning. I’d also like to finish Okami. After that I’ll start looking for a job.

§

April 28th, 2008

At least I’ve written some code

A Little Update

I’ve entered the thesis-writing mode and that means I only allow myself to work on my projects on Saturdays. By projects I mean tasks that usually take a good couple of hours. More often a whole day.

Yesterday I finally did some work on my game. With a couple of thousands LOC it became apparent I have to write some tests, and that’s mostly what I’ve done this Saturday. I’m using TestNG.

I also have to force myself to write some PHP code for a class in the coming weeks. I was avoiding PHP for so long, but it finally got me. At school, of all places.

Linux

Lately, I’m spending much of my time on Linux. Here’s why: my laptop is three years old, but only a couple of days ago suspend and resume started working. Sort of - 1 in 5 times the machine just doesn’t want to wake up, and I have to reboot it. Other annoyances: this PulseAudio bug (pulseaudio -k and using “plain” ALSA drivers fixes it), Tracker, a desktop search app, doesn’t work (but Beagle does, I use it). Oh, and watching video on Linux sucks - I always see huge pixels and sometimes that just ruins the whole experience.

One small observation: I don’t install many apps on Windows these days (I’m not counting various dev tools). I do almost everything in the browser, which really bothers me, because the UI usually is slow etc. But on Linux, I find myself more willing to try out new apps. And some of them are really good or very promising (Gnome-do, Tasque, Glipper).

The overal feel of a modern Linux desktop environment is positive. Not quite there yet, but also not far from where it should be.

§