Bookstacks, photography and Star Wars

My bookshelf used to make me sad. So I finally dumped everything out and put things back in sane order. Of course, the magic of a cleanly organized bookshelf is all on Flickr. If you enjoy perusing book-stacks, you should have a lot of fun here. Even if you don’t, I made sure to include lots of fun notes to make it worth your time to give them a look see.

Bookshelf, after

Next, we’ve got Courtney’s nice work with her new digital SLR. She’s learning quickly, but already taking great photos:

Molly

Thor

Brick with 2100 printed on it

Finally, you may recall the Honda Civic del Sol that was converted to look like a fighter from Star Wars. Well, Courtney and I came across a del Sol with a similar paint job last night, though not so much with the body mods. Wonderfully nerdy and indulgent.

Honda Star Wars car

To the person who drives this car, I salute you!


Making sense of the world

I’ve noticed that when I’m walking about, sort of thinking idly, I find myself asking “How?” How was that building constructed? Why is that sewer there, and not somewhere else? OK, I guess that one is really a why question. So I suppose the underlying curiosity is really about the mechanism of the world.

Sure, you can’t reduce the world to a mechanism, a machine. It’s full of humans, so you can’t really make any kind of useful predictions. But there are definitely systems in place and some are more influential than others. Some of those systems, while not predictable machines, do display tendencies and trends. Learning them is one of the little intellectual side-journeys I’ve been immersing myself in lately.

If you want to play along, here’s what I’m into at the moment:

  • Economics (probably macroeconomics in particular)
  • Cognitive science
  • Linguistics

For the former, I encourage you to listen to The Economist Podcast (iTunes) and read the weekly edition when you get the opportunity. They also seem to have moved away from using a pay-wall, so check out the articles on The Economist website as well.

If you’re wondering why on earth economics might be interesting, then check out Neal Stephenson’s Baroque Cycle. I never thought I’d wish I understood macroeconomics and financial instruments so that I could figure out what’s going on in a book by a cyberpunk author. But then I read the Baroque Cycle and I did. Its no coincidence the last of the cycle is titled The System of the World and here I am, seeking a system that illuminates the world.

For cognitive science and linguistics, I’m still just getting started. I read Introducing Linguistics this summer and its great. It seems its part of a series where they match a subject matter expert with a graphic designer. The result is easily read but highly informative. Its very much in the same style as Kathy Sierra.

If you’re ahead of me here and know a good bit on any of these subjects, feel free to drop some suggestions on what I should read next!


I want to look at your workspace

Briefly: I enjoy looking at the workspaces of others. One of the uniquely great things about going to conferences is shoulder-surfing other people to see how they work. So when I figure out how I can do that from the comfort of home, I get a little excited.

OK, I admit it. I have the tendencies of a “workflow voyeur”. And you can too!

Ed. there are still lots of ways to look upon other folks workspaces. Basically none of the below are still around though. 🤷🏻‍♂️

Start with a recent discovery, Office Snapshots. Proceed to check out Garrett Murray’s new desk setup, or even his old setup. Rinse and repeat with the Unclutterer Flickr Group. In no time flat, you too can ogle and lust after the workspaces of others.

Here’s an obscenely out-of-date snap of my desktop at home:

Molly + Twitter

Like the sky or the horizon?

Is your knowledge as a programmer tall like they sky or broad like the horizon?

Greg Knauss says the programmer is like the sky, the manager is like the horizon. From Wide vs. Deep:

So here's my theory: Managers must work shallow and wide, while programmers must work narrow and deep. People who are naturally tuned to one particular method of work will not only enjoy their jobs a lot more, but be better at them. I'm a deep guy, I should be doing deep work.

I didn't say it was a particularly insightful theory.

Counter-point: your must prune your knowledge so that it is deep and broad. I spoke to this in my OSCON presentation The Holistic Programmer. From my description:

The Holistic Programmer is about how programmers should take a global view on the stack of abstractions in which they work and also in the spectrum of communications between people and machines.

