gethostbyname_r()

Okay, so I can’t really go into too much of the big picture since this is from the day job, but I can certainly tear into gethostbyname_r() a bit.

For part of what we’re doing, we’re sending a RADIUS message using the freeradius project’s radius client library. So, nice and simple (after you’ve done some setup):
[cc escaped=”true” lang=”c”]result = rc_acct(rh, 0, send);[/cc]
Easy enough, right? So it fails. Specifically, it segfaults and since it’s in a multithreaded server, it’s a pain to track down. And I mean a pain. Hours of fun with DDD, gdb, nana and finally printf() lead to here:
[cc escaped=”true” lang=”c”]res = gethostbyname_r(hostname, &hostbuf, tmphostbuf, hostbuflen, &hp, &herr)[/cc]
Ah. gethostbyname_r(), the glibc2-reentrant thread-safe version of gethostbyname(). Except that it’s deprecated, and has the unique property of working differently on just about every machine out there.

And of course, in my machine, and the server, it’s going nuts. Not because of a dodgy parameter or anything like that, though that took a while to confirm, it’s going nuts because of the way /etc/nsswitch.conf is written:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

That’s the standard way to write nsswitch.conf in ubuntu – it first checks the  /etc/hosts file, then uses the avahi daemon, then the DNS system.

Only that’s not good enough for gethostbyname_r(). Grrr. So after a full day bug-chasing through two codebases, the fix is to change a configuration file to this:

#hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4
hosts:          dns files

What a waste of a day! Gah!

I’m going to rewrite the radius-client library to use getaddrinfo() over the next while. I already have to make some changes to it to cope with other things, I may as well help here too I guess. But for today, I console myself by printing out that page of source code and reaching for the matches…

Nokia E71

At the moment, I use a Sony Ericcson k750i as my phone. It’s solid, has good reception and audio and battery life. It has an easy-to-use camera with a flash which is important for me because that’s how I record and store whiteboard sessions. It has bluetooth for file transfer (of the whiteboard photos) and hands-free headsets (it’s illegal in Ireland to drive while using a mobile phone, so the headset – and the voice recognition dialing – are quite useful). It has an FM radio and an MP3 player for when I’m on the train. I’ve got Opera Mini installed on it so I can even check my email and websites, though writing anything with T9 is something a sane person only takes on in extremis. It’s even red 😀 It’s been a very good phone for me and I have almost no complaints about it.


Sony Ericsson k750i
Sony Ericsson k750i

But it’s time for a change.

Read more

Gunk

Kinesis Advantage Keyboard
Kinesis Advantage Keyboard

Back when I was finishing my undergrad degree, my final year project (which is a big part of the final degree exams in Trinity) was in Java on a Sun SPARCstation 4 (at the time, one of the more powerful boxen you could get access to as an undergrad). The project was a fair bit of fun, writing a robot controller in Java just as 1.2 was coming out of beta. Lots of long hours were spent in that lab with three or four others working on their projects, and quite a few all-nighters interspersed with the odd game of networked bomberman 😀 I even managed to get a published paper out of it.

Bomberman
Bomberman!

The downside to all of this fun was the Type 5 keyboard.

Sun Type 5 Keyboard
Sun Type 5 Keyboard

Read more

Kada2.py output

Ray asked to see what the output of the kada2 script I’ve been working on looks like – only problem is that I’ve been using a real datafile for development, so it has people’s names in it. To avoid any shoutyness, one quick python script to read in the members.kda file and write it back out to test.kda with all the names changed to John Smith; then a quick run with this file as the members.kda file and some imagemagick conversions and viola, the current kada.py output. Read more

ReportLab

As I mentioned before, after writing a python script to read in Kada’s data files on the rifle club shooters’ scores and calculate new ladders, the next step is output that’s a bit fancier than the straight ASCII text dump:

Novice Air Ladder
- - - - - - - - - - - - - - - -

 1         Joe D'Plumber    45  91.833    94
 2         Joe D'Plumber    36  87.500    91
 3         Joe D'Plumber    18  87.167    92
 4         Joe D'Plumber    16  85.833    91
 5         Joe D'Plumber    26  85.167    92
 6         Joe D'Plumber    31  81.167    87
          Tito D'Builder     2  76.000    76  *
 7         Joe D'Plumber     7  74.000    82
          Tito D'Builder     2  69.000    75  *
          Tito D'Builder     2  67.000    68  *
          Tito D'Builder     2  66.000    70  *
          Tito D'Builder     1  64.000    64  *
 8         Joe D'Plumber    10  63.167    78
          Tito D'Builder     1  62.000    62  *
 9         Joe D'Plumber     4  61.750    76
          Tito D'Builder     2  61.500    72  *
          Tito D'Builder     1  60.000    60  *
          Tito D'Builder     2  55.500    71  *
          Tito D'Builder     2  55.000    58  *
10         Joe D'Plumber     3  53.667    62
          Tito D'Builder     1  52.000    52  *
          Tito D'Builder     1  50.000    50  *
          Tito D'Builder     1  49.000    49  *

This does the basic job that the original system did (actually, it does a bit more – the asterisks mark out those shooters who haven’t yet shot enough cards to get on the ladder, but they’re still listed as an incentive for them to shoot more cards – the current system doesn’t do this). It’s not really doing all that can be done, however, and it’s certainly not all that fancy-looking. Especially in a scripting language, where the whole point is to do fancy stuff quickly through toolkits. So, what I wanted was PDF output (because these are printed off and posted up in the club), graphics like logos and so on, but also some graphs and charts with some meaningful data.

One of the graphs I wanted to include was one of Edward Tufte’s many good ideas, sparklines. Small graphs which summarise the state of play of a variable in an easy to read, inline format (meaning that it’s in the flow of the text itself as if english had suddenly become a pictographic language for a moment. They seemed perfect to show a high-level view of how the shooters were doing over the course of the year. Also, it would be nice to display the various breakdowns and analysis of membership (by gender, experience, college year, etc) in a graphical form – there’s nothing wrong with the raw data, but it’s almost always easier and faster to take in analysis that has a graphical expression. So pie charts and such would be an improvement. Read more

Stochastic Geometry is Stephen Fry proof thanks to caching by WP Super Cache

%d bloggers like this: