Internet of Things (IoT) – Our Sauna

As many folks of Finnish descent are want, we have a sauna. Each night someone is tasked with monitoring the temperature. What better application for a RaspberryPi to announce via social media, that the desired temperature is reached?

Here is an offering via GroupMe:


It’s pretty basic, but a temperature sensor is connected to a RaspberryPi which has a wireless connection to the internet. With a little work, it’s integrated (securely) into a popular social media platform.

Internet of Things (IoT) – Our Sauna

Artisans Don’t Scale

Some software developers consider themselves as artists. After all, writing software can certainly have creative elements. However, these elements make up a minor part of a scalable team or product. 

Scalability, to me, has many facets: time, people, technologies and customers. 

Over time, years, a product may have many incarnations of product owners, managers, developer, strategies and so on. Artists live in the present. How will works with a time perspective of “now” hold up?

If artist #1 moves on and artist #2 steps in, what does the team do? Should the second artists creativity be stunted because of prior art? If so, he can’t be an artist. I can’t think of a good way to dig out of this hole…

In the art world, an artist tends to specialize in oil or water paints, sculpture, etc. After all, that is their medium. Do software artists have the same thoughts? Can they switch between development languages, operating systems, delivery platforms, or back-end technologies?

What if customer needs change? For example, say the government foists a new set of audit regulations on the customer domain? Implementing such a feature set sounds non-creative, in fact boring. So how is our bored artist going to get along?

So why bother with writing this? Some time ago, a software developer told me that he considered himself to be an artist. I thought this a peculiar comment and just kept it in mind over the years. Finally, I thought I had collected enough to squelch the silly notion. 

Artisans Don’t Scale

Simple Tools: Interpolation

In my shop, there are many washers – flat little things, varying diameters, metals, types, etc. When I need one, it’s a quick process to sort & select. How are software tools?

I’m working on a small RaspberryPi project with a temperature sensor. It became apparent it would be helpful to map that temperature to the wall thermometer. I ran a quick measurement exercise to build a table of matching temperatures in 10 degree increments.

Then I need some interpolation code to make good guesses. A scan of github yielded interpolation tools that seem to have a lot of other code or large libs or in one case, required me to read & comprehend the offering. Neither struck me as being simple.

What would be a simple tool?

A single file & class. Check.

Unit tests so users don’t have to debug my code. Check.

Generic class to fit several float types. Check.

Simple code, so if one wanted, they could quickly get comfortable with it. Check.

Exception safe. Check

Able to handle out-of-range requests. Check.

So here is an offering for a simple, safe & reasonably robust interpolation class for C++.

Simple Tools: Interpolation

Developers: You are NOT special…

Software development is still a pretty immature industry. It’s very cheap to get started and essentially anyone can enter the arena. Obviously immature processes are not scalable to large endeavors, nor will hold up over time or personal changes. In particular, naming or code conventions are very important – and frequently hated by developers.

I had a conversation with a design engineer working at a domestic automobile manufacturer regarding standards. I asked of the impact to the company if designers could create blueprints/drawings by which ever manner they wanted. For example, the dimension arrows could be open or closed, wide or narrow; title blocks could be anywhere on the page; and so on. His response: “That would shut the company down immediately.”

In other words, having standard communication formats for blueprints is very valuable for the company. Mankind has been using blueprints to communicate for probably a couple hundred years now. In fact, in high school drafting class, we were instructed exactly how to create blueprints. The value of the blueprint is communication of the content.

With software development, many consider ourselves as “artisans”. Our style is best and the rest of humanity will come around. In the unlikely even this occurs, please be aware that even companies such as Microsoft are updating their tools (Visual Studio 2017) to enforce code formatting.

Notice that this is done by the IDE or source control system. It’s not a document you have to memorize. Also, each team can customize it for themselves and grow as a team. Success will be when one cannot discern who wrote what, rather we simply focus on material content.

Developers: You are NOT special…

Adding PGP (GPG) to Mac OSX

Recently it was necessary to add PGP technology to my work laptop. So then, it became imperative that the same be implemented on my personal MacBook Pro. This turned out to be pretty easy as I seemed to have found some great web pages that walked me through the steps.

The general recommendation was to have GPG Suite installed. It’s easy enough to download, but it had a SHA256 checksum hash to validate the download. The version of OpenSSL that Apple provides is not capable of SHA256, so that meant upgrading OpenSSL.

It turns out that OpenSSL is distributed as source, not a compiled binary. Compiling open source can be an adventure, so I pondered a bit to make sure I was willing to spend the time to get it working. It turns out, the pages I found worked perfectly – just follow the steps! The only hassle was adding my non-admin account to the sudo list. Not a big problem, just a small hiccup.

From there, installing GPG Suite was a breeze and testing with other accounts confirmed it’s working just fine.

Here are the pages you’ll need: – takes > 1/2 hr to build. Follow each step & all will be well will get the installer
Adding PGP (GPG) to Mac OSX

Back to Basics: Can You Live Without An IDE?

Way back when I started with Java the Jbuilder tool was great. This IDE helped me move along quickly on the initial learning curve. Then I jumped to eclipse, as this was all the rage. eclipse didn’t have the cool GUI editor that Jbuilder did, so that caused some switching back & forth.

Eventually the GUI couldn’t work with the Java Swing grid layout as I wanted. So then, I forced myself to learn how to use the grid layout by hand. Surprise! It wasn’t that bad. In fact, now I had complete control!

Going back to eclipse, all was well until something broke: jars weren’t getting updated correctly, ordering was wrong, etc. All of this became very difficult to sort out. Again, going back to the command line and manually configuring & launching teaches you *exactly* what is going on.

Today I’m setting up my new MacBook Pro to do C++. Vim is getting configured, my Kindle references are getting moved over, iBooks, etc. It’s very refreshing to be able to use terminal commands such as:

rm ParseTextFile.o && make parse && ./ParseTextFile.o

(OK, the 1st command is redundant, but its still cool to see it.) The bottom line, is working at the ‘atomic’ level is very empowering as one can see the actual building blocks that make up so much of what we do.

Back to Basics: Can You Live Without An IDE?

Idle hands…

“Idle hands are the devil’s workshop”, as the saying goes. In other words, idleness  brings about professional regression. 

Each of us is granted a finite amount of time. If the decision is to squandered that time, the a non-renewable resource is lost: time. Meanwhile the competition has made an infinitesimal improvement that will be compounded daily. This adds up to a great advantage. 

The choice is ours: small, daily improvements or basically nothing. Idleness is too expensive and must be eliminated. 

Idle hands…