Fedora Core 2 on VMWare

Downloaded and burned Fedora Core 2 (tettnang) via the torrent server at Duke University. FC2 will install from the first ISO image or using the CD-ROM if legacy emulation is turned on in VMWare 4.5.1. If the host system is running at a color depth of 24, FC2 will most likely fail to start X. The current solution is to manually edit the xorg.conf config file and change the color depth to 24. Restart the computer, and you’ll be prompted with a license agreement. You’ll now be able to continue the install, which should go smoothly. All done.

But all this was ultimately for nothing. It turns out that the DCSP machine does not meet the minimum system requirements needed to install FC2. As such, we’ll probably install either Debian or Red Hat 9 on it tomorrow. I did manage to successfully compile the DCSP code on my Debian box, and added IOtech DaqBoard 2000 drivers to CVS.

Kernel 2.6.6

I get distracted very easily and I need a hobby. Upgraded the Linux kernel to version 2.6.6. I was able to get the Java Azureus BitTorrent Client working for the first time. It’s quite a step up from the Python text-mode client that I’ve been using for so long. I also wrote up some notes on advanced Linux programming; the goal is to finish the text by the end of this week, and then move on to some cryptography research. I covered Chapter 1 and Appendix B. Finally, I graded Lab 1 for Languages and Translation.

Loan Consolidation

Winding down. The network is incredibly flaky today for unknown reasons. On top of that, Debian magically broke as a result of a grave Samba bug. And if that wasn’t enough, lvm continues to exhibit strange behavior on system reboots, forcing an fsck. As a result, I didn’t accomplish a whole lot today.

I did, however, manage to electronically consolidated my loans through Citibank. The progress should take six to eight weeks to complete. I also configured access to the CVS repository on helsinki for cs2130 on chronos.

Branchless Absolute Value

I investigated the use of a branchless absolute value function. This techniques alleviates register pressure at the expense of increasing branch mispredictions. The first implementation is for a 386 architecture, where eax holds the value to operate on:

cdq
xor eax,edx
sub eax,edx

It requires some creative thinking to understand exactly why this technique works. The cdq instruction is a sign extension instruction that extends register eax into edx:eax. The xor immediately following can be thought of as a selective invert; that is, the number is ones-complemented, but only if it is negative. The final sub instruction, somewhat paradoxically, adds one to the result if the number is negative, thereby performing a twos-complement. With some effort, one can see that the number remains unchanged if it is originally positive.

For clarity, cdq can be replaced with:

mov edx, eax
sar edx, 31

Both these implementations, of course, clobber register edx. In architectures where register pressure is high, such as the x86, this behavior may be undesirable.

As a result, the WATCOM and x86 gcc compilers use the classical implementation of (x < 0) ? -x : x. Indeed, this is demonstrated in the following x86 generated code:

mov eax, +4[esp]
test eax, eax
jge L1
neg eax
L1: ret

The branch misprediction penalty is acceptable. Similarly, the use of registers in a RISC architecture is relatively inexpensive; the first implementation is therefore preferred. The gist is this: don’t try to outwit the compiler. It’s smarter than you are.

DCSP

Our group made a fair amount of progress on our senior design DCSP project. After some dyslexia on my part, the network settings were correctly configured and the Fedora machine is now on the network, albeit firewalled outside of campus. I also obtained keys to the control laboratory, and turned in some necessary paperwork to obtain card access to the two other senior design labs.

Recitation covered binary number systems and its representations, bitwise and logical operators, the C preprocessor, and standard UNIX streams. I also briefly discussed optimization with respect to various bitshifting tricks and the problems associated with prematurely optimizing code. Students should be familiar with input and output using fgets and fprintf, and basic interation for the upcoming lab next week. After the TA meeting, I formulated several potential exam questions, which I’ll forward on to Bill on Monday.

Atlanta Blog Meetup

Farhana and I had a nice lunch at the Emory Doc Chey’s Noodle House in the afternoon, and had a good time. But the highlight of the day was definitely attending the blog meetup in the evening at Dupree’s pub and bar on Monroe. Most of my friends know that I’m not a very outgoing person, so I was a bit apprehensive about my first meetup, especially with a group of effectively random people with nothing more than a common interest in blogging. It turns out that I had nothing to worry about.

The group was very friendly and energetic, and there was never a dull moment in the conversation. Our common love for blogging provided a solid foundation that ultimately led to a variety of fascinating discussions and topics, including spam filtering, industry outsourcing, arcade emulation, the days of the BBS, foreign languages, and of course, news for nerds. The breadth and interests of bloggers present in the Atlanta meeting was simply astounding:

  • Tom Carr was interested in learning about the whole blog phenomena. He’s an active member on the The WELL, a non-anonymous online gathering place. I remember The WELL in its older form as a BBS in my youth, but had no idea that it’s still around. Though The WELL continues to have an active community, I think I’ll stick with USENET.
  • Brad Fallon runs the Search Engine Radio Talk Show and gave useful search engine optimization tips and tricks during the meetup, many of which I plan to implement.
  • Mark Lusher runs MDL Consulting, a small business that specializes in computer and network support. He dabbles with a little bit of everything.
  • Michael Earls and I got along quite well because of our common interests in programming. He’s a big fan of Microsoft .NET and other Microsoft technologies, such as WinFS, metadata, and Microsoft Exchange. Being a Linux guru myself, it’s a great to be able to have an intelligent discussion with those on the other side of the fence. He’s a cool guy and I hope that we keep in touch.
  • Laurie Thompson-Earls is a first grade elementary school teacher. Her blog is particularly interesting because it’s not about technology, politics, or teenage melodrama. A refreshing change for the blog community.
  • Kelly is a retired college professor who maintains a political blog. He’s the kind of guy who is quite intelligent and easy to get along with.

Michael has an excellent summary of the May 2004 Blog Meetup along with his perspective on the cast of characters. Check it out. I’m greatly looking forward to the next meetup.

Senior Design Project

Stopped by the Office of Human Resources before class to turn in my hiring paperwork for the summer semester. We officially began work on our senior design project; I’ve set up a wiki page (ece4006) for it containing the project details. In short, the goal is to write graphical control software that utilizes Linux and GTK to interface with an IOtech DAQBoard/2000. The Comedi project develops open-source drivers, tools, and libraries for data acquisition which may come in handy. In particular, comedilib provides a user-space library to interface with Comedi devices.