Pages

Sunday, March 3, 2013

I'll be Presenting at Agile and Beyond 2013!

I'm excited to announce that I will be presenting at Agile and Beyond 2013, this Saturday, March 9 in Dearborn, Michigan! It's a great conference, even if you don't come to hear me. ;) There are still seats open. The website lists the price as $129, but if you contact me I can give you a discount code that will get you in for $79.

I will be presenting the talk that I gave at Agile Groupies in October of last year, "Refactor Your Software Career." I will be talking about my three-year journey from stagnant developer to my awesome position today with Pillar. A key component of that journey is my idea of Transformative Networking, which is a way of identifying events that will allow you to simultaneously increase your tech skills and expand your network. In short, the events that I found the most worthwhile for improving my career met most or all of the following criteria:

creating value in desired field with others in person with people in target

If you can't make it to my talk, you can get my original deck here, or I will be publishing my new deck shortly after Agile and Beyond this weekend. 

Monday, December 17, 2012

Things to do in Ann Arbor

An out-of-town friend asked for suggestions about things to do during a visit to Ann Arbor. Here are my suggestions to him:

  • The University of Michigan Art Museum is very nice: http://www.umma.umich.edu/
  • Ann Arbor has an iconic, world-class deli, Zingermans: http://www.zingermansdeli.com
  • If it's a nice day, you might enjoy a walk in the Matthaei Botanical Gardens & Nichols Arboretum: http://mbgna.umich.edu
  • The downtown area, especially Main Street, has a many nice shops and restaurants.
  • If you want a fairly upscale dinner, the Earle is very good. http://theearle.com/ And they have some nice specials during happy hour 5-8 weekdays.
  • Kerrytown is a nice indoor collection of shops and a market: http://www.kerrytown.com/ There's a nice farmer's market there too Saturdays and Wednesdays from 7am-3pm.
  • If you're looking to see a show, you could check the Ark http://www.theark.org/ , the Kerrytown Concert House http://www.kerrytownconcerthouse.com/ or Performance Network http://www.performancenetwork.org/

Thursday, October 11, 2012

Preview of my "Refactor Your Software Career" talk

On Oct 24, 2012, I will be presenting a talk, "Refactor Your Software Career" to the Agile Groupies meeting in Ann Arbor at the Forge. I'll be sharing my journey from stagnant software developer to my current position at Pillar as a software craftsman and agile consultant, along with specific actions I took to get there, and strategies that anyone can apply to improve their career path. I'll also touch on barriers to taking this kind of action and what helps to get past those barriers.

But a key component to my talk will be what I'm calling "Transformative Networking". My idea is that you can simultaneously improve your marketability (raise your skills and experience) and increase the number of people who might want to hire you even while you continue to work at a job that doesn't offer growth or networking.

