A smorgaspost

I haven't posted in a while (and I see that when I did I was in rather a bad mood; poor GRRM!) and there's a lot to talk about:
  • Geeking out with Clojure, a functional language.
  • Geeking out with Legos. More about that later.
  • Geeking out with Plants Vs. Zombies.
  • Geeking out with Java: OSX, Eclipse, and Google App Engine.
  • Geeking out: issues with Linode
  • Geeking out: making a decision about PHP and WordPress
Clojure is neat, but it's so general that it's hard to get your brain around the fact that, really, you can do whatever you want with it. The number of patterns in Lisp/Clojure are immense - even more in Clojure because it's a dynamic functional language. The two things I want to write in clojure are: a completely dynamic webapp framework, which basically starts off life as a network aware REPL and kinda "grows" from there. When you install it, you "regrow" the system. Your apps "grow" too. Of course this should run on App Engine and *never* have to be redeployed. The other thing I really want to write is a GUI app that takes a two dimensional bitmap and interprets it in arbitrary ways: strings, numbers, etc. I'd like to "grow" that into a full-fledged text editor. The community is really great, btw. And I like that the logo is at once geeky and hippy (that's a lambda in there, baby!)

Legos somehow I got the itch to buy some of their Star Wars kits. I used to love building things with Legos as a kid - specifically spaceships. I would build them and then throw them in the air (I loved the wind rushing past their "hulls") and then when they hit the ground I'd not touch anything, observing carefully what had happened. Depending on my mood I would either do minimal repair, or I'd try to make it even stronger. A fun game. But these newfangled kits are nothing like that: the X-Wing was ~350 pieces and there were maybe 40 "normal" Legos in there. Maybe. The other 310 were customized, you'll-never-figure-out-how-to-use-this-in-anything-else sorts of pieces. The AT-AT was 1200 pieces, and the ratio was about the same (although, in fairness the AT AT was a motorized beast that required some custom bricks.) It's hard for me not to draw a parallel between this sorry state of affairs and computer science: it's become cliche to treat "Legos" as some sort of monicker for standardized interchangability. What irony that Legos are no longer standard or interchangable. And this is probably for two very simple reasons: the models look better with more custom bricks, and you're more likely to buy more Legos if you aren't tempted to "roll your own". As I was building the models I kept thinking "why did they make that brick? They could have used these other two together..." which is something I also think about when building software. Weird.

Plants Vs Zombies is the clear "runner up" in the "great casual game wars of 2010" (the winner being Angry Birds, of course). PvZ is a really good take on the tower game genre. I think I saw it for the first time on a demo PC at Costco. Anyway, apart from needing some more balancing (Gloom Shroom is WAY overpowered) it's a great game. It's also an interesting exploration of the interdependency of a team - each individual contributes different things during the game (and different things during different phases of the game), and it would be foolish for one plant to claim that they are better than any other plant. For sure, there are some plants which are more valuable, in that they would be more expensive to replace. It's hard not to draw the parallels to building a business, a team, and seeing that team change and grow.

Java is still my mainstay (and increasingly Google App Engine) and ironically all this work with Clojure has made me, if anything, even more fond of the old beater language/environment/coffee that is Java. To that end I actually spruced up my environment (OSX and Eclipse) a bit. For Eclipse mainly consisted of updating the OSX developer library (for javadocs and JDK source), adding TLD files to my GAE projects (without them the JSP editor complains when you use JSTL). While I was at it I reinstalled macports (which had somehow got corrupt) and spruced up my .bash_profile to fix my prompt and ls defaults. I also installed ForkLift - which is a nice Finder (and CyberDuck) replacement, and a Clojure plugin for Eclipse (which is shockingly stable). This all fits in nicely with my newfangled "Workspace" philosophy, which I may write about later.

Linode has annoyed me. They deleted my images when the CC I had on file failed. This upsets me, but not as much as you'd expect: I didn't have anything too heavy running on the host. I'm not even sure if I want a VPS anymore. On one hand, it's nice to have a persistent host with a stable IP address completely under your control somewhere in the universe. There's just so many things you can do with it (not the least of which is to install the Dropbox daemon so that you have an offsite backup not controlled by Dropbox). But Linux sysadmin is not my forte or interest, those stable IP addresses are like honey to hackers. I'm not sure if I'm going to reup or if I'm just going to settle for the much-less-general-but-super-easy-to-administer Google App Engine. The bottom line is that, unless you're a control freak, you don't need your own host for even the most involved websites - so why bother?

Making a decision about PHP and WordPress. I've pretty much made a decision to avoid this technology stack. It's a justifiably popular solution for lightweight CMS that most websites need. This isn't to say that there's anything wrong with it, per se, it's just that there is only so much I want to learn. I actually really admire PHP's directness and the fact that it's purpose-built. And Wordpress has a pretty amazing bang-for-the-buck ratio, especially when you take into consideration available templates. I guess I just don't like munging HTML on the server anymore. If you want to munge HTML, do it on the client, with JavaScript, the way God intended. The server should really be just a dumb, RESTful data store used by the DOM to populate itself. (Interestingly it is theoretically possible to write a WP template that does things this way...tempting!)

Speaking of Google App Engine - what a great product. Dealing with some Linode drama I have come to realize the costs and benefits of running your own host, and what a great job the GAE team has done making deploying and managing your apps as easy as can be. They have lots of nice touches, like the ability to deploy in-active versions for testing, and full text search on logs - all through the web. This is all stuff that you can do with linux/apache/tomcat but it takes a lot of work to setup and maintain. Kudos to GAE.

No comments: