I Hope I Like Raspberry Pi

Recently, we spun up a new team at Blinds.com to work on a critical add-on called Blinds Tracker for both our production web platform and our soon-to-be-released Autobahn platform.  In addition to being the Product Owner I am also handling DevOps tasks.  One of the fun things I did for the Autobahn team was to put up a physical build light from Delcom that glows green when all is well, blinks blue when a build is underway and flashes red when the build is broken.  I built the necessary utility in .NET and so the light has to be plugged into a Windows laptop that sits off in a corner polling TeamCity from time to time.

Once I had the new project building on TeamCity I decided I wanted a build light for it too.  Besides being a stop on the company tour, it provides a nice visual indication of the project’s health for me, the other team members and stakeholders that can see it from across our open floor plan office.  It’s a different team so I didn’t want to share the Autobahn build light; When it turns red, it should be because Autobahn is broken.  The teams don’t sit in the same area so I can’t really plug a second light into the existing laptop either.

Sounds simple right?  All I have to do is purchase a Delcom visual indicator, grab an old Windows laptop, install my utility and hook it up.  Unfortunately, we don’t have any unused laptops around so I’d have to requisition one.  I jokingly discussed it with one of the developers on the team and he said, “well, you’ve been working with Node.js.  Why don’t you just get it up on a Raspberry Pi.”

So in typical geek fashion I set out to save a few hundred bucks by spending some indeterminate hours of my personal time putting together a Node.js build light application for Raspberry Pi.  I’m lazy so I ordered the Raspberry Pi B (512MB Ram, 2 USB Ports, HDMI and Ethernet), a USB Wifi dongle, a micro USB power supply, an 8gb SD card and a clear case from Amazon.  I also ordered a tri-color USB visual indicator from Delcom.  It will all arrive at the house early next week.  In the meanwhile, I’m going to start building a Node.js website to configure settings and a TeamCity poller that will eventually drive the light.  I think I can get it setup to work on any platform that supports HID so it will likely work on various flavors of Linux, Mac and PC in addition to the Raspbian Linux distribution for Raspberry Pi.  It will be an open source project and I’ll put the source up on Github.  Should be fun.

How to Avoid Career Burnout

I’ve been a developer and small business owner for 30 years. Before I sold my business I routinely worked 7 day weeks and skipped vacations. My longest stretch without a single day off ran 1005 days. I rarely felt burned out despite fighting through some tough times where I had to keep working hard despite not paying myself for a year.

After I sold my last business, I made a decision to do some other things so I adjusted my job to fit my desires. These days I work 45 hours or so a week and I take my time off with pleasure. I manage because I have to and I still write code because I love it.

I’ve thought about this quite a bit and I think it comes down to a few simple things:

1) Do what you love

I love building software. I really believe it’s a hobby I just happen to get paid to do. If you don’t love it, if it’ just a J.O.B. that you struggle with — Get out.

2) Know yourself. Find a work/life balance that fits you now. Be prepared to adjust as your life changes.

If I didn’t have kids right now, I’d start a business. However, I do have kids and I want to spend time with them so starting a business is out at the moment. Instead, I found a job at a place with a family-friendly culture. If the culture changes to requires tons of overtime on a regular basis, I will have to move on.

Knowing yourself sounds easy, but it’s not. If you take a job that doesn’t fit your life, something will break. Burnout would probably be the least of the bad things that could happen.

3) Get fiscally smart so you maintain the power of “NO” ( and its close cousin “YES”)

Too many people live one paycheck from disaster. As a result, they are forced to do things they don’t want to do like work ridiculous hours. That leads to burnout.

It’s very simple to avoid this. Live beneath your means. Delay buying the new car a few years. Stick with a small apartment for an extra year. Pay off all your debts including your house if you have one. Save up six months of living expenses in a simple savings account. Max out your 401K ($18,000/yr and ROTH if it is available). Cut back until your friends laugh at you for being cheap.   If you don’t know how to start, try the Dave Ramsey plan.

As you do this, you’ll find yourself making good choices in your career. You’ll go places that excite you rather than places that pay you the most today. You’ll stay somewhere because it fits you even if you can get a little more money somewhere else. You’ll advance more in your career because you’ll maintain a passion for your work that will catch people’s attention. You’ll never burn out.

Oh, and you’ll be rich.  Then you can enjoy some luxuries without losing your freedom to the bank.

4) Take care of your health

I’m no health nut but I do know that exercise relieves my stress and gives me more energy.  When I feel better I’m more optimistic and feel happier.  You can’t beat that.

Thumbs Down on WalkMe

WalkMe is one of the leaders in the market for SaaS tools that let you add guided tours to your website.  The product itself is quite good.  I’ll even say it is better than much of the competition I looked at, including tools like TourMyApp.  Unfortunately, unlike most SaaS offerings, they do not advertise pricing on their website nor did they give me more than 20 minutes to evaluate the product before I received a phone call with a high pressure sales pitch.  I quickly found out why.  We are planning to put walkthroughs on our back end administrative site where we will have about 100 users and a couple dozen walk-throughs.  WalkMe pricing for that scenario starts at $12,000.    When that is compared to the $75/month ($900/yr) that TourMyApp costs for 10,000 tours a month you start to understand why WalkMe has such aggressive salespeople.

