Andrew Cox


Goodbye Roo. I’ll miss you, little buddy.

My first cat, Bean, started to exhibit aggressive behavior when he was a little over a year old. We quickly came to the conclusion that it was because he was alone all day and needed someone to keep him company. In desperation, we called up the same Tonkinese breeder that we adopted Bean from and asked if she had any kittens available. She said she just had one kitten left from her last litter that no one had adopted yet. He had the same mom as Bean, was 6 months old, and was a “natural solid” (brown).

It wasn’t a color I particularly liked and the fact that no one had adopted him in 3 months since he was eligible for adoption was a red flag. But, if we wanted another Tonkinese now, this was our only choice. So, Beth and I hopped in the car and drove the 3 hours from Nashville to Atlanta to check him out.

When we got there, Roo was hard to find in a house full of about 20 cats. I remember him running away to his food dish and climbing up the bookshelves to get away from us as we tried to hold him. Not promising. If we had any other option, I don’t think there’s any way we would’ve chosen him. But, we were desperate, and decided to take a chance.

On the car ride home, Roo had a distinct odor and a very oily coat. Beth’s hand smelled from holding him in her lap on the ride. He didn’t like being pet on the head and wouldn’t look us in the eyes.

We thought we might’ve made a mistake.

Once we brought him in to meet Bean, he quickly endeared himself to us.

Bean wasn’t happy to have a kitten in the house and attacked Roo almost immediately. Roo would lay on his back and stretch out his paws toward Bean in a gesture of good will. Bean would respond by using his paw as a club and whapping him repeatedly in the head. Either that or he’d bite him in the neck to hold him down and kick him with his “rabbit feet”. This went on for weeks, but Roo never got upset nor fought back.

Roo’s fur became incredibly soft and his odor went away within just a few days. Bean’s behavior issues disappeared as soon as Roo came in the door. At first I think it was simply because he was able to take his aggression out on Roo, but ultimately they became good friends. Taking a chance on Roo paid off.

Roo was the opposite of loyal - he loved everyone. He wanted to be in someone’s lap at all times, and had a knack for sneaking into laps without the lap’s owner noticing. He was so small and sneaky that you’d be watching TV and look down and notice that there was a small cat in your lap without any idea of when he got there. If you took him off your lap to get up, he might slip back on before you had a chance to stand up, not willing to believe that his lap time was over for the evening.

I would often joke when I went to sit on the couch, “Are there any little kitties that want to sit on my lap?” Roo would usually be in my lap before I’d even completely sat down. Roo was a constant companion. In 10 years, not a single TV show or movie was watched in my house without Roo in someone’s lap (usually mine).

I had to warn visitors that he might jump from the ground up to your shoulder to snuggle with you. I never quite broke him of that habit (I secretly thought it was pretty cute).

He learned to use the toilet in just a month (though Bean was a good mentor). He fetched like a dog. He liked to be grabbed under the armpits and dragged across the carpet on his back.

He loved food … maybe even more than laps. Most days when I’d bring him his food, he’d greet me with a loud meow and then flop on his side (sometimes actually getting all 4 feet airborne), and wait expectantly for a tummy rub. He was always a happy little guy. As long as he had food and people, he was happy.

It took a couple years of work, but he finally started looking us in the eyes too. He came a long way from the shy little kitty that no one else wanted to adopt.

A little over a month ago, his belly started to get noticeably larger and he was hacking a lot, as if he had a hairball he couldn’t get up. I scheduled a vet appointment, thinking that they’d be able to prescribe some medicine to help him get the hairball up. Worst case, I thought he might need surgery to remove the obstruction. Days before the appointment, his breathing became noticeably labored.

At the vet, they took an X-ray, which showed that his belly was full of fluid … and so was his chest. His lungs were about 1/4 of the size they should’ve been, crowded by the fluid. His breathing was too ragged to get a 2nd X-ray on his back, so they sent me to the emergency vet across town where they could put him in an oxygen chamber.

Once at the animal ER, they rushed him to the back, pausing only to ask me if I authorized CPR if his heart stopped beating. I was not prepared for this. I stammered, “Um …” I glanced at the waiting room full of pet owners.

“No.”

About ten minutes later, the vet called me back and gave me the prognosis. It wasn’t completely clear because the fluid obscured his organs in the X-ray, but the most likely cause was cancer. The other possibility was advanced heart disease. In either case, we were looking at 3 months to a year at most with constant care. She said I’d need to decide between submitting him for more extensive tests overnight or to “let him go”.

As she was explaining this to me, I was listening intently, but my brain was slow to process it. I remember the “let him go” line washing over me, but not sinking in.

