A hypothesis about the number of assertions in a test

We have been discussing testing styles at work. My team's preference is split on one-assertion-per-test. This describes a hypothesis I have about developers in both camps.

Simple Memoization in Scala

An example of memoizing an expensive operation in Scala, similar to Ruby.


Detecting Scala Extension Classes at Runtime

An example of how to detect classes at runtime to implement a convention-over-configuration extension strategy in Scala (or Java).

Scala parser performance with v2.10.x

A quick fix to a performance issue with Scala v2.10.x and JDK 7+

Why csscss doesn't remove duplication for you

Reasons behind csscss's design.


a CSS redundancy analyzer that analyzes redundancy.

Your Identity ≠ Your Code

We are more than our code.


My Thoughts on Refinements

Ruby 2.0 refinements have been a hot topic lately. Here are my thoughts on the debate.


Big Changes Again. Joining Collective Idea.

Hanging my freelancer hat and joining the awesome crew at CollectiveIdea.

Sharing a desk and internet

After two months in the new office, I realized we’re going to need to a lot more stuff to fill up the space: couch, big screen, etc. You know, the essentials?


New iPad App Deployed: Spatik

For the past few months I’ve been helping Nicholas Patten take his vision and translate it into an iPad App. I’m proud to announce Spatik was accepted today and is now available in the App Store.

Tweetstream is now Web Scale

Over the past few months, I have been working with Downstream on one of their products Tweetstream. In addition to building features, we have experienced a significant issue with the infrastructure.

December Northern Michigan Web and Mobile Meetup

Last night we had our December Michigan Web and Mobile Meetup. We only had a couple guys due to family commitments, but that’s understandable since we’re only a week away from Christmas.

November Northern Michigan Web and Mobile Meetup

Last night we had our second Northern Michigan Web and Mobile Meetup and I think this went better than our first. This week I grabbed a couple pizzas from Chef Charles in Elk Rapids, that guy can make a tasty pie. In fact I still have a couple slices leftover for lunch today. This week we watched Gary Vaynerchuk’s RailsConf 2010 talk.

First Northern Michigan Web and Mobile Meetup

Last Thursday we had our first Northern Michigan Web and Mobile Meetup meeting. While eating pizza, we watched an interview with Jason Fried and discussed it afterwards.

HarvestApp.com Impresses Me Again

I’ve been using Harvest for a few years now, and as a customer have been a big fan of their product. A couple months ago they made a change to their plans and impressed me again. This time though, it wasn’t as a customer, it was as a developer and business owner.

The Pain of Launching Your Own Projects

Ask anyone who has redesigned their own website or released an open source project, pushing something live can be painful. I think there are two primary reasons for this:

New Traverse City User Group: Northern Michigan Web and Mobile Meetup

After we moved back home in Elk Rapids Michigan, one thing that I acutely missed was the number of user groups we had in West Michigan. Don’t get me wrong, West Michigan doesn’t have nearly as many compared to a metropolitan hub. In Chicago they even have a VIM Usergroup. But West Michigan did a lot of events going on, and active communities around them.

New Company, New Look

I’ve blogged at Simple Chatter for a few years, but now it feels like a good time to retire that domain and roll it into a newer fresher look. Oh and while we’re at it, why don’t we create a new company?

I think Twitter's OAuth-only Access is a Waste of Time

I don’t normally write sensationalist articles, but today I’m going depart from the norm and make a bold claim: I think Twitter’s change to OAuth-only authentication is a waste of time for developers and businesses.

A Public Comment To Those Enabling Abuse

Michelle Greer recently wrote about viscous online comments on TechCrunch. Unfortunately, over the years I’ve seen a few ugly incidents where a female was singled out online and verbally attacked. To me, there is one thing worse than these gut-less commenters: it’s telling a minority to “suck it up” or “don’t take it personal” or “that’s just the way it is” or “quit whining”.

You're running a marathon

I’ll be the first to admit it: I can work myself to death. Paul Boag recently wrote a great article about the false “badge of honor” regarding long hours in the tech field. I love what I do, and I am continuously grateful that I am able to make a decent living in software. But I’m also prone to burnout.

Client Satisfaction and Resources

After freelancing for a while, I reflected on a one man shop providing excellent service.

Clients that Care

Touched by my clients concern for me.

Why should I do business with you?