WalkMe clearly has more features than much of the competition.  It’s sort of like the difference between a BMW 3 series and a Ford Fusion.  They are about the same size and will both get you to your destination.  The BMW does it with more style and has several nicer features you can’t even get in the Fusion.  The BMW costs quite a bit more than the Fusion too.  As always, you get what you pay for.  However, WalkMe’s prices itself more like a Bentley.  Unfortunately, it is not nearly that much beyond its competition.   I am walking away from WalkMe.

Configuring Microsoft.AspNet.Identity in Castle Windsor

It’s very easy to setup Microsoft.AspNet.Identity in the Castle Windsor container if you want to be able to inject UserManager and AuthenticationManager services:

container.Register(Component.For<UserManager>()
  .UsingFactoryMethod((kernel, creationContext) =>
  new UserManager(new UserStore(new ApplicationDbContext())))
  .LifestylePerWebRequest());

container.Register(Component.For()
  .UsingFactoryMethod((kernel, creationContext) =>
  HttpContext.Current.GetOwinContext().Authentication)
  .LifestylePerWebRequest());

The assumption here is your application is using a custom user class called ApplicationUser, which is the default setup by the MVC5 template.

There is one slight twist if you want to allow email addresses as user names:

container.Register(Component.For<UserManager>().UsingFactoryMethod((kernel, creationContext) =>
{
    var userManager = new UserManager(new UserStore(new ApplicationDbContext()));
    userManager.UserValidator = new UserValidator(userManager){AllowOnlyAlphanumericUserNames = false};
    return userManager;
}).LifestylePerWebRequest());

container.Register(Component.For()
  .UsingFactoryMethod((kernel, creationContext) =>
  HttpContext.Current.GetOwinContext().Authentication)
  .LifestylePerWebRequest());

2013 Mac Book Pro Speeds Up Windows VM Significantly

I am running Windows 8.1 with Visual Studio 2013 and .NET Framework 4.5.1 in a Parallels VM under OS/X Mavericks on a 2012 Mac Book Pro.  I will be doing some things with the hardware, OS and system configuration to speed things up.

Recently, I ran tests against my Windows development VM running on a new late 2013 Mac Book Pro (2.6Ghz I7 Haswell with 1TB PCIe flash storage).  The scores:

PassMark Overall: 3424(33.91% improvement)
PassMark DiskMark Overall: 4080 (40.20% improvement)
Build/Test Large .NET App: 3:29 (16.4% improvement)

The bulk of the improvement comes courtesy of the lighting fast PCIe flash drive in the new Mac Book Pro.

I’ve posted a complete list of results on Google Docs.

Speeding Up My Windows Development VM — Part 2

I am running Windows 8.1 with Visual Studio 2013 and .NET Framework 4.5.1 in a Parallels VM under OS/X Mavericks on a 2012 Mac Book Pro.  I will be doing some things with the hardware, OS and system configuration to speed things up.  

This morning, I upgraded to the latest version of Parallels Desktop, 9.0.23140.  My current scores:

PassMark Overall: 2813 (10.01% improvement so far)
PassMark DiskMark Overall: 4080 (2.46% improvement so far)
Build/Test Large .NET App: 4:07 (1.2% improvement so far)

I’ve posted a complete list of results on Google Docs.

 

Speeding Up My Windows Development VM – Part 1

I am running Windows 8.1 with Visual Studio 2013 and .NET Framework 4.5.1 in a Parallels VM under OS/X Mavericks on a 2012 Mac Book Pro.  I will be doing some things with the hardware, OS and system configuration to speed things up.  Here’s my current baseline:

PassMark Overall: 2557.2
PassMark DiskMark Overall: 4080
Compile/Build/Test Large .NET App: 4:10

Let’s see what I can do to speed this up over the next couple of days

 

 

 

Lissome Project

Just started working on the design for the project I discussed in my last post.  I decided to call it Lissome, which means, among other things, “nimble”.  Seems like a decent name for an agile task board.   The Balsamiq mockup can be found in the Lissome repository.

I decided to license it under AGPL .  I realize this license is fussier than many other open source licenses about making source changes freely available, but that is precisely the point.

Building Something Twice (Just for Fun)

I’ve been playing with Node.js a bit lately and have been looking for something fun and useful to do with it.  Along the way, I’ve also developed a curiosity about how a well-written, non-trivial Node.js application might compare to an equally well-written .NET application in terms of features, quality and development time.  Today, I am starting a spare time project to satisfy my curiosity.

The idea is to develop an agile task board application with a highly-interactive web front end and two different fully scalable backends: the first in Node.js and the second in .NET.  My goal is to make the backends as interchangeable as possible.  My initial guess is that the only difference in how the client will communicate with the backend is in the area of server notifications, which will probable use socket.io with the Node.js backend and SignalR with the .NET backend.  For simplicity, both backends will use the same hosted NoSQL and search facilities.  I’m leanings towards RavenDB hosted by RavenHQ simply because I am familiar with it and because it includes powerful search capabilities.

The whole thing will be open source and I’ll blog about it as I progress.  I’ll start by sketching a basic UI wireframe so I can put together an initial product backlog.  Wish me luck.