Therein, I talk of my approach to problem solving. My method is largely predicated on knowing a little bit about a whole lot. I usually frame a problem pretty quickly and get on to making the first attempt at solving it. I might get lucky and actually frame the problem correctly. If I don’t, at least now I’ve got an idea of what the problem really is and I can take another, more informed stab. So on this, Greg Knauss and I disagree.

My main point is that programmers need to take a holistic approach these days, knowing things above and below them in the application or system stack in which they are expert. This is the deep part that Greg mentions. Its not enough to just speak Rails, Django, Linux or Flash. You have to understand the bits that are higher level and the bits that are lower level than what you are working on. Otherwise you’re looking at an incomplete picture.

There’s a notion going around of the “specializing generalists” or some such. I think it’s a great way to go. Given the rapid rate of change in software development, you have to stay nimble. The ability to quickly adapt to new technologies and approaches separates the mediocre programmers from the great programmers.


Epic songs, pick a favorite

Prepare to be polled.

For the purposes of this survey, we’ll take an “epic song” as one with musically distinct beginnings and ends. Said song shall not be a grouping of songs, like on Abbey Road or Born to Run. In other words, it’s only one song on the track listing. Here’s some of the best epic songs that popped into my head:

  • "Bohemian Rhapsody"
  • "Hey Jude"
  • "Stairway to Heaven"
  • "November Rain"

Your mission is to choose one of the above, or write in with your own favorite. If you write in, please do try and provide a link so that we can listen in.

Now, get those opinions flowing. Here, I’ll start. “Bohemian Rhapsody” takes the cake.


The rise of the micro-app

A few weeks ago, Dan Cederholm, of Simple Bits fame, launched Foamee. Foamee lets you track to whom you owe beers. The twist? You manage your beer debt via Twitter. Its a small little app. It only does one thing. Its got a fantastic entry-point. In other words, its really cool.

Erik Kastner reminded me of his app Band Named this week. It finally clicked why its cool this time. Games like Guitar Hero III and Rock Band want you to name your ethereal band. Band Named is a great place to post ideas for said names. The neat thing about Erik’s app is that you can sign in via OpenID (+1) and then fetch your avatar from Flickr or Twitter (FTW). The entry of new band names is easy. And its fun!

I hope this turns into a trend-buzz-meme thing. The world needs more apps that aim to just help you out now and then, not ones that want to become your task management, knowledge capture workflow mega-gizmo-jobby. Better yet, apps that are loosely coupled via infrastructure you’re already using (Flickr, Twitter, OpenID, etc.) taste great.

Plus, these little efforts needn’t result in all-pain, no gain. Dan probably can’t support himself on it, but I bet any money made from Foamee merch will come in handy. Likewise, there are lots of things you could do with something like Band Named, though I don’t know if Erik’s going to take it that direction.

So, call to action: hatch up some idea. Make sure its a little crazy. If pitching it to a VC would get you laughed out of the room, you’re on the right track. If you think the commenters on TechCrunch would skewer you, you’re getting even warmer. Think Uncov would just laugh and point? You’ve probably hit the jackpot. Now: go out, build the sucker and figure out how to have fun with it.

I’ll leave you with this: its all about getting to the point where you’re making dough and having fun.


Anthropomorphized Gems

I couldn’t make it to RubyConf this year. Big frownie face. But, I’m not letting that stop me from imposing my sense of humor on the world. I present to you this year’s helping of absurdity, “Anthropomorphized Gems”!

This is a little tribute to the gems I frequently use and enjoy. Thanks to the authors of the featured Gems and to all those who have released a Gem of any sort. Ruby has gone from a great language with a so-so library to a great language with a great library in relatively short order. Those making their Gems available deserve applause for making that happen.

Administrivia

  • In HD, where available! This is my first foray into uploading video in HD. It takes a while, but the results are pretty nice to look at. On the other hand, none of my G4s seem to handle HD that well.
  • I’m trying Vimeo even though I can’t really make heads or tails of their TOS. If you can read TOS-ese, let me know if it allows them to sell my stuff to NBC, Fox, etc. without me getting a penny. That would be unfortunate.
  • For the record, I did go eat pizza after I finished putting this together.

