2013 Roundup

Posted on 18 February 2014 by Joseph

This year has been a year of much growth for me, and though ultimately I didn't complete all my goals, I did try a bunch of new stuff, some of which I really liked.

Goal review for 2013

  • Lifting goals. With my primary climbing partner out of commision with a new son, at the beginning of this year I decided to try to focus on some powerlifting goals to switch things up in the exercise department. Having done (self-directed) Crossfit for a couple years prior, I had a good foundation for the primary lifts I wanted to focus on (squat, deadlift, press, clean, snatch), as well as having a decent base to start from.

    My lifting buddy and I set out on the road to swoleness with a copy of Starting Strength, the best place to start as far as I can tell. My lifts immediately started progressing, and I became more confident in my form. The most surprising thing to me was the effect of diet on lifting. If you want to get stronger, really a lot stronger, eat as much as you possibly can! For me, that meant trying the GOMAD thing, which, incidentally, really works.

    Ultimately, it's all about the numbers. In 3 months of the 'beginner' programming from SS, my lifts went:

    • Squat: 295 -> 320
    • Deadlift: 295 -> 345
    • Press: 145 -> 155
    • Clean and jerk: 205 -> 225
    • Snatch: 165 -> 185 While not quite hitting the 2X bodyweight goals I had for myself, I felt good about the gains.
  • Reading. I set out to read 50 books in 2013, and as of today I have less than 100 pages left in the 50th. So close. I read some really excellent works though, both fiction and nonfiction, as well as exploring graphic novels a bit. Some favorites are:

    • A Canticle for Leibowitz - Walter Miller, Jr.
    • Feeding the World - Vaclav Smil
    • The Notebook, The Proof, and The Third Lie by Agota Kristof
    • Everything ever written by Milan Kundera
  • Get my spending way down. Late last year I started reading Mr. Money Mustache, and the whole 'eschew materialism in favor of doing things you love to do' concept stuck with me. I spent the first part of this year getting my spending in check, and at this point I am spending between $1,000 and $1,200 a month, with my yearly costs factored in. This is a far cry from where I started, and I must say it feels very liberating to acquire almost nothing.

    Additionally, I decided that many of my things that I already had were nonessential, so I purged hundreds of books, DVDs, musical instruments, kitchen gadgets, and other "stuff" from my life.

    On the other hand, I did acquire something big in 2013: another home. Specifically, I bought a small condo within walking distance to town, and I love it. I burn maybe 1/4 tank of gas per month, and that is almost all in climbing travel. Additionally, I got a good deal on it, and while it is tying up a good bit of my capital, it has lowered my monthly burn rate significantly.

  • Improve my knowledge of web software and deployment. This was a resounding success. I rolled out several side projects this year, each of which taught me many things. Web servers, datastores, security, queueing, infrastructure automation tools, and more.

  • Take on a social good project. I worked with my friends over at Maryland Nonprofits to help create a spacefinder for nonprofits, focused on low-cost sublets. This tool promises to help nonprofits in the Maryland area find homes for themselves so they can focus on their actual missions. This isn't quite finished yet, but it is nearing release, and I am excited to see where this goes.

  • Climbing. After my stint lifting (and brief forays into Olympic lifting and Crossfit Football), I decided to get back into climbing after all. My original goal was to boulder V6 outdoors, and while I haven't quite crushed it yet, it is on the near horizon. The last time I went out before the end of the year, I climbed three V5 boulder problems.

  • Travel. This goal is always on my list. This year, I was lucky enough to have time to take an 18-day road trip with one of my closest friends. From Virgina, we drove north to Chicago and beyond, ultimately taking highway 2 most of the way across the northern part of the country. Along the way, I saw and met some excellent people, I got to do the greatest hike I've ever done, I saw tons of wildlife, I got to see my sister, and I got to see the City Museum in St. Louis, which was the sleeper hit for the trip as far as I'm concerned. While 18 days isn't as much as I would like, all in all it was still an excellent trip.

  • Create some cool side projects. Like traveling, this is a "forever" goal. This year I released my first "major" side project, Silvi, aimed at improving institutional (and personal) documentation. I also toyed with YellowCap after talking to my mother, a landscape professional, about one of the problems she has in her business: keeping clients up to date in the face of changing situations (backordered plants, weather, etc.). Lately, I've been working on Photobooth Creator, a spin-off of an afternoon hacking project to put together an HTML5 photobooth for the MiserWare holiday party. Additionally, I've done myriad other smallish projects, ranging from games to libraries. You can find most of them on my Github page.

    Along the way, I've grown quite a bit as a developer. Deployment methodologies, integrations with other systems, new languages, and improving old ones have all made my fu much tighter.

