Introduction

Welcome curious reader to my little corner of the web. This site contains my blog, computer tutorials and programming projects I am working on, and other things I care to write or rant about.

It is written in Emacs using Org-mode and its publishing system. The green on black theme resembles my favorite programming environment, which is a full screen rxvt terminal running screen with the same colors, running under either GNOME or Ratpoison window managers.

About the Author

My name is Kyle Sherman. I have been programming computers since I was 14 (24 years ago as I write this). I started out using Apple II's in my junior high school computer lab – which consisted of two of them. Eventually I was given a Commodore 64 for a Christmas present and I've been addicted to computers ever sense. Over the years I've owned an Amiga 1000 & 3000, a Mac Powerbook 180c, and lots of home built PCs and some laptops. I originally wrote this about on an HP Omnibook 800c (Pentium 166) with 80MB of RAM running Debian/Ratpoison/screen/Emacs. More than a few laptops later and I'm now coding on a Lenovo Y50-70, running Ubuntu/Emacs.

I went to San Diego High School then on to college at California Polytechnic University, Pomona where I received a Bachelor's Degree in Computer Science in 1996. Since then I've worked for Hughes, Boeing, BigCharts, MarketWatch, MotivAction, Dow Jones, and currently BuzzFeed. I've done Database development with Oracle and Microsoft SQL Server for the first part of my career and then I transitioned to Java, C/C++, and Ruby on Linux based machines while working at Dow Jones. For over five years now, I've been developing on the Android Operating System at BuzzFeed. Currently, I manage the Android team that works on the BuzzFeed Android Application.

My resume has more details of my work history.

History of this Web Site

This site was initially built with static HTML pages [circa 1996] using generic editors and FrontPage. In 2001 I switched to using Zope wich allowed for rapid development in an object oriented evironment and was quite fun to use. Even though I liked Zope a lot, I found some tasks to be overly complex to build. Some of my issues were:

  • Not easy to access the file system and databases.
  • Having to switch back and forth from DTML (and Template Style Sheets) to Python (both internally via python scripts and externally via external scripts or products).
  • Stuck using the web interface to interact with Zope. You could use FTP or WebDav to edit a very limited subset of objects, but the limitations were so bad it wasn't worth the effort for me.
  • Because all of the Zope objects are in the ZODB you couldn't access objects via the file system or use a version control system with it.

On the other hand, Zope did have many good points. It had a great object oriented structure (both internally and with URLs). It had built-in security and change history that just works right from the start. Finally, there was a strong developer community supporting and enhancing it. But, these reasons were not enough for me to stay with it. Besides, I'm more of a Perl (and more recently Ruby) guy than a Python guy ;-).

(Note: I am aware that Zope may have changed a lot since I was using it and my above issues may have been resolved by now.)

In 2003 I started to move my site to Mason. Mason is an Apache add-on that gives you the power of Perl inside of HTML. I liked Mason a lot and found that I was much faster building web pages with it than I was with Zope. It didn't have all the same abilities Zope has, but it was reasonably easy to work around the limitations/differences. And (this was huge for me) I could use a regular editor to edit pages.

Shortly before I finished the first version of the rebuild of my site I just lost interest in web site building altogether. I pretty much put it on hold for a couple of years.

In 2007 I got the bug to work on my web site again. Some things had changed that made me reconsider whether or not I wanted to use Mason. Here were some of them:

  • Ruby: I liked Ruby a lot more than Perl.
  • Ruby on Rails: I was undecided on this one. It seemed to control your web site structure too much for my liking.
  • Emacs: Simply the best editor ever made, that I unfortunately only started to use in 2005. Yes, I know, I was very late to the Emacs game considering how long I've been using computers. The initial learning curve was high, but well worth it in my opinion. [1]
  • Lisp: I've been using Common Lisp since I started programming in Emacs Lisp which happened shortly after I started using Emacs.
  • Muse: A publishing mode for Emacs that you can use to create a static web site. (Defunct since 2010 and largely replaced by Org-Mode Tangling and Publishing.)
  • Clojure: A dynamic, primarily functional, multithreaded friendly, programming language that runs on Java Virtual Machine and is a dialect of Lisp.