I asked her to repeat it. After hearing it the second time, I got lightheaded and had to sit down. She clearly wasn’t going to tell me which choice to make. This was my decision. Although the tests would be expensive to get a definitive diagnosis, money was not the issue. I was trying to think of what would be best for Roo.

Roo would have to be kept on oxygen at least overnight while they sedated him and drew the liquid from him to send away for tests. We might not find out the results for several days more. They may have been able to relieve some of the fluid to allow him to breath unassisted, but he might also have to be brought back in if his breathing degraded. I didn’t want to put him through all that just for my own piece of mind to know that I’d done everything I could. He would’ve been so scared and the outcome would’ve been the same.

I called Beth and told her the situation. She said the decision was mine and she’d support me in whatever I chose. She assured me that money was not a consideration.

I asked to talk to the vet one more time and have her walk me through the options again. Although his diagnosis left some small room for doubt, the decision was clear. I told the vet I wanted to put him to sleep. Saying the words out loud was devastating. I barely finished the sentence as I started crying for the first time. Although she wouldn’t tell me which choice to make, after I made the decision she affirmed it by saying that’s what she would’ve done if it were her cat. That was a small comfort that meant a great deal to me.

I called Beth back and told her my decision and asked if she wanted to say goodbye and be with him in his final moments. I cried in my car as I waited the 30 minutes for her to drive from work.

Once she arrived, the vet brought him in to us, wrapped in a towel. He seemed weak, but happy to see us. They gave us time alone with him. I held him in my arms and he rested his head on my shoulder. Beth and I pet him and told him how much we loved him and what a great cat he was. He purred.

After a couple minutes, we rang the bell for the vet to come back in. I held him on my shoulder and stroked his head while she slowly injected the pink fluid. He struggled briefly, and then died in my arms. I handed over his limp, lifeless body to the vet.

My little buddy was gone forever.

I am heartbroken. This has been the hardest week of my life. I knew Roo wouldn’t be in my life forever, but he was taken far too soon. He was only a few months past his 10th birthday. He was so small and energetic; he still seemed like a kitten to us.

Two days after he passed, I gave Bean his food and then turned to feed Roo out of habit, and broke down and sobbed.

My tears, my sadness, are beautiful because they are the consequence of love, and my grieving makes me love the world and life all the more.
– Norman Fischer

After a week, I still have moments of sadness, but they’re starting to be crowded out by happy memories. His last gift was to make me think about the things and people that are important in my life. I’m fortunate to have such great friends and family who have provided support for me this past week.

I’m thankful that I got to say goodbye. I’m thankful that I was able to comfort him in his last moments. And I’m thankful that we took a nice, long nap together the day before.

I was lucky to have such a special little guy in my life for almost 10 years, and Roo will always be in my heart.

So long, little buddy.

The important thing is to use one [maturity model], and to use it deliberately with a genuine Kaizen approach:

  • Pick a skill
  • Assess your proficiency
  • Make a decision to modify your behavior in a deliberate way
  • Perform this new way
  • Evaluate your skill level
  • Repeat

Elegant Code » On Measuring Agility, Craftsmanship, and Everything Else

Ran across this while researching “Agile Maturity Models”. Great approach, but with two missing pieces:

  1. Knowing which skills that are desirable
  2. Which order to tackle the skills
Studying for pleasure is fine, if you’re honest about the fact that that’s what you’re doing. If you’re studying to train and get better, you need an action component alongside it to max out the chance of learning the lessons.

Action vs. Learning? A False Dichotomy, My Friend!

I’ve recently been evaluating my “pleasure” reading vs. “study” reading. I’ve had to admit to myself that just because I’m reading a technical book or blog post, that does not mean that I’m learning something.

When I read long articles or books that I want to learn something from, I now take notes on my iPhone with the Elements app. If I’m not taking notes, then I have to admit it’s just for pleasure (not that there’s anything wrong with that).

Who is SkillBonsai for?

Who are the target users for SkillBonsai?

When creating any application or website, it’s helpful to identify the archetypes of your target users. It’s a common trap for developers to think of themselves as a “typical user”. Personas allow you to step back from your application and empathize with your users.

Going further, I think it’s helpful to explicitly prioritize your personas as well as create anti-personas. Sometimes it’s just as important to remember who your application isn’t for as much as who it is for.

User personas

Here’s a prioritized list of the personas I’m targeting for SkillBonsai.

Sam Wainwright

Sam is an intermediate web application developer. He considers himself a Software Craftsman and is always looking for ways to become a better software developer.