All things being equal, people want to do business with their friends.

All things being not quite equal, people STILL want to do business with their friends.

Nginx is extremely performant

A couple days ago I wrote an article about perceptions I’ve encountered as a freelancer. The article took off on Hacker News, which a great feeling.

I am far from unemployed

Monday was the beginning of my third week working independent. And these three weeks have been a lot of fun. Very busy, but fun. However one thing that surprised me was the reaction from others when they asked what I do for a living.

Big Changes. Going Independent.

Embarking on the life of a freelancer

Great perspective on incentive and value

“Finally, I don’t think there’s much value in arguing over who has the most incentive to create good products. The point is you’ll be better off in the long-term if you delivery high-value high-quality products, regardless of whether you’re a consultancy, startup, or enterprise shop.”

Review: Crucial Conversations

Months ago I shared my difficulties with leading others and sharing opinions effectively with Josh Little from Bloomfire. He recommended I pick up the book Crucial Conversations and even mentioned he has had to re-read it many times over the years. It was the first book I finished on my vacation, and I am very grateful for his recommendation.

My Vacation Reading

Every time I go on an extended vacation I end up ripping through a half dozen books. It’s probably because of a need to catch up on long overdue reading. Though I have noticed that it mentally refreshes me much more than watching episodes of LOST.

Muscle Memory

I gave the Dvorak keyboard layout an honest attempt. For years.

Harvested: A New Ruby API Wrapper

I’ve used Harvest Time Tracking for well over 3 years, and they have a quality product. They have also had a published API for quite some time. The past couple weeks I’ve been working on Ruby API wrapper for it, and today I’ve pushed the first release.

Reflections of an Adjunct Professor

This past semester I had the opportunity to teach the Advanced Java course at GRCC. Teaching at the college level has been something I’ve wanted to experience for a while and it is also quite aligned with my values. While I was excited to start the semester, I was a bit nervous at how my first class would turn out. As the semester progressed, I kept a list of failures and successes that would help me grow as a teacher. I hope this list helps other instructors as they start their career.

Introduction to Rails Talk: GVSU Mobile Developers Group

Here is the Prezi talk I gave to the GVSU Mobile Developer User Group.


My First Introduction to Haskell Extensions: FlexibleInstances

I’ve been tinkering with Haskell lately, and I came across an odd issue. Let’s say I want to create a class that takes Integers, Characters, and Strings and returns an Integer.

Not Enough Hours

Yesterday I was in a bad mood. In my disgruntlement, I decided to do some simple math on the number of hours in a day.

Changed My Handle

I’ve used the handle “zedder02” for many many years and for many different applications. It has it’s own history, but I think it’s time to retire it.

Contributing to RailsBridge

Voluntering my time to help RailsBridge

Comments are back

Well I finally got off my ass to port over the comments from Mephisto. Let me know if you find anything amiss.

New feed URL

Looks like FeedBurner/Google ended up shuffling some things around. You may need to update your readers to using either http://simplechatter.com/feed/atom/ or http://feeds2.feedburner.com/simplechatter/.

Migrating to Wordpress

I’m in the process of migrating from Mephisto to Wordpress. Everything should be up and running other than comments. Hopefully I’ll get those wrapped up by the weekend.


Tools for Remote Collaboration

For those of you who don’t know, Janson works in Seattle while Aaron and I work in Holland MI. Even though he’s in Seattle, we’re still able to work as if he were in the office. We’ve had pretty good success with a few tools.

RubyConf 2008

I was lucky enough to attend RubyConf 2008. I really enjoyed last year’s conference, and I felt this year was better.

Using Cucumber to test Generators

I’ve been developing in Ruby (and Rails) for the past 2.5 years. Over time, I’ve molded my own flavor of CRUD controllers and resulting specs. Unfortunately, it’s so different than the Rails and RSpec generated code that it takes me as long to alter the code as it does to create it from scratch. However, in laziness, I’ve pushed off writing my own generators. Until yesterday.

Public Stream of Consciousness

I’ve heard a few people on Twitter not sure about the etiquette on following others. Particularly:

Custom Textmate Commands

Textmate is a pretty decent editor for OSX. I’m not in love with it, but I use it frequently.

Using Capistrano 1.4 with 2.x

I typically use Capistrano for deploying our applications. Though I do have a bookmark to investigate Vlad when I get some time.

