The Little Schemer

So, you think you know a lot about programming? I’ve been writing code since my senior year in high school. That’s 14 years. I’ve written code in more languages than I care to remember – C, C++, Assembly, Pascal, COBOL, Java, Perl, VBScript, JavaScript, PHP, Ruby, Python, Unix Shell.

I thought I knew a lot about programming, until I started reading The Little Schemer. This is a book that literally blew my mind. As soon as I started reading it I thought I can’t wait to finish this and start reading The Seasoned Schemer.

Once I got about halfway through the book I realized that I wouldn’t be able to do that. Instead, when I finished the book I immediately started reading it again. I’ve never done that with any book before. The Little Schemer is really that good. I’m on my third reading now.

What makes it so great? It teaches a whole new way of looking at programming problems. Not only that, it uses a unique method of teaching. Instead of the usual dull paragraphs followed by pages of code, this book is a humorous series of questions and answers. The authors never really tell you anything. They let you figure things out for yourself.

Even more interesting is the authors’ choice to talk about the Scheme programming language. As I said earlier, I’ve written a lot of code, but never any Scheme. Scheme is a dialect of the Lisp language. Here’s what Eric S. Raymond has to say about learning Lisp:

Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot.

After reading The Little Schemer, I believe that quote. No matter what language you program in, this book is worth reading. Even if you have no experience with Lisp, by the time you finish studying this book you’ll be able to write your own Scheme interpreter.

Several other programmers have taken ideas from The Little Schemer and applied them into other languages. One of my favorites is The Little JavaScripter by Douglas Crockford. Douglas Crockford is a genius JavaScript programmer. He took all of the code from the book and translated it into JavaScript, including the Scheme interpreter.

Another interesting book to check out if you enjoy this style of learning is A Little Ruby by Brian Marick. This is just a draft of the first three chapters of the book, but I sincerely hope he finishes it someday.

Enjoy these links, I’ve got to get back to reading.


I was all set to write an entry about NaNoWriMo – National Novel Writing Month. I’ve been following the site for a couple years now wishing I had time to participate. A few months ago I decided I was finally going to do it.

The basic idea is you write an entire 50,000 word novel in the month of November. That means around 1666 words per day. So for 30 days you spend all of your spare time writing. The idea is you don’t worry about editing or making it perfect, you just write.

As usual, I’m pretty busy with other projects right now, so I’ve decided to put off NaNoWriMo for another year. I don’t imagine my situation will be drastically different next year, but time will tell.

As a bit of a consolation to myself, I decided to instead participate in NaBloPoMo – National Blog Posting Month. This seems almost easy by comparison. All you have to do is write one blog post per day for the month of November.

I’m off to a pretty rocky start since this is November 2nd and I didn’t post anything yesterday. But I’m not going to let that slow me down. I’ll just have to write two posts on one of the other days to make up for it.

I have a few posts lined up already including some updates to my video website that I mentioned a while back. So far it’s just a quick hack in Perl, but I hope to recreate it in Rails and Django by the end of the month.

Consider Your Audience

I wrote about this around a year and a half ago, but I guess it’s time I revisited it (see Isn’t Everybody a Geek?).

The other day I was talking to Paige about some of the things I’ve been working on and she said “Now I’ll have an even harder time telling other people what you do.”

To me it seems so simple – I’m the Director of Technology for a school district. I’m in charge of making sure teachers and students have access to the technology they need to teach and learn.

What I hope to be doing soon is selling web applications. I’ve written a couple of interesting apps, and I’m working on a few more. I spend 2-3 hours a day studying web frameworks and programming languages.

But that’s not all. I’m following 22 people on Twitter. I’m subscribed to 113 RSS Feeds in Google Reader. I have 3735 3736 e-mails in Gmail. I have 4101 bookmarks in Delicious. I have accounts on every major social networking site.

