Tim Harvey :: Blog

Icon

I help organizations who feel stuck

Presenting at the Screaming Monkeys Web Guild meetup

I’ll be presenting at the Screaming Monkeys Web Guild meetup this evening at 6pm:

  • Getting your web application up and running in minutes with Heroku
  • Basic screencasting tips and techniques

We will meet in the new Northeast Indiana Innovation Center building, thanks to Cirrus ABS. If you can’t make the event tonight, check back in a few days as I should have a screencast of my presentation posted.

Making magic with Heroku

Heroku LogoRuby has long been a challenging language to use for small web sites because of the work required to configure and manage hosting. The investment makes perfect sense for large-scale apps, but really bogs down the smaller projects.

The last 12 months have seen tremendous strides in the ease of Ruby deployment and none more revolutionary than Heroku. I don’t want to discount other contributions like mod_rails (also known as Phusion Passenger) that will have longer-term impact. Despite the power of mod_rails, Heroku offers tremendous scalability, ease of entry, and incredibly fast deployment with almost no setup that’s unmatched.

I’ll be covering some of the basics:

  • Overview
  • Publishing your app in less than 60 seconds
  • Creating separate staging and production deployments
  • Loading all your gems
  • Living with a read-only filesystem
  • Grabbing a copy of your database

Getting started with screencasting

Img ScreenflowThe Ruby on Rails community offers a wealth of resources for learning the framework via screencasts. Rather than just reading a blog post or a set of steps, you see the complete process as well as parts of another programmers workflow. It’s an incredibly powerful medium. I’ll be taking a few minutes this evening to share my experiences creating screencasts and will share some tips on how to get started and avoid some of the frustrations I muddled through:

  • Basic software/hardware requirements
  • Workflow
  • Publishing options
  • Getting ideas / watching the masters

I have enjoyed creating screencasts for my clients and decided to experiment with using them as a presentation tool for my July talk with Mike Krisher on version control with Git. Instead of trying to muddle through a rather complex demonstration real-time while trying to explain what was going on, I pre-recorded the demo. I didn’t record any audio, so the voice-over was done in person (which is always preferable). I went back later and voiced-over the demo so that members who couldn’t make the meetup would benefit from the demo.

Finding my ideal clients

I am constantly on the lookout for ideal clients. I yearn to surround myself with them. The people I look for:

  • Possess an enthusiastic attitude and enjoy coming to work every day
  • Want to delight their customers with excellent service and fantastic products
  • Love to learn, looking to improve themselves and their craft
  • Focus on building lasting value at the expense of immediate gratification
  • Value quality time with family and friends, avoiding the workaholic trend

Literacy 5 - LogoIf that’s you, I expect you to contact me in the next 2 minutes. You’ll find a wealth of contact details on my company web site.

But what do you do?

“But Tim,” I hear you say, “You didn’t say anything about the work you do.” That’s true, and very intentional. While most of my work ends up being technology-related, and specifically web site development, what separates my from any other developer sits outside the technology realm.

It’s about giving my customers peace of mind. I’m the guy who my clients (and previous employers) turn to when the game is on the line and they need to score (pardon the sports analogy, it’s all I could come up with). While it may sound cliche, I make things happen.

Ruby on Rails LogoYes, I build killer web sites and online software. They’re perfect for my clients not because the technology is great. It’s that they do what no one else could figure out how to do: accomplish my client’s goals of more revenue, more customers, fewer errors, etc.

The people I work with have problems they need solved, and never enough time to take care of everything. They’re frustrated when working with people who need to be told what to do, or how to do it. There just isn’t enough time in the day.

I’m the guy who comes in and wants to know, “Where do you want to be in 6-12 months?” and “What issues plague your organization?” I sniff out the solutions to those problems, present my plan of action, and then get it done. My clients rest easy at night knowing that I’m sweating the details and taking responsibility for delivering success.

You did what?

Some of the quirky projects my clients (and previous employers) have put me up against include:

  • Managing the planning and execution of a national trade show exhibit — Increased dealer network by 20% within 9 months
  • Revamping a manual, fax-based ordering system — In less than a year, over 90% of customers chose to use the web-based system I created
  • Writing a “For Dummies” book — Researched and wrote over half of “Developing eBay Business Tools For Dummies“, a beginners guide to API connectivity for eBay, PayPal, FedEx, and UPS.
  • Completely rebranded a confused, aging company — Within months, salespeople were jumping for joy over the new materials and focus on a single consistent message
  • Building online shipping software service ShipperTools.com — Designed, developed, and implemented ShipperTools, recommended in a bunch of online selling books
  • Running operations for three retail stores while the owners sought outside financing — Launched their first online marketing and promotion tools with e-coupons still in use 5 years later

Find your ideal clients then take amazing care of them

I have had the pleasure of working as an independent consultant for almost a year now, having left a job with The Grabill Cabinet Company as Marketing and IT Director. Helping clients with web-based app development and supporting marketing agencies with their site build-outs has been a great experience. In addition to my other business endeavors, the last year has reinforced one of the key lessons learned:

Ideal clients

Whenever possible, find your ideal clients and take amazing care of them. For me, I have two clients who fit that category. They are ideal clients in every sense of the term:

  • I do my very best work when working with them
  • Their personality and corporate culture match mine
  • Each of us leaves meetings feeling excited and energized
  • We value what each of us brings to the relationship
  • Both of our organizations are better off together than apart
  • All our interactions feel effortless, built on a lot of trust
  • We can be really honest with one another

BookyourselfsolidIt’s not a new idea, and certainly not something I came up with. A number of authors and sharp businesspeople understand that we do our best work when partnering with clients (and fellow employees) who are a good fit. Michael Port calls it the “Velvet Rope Policy” in Book Yourself Solid. 37Signals puts it this way, “These clients are hard to find, so when we get them we treat them well.”

Treat them like royalty

The critical thing is to take the best care of these clients once you find them. They are difficult to discover and deserve your best. These clients will draw out your best and will refer you to others more often.

When the rubber meets the road, I bend over backwards for my ideal clients and delight in every moment. When an emergency came up that required a last-minute trip 4 hours into Michigan, I was glad to go. When adding a bit of extra work to a project scope delivers a significantly better product, I do it at no charge.

I take every opportunity to thank them for their business, both verbally, in writing, and my doing something special for them. As an example, my wife and I had a tremendously enjoyable evening out at a very nice restaurant with a client and his wife. Because these clients are such a good fit, one doesn’t have to maintain a sterile separation between work and family.

At the end of the day, my ideal clients love doing business with me, and I feel the same about them.

Create a gracious exit for the rest

Look at the people you do work for. Which ones energize and excite you? Care for them and find more like them. And, the clients who constantly frustrate and drain you of your creativity? Take care of them, too. But look for opportunities to find someone else who they might be ideal for, then let them go.

That’s not just talk. Just today, I began that process with a client, looking out for what was best for them, even though it meant I would get less work from them. With the challenging environment we all find ourselves in, that’s harder than ever to do. It can be painful, but in the long run, very worthwhile.

Balancing work and family life when you’re the boss

As a self-employed developer and consultant, I continually seek to refine my business methodologies, toolkit, and skills. That passion for constant improvement extends to my relationship with my family. Maintaining a healthy balance between the work that I love and the family I treasure represents an exciting challenge that requires regular evaluation and review. I vigorously protect my family time with strict limits on my work hours and try to give my full attention to the family when away from work.

Making hay…

If you have ever been self-employed, you know that there are seasons when you have to work above and beyond. As the saying goes, “Make hay while the sun is shining.” That’s especially true for me right now as I look to work ahead so that I can take some time off for the imminent birth of our third little girl and respect several deadlines set with my clients.

So now that I’m working most evenings and getting less sleep, the question that I wrestle with is, “How do I keep my family energized while I get through this challenging season?” I have found one couple critical discipline that has helped immensely:

Daddy-daughter dates

2009-10 Oldest daughter at Bob EvansI find that getting special time with my girls (who are 2 yrs and 3 1/2 yrs old) makes all the difference to them. A little time where Dad gives them his undivided attention goes a long way. As a favor to my wife to let her sleep in, I started a “daddy-daughter date” tradition. Little did I know that this would become one of the highlights of my week.

Every Saturday, my girls know that when they wake up, they’ll be going out with Dad. I get them dressed as quietly as possible and we sneak out of the house (pleased to know that my wife is getting some much needed sleep). We pick somewhere for breakfast. Most of the time, I go with something like Panera. Sometimes we do Bob Evans or the girls will convince me to do McD or Burger King (they love the play land).

Afterwards, we find somewhere to go together. Their favorite is one of the parks or jungle gyms, although even a trip through target works great. We usually return home around 10 or 11a to find Mom refreshed and excited to hand out as a family. She feels appreciated and supported and I can really relate to how much work it is for her to have them all week long while I’m away at work.

2009-10 Youngest daughter at Bob EvansThere are so many benefits that I could hardly name them all, but here’s a few:

  • Dedicated time with your kids is incredibly important
  • You get extra practice dressing them and handling any surprises, making you a bigger help later when your spouse needs a hand
  • Your kids will learn (very fast) how to behave appropriately in public
  • Seeing you do something kind for your spouse is good for your kids
  • You will enjoy the time to talk with them and appreciate their company

Learning from the masters of business and user experience

The web offers your potential clients a glut of options when it comes to selecting who to buy a product or service from. It seems that most businesses choose one of two roads:

  • Focusing Outside: Focusing on what their customer needs while striving for excellence. Looking at best practices and always seeing opportunities to learn.
  • Looking Inside: Deciding what the business wants, then looking for customers who will accept doing operating on their terms. They see little value in constant improvement and assume that they already know all they need to.

While the first perspective seems to be in the minority, there’s a growing renaissance of small (and large) businesses taking up the call to delight the customer.

While it may not be the easiest a client-focused perspective is good for the soul and makes for a more fulfilling workday. I firmly believe in creating relationships with clients who will come back again and again. The old-school mentality of “sell everyone once” makes me cringe.

Practitioners

It’s not about having good ideas. Half the business books seem to be written by a one-hit wonder or someone with a really great sounding idea. Forget those and focus on soaking your mind with the thoughts of those who do it:

37 Signals

37signals Logo

Their blog, Signal vs Noise, offers a steady stream of solid advice and hard-earned experience from the software service industry. They are stubbornly particular about not pleasing everyone, yet carefully crafting every one of their products to delight those who fit their products.

Signal vs Noise Blog

Creative Good

good experience logo

Mark Hurst and his team have been evangelizing for putting customer experience first for more than a decade. Their time-tested insight cut against much of mainstream “wisdom” while having a surprising authenticity. They walk the talk.

I especially appreciate their newsletter which offers concrete examples and input on why experience is so critical.

Good Experience Blog

Zingerman’s

guide to giving great serviceA deli turned customer care/service powerhouse. Their simple perspective and brilliant execution (always the hard part) gives them tremendous credibility when it comes to customer happiness. No environment is harder than a retail store (especially food-related, I’ve been there).

Having visited one of their stores during a customer care research field trip, I can definitely say that their system and methodology is impressive.

Customer care and training arm of Zingerman’s: ZingTrain

Zingerman’s Guide to Giving Great Service

Preview: Rockford Ambulance rebranding

Over the last several months, I have had the privilege of working with the team at Rockford Ambulance in western Michigan. Having spent several days with the leadership immersing myself in the culture and history, I have grown fond of the organization and the people who make it happen.

old logo

We are moving aggressively to revamp their branding, arming them with the tools they need to grow beyond their core emergency ambulance services. By looking beyond just web sites and brochures, we are building a strong foundation where every touch a customer has reinforces the core personality and culture Rockford exudes.

They have an amazing history of service to their community (as evidenced by the half-dozen scrapbooks stuffed with thank-you notes and praise). Their visual presentation just didn’t do them justice. They are a deeply committed organization filled with long-term employees who pride themselves on their fast, caring service. Their current logo, web site, and marketing materials had become dated and left little room to compete with larger organizations that spend heavily on marketing. The old logo, at left, was busy and wasn’t used (or even designed) consistently across each piece.

Having already invested heavily in their staff and facilities, Rockford is poised to make some serious strides in the coming years.

New Rockford Ambulance logo

We went to considerable lengths to build on the history and equity already invested in the Rockford Ambulance reputation and logo over the years. Rather than throw out the old, we tweaked it, creating a bold, clean look while keeping key elements from the past.

Shown here is a sneak peek at the new Rockford logo, crafted by gifted Fort Wayne designer Mark Russet, that will make its debut in just a few weeks. I’m thrilled at all that we have in store for the coming weeks and look forward to sharing. The logo is only the beginning to a dramatic rebranding.

rSpec “Can’t find first {objectName}”

While cleaning up several rSpec tests for a Ruby on Rails app, I ran across an error that didn’t show up in Google. It didn’t make sense that my tests kept failing.

The solution was simple, but not obvious to a new rSpec user. The clean way to specify a validation is:

it { should validate_uniqueness_of( :title ) }

