Older blog entries for dhd (starting at number 79)

"Bell Atlantic is now Verizon", and they finally managed to install my loop, and I have DSL. I haven't had this kind of connectivity at home for ... probably the better part of a year now. Of course I have to abuse it for a little while ;-)

Napster seems to be marginally useful, so unfortunately I'm not ready to Burn All MP3s yet (though I've been steadily amassing Ogg Vorbis files of my vinyl/CD collection). I found the (fairly common but out of print) GISM bootleg CD whose name escapes me (with the tracks from "Detestation" and "M.A.N." on it) as well as the recent INFEST bootleg and of course the usual assortment of hard-to-find satanic heavy metal. Sounds like the new Catharsis album is rather good too, guess I'll have to buy it (being lame, I missed not one, but two shows on their tour ... one in Ottawa before I moved, then one in Pittsburgh after. Doh!)

Lots more Perl and XS hacking (fun) and some C (not as fun) at work. I'd forgotten how time consuming and aggravating it is to write networking and text-munging code (i.e. for text based network protocols) in C. But Perl and asynchronous I/O don't play nicely, and though POE is pretty awesome, it adds a lot of latency to the system which the telephony junk proved unable to cope with.

That said, I am rather proud of the design of the telephony server I've written to get around this problem. To satisfy the petulant telephony device it uses an async-I/O core driven by realtime signals (of course, I had to hack the driver to do proper siginfo based notification ...) then layers a single-threaded server on top of that to talk to clients and queue and dequeue events and data. Single threaded servers are good, people! Don't believe the hype!

It's unfortunate that AsteriskPBX is so keen on using threads for everything (grr), because otherwise we'd just use it since it already has exactly the architecture and hardware support we need.

Looks like sourceforge were moving when I had issues with them. So maybe I should edit out the comments below.

Wow. So, I submit a support request to Sourceforge asking why I still can't log into their shell machine (or the IA-64 boxen I was supposedly given access to) after having my account for three months, and the support request disappears into thin air.

I really wish I could just ignore Sourceforge entirely (which I've done a reasonably good job of for most of its existence) but unfortunately the CVS tree for CMU Sphinx is there, and I theoretically have (limited) check-in priviledges.

Since Sourceforge is so incredibly broken I guess I'll just return to sending patches, which is probably a better way to do things anyway.

Woohoo, I finally clued into why my T21 crashes. Nothing to do with the sound driver, instead the problem is that the XFree86 driver for the S3 Savage is buggy, and I get the "fast text scrolling causes bus lockups" problem.

The sound driver still doesn't seem to do non-blocking reads correctly though, because recognition is astoundingly poor (even with an external mic). Either that or the gain is borked. Guess I'll debug this today...

Oh hey neat ... the ALSA library API document actually documents the PCM stuff now. Sorry :-)

12 Dec 2000 (updated 13 Dec 2000 at 14:41 UTC) »

Got a Thinkpad T21 for work. Very nice machine. I got 2.4.0-test12 working on it and discovered that it locks up randomly at least once a day. Unfortunately only 2.4 has a driver for the CS46xx sound chips that will do recording (I do not count vendor-hacked 2.2 kernels, grrrrrrrr).

I backported the cs46xx driver to 2.2.18 ... more lockups. However it has locked up when I'm not even playing sound at all so I don't really know if it's the sound driver or not.

We may give up on using the Quicknet Linejack card. It's just too broken. The Lucent Winmodems are at least modern devices that know how to do DMA and such, and the driver apparently actually does full-duplex and provides a friendlier more sound-card like interface (so we don't have to do Rx/Tx ring buffers and asynchronous I/O in userspace to make them work...)

I've split out some of the less useful parts of Sphinx-II into separate libraries and fixed the broken autoconf setup. Today I've been trying to make the ALSA audio input module compile again.

I really am wishing I could spent more time writing code that works and less time dealing with other people's code that doesn't work.

Lots of hacking on Sphinx-II. The codebase is now almost totally converted to ANSI C, and a lot of the interfaces are now exposed to people who want to, say, write Perl modules for them ... which I have also done. The Perl module is not anywhere near ready for release and there are some copyright and namespace issues to be resolved before anything can go out, but it shouldn't be too long now.

Also, Sphinx is talking, er, listening to the telephone. I get much better recognition from the phone handset (at 8kHz) than from the microphone (at 16kHz) though I guess that shouldn't surprise me since there's a lot less background noise on the handset.

POE is great. use POE.

27 Nov 2000 (updated 6 Dec 2000 at 15:08 UTC) »

Okay, well, I ended up rewriting most of that Perl module and redubbing it Telephony::Phonedev (which I think is logical since it is a telephony module for the Linux /dev/phone API). It seems to work pretty decently now and actually has documentation. I think I'll see about getting a "Telephony::" namespace created on CPAN.

I wasted most of today chasing a really dumb bug (due to a programming error the released version of the driver makes your program loop endlessly in select(2) after receiving a DTMF tone from the PSTN port) which it turns out was fixed in CVS. So it seems the release version (0.4.1) that you find on the OpenH323 site is totally broken for PSTN applications...

I guess the moral of this story is either "always check the snapshots before you try to fix a bug yourself" or maybe "if it says it's alpha-quality, don't even bother with the released versions".

Hi, elise :-)

Having overcome my initial annoyance I guess I'll stop saying nasty things about the Quicknet drivers and start writing documentation. Actually I've mostly been cleaning up and documenting the random Perl module I found on linuxtelephony.org that interfaces to /dev/phone, (note: that link is to the upstream version, not my modified version) since most of the stuff we'll be doing will be written in Perl (a lot of the Festvox stuff is already).

It looks like, after all this time on #perl being told that I should use POE, I'll actually finally get around to using POE. It seems that an event-driven state machine is the obvious way to organize a telephony application.

22 Nov 2000 (updated 22 Nov 2000 at 20:54 UTC) »

Finally actually moved in (took a long time for the previous tenant to leave and to get phone, hydro, gas, etc set up).

I have two sinks and a gas stove. Pity I don't seem to remember how to cook, not having done it in at least a month now.

Playing with telephony stuff now. The Linux drivers for the Quicknet cards, at least, are seriously nasty and undocumented. All their sample code seems to use asynchronous I/O for no apparent reason, and after playing with it a bit I had thought that maybe this was simply because their interface to select/poll was broken.

Thankfully it turns out that the real problem is just that certain things just fail mysteriously if you don't do the various ioctls at the right times and in the right order - among other things you have to set the codec every time you start playback (and not when you set up the device)

I think it's pretty clear that just providing an "SDK" with sample code and a README file does not constitute documentation. If there had been any reference material at all (there aren't even comments in the sample code telling you what it does), I wouldn't have had to resort to the sort of cargo-culting that I wasted the entire day on...

Oh well it is free software after all.

Moving hassle is done. Wow that was expensive (at least, in Canadian dollars. I don't even have that much stuff.

If I had cared enough, I probably would have been able to vote in both the US elections (today) and the Canadian elections (on the 27th). Though I'm not exactly sure how or where you vote if you're a citizen who isn't a resident. Particularly since you have to vote in a specific riding (in .ca) and a specific state (in .com^H^H^H^H.us)

Ah well, both countries have pretty lame excuses for a democratic system at the federal level, so I can be reasonably sure that my vote wouldn't have counted anyway. 5% of the vote for the Green candidate should mean more than federal matching funds.

70 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!