New goals for the new year

Based on the amount of flux in my life at the moment, 2014 promises to be an exciting year. Here are, as of now, the goals I have for the upcoming year.

  • Make $500 on a personal project. Word on the street is that the first $500 is the hardest.

  • Get Lasik. Thanks to an incredibly generous gift from my parents, I will be getting my eyes did on January 28th. I am excite!

  • Work on a project with Chris Poirel. Chris is an old friend, and a genius to boot. I don't know if he'll have time with his new job, but I'd love to work on something with him this year.

  • Read 25 challenging books. Both nonfiction and fiction, and I expect to read several less challenging books as well. Along the way I'd like to read A New Kind Of Science. Stephen Wolfram fascinates.

  • Boulder V6 outdoors. Carry-over from last year. The psych is high though, so should be an early one to knock out.

  • Write and record five songs. I've tried this one before, and I have trouble sitting down and actually doing it. We'll see.

  • Learn to fish. I feel like this is almost a birthright.

  • Kill, clean, and eat an animal. As a meat eater, I feel like if I can't do this then I don't deserve to eat animal flesh.

  • Become conversation in Spanish. Just started Rosetta Stone. This is something I've wanted to do for some time.

  • Build a major(ish) project in a functional language. Functional languages seem awesome to me, and I use functional features of many of my favorite languages, but I've never built anything serious in a pure functional language. UNTIL NOW.

  • Travel. I've already got a trip lined up to India to speak at the NAE IAFOE symposium in May. I'd also like to take a big destination climbing trip. Again, a "forever" goal.

  • Create some cool side projects. I'm foreseeing a genetic programming framework for Clojure (with the comments in Spanish!). I usually just follow my interests for side projects, so we'll see.

The Real Value of Software

Posted on 01 December 2013 by Joseph

A minimalist's view

I am undeniably a software fanboy. I work in the industry, I have aspirations to entrepreneurship, and software is my favorite hobby. I like helping people learn how to create and manipulate software. Creating something, something powerful and lasting, where nothing was before and using nothing but your own wits is and will remain one of the most rewarding and challenging aspects of my life. Recently though, I've come to realize that there is a deeper promise of software, one that offers a compound benefit to all of us. Software serves to staunch slightly the wound that threatens all of our well-being and the well-being of the planet on which we live: rampant consumerism.

[Sidebar: I say staunch and not repair because software doesn't really solve anything at a fundamental level. To escape from the 'more is better' cycle, we need to shift our perceptions about what makes us happy and what is really valuable, and this will require participation from all levels. Ourselves as individuals, our friends and family, our media and our ostensibly "society", up to the level of policymakers and economists, everyone will need to rethink priorities for a cure instead of a stopgap.]

What do I mean? Here are a couple of examples:




...and numerous other examples. Somehow, under the guise of lower prices, software and the Internet have convinced millions of people to get rid of vast swaths of their things, reducing manufacturing output, waste, and footprint in one fell swoop!


"So I threw out all my old Backstreet Boys CDs when I got my iPod, so what?" It's true, it may seem like a somewhat trivial example. However, aside from the ongoing benefit (you haven't bought many CDs since then either, have you?) this reduction, and any reduction in the literal footprint of the things we purchase may translate into a reduction in the space we feel we need to live. Smaller apartments and smaller houses in turn translate into a reduced environmental impact, as energy requirements and sprawl are reduced.

Furthermore, though the death of the local shop at the hands of the Internet is generally considered to be a bad thing, one happy side effect is that fewer shops are being built. Less development means less sprawl, less construction waste, and less energy to keep those buildings lit and heated. Though it's hard to say for sure, odds are favorable for a net-positive reduction in energy overall moving from brick-and-mortar shops to online venues.

Waste and pollution