Transformative Networking involves engaging in activities that share as many of the following attributes as possible:

  • creating real value (like volunteering or teaching)
  • in your desired field (volunteering is good, volunteer coding is better)
  • with others (solo coding a website for a charity isn't as good as being on a team doing it)
  • in person (there's no better way to present yourself than by working with someone in person)
  • with people in your target companies (if you want to work at a company, let their employees get to know you)
If you engage in activities like this (and my talk will include specific examples of ones I participated in), you can not help but increase your skill sets and get noticed.
 

Tuesday, May 15, 2012

UPDATE: The Forge Open House Date Moved

As I mentioned in a previous post, Pillar is holding an open house at our new facility in Ann Arbor called the Forge.

There is a new date for the open house: June 21, 6-9pm. If you already registered for the May date, you will receive updated information by email.

Please see my previous post for full details, or click here to register. (It may take a few days for the date change to appear on the registration site.)

Tuesday, April 17, 2012

Jenkins and Subversion and "Send separate e-mails to individuals who broke the build"

My current team wanted to use Jenkins' "Send separate e-mails to individuals who broke the build" feature. We use Subversion, and our Subversion usernames are not email addresses. And because my team members belong to different companies, we can't specify "Default user e-mail suffix" even if our Subversion usernames were the names of our email accounts.

For a while, I couldn't figure out how configure Jenkins to do what I want. I did a little googling and found out that Jenkins has a "People" page (for example, Apache's* People page is: https://builds.apache.org/people/ ). Clicking on a person's User Id link takes you to their page. With our Jenkins configuration, a user's page has a "Configure" link on the right. Clicking that allows them to enter their name and a variety of other details, including Email address! That should allow me to use "Send separate e-mails to individuals who broke the build" the way my team asked.


* If you want to look at a big, vibrant Jenkins installation, check out the public Apache Jenkins machine: https://builds.apache.org/ Obviously it is read-only, but it has lots of projects, so there is usually something building, and you can see lots of examples of different statuses.

Monday, April 2, 2012

Jenkins Violations plugin quirk

Now that I got OpenCover working with Jenkins, I decided to go after fxCop. Here's the command-line I settled on:

"C:\Program Files (x86)\Microsoft Fxcop 10.0\fxcopcmd.exe" /oxsl:none /igc /f:OurApp.AssemblyToCover1.dll  /f:OurApp.AssemblyToCover2.dll /out:fxcop_results.xml /d:"c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 3\Assemblies"

The /oxsl: argument specifies no xsl transformation on the output (I'm using the Violations plugin which reads the native xml).

The /d: argument points to where System.Web.Mvc.dll lives, which one of our assemblies depends on.

As I mentioned before, I want to exclude several assemblies from analysis, so I specified the ones I want included by using /f: arguments (one per assembly).

NOTE: Getting the Violations plugin to work was easy once I realized one thing: the "XML filename pattern" must either be a filename pattern only (in which case the file will be in the Jenkins build project's workspace directory) or it must be in a directory below the Jenkins build project's workspace directory (for example results\fxCop*.xml) Absolute paths and relative paths starting with "..\" do not work.

Sunday, April 1, 2012

I Got OpenCover to Work with Jenkins

As I mentioned before, a team that I am coaching is using Jenkins for CI. We wanted to automate code coverage measurements for the .Net code in specific assemblies of our solution. (Others are third-party or machine generated, so we don't have unit tests for them.) It took me longer than I would have liked, but I did get OpenCover running and generating reports as part of our Jenkins build.

One hurdle was that Jenkins seems to need to be run as user with administrator rights in order for OpenCover to work. So I created one and assigned it in the "Log On" tab.

In my Jenkins job, I opened "Add build step" and selected "Execute Windows batch command". In there, I gave the command line:

"C:\Program Files (x86)\OpenCover\OpenCover.Console.exe" -target:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\mstest.exe" -targetargs:"/testcontainer:E:\Jenkins\jobs\BuildOurApp\workspace\TRUNK\OurApp.UnitTests\bin\release\OurApp.UnitTests.dll" -filter:"+[OurApp.AssemblyToCover1]* +[OurApp.AssemblyToCover2]*" -register:user -mergebyhash -output:E:\Jenkins\jobs\BuildOurApp\workspace\FilteredCodeCoverage.xml

As an aside, I often have Jenkins jobs with several batch command sections. I found it annoying to scroll up and down and quickly find the one I was looking to edit. So I've started marking the top of each script:
REM   _      ___  _  __ _____  
REM  | |    |_ _|| |/ /| ____| 
REM  | |     | | | ' / |  _|   
REM  | |___  | | | . \ | |___  
REM  |_____||___||_|\_\|_____| 
REM                            
REM   _____  _   _  ___  ____  
REM  |_   _|| | | ||_ _|/ ___| 
REM    | |  | |_| | | | \___ \ 
REM    | |  |  _  | | |  ___) |
REM    |_|  |_| |_||___||____/ 
 
( http://patorjk.com/software/taag/ , "Standard" font, unchecked "Smush Letters Together" )


I have the HTML Publisher plugin installed, so I enabled it, clicked Add to add a row and specified:
E:\Jenkins\jobs\BuildOurApp\FilteredCodeCoverageReport 
index.htm
Code Coverage Report
as the arguments and it's all set! Now coverage is computed automatically and my team has a single URL for a summary report with drill-down details.