He’s a motivated self-learner. Just like his dad, he believes that a good book is the best way to start learning a new subject. In addition to learning the basics, he also wants advice for the best ways to practice that new skill.

Besides software development, he’s also interested in becoming better at a number of other pursuits including Ultimate Frisbee, meditation and yoga. With all of these interests, he’d like a way to prioritize and keep track of what he’s currently trying to get better at.

Julie Anderton

Julie works in Professional Services at an enterprise software company. Her company’s Product Development team just started a new project with Ruby on Rails. She really wants to get out of the billable hours grind and knows that to get a spot on the Product Development team, she’s going to need to get up-to-speed with a number of new technologies.

She has solid experience with web development skills such as HTML, CSS, and JavaScript, but will need to understand Git workflows, Ruby, Rails, and automated testing. If she could learn how to contribute to open source projects, that would be a feather in her cap.

Bob Loblaw

Bob has recently been laid off from his law firm. The prospects for lawyers in his city are not great, so he’s looking for a career change. He knows there’s demand in the software industry and is motivated to learn the skills necessary to get a job in the industry as soon as possible.

He’s very computer literate and even took a programming class in college, but he hasn’t programmed anything in 10 years. He has lots of free time and wants to spend it as economically as possible, learning to program in a language and platform that will get him a good job soon.

Art Vandelay

Art recently finished reading The 4-Hour Workweek and has a great idea for his “muse”. He doesn’t know the first thing about starting a company, but knows that everything he needs to know is learnable.

He’s heard about the Lean Startup methodology and wants to know how he can use that to test and launch his business. Meanwhile, he’d like to bone up on the core elements of running a business without throwing away time and money on a real MBA.

Izzy Mandelbaum

Izzy is a self-proclaimed autodidact. He’s interested in learning more mathematics simply because he likes the mental exercise. He heard about Khan Academy, but doesn’t know where to start.

He’s also interested in weight-lifting and chess. He doesn’t enjoy losing, so he wants to do whatever possible to beat Jack Klompus at chess.

Dr. Van Nostrand

Dr. Van Nostrand has a PhD in Computer Science. He has a clear idea of what he thinks is the best progression from an intermediate developer to expert. He’d like to be able to outline a set of required reading along with practice exercises to get a student ready to apply to his own online course targeted at intermediate software developers.

Anti-persona

Who is SkillBonsai explicitly not for? Lloyd Braun.

Lloyd Braun

Lloyd has a decent, well-paying job. He firmly believes in a clear work-life balance with a heavy emphasis on “life”. He has no interest in software development or “self improvement”.

Narrowing the scope

On one hand, I have a pretty broad spectrum of personas I’m targeting with SkillBonsai - from software developers to weight lifters. On the other hand, I’m explicitly not interested in targeting people that are not already motivated to learn on their own.

In other words, if you’re already interested in learning or getting better at something, you’re in the right place.

Do Research-based Study Methods Apply to Learning Webcraft?

Last week, I enrolled in P2PU’s free How to Teach Webcraft and Programming to Free-Range Students course. The first assignment was to read Organizing Instruction and Study to Improve Student Learning, a 2007 Institute of Education Sciences study that “includes a set of concrete actions relating to the use of instructional and study time that are applicable to subjects that demand a great deal of content learning, including social studies, science, and mathematics. The guide was developed with some of the most important principles to emerge from research on learning and memory in mind.”

The 7 recommendations

The report was organized around 7 recommendations and how you can apply them in the classroom. Each recommendation is weighed against how strong the supporting research is along with common pitfalls for applying the recommendations and how to avoid them.

I recommend reading the whole report to get the context of the studies that support, but the summaries of each of the 7 recommendations are available on IES’ overview of the study.

Since you can read the summaries on the study’s overview page, I’m mostly just going to talk about how well the recommendations apply to learning software development, and how using a digital medium for teaching is either a benefit or a hinderance.

1. Space learning over time

Students should be exposed to each main element on at least 2 separate occasions, preferably spaced out over weeks or months rather than days. This is something I had not considered for SkillBonsai. On one hand, many skills related to software development build on each other, so are automatically reinforced as the student progresses. Additionally, it’s often enough to know a technology or technique exists and be able to reference it when you need to apply it. Rote memorization isn’t as important for many concepts in software development.

I do believe this concept could be put to use though. For some skills that are worth committing to long term memory, I could email periodic, spaced reminders that include links to refresher or review versions of the initial instruction. Having a reference version of an instruction is valuable in its own right, so this is definitely something I’m going to consider.

The report also added a note that may address some issues with spaced learning as it applies to software development:

One limitation of the literature is that few studies have examined acquisition of complex bodies of structured information.

2. Interleave worked example solutions and problem-solving exercises

I really like this idea and think it applies very well to both software development and online learning. I think one of the more difficult aspects of learning software development is knowing if your code is well formed. Seeing worked examples of good code should be a great way to see if your own code looks similar in terms of simplicity and readability.

The study also recommends that you decrease the examples as you progress:

As students develop greater expertise, decreased example use and correspondingly increased problem solving appears to improve learning.

3. Combine graphics with verbal descriptions

In addition to graphics or video, you should also provide an audio track since the brain can process the visuals better when they don’t have to use their eyes for both reading and interpreting the graphics.

Graphics are often not as obvious in the world of software development, but perhaps the rise of screencasts on the web indicates that video with an audio voiceover is an effective teaching aid. There are other studies, however, that indicate videos are often misleading in how much information is retained by the student.

4. Connect and integrate abstract and concrete representations of concepts

The studies show that students struggle more with abstract representations initially, but are better able to use the learned concepts in different contexts.

I’m not exactly sure how to apply this to software development. Is the bowling kata an example of an abstract concept? Or are we talking about visualizing the MVC framework? I’m going to need to think about this one a little more.

5. Use quizzing to promote learning

If you think of quizzing as a means to help students understand what areas they need to study rather than an evaluation for a grade, quizzing suddenly seems much more powerful.

One concept that I will definitely adopt is the idea of pre-quizzing to prepare students for the material they’re about to learn. This could work very well with SkillBonsai when using an external resource like another site’s tutorial or a chapter in a book.

But how do we validate that a software solution is “correct”? Aside from simple “check the output” tests, perhaps we could add a more subjective checklist for the student to do a self-check on the quality of code, including:

  • Do your variable and method names express intent (i.e. are they named clearly)?
  • Are your methods less than 10 lines long?
  • Are your classes doing more than one thing?

Each quality question could provide links for the student to review what each of those quality checks means in detail if they need a refresher. We could also encourage them to have their solution checked by someone in their local or online programming community.

I think there are limits to what we can do with online quizzing for software development, but there’s a lot of untapped potential with simple multiple choice or fill-in-the-blank quizzing.

6. Help students allocate study time efficiently

It is our belief, however, that students’ ability to manage their own studying is one of the more important skills that students need to learn.

This is probably the key takeaway for me. Students are notoriously poor at “metacognition”, or knowing how much they know. This really resonated with me and I think it’s one of the most important aspects I can bring to SkillBonsai.

In addition to quizzing, the study suggests that students rate each question based on their confidence that they know the answer (before seeing any of the possible answers). This allows them to evaluate how much they think they know and direct them to the areas that need the most study.

7. Help students build explanations by asking and answering deep questions

At first I thought this would be a nonstarter for online learning, but I think there’s a simple solution: ask students to write a blog post about a question or topic. Blogging is a fantastic way to explore a topic and organize your own thoughts. There’s really no way to validate whether a student did it in any automated way, but I don’t think that should be a deterrent.

Do classroom learning methods apply software development?

So, do these classroom instruction and study methods apply to learning software development? I think the short answer is absolutely.

On the other hand, many of the recommendations apply to learning as opposed to improving skills. Is software development more similar to learning history than to becoming a better artist, musician or athlete? If not, does that imply that we should be using different methods to complement the learning methods listed above?

Here are some ways that I think learning software development is different from learning history, math or a foreign language:

  • Most problems are unique (though they may have common foundations or principles)
  • There is a wide range of “correct” answers
  • You need to be both aware of a broad range of technologies as well as being well-practiced in core fundamentals

Weaknesses of online learning

The most obvious weakness of online learning applications is that it’s often hard or impossible to validate that a student has completed assignments correctly. For my purposes, I’m completely ok with this. My target audience is the motivated self-learner, so if someone wants to say they completed an assignment (like writing a blog post) and they didn’t, then so be it.

However! It is important to be able to provide timely feedback to foster their metacognition and head off any misconceptions as early as possible. For that reason, I think many of these core learning concepts are very applicable.

Finally, the report issued the comforting thought:

As with professionals in other fields, such as medicine, that also seek to rely on a base of evidence and yet must deal with important practical problems on a daily basis, educators must make the best use they can of the current knowledge as it is, even while being mindful of its imperfection.

So, even if we can’t apply all learning principles to every subject, the more we know about effective instruction and learning techniques, the better we can work them into our education applications and material.

Coderetreat: A first-time facilitator’s perspective

On Saturday, I helped facilitate the Global Day of Coderetreat 2011 in Pittsburgh. Over 2000 people attended in 90 cities on 6 continents. There were more coderetreat events on this single day than in the combined 3-year history of coderetreats.

Coderetreat is a day-long, intensive practice event, focusing on the fundamentals of software development and design. Much has been written about the format and experience of coderetreats, including this excellent fictional account of a coderetreat attendee, so I’ll focus instead on my perspective of the event as a first-time facilitator.

The goals of Coderetreat

In preparing for my role as a facilitator, I tried to dig deep into what the goals of the event were. The single, primary goal that I ended up with was:

Learn how to write code that adheres to the rules of Simple Design in order to minimize the cost of change.

Now that’s something both developers and managers can get behind. It reads like a user story explaining not only the what, but also why you would want to adhere to the rules of Simple Design.

In addition to the primary goal of writing code to minimize the cost of change, a coderetreat has a ton of secondary benefits including, but not limited to:

  • Improve problem solving skills
  • Try out different programming languages
  • Experience and improve pair programming and TDD
  • Learn your tools
  • Pick up tips from others’ development workflows and environments
  • Socialize and network with local developers
  • Spread the Software Craftsmanship bug
  • Expose people to new object-oriented design concepts

Is a coderetreat the absolute best format for achieving this goal? That’s a topic for another post. But, I do believe you’d have a hard time finding a better way to level up your software development skills in under 10 hours.

Takeaways

This event was awesome. I think I got as much or more out of it as a facilitator than I did as a participant. But how can we make it better?

Set expectations before the event. We need some sort of a “Before You Arrive” kit that gives a very brief overview of the event and tells you how to get the most out of the day. This should include everything from setting up your development environment to bringing enough business cards to share.

Make sure you have plenty of whiteboard space. During a coderetreat, there’s a lot to take in. I love having information radiators for active and passive learning. There are a number of things that I wanted to convey to the participants throughout the day, including:

  • Wi-Fi credentials
  • Twitter hashtag
  • The goal of Coderetreat
  • The 4 rules of Conway’s Game of Life
  • The 4 rules of Simple Design
  • The TDD cycle
  • List of buzzwords and concepts
  • Mark Twain quote, “I didn’t have time to write a short letter, so I wrote a long one instead.”

Put more focus on goals at the beginning. The primary goal should be written clearly on a whiteboard to remind everyone throughout the day why they chose to give up their Saturday to program. In addition to the primary goal, I think I could spend more time calling out secondary goals like getting better at pair programming and test-driven development, learning your tools, exposing new OO concepts, and spreading the software craftsmanship bug. If the participants leave with a firm idea of the goals of the event, it will help to spread the idea of coderetreats.

Don’t push the challenges before the participants are ready. Due to the big event, it was too tempting to pull out the whole bag of tricks for the sessions. I think it would’ve been best to give cues to focus on fundamentals for the first 3 rounds and only start to introduce more modest constraints like ping pong pairing and TDD as if you meant it late in the day, if at all. If you’re working with developers who have all been to a coderetreat before, then you might be able to pull out things like “no conditional statements” or “use verbs instead of nouns”, but I think otherwise they put undue hardship on the teams. Learning pairing, TDD, simple design, and even new programming languages is more than enough for most people.

Ask more probing questions during walk-arounds. Much of being a great facilitator is having a strong understanding of OO concepts yourself. This allows you to ask the right questions to stretch a practitioner and guide them toward simple design. I still have quite a way to go on this front, but I think I would do well by reading up on some of the OO concepts and forming questions that I can ask ahead of time.

Write down a list of buzzwords and concepts during the event. If you’ve been to a number of conferences and are interested in Software Craftsmanship, you might take for granted how many buzzwords you regularly sling around. People don’t often want to expose their ignorance, so they may not ask what these buzzwords mean. I think it would be really useful to make note of buzzwords and concepts that pop up in conversation throughout the day like, “DRY”, “YAGNI”, “tell, don’t ask”, “law of demeter, “loose coupling”, and “SOLID design principles”.

Code swapping for the last session could be risky. I’m a big fan of swapping code after the 5th session because it reinforces the primary goal of minimizing the cost of change. When new developers have to deal with an existing codebase, your efforts for clean code are truly put to the test.

There was a fair bit of good-natured ribbing about code quality after swapping code with another pair after the 5th session. If there is a wide gap in skill levels, or people don’t know each other very well, this has the potential to lead to hurt feelings. Use with caution.

6 sessions may be too much for one day. One comment that received a lot of nods at our closing circle was that they would have gone home totally satisfied after just 5 sessions. The 6th session left them a little fried and we only ended up with 8 people (out of about 50) for the traditional post-coderetreat beers. I had a similar experience when I participated in a coderetreat. On the one hand, that feeling of pushing your mind to the limit and leaving completely fried is kind of nice, but perhaps it comes at the expense of leaving people with more energy to challenge their development practices at work come Monday morning.

The rabbit hole

Once you start thinking about writing software using the principles of Simple Design, it’s like opening Pandora’s Box. You become curious about some of those buzzwords I mentioned above like, “loose coupling”, “high cohesion”, and “single responsibility principle”. You realize you’re peering down a rabbit hole and start wondering just how deep the rabbit hole goes …

Why I love Halloween

Halloween is probably my favorite holiday. I say “probably” because Christmas is pretty awesome. It’s close.

When I was working on my Halloween costume this year, I was trying to juggle a few other priorities and had the momentary thought, “Why am I doing this?” I didn’t have any big Halloween parties to go to and it’s not exactly a tradition to dress up for Halloween at my office (I think I was the only one this year).

After a bit of reflection, I decided that even if I only wore my costume to work (yes, I always wear my costume to work), it would still be worthwhile.

What I love about making costumes

Why do I like making Halloween costumes?

  • Creativity
  • Problem solving
  • Real artists ship

So there’s the obvious creativity aspect. Since I tend to be on the more ambitious end of the Halloween costume spectrum, I need to start thinking about my costume at least a month in advance. I love trying to think of something unique that only 10-20% people get. When only a small percentage of people understand your costume, they get excited. It’s like being in on an inside joke.

Problem solving. My last two costumes in particular have involved a lot of schematics and trial and error. In 2009 I was working with chicken wire and PVC pipe. This year, it was all about 3D sprites built out of cardboard.

Finally, I think the best aspect of making a Halloween costume:

Real artists ship. – Steve Jobs

The time and money pressures of making a Halloween costume force enough constraints to make it an interesting problem. No matter how early I start making my costume, I always end up tweaking it up to the last minute. When October 31st comes though, you gotta get out the door with a costume one way or the other.

I think there’s a really interesting parallel with shipping software that I hadn’t considered until this year. When you go to work or your party in your homemade costume, you know every single flaw of your costume. You know it could be better. But you know what? It doesn’t matter. If you came up with a unique idea and it resonates with people? It doesn’t matter if people can see your tape starting to curl up on your cardboard sword. Make something cool and ship it!

What makes a good costume?

To be a good costume, I think it has to be either:

  1. Unique
  2. Really, really well done

If you’re going as Boba Fett or Jack Sparrow, you’d better be able to stand in as their stunt doubles in “Star Wars: Rise of the Midi-chlorians” or “Pirates of the Caribbean V: Return to Disney World”.

For example, in 2007, Beth went as an Engineer from Star Trek TOS (The Original Series). She bought an authentic Gene Roddenberry insignia patch and had her mom sew her a Starfleet Engineering uniform in 2 days:

Beth as Starfleet Engineer

That costume was solid. You could probably sell it on eBay to a Trekkie and they’d be the talk of the next convention.

I usually take the other tack - the unique costume. Not that I’m the first person to think of a particular costume, but hopefully I’m the first person you’ve seen with that costume.

The costumes

Here are my costumes from the previous 5 years. In 2007, I inadvertently started a theme of Saturday Night Live alum movie characters.

The Jerk

This is Navin R. Johnson (Steve Martin) from the last scene of “The Jerk”.

What About Bob? and Starbuck from Battlestar Galactica

In 2008, I went as Bob Wiley (Bill Murray) from “What About Bob?”, one of my favorite movies. The unique element here is “Gil”, the live goldfish around my neck. This one didn’t take too much work to put together (I bought the shirt online), but I loved the idea of having a live prop (don’t worry, he found a happy home in a coworker’s aquarium).

Beth went as Starbuck from Battlestar Galactica. Notice a theme?

Me as The Three Amigos

The pinnacle of my Halloween costumes - me as all 3 of the “Three Amigos”. It was the 3rd in my Saturday Night Live alum trilogy. It was also my most recognizable costume in years. Typically I wouldn’t go for something so obvious, but I’d wanted to do a multiple costume for years. This one special for 2 reasons:

  • The novelty of going as 3 characters
  • The execution

It took me about 50-60 hours and cost more than I’d like to think about. I made 2 full-size dummies from chicken wire and PVC pipe and Beth and her mom tailored and designed the outfits from Goodwill suits. Oh, and it has fully-articulated joints. At a party later that night, I fashioned a rod to each of their hands so I could perform “My Little Buttercup”:

