All I Want for Christmas

Christmas is a stressful time for me. Mainly because it involves transporting myself back home, and doing last minute Christmas shopping. For the last two years that's involved taking a last minute flight over the Atlantic. I haven't had very much time to get a haircut, let alone go Christmas shopping. I wish I could say that I've been thinking about giving gifts all year, and figured-out exactly the right gift to give to each of my relatives. The truth is, I haven't.

Mainly during the times when I've been a student, I haven't found the excitement over giving or receiving gifts at Christmas. Maybe that's because I've been historically fairly broke for the holidays, or maybe it's because I've gone through the entire year without any major hankerings because I've been too busy! Who knows. I usually get more excited when I give gifts.

While I've been a student, I find it great just having an excuse and having the ability to get together with family in mass quantities for the holidays ;-)

With a new baby on the way in May, I'm sure that many of my relatives will be giving me lots of 'stuff' for Christmas. I assure you, I will very likely have no place to put anything, and I definitely will not be bringing anything with me back to Germany. Maybe hold off on the 'stuff' buying until March or so. As it stands, I have 3 good suitcases full of 'stuff' that I will need to somehow transport back to Canada before March. I would also have no place to put it in Canada and my storage space there is already aux gratis and running out.

This year, the only gifts I would imagine receiving are small chunks of money that I would hope to put toward an education fund for our new arrival in May.

And maybe a video collection of works by Bob Ross :) I've always thought his show was super relaxing to watch.

And now, back to the joy of programming :)


IEEE.tv Article Interviews John Stevens

John Stevens, CEO of Visible Assets, was recently featured in an interview at the RFID conference in Dallas. Actually, the conference took place 26-28 March, 2007. I only just noticed the interview because I started subscribing to IEEE.tv through Mozilla Thunderbird's RSS news reader. I also happen to work for Visible Assets, and so I thought I'd take this opportunity for some shameless corporate promotion :)

In the interview, John explains some of the details about RuBee(tm), the pending IEEE protocol (IEEE P1902.1), and how Visible Assets applies the relatively young technology of long-wavelength radio tags. At Visible Assets, we basically sell a service that builds upon RuBee(tm). Through the grouping of distributed, collaborative, and localized networkable transceivers, RuBee(tm) securely enables the authorized end user to asynchronously monitor their assets from anywhere in the world. All communication between the transceivers and the end user are event-based, which cuts down on bandwidth over long distances, enabling local monitoring in real-time and remote monitoring with extremely low latency.

RuBee(tm) is protocol that can overlay the common IEEE 802 standard. What that means in human terms, is that every tag can be assigned an IP address, just like the computer on which you read this article. When IPV6 takes over, boasting an addressable space of 2128 (about 3.4×1038), that means that every single tag will have a globally visible, unique address on the internet. Pretty astonishing, isn't it.

If I slapped a tag on my favorite toothbrush, flew to Japan, and visited an internet cafe, I have the potential to be disappointed that I forgot my favorite toothbrush on the other side of the planet. But hey, at least I would know that it was safe and sound back home ;-) That's really a crude example. Our primary clients are those who need high data reliability when monitoring their assets, such as those in the medical, pharmaceutical, agricultural, and defense sectors.

RuBee(tm) is the main feature of our infrastructure. Therefore, I should take the opportunity to share some information about the unique technology that we, at Visibile Assets, bring to the RFID spectrum.

Our tags do not belong in the same category as RFID, although they could conceptually be used in many of the same situations where RFID is used today. It should be noted that our tags operate at the lowest end of the RF spectrum (below 450 kHz), and should therefore be considered a complement to RFID. This difference in carrier frequency results in some fundamental contrasts between our tags and conventional RFID. Namely,
  1. RFID has very short range with low penetration, while our tags have very high penetration and a considerably longer range,
  2. RFID electro-magnetic (wireless) signals are largely composed of electric (E) fields, while our tags contain 99% magnetic (B) fields
  3. RFID signals have a high bit-error-rate (BER), while our tags have a low BER
  4. RFID tags are generally passive devices, whereas our tags can be passive, or optionally active devices for wireless data-acquisition applications (temperature, pressure, etc)
My job at Visible Assets, Inc. is to design and implement low-level software and high-level hardware. In some sense, I transform our transceivers from simple radios into intelligent nodes within the aforementioned distributed, collaborative system. We call the end product a Sidewinder and of course, one could say that it is indeed an internet appliance (INAP) in the trademark-free sense of the word.

Currently I'm doing a master's degree in Digital Communications during the day, but then at night I assume the role of my secret identity as embedded systems engineer for Visible Assets. Right now I'm implementing a fairly sophisticated software stack in probably the best C code I've ever written in my life!! Needless to say, it keeps me reading up on all of the distributed / intelligent systems literature that I can get my hands on.

In the interview, John really spells out a highly technical subject in such a way that the average layman can understand, which isn't a very common ability among engineers. Don't let that fool you though. There are only a few people who understand our technology through and through, and John is one of them.

That's only one of the reasons I really like working under him. John has a great relationship with all of his employees. Last year we had our staff Christmas party at his home, which is more of a personal touch than I've seen at any other company. He gave this great speech which was followed by a cheerful toast, and it really motivated me - I'm working on some pretty cool stuff!

John gets so excited when he finds out about new progress that we've made. The only analogy I can give is to compare him to a child with a new train set. He's always excited to figure out how things work and he loves talking about all of the development details, like what challenges we faced, where we made compromises, and new and interesting ways we've used to overcome obstacles.

Nice interview John! I'm looking forward to showing you what's been keeping me so busy lately.