Like the movement away from brick-and-mortar shops, the slow death of the mail has been lamented by many. Ignoring the socioeconomic benefits of mail delivered everywhere, it is hard to argue that the amount of waste paper generated versus email was a good thing. Similarly, the environmental costs of moving mail from place to place won't be missed.

More generally, software has allowed us to eliminate many forms of waste and pollution, both obvious and subtle. A giant pile of discarded junk mail is one thing, but we're also getting rid of the over-packaged media goods we purchase. Though we're really just touching the tip of the iceburg thus far, telecommuting is cutting down on emissions from our vehicles getting us from home to work and back everyday. Built-to-be-consumed items like calendars are not only cheaper but better when they are digital.


As mentioned above, a reduction in space and waste isn't solving the problem of consumerism. To really address the issue, we need a change in attitudes. Though I don't have any proof for this, I personally think that eliminating our common "collections" - DVDs, CDs, books, and the like - we are retraining ourselves to stop collecting. The mentality that a bigger collection (of anything) is better, that more is better, is the root of the problem of consumerism, and a source of much pain and frustration, not to mention waste and pollution.

I also think this elimination of visibility will continue. Smart phones and their capability for software have let us consolidate our telephone, Gameboy, iPod, GPS, camera, and alarm clock, and are working on our Kindle and television. The removal of brick-and-mortar stores will cut down on window shopping and impulse purchases. [How we will fare versus truly targeted advertising and marketing that follows us everywhere is another story, and perhaps a worse one in the end.]

Perhaps our collections just shift. Instead of DVDs, we collect apps; instead of electronics we collect followers. If that's the case, then we'll just be trading one kind of consumerism for another. Ultimately it's better for the environment either way. I hope, though, that software will deliver on its promise of a simpler life less encumbered by the burden of a desire for more at any cost.

Startups and Angel Hiring

Posted on 01 June 2013 by Joseph

A close friend of mine, Chris Poirel is graduating with his PhD soon. Unlike many new PhDs, though, he isn't interested in pursuing a career in research or academia. Over the past couple of months and quite a few cups of coffee, I have attempted to give him some guidance in re-inventing himself and his resume to make him more targeted for the type of position he really wants: a data scientist.

His initial applications were for jobs at larger companies, and often companies with a history of hiring for research in industry. His applications were well received, but after a round or two of seemingly successful interviews the companies were passing, often without much of an indication of why. My suggestion was that many of these companies, with their large HR department, were reticent to hire a fresh graduate into a senior position, regardless of their academic pedigree.

The reasoning for their decision is simple: it's a matter of risk. My suggestion was to look into jobs with startups because startups, like angel investors, are in a position to take a risk for someone unproven who might be incredible. Because they don't have much to lose and potentially quite a lot to gain, startups are almost uniquely able to take the leap on the unproven but brilliant PhD, or the 18-year-old woman with the incredible Github account, or the reclusive genius who insists on working from his cabin in Montana. While they might not always work out, taking these "angel hiring" risks potentially offer startups the elusive large multiple.

What does that mean for you? If you run a startup, be willing take risks in hiring (but be prepared to fail fast!). If you're looking for a job, and particularly if you're unproven, consider looking at startups. Of course, as a startup employee you are taking a bit of a risk too, though, again, it's worth it. As for Chris, he just found his data scientist job at RedOwl Analytics, where he'll no doubt be building some seriously next-level software.

The Perils of Embedding Python 2.7

Posted on 01 April 2013 by Joseph

TL;DR: A change to the ‘import site’ mechanism between Python 2.6 and 2.7 can mean silent application exit for applications with embedded Python.

As you may know from some of my other posts, we at MiserWare leverage an embedded Python interpreter in our Granola product, with success despite the pitfalls and sometimes cryptic (or missing) documentation. This week, I upgraded us from Python 2.6.4 to Python 2.7.2. Everything was going smoothly, until I began testing installation packages for software with an embedded interpreter on our clean (i.e. non-development environment) test systems.

Since the packaging, in this case MSI files, hadn’t changed significantly for the upcoming release, and since my tests on my development machine of the software itself had gone smoothly, I expected the installation tests to be what they usually are: tedious, boring, and successful. I fired up the installer, went through the brief UI sequence, hit Finish and… the software didn’t start. Hmm. I cleaned the system completely, re-installed, same problem. I locate the file on disk, double click, same problem. I run the program from a command prompt, same problem.

