Showing posts from March, 2019

State Persistence with Firestore and Redux

I recently created Battlesim, a website and app for playing historical miniature games. While implementing the state maintenance of this app I used Redux. I started with the intention of saving state between sessions entirely within the browser. Eventually I realized that it would be very convenient for multiple users to connect to the same game and have shared state. Firestore was an obvious choice for solving this use case.

The question became how to integrate client side state management for a single user with realtime state updates between users while persisting the data across sessions. Should I drop Redux entirely and use Firestore to solve all three problems? Should I use Redux and avoid introducing another state management solution such as Firebase? It turns out the two go hand in hand quite well.

The Redux Reducer takes some previous state and an action and outputs new state. This provides a trustworthy functional interface so that your entire app can stay in sync. Firebase …

An Introduction to Progressive Web Apps with AEM

I have added an introductory slide deck that goes along with my more in depth blog post on using progressive web apps with Adobe Experience Manager.

Your Data is Your Product

As a software engineer and consultant I often see business focusing heavily on the features of their app or website. When spending money they want new and better functionality. When the layperson looks at google they see a search box with search results. When the layperson looks at facebook they see the post to your wall functionality. Often business view their product in the same way. They see the features of the application, not the data that they are generating.

Business that are ahead of the curve see things in the opposite light. They understand that the product they are creating is not primarily the features and functionality, it's the data that they are gathering from content authors to end users. The data is the product. Designs and features are crucial to making that data accessible and profitable, but whether it is product listings, news articles, or blogs, data is king.
Your data is your product In five or ten years you will be reimplementing your website. In three or f…

Train Yourself to be a Sceptic

We all must come to opinions in order to be functional members of society. Often the people with strong opinions are the most productive. However sometimes we slide into being the "true believer", where we no longer question the opinions that we have come to. I often fall into this when it comes to certain preferred technologies in my job, and recently went through the exercise of being the skeptic in order to promote more critical analysis of my own advice as a consultant. Here are the steps I took

Determine the areas in your life in which you are a true believer. For any given topic we will all lean towards either playing the part of the sceptic or playing the part of the true believer. You need to think about the opinions, preferences, and discussions in which you play the part of the true believer. This means you make your argument by trying to prove the truthfulness of what you already believe. You can often spot this when you get defensive when challenged with opposing …

Battlesim: Using the PWA Starter Kit

I recently created an app called Battlesim. This app is used to play a table top miniatures game that simulates historical warfare. I created this app using the PWA Starter Kit which is essentially a project archetype for creating progressive web apps. It uses Service Workers and web manifests to turn a normal website into an app that can be used offline and installed to your device.

This starter kit is very helpful in bootstrapping a near-vanilla web project. This method of creating a progressive web app allows you to have complex features and dynamic content all while serving the app as a statically hosted site. No complex server side application or hosting infrastructure. Just HTML, CSS, and JavaScript statically delivered, using the modern features of the web platform to provide powerful user experiences.

My strategy for developing this app was to first utilize the web platform to create an offline first experience. In this example all user created content get's stored in the …

Offline Experiences with Adobe Experience Manager

Checkout my new post on the ICF Olson engineering blog titled, "Offline Experiences with Adobe Experience Manager"