Plan Your Holiday Vacation with Trello

Getting ready for the holidays can be a stressful time of the year—travelling, buying gifts, meeting with friends, drinking eggnog—but it need not be. Emily and I have been using Trello to plan our upcoming Christmas vacation to see family. Hear why it’s been great for Emily (gratuitous toddler videos included):


Trello is a free organization tool from Fog Creek Software (that’s where I work). You can start using it today by signing up for a free account. Already have Trello? Check out a public Holiday Vacation Planning board that you can copy to your Trello account.

Posted in General | 2 Comments

Lift Heavier Things By Tracking Your Progress

If you work out on a regular basis, you need to track your progress. I remember learning to track bench press with a printed Excel sheet in a high school weight lifting class. For some reason, perhaps because CrossFit has so much variety, it took me a while to get serious about tracking my workouts.

When I started CrossFit in February of 2011, I would get into a routine where I would show up for a workout, try to remember what weight I lifted the last time, and add some weight for the current session. This worked out really well when I was beginning, mainly because I was jumping up so much in weight each time as I started to get in shape.

After a while, I noticed that my rate of improvement was diminishing and even leveling off in some areas. The problem—which I only noticed in hindsight—was mainly due to my not being able to remember how far I had pushed myself in a previous workout. Starting at a computer screen at 5:30 AM, I wasn’t doing much research on previous weights before heading into the gym.

So earlier this year, I started tracking my workouts in a couple of Google Docs.

Apart from actually showing up for the workouts, tracking my workouts has been the single biggest contributor to my improvements this year.

I started two spreadsheets in Google Docs, Named WODs and Ben’s Lifts. I check them accordingly before heading to the gym. I even have them saved as favorites on my smartphone in case I need to look them up while I’m there. Here’s a screenshot of my entries for Deadlift this year:


It’s not too complicated. All you really need is the movement, date, rep scheme, and weight, but I added my 1RM, 3RM, 5RM, and a Notes fields, which turns out to be quite helpful. You notice on June 29, it had been over three months since my last 5×5 Deadlift. I was quickly able to see that I had struggled at 275 for my last 5×5 but thought I could push myself to 285. If I hadn’t been tracking my progress, I probably would have guessed based on my last 5×3 and probably would have ended up at about 265.

There are a ton of different ways to track your workouts. A lot of CrossFit blogs encourage you to post your scores to the comments (I really like this, mainly because it encourages a positive community, but it can be hard to look up old scores). Our box recently started using SocialWod to automatically track our white board. Again, I really like this for the community aspect.

Even with all of these great methods, I still recommend coming up with your own simple tracking system. It’s the best way (in addition to showing up) that I know of to help yourself improve at the gym.

Have any thoughts? I’d love to hear them in the comments below!

Posted in General | 4 Comments

Building HTML Files from Markdown and using MarkdownPad

Each month, I deliver a webinar for two of our Fog Creek products, FogBugz and Kiln (speaking of, want to sign up for the webinars? Do so here: FogBugz, Kiln). To help me deliver a consistent and polished message, I’ll keep a script open in a browser window on a separate monitor. This ensures that I stay on track and mention all of the things I want to say.

To create the outline for my scripts, I use MarkdownPad on Windows, which allows me to edit my outlines using the Markdown syntax and end up with an HTML file that’s viewable in any browser.


I really like using MarkdownPad, but one of the slower parts of my workflow involves remembering to go to File > Export HTML for each of the 7 outline files that I have. I really wanted to be able to convert my Markdown files from the command line to make this faster. Since MarkdownPad doesn’t offer this command line functionality out of the box, I decided to try to add it myself. While I was there, I added some additional features to help me out while I’m doing a live webinar. Here’s a list of features I decided to implement.

  • Generate HTML using Markdown source from the command line
  • Use the same CSS stylesheet and other user settings that I use in MarkdownPad when I export HTML.
  • Add the ability to be able to navigate header tags using the keyboard arrow keys
  • Dynamically stylize certain key words so that they stand out. For example, if I type – KILN: in MarkdownPad, I want to be able to see – KILN: in the resulting HTML so that it stands out.

