Blife Plans

January 11th, 2008

blife is the cellular automaton program that I’ve been working on for the past few months. I wrote most of it in mid-November and have been touching up bits of it ever since. It’s currently written in C and runs Conway’s Game of Life rule set (23/3). I’m going to be rewriting it over the next month in C++ and implementing a generic engine so that is can run other rule sets specified at run time. If you’d like to help out, or keep up to date on the new version, please email me at brad@stackpointer.org, and I’ll keep you in the loop.

2007 Book List

December 25th, 2007

Here’s my yearly list of books that I’ve read. I’ve put the titles I think people ought to read in bold.

[1] The Soul of a New Machine
[2] Zinn and the Art of Road Bicycle Maintenance
[3] Learning GNU Emacs
[4] The Diamond Age
[5] Snowcrash
[6] The Pleasure of Finding Things Out
[7] Mona Lisa Overdrive
[8] The Urth of the New Sun
[9] Dreaming in Code
[10] Positively False
[11] Managing Humans
[12] The Pragmatic Programmer
[13] Practical Common Lisp
[14] Hackers and Painters
[15] The Cathedral and the Bazarre
[16] On the Road
[17] The Mythical Man Month
[18] The Knight
[19] The Wizard
[20] Memory as a Programming Concept in C/C++
[21] True Names and the Opening of the Cyberspace Frontier
[22] Revelation Space
[23] Outdoor Survival Skills

My History of Programming

December 19th, 2007

This essay is a somewhat brief history of my programming experiences. It is by no means all encompassing, but I’ve tried to hit all of the big moments in my programming career (my favorite classes and so forth).

Although I had experimented with QBasic a little bit as a lad, it wasn’t until High School when I got my TI-85 graphing calculator that I really started to program. The TI-85 was a wonderful device that allowed users to program in a BASIC right on the calculator using the keypad. The primitives and control structures were all listed in horizontal menus, and you’d select which one you wanted using the menu buttons as the top of the keypad.

I didn’t have a manual on BASIC, so I fooled around with each keyword until I understood what it did. The first program I managed to write was a simple Fahrenheit to Celsius converter. The program prompted the user for a number, which would then be run through the function c = (f - 32) * 5/9. I followed that up by giving the program modes so I could also convert from Celsius to Fahrenheit. After that I programmed miscellaneous math programs for the classes I was taking at that time, most of which were for trigonometry so that I could verify my answers.

Sometime around the summer of 1999, I purchased one of those “Learn in 30 days” books on Visual C++. It was so awful that I stopped using it after Day 2. I made an assumption that C++ was universally awful, and I stopped going down that road altogether. So I gave up on C++ and kept doing little things on my 85 for the rest of High School.

I enrolled in a University in 2001 and wasn’t certain what I wanted to do with my life, so I signed up for two General Education classes and the introductory Computer Science course since it sounded like fun. The course (cs110) was taught in Java by Prof. G. Object Oriented programming pretty much blew my mind–everything was so abstracted and elegant. The next course (cs111) was an extension of 110, further exploring abstraction and data-hiding. The only project I recall from either class was a movie rental program that allowed users to register products (DVD’s and VHS tapes), and check them out to customers. To augment 111, I put together a little command line battle simulator that allowed the user to equip items (which never changed), and battle a single monster to the death. It was kind of like those old text games such as Adventure, or Zork–except without features.

After cs111 there was a jump in difficulty, as I took a course on Data Structures from Prof. A. It wasn’t so much that the ideas were tough, it was that his style (at least at that point) was to throw the class into the deep end of the pool, with three large assignments of which he provided a specification that we had to program. The lectures were rarely on the same topic as the assignments, forcing us to come into our own by researching and developing our own solutions (meanwhile studying the lectures for the tests). At the time the experience freaked me out, but now I’d consider it one of the most helpful exercises I had during college.

The next interesting course I took was on assembly language, which I must confess, is probably my favorite language. Everything is broken down into logical little pieces and you’re able to see why, and how every single little thing in your program is working.

The quarter after I took the course on assembly, I didn’t feel like I had built any large programs, and that I wasn’t really doing anything interesting, so I started programming a Multi-User Dungeon (MUD) in Java. I used it as an opportunity to teach myself 1) Network programming and 2) Multithreading. This project, which I called Vagabond, progressed pretty far. I got it to the point where there was a map that players could walk around on using simple keywords such as north, south, east, and west. Players could load, and save data. They could also interact with other people that were logged in. I even programmed my own text formatting library that used a subset of HTML to specify where on the screen text should be placed, and what color it ought to be. This enabled me to spruce up text such as “A <bold><green>Green Dragon</green></bold> draws near!”. Players could also use the color tags. Here’s a screenshot:
vagabond mud screenshot

