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.
§