home about me

Logic Solver Web App

May 2018

I was introducing my kids to logic puzzles and found some puzzle sites with logic-grid apps. Unfortunately they did none of the 'basic' inferences for you, leaing you to (annoyingly) click off all the boxes manually. I wrote an app that performs the inferences for you (slowly - brute force).

There's only one puzzle right now, I haven't written the puzzle generator yet.

Projects in Haskell


I've been posting some blogs to Wordpress, here's a list of what you can find there:

Online CNC Milling Calculator


As part of my education in CNC Machining, I wrote an Optimizing Feeds & Speeds Calculator for CNC Milling. It allows machinists to cut metal faster, with less stress on the machine, tool, and workpiece. I regularly get 200% improvement in material removal over the "classic" equations.

It is the most advanced of the free online calculators, and competes or exeeds the features of every for-pay calculator I'm aware of. While not particularly pretty - it's a beast of modern metal cutting technology.

Interview – How to Become a Software Engineer

27 Jun 2012

I was interviewed recently asking about my education and preparation for the job market. It was fun to look back on my formal education and highlight the parts that I have found most useful in the ~15 years since I graduated.

I have offered similar advice to numerous email correspondents over the years, so when I wrote the responses in this interview, I thought back through those conversations to pull the most salient points. It was nice to have these discussions to draw from and I feel the interview is much improved because of this.

Hope you enjoy it!

TAG: interview, education, software

Solar – Year One

01 Mar 2012

One year later, our solar photovoltaic array has generated 9,148 kWH, 91% of the predicted 10,000 kWH. Earnings for our first year total $1,777, of which $405 came from Duke Power, and $1,372 from NC Green Power.

The average rate from Duke Power was $0.045/kWH, about $0.01 less than my estimate calculations from last year. This difference makes up the majority of the revenue difference from the earlier projection.

We’ve been happy with the system’s performance and easy maintenance. There are some ongoing issues of non-reporting inverters and several panels produce below the array’s average per-panel rate. These issues are not unexpected. Below I detail the issues most relevant to our system.


One of the ongoing issues is the Envoy, which communicates with the inverters by sending signals on the power lines running through the house. Our Envoy does not get a good signal, and it is difficult to separate errors reported because the Envoy cannot communicate with the inverters, versus actual failures of the inverters. Luckily the inverters maintain a record of their output until it is acknowledged by the Envoy. Eventually, if the inverter is working, that record makes its way to the Envoy and then to the Enlighten website where we can view it.

This would be fine, except we can only examine a full resolution of data for the last 7 days, after which the Enlighten service begins aggregating. This is often not enough information to trace an inverter failure. There are APIs which allow you to download the information from Enlighten, but we should not have to join the developer program and write code to access data that is already ‘ours’. A simple link to download each month’s full-resolution data would be enormously useful for owners, integrators and technicians.


At our longitude, the summer sun is almost 40 degrees higher in the sky than the winter sun. This difference in angle is utilized to help shade the large, passive-solar windows on the southern side of the house, each of which has a purpose-built awning that shades the window during the summer months. In winter, the low angle of the sun lets its light & warmth penetrate deep into the house (about 30 feet into the interior of the house at mid-winter).

Here’s a panorama of our southern exposure around mid-winter. Due to cloud cover at the wrong times and a vacation trip, these images were taken between December 19th – 29th, 2011. I’ve overlaid a rough solar path, projected out to 3p. The solar calculators assume unobstructed solar exposure occurs between 9a and 3p every day. As you can see, this is not true for us.

The low angle of the winter sun causes shade from these tall pines (more than 50’ from the southern side of the house), to cast shadows over the lower panels at key times of the day:

  1. Early morning shade from these deciduous trees (not easily visible due to the solar ‘flare’). Full solar exposure does not occur until after 9:30a.
  2. Mid-morning, this cluster of three pines strikes up to three panels at a time as the shadow crosses the roof. Roughly half the panels are affected by this shadow crossing.
  3. This is a tall, robust long-leaf pine, a semi-rare specimen on our land. It is tall enough to block the lower panels on the western third of our roof, about 6 panels are affected.
  4. The trees quickly become thick on our western front, giving us full shade around 2:30p. The majority of these trees are not on our property.
  5. While not in the arc depicted on this panorama, this stand of pines is very tall and shades the summer sun long into the morning.

Of these issues, only #2 and #5 are tractable. We plan to selectively remove these trees to improve solar exposure in the winter.

TAG: solar, house