About this Site

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.

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 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-ModeTangling 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.

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.