It was about this time that I started teaching myself C. I was getting antsy to ditch Java (which all the courses up until this point other than the assembly course were taught in). Specifically I wanted to be able to interface with all the great C api’s that are out there. So I went to the university library and checked out their copy of K&R C. I had that book checked out for six months straight before I could afford to purchase my own (speaking of which I ought to donate a copy to the library..). My first C program was a little utility to convert number bases. I started out by having the user input a number in decimal, and it would simply print out the binary representation. Frankly it was easy, but most of the exercise ws to teach myself pointers (and the requisit arithmatic), and pass by reference. I also started to dabble in TeX, the great typesetting markup language since I wanted to print my sourcecode out and have it look nice.

Coincidentally, after that the CS courses finally started using C and C++ as their main languages.

The only two other classes worth mentioning were the Parallel Processing class I took, which used MPI as its API, and Computer Graphics which used OpenGL. Parallel Processing was one of the funnest and neatest classes I took. We had to take specifications and transform them into parallelized C programs. We then had to test them on networks with variable amounts of nodes. There’s something alluring about having to stay in a lab until it closes to rig up a supercomputer.

Computer Graphics was also great, there were only five people total in that class, so there was this weird, fantastic, signal to noise ratio with the professor. My term project for that class was a Legend of Zelda clone. The class didn’t even cover raster graphics (bitmaps/pictures), just vector graphics (mathematically derived), so I had to research and design pretty much the whole thing myself. I wrote it from the ground up, incorporting BMP’s, and used a certain gaudy pink color to mark areas I wanted to be transparent by upscaling to the RGBA colorspace (So if R=255,G=0,B=255, then when I convert it to RGBA, I sample it as R=255,G=0,B=255,A=0 for complete transparency (a=255 for anything else)). I got carried away with the clone and added audio support for background music, and a bump sound when Link would collide with an obstacle.
cs440 zelda

At that I graduated with my Computer Science degree, and since then I’ve led and trained a bunch of testers (albeit not programmed) a video game for Microsoft Game Studios, and learned Common Lisp. I’ve also been slowly rewriting the Legend of Zelda clone using a much cleaner approach, and I’ve been working on an open source version of Conway’s Game of Life called blife. blife is almost finished, and the newer Zelda clone is working, but I haven’t released anything yet.

LispCast

December 13th, 2007

I’ve been enjoying a screencast put out by Eric Normand over the past month and a half. The topic that he’s been covering is programming in Common Lisp (which I’ve been studying for a few months now). During each episode, Eric works on a Reddit clone in CL, using freely available libraries such as Hunchentoot (a webserver written in lisp) and CLSQL. He also takes time to develop unit tests using Selenium, so that as he iteratively adds to the program, he is able to make sure that all functionality stays in tact.

Debut

December 3rd, 2007

The first videogame to bear my name, Viva Pinata (Windows version), was released about a month ago. It is currently somewhat tough to find in stores, so if you plan on purchasing it you may want to do so online. The game was initially created by Rare, and ported to the PC by Climax, and was published by Microsoft Game Studios.

If you have no idea what this game is, let me give you a quick overview. You play as a farmer, aptly personified with a shovel avatar. It’s your mission to attract Pinata-animals to your garden and domesticate them, while converting evil “sour” Pinata’s to your cause so that they do not kill your livestock. There are a few different super-varieties of Pinata that will require different varieties of plants and landscapes. For instance, you’ll need to have a water garden to get the Chippopotamus, and Dragumfly–and a savanna to get a Horstachio.

You can use your shovel to whack open Pinata’s. As you do so children will cheer. Your other Pinata’s will then rush over and eat its sweet sweet candy.

I’ll post a screenshot of the credits whenever I am able to do so. ;D

A Fire Upon the Deep

August 14th, 2007

A Fire Upon the Deep is a space-opera written by Vernor Vinge. Let me start by saying that I read this book several years ago, and it happens to be one of the few sci-fi novels that I recommend to friends. Vernor Vinge is a very intelligent Computer Scientist, and some of his ideas that he has written about impacted this novel greatly. For instance, Prof. Vinge wrote a great paper on his idea of the technological singularity–a point at which artificial intelligence will be able to surpass human intellect. His prediction of this event impacts by the book to such an extent that Vinge needed to augment physics with a concept where galaxies are composed of zones of thought; the unthinking depths, where virtually nothing works, a slow zone (which contains Earth) where faster than light travel is unable to function, and artificial intelligence is primitive, the beyond where FTL works and artificial intelligence works decently, and finally the transcend where artificial intelligence can attain God-like cognation. A person may sit back and think that this all sounds like bullhonky (which it is, this is fiction after all), but in the books world mass seems to have a property that interferes with processes. The less mass, the less interference upon something. So as you get away from the galactic core things work better and better.

Now, with that said, this story opens with a crew from a Human planet called Straumli Realm attempting what is by this time an old field called software archeology at the fringes of the beyond; right next to the transcend. They’re attempting to harvest all of the data from a very old space station, when something in the computer systems wakes up, and purges these far-future archaeologists. A small ship manages to escape and darts way down to the slow zone to try and flee this Minsky’ian menace. The story then cuts to Ravna who works for a corporation at a relay station. There is at this point in time a galaxy wide network based upon Usenet. At this point a rather benign AI called “Old One” starts using most of Relay’s bandwidth, and asks Ravna to accompany it back up to the Transcend. Ravna refuses, citing a fear of being locked in a Deathcube (read Vinge’s short story: The Cookie Monster for more on this), so Old One reconstructs a human from a stockpile of cargo that Ravna’s company happens to have on hand: enter Pham Nuwen. My synopsis is now over, I don’t wish to spoil the book.

