The Workspace
Projects and Experiments:
I like to keep myself occupied with interesting projects in my copious spare time. Some of them are related to computer science, and some of them are not. Keep reading to find out what kind of nonsense I’ve got my hands into today.
- I developed a stack dumper for Windows. Because of the inadequacies of the debugging environment at one of the companies I worked for, I developed a rudimentary debugger for decoding printing the stack of a running process. It makes for a good example of my C++ coding style, and through the years, I have used it as a playground for trying new things (e.g., C++11). Get the code (v2.0 archive) or see the generated documentation. This was generated with my favorite documentation generator, Doxygen.
- Completing the exercises / challenges in various CS books. I tend to like to brush up my skills occasionally by doing exercises, and various textbooks are a good source of these. Often, however, books don’t make the solutions available, so I decided that I’d throw my solutions online — both for the purpose of peer-review, and to give solutions to the next person trying those same exercises.
- C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond. This book is one of the best refreshers for (pre-C++11) template metaprogramming available. It also is a fun way to test the bounds of what Doxygen can do: in the past, support for template specialization was quite lacking, but no more! Get the full source code bundle here, and check out the generated documentation here.
- LISPcraft. This book has some obselete bits, as it relates to an older Lisp interpreter’s system-level API, but recovering familiarity with Lisp has definitely increased by confidence with complicated metafunctions (aka List macros), lambdas, and other functional programming paradigms. The solutions to the exercises (that I could run on SBCL) are here.
- I want to make an OS for my Gumstix. We’ve all got lofty aspirations. Mine is to take a Gumstix and make it do something incredibly useful with my custom OS. This will take time. Since these little babies are so tiny, I think the whatever OS runs on them should have seamless support for clustering built in to promote the scalability of using anywhere from 1 to 1,000 of them as a single unit.
- I want to write a file system. After rereading a number of my operating systems textbooks, I got all fired up to write myself a file system. I have high aspirations: it should be able to occupy a floppy drive, and I’d like it to be resizable. Impossible? In seriousness, though, I've done something similar to this (in the user-space) back in college. The trick for me will be figuring out how to connect this to the kernel of my choice.
- I am rebuilding a rotary phone. Why? If you find yourself asking why, you probably ask too many questions, but this time it is warranted. I… don’t know why, I just am. Recently I came into possesion of my grandfather’s old electronic equipment — he used to be a TV repairman in the 1960’s — so this is the fun (and simple) project I settled on. You can check out the specs right here.
UPDATE – I can’t believe it actually works — but it does. I think this means that I must be moderately competent.
- I need a new bookshelf. I’m going to build this thing out of solid Oak. It’s going to be the toughest damn bookshelf ever built, and the goal is to fit all of my books, from the tallest to the smallest. Check out the simple plan here.