Rejiggering meets build versus buy

You’re here! That means I’ve managed to convert my site (back) over to WordPress. In the interest of making progress, I had to cut some corners. Currently, that manifests itself as taking my old weblogs Man vs. Machine and Punchline Labs offline while I figure out how to rejigger the content into WordPress.

Don’t stop reading! This isn’t “Yet Another Boy-Have-I-Been-Busy But Now I Promise To Post More” post!

The decision to switch (back) to WordPress is bittersweet. I’d originally switched away to Typo, but that didn’t work out well. On the one hand, Typo went a little sideways, requiring me to poke the database a little before I could post. On the other hand, running a big Rails app like Typo on shared hosting like TextDrive isn’t a recipe for reliability. So a change was necessary.

Point: you’re cooler if you write your own weblog software. Its been pointed out that Jedi build their own lightsabers and thus, so should programmers. I think it’s a wonderful idea and I subscribe to it where I can. However, it’s an idea at one end of a spectrum of pragmatism and I need to live at the other end.

  • On one end, you've got building your own software, all the time, because you're that cool or because you've got an insanely weird domain. So you build your own software. See also, Not Invented Here. Usually, this is the wrong choice.
  • Then you've got building your own lightsaber. You do this because learning is more important than implementing something quickly. This is usually the wrong choice for "production" code.
  • If you need to go quickly but still need to get involved in the domain you're working on, hacking something is a great choice. You don't have to start from scratch and you don't have to learn everything by making mistakes.
  • Finally, you could just buy or download something and tweak it in the ways the creator predicted you would. Adopting hosted web apps is one in the same. This is ideal for times when you just don't care about the domain the app caters to. Bug trackers and mail clients fall into this category for most people.

Counter-point: the writing is more important than the gizmos. To a point, writing my own weblog software is yak shaving. In fact, I’ve contemplated switching weblogs, hosts and a myriad of other choices for month. Thus, with a cleanly shorn yak and nothing to show for it, I finally jumped in the pool and switched. And now, I can write. Awesome!

The writing here is the most important thing. Not so much whether I’ve got Ruby cred because I run a Ruby-powered weblog, web cred because I skipped using widgets to pull in some content rather than hacking it in (I went with widgets) or design cred because I built my own theme. Very few people will come back on those strengths alone. Its the writing stupid! Thus, I’m re-aligning development choices based on removing friction from writing.

I think I made a reasonable choice going with WordPress and hacking DePo Clean. In the end, I just want something that lets me write whatever and whenever I want with as little friction as possible. WordPress fits that maxim. Plus I think Matt Mullenweg and the rest of the Automattic team have pretty good taste, and I can get behind that.


So, what have we learned?

  • Adam is using this post to justify his decisions to himself.
  • Adam changed some software around and hopes you like it.
  • Don't spend too much time waffling on software choices. Just take a shot in the middle.
  • Making an educated choice somewhere in the middle of build vs. buy is important

See, I told you this wasn’t one of those posts where I apologize for not posting for many months and then promise to post more frequently. Though with my luck, I won’t post again for three weeks ;)


Application Design with Garrett Dimon

Did you see Garrett Dimon’s slides from WebJam Session ‘07? You should!

What impresses me is what Garrett’s accomplished in designing his issue tracker without much use of intense graphics. He’s got a few icons here and there, but most of his design is based on color and typography. As someone who is horrible at drawing, it gives me hope that I could some day build cool UIs.


This memory isn't going to manage itself

On a whim, I took a shallow dive into the world of C this weekend. Its been a long time since I delved into C. I ended up spending nearly as much time tweaking a build script with the ever-amusing Rake as I did remembering my C skillz[1]. In the end, my goal was to write a simple program that just reads a file and writes it back out. Nothing cat couldn’t handle, sure, but you gotta start somewhere.