Here’s a quick screencast that shows the result of my work:


Let’s break down how I set this up.

Converting Markdown to HTML

The biggest challenge I faced, at least initially, was figuring out how to take Markdown source and convert it to HTML from the command line. I decided to try using MarkdownSharp, .NET Markdown transformation library that happens to be the same was what’s used within MarkdownPad. Since you can easily call .NET classes from PowerShell, I figured this would be a relatively simple implementation, which was indeed the case:

PS C:\> Import-Module MarkdownSharp.dll
PS C:\> $m = New-Object MarkdownSharp.Markdown
PS C:\> $m.Transform("- This is a bullet point")
<li>This is a bullet point</li>

The actual implementation was a bit trickier, but still relatively straightforward. I created a function in my Powershell Profile called Markdown-ToHtml. It will take either a file name or plain text and also lets you specify standard options for MarkdownSharp. Notice how I’m importing MarkdownSharp.dll, which is stored in a lib directory right within my Powershell profile. I think I built the file from source code, but feel free to grab my compiled version here (click the Download link on the right side of the page).

Import-Module .\lib\MarkdownSharp.dll
function Markdown-ToHtml($item, 
                         $AutoHyperlink = $False,
                         $AutoNewLines = $False,
                         $LinkEmails = $False,
                         $EncodeProblemUrlCharacters = $False){
  $mo = New-Object MarkdownSharp.MarkdownOptions
  $mo.AutoHyperlink               = $AutoHyperlink
  $mo.AutoNewLines                = $AutoNewLines
  $mo.LinkEmails                  = $LinkEmails
  $mo.EncodeProblemUrlCharacters  = $EncodeProblemUrlCharacters
  $m = New-Object MarkdownSharp.Markdown($mo)
  $toTransform = ""
  if (($item.GetType().Name -eq "FileInfo") -or (Test-Path $item -ErrorAction SilentlyContinue)) {
    $toTransform = (Get-Content $item)
    $toTransform = [string]::join("`r`n",$toTransform)
  elseif ($item.GetType().Name -eq "String") {
    $toTransform = $item
  else {
    # I don't know what to do with this
  return $m.Transform($toTransform)

Once you have the Markdown-ToHtml file in your profile (or within your build script; either way is fine), the next step is to grab MarkdownPad’s settings so our generated HTML is consistent with what you see in MarkdownPad.

Find MarkdownPad’s Settings

MarkdownPad is a ClickOnce application, so it’s settings are stored in a user.config file in a seemingly random folder in the user’s AppData directory. Thankfully, we can use a little Powershell Magic to make sure we get the correct file:

PS C:\> ls $env:APPDATA\..\Local\Apps\2.0 -r -include user.config | %{if(cat $_ | ss "MarkdownPad" -quiet){return $_;}} | select -first 1

    Directory: C:\Users\benm\AppData\Local\Apps\2.0\Data\0CZN9Q11.JVM\MNOR0348.10M\mark..tion_12329825c85e214b_0001.0003_8873814a9315382c\Data\

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         6/18/2012   3:02 PM      10492 user.config

Reading the XML file is also pretty simple:

#Get the MarkdownPad config file
$configFile = ls $env:APPDATA\..\Local\Apps\2.0 -r -include user.config | %{if(cat $_ | ss "MarkdownPad" -quiet){return $_;}} | select -first 1
#Parse the config file as XML, pulling out appropriate values
1$doc = Get-Content $configFile
$Css = $doc.SelectSingleNode("/configuration/userSettings/MarkdownPad.Properties.Settings/setting[@name='HTML_CustomStylesheetSource']").Value
$AutoHyperlink = [System.Convert]::ToBoolean($doc.SelectSingleNode("/configuration/userSettings/MarkdownPad.Properties.Settings/setting[@name='Markdown_AutoHyperlink']").Value)
$AutoNewLines = [System.Convert]::ToBoolean($doc.SelectSingleNode("/configuration/userSettings/MarkdownPad.Properties.Settings/setting[@name='Markdown_AutoNewLines']").Value)
$LinkEmails = $False
$EncodeProblemUrlCharacters = [System.Convert]::ToBoolean($doc.SelectSingleNode("/configuration/userSettings/MarkdownPad.Properties.Settings/setting[@name='Markdown_EncodeProblemUrlCharacters']").Value)

We’ll use these settings later when we put together the complete build script.

Navigate HTML Headers Using Arrow Keys

I wanted to be able to use the arrow keys to navigate my outline files during the live webinar. I decided to include jQuery in my generated files and I ended up finding a cool library called jQuery.ScrollTo, which is included in my build script.

To wire up the ScrollTo plugin to keyboard commands, I used the following script, called scrollToArrow.js:

        window.ixTag = window.ixTag || 0;
        tagsH = $('h1,h2,h3,h4,h5');
        var key = e.which | e.keyCode;
        if(key === 37){ // 37 is left arrow
            window.ixTag = window.ixTag - 1 < 0 ? 0 : window.ixTag - 1
        else if(key === 39){ // 39 is right arrow
            window.ixTag = window.ixTag + 1 >= tagsH.length ? tagsH.length - 1 : window.ixTag + 1

It’s a bit hacky, but it does the job.

Dynamically Stylize Keywords

The next challenge was to add styling to the resulting HTML page for certain keywords so that they would jump out to me during the webinar.

6-18-2012 4-52-22 PM

I had originally solved this using a PowerShell script to modify the original Markdown file, but I decided to use some javascript instead so that the original Markdown file isn’t littered with <span> tags. Here’s what the addStyles.js file looks like:

  var toMatch = /^(PP|FB|PS|VS|KILN|NP|EXPLORER|THG):/i;
  var matches = $('p,li').filter(function(){
    return $(this).html().match(toMatch);

  $(matches).each(function() {
    var html = $(this).html();
    var match = html.match(toMatch)[1];
    var replaceWith = html.replace(toMatch, '<span class="' + match + '">' + match + '</span>:');

Bringing It All Together into A Build Script

I use all of the above elements—putting Markdown-ToHtml in my profile, parsing the user config, the javascript files—to put together a simple build script. In short, the script will look for all Markdown files (.md) in the directory and then output the HTML to a folder called outline-html. The javascript files and the exported CSS are also placed in outline-html. Here is build.ps1:

#Get the MarkdownPad config file
$configFile = ls $env:APPDATA\..\Local\Apps\2.0 -r -include user.config | %{if(cat $_ | ss "MarkdownPad" -quiet){return $_;}} | select -first 1
#Parse the config file as XML, pulling out appropriate values
1$doc = Get-Content $configFile
$Css = $doc.SelectSingleNode("/configuration/userSettings/MarkdownPad.Properties.Settings/setting[@name='HTML_CustomStylesheetSource']").Value
$AutoHyperlink = [System.Convert]::ToBoolean($doc.SelectSingleNode("/configuration/userSettings/MarkdownPad.Properties.Settings/setting[@name='Markdown_AutoHyperlink']").Value)
$AutoNewLines = [System.Convert]::ToBoolean($doc.SelectSingleNode("/configuration/userSettings/MarkdownPad.Properties.Settings/setting[@name='Markdown_AutoNewLines']").Value)
$LinkEmails = $False
$EncodeProblemUrlCharacters = [System.Convert]::ToBoolean($doc.SelectSingleNode("/configuration/userSettings/MarkdownPad.Properties.Settings/setting[@name='Markdown_EncodeProblemUrlCharacters']").Value)

#put the CSS in its own file
$Css | out-file .\outline-html\markdownStyle.css -encoding "UTF8"

#for each Markdown file in the directory:
# 1. use MarkdownSharp to convert the markdown to the HTML body
# 2. build the full HTML file, adding in CSS and javascript references in the header
# 3. create the file in outline-html
$files = ls *.md | %{$_.Name}

$files | foreach {
  $htmlBody = Markdown-ToHtml $_ -AutoHyperlink $AutoHyperlink -AutoNewLines $AutoNewLines -LinkEmails $LinkEmails -EncodeProblemUrlCharacters $EncodeProblemUrlCharacters
  $sb = New-Object System.Text.StringBuilder
  [void]$sb.AppendLine('<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "">')
  [void]$sb.AppendLine('<html xmlns="" xml:lang="en" lang="en">')
  [void]$sb.AppendLine('<script src=""></script>')
  [void]$sb.AppendLine('<script src="jquery.scrollTo.js"></script>')
  [void]$sb.AppendLine('<script src="scrollToArrows.js"></script>')
  [void]$sb.AppendLine('<script src="addStyles.js"></script>')
  [void]$sb.AppendLine('<link rel="stylesheet" type="text/css" href="markdownStyle.css">')
  [void]$sb.AppendLine('<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />')
  $htmlFileName = (($_ -split ".md")[0]) + ".html"
  $sb.ToString() | out-file ".\outline-html\$htmlFileName" -Encoding "UTF8"

Once you have build.ps1, you can run it from the command line using .\build.ps1, which will generate HTML files for all markdown files in the current directory.

Posted in General | Comments Off

Overdoing It Beats Underdoing It

One of my near-term goals is to improve my push-up endurance so that I can get 20 rounds of Cindy (5 pull-ups, 10 push-ups, 15 squats) in 20 minutes. I’ve been doing more and more push-ups each day, but Saturday I think I overdid it.

I decided to try doing 15 push-ups every minute on the minute for 5 rounds, with a 5 minute rest, for 4 sessions. That’s 300 push-ups in 40 minutes. Oh, and for the first 2 sessions, I threw in 10 sit-ups for fun.

I did manage to complete the workout (took me 41 minutes because of extra rest required toward the end), but my arms and chest felt absolutely destroyed afterwards. I definitely pushed myself way beyond fatigue. I had planned to take a rest day on Sunday anyways, so I figured everything was cool.

Monday rolled around and I did the prescribed WOD of 400m run + 30 Kettlebell swings (53 lb), AMRAP for 20 minutes, and while I felt fine during the WOD, once I got to work that morning, I was in pain. Specifically, my somewhere in the right side of my chest it’s quite sore. Add to this a dull pain I’ve had just to the right of my mid-lower back and I’m in need of some rest.

So I overdid it. I certainly know what kinds of behaviors to avoid and to more gradually try to test my push-up endurance. While lamenting my self-induced rest period, I remembered that this is how I used to function all the time: no exercise, no athleticism, no pushing myself to the limit. I won’t be going back there again.

Food for today

I brought home leftover petit filet of beef with horseradish aioli from lunch today and had it again for dinner. The sauce probably has some non-Paleo elements in it, but it is amazing! Also, Emily made a “pot liquor” of collard greens and bacon. Yum!

Posted in General | Comments Off

Friday the 13th Did Scare Me But then I Got Over It and Beat it Down

The Workout of the Day is called, appropriately, “Friday the 13th”. I was a bit scared going into it, especially of the 135 lb Thrusters (Front Squat into a Push Press, for those keeping score at home), since that’s 40 lbs heavier than the thrusters in Fran, and Fran destroys me.

You see, I had intended to “warm up” at 95 lbs and then, because it was going to be so awful, simply do that for the workout. But I can’t do math at six in the morning and I grabbed two 45 lb bumper plates for my 45 lb bar. 45 plus 45 doesn’t even equal 95, so I’m not sure what I was going for.

Since the weight was there, I decided to give it a go, and what do you know, I was able to do it! I even did the WOD in sets of four, four, and then five. I had been planning on 3 + 2, but Coach Mikey talked me into 5 straight. Not that I was arguing (I was barely breathing), but his encouragement helped. So that was a PR on Thrusters in a WOD. Woot!

I also got my first jumping muscle-ups today. My arms hate me. A lot. But it was worth it. Now I just need to keep practicing them so I can get them off the ground!


  • Leftover Paleo Pumpkin Chili
  • Blueberries
  • Almond Butter


  • Pork with bourbon mustard sauce
  • Salad
  • Asparagus
  • Snack: 4 strawberries and some almond butter


  • Chicken with Mango Chutney
  • Steamed Veggies


“Friday the 13th”
13 – Pistols, Right leg (with blue band)
13 – Muscle Ups (jumping)
13 – 135# Thrusters
13 – Burpees with 1 foot Jumps
13 – Pistols, Left Leg (with blue band)

14:17, pretty slow, but I finished!

200 push-ups, which after those muscle-ups, was quite the challenge.


Posted in General | Comments Off

Rain, Rain, Go Away

I think I like the rain the least during the winter time. If it’s going to precipitate, it might as well snow, right? Because of rain when I woke up this morning, I decided on the evening CrossFit class instead, and it was great!


  • 4 Egg Omlet w/ bacon & mushrooms
  • 10 oz Spinach


  • Lamb Korma (Paleo? Maybe?)
  • Salad
  • Diet Root Beer (Not Paleo)
  • Almonds for Snack


  • Spiced Pumpkin Paleo Chili (Yum!)
  • A few Marcona Almonds
  • Post-WOD Pear (I shared with Sophia)


10 x 1 Weighted pull-ups: 20 – 25 – 30 – 32.5 … (workout) … 35 (fail) – 30 (rev) – 30 (rev) – X – X – X

5 rounds: 25 cal row + 25 sit-ups: 12:08

200 push-ups

Posted in General | Comments Off

Paleo ZzZzZzs and Yum!

I need to get more sleep. Believe it or not, sleep is a big part of Paleo and if weight loss is your goal, not getting enough sleep is a surefire way to miss it.

Other than that, today was great!

Emily made a super-easy-to-make vegie for dinner tonight. It consisted of 5 pieces of fried cut-up bacon with collard greens and sliced mushrooms. Fry the bacon, sauté the mushrooms, and throw in the collard greens. Doesn’t get any easier than that, and it tastes amazing!


  • Mixed steamed veggies
  • Lemon Pepper Chicken
  • Blueberries and Pineapple
  • Almond Butter


  • Salad day
  • Tons of different veggies
  • Shrimp Salad
  • Steak
  • Chicken
  • Cashews for Snack


  • Lemon Pepper Chicken
  • Collard Greens, Mushroom, and Bacon yuminess!
  • Maybe a piece of fruit later


7×3 Backsquat – 155-165-175-185-185-185-185

Going to try for 200 push-ups again today, but so far I’m only at 100.

Posted in General | Comments Off

A New Paleo Challenge


Yep. Last summer’s Paleo challenge was great and it really got me moving in the right direction, but then December happened. No, I didn’t gain all my weight back and yes, I’m still in pretty decent shape, but I want to crank it up a notch. I want to go into 2012, eating cleaner, looking leaner, and getting meaner during the CrossFit WODs.

This Paleo Challenge is just Emily and me. There’s no prize other than a better her and a better me. But we’re looking forward to it! Also, I’ll be trying to blog regularly, but there’s won’t nearly as many pictures this time and the posts will be shorter.



  • Mixed Steamed Veggies
  • Small container of organic apple sauce
  • Coffee


  • Chicken
  • Broccoli
  • Salad


  • Egg & Veggie Frittata
  • Mixed Steamed Veggies
  • Broccoli
  • Marcona Almonds
  • Dark Cholocate

WOD (Workout of the Day)

15 minute AMRAP:
30 double-unders
15 Power Snatches

3 rounds + 5 and very sore hands. I really need to work on my double-unders.

200 Push-ups throughout the day

Posted in General | Comments Off

cURL for Powershell

OK, so the title of this post is a bit lot misleading. I haven’t implemented cURL in Powershell, but I did want a simple way to simply do an HTTP GET against a URL and download its contents. With cURL, it’s as simple as:

$ curl

Easy! This will download the URL as a string that can be piped into another command. In Powershell, it’s a bit more cumbersome:

PS > (New-Object net.webclient).DownloadString(

It will get the job done, but that’s a lot to remember just to get a string from an HTTP GET. I’ve added the following bit of code to my Powershell Profile to make this task a bit easier:

function Get-URL([string] $url){
  (New-Object net.webclient).DownloadString($url)
Set-Alias curl Get-URL

Those expecting the full functionality of cURL with the curl alias are going to be disappointed, but if you’re simply wanting to grab the contents of a URL, this will do the trick. Now I can get the contents of a website and pipe it into another command in Powershell, such as installing pip:

PS > curl | 
Posted in General | Comments Off

Paleo Challenge Success!

I’ve reached the end of my  six week Paleo Challenge! How did I do? Before we look at the numbers, I want to take a look at some qualitative changes that I’ve experienced:

  • None of my clothes fit anymore: I’ve had to buy a new belt and t-shirts, my shorts don’t fit without the recently procured belt, and I have countless XL shirts for which I have absolutely no use. I haven’t even thought about my winter clothes and formal wear yet; this could get expensive.
  • When I first started CrossFit, I could only do pull ups using the thick green band for help. Right before the Paleo Challenge, I had started using the thinner blue band, but now I use the even thinner red band when doing a high number of pull ups and can even knock out several pull ups in a row with no band at all.
  • While I still can’t do it consistently, I’ve gotten up to five double-unders in a row while practicing with the jump rope.
  • I’ve set personal records for almost all of the strength exercises I’ve done at CrossFit during the Paleo Challenge.
  • I can run.
  • Fruit is an incredible desert.
  • I’ve dramatically cut down my daily coffee intake to really just half a cup or less of actual coffee (I mix it with water).
  • I almost exclusively stand at my desk at work.
  • I notice when I eat non-Paleo foods and how crappy it feels.
  • I notice when I don’t enough sleep at night.
  • Not only is eating meat and vegetables, with occasional fruit, nuts, and seeds not extreme, it’s perfectly natural and is something you can do for the rest of your life.

Now let’s look at some numbers:

Final Metrics

Before After Difference
Weight 207.0 lbs 194.8 lbs -12.2 lbs
Waist 38.25 in 36.5 in -1.75 in
% Body Fat 21% 18% -3% points

You can tell that my net weight loss is 12.2 pounds, but it’s hard to tell exactly how much fat I lost and how much muscle mass I gained. Of course, the waist measurement is supposed to help for understanding that breakdown and I certainly noticed improved performance at CrossFit. Either way, I’m really happy with the results.

The chart:


I decided to take down the pictures. You’ll just have to take my word for it :P.You’re supposed to take after pictures with the exact same clothing as your before pictures. However, if I had done that, my shorts wouldn’t have stayed up! Hopefully you can still notice the difference.

What’s Next?

Needless to say, the six-week Paleo Challenge has been a resounding success. Now that the challenge is over, I plan to continue eating Paleo and enjoying its benefits.

That being said, I’m going to relax a bit, especially in regards to blogging. I’ll probably continue to post weekly numbers and possibly a follow-up post with pictures once I get to my goal weight (still not sure what that should be), but I’m definitely ready to give up the daily food-logging and blog posts.

I’m still eating Paleo for the majority of my meals,  but I’ve been relaxing in what I eat, letting myself have some yummy non-Paleo foods, especially in this first week after the challenge. I realize that to keep trimming down at the waist, I’ll probably have to resume being strict for a while, but that’s OK. The results are worth it.

What About You?

The Paleo Diet worked for me. Are you going to give it a shot? If so, I recommend picking up the Paleo Quick Start Guide, Food Matrix, and Shopping List over at This will give you all the information you need to actually do it.

For a more detailed perspective, pick up Robb Wolf’s book, The Paleo Solution; it’s a quick read, but it goes over a lot of the science and anthropology surrounding the Paleo Diet, as well as giving you great advice for success. Finally, I recommend structuring your entrance into Paleo as a challenge similar to what I did. This gives you a set amount of time to be strict and also allows you to measure tangible results before and after your challenge.

Give the Paleo Diet a shot. If it doesn’t work, you can always have your old life back.

Posted in General | Tagged | Comments Off