One of the best HTML / CSS theme songs

I don’t normally repost from other sites, but this was too good.

Testing content_for

After we started writing view specs we came across views similar to this:

Education vs Justification

Aaron, Janson and I were at Applebees a month ago discussing an estimate for a client. We started talking about a particular part of the estimate that would require us to take more time than usual. We worked on their project previously, and used a few testing practices that we’ve stopped since. I wanted the estimate to include the refactoring of the code, but not publicize the fact. Aaron wanted to communicate with the client our exact intent.

Watch Star Wars via Telnet

I love stuff like this. You can watch Star Wars via telnet.

ALIVE and Treetop

Excited to use Treetop on a project

Combined PGP Keys Into One

After finding out today that pgp keys can have multiple email addresses, I revoked all but public key and combined all emails into one key.

Git Stash is Sweet

Earlier I mentioned a method of storing away changes in a patch, rebasing and then applying the patch so you don’t have to commit beforehand.

Ascribe - A Case Study on View Specs

Reflections on using using view specs for a project

Using Git

Janson and I have been using Git for a few months now at work. We’re still keeping an open mind with regards to Mercurial and Bazaar however its clear that we’ll be moving to a distributed version control.


Me and a few buddies play Command and Conquer Generals. It’s a decent RTS, but has problematic networking issues. Before giving up, I came across Hamachi which is an awesome VPN app.

Hacking Nite Recap

I’ve been so busy with work that I didn’t get to post how the Hacking session went. 2 weeks ago we met at the Elevator Up office and worked on a Kayak api Brandon Keepers had started earlier. We also used iui to allow searching from an iPhone.

Ascribe goes live

We have been busting ass for over 2 solid months and last night we launched a new application. Check out Ascribe, a great portfolio management system specifically designed for contractors.

Brandon Keepers leading another Rails Session

If you’re going to be in San Fransisco around Jan 29th, I’d recommend checking Brandon Keepers Rails Training Session. He’s an extremely talented developer, and an active contributer with a lot to offer based off of real world experience.

Hacking Nite

So I’ve been itching for a Ruby Hacking Nite for a while. Elevator Up’s going to host a night at our offices on Tues the 22nd starting around 6ish, where we’ll supply some Pizza, Brew and Dew.


Another bonehead revelation

Yep, I'm an idiot sometimes

A couple perspectives on testing common scenarios

Testing the behavior of ActiveRecord models

Testing and Tautologies

A question that I’m asked frequently, especially in regards to mock testing is: “I know it seems worth it to test, but isn’t it just a tautology? I mean when your code changes you have to change your tests.”

Hiring Again

It seems like it was just yesterday that we brought on Janson. We’re swamped with work, and luckily it’s the kind we don’t want to turn away. However we really need to bring on a few more people.

First night at RubyConf

Ok so not really. RubyConf officially starts tomorrow, but I still had a blast. The highlight of the night, other than meeting some rockstars in the Ruby community like Chad Fowler, Ezra Zygmuntowicz, Marcel Molina, was playing Werewolf (also known as Mafia). Talk a complete mind-fuck.

RubyConf 2007

I’m really geeked to go to RubyConf this year. A very needed get-away from the hubbub around the office. As a typical dork, I went ahead and threw RubyConf’s schedule in “iCal and exported it” in case anyone else needs it.

Cloning Debian Parallels VMs

We’re in the process of migrating our servers onto a new infrastructure. Namely beefy servers running Virtuozzo. I’ve been a fan of Parallels for a while, and recently fired up a Debian VM, playing with grsecurity. Since this involved recompiling the kernel, and I’m not the most savvy admin, I pragmatically cloned the VM so I could backup in case crap happened.

The Daily Commute

On average, I drive 150 miles roundtrip each day for work. Obviously there a helluva lot of negatives with that commute. However this was a great “opportunity” to turn a negative into a positive. (Yes, I’m using quotes because it wasn’t easy).

How playing with a Rubik's Cube has made me a better developer

Sometimes you make strange correlations with software.

Holland Geeks Group

Last night’s Geeks Group was pretty awesome. It’s definitely a night I look forward to every month. The biggest problem is heading home and starting work the next day. Janson Hartliep and I chatted about this heading out.

field_error_proc and Rails Configurations