Unfortunately, I kept getting the error “Can’t find first Post” (where Post is the name of my object being tested. After some digging, it turns out that the shorthand notation assumes that you will have already added at least one Post to the database. It finds the first Post, then adds an identical one, expecting a failure.This would have been fine, but my “before” block didn’t have the usual

Post.create!( :title => 'Title' )

Instead, I had:

@valid_attributes = { :title => 'Title' }

So…you can either have your before block add at least one record, or skip the clean notation and do this:

it "should only accept unique Titles" do
  Post.create!(@valid_attributes)
  Post.new.should validate_uniqueness_of( :title )
end

That’s it!

Rev up your Pragmatic Programmer PDF books

As a Ruby developer who spend a considerable amount of time with Rails, I’m a huge fan of the Pragmatic Programmer books and own a ridiculous number of them. While I have read several cover to cover, I find them most useful as reference guides when I need help on a specific topic.

Google is always a good place to look, but I find that technical books offer a better look at a topic when I need a good overview and want to see how the solution fits into the tool set as a whole.

Software craftsmanship encourages excellence and that means keeping all your tools in top shape. In that vein, I constantly tweak my PDF books with Adobe Acrobat after each download to make sure I spend as little time navigating the book as possible. The screencast below shows the quick process I go through.

Rev up your Pragmatic Programmer PDF books from Tim Harvey on Vimeo.

Screencast: Simple version control with Git

I had the pleasure of presenting an overview of Git and GitHub to the Fort Wayne area web developer meetup, the Screaming Monkeys Web Guild with Mike Krisher. I later recorded an audio voiceover of the presentation, below.

Simple version control with Git from Tim Harvey on Vimeo.

Coldfusion 8 displays code and won’t execute

So after our Plesk 8 server crashed, Coldfusion didn’t come back up as expected. Our code wouldn’t execute and simply dumped the raw code to the browser. Displaying the code wasn’t what I had in mind.

After hours fighting with the crazy monster (and having to piece together instructions from countless online sources), I thought I’d pull it all together in one place. I hope you find this to be helpful!

For us, this applied to:

  • Plesk 8.4 for Linux (CentOS)
  • Coldfusion 8 Update 1

Error messages (or potential Google search bait) included:

  • There was an error while running the connector wizard
  • Connector installation was not successful
  • This web server is already configured for Jrun
  • ColdFusion 8 not started, will retry connector
  • Configuring the web server connector (Launched on the first run of the ColdFusion 8 start script)”
  • mod_jrun20.so
  • wsconfig.log
  • 0xb7e6d280
  • *** glibc detected *** free(): invalid pointer: 0xb7e6d280 ***
  • glibc detected
  • Error occurred during initialization of VM
  • Could not reserve enough space for object heap
  • From wsconfig.log: 02/18 21:53:44 error This web server is already configured for JRun. jrunx.connectorinstaller.ConnectorInstallerException: This web server is already configured for JRun. at jrunx.connectorinstaller.ApacheInstaller.installConnector(ApacheInstaller.java:186) at jrunx.connectorinstaller.ConnectorInstaller.installConnector(ConnectorInstaller.java:338) at jrunx.connectorinstaller.ConnectorInstaller.doIt(ConnectorInstaller.java:272) at jrunx.connectorinstaller.ConnectorInstaller.main(ConnectorInstaller.java:762)

Steps to correct the problem:

(The items after the # are console commands, I ran these all as “root”.)

Add Apache configuration and development compilation tools

# yum install httpd-devel

Correct paths in /opt/coldfusion/bin/connectors/apache_connector.sh

# cd /opt/coldfusion/bin/connectors</p>

<h1>vi .apache_connector.sh</h1>

<p>../../runtime/bin/wsconfig \
-server coldfusion \
-ws apache \
-dir /etc/httpd/conf \
-bin /usr/sbin/httpd \
-script /usr/sbin/apachectl \
-coldfusion

Add -apxs to set connector to do full recompile

# cd /opt/coldfusion/bin/connectors</p>

<h1>vi .apache_connector.sh</h1>

<p>../../runtime/bin/wsconfig \
-server coldfusion \
-ws apache \
-dir /etc/httpd/conf \
-bin /usr/sbin/httpd \
-script /usr/sbin/apachectl \
-coldfusion
-apxs

Kept getting “This web server is already configured for Jrun”, so had to destroy old compiled apache connector (which must have referenced the old config)

# mv /opt/coldfusion/runtime/lib/wsconfig \
/opt/coldfusion/runtime/lib/wsconfig-old

Run the apache_connector again, should see “CentOS release 4.5 (final)” several times with “Server version: Apache/2.0.52″ and then a bunch of /bin/sh compile commands roll past

# cd /opt/coldfusion/bin/connectors</p>

<h1>./apache_connector.sh

Will end with “The Apache connector was installed to /etc/httpd/conf”

Move the connectors script file so that it’s not trying to up (have to stop the services to make this work) from the Adobe KB

# /etc/init.d/coldfusion_8 stop</p>

<h1>cd /opt/coldfusion/bin</h1>

<h1>mv cf-connectors.sh cf-connectors-run.sh

Ahh, problem solved.

I hope this helped you out of a jam. I certainly appreciated all the people who took time to post the pieces and parts of the solution I had to pull together. Without their help, I don’t know how I would have gotten things sorted.

Get updates in your inbox

Enter your email address: