2015 Reading and Listening Updates
2015 was a busy year with lots of time spent on the road and not enough spent at home with my family or relaxing with a good book. Nonetheless, I did stumble across a few excellent books in the last 12 and updated my reading list accordingly.
Two books stood out. Let me tell you about them briefly.
If you've heard about the recent Jessica Jones series on Netflix, you might be interested in some background reading. Alias Omnibus, by Brian Michael Bendis and Michael Gaydos, collects Jones' background in the Alias stories for Marvel by Bendis and Gaydos, along with some related storylines from other series (as I understand it). The Netflix and Marvel stories differ enough while tackling the same tough material to make both worthwhile reading/watching.
I also received Von Dutch: The Art, The Myth, The Legend, by Pat Ganahl, as a gift and frankly couldn't put it down. Ignore for a second the recent "Von Dutch" fashion marketing phenomenon, which has nothing at all to do with the man. Dutch was arguably the inventor and master of modern decorative hot-rod pinstriping. Ganahl, a talented, long-time automotive journalist working mostly in the hot rod scene, created a fascinating portrait of the reclusive, eccentric Von Dutch, told mostly through the recollections of people who knew him. The discrepancies in the stories say as much about the fans, friends, and hot rod scene as they do about Dutch. A fascinating and finely told bit of history.
As for all that traveling... while I haven't acquired a taste for audiobooks yet, I have been listening to hours and hours of podcasts. Two I particularly enjoy are:
Dan Carlin's Hardcore History features some great, in-depth, wide-ranging narrative overviews of historical people and events. I particularly enjoyed Wrath of the Khans, a five-episode history of Genghis Khan and his hordes, and Blueprint for Armageddon, a six-episode history of World War I as told through personal accounts and diaries.
Beware: these are long-haul listening, and a single episode can go on for hours. On the other hand, I love Carlin's ability to bring characters to life though quoted excerpts from source materials, as well as his tangent thoughts on those sources and the historians behind them.
My other favorite podcast is Nerds on Draft by my friends Gabe and Jeff. They talk about craft beer and nerdy stuff. You should also check out their excellent beer journal app TapCellar.
Toolbox: Autumn Column Catch-up
Time for some catch-up with my recent columns over at Visual Studio Magazine.
From August, 15 Visual Studio Project Templates To Jump Start Your Code, an overview of Visual Studio project templates and development scaffolds that go a bit beyond — or even more bare-bones, in the case of TruelyBlank — the default Visual Studio project templates.
In September I put together a round-up of the 9 Top .NET UI Component Collections, a long-standing request from my patient editor. If you ever wanted to know how the different control collections out there stack up against each other, check this out.
And in November, 10 ORM and Data Tier Management Tools for Visual Studio, which takes a slightly different approach than my previous columns on data access, this time focusing on tools and extensions that integrate directly with Visual Studio.
Keyboard Shortcuts for Outlook on Mac OS
I'm just going to come straight out and say it: Outlook on the Mac is a pretty decent mail client, particularly if your employer has invested in well-run Exchange and Active Directory services.
Here's the problem, though.
You're dealing with new messages in your inbox, and most tasks can be accomplished without taking your hands off the keyboard.
↑ and ↓ take care of navigating through messages.
⌘-R starts a reply, or ⇧-⌘-R (Shift-CMD-R) to reply all... used with extreme caution, please. ("Bedlam DL3?" "Me Too!")
⌘-N starts a new message. ⇥ (Tab) through the address and subject fields to the message body. ⌘-↵ (CMD-Enter) sends the message.
⌫ and ⌦ are handy, too. I use these most of all.
Now, what if you want to move a message? The keyboard shortcut is ⇧-⌘-M (Shift-CMD-M), which brings up a dialog box to select the folder. (Note that the folder has to exist already. Type a folder name, select it from the list if more than one matches the search string, then press ↵ to move the message.
Unfortunately, that's a lot of work if you move messages to specific folders frequently. Here's where we use some built-in Mac OS functionality to create a keyboard shortcut.
When you move a message to a folder by using the ⇧-⌘-M (Shift-CMD-M) or by clicking the Move button on the ribbon, Outlook adds that action to its Move menu items. You can see these by clicking Message > Move and noting the items at the top of the menu.
So, first, use either the Move button or the the ⇧-⌘-M action to register the destination in this menu. Note the name exactly as it appears here.
Now go to System Preference > Keyboard > Shortcuts.
Select App Shortcuts, then click the + button to add a new shortcut.
For Application choose Microsoft Outlook.app (it may be in the system Applications folder rather than your user Applications).
For Menu Title type in the exact name that appears in Outlook's Move menu. In my example here it's "Status (Mailbox - Dorsey, Terrence)". Your Mac will find this. It's magic.
For Keyboard Shortcut, type the shortcut key combination.
Click Add and you're good to go (assuming no conflicts with other system or app shortcuts).
Now, when you want to move a selected message, just use your keyboard shortcut. As an added bonus, if you ever reorganize folders in Outlook, the app is smart enough to continue routing messages to the right place.
Toolbox: Visual Studio Code Profiling
Code performance testing and profling tools should be part of every developer's toolbox. You don't want to spend too much time tweaking performance right from the start, but it's always good to know where your applications spend their time and resources. Inefficiencies can add up in big systems.
For an overview of current tools that support code profiling in Visual Studio 2013 and 2015, check out my July column in Visual Studio Magazine, 11 Code Profiling and Performance Tools for Visual Studio.
Apps for keyboard shortcuts, text expansion, and macros are a key part of my computer setup for both work and play. On the Mac there are lots of choices, but on Windows, one application stands tall: AutoHotKey.
It actually took several tries for me to grok AutoHotKey and really start to harness its amazing feature set. It really came down to two problems: deep, deep, deep capabilities and poor tutorials that try to show you too much too soon. The first isn't really a problem unless you get stuck, as I did, wondering where to start (and how to start AutoHotKey... it's not immediately obvious).
In the June 2015 edition of Visual Studio Magazine I attempted to address that second problem with my article Automate All the Things: An AutoHotKey Primer for Developers. Hopefully this brief, directed tutorial will introduce you to the most important features and get you using AutoHotKey quickly. From there, only your coding skills and imagination stand in the way.
Toolbox: Indie and Small-Press Programming Books
Eternal vigilance. Always be learning!
That philosophy has served me well through a pretty interesting career in technology. Today, we have so much great learning content available from blogs and videos to online tutorials and Q&A sites. Ebooks still have an advantage in some cases, particularly where the author has taken the time to provide a well-organized, holistic overview of a topic that can't be covered as well in 500-word blog posts.
In the May edition of Visual Studio Magazine I wrote about 18 Indie and Small-Press Programming Books that will help level up your skills. In many cases, most of the purchase price of these books goes directly to the author, so you're gaining knowledge and helping a fellow developer at the same time. Win-win!
Toolbox: Project Management Extensions for Visual Studio
Writing the code for your software projects is plenty of work on its own, but if you don't keep track of all the other facets of your project, the whole thing can come down like a house of cars. In the April issue of Visual Studio Magazine I shared 9 Cool Extensions for Keeping Visual Studio Projects on Track, focusing on new Visual Studio 2013 and 2015 extensions that specifically help organize the code-build-release cycle — from Git branch workflows to Continuous Integration and release management.
Toolbox: Documentation with GitHub Pages
Writing documentation for software (or any product, for that matter) takes enough time, effort, and expertise. Publishing documentation is an often overlooked part of that task. In the March issue of Visual Studio Magazine I explained How To Simplify the Dreaded Task of Documentation Publishing with GitHub Pages based on some work I've been doing at ESPN to document out web APIs.
The solution takes some pretty simple ingredients: Markdown, Jekyll, Git, and GitHub. I explain how these fit together and how GitHub's built-in GitHub Pages lets you host content for free. Example repos included.
Toolbox: 9 New Visual Studio 2013 Extensions
It's April, so about time I told you about my February Visual Studio Magazine column, 9 New Visual Studio 2013 Extensions — a pretty good selection for only a month into the new year.
Visual Studio 2013 Community Edition is making extensions (and extension development) available to a larger group of developers, and I think we're going to see a wave of exciting new extensions in the run-up to Visual Studio 2015.
Tap Utils for TapCellar
If you enjoy exploring craft beer, TapCellar, created by my friends Gabe and Jeff, is a fantastic beer journal app for iPhone. Rate the beers you've tried, share recommendations with friends, keep a shopping list, even track the contents of your beer cellar. It's a great app. Check it out.
In fact, I like TapCellar so much, I wrote Tap Utils, a collection of tiny Ruby command line scripts that let you extract interesting information from your TapCellar backup.
There are four scripts right now:
tap-avg-grades returns a table showing each style for which you've rated a beer, along with the average grade for the style, the number of beers rated for the style, and the standard deviation of grades. The standard deviation seemed like a clever idea at the time, but doesn't really tell you anything useful. I might change this a more relevant measurement at some point in the future.
tap-shopping prints out a nicely formatted ASCII shopping list from the beers in your Shopping List saved filter. You can sort the results by brewery, name, or style keywords.
tap-styles prints out a chart illustrating the number of graded beers for all styles with graded beers.
tap-timeline prints out a vertical scatter plot chart illustrating grades over time based on a name or style keyword. The screen shot above shows an example.
I learned a lot making these scripts and I hope you enjoy playing with them. There's decent documentation in the readme, and all of the utils should have
--help options as well. Drink some beers, grade them in TapCellar, then print out some pretty charts. Above all else, have fun.