I came across something in Rails that’s fixed an issue that has seriously irked me.

Liquid Forms

A few weeks back I wrote about using liquid. In the article I mentioned that soon I would write about how we integrated forms.

Liquids leaking from a Developer

After eyeing Liquid for quite some time, we decided to use it on a project to allow a customer template his app from the admin side. After seeing a lot of documentation for Designers and Templaters, I felt there was something needed from a developer’s perspective.

Mocha and Forcing Verification

I switched to Mocha about 5 months ago, and after getting over my preference for strict ordering, really enjoyed the library.

Problems with Pound infront of Mongrel

Working on a custom CMS, I was tasked to add a feature that allowed users to mark pages as secure. This allowed them to take sensitive data, and then turn around and email it plain text. Go figure.


I have some weird logic in determining what I compile and what I install via ports

New House

I’ve been rather quiet the past few weeks due to Brittany and I buying our first house. After 3 years of renting, we felt we were finally stable enough to make a commitment with our own home.

Our Newest Hire

Aaron and I have been talking a lot the past couple weeks about the overwhelming about of work we have at Elevator Up. It really is a good thing, and I’m not complaining at all. Busy startups are longer lived startups.

Elevator Up's New Office

We’ve moved to our awesome new office in the Zeeland Clock Tower building.

Cool Dates

I love discovering neat tricks with Ruby and Rails, even though most times I feel like the slow kid getting the joke 15 minutes after it was told.

Config Files and Source Control

Environment specific configuration files can be a pain in version control. Especially when multiple developers keeps clobbering each other on updates.

Paranoid Testing

I had the opportunity to attend the XP West Michigan meeting tonight, and listen to the energetic speaker Elisabeth Hendrickson from Quality Tree Software.

Older Rails and Mongrel

One of the useful features of Rails servers (Webrick, Lighttpd, and Mongrel) is to see the development log going to standard out. However when using Rails before version 1.2 and Mongrel, you don’t get that nicety.


At Elevator Up I spend roughly 90% of my time buried in TextMate coding in Ruby. Initially I used grep when searching for text out of command line habit. I also toyed with TextMate’s built in searching, but that took too long, especially when I froze Rails.

Working at Panera

At Elevator Up, Aaron and I frequently work at Cafes like JPs Coffee. But Panera Bread is quickly becoming my favorite place to work.


Recently I got Brit hooked on Flickr and it only took her 3 days to hit her monthly bandwidth quota. However, what’s more interesting is that I needed to find a very intuitive application for her to edit photos quickly. And those of you who know me, I’m all big into thin clients, so I started googling.

Validates Presence Of Foreign Key

When reading the Rails documentation for validates_presence_of I eyed the warning pertaining to foreign keys.


So we bought a 2nd Great Dane, as if Brutus wasn’t enough of a handful.


Yesterday we brought home our newest addition to the Moazeni household. Meet our new Great Dane. Brutus:


Most ruby developers who use mock libraries are familiar with either Mocha or Flex Mock. However not many are familiar with the mock library that I use, Hardmock.

Dumb Moments

As a developer you face many situations where things will just not work, then you have a revelation that points to something so simple that you want to slap yourself.


Previously I spoke about Hardmock, a mocking library. Most of the time I try to develop using Dependency Injection or at least keep instantiation of objects together. However, sometimes the real world kicks in and I can’t or don’t have time to refactor the code.

Depth Merge Update

There was a small bug with Depth Merge when merging nils without deleting them. Behavior should now be the same as the regular merge.

Annotate Models Modification

annotate_models has been really useful for me. However when using fixture_groups fixtures in subfolders are ignored. I modified the plugin slightly to include them. With luck these changes can be merged with Dave Thomas’s version.

Fixture Groups

One of the things I like about working with Rails is test fixtures. However when the data model becomes more complex, the fixtures can become rather large. Worse yet, tests that require fixtures among two or more models feel clunky.

Duplicate Test Names

One of my biggest pet peeves of writing tests in ruby is based on something that makes ruby great. The openness of code.

Depth Merge

Merge is rather useful, but it has the limitation of staying shallow. Here is a simple extension of an implemented depth merge, with one caveat. Passing in true to delete_nils will remove the key if the value is nil.

Subdomain Assertions

Working with subdomains with rails can be easy, especially with url_for_domain. However testing can be a pain.