Benad's Blog

A mirror of

Not Getting Lost Anymore

Everybody that knows me well (and now you, unknown reader) knows how easily I can get lost, without or even with a map. Over the years I did practice reading maps, understanding them and so on, but in the end I just completely lack any sense of spatial direction.

For the past few years though things have been a bit different. Why? Because with my phone I now have a portable GPS and mapping system. Even better, with Google Maps I can use street view to see how the surroundings should look like. While that may not sound like a lot, this greatly helps. Before going some place, I “virtually” drive through the itinerary to familiarize myself with the path and how the destination looks like, so that if I’m in a place that I haven’t seen before I can actually trust my instinct that I’m lost. In which case I take out from my pocket my iPhone and follow the way back on the map.

Now, I’ve heard that Google and other companies started mapping out shopping centers and airports, though as usual they don’t include much in Canada or Montréal. Hopefully it could come soon, so that even indoors I can’t get lost. Well, most of the time.

If I Could Draw

I always maintained that to be a good graphical user interface designer, you have to be good at two things: Graphical design, and software conception. I have an odd impression that if it weren’t from my complete inability to draw, I might actually be a good GUI designer.

One of the difficult challenges of software design is to map an inherently complex combination of computing machine states into easy to grasp higher level concepts for end users. And while it may sound eerily similar to making things look simple, it’s actually more difficult since it has to actually still not only make sense (with some kind of internal consistency), but also correctly represent the machine states. Put simply, GUIs shouldn’t (completely) lie and shouldn’t be too hard to grasp. Making things more difficult, to be consistent within a software environment, you may have to restrict yourself to a limited set of widgets, which could potentially make it difficult to fit your own metaphors into whatever tools you’re given.

So, yeah, looking at my own software designs I’m getting pretty good at software conception. If only I could also make it “pretty”.

The Adventures of Lolo

The trilogy of games titled “Adventure of Lolo” are very well made puzzle games made for the NES in the early 90s. I played them again recently, and they stood well the test of time. They are essentially Sokoban-like games, but with the addition of various creatures, and that you have to collect all heart items before getting the chest to open the door.

The first game (which wasn’t released initially in Japan, oddly) has a good learning and difficulty curve. At the end though some levels are difficult because they are not too well designed. Passwords are provided for every “floor” (sets of 5 levels), though if you lose all 5 lives the “continue” will let you restart exactly at the level you lost.

The second game is quite more difficult, though it has better graphics, and passwords for every level. The end levels are also more interesting than in the first game.

The third game is more an adventure that will let you chose in what order you challenge each “floor”, so that if you get stuck you can get out of the floor and pick another one. The passwords are then much more complex given the various combinations of how you can beat the levels. The graphics are much nicer, and there are several boss battles.

So, if puzzles are your thing, those games are great. Considering how playable and well-made they were, I wonder why they don’t re-release them on the iPhone and other platforms like that in a bundle.


Managing C

Managing large amounts of C code within a single process can be quite daunting. If any single thing breaks, everything breaks spectacularly. It is not surprising that on Unix, the system C was originally made for, encourages modular, multi-process design that communicate through pipes. While this kind of modular design works well for multi-machine, distributed systems, it doesn’t work too well most of the time, since code tends to be monolithic and not necessarily worth the high development overhead of that multi-process modularization.

The trick, of course, is to try to adhere to software design patters, which may help with validation and to avoid bugs as much as possible. Which led of course to C++, UML, and all those half-assed solutions. By that I mean is that what can truly help is some kind of run-time engine closely intertwined with the programming language that not only moves coding complexity to run-time behavior, but also can gracefully handle many types of programming errors.

Oh, I so much miss stack traces…

A quick post to mention that I’m now a regular reader of the site As its title implies, this site showcases free online of computer games made by independent developers. While they are far from big productions of video game consoles, they tend to be quite original yet still entertaining. I’m often surprised at how clever or “freshly original” they are, and since they’re are (legally) free, what’s to lose?

New Web Design Tools

This afternoon I was preparing the CSS of my new blog location when I notice how better web design tools are now compared to ten years ago. Firebug, the extension for Firefox has always been a leader, though I often used external software for CSS editing. With Safari came a powerful set of built-in tools that can inspect any page element and show how and why it was styled a certain way. Google Chrome copied that also (since it inherited from WebKit, the engine of Safari).

