Community Posts

Last Updated: 2021-05-05
Submit a blog

Making a Wi-Fi Smart Fan (Part 1)

May 4, 2021 - http://austinhanson.com

A few years ago I started slowly transforming my house into a “Smart House”. It started with some friends of ours showing us their smart bulbs and how they could tell Alexa to turn them on and off. I’ll admit, I was skeptical of how smart bulbs could be life changing, and it took a few years until I would get there. But this isn’t that story, this is about how I converted my plain ol' dumb fan into a Wi-Fi enabled smart fan for my OpenHab system. Read more about Making a Wi-Fi Smart Fan (Part 1)

Coding Guidelines

April 29, 2021 - https://www.aligneddev.net

Coding Guidelines Software Systems can easily pile up technical debt (see my Clean Architecture for more thoughts on that). One of the reasons is that people rush. Another common one is not thinking about or knowing about good software practices. How do we teach this and rely the concepts? I don’t think a style guide and coding standards is enough, but I offer some principles to follow and share. Read more about Coding Guidelines

Finding Success with UI Automation

April 12, 2021 - https://www.aligneddev.net

Success with UI Automation UI Automation is hard to create to make reliable, consistent testing to validate functionality. Especially for products that have existed for years. I have been a product for many years where we moved from minimal automated tests to completely relying on tests. I’ve also witnessed a journey that isn’t going very well and we need to “right the ship”. I believe that test testing pyramid is correct as shown in The testing pyramid. Read more about Finding Success with UI Automation

Tinker-like REPL for Mezzio

March 31, 2021 - https://mwop.net/

Today in the Laminas Slack, somebody asked if there was an equivalent to Laravel’s Tinker REPL. The short answer is "no", but I had a suggestion for them. PHP REPL The first part of my answer to the question was suggesting they use the PHP REPL. PHP has had a REPL since version 5.1.0, which you can invoke using php -a. Once you’ve started, you can do anything you’d normally do in PHP, including such things as including files, declaring namespaces, declaring classes, etc. Read more about Tinker-like REPL for Mezzio

Improving Organizations - Many readings, videos for resources

March 30, 2021 - https://www.aligneddev.net

Many readings, videos and thoughts for resources to Improve Organizations I’ve read many books and articles and watched videos over the last 14 years that informed and shaped my thinking. I’ve put these into the order that I came across them and added some comments. Note: I moved this section out of my 2020 article “Time is valuable, Project to Product, reducing waste and Software Development Process“ Agile and XP Programming Thank you to my University of Minnesota, Morris professors for teaching this approach and unit testing! Read more about Improving Organizations - Many readings, videos for resources

Laminas CI Automation

March 12, 2021 - https://mwop.net/

The Laminas Project has close to 200 repositories between the main project, Laminas API Tools, and Mezzio. It’s a lot to maintain, and keeping on top of incoming patches can be a gargantuan task, much less creating releases. That’s why this past year, we’ve spent a bunch of time on streamlining our processes; we want to be able to review, merge, and release changes quickly and confidently. To that end, we have developed a number of GitHub Actions to make these processes as easy as possible for our maintainers. Read more about Laminas CI Automation

Properties in C++20

March 4, 2021 - http://austinhanson.com

C++ doesn’t support getter/setter style properties. But you can get pretty darn close with templates or macros. #include <iostream> #include "properties.h" using namespace std; class User { private: int mId; int mWeight; int mPurse; int mBank; public: // Non-auto property only supporting get (runtime check) Property<int> Id{{ .get = mId }}; Property<int> Purse {{ .set = mPurse }}; Property<int> Bank {{ .set = mBank }}; Property<int> Wealth {{ .get = [this]() { return mPurse + mBank; }}}; // Auto-properties Property<string> FirstName; Property<string> LastName; // Non-auto property Property<string> FullName {{ . Read more about Properties in C++20

Learning something new (with Svelte JS)

January 31, 2021 - https://nhawdge.netlify.app

As with most weekends. I try to do a little bit of coding. At work recently we were chatting about JAM stack frameworks, and we briefly talked about Svelte. After making this blog with Gatsby I wanted to give it a shot. Without further ado, here it is. Every Saturday night, a group of friends of varying size gets together and we play Jackbox games. Our current system of picking a game is usually someone wants to play a game, but they can’t remember the name, or which party pack it’s in. Read more about Learning something new (with Svelte JS)

Getting MacOS BigSur + ESP8266 to Play Nice

January 30, 2021 - http://austinhanson.com

I ran across The “do not be alarmed” clock on HackerNews and thought that would be a fun little project to play around with. It’s been an awful long time since I’ve done anything with hardware and I haven’t played with anything “Arduino” yet so I made my way over to Amazon and picked up: NodeMcu Mini D1 (WeMos D1 Mini) x5- OLED 128x64 SSD1306 I2C Self-Luminous Display- ELEGOO Electronic Fun Kit Bundle The only thing that has come in the mail thus far was the immediately useful thing, the Mini D1 board. Read more about Getting MacOS BigSur + ESP8266 to Play Nice

Getting started with Scheduled Jobs - WIP

January 7, 2021 - https://nhawdge.netlify.app

What are Scheduled Jobs? A scheduled job is a handy tool accessible from the admin panel to run a task doing predefined actions. Normally you’ll use these to maintain some part of your project without needing to be involved. This could simply be cleaning out the recycling bin on a scheduled interval, or emailing your admins a list of recent changes once a month. Scheduled jobs do not need to be scheduled, and can be run on demand, for example indexing your Episerver Search and Navigation index. Read more about Getting started with Scheduled Jobs - WIP