Now you are probably asking yourself, what did all of these options have to do with whether or not I used Mason to create my site. Well, Mason uses Perl and for anything more than text manipulation scripts Perl is not that ideal. What I mean by this is that once I have a large body of Perl code I find it gets very confusing to keep track of dependencies and to track down bugs.

Now there was Ruby, a language with all of the power of Perl, plus all of the missing object oriented programming functionality. Frankly Ruby was just so easy and intuitive to use I thought everyone should give it a try. So, at this point, I would have liked to use Ruby instead of Perl for my site, I just needed Mason::Ruby.

Now, I could have used Ruby on Rails. I knew a lot of people liked it and for a hack-as-you-go site I thought it was a great platform. I had other ideas for how I wanted the database back-end to be setup than how Rails would have liked to do it, but I could have probably modify the Rails to DB IO to suit my needs.

So just when it seemed I should go with Ruby… along came Lisp. Yes that 50 year old language from the dark mainframe days. Why Lisp you ask? Well I had made the switch to Emacs a few years prior and shortly after that I started to learn and use Emacs Lisp so I could customize it and make my own modes. It was quite confusing at first, but soon enough I started to get the hang of it. Then I began to take a look at Common Lisp – which I had not used since my college days (where I just didn't get it). In order to learn Lisp I decided to use it to do Project Euler projects which I had just discovered. What better way to learn a language. (When I wrote this in 2007, my current progress was 68/158 or 43%. As of 2016, my progress is 150/579 or 26%. I'm pretty sure I'll never catch up.)

Now I found that I really liked Lisp. It truly is an amazing language that everyone should have a look at. It's a very powerful functional language that's all about abstractions and tight scoping. Not to mention that functions are first-class citizens and have the same structure as data. These properties make it useful for many projects and I think very useful for a dynamic web site. So now I found myself liking the idea of building my site using Lisp. And I planed to do just that, however this was going to take me a while. I was still very new to Lisp and there were not as many support sites out there as I'd like.

After using Common Lisp for a while Clojure came along and I started playing with it a bit. Having access to all of the libraries available to Java is just too good to ignore. Clojure also has excellent multithreading support. I feel that designing a web site with Clojure, maybe using Compojure, would be an excellent choice.

However, since I didn't want to tackle building the framework for my dynamic dream site, I decided to use an Emacs based tool, Muse to make a static site for the time being. Which is what I originally wrote this page in. It allowed for easy wiki-like page creation, template based publishing, and modules for creating PDFs and RSS pages. The only down side was that it only produces static content (unless you add AJAX or some-such). But for a blog (which I had wanted to start for a long time) and for publishing and commenting on various projects and code that I'd written, it was well suited.

Fast forward to the present (as I write this), the end of 2016, I have a very old web site that is in dire need of an overhaul. My last blog entry was in 2010. I've kept other parts of this site updated, but grown to not like the complexities of my custom Muse platform for managing my site.

Enter Org-mode, which I've used for a very long time now for note taking, Getting Things Done, and converting my very large Emacs Configuration to a Literate Programming version using Babel. Muse is no longer being maintained and has mostly been replaced by Org-mode's ability to publish to HTML.

I am now in the process of converting my site from Muse to Org. There's a lot of customizations and automated scripts that need to be tweaked, so this will take me some time to finish.

And that's the long story of how this web site came to be.

– Kyle Sherman <kylewsherman@gmail.com> (2007)

[1] Just to head off any Emacs vs. Vi wars… I've been using vi/vim for over twenty years now, and I continue to do so. However, there are two very big reasons that I prefer Emacs. The first one is that I just hate the dual mode concept of vi (input/control mode). I always forget which mode I'm in and it just slows me down. The other, more important, reason is I really like being able to use Emacs Lisp to extend the power of Emacs.

creative-commons-by-nc-sa.png linux.png ubuntu.png any-browser.png hacker.png xhtml10.gif css.gif