Of course, the first thing you’ll notice when you go from Ruby on Friday to C on Saturday is that OMG I have to write fourteen-billion lines of code just to open a file? Well, yeah, you do. But the language isn’t that awful. Munging file pointers, getting buffer sizes by stating a filename and all that, it’s kinda fun.

What’s not fun? Managing memory. It’d be fun if it wasn’t just an express ticket on the memory leak train. So lots of people have tried to tackle this. I was playing with the Apache Portable Runtime or APR, in concert with all this C and they take an interesting tack in dealing with memory.

Jumping in the memory pool

In the APR world, your application creates one or more pools that you then allocate memory from. You create a “root” memory pool to start off with, but you can create as many further pools as you like.

The idea is that as you transition from one area of functionality to another, you create a new pool. Once you’re done with that function, you destroy the pool and all the memory allocated to it goes away. Including the stuff you forgot about. Which is kinda rad, it being the case that memory leaks are leaks of (human) memory.

This made me think of generational garbage collection. Java’s garbage collector does this clever trick where objects are initially created in a “nursery” with all the other recently created objects. Since it’s typical that objects are created and then quickly discarded, the nursery is basically the low-hanging fruit for the garbage collector to find memory when it needs to.

Bring that funk back over here

Seems to me you could do the same thing with the APR’s pools. Create a new memory pool for every request, for example. Then when you’re done with the request, just delete the pool and don’t worry. The APR folks list examples of assigning pools to starting your application, parsing the configuration and then doing your actual processing. That sounds reasonable to me too.

This is probably not rocket science. In fact, the developers of the APR readily acknowledge that tuning your app to work with this approach to memory management is the trickiest and most contentious[2] facet of developing with the APR. In the next release, they’re working on an alternative, just in case pools aren’t your thing.

Nonetheless, I find it pleasing that the world of C seems to have, perhaps, moved on from “man up and manage your own memory, we are C programmers!” to “hey man, everyone has trouble with this stuff, give this approach a try!” At some point, with some problems, C becomes a necessity. Anything that helps that out is moving the bar higher for the practice of programming.

[1] Indeed, my build yaks are beautifully shorn

[2] Perhaps you could say, opinionated


Alex the cognitive parrot

Best obituary ever:

A shame, then, that he is now, in the words of Monty Python, an ex-parrot.

Alex The Parrot was adopted by a scientist who wasn’t, at the time, involved in linguistics. But, in teaching Alex to speak, she ended up teaching him things like counting and basic recognition of objects. Over the years, this evolved into all manners of experiments on what kind of cognition Alex was capable of.

By the end, said Dr Pepperberg, Alex had the intelligence of a five-year-old child and had not reached his full potential. He had a vocabulary of 150 words. He knew the names of 50 objects and could, in addition, describe their colours, shapes and the materials they were made from. He could answer questions about objects' properties, even when he had not seen that particular combination of properties before. He could ask for things - and would reject a proffered item and ask again if it was not what he wanted. He understood, and could discuss, the concepts of “bigger”, “smaller”, “same” and “different”. And he could count up to six, including the number zero (and was grappling with the concept of “seven” when he died). He even knew when and how to apologise if he annoyed Dr Pepperberg or her collaborators.

Animals are just amazing.


Making the simple complex

Newton’s Third Law of Physics: All forces occur in pairs, and these two forces are equal in magnitude and opposite in direction.

Newton’s Third Law, applied to software: To make something generic is to make the simple things complex.


Making sense of Fitts' Law

Particle Tree has an excellent article on Fitts' Law. That’s the one tells designers to put the Dock and Start Menu on the edges of the screen. You definitely want to check it out, if only for the terrific images used as demonstration.

Of course, if you’re more about the math (bad news, UI design is a lot of math) you could read up on Fitts' Law on Wikipedia.


Check your head

Paul Graham’s latest essay returns to ideas for which I first noticed him. Holding a Program in One’s Head asks what kind of intellectual exercise software development is (spoiler: one that requires focused and uninterrupted thinking) and then suggests guidelines for effective programmer working spaces (small teams, distraction-free workspaces). See also: Test #8 on the 12 Steps to Better Code.