If you thought any of that was neat, you’re in for a treat–I left out all of the alien species, everything about Pham, and I didn’t even touch on what happened to that escape ship! I suggest you go to your local bookstore and purchase this book right away. 5/5

Dreaming in Code

August 7th, 2007

Dreaming in Code by Scott Rosenberg is the true story of a run-away software project called Chandler. The initial premise of the book was to be a biopic, from beginning to end, of a revolutionary software project headed by Mitch Kapor who was the head of Lotus Development back in the 80’s, at his new organization: Open Source Application Foundation (OSAF). The project itself, Chandler, was to be a Personal Information Manager in the vogue of Microsoft’s Outlook–except much much cooler. All data was to be stored in one gigantic repository, allowing users to massage their data around. Emails could be marked as Calendar events, notes could be attached to any item, dates and such would be inputted using natural language, such as “Dentist appt. next Tuesday”, and the program would figure it out, and best of all–the whole project would work peer-to-peer, allowing you to share any and all data that you wished with others.

This all sounds great on paper, but one must take into account that programming is tough, and coming to a consensus in a design-by-committee atmosphere is nearly impossible. Long story short, OSAF started programming without coming up with proper specifications; they were coming up with prototypes when they should have split into sub-groups and designed each module and gotten to work coding the real program. As I said before, there was very little consensus on the overall design–for instance, they decided to work with the Python programming language, and wxPython which is a graphical widget library. After a year of hard work, they were still wishy washy about using Python/wxPython and nearly ditched everything to start over using Mozilla’s widget toolkit. Yet they were wishy washy about that and almost made it completely web-based, using AJAX to make it Google-style. This was a year into the project!

As an aside, the book got me interested in using Chandler, so I installed their latest release (0.7a5) and tried it out. The program looks promising, but is definately not near their 1.0 release. The Calendar seemed to be working, as well as the notes–but I couldn’t get it to download my email. Chandler would connect up okay, but it just wouldn’t download anything. I will definitely give this project another shot when it hits 1.0.

Anyway, this was a terrific read, and is more than just about Chandler. Rosenberg covers Software Engineering as a field, discussing why things are still so tough even though it’s been emerging for the past sixty years. Rosenberg also discusses The Mythical Man Month at length–citing IBM’s old projects, and how the same issues arose back in the 60’s/70’s as they do now. All in all, this was a terrific read, and if you liked The Soul of a New Machine by Tracy Kidder, you will love this. 5/5

Computing Wiki

May 22nd, 2007

I’ve been working on a Wiki with some friends for the past few weeks. You can find it at Fishcracker. I’m currently in charge of the Emacs tutorial, and I’ve put a lot of work into it. There are also tutorials for other applications I pretty much consider essential: lftp, vim, and screen to name a few.

Cycling Summation -> [January to Mid-March]

April 24th, 2007

So I’ve been riding a lot since January. Most of which has been inside on my trainer. January went well enough–did some base training, spinning at 80rpm for a hour each ride. Sometime in early February there was a nice day, so I loaded my roadie up and split for the park. About a mile and a half in, my seat suddenly tilted back about 50 degrees, nearly sending me into my back tire and a position I’m certain is not good for males. Luckily as I tilted back I was able to stand up on my pedals quick enough, so I unclipped and tried adjusting the seat clamp with my allen wrench. Well the darn thing was in poor shape and needed replacement.

So I ordered a new seat post, and seat post clamp. That bicycle came with some crappy parts from Ritchey that were very sub par. I’ve actually been struggling with the seat post since I got the bike. So anyway, it took about two and a half weeks for that stuff to arrive. In the meantime I bought a book on bicycle repair, read it, and started in on my own maintenance. Most of the book was pretty obvious, I guess, but it has nice blow-out pictures of all parts, so when you’re putting something back together you at least have a reference. Anyway, as soon as everything was kosher again, I went for a nice spin on a rainy day. The construction up in Bothell was just coming to a close, and the Roosters were out and cawing as always. Anyway, I bonked on the way back and then it started raining. The next few rides were just peachy–nothing really to report.

At this point a cold snap hit and all my riding was inside again. That started getting boring, so I stopped riding for a week and a half, then the weather got really nice for a few days. On the first ride I was cruising at 21mph for nine miles, then seventeen until I saw a stray dog down the road. As you may know, I had an ‘issue’ with some dogs awhile back, so I wussed out and turned around. Next ride went well. Really nothing to report.

RLX -> Emacs Roguelike

April 11th, 2007

dto from #emacs on freenode has been working on a roguelike called RLX for GNU/Emacs. Go forth and check it out.