Today I combined both Espresso 2 from MacRabbit, powerful HTML and CSS with live preview and Firefox + Firebug, both that I haven’t used in a while. Wow. This was so much easier than plain-text editors with the CSS spec open… Maybe it’s time to revamp my web site’s (anemic) style…

Blog Move Almost Done

You can look at the new blog at the temporary address . It's on Squarespace, and I imported my full blog archive. For now I'm still using Posterous and autoposting to everything else, but this week I'll finalize the move. I still have to clean up the page style, tweak things here and there, use Twitterfeed to auto-post links to Twitter (using, and so on.

Learning a New Language

I was thinking this morning that I could, on a whim, start learning a new language, and for once by that I don’t mean a programming language. The thing is that even if I start doing so on a whim, this would lead to a multi-year effort, so even if learning a new language is a whim, which one to pick isn’t.

So let’s break them down into multiple criteria, rate them, and pick the best. The first would be proximity to Latin or Germanic languages, more specifically French and English, the closer the easier it will be. The second would be how easy it would be to have some kind of cultural immersion, be it with other people or with media (and thus rate the Internet-connectedness of a language). Which leads to another criterion, I’d say cultural variety, because I’d prefer a language with not too many divergent regionalisms. An obvious one but difficult to measure objectively and à priori is grammar difficulty (I assume nothing can be as difficult as French). Which leads to script difficulty, both in terms of number of characters but also how many times writing cannot be inferred by the pronunciation. Finally, there’s simply overall usefulness, be it with conversing with other people or reading things online that would be of interest to me.

I mentioned “Internet-connectedness” because now the great advantage we get for cultural immersion is that as more and more media, be it video, audio or writing, is available online, we do not need to go through the stress of moving to another country altogether just to learn a new language. I say that because I’m not kind of person that has quite a lot of trouble in understanding grammar unless I see it enough time in context until “it clicks”, meaning I depend a lot on immersion to learn.

At any rate, I’ll start compiling the ratings of each of those criteria for a bunch of languages on another day.

Kubrick Upgrade

As I’m reviewing the movies made by Stanley Kubrick, I’m starting to get to the point where their visual aspect is important, actually spectacular. It just so happens that there is a collection of Kubrick movies on Blu-ray. To compare, I bought this 9-disk DVD collection in 2003.

Now, I’m normally against buying newer media, and I postponed buying a Blu-ray player for the longest time out of spite against Sony, but this time I might make an exception. My rationalization is that those Blu-rays have far more extra features than my old DVD set. In my DVD set there were no extras or commentaries whatsoever, but seemed to make it up with a feature-length documentary (that’s not available on the Blu-ray set). And the thing is that I will watch all the extras, so that may be well worth the price. So, there, they’ll get my money.

Norwegian Wood

So I just got by mail from Norway a bamboo USB key from Opera, the makers of the Opera web browser. How? Because I won a contest from their April fool’s. If you signed up to their bogus “we’ll send you data to offload our servers”, you would have gotten an email containing a bunch of ones and zeros. Of course, they were encoded messages. And here’s how I decoded them, using Perl and the pack function.

First, decoding the binary data. That was pretty easy:

perl -e '$_=<>;chomp;print pack(q{B*}, $_), qq{\n}'

That took care of the binary data. Now, the input was actually divided in two parts. The first decoded to a sequence of decimal numbers separated by spaces, the second some binary starting with the “BZh” which indicates Bzip2 data. Uncompress that and you see a message about posting a tweet with the hashtag #operaaprilfoolleet to be eligible to win some contest, which I did.

The first part with the sequence of decimal numbers was supposed to be easier (well, if you can’t recognize a BZip2 header). The big distinction here is that the pack function requires the input to be separator-less, in this case spaces. Since you can’t define decimal input padded as 3 digits, you’re stuck sending the input as an array instead, which works great.

perl -e '$_=<>;chomp;@f=split(/ /);print pack(q{C*}, @f), qq{\n}'

That gave me the first message, this time asking to post the hashtag #operaaprilfools, which I did.

With some luck I won the prize, an Opera-branded wood USB key, as you can see in the attached picture (or here).


Log in

No account? Create an account