C lesson

Given:

struct mystruct myinstance;

Which is better?

sizeof(struct mystruct)
sizeof(myinstance)

Normally this doesn’t matter all that much. However, I believe the first is the better way. The reason for this is that if you use the instance variable in the sizeof you can later introduce a nasty bug should you decide that the instance should no longer exist on the stack. That is changing the first line to:

struct mystruct *myinstance;

The second form of sizeof() given above will now return the size of the pointer not the size of the structure. Boom. Nasty bug.

Subversion

My Linux QoS work has come to the point where I really need a revision control system. I normally use CVS but decided it was time to setup a Subversion repository. So far subversion is everything I expected, it’s just like CVS. When it comes to reorganizing the repository I’ll find out just how much better Subversion actually is.

The big bummer is that the current stable release of Emacs does not include Subversion support in VC-Mode. I love VC-Mode. I am not sure I can go back to coding without it. VC-Mode is so easy it encourages frequent commits. Having to run the svn command from the shell encourages the opposite.

Lightening and DSL

Reading Bob’s blog entry about lightening over here made me think about lightening and DSL modems. Bob’s quite right about computers most often getting lightening damage through the phone lines not the power lines. The fact that most DSL services use external modems actually provides a extra layer of protection for your computer. For lightening to travel the phone line and damage any of my computers it would have to go through the modem and my Ethernet switch. I’m not an electrical engineer but I suspect this isn’t very likely. Of course it’s still a good idea to unplug your DSL modem during a storm.

Fedora Core 2

I have had Fedora Core 2 installed on my three computers for a couple of weeks now. Traditionally I have used a stock install for my gateway and laptop but have customized the desktop components of my main work station. Typically this meant building the latest GNOME from source via Garnome. Fedora Core 2 is the first Linux installation I have had in a long while that I don’t have the urge to customize. Sure, I have installed some new stuff that is not part of the distribution but the core desktop components are stock. Kudos to Fedora for putting together such a good distribution. Someday I’ll take the time to get familiar with Debian but at the moment I don’t have much incentive to.

Non-open software

I finally broke down and installed some non-open software on my desktop. This is something I try hard not to do. I don’t even have the Macromedia Flash plugin installed. I installed Real player so I could listen to CBC for the election coverage. Hopefully someday CBC will use Icecast so I don’t need this installed anymore.

2^x or 10^x?

When working on my Linux QoS project I ran into the confusion over what k,M,G mean in computing again.

Here is the problem. In normal usage k = 1000. Obvious example, kilometer == 1000 meters. However in computing the factor most used is 1024. This means a kilobyte in your computer RAM is 1024 bytes == 2^10 bytes. A megabyte in RAM is 1024 * 1024 == 1048576 bytes == 2^20 bytes. The nice network and hard drive people have decided to use powers of 10 instead of powers of two. This means your 100Mbit network is 100,000,000 bits/sec not 100 * 1024 * 1024 == 104857600 bits/sec. Hard drives are also a fun example of this. A hard drive sold with a capacity of 40 GB can store 40,000,000,000 bits but your computer calculates file sizes with powers of two so this is really 40,000,000,000 / 1024 / 1024 / 1024 == 37.25 GB to your computer.

The networking example is where the problem with Linux QoS came up. The Linux traffic control utilities use a multiplier of 1024 for kbit. My upload data rate is 640kbit. When I specified 640kbit/sec via the Linux QoS utilities I was actually specifying 640 * 1024 == 655360 bits/sec not the actual line rate which is 640,000 bits/sec. Even more fun is calculating download rates from network interface speeds. The network is rated with 10^x but the KB number you see on the screen is 2^x.

Wikipedia has a great article on this whole mess. This article explains the new prefixes that have been introduced to remove this abiguity. So from now on my computer has 512Mib of RAM, the hard drive has 40Gb of capacity and the network interface is 100Mbit/sec.

WinXP SP2 Firewall

Nice little summary of WinXP SP2 over at OSNews. It seems MS has a new firewall in this release. What interests me is this screen shot. A simple UI for allowing incoming traffic to listening processes is a great idea. However, I doubt a pop-up window is the best way to handle this. I would guess a lot of users will just hit the OK to make the pop-up window go away. A application that had a list of listening programs and allowed the user to select which ones could receive non-local packets would probably be better. A couple of years ago I started working on something like this for Linux. Unfortunately, like a lot of the play projects I start it didn’t get finished. At least I seem to have had a good idea.

Content syndication

Ever have one of those moments where you think “Why didn’t I do this before?”. During my recent forray into the Weblog world I started to realize how useful the ability to syndicate content via RSS or Atom is.

A great example of this is the ‘planet’ phenomenon started by Jeff Waugh in the Free software community. The various planet sites aggregate the Blogs of Free Software contributors into one site where you can keep track of all of them. Here is a couple of examples:

Sites like these are an amazingly good way to keep up on the Free software projects you are interested in.

Now back to the “Why didn’t I do this before?” question. I scan a lot of news sites everyday. This takes considerable time. Worse, since there is no notification of new entries I continually poll the same sites many times throughout the day. This time killer may now be a thing of the past due to RSS readers. There are RSS readers for all platforms but since I only use Linux and GNOME apps there are two that I have been playing with.

Both seem to be quite good. I like Blam’s UI a little more but Straw seems to be more mature and handles the various RSS feeds better. It also supports the Atom syndication format mentioned above. Blam is written in C# and thus requires Mono. Straw is written in Python which most linux distributions have installed by default. Both use the GTK+ bindings for their respective language so they integrate well with the rest of my GNOME desktop.

Downsides to using a RSS reader instead of visiting the site?

  • Not all sites have full RSS feeds. Slashdot and OSNews for example only give the first sentence or so of the news item. Fortunately, I was able to find a full RSS feed for Slashdot at Alterslash. From my limited experience it seems that the commercial sites are the ones that do not provide full RSS feeds. I guess this makes sense. They are not selling ad space when someone only views their content via RSS.
  • The presentation of the content is not the same. For the most part this doesn’t matter since the content is more important anyway. Especially in the case of Blog content.
  • Neat extras like the Slashdot poll are missed.

Is the time savings worth the trade offs? It’s experiment time.

BloGTK

It is very neat to be able to post to my Weblog without using a web browser. Check out BloGTK. The spell checking is a big bonus too. XML-RPC APIs like this may indeed be the future.