Posted by Tim
Filed under: News
Twitter annoyances
After Twitter disabled basic authentication yesterday, basically all Open Source Twitter clients ceased working (e.g. bug #629192). I tried some clients from the Fedora repositories, but none seems to work. I liked the simplicity of Pino, but now it's just dead wood. Mauku on the N900 is also broken. Not even the personal timeline RSS feed works anymore, although still advertised on the Twitter website.
ars technica has an article which describes the the problem with FOSS clients on page 2 and it doesn't look good so far. It seems finally to be time to switch to identi.ca (me).
Posted by Tim
Filed under: Geek
Releases of Fawkes 0.4 and roslua
Yesterday I have released Fawkes 0.4, the robot software framework we have developed at RWTH Aachen University, with contributions from TU Graz and University of Cape Town. Various obstacles made it one year for the release to materialize, but finally it's here with lots of new stuff, check out the announcement. Many people have helped with this release, good to see. Fedora packages are on their way, now that we support system-wide installation.
Recently I have also been busy working on software for another robot software framework -- ROS. As part of my research stay with Dr. Siddharta Srinivasa from Intel Research Pittsburgh at the Carnegie Mellon University I have developed roslua, a ROS client library for Lua. This is only the first step in porting Fawkes' behavior engine to ROS. You can find the full announcement on the ROS website. So after "the discovery" I still can be kind of productive. More is cooking, stay tuned.
Posted by Tim
Filed under: Geek
To sleep or not to sleep
Today looked for a problem for about an hour which I thought might be worth sharing. The following (most likely common) scenario was to be implemented: one process wants to start another and be notified if something happens to the child process. The proper way to achieve this is to fork(), then execl() the new program in the child, and have the parent call wait() to check for state changes of children.
Now, in I'd guess likewise common is to start with a test program that incorporates sleep(). Fail! After an hour it turns out that the sleep() call will block the SIGCHLD signal (cf. sleep.c). But it does not unblock the signal afterwards. Since the wait() call depends on SIGCHLD, no event would be received
and wait() would starve.
So either you need to unblock the signal after calling sleep(), or better call usleep() which does not suffer this problem (cf. usleep.c).
Posted by Tim
Filed under: Geek
Dead routers which did not die
In the last few months three routers I maintained died on me. All where little home routers. Two of them Asus WL-500GP, and recently a Fonera (first generation). The routers appeared to be live, but could not be reached, neither over Wifi nor Ethernet. The LEDs were lit or sometimes flashing. On the second router, one of the Asus ones, on a closer look it had some strange look, where all LEDs were off shortly, then back to seemingly normal. Sniffing on the Ethernet revealed some strange packages which contained the hex string 0xDEADDEAD and a message to boot into failsafe mode.
Now, to make a long story short: all the routers were just fine, what was indeed broken were the power supplies - on all of those three. Replacing the power supply brought the device back to normal in all three cases. I haven't made an effort to measure what caused this problem, but it seems to be insufficient current.
So next time a (home) router dies on you, consider borrowing a compatible power supply first and test the device again, it might save some money and effort, besides reducing the electronic scrap on the planet.
Posted by Tim
Filed under: Geek
Setup git tracking branch for existing branch
Something that I did many web searches is how to setup up tracking of a remote git branch for an existing local branch. That regularly happens for example if I start with a local topic branch, and then push it to the central repository. Now, git does neither automatically setup that this (new) remote branch should be tracked for the local branch nor did I find a convenient command or argument to do so. So here is what is required, assuming that the remote repository is named origin, the local branch is topicbr, and the remote branch is timn/topicbr, and you are in the local git repository:
git config branch.topicbr.remote origin
git config branch.topicbr.merge refs/heads/timn/topicbr
.
It's that easy and now I have a place to look it up next time I need it...