Where is My Resume

January 31st, 2006

I’ve had a few emails from people asking why I don’t have my resume online anymore. Simply stated I’m not looking for anymore work right now. I’m trying to finish up school and make decisions about my long term future which doesn’t include working for any of the host of companies that recruiters call me about. In a year or so I’ll post it again but not until after I know exactly the direction that I want to go in. I appreciate people looking me up but I’m just not in the market right now.

Should I Stay or Should Go?

January 12th, 2006

So after almost 3 years of taking classes parttime I’m now on the final descent towards my Masters. I’ve got to finish up classes this semester and more importantly write my thesis this summer then if all the stars line up I’ll have my Masters. This was very important to me because I felt that it filled some gaps in my education.

So whats next? My current plan is to continue my education by pursuing a PhD. I’m struggling with this decision but have already made plans to attend fulltime next fall. I figured the worst that could happen is I get there and hate it, then drop out, unable to find a job, get kicked out of my house … wait why am I doing this again?

As you can tell its still an on going struggle in my head. It boils down to what is best for my future versus what is best for my short term goals. I’m not sure I’m making the right decision, but I do know this will be the only time in my life such an opportunity will be available so I damn well better do it while I can.

Going back to 1999

September 28th, 2005

So around 1999 I started working with Oracle and back in those days I was just doing Coldfusion development and using Oracle as a backend. I did this using the typical stack of software, Windows NT, IIS, oracle client, and Coldfusion. Well I soon moved on to the Java world and did a bunch of integration type applications that always talked back to our Oracle database. We actually had to purchase a commercial Oracle driver (not from Oracle) for Java to effectively talk to Oracle. This was a real pain-in-the-[explicit -word]. Since then I decided that databases should be opensource and most people using oracle were much better off with PostGres or even MySQL in some cases.

This week I was forced back into the world of Oracle. So here I am trying to get Python to talk to Oracle. Again just as a client, I was shocked at how painful it was to setup. I’ll admit this might be ignorance on my part, but I’m used to postgres or MySQL just fire up a library and your off in what ever modern language you can imagine.

First off I was told to install the Oracle Client. Seems easy right. Well, you have to hack around Oracle’s installer program if you are running on anything other than there blessed OS’s (Redhat ES and SUSE). God forbid your on Ubuntu or Fedora (see FC3 instructions).

So I decided to look for alternatives. Luckily Oracle knew they would piss people off and offered an Oracle Instant Client. This is just a package with the shared objects and some jar files for my fellow Java friends. It took some time just to find this solution since I wasn’t familiar with Oracle and would have never searched for ‘Instant Client’.

Finally, I was able to download a python module called cx_oracle from a company called Computronix. This package seems to be the best for talking to Oracle (if someone knows otherwise let me know). I was finally able to connect to oracle via Python (assuming those Oracle shared objects are in the LD_LIBRARY_PATH).

My next complaint… Oracle still requires the tnsnames.ora file. It seems odd that I can’t just say connect to this database on this host using this user and password. Maybe I’ve just been used to a simple life of connection strings but this just seems like old Oracle legacy in need of death.

Another complaint. So to download this ‘instant client’ you have to register with Oracle. So I go to the registration page and fill out a bunch of fields. Then I submit my form, pretty typical, except they had this long list of “Spam me with ????”, checkboxes of which I wanted no part of. So I didn’t select any. Then the next page tells me that I didn’t select a subscription and I needed to. I then click the “go back and fix it” link, thinking ok I subscribe to some spam just to get this package. It lost all my information, not only that but if I tried to go back using the browser they have initial javascript that clears out all my previously selected values. After filling the form out again I see why I got the first error message they have a check box titled ‘Please unsubscribe me’, but wait I wasn’t subscribed, ohh well I’ll check that one and it worked. Not only that but I got an email saying I had been un-subscribed from something I had never subscribed to in the first place…

Enough ranting for now! Hopefully this will be helpful to some other lost developers.

Custom Linux Builder (and Money),

June 17th, 2005

The Custom Linux Market is starting to heating up. Back in October of 2003 when Cobind had its first prototype of its DiY tools I knew this was going to be big. So maybe its not the easiest thing to sell. Your target market is a bunch of Linux hackers that would rather be buried in Emacs than use some application that abstracts all the bits-and-bytes of creating a distro. But I think it would be an ultimate application to be able to quickly and easily create new Linux distros and easily provide support for all of them. Cobind has failed to get the funding we needed to continue but luckily I’ve been able to continue this journey into a Custom Linux Building at Timesys.

The market is clearly there we have Progeny selling like mad and Specifix ramping up each of them targeting the Custom Linux Market. At TimeSys we have been focusing on the embedded market which I think is the right move, its a niche market that really needs customized Linux. The reason for this rant is to mainly say Timesys has more funding now and therefore I will get to see my vision of a source-to-distro Custom Linux Builder. How exciting!

Meta Filesystem (MetaFS)

May 8th, 2005

This is a prototype I wrote of a filesystem that uses metadata stored in files to create dynamic directories, plus gives the user the ability to add any arbitrary attributes to files in the system.

It looks like this:

bmills:> ls location/
Pennsylvania/    Mexico/   California/  Pittsburgh/   Gibsonia/
bmills:> ls location/Pennsylvania
Topic/    Date/   DSC0042.jpg   Screaming_monkeys.mp3
bmills:> ls location/Pennsylvania/Topic
Monkeys/   Computers/
bmills:> ls location/Pennsylvania/Topic/Monkeys
Screaming_monkeys.mp3

This prototype provides the user with a way to store arbitrary attributes about files in their system. The system will run in parallel with another filesystem and provides the indexing, searching, and attribute storage for the files. This is implemented as an ordinary filesystem that has a few additional functions available on each file: Add Attribute and Delete Attribute. These functions allow the user to set any arbitrary key/value pair to any document in the system.

The system then allows the user to browse the files by any attribute set. This enables the user to create dynamic groupings of the files in their document space. The query mechanism implemented is a set of dynamic directories created as attributes changed. For instance, if an attribute is created called location then there would be a directory in the root of the document space called location. This directory is called an attribute directory and will list all the values for the attribute location in the document space. Each possible value will also define a directory called a value directory. The value directories are then dynamically created as the user selects an attribute directory. The value directory will contain all the files that have the selected value for the selected attribute. As one drills down, the dynamic directories exist again so that they can further refine their search query simply by defining a path more fully.

The system itself is implemented in user space using FUSE. FUSE was chosen because it works cleanly with Linux kernel 2.6.10 and provided a Python interface. The Python interface was a big advantage because it allowed for a quick prototype of the system. As a result, the entire metadata filesystem is implemented in pure Python. The layer between FUSE and Python is implemented as a C-extension to Python. For a quick how-to on getting python and FUSE to play together look here.

This was motivated because I really wanted a filesystem to better organize my digital media files. The traditional filesystem doesn’t provide the user with enough organizational constructs to fully express the files contents. One solution to this problem involves encoding information about files that could then take on different organizations or meanings depending on the use of that data. This prototype was an experiment in exploring this notion. I’m currently using it on my desktop computer to organize both my digital images and music. If you want to read more details you can read the paper that I wrote for my operating systems class here.

Download the prototype here, read the README document to learn how to setup the system. The tar also includes FUSE and various other packages needed.