This one’s going to be tough for me to top.

The Hero from Atari 2600's "Adventure"

And finally, here’s my costume from this year. Do you recognize it? As I said, my personal barometer for costume success is about a 10-20% recognition percentage, so it might not be immediately obvious. If you grew up with an Atari 2600, you might be able to guess it.

I went through the whole design process with this one - research, sketching, and even paper prototypes. Making the pixelized “sword” to scale was a lot of fun and gives me some new techniques I could potentially use for classic video game characters in the future …

Did you dress up for Halloween this year? Why or why not? Let me know on on Twitter

Ruby Tuesdays

Since switching jobs in May, I’ve done very little Ruby development. I have, however, been to several Ruby and Rails conferences that have kept my interest in Ruby alive. If anything, I think I’m even more eager to get back into coding more regularly.

There are a few real Ruby projects that I plan on digging back into very soon, but I also want to set aside some time to learn and keep up with the rapidly-evolving Ruby ecosystem.

There are just so many great resources in the Ruby community these days that it takes a concerted effort just to keep up. My attempt at a solution is to batch my Ruby learning into one day a week. Naturally, that day of the week should be Tuesday. My plan is to spend 1-3 hours each Tuesday digging into some podcasts, blogs and code.

Resources to learn from each week

Here’s my initial list of resources I plan to draw from:

My first Tuesday

So, tonight was my first Ruby Tuesday. Um … wow! 1 hour is nowhere near enough time to cover all of these resources.

I tried to listen to the 1-hour Ruby Rogues podcast while reviewing the Ruby5 notes. It was a little hard to divide my attention between the two and I didn’t even finish reading through the Ruby5 notes. I did end up learning a lot of useful stuff though, so the hour spent was very worthwhile.

It’s clear that 1-hour a week isn’t nearly enough to keep up with Ruby. I’m going to need to decide on the depth and breadth of my learning. I think next week I’ll do a few things differently:

  • Start with the week’s Railscast
  • Next read Practicing Ruby
  • Finish with the Ruby Weekly list
  • Spend 2-3 hours instead of 1

That will at least give me a different set of resources than this week and I can see which provide the biggest value for my time. We’ll see how it goes!

Eating Clean for a Month - My Whole30 Experience

Softcore Albacore

Photo from Nom Nom Paleo

I just completed 30 days of eating and drinking clean with the Whole30 challenge. I’ve been doing some form of a Paleo diet off and on for about 2 years, but the Whole30 challenge really takes it to the next level. You can read about the whole challenge on Whole 9 Life’s site, but it’s basically a super-strict form of the Paleo diet for 30 days:

  • Eat real, clean foods: meat, fish, eggs, tons of vegetables, some fruit, and plenty of good fats
  • No grain, dairy, legumes, white potatoes, alcohol, preservatives, or sweeteners of any kind (including artificial)
  • Focus on quality, not quantity
  • No “paleo-ified” foods like paleo pizza or paleo pancakes
  • Don’t weigh yourself

The purpose of the challenge is to heal your digestive system and see what it feels like to eat an ideal diet for a month. The theory is that even trace amounts of some foods (like milk or wheat) can damage your digestive tract and reset your progress. After you make it through the 30 days, you can slowly start adding back some of the “lesser evil” foods (like dairy and legumes) to see how sensitive you are to them.

My experience

So how’d it go? Well, I was about 99% compliant. I had one small glass of champagne to toast my friend’s wedding and the food at the two weddings I went to undoubtedly had sugar and butter in them. I did stick with the most paleo food options available though. I’m claiming success.

The most noticeable outcome is that I lost 15.5 pounds. Of course, Whole30 advocates will tell you that weight loss is not the point. My goal was not to lose weight, but I did want to get rid of some belly fat. My belt loop is now about 1 1/2 notches looser than a month ago and my stomach is the flattest it’s been since college.

I had a few headaches in the first few days. But, after the first week, I felt more clear-headed and had more sustained energy throughout the day.

Was it hard? Not too bad! The social pressure was by far the hardest. I had 3 major obstacles to success in my month of clean eating - 2 weddings and a 3-day conference in New Orleans. Hey, if I can make it through 5 nights of free alcohol and delicious food, anyone can. One of my favorite quotes from the Whole30 description sums it up well:

Quitting heroin is hard. Beating cancer is hard. Drinking your coffee black. Is. Not. Hard.

