The cow says…

If you’ve seen my Confident Code talk you know I’m a fan of the cowsay utility.

cowsay "Quack"
 _______
< Quack >
 -------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

In fact, I like it so much I wanted to share it with people who might not have had a chance to try it yet. So I put it on the web.

Enjoy it for all of your ASCII-animal speech-bubble needs. The source code is on GitHub if you’re curious. Interesting implementation notes:

  • It was written from scratch starting last Saturday night and then over part of last Sunday.
  • The original Cowsay program, written in Perl, is included in the app. I use IO.popen to open a Perl process and generate the ASCII art.
  • I started with a simple Sinatra service. Then I added Rails in, and mounted the Sinatra service in the routes file.
  • I use Erector for views, and DataMapper for persistence (what little there is).

On a personal note…

It’s a silly little app, but it’s kind of a big milestone for me personally. All my programming career I’ve worked on other people’s projects. I’ve made regular attempts to kick off projects of my own in my spare time, but invariably I’d get sucked back into day-job/client work, lose momentum, and stop in the middle. My home directory is littered with half-completed project repos.

As sad as it may sound, I think this marks the first time I’ve been able to find a small enough project scope that I could actually launch a working V1. I’d proven to myself that I could write libraries and books, but until now I still hadn’t proven I could launch an app of my own.

So, yay for me!

8 comments

  1. Congrats! I’m glad you made this post because I have the same problem: I can ship other people’s stuff, no problem, but never finish up my own stuff. It’s been easy to get down on myself about it, and it’s good to know that other devs I respect have the same issue and can overcome it.

Leave a Reply

Your email address will not be published. Required fields are marked *