Guess what? 99.9% of the world doesn’t care. I’ll bet 90% of the people that know me have never even heard of most of the things I mentioned in the previous paragraph.

Sometimes that drives me crazy. I want to round up everyone I know and say “Look at all of these awesome things! Now you can have instant access to everything that’s happening online 24/7.”

But then I realize, regular people don’t need to know about everything that’s going on 24/7. Most people still don’t know the difference between the address bar and the MSN search bar on their home page.

Those of us who live online are a different breed. We do things every day that the average person will never even understand. But that’s OK.

To most people a computer is a tool that helps them do their job. And it’s my job to make their jobs easier.

The Green Geek

Blog Action DayToday is the first ever Blog Action Day. Thousands of bloggers from all over the world are helping out by writing about their choice of environmental issues.

It’s so easy these days to lower your energy consumption, and your electric bill, I can’t imagine why anyone wouldn’t do it. We’ve only changed a few things over the last few years, but these changes have had a dramatic affect on our electric bill.

First, we replaced an old AC unit with a new, energy efficient one. We also replaced almost all of our regular light bulbs with CFL bulbs and we installing a programmable thermostat. These changes cut our bill by almost 50%.

Here are a few more things every computer user can do:

  1. Ditch your screen saver. How much time does your computer spend displaying some crazy graphics on the monitor with no one even looking at it? Instead of displaying a screen saver, set your computer to turn the monitor off when it’s not being used.
  2. Enable sleep or hibernation. Most computers take just a few seconds to wake from sleep. A computer in sleep mode uses a lot less energy. It’s worth a few seconds of your time.
  3. Turn off your computer. This is an endless debate and I’ve personally argued on both sides of it. Some people say turning your computer off and on every day wears out the power supply faster. I used to say the same thing. Even if it does wear out the power supply faster, the energy savings will more than make up for it.

I hope you’ll take this opportunity to do your part to help the environment. Make a few small changes in your life to ensure the future well being of our planet. Don’t forget to check out the Blog Action Day website to learn more.

I Just Lost The Game

And since you’re reading this, so did you.

One of my favorite things about working for the school district is interacting with the students. I think it keeps me young.

Last weekend we took a trip to Denison for BEST Robotics. On the way over there, one of the students said he had just “lost the game”.

Here’s how the game was explained to me:

  1. You’re always playing the game.
  2. As long as you aren’t thinking about the game, you’re winning.
  3. As soon as the think about the game, you lose.

When you lose, you should announce to everyone around you that you just lost the game. This causes them to lose as well.

It’s sort of a zen thing. Only by forgetting that you’re playing can you truly win.

I’m Famous!

Again. I gave three presentations on Thursday morning for our District Technology Integration Day.

I was really proud of the first talk I gave called “Effective Presentations”. I tried to channel Presentation Zen and Guy Kawasaki and share it with an audience who had never heard of either. Once I get all of my photos attributed, I’ll post a PDF of the presentation online.

My second talk was a lot more mundane. It dealt with file management and backups. A few people seemed interested, but several had their eyes closed. I actually ended up going a little long on this one, although I had fewer slides than the first talk.

My third talk was called “Teaching Today’s Students”. I started off by showing the beautifully redone Shift Happens. This was originally created by Karl Fisch and later stylized by Jeff Brenman. I knew that a reporter from the local paper was there, but I didn’t realize she recorded my entire talk. Much of the talk is quoted in today’s paper, including my quips.

This is not the first time I’ve been featured in the paper, but this is the most quoting by far. Most of the article is just me speaking. It’s kind of strange to read your own words in the paper.

I do think she misquoted me in one place. When talking about the slide that says the average page on MySpace is visited 30 times per day, what I thought I said was “So if you’re still having trouble finding a date, maybe it’s you.”

I thought I said that quiet enough that know one heard me, but I guess her recorder picked it up. I’m not upset if she reworded it. Her way is a little nicer.

E-Mail Therapy

