Older blog entries for volsung (starting at number 11)

ian: Conclusion -> People hate computing. :)

nymia: IIRC, threads are processes in Linux. The kernel treats them almost the same. The threads just share more parts of the process structure. I wish I could find a reference for this.

In other news, I'm still waiting for Kenneth to integrate libao into the vorbis CVS. Maybe I have to pester him a little.

While I wait for word on that, I've been spending my time hacking on some old code of mine. I wrote some code to interface to those netshooter remote controls that plug into the serial port. I stopped after the basic decoding was working. Now I need to figure out how to parse a config file describing the actions that should be performed when I press a particular button on the remote.

mrorganic: My theory is that Linux has become "trendy" enough to attract a different type of user/programmer than in the past, one which tends to be less productive and more vocal. Reading Freshmeat (as someone pointed out here) is a good way to see gauge the culture. You find lots of inexperienced (myself included) programmers with minimal abilities, often driven more by ego than technical issues. The joke about the project that has no design and no code (but certainly a project lead) which is looking for programmers demonstrates the "leader looking for a following" mentality.

Fortunately for the BSDs, Linux has become the lightning rod absorbing all of these people due to its exposure and growing ease of installation. The result is the BSD talent pool has not been diluted to the same extent the Linux talent pool. I still believe that there is as much good Linux code as BSD code, but good luck finding it through the daily announcements of KickASS-AIM-0.0.0.3: yet another messenger clone that just started from the [LM]AIM code base and added different colors. (Okay, I made that up, but you get the idea.)

Be wary, however. If BSD becomes the trendy OS of the week, you'll get to watch the last 3 years of Linux history happen all over again. I wish it weren't so, but someone's development community is going to overrun once the lemmings (and the media) get tired of Linux. The next OS to get hit will either be BeOS or BSD, it's too soon to tell which.

Sent off my libao patch to Kenneth. Now we just have to see if he'll incorporate it into ogg123.

Not much else going on today. I'll probably do some history reading. The Vietnam War is really quite interesting. If computers and physics weren't so much fun, I think studying foreign policy would be neat. Well, maybe if it had math.

Yes, mathematical foreign policy would be cool. :)

Dang, Win32 is *ugly*. I dug up the MSDN Library CD here at work and started reading the section explaining sound output. Boy, I don't like it. The waveOutWrite() call is always non-blocking *and* I can't free the buffer until the write is done. That means I can't return from the ao_play () call in my library unless the block is done playing or I've copied it to a new buffer.

In either case, I'm going to have to figure out some goofy way to sleep until the block is done playing. A poll loop is icky because I would have to hot spin and blow CPU time. I can do a callback, but I don't have a clue right now how I should go about sleeping until the callback wakes me up. I want to use something like signals I think. I sure as heck am not going to dive into Win32 threads and lose my mind. Bleah.

Wow, Slashdot sure is whacked out these days. I went back to try and read the comments, and I can't deal with it anymore. The demographic has changed so that I'm not that interested in the discussions that go on. Too bad. I kind of liked that place.

Good thing I found Advogato, or I might have actually become productive. :)

Took someone's (darn, already scrolled off the end of the recent diary entries) advice and changed the libao API for the third time. The change was trivial, and the result is much cleaner. Thanks.

Finally figured out the ALSA problem. By default the driver operates in non-blocking mode. The program would decode the next block before the first one had finished playing and would overwrite the currently playing block with the next block. Hence the neat (though frustrating effect) of listening to Brickhouse at 33% faster speed. I fixed that and wrote some buffering code to pack the data coming in (which can be in chunks of whatever size) into 32k blocks and send the completed blocks to the ALSA driver. Sounds good.

I've decided to wait on submitting this code until Kenneth gets back. Monty mentioned a little while ago that he would no longer mess with that branch (after accidentally stepping on Kenneth during a commit frenzy). In the meantime, I'm going to see if I can scrounge up an IRIX account on some friend's box to test (at least the compilation of) libao on IRIX. Same goes for Solaris, though I don't know if our school's Solaris boxes have the sound header files. If neither of these seem feasible, I'll go figure out how to do Win32 code instead. :)