At this point, I figure that the problem is with the packaging itself, so I double check my WiX files, but everything seems to be fine. By this point, it still hadn’t occurred to me that the Python upgrade could be the problem, so I drop in a few debugging MessageBox calls, rebuild, and re-install. After a couple rounds of that, I discover that the software is failing inside the Py_Initialize call. Hmm.

I fire up an old development environment that hadn’t upgraded to Python 2.7 yet and load the project in the Visual Studio debugger. Running the program causes program exit with return value 1. What? All of our return value error codes are negative numbers. Was the embedded Python library causing the application itself to exit?

It turns out, that is exactly what was happening. After some step-debugging through the disassembly of python27.dll with the Python source tree open in a separate console, I finally locate the source of the exit in Python/pythonrun.c:

static void
    PyObject *m;
    m = PyImport_ImportModule("site");
    if (m == NULL) {
    else {

Yikes! Previously (at least, in 2.6.4), ‘import site‘ failure would at worst print an error message to the console if there was an attached console… in the case of Granola, a Windows GUI application, there wasn’t, so all I had to work with was an application exit code being raised from within a linked library. If I was going to be diplomatic, I’d say that the decision to accept that patch was made with the interpreter executable and not embedding applications in mind. And it gets better.

Now armed with the location of the failure, it’s time to fix the application. It turns out that the call to initsite() occurs prior to the parsing of the environment variables. What that means is that PYTHONPATH, PYTHONHOME, and other ways to tell the interpreter where to find modules don’t have an impact on the search for the site module, though that is not documented. [N.B., the reason it worked on my development machine was that it DOES honor a Windows registry setting that the Python installer creates, pointing to its own lib path.]

Without detailing the pain I went through to determine this, I’ll tell you the answer. You basically have one option (in Windows at least): you need to lay out your Python modules relative to your embedding application just as they appear in the normal Python installation tree, which is to say putting them all in Lib/ and DLLs/ folders at the same directory level as your application. You can also optionally call Py_SetPythonHome to specify a different directory under which to search for Lib/ and DLLs/. Oh, and just in case you go looking for it, that layout isn’t documented; you’ll only see the preferred layout for Unix systems which won’t work in Windows.

What’s the takeaway? For me, it just means one thing: don’t expect consistency out of future versions of Python, at least with regard to embedding applications.

2012 Roundup

Posted on 18 February 2013 by Joseph

Inspired by a blog post I read via Hacker News, I thought I’d create a list of things I did and didn’t do in 2012. You know, for posterity.



  • Granola Enterprise. A lot changed in MiserWare’s flagship product Granola Enterprise in 2012. In February we debuted a new queue runner-driven data model for our backend, allowing us to do much more with the data coming from clients. In April, we rolled out what we intended to do with that: a new historical view of organizational energy consumption, complete with insights into areas of wasted energy and proactive tips for eliminating it.

    We also changed our preferred payment mode to a monthly subscription plan, allowing users to pay at the end of the month out of savings they have already earned, and only pay for the machines that were active during that interval. The end goal of this was to transition to a more organic model. We are still in the process of improving our funnel.

  • FatBatt. With the core product for Granola Enterprise maturing, we began to look for new areas to direct our development efforts. For me, as I’m sure for many, battery life in my laptop has always been a thorn in my side. I began to examine ways to improve battery life, during which I noticed how little information we are actually given about our battery life. As an example, how long was your last battery discharge? How long does it take to fully charge your battery? I couldn’t answer these questions, and I thought this would be a good place to begin to approach a solution.

    The result is FatBatt, a program intended to help you make intelligent decisions about your energy consumption on your mobile devices. It offers insight into your past discharges as well as providing statistically accurate estimates about the future given your current setup. This lets you make decisions like what the appropriate tradeoff for monitor brightness versus battery life is.

“Major” side projects

  • Sprout! Someone introduced me to the pen-and-paper game Sprouts), and I thought it would be fun and illuminating to try and create a version of this game using browser technology. I made it as far as the one-computer interface before I put it aside. Never released outside of my own development environment.

  • Brackcity The purchase of a ping-pong table for the office spurred a huge amount of ping-pong competition among me and my coworkers. I created an interface for doing algebraically-correct rankings based on historical gameplay. Needless to say, the main result has been a further intensification of the competitiveness. Never released outside of the office.

  • Silvi A couple months ago I set out to scratch an itch of mine by creating a web service to better organize my thoughts. The result is Silvi, a way to create trees out of your information. The original intent was to develop a better way to collaborate on documentation, but using it myself along the way illuminated lots of other uses for it: organizing class notes for school, documenting a new programming language I was learning in a structured way, organizing documentation for products and services, and more. This is the furthest I have taken a personal side project, and I am very excited to see where it goes.

Languages, tools, frameworks

Python, Javascript, CoffeeScript, LESS, C , C++, PHP, SQL.

Node, Flask, Pywin32, py2exe, OpenCV, numpy, sqlalchemy, WMI, MailChimp API.


I read about 25 books this year. As in 2011, my focus was on postmodern fiction, but this year I branched out and read some of my old flames and some nonfiction. Highlights:

  • Thinking, Fast and Slow – Daniel Kahneman
  • 1Q84 – Haruki Murakami
  • Freedom – Jonathan Franzen
  • Machine Learning – Tom Mitchell
  • The Book of Laughter and Forgetting – Milan Kundera
  • (Assorted) – Edward Tufte
  • The Unbearable Lightness of Being – Milan Kundera


The opening of Crimpers climbing gym in Christiansburg fueled a lot of my growth in climbing, both via meeting new climbers and improving my technique and fitness level. Both contributed to me sending my first (and second) V5 boulder problem this year.

I climbed at several new areas this year.

  • Grayson Highlands in southern VA was largely developed by my friend Aaron Parlier, and as luck would have it, we bumped into him on our first trip down. He pointed out a bunch of the hotspots, and the rest has been tip-shredding history.

  • Though I had been down there once before, the release of the guidebook for bouldering at Moore’s Wall in NC led to me spending several weekends down there. The style of bouldering, with big compression moves, fits me well and there are a number of projects I’m eager to send there.

  • With neither guide nor guidebook, it was hard to find the highlights, but a recent trip to The Hill in Peaks of Otter, VA showed some really interesting problems on interesting (if not entirely clean) rock. I have high hopes for this area in 2013, particularly if I can get some guidance.


I traveled to (and had a booth at) CES in Las Vegas. My first taste of Sin City was surprisingly delicious: I ate at quite a few good restaurants and had a generally large time. I also visited San Jose and San Francisco, and spent some time in Santa Barbara implementing a case study. I also spent quite a bit of time in Chicago in the early part of the year visiting my (now ex-) girlfriend Natalia.

I ate at some great restaurants, including Picasso and Nob Hill in Las Vegas, Sutro’s in San Francisco, and (actually this was late December 2011) Next in Chicago. In the upcoming year, I’d really like to go to minibar by José Andrés in Washington, DC.

I sold my house in Christiansburg during a decidedly down market. The house had been on the market for over a year, and it was such a relief to sell it before the winter. As part of my exodus, I rid myself of a huge number of belongings, greatly simplifying my life.

I bought a truck, my first entirely autonomous car purchase. The process, going through a dealer, certainly has a greasy feel to it, but in the end I am happy with my purchase. I outfitted the truck with a very, very cheap camper shell and built a sleeping platform: it is ready to act as my home for camping and climbing trips.

2013 goals

I didn’t explicitly establish goals for myself for 2012, though my goals certainly included:

  • Sell my house (check!)
  • Travel more (FAIL)
  • Climb more (check!)
  • Work on side projects (check!)
  • Get back into good health (check!)
  • Create an organic software sales model for MiserWare (ongoing, not a win yet)

For 2013, I’ve decided to be more ambitious. My goals include:

  • Squat 2x BW
  • Deadlift 2x BW
  • Clean and jerk 1.4x BW
  • Snatch 1.1x BW
  • Press BW
  • Run a 5:50 mile
  • Climb V6 outdoors
  • No injuries
  • Break even on a side project
  • Make 10x investment in FatBatt
  • Read 50+ books, including the entire Terry Pratchett oeuvre
  • Write and record 5 songs I don’t hate

Copyright © 2018 Joseph Turner