Un-shelving dreams

Do you have a dream that you shelved? I’ve been thinking about this a lot lately while searching for my Single Motivating Purpose. I’m happy to find that one of my inspirators, Lindsey Stirling, recently wrote about this very topic. Lindsey, if you don’t know, is passionate about music and dancing. At 6 years old she started learning violin. Her family couldn’t afford dance lessons, but that never stopped her from making up her own. During high school she taught herself to edit videos and during college started a Youtube channel posting music videos of herself playing violin. After being a quarter-finalist on America’s Got Talent in 2010, her channel exploded and is now one of the most subscribed channels on Youtube. Here is her story about un-shelving her dream of dancing.

Have you shelved a dream? I think it’s time to take it down and explore it again.

Review: Girl Model

The documentary Girl Model peers into the dark side of the modeling world through two sets of eyes: Ashley, a 30-something former model turned talent scout and Nadya, a 13-year-old Siberian girl hoping to escape poverty by becoming a model.

When Nadya is recruited by Ashley to spend two months in Japan, she is promised $8,000 and two paid shoots. When she arrives, however, she encounters a language barrier, a maze of casting sessions, and an agency that can change her contract on a daily basis.

Along the way we meet some of Ashley’s shocking coworkers including a guy named Messiah who claims he is saving girls like Noah saved animals, and another scout who takes his recruits to the morgue to show them what happens if they don’t listen to him. Ashley admits she is addicted to traveling and doesn’t want to act as a mother to the girls she recruits.

As Nadya runs out of money and promises of work, she wants nothing but to return home. It is revealed though diary tapes that Ashley went through a similar experience while a model. She explains that she knows many girls she recruits will end up in prostitution. The point is driven home in a scene where Nadya is looking for her photo in a magazine and browses through a section of adult magazines.

We also learn that Ashley is suffering from a tumor. When the unusually large mass is removed it has blonde hair. You’re left to wonder if this is an appropriate metaphor for Ashley’s role in the modelling industry.

At the end of the film, Nadya returns home $2,000 in debt and Ashley returns to her million dollar glass house (how appropriate).

Overall I thought this film was very eye-opening into how the modelling industry preys on desperation though it left many unanswered questions. It felt as if Ashley wanted to reveal some dark truth at many points but stopped herself short. Considering that the documentary was Ashley’s idea, perhaps it was a call for help.

You can watch the full documentary on Netflix.

Tip: Getting a good price on Amazon

Thanks to Prime, I love to shop on Amazon, but how do I know I’m getting a good price? For the last year I’ve using a free Chrome extension called Amazon Price Tracker from keepa.com to view the price history of every product I order. Several times this has prevented me from impulse buying something because I noticed a recent spike in the price. The plugin allows you to set a target price and receive a notification, either by email, tweet, facebook post, or desktop notification when the product reaches your target price.

Right now I’m waiting for some laptop RAM to drop in price.

Productive weekend

Well I had a productive weekend.

  • Set up a Twilio account and was able to call myself from C#. Mad props to the Twilio team for creating the best documentation I’ve ever seen. I had this up and running in under 10 minutes.
  • Read the entire TopShelf documentation and wrote a reference service implementation including Log4Net logging.
  • Installed Ubuntu on my laptop.
  • Almost got my reference service running under mono-service. It turns out TopShelf doesn’t actually run in Mono, even though the website says it does. I was able to eliminate every error message by recompiling against CIL-compliant DLLs, but now it just exits immediately. I think I might need to just write a command line app and daemonize it.
  • Cleaned all the dead stuff out of my garden.
  • Watered all my flower beds.
  • Bought a kayak. This is going out next weekend!
  • Practiced my overhead squat.
  • Visited my grandparents.
  • Ran 3.5 miles.
  • Made some delicious hummus.

Changing my Workflowy workflow

I’m taking a page out of the Getting Things Done playbook and adding an Unsorted section to the top of my Workflowy* tree. I keep all my outstanding to do’s and unread bookmarks in Workflowy, but I found I was slow to add things because I had to stop and categorize them in the appropriate place. In order to reduce that friction, last week I started putting all new items under the Unsorted section and then organizing them at the end of the day. This is working much better for me and I’ve found myself putting even more things in here now. It’s a great place to jot down an unfinished thought because I will see it sooner than if I put it in Evernote or Google Docs.

* use my link to get double the free space.

Writing better documentation

I am currently in the AIM IT Leadership Academy. As part of this program, one my goals is to centralize and better manage training material and project documentation for all the teams at Phoenix Web Group. 

Rationale

  • It’s easier for people to join a project if it follows standards.
  • Setup instructions for checking out a project are often missing and only known by the project members.
  • While end user documentation may exist, there is often times little documentation of how the code actually works. In theory code should be self documenting but in practice it’s always better to understand the rationale for decisions.

Where should it go?

