Learning Python

12/07/2011

When you come from different programming languages like C and C++, where you are used to control very finely what the machine does, learning Python is quite disconcerting, especially when it comes to performance.

Without being exactly an optimization freak, I rather like to use the best algorithms, favoring O(n) algorithms over an O(n^2) naïve algorithms/implementations, so you can guess my surprise when after replacing the O(n^2) initial implementation by an O(n) implementation I did not observe the expected speed-up.

Read the rest of this entry »


Implicit Coding

05/07/2011

I’m always playing around with data compression ideas, and I recently came across a particular problem that inspired this week’s entry about implicit coding.

The idea of implicit coding is to exploit some constraint in the data that lets you reconstruct one (or more) value(s) unambiguously from the others. The textbook example of implicit coding is to use a constraint such as a known sum. For example, If you have a right triangle you necessarily have that

Read the rest of this entry »


Wallpaper: Red/Blue

02/07/2011

(Red/Blue, 1920×1200)


The Inversion Method (Generating Random Sequences IV)

28/06/2011

In the first post of this series, I discussed how to generate permutations of sequences using the Fisher-Yates method and I explained (although indirectly) how a linear congruential generator works. In a second post, I explained how to generate 2D points uniformly and randomly distributed a triangle, discussing the method of rejection. In a third post, I’ve discussed how to generate points on a sphere.

All these methods have something in common: they are based on the uniform (pseudo)random generator, and they map uniform numbers onto a shape (or move numbers around, in the first case). What if we need another density function than uniform?

Read the rest of this entry »


Log Books

21/06/2011

The other day, I was discussing with a friend about my log books, and it seems that, while it’s fairly common with scientists of all sorts, it’s not a generalized practice amongst computer scientists and programmers. But it should: the log book is not only for chemists.

First, the log book serves as… a log. A written trace of your activity during the day. While this sounds silly, it may be useful in retrospect when it is needed to assess time spent on a particular (class of) task(s), to get a good idea of were you are spending your time at work.

Read the rest of this entry »


Python References vs C and C++

14/06/2011

As I’ve mentioned before, my new job will ask me to program more in Python than C++, and that’s some what new for me. Of course, I’ve criticized Python’s dismal performance on two occasions, getting me all kind of comments (from “you can’t compare performance like that!” to “use another language then” passing by “bind to external high-performance libraries”).

But it seems that my mastery of Python is still quite inadequate, and yesterday (at the time of writing, anyway) I discovered how Python’s by-reference parameters work. Unlike C or C++ that use explicit syntax to specify what kind of object we’re dealing with (either by value, pointer, or by reference), Python is a bit sneaky.

Read the rest of this entry »


Simple Color Management with Gnome

07/06/2011

Some time ago, I complained about laptops having sucky screens, but it seems there is a way to deal with rather bad colors in Gnome.

Read the rest of this entry »


Rethinking Graphical User Interfaces

31/05/2011

For Christmas last year, I offered myself an iPod, and I found that the interface, made for big fingers on a small screen, is surprisingly friendly and intuitive. OK, granted, some things are harder to find than other (like how to kill or group apps), but the overall experience is agreeable. You don’t feel the thing as a new device that breaks your work-flow, because you can’t have a work-flow on this thing.

Ubuntu 11.04 came out in April and it offered—well, kind of imposed, actually—their Unity desktop environment, and it does break your work-flow. Not because it is clunky (because it is), but because it does not offer ways of doing what you’re used to on a workstation, it tries to replace what you’ve always done by something “revolutionary.”

Read the rest of this entry »


Get to Know Conky

24/05/2011

While Ubuntu/Gnome/Compiz offer various widgets to monitor computer activity, I think they tend too much to offer a strong visual effect rather than actual useful, structured, information about what’s going on in your computer. Sometimes, it doesn’t really matter. Sometimes you want to know more.

One tool that’s not the mega-eye-candy but is very configurable and actually useful is Conky, a “free, light-weight system monitor for X, that displays any information on your desktop.”

Read the rest of this entry »


Huffman Codes

17/05/2011

Some time ago, I presented a piece on compressing voxel worlds and I just realized that I discussed different types of variable length codes quite a few times, but that I never took the time to present you the basic method of Huffman coding!

The problem of finding an optimal variable length code is to find an uniquely decodable binary code (that is, a code using only 0 and 1 for which there exists only one way of decoding a message) that encodes each symbol in a number of bits that is proportional to its probability of occurrence. A first strategy was devised by Robert Fano, Huffman’s teacher at one point. The so-called Shannon-Fano code is a top-down approach to solving the problem but it was shown to be suboptimal. The code proposed by David Huffman solves the problem optimally by taking exactly the opposite approach, that is, building the code bottom-up.

Read the rest of this entry »