Also hacked on a patch I found to let ht://Dig work with SSL. The patch was for 3.1.4, but would not cleanly apply to 3.1.5. I've never hacked a diff directly, though I must say it is not as hard as it looks.

ralsina: Ack. Slashdot has cured me of my desire to participate (or watch) the license flamewars. I must say that the GPL == non-free debate is one of the stranger ones I've heard of. I guess my take is that every license except the public domain is "non-free" to a certain extent, just like anarchy is the only truly "free" form of government. Of course, being "free" isn't one's only motivation in such things, so the issue is how much freedom should be traded in for other things we want. That's the real debate in my mind, and the rest is just playing games with semantics.

jmg: Careful with the CD-RW. I've had problems reading them in most CD drives (unless they are also CD Burners). I imagine newer drives have no problems, but you may be stuck in front of an older box.

Got ALSA working on the spare computer. It looks really quite powerful. Perhaps one day we'll start seeing audio workstations running on this architecture. (Come on Cakewalk, you know you want to do a Linux port. You know you do!)

Finished my API rewrite for libao and tried to write the ALSA driver. Whoa boy, too much control. I have no idea which values are critical to set. I can finally get about 5 seconds of playback before the program goes silent. It keeps running, but I can't hear anything. Hmm..

Back in real life, I decided not to go to my Theoretical Computer Science class. I think my time was better spent reading the chapter for 20 min than sitting in class for 90 min. Why are these classes so boring?

Update:Argh! ALSA is making me very mad. I can't figure out how to get this thing to do anything but play "Brickhouse" (my test OGG file) at high speed. It seems to be chucking 25% of my buffer everytime I write. Ack. Tired.

I was thinking in the shower this morning and realized that my public interfaces to libao are fairly annoying. Why make the application keep track of the driver function table *and* the device state. If real life is any indication, groups of items tend to get separated and lost. I should just make generic wrapper functions that take device id's (think file id's) returned by the ao_open function, lookup the associated function table, and call the right function.

Does this sound familiar? I should have looked at the standard UNIX open() and write() functions. Doh! Reminder to self: Never forget precedent. If UNIX programmers like it, it can't be that bad. :) (I'm sure someone in the audience will have issues with that one.)

Anyway, I've started installing ALSA onto a spare Linux box I have at work. Once I get the hang of it (and get it to work with my AWE32 card), I'll write an ALSA driver for libao. Still waiting for someone (Monty) to tell me how I should get this package into the vorbis tree. Maybe my last email was unclear. (Or maybe Monty is clairvoyant and knows that I needed to fix my code.)

libao is ready to integrate into vorbis now. I still need to hear back from Monty about how to get all my changes into the tree. Next up I need to add support for ESD and ALSA.

More work on libao/ogg123 integration. Today I figured out how to do autoconf and got my compilation magic to work. Now I can output to the soundcard and 6 wav files simultaneously. (Though either the IDE or the P-166MHz CPU is causing some serious skipping when the OS finally decides to flush the disk cache. ) Now to go through and do cleanup and submit to Monty.

This is actually rather exciting. I've never submitted anything to an Open Source project before. (Well, aside from a lame patch to vorbis that Kenneth was going to submit already.) Most nifty.

Spent most of the afternoon monkeying with an 8 year old color laser copier my father got for free. Works pretty well, and now I know more about fixing and operating these things than I think I wanted. Unfortunately, they lost the Postscript unit that let you use the copier as a printer. I drool at the thought of owning a printer that does color and postscript natively. (No more damn PCL, please!)

Oh yeah! Nothing like a working program to make you feel good in the morning! I've got libao pretty much working now. Multiple device support is working too. (Let this be a lesson to you: Beware of pointers to pointers. Dereferencing them improperly leads to madness.) I just ran ogg123 and let the output go to the null device, the soundcard, and a wav file all at once. Whee!

Now I've got to clean up the code and make the build process more slick. I should also write an ogg123 man page. I wonder how you do that.

2 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!