In a /docs folder in the repository. I’m using Markdown Pad for all my documentation. I want documentation to live in the same repository as the code so we can track revisions and see what the code looked like when the documentation was written.

What should it include?

  • Project objectives including what the business value of each component is.
  • Contact information for the client including a summary of each person’s involvement.
  • Setup instructions. What dependencies need to be downloaded? Any drivers?
  • Locations of backups of test data for databases.
  • Core architecture components. Bonus points for an up-to-date architecture diagram.
  • Explanation of any critical algorithms.
  • Testing plan that should be reviewed with each deployment.
  • List common errors that might occur and how to resolve them.

When will it get updated?

This is the hardest part of documentation! Set up a recurring event on your calendar. Part of each iteration retrospective should include reviewing the documentation for accuracy.

Reflecting on our HTML conventions

In post 4 years ago, I detailed how we used FubuMVC’s HTML conventions with ASP.NET MVC to simplify building views. While these were extremely helpful early on, they have started to fall apart in recent years. I love the Fubu conventions because unlike the default MVC input builders which only rely on the property type, the Fubu conventions model allows rules to be set based on a large number of factors including the property type, the property’s value, attributes, names, other properties, and configuration data. In the primary codebase I work on today I’ve assembled over 40 rules for building inputs. Unfortunately, our inputs have broken down around our increased usage of Knockout. With Knockout, I find myself building more custom (and less reusable) views which means I’m not taking the time to wire them into the convention setup. There are several other factors at play too:

  • We hired a designer and they need access to the raw HTML to style it.
  • They were not well documented for new devs.
  • Increased dependencies on jquery plugins.
  • Core conventions were stored in a Nuget package, but there was no standard procedure for updating them. Sometimes commits from one project interfered with conventions in other ones.
  • Some of my new projects are in NancyFX but the conventions have a dependency on the Microsoft MVC DLLs.

All combined, this has been a significant source of friction against using and maintaining our conventions. As part of my back to the basics push, I want to revisit our convention framework and find a better way to manage this. My goals for future conventions/best practices include:

  • Easily editable html
  • Easy to nest with divs for styling
  • Support custom ko bindings
  • No mandatory javascript dependencies
  • Each project defines its own conventions
  • Debugging for when conventions go wrong (fubu-debug style)
  • Break dependency on ASP.NET MVC libs

I’ll be sure to post here when we find a better solution.

2014 Goals

Better late than never.

Write everything down

I have been getting better at this since I set up Evernote on all my computers. Right now I have a cross between Evernote and Google Docs for recording my thoughts. Too many times I have wanted to refer to something I’ve seen before but not written down/bookmarked.

Garden

I was traveling last summer so my garden suffered. This year I will plan my garden more carefully and can/freeze anything I don’t eat for later. I am actively involved with the Lincoln Community CROPS program. I want to volunteer two hours a week with them.

Plan a weekly menu

I created a white board for my kitchen where I can plan a week’s worth of meals. When I don’t plan out my meals, I’ve ended up throwing away too much food. Part of planning my meals should include lunches so I stop eating out so much. I will base my meals off the CrossFit/Zone menu.

Get to the gym 3-4 times a week

I have a CrossFit membership. I haven’t always been that great at getting there. It’s easy to find excuses. This year they changed the schedule so I can get there Monday, Wednesday, Thursday, and Friday. I want to go all four days each week.

Inbox Zero

Inbox Zero is related to the Getting Things Done methodology. Each day I will triage my email and copy any important tasks to Workflowy, my task management software. If something can be accomplished immediately, I will do it immediately. Unimportant emails are archived, and things I don’t need to save are deleted. At the end of the day my inbox should be empty.

Work – Back to the basics

At work we adopted ASP.NET MVC in 2009. We built our own internal workflow on the early versions and have not kept up with some of the newer features. Recently I’ve been getting some new developers up to speed on the platform and discovered that our code has drifted from how MVC is taught today. I want to revisit Microsoft’s recommended best practices and make sure we are following them going forward.

Also, my education was in physics and not so much computer science. I am a self taught programmer. So far this year I have been working my way through Robert Sedgewick’s Algorithms book to brush up on my theoretical CS. On my own side projects I have been minimizing my reliance on third party libraries so I can revisit the fundamentals of javascript, HTTP, and SQL.

Work – Consolidate a best practices document

As part of my back to the basics push, I want to make sure I truly know what I’m learning. I believe the best method for this is to follow Richard Feynman’s advice: teach it! I’ll detail this in a separate post, but as CTO of PWG I would like to consolidate my research and experience to a documented set of best practices for my coworkers to refer to.

Stretch – Calculate the mission trajectory for the Apollo missions.

As a kid I was fascinated with the moon missions. I’ve seen Apollo 13 more times than I can count. Since I have a background in physics, I enjoy finding real world applications for it–something I don’t get to do much as a programmer. This year I would like to learn how the NASA engineers calculated the appropriate launch windows and burn times in order to get to the moon, land, rendezvous, and return to Earth.