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.
An example of memoizing an expensive operation in Scala, similar to Ruby.
An example of how to detect classes at runtime to implement a convention-over-configuration extension strategy in Scala (or Java).
A quick fix to a performance issue with Scala v2.10.x and JDK 7+
Reasons behind csscss's design.
a CSS redundancy analyzer that analyzes redundancy.
We are more than our code.
Ruby 2.0 refinements have been a hot topic lately. Here are my thoughts on the debate.
Hanging my freelancer hat and joining the awesome crew at CollectiveIdea.
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?
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.
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.
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.
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:
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.
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 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.
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".
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.
After freelancing for a while, I reflected on a one man shop providing excellent service.
Touched by my clients concern for me.
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.
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.
Embarking on the life of a freelancer
"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."
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.
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).
I gave the Dvorak keyboard layout an honest attempt. For years.
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.
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.
Here is the Prezi talk I gave to the GVSU Mobile Developer User Group.
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.
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.
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.
Voluntering my time to help RailsBridge
Well I finally got off my ass to port over the comments from Mephisto. Let me know if you find anything amiss.
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/.
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.
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.
I was lucky enough to attend RubyConf 2008. I really enjoyed last year's conference, and I felt this year was better.
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.
I've heard a few people on Twitter not sure about the etiquette on following others. Particularly:
Textmate is a pretty decent editor for OSX. I'm not in love with it, but I use it frequently.
I don't normally repost from other sites, but this was too good.
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.
Excited to use Treetop on a project
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.
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.
Reflections on using using view specs for a project
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.
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.
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.
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.
Yep, I'm an idiot sometimes
Testing the behavior of ActiveRecord models
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."
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.
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.
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.
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.
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).
Sometimes you make strange correlations with software.
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.
I came across something in Rails that's fixed an issue that has seriously irked me.
A few weeks back I wrote about using liquid. In the article I mentioned that soon I would write about how we integrated forms.
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.
I switched to Mocha about 5 months ago, and after getting over my preference for strict ordering, really enjoyed the library.
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'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.
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.
We've moved to our awesome new office in the Zeeland Clock Tower building.
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.
Environment specific configuration files can be a pain in version control. Especially when multiple developers keeps clobbering each other on updates.
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.
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.
When reading the Rails documentation for validates_presence_of I eyed the warning pertaining to foreign keys.
Yesterday we brought home our newest addition to the Moazeni household. Meet our new Great Dane. Brutus:
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.
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.
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.
One of my biggest pet peeves of writing tests in ruby is based on something that makes ruby great. The openness of code.
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
delete_nilswill remove the key if the value is