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
algorithms over an
naïve algorithms/implementations, so you can guess my surprise when after replacing the
initial implementation by an
implementation I did not observe the expected speed-up.
Read the rest of this entry »
14 Comments |
algorithms, programming, Python | Tagged: array, Array List, CPython, Linked List, list |
Permalink
Posted by Steven Pigeon
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 »
1 Comment |
algorithms, bit twiddling, data compression, data structures | Tagged: Constrained equations, implicit coding, Pythagoras, rematerialization, triangle |
Permalink
Posted by Steven Pigeon
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 »
3 Comments |
hacks, Mathematics | Tagged: cdf, cumulative density function, Density Function, Fisher-Yates, Inverse, Inverse Method, pdf, PRNG, Random Variable, Rejection, Rejection Method, Ziggurat |
Permalink
Posted by Steven Pigeon
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 »
3 Comments |
Life, Life in the workplace, Science | Tagged: five star notebook, logbook, meet book, moleskin, pointy-haired boss |
Permalink
Posted by Steven Pigeon
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 »
12 Comments |
C, C-plus-plus, C99, programming, Python | Tagged: C, C vs C++ vs Python, C99, nullptr, Python, Python Is Slow, Reference |
Permalink
Posted by Steven Pigeon
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 »
Leave a Comment » |
Life in the workplace | Tagged: Apple, color, Color Management, Gnome, ICC, ICC profile, laptop, LCD, Screen |
Permalink
Posted by Steven Pigeon
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 »
3 Comments |
Design, Life in the workplace | Tagged: Apple, GUI, Interface, iOS, metaphor, os x, Tablet, Tablet PC, Touch Screen, Ubuntu, Unity |
Permalink
Posted by Steven Pigeon
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 »
1 Comment |
Life in the workplace, Operating System, Zen | Tagged: Compiz, Conky, CPU, cpufreq-applet, Gnome, Monitoring, Torsmo, Ubuntu |
Permalink
Posted by Steven Pigeon
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 »
14 Comments |
data compression | Tagged: bit, code, Entropy, Fano, Huffman, Huffman Codes, Prefix code, Shannon, Shannon-Fano Codes, Tree-Structured Code |
Permalink
Posted by Steven Pigeon