What follows is a non-formal listing of my professional interests. This page is under heavy construction as I try to figure out for myself what what my interests are and how to best represent it on the page.
My interest here is really in two fields. The first is with object-oriented and object-relational databases and specifically with the impedance mismatch between todays programming languages and control of the back end database. The traditional method of embedding your database control language is essentially just writing glue code between the data retrieved and the structure you want to stuff it into. This also makes applications subject to execution errors which should have been caught at compile. Zope is probably the best example of a true object oriented database which has the cleanest interface to its controlling language of Python. But even this is not an ideal marriage between the two.
My second area of interest is in the construction of data models and their efficient use for processing large amounts of data for fast retrieval. There are many cases where a relational database (be it an object oriented one or not) is not the most ideal storage container for a specific use. Even with multiple indices's, a relational database may still not be able to store the data as efficiently as a true linked data model. A relational database can often be used as a back end storage for a data model, but it is not necessarily the only or best choice. My experience in this area has mostly been in dealing with data models to store electrical information, similar to what OpenAccess promises to be.
From the first time I made the logo turtle draw a box on the computer I have been hooked on computer graphics. When I was in undergrad I took a 3D drawing class from Jeff Ely and was amazed by what was possible. I spent hours and hours working on the projects and trying out new ideas. Assuming there was no market for CG programmers in the Portland I did not try to pursue a career in Computer Graphics.
While in my graduate program I had the opportunity to take another 3D graphics class. This time the class focused on writing our own ray tracer and again I found myself hooked. I followed up this class with a class in real-time rendering which was interesting, was not as stimulating as the 3D graphics class. Not satisfied I gave a try to Blender but at that time the tool was so cloogy that I quickly got frustrated and bored with it. Again I gave up on the idea of doing actual CG work.
Recently my interests in 3D graphics has again been piqued again. I also came across the web site for both Cascade SIGGRAPH and the animation studio Laika and realized that the Portland market is far more alive then I first thought. I decided to give another try to Blender to see how far it has come and have been amazed at their improvements. Blender has now come a long ways and I am having a lot of fun working with the application. Even if I never do it professionally, I am going to try to continue learning the art. I have a web page dedicated to my blender images if you are interested.
While in my Timing and Analysis Electrical Engineering class we spent a couple of weeks on self-timed logic. This is logic which does not run off the clock like most of the processors out there now but rather uses a handshake to pass the information along at its own speed. This is a gross simplification, but it actually makes circuit design significantly easier much easier and much more interesting. I would love to spend more time investigating self-timed logic.
I really enjoy the language of C++ and I am often amazed at how powerful and well constructed it is. Having done some compiler development work in my graduate classes it is amazing to me how they have encoded late binding in assembly. This is trivial to do in an interpreted language (like Python or even Java) but to accomplish this in assembly is truly a feat. Plus I hear they are looking to add garbage collection which seems really mind blowing as it will again need to be implemented in assembly.
I've worked with direct X11 drawing, Xaw, Motif/Lestif, Macintosh Toolbox, MFC, AWT, Swing and several other even less well known tool kits and none of them comes close to the beauty that is Qt. Their organization is very good and their documentation is excellent. They have one download which compiles and installs the entire tool kit onto your system. Applications compile with almost no changes from Linux to Windows.
I did once tried working with Gtk but after installing several supporting packages I found their documentation to be lacking. I have no doubt that is an excellent effort, but their structure was not as clean and their implementation of signal/slot communication left much to be desired. Granted, this was 3 years ago so I am sure they have improved since then and perhaps I might give them another try.
The only downside to Qt is that their signal/slot mechanism is not part of the real C++ language. I have no issues with the moc pre-compiler or with the added macros but rather that all errors in communication are caught at execution time and not compile time. If you try to hook up a signal to a non-existent slot you will only discover this error when the signal is triggered (if you have debugging on). Errors like this should be caught by the compiler, not the user. The rebound game I wrote uses Boost signal/slots which are not as nice to use, but do move the miscommunication error messages into the compiler. Reading and understanding the five pages of error messages is another story.
Python is a very clean and fun scripting language to use. It looks like executable pseudo code which helps a lot in its readability. They have a real inheritance model and real exception handling.
Haskell is probably the only true functional programming language that I have had much exposure to. In undergrad I took a language topics class and we covered a bit of LISP but that was a long time ago now. Given some time I would really like to better understand functional language.