The toughest for me was the 3rd obstacle - the wedding of one of my best friends from college. Frankly, I felt a little socially awkward drinking a bottle of water instead of holding a bottle of beer or a glass of wine. I actually did quite well until late into the evening when my friend noticed I hadn’t been drinking all night. It was hard to say, “I’m not drinking on your wedding day because I’m doing this self-imposed diet challenge.” I felt worse about disappointing him than any lack of personal enjoyment I might have had from drinking. I did toast him with one small glass of champagne, but that was the only alcohol I had for the whole month.

During these difficult social situations, I frequently thought of the tough love from the Whole30 challenge:

You’re all big boys and girls. Toughen up. Learn to say no (or make your Mom proud and say, “No, thank you”). Learn to stick up for yourself. Just because it’s your sister’s birthday, or your best friend’s wedding, or your company picnic does not mean you have to eat anything. It’s always a choice, and we would hope that you stopped succumbing to peer pressure in 7th grade.

Going out to eat is nearly impossible with the Whole30 rules, so it really forced us to plan ahead and make almost all of our meals at home. We added a ton of wonderful new meals to our recipe book (mostly from the highly-recommended Primal Blueprint Quick and Easy Meals by Mark Sisson of Mark’s Daily Apple).

I wasn’t too hungry most of the time. Eating a lot of protein at every meal allows you to go pretty long without feeling hungry. I even skipped lunch once because of back-to-back meetings and was completely fine (which is not the norm for me). When I got hungry between meals, apples, nuts and hard-boiled eggs make excellent, satiating snacks. When you get hungry on this diet, you just get hungry - you don’t turn into a carb-craving dizzy hulk.

I also started seeking out vegetables. When you’re limited to meat, fruits, vegetables, nuts and seeds, you learn to like vegetables because you know they’re going to be satiating.

The aftermath

After I completed the 30 days, I indulged with a day that included Mexican for lunch (burrito, enchilada, chips & salsa), burger & chips for dinner, and several beers. The food and beer were definitely a treat, but I paid for it the next day. My stomach was not pleased with me and I didn’t end up going to my morning yoga class as a consequence.

The most convincing thing for me that this diet is right is not how good I feel while I’m eating clean (which is pretty good), but just how bad I feel when I’m eating poorly (which is extremely gassy and bloated). If you’re eating crap all the time, your body surely gets used to eating inflammatory foods, but I don’t think your body is going to adapt to a diet of grains and dairy in one lifetime.

Keys to success

Interested in taking on the challenge yourself? Here are my keys to success:

  • Do it with your partner - if you’re living with someone that’s not eating clean too, it’s going to be tough
  • Identify your biggest obstacles for the month so you can prepare (mostly mentally)
  • Get a good paleo cookbook (I highly recommend Primal Blueprint Quick and Easy Meals)
  • Plan all your meals each week and get everything in one shopping trip
  • Get a slow cooker - this was a new device for us and it was a godsend to have tender, seasoned meat ready for us most nights

Whole 9 Life also recommends not to start a Whole30 challenge over the holidays, but if you start today, your last day will be the day before Thanksgiving. Do it!

My intention

In yoga, we often start by setting our intention - both for our practice and for the rest of the day. So what do I intend to do now that I’ve made it through the challenge?

I’m going to loosen the reigns on the rules just a bit. I’ll start drinking a glass or two of wine in the evenings and beer only on social occasions. I’m going to consider eating some dairy and legumes in moderation (still need to research this a bit more). I’m not going to worry about trace amounts of sugar in sauces or condiments. When I eat out, I won’t worry as much about whether the food was cooked in butter or if the sauce has sugar in it.

But there are some new things that I definitely plan to stick to. I’ve learned to like my coffee black. I’m going to avoid diet sodas. I’m going to stick to cooking eggs with coconut oil rather than PAM. I’m going to eat more fruits and vegetables.

Instead of doing a weekly cheat meal or cheat day that many diets recommend, I’m going to try to have more mindful indulgences. I really like Whole 9’s take on the cheat day (part I and part II). They encourage thinking critically about going “cheating”, and enjoying it when you do. The rationale is that your body can handle eating junk on occasion and it’s simply more practical to enjoy celebrations as they come rather than abstaining just because it’s not that specific day of the week. It also means no more binging on carbs and candy and spiking my weight by 5 pounds in a single day.

Finally, I’m going to continue educating myself on why certain foods are thought to be bad and be more mindful of how food affects me. I’m curious to find out how sensitive I am to dairy and legumes. I just found out that tomatoes, eggplant and peppers are in the nightshade family, which can be bad for the gut and joints. Excellent! Another category of food that might cause trouble sigh. The journey is just beginning.

If you’ve read this far, you might want to follow me on Twitter.