Other articles about what we do at Visible Asests:

Converge! Network Digest [20060609]:
IEEE Begins Work on Wireless, Long-Wavelength Standard
Sensors Specialty Markets [20060612]:
New Wireless Standard for Healthcare and Livestock Visibility Networks
RF GlobalNet [20060612]:
IEEE Begins Wireless, Long-Wavelength Standard for Low-Cost Radio Tags
RF Design [20060614]:
New IEEE standard to bring local network protocol to thousands of radio tags with long battery lives

RFID Journal [20060619]:
Visible Assets Promotes RuBee(tm) Tags for Tough to Track Goods
IDTechEx [20070208]:
IEEE RuBee(tm) Network Standard Meeting
Epson [20070507]:
Visible Assets, RuBee(tm) Technology Leader, Announces Investment from Epson Electronics America


P2P Distributed Filesystem for Portage Binary Packages

After my latest post about the exponential size of a potential Gentoo / Portage database of binaries (indexed by use flags, build dependencies, etc) I just came up with a fairly interesting idea.

Who else (who we all know and love) has as much (and likely far more) data to index? Obviously, Google ;-) Googles method of indexing data is using their distributed filesystem.

So why couldn't binaries based on Portage ebuilds be indexed in such a fashion. Well, since the volume of data, indexed by use flags, build dependencies, etc, would be so massive, it's unlikely that any single, community-driven server could host such data alone.

If the community was involved, though, it wouldn't be too far fetched to make the binary-distribution distributed filesystem available on Peer-to-Peer networks. The same hashing technique could be used for each of the various packages that's being built. Furthermore, as has been pointed out by others already, the environmental impact that Portage has is probably intriguing, considering that every package installed by the average user is compiled from source.

And let's be honest with each other - the bottom line in using software is using it, and not building it.

++ for P2P networking AND Gentoo :)

Update [ 2007-11-30 ]: I also mentioned this once on Daniel Robbins' blog - Funtoo


Error in glibc's select() function

While doing some programming for work, I discovered that the select() function provided by glibc does not accurately describe when data is ready to read from a socket.

The purpose of select() is to block on a file descriptor until data becomes ready, unless a specified relative timeout expires or an error occurs.

When data is ready, select will return a positive number corresponding to one of the sockets contained in one of the file-descriptor sets that were passed as parameters. If a timeout occurs, zero is returned. If an error occured, -1 is returned and errno is set appropriately.

I found that if select was called, a timeout occurred, then data became ready to read on the socket, if select was called one more time (after data has obviously arrived), then select fails to notice. That implies that glibc select() only checks for socket readiness whenever the kernel signals that the socket is ready, and not when it is initially called.

From the select(2) man page, there exists no such condition stating that the data must become available after select has been called and not before.

That's a major bug if I've ever heard of one. Hmm... it's too bad my project can't wait until the next release of glibc, when someone might have corrected this.

Firefox Keyboard Shortcut for CloseOtherTabs

Do you ever find yourself surfing the net with several tabs open and suddenly experiencing an overwhelming urge to un-clutter your browser?

I certainly do. The most frustrating part about it all is that one is forced to select some tab, right-click, and then select 'Close Other Tabs'.

The Default keyboard shortcuts in the en-US version of Firefox are somewhat backward in my opinion. Practically every window manager has its own 'Close Window' shortcut key. In Windows it's Alt+F4, like it is in Gnome.

So why does Firefox need to duplicate a function that the window manager most certainly has? Firefox has its own built-in 'Close Window' shortcut which is 'Ctrl+Shift+w'. This key combination would be much better suited for 'Close Other Tabs'.

I hope that they at least make a Preferences section in Firefox 3.0 so that people can customize the shortcut keys.


Upgrading to Gnome 2.20 with Gentoo

Hi Everyone,

I thought I would post my experiences upgrading to Gnome-2.20 on my Gentoo box. In general, the upgrade was painless, but there were a few pitfalls that can be easily avoided.

This post was originally written on November 3rd, 2007, and most of the Gnome-2.20 packages were marked ~x86.

  1. Add these entries to /etc/portage/package.keywords.
    [ Updated: 2007-11-14 ]
    [ Updated: 2007-11-16 ]
  2. Due to bug #196621, you will need to edit your yelp use flags in /etc/portage/package.use
    gnome-extra/yelp -debug
  3. emerge -avD '>=gnome-2.20'

[ Update: 2007-11-16 ]
Note: After performing the initial upgrade, then performing an emerge --sync at a later date, some of the package versions may have disappeared. Since all packages in the above file use absolute package versions, another attempt to do an emerge -D --with-bdeps y '>=gnome-base/gnome-2.20' could result in slot-version collisions within emerge (see bug #199359).

Lastly, I'm not sure if this will be the case for everyone, but I had to re-emerge gok, notification-daemon, gnome-applets, and gnome-python-desktop because gnome-applets was emerged in improper order, pulling in a previous gnome library. You can verify this by running revdep-rebuild -pv before re-emerging these packages.

emerge -av1 gok notification-daemon gnome-applets gnome-python-desktop

Currently, I'm not using the binary ATI drivers (ati-drivers-8.42.3), but I'll test it out and see if there are any conflicts.

Unfortunately, I would also like to upgrade to >=xorg-x11-7.3 / >=xorg-server-1.4, but ATI's current drivers for x86 will not work with >=xorg-server-1.4. Since I'm only using the open source radeon driver at the moment, I'll give that a shot before I test out ati-drivers-8.42.3.

Happy Gnome-ing :)