Michal Čihař - Posts tagged by coding, page 5

Optimise your code

Especiall if there is chance it will be used on something like OpenWRT. Yesterday I installed Munin on my OpenWRT router. Now I can see that sometimes statistics drop to zero, because it didn't manage to catch them.

I looked for most CPU hungry plugins and those are df_inode and processes. I rememeber that I already had to rewrite df_inode, because it was damn slow, so I only used that version (it should be also somewhere in their tracker, but I can not find it right now).

The processes plugin was also quite easy to optimise, compare old and new code:

 # time find /proc -type d | grep [0-9]$ | tr -d "/proc/" | grep ^[0-9]*$ | wc -l
 real    0m 0.77s
 user    0m 0.28s
 sys     0m 0.39s

 # time ls -d /proc/[1-9]* | wc -l
 real    0m 0.06s
 user    0m 0.04s
 sys     0m 0.00s

Buggy phones

I played a bit with Gammu and my phone (Sony-Ericsson K750i) yesterday, and I found yet another firmware bug. Enabling call line identification over cable (or any connection) makes phone hang when you receive call. Don't know why it is not able to look up number, when it already shows it on the display…

Converting locales data

I already announced that Gammu translations were converted to gettext. Reasons for conversion were written already some time ago. Now I'd like to write about some technical details on conversion.

First I thought the conversion will be simple. Just convert one text file format to other. Unfortunately there were lots of typos in old translations, which I had to fix, because gettext is much stricter about syntax. This itself would be also good reason to switch - old localisations had several types of errors, most frequently bad escaped quotes or messed format strings. This sometimes lead to Gammu crash, because it confuses printf like functions.

Another thing which was broken in old translation were duplicates of some strings. There were about 20 duplicate messages, which only added work to translators and were never used, because Gammu used first string which matched.

After I spot common mistakes, it was quite easy to write conversion script which would handle them. It is written in Python and uses its ConfigParser module to read old localisations. Using already done modules makes thinks a lot easier :-). After reading them, they are fixed to avoid syntax errors in gettext and written in gettext format to new file. All this in 123 lines of code (well, many of this are comments and string constants).

PS: You can download conversion script here, maybe it will be usable also for some other project.

Version control system for Gammu and others

I still more and more think, that I should move out of Bazaar to some more maintained piece of software for version control. The biggest problem I currently see, that I was not able to convert by Bazaar repositories to some other format. I tried to convert to Bazaar-NG by booth BzrTools and Tailor, but none of them succeeded, then I tried conversion to Git, but Tailor failed also on this task.

Maybe I will try Subversion, which is now very widely used software, although it has some annoyances. I originally wanted distributed VCS, because I was often offline at home, but this is not the case anymore, so using centralised VCS on my own server should not be a big problem.

Don't send patches by email

I just noticed that I tend to forget about patches that I received sometimes and didn't have time to review them right as they arrived. Fortunately that person reminded itself by sending another patch, so I got back to original issue, but it's unfortunate to loose patches just because of my bad memory.

So please bug trackers, there is much higher probability that issue won't be forgotten :-).

Bug tracking black hole

It's funny how big are differences in authors of open source programs and their bug handling. Yesterday I finally managed to report problem in gtkthml plugin for Claws mail which caused some HTML mails to be displayed in wrong encoding. I got instantly reply and in few minutes it has been fixed in CVS. Thanks a lot Colin Leroy!

Exactly opposite situation is with Klear. I wrote bug report with patch more than a year ago and it is still without reply from developers. Funny is that somebody else was brave enough to port this patch to curent version. Looking at their bug tracker, I can see that my report is not alone, let's call it black hole…

Localisation in PHP

As you might already know, my website is available in English and Czech languages. I decided to use gettext, because it is easy to manage (when compared to strings which are used eg. in phpMyAdmin. However I sometimes see PHP to crash on localised pages and it randomly sends page in English even when Czech should be sent. I don't know how to fix and even how to debug this as this happens in few situations, which I'm not able to reproduce. So I'm really sorry if you sometimes see site unavailable errors, or you get different translation than you expected. Reload mostly works in such cases.

Happy new year!

Maybe I'm a bit late, but happy new year! I was quite silent in last days as I was having rest from computer and enjoyed real life.

What will this year bring? I will hopefully become Debian Developer, as only required step right now is account creation. This is good news for Gammu users who run Debian, as I would like to upload testing versions to experimental (as well as appropriate python-gammu builds).

What else? Some new releases of my projects :-). I'm still working on Wammu and configuration wizard. There is a bit more work than I expected, but it should be ready during January. I don't expect much new features in python-gammu, it will be just kept in sync with gammu.

The only remaining project is Ukolovnik, which is in perfect state for me, however other users request more features and I should sometimes get at least to patch merging :-).

Online localisation?

After few complains on quality of translations coming from Rosetta, I started to look for other possibilites to use for online translations. I want something what allows forcing of review of translations, as I don't see other way for improving their quality.

The only thing I found so far is Pootle, but I didn't yet manage to make it properly use Wammu po files and translate them. I'm probably doing something wrong, as there seem to be several working installations on the net. It's probably time to properly read documentation ;-).

OBEX specification?

While looking at best way how to implement Sony-Ericsson support in Gammu, I found that I desperately need OBEX specification for that. After looking at IrDA website, where it has been designed. I was shocked by prices they request, so I start to look for other source.

Thanks to Jane, I found it! Well they should protect their content if they really want to charge some money...