It seems like everyday I receive an e-mail that (to me at least) deserves a flaming response. Almost daily I find myself wanting to unleash all of my pent up rage at someone or something via e-mail.

When I receive one of these e-mails, I used to spend quit a bit of time thinking about it. Trying to decide whether I should really let the person have it or just let it go. This was a source of stress that I just don’t need anymore.

So here’s my solution to this problem:

  1. Click Reply To All. (These messages are almost always addressed to a group. My boss and his boss are in the group 99% of the time.)
  2. Type a scathing reply. Leave no stone unturned. I try to make it clear that I am so far beyond the level of intelligence held by the sender that they can’t even comprehend the magnitude of what I am saying.
  3. Carefully move the mouse to the close button at the top of the window.
  4. As I click the close button, I say the word “send”.

This gives me all of the pleasure of expressing my true feelings on the subject, without the pain of getting fired and having to find another job.

I’ve done this twice so far today. Tomorrow will probably be worse. But, I have a smile on my face and happiness in my heart…

The End is Near…

The end of summer that is.

Summer is bliss at a school district. The office is quiet. The phone rarely rings. I can devote plenty of time and attention to big projects. What would take days during the school year can be accomplished in a morning during the summer.

Unfortunately, those quiet days will be just a memory on Monday morning. Last week was the calm before the storm.

This is the time of year when chaos reigns at my job. All of my free time is soaked up by a swirling mass of work orders, e-mails, and phone calls. All of my planning, prioritizing, and delegating will soon be for nothing.

Lucky for me, the chaos will end almost as soon as it began. The students return in two weeks, whether we’re ready for them or not. And once they return, the chaos subsides and what’s left is a steady rhythm of work.

Amid the chaos is where the excitement hides. The start of the school year is a time of change. Even more so this year. We’ve made some big changes this summer and there are more to come…

The Video Database

My YouTube clone is coming along nicely so far.

The next step is to set up a database to store information about each video such as a title and description. I’m using MySQL for my application. Here’s a command to create a new database called video:

mysqladmin -u root create video

Note that since this is my development machine, I log in to MySQL as root with no password. Don’t do this in the real world.

Next, we’ll need to add a table to this database. Here’s a bit of SQL to take care of that:

create table videos (
    id int not null auto_increment primary key,
    upload_date timestamp default now(),
    title varchar(255),
    description text,
    filename varchar(255)

This is all pretty standard stuff. I created a primary key called id that auto increments, and a date field that automatically adds the current date. In a real application, I would probably use a few more fields for things like categories or tags, but this should suffice for now.

The last thing to do is insert some sample data. Here’s another piece of SQL to take care of that:

insert into videos (title, description, filename) values
    ("Sample Movie", "This is a sample movie", "sample.flv");

Now that the database is ready to go, I can start writing some code. I think I’ll write it first in Perl just to see how it goes.

Adventures In Video

The first step in building my YouTube clone is making sure all the programs on the server work. If you remember from yesterday, I’m using FFmpeg and JW FLV Player.

Here are some great instructions for installing FFmpeg on a Linux server. Unfortunately my Google-foo was not so strong this morning and I ended up playing around for a while before I found that page. The real trick is making sure you have LAME installed before you compile FFmpeg.

After that, converting a video from QuickTime to FLV is a simple command like this:

ffmpeg -i -ar 22050 movie.flv

The -ar option sets the audio rate on the FLV file. Flash movies are very particular about audio bit rate. It must be either 44,100, 22,050, or 11,025. FFmpeg is smart enough to resample the audio track. Depending on the format of your original file, you might also need to specify the audio codec with -acodec mp3.

The JW FLV Player comes with a sample HTML file. It was a simple matter to replace their Flash movie with mine in the HTML and adjust the parameters so it would be the right size on the page.

So far everything has been pretty painless. Tomorrow things will get more interesting when I start trying to fully automate this process.