Universal Basic Income is Capitalism 2.0

A Universal Basic Income (UBI) would improve everyone’s lives, increase our free time, empower workers, and ensure everyone has food and a roof over their head. These are noble goals, but obviously there’s a downside or it would already be implemented, right? 

What if a UBI wasn’t just a noble thing to do, but the best thing to kick-start the economy and explode GDP growth to previously unseen levels? I believe UBI is capitalism 2.0 and today I’m going to show you why.

Why does capitalism work so well?

Even the most hardcore anti-capitalists have to give respect to how the combination of capitalism and technology has worked to lift most of the world out poverty and provided us with the security and comfort only kings enjoyed just a few century’s ago.

I’m a huge fan of capitalism and free trade, as laid out in Adam Smith’s genre defining book The Wealth of Nations. The first core component of capitalism is the understanding that when everyone performs the work they are best at, then trades with each other, everyone wins.

The second core component of capitalism is the more accurate information you have, the better economic decisions you make. Free-Market Capitalism has always outperformed top down economic control because those at the top can’t manage all the information about the economy, such as who is best at what, and where the most efficient areas to allocate resources are. When everyone learns about and optimizes their own section of the economy, much more wealth is generated than if they were told what to do by some central government. 

Capitalism accelerated in the 18th Century with Industrialization. We became more efficient at turning raw goods into useful products, which generated more wealth. The increased supply of goods caused their prices to lower so everyone could afford more stuff. 

In the 19th century the age of Nationalism began. Legal corporations were invented, and big corporations began building train lines, ships, and started digging for oil and coal. Our overall energy production and connectivity increased, which created more wealth as more people could work together, with every person specializing in what they were good at. 

In the 20th century we started the Globalization experiment. Ship’s became more massive than ever which lowered the costs to shipping anywhere in the world. Governments also started becoming more cooperative. Because we all become wealthier when goods are produced by those most efficient at making them, eventually goods started to be produced in low income countries. The income of those living in developing nations went up, and those in the developed world received cheaper goods. 

In the late 20th century and early 21st century we started on the Automation experiment. This is still in its infancy but will eventually be a complete revolution of capitalism as big as the industrial age first was.

Strangely, even though we’re in a golden age of hyper-efficient production and trade, the overall GDP growth of the USA is slowing. This is happening because we’re reaching the end of the current stage of capitalism and need a new paradigm for the 21st century. 

Winner take all economics

A core feature of capitalism is when people are given freedom of choice in their spending, they want the best value goods they can get.

Imagine an 18th century town with two widget makers, one of whom makes significantly better and/or cheaper widgets than the other. Once the townsfolk realize this, the shop with the superior product would gain all their business causing the other company to go bankrupt.

As capitalism went national in the 19th century, it was no longer good enough to be the best widget producer in your local town. Now you had to compete against the other widget producers in your state or country. Over time, people learned who made the best value widgets and took their business there, even if the producer lived hundreds of miles away. If that widget maker could keep up with demand, they may eventually own the majority of the market. Instead of putting one competitor out of business, as per the 18th century town, they could potentially bankrupt thousands of other companies. 

As the market got bigger, the rewards for winning were greater. The best widget producers of the 19th century made significantly more wealth than the best in the 18th century, even if they took over less of the market.

This is why wealth inequality soared when capitalism went global in the 20th century. Potential markets grew to astronomical size, with huge rewards for the victors. As companies became more efficient they could take over entire global markets and produce their goods in the cheapest, most efficient location possible. This led to massive accumulations of wealth and the biggest wealth gap in history.

This in itself isn’t a bad thing. After all, we’ve all become wealthier in the last few centuries even if some have become unimaginably wealthy. But what happens if most of the money accrues to the top of society? It leads to lack of demand for the widgets being produced, because those at the bottom don’t have enough wealth to purchase them.

There’s a common economic theory called “supply-side economics”. The core belief is that if you allow companies to compete and optimize, they will drive down the cost of products which will allow consumers to purchase more, which stimulates GDP growth. 

Now supply-side economics makes sense, and products have become cheaper over time. However you always reach a point of diminishing returns where you’d have to spend vast amounts of money to make your product only a fraction of a percent cheaper, and thus it’s not worth the investment. When a company starts to reach this equilibrium they cannot lower the price enough to gain enough new customers and they start to become demand-constrained. 

When a company is demand-constrained it can keep up with orders from customers, and produce as many products as they desire without needing to add additional production capacity. As we’ve had so much competition, automation and globalization in the 20th century, most consumer goods companies have now reached equilibrium and become demand-constrained. 

When demand-constrained, they need to increase demand for their product in order to make more money. They do this via advertising. We can see that more and more companies are becoming demand constrained because their advertising budgets increase every year:

The thing is, consumers in the bottom 78% of US workers live paycheck to paycheck, they already spend everything they have each month.They’re not holding back additional money, waiting for the right product to appear. Which means all this advertising is creating little additional growth and wealth, it’s just taking it from other companies.

So we’ve got the supply, we have enough products, and people are spending as much as they can on the products out there. We’ve reached economic equilibrium, and as a consequence of this, growth stagnates:

United States GDP Annual Growth Rate 1948-2020

Instead of continually trying to optimize supply, with diminishing returns, we need to optimize demand by giving consumers more money to spend on things they desire.

If we can give companies overwhelming demand so they have to scale up production instead of spending all their money on advertising, we can have both happy companies making profit hand over fist, and happy consumers who get everything they desire.

To reverse this trend of stagnating growth, we must put more capital in the hands of lower income consumers, who will then spend it on things they desire and increase GDP.

The Solutions

There are multiple ways to increase capital at the bottom of the wealth pyramid. Most of them involve attempting to revert to some past state of society. Only one of them fully embraces capitalism and all its strengths and extends it into the future. 

The first solution is some form of nationalism, where countries enact tariffs and attempt to bring all production back to the country instead of producing it overseas. This will create higher paying jobs for those whose work was previously outsourced to cheaper countries. However, this creates less wealth overall as work is no longer given to where it’s done most efficiently. This breaks the primary component of capitalism. 

The second solution is some sort of socialism, where the government introduces new laws and systems to redirect money to attempt to balance the system manually. This will help, but creates less wealth overall as the government must make many decisions with limited information. There is no way the government can make spending decisions for millions of people, and have those decisions be better than what those people could make on their own. Thus this is less efficient and goes against the second core component of capitalism. 

The third solution is a Universal Basic Income, where countries distribute some wealth to all residents equally. This keeps both the first and second core components of capitalism intact. Jobs are done in the most efficient locations and those deciding where money should be spent are the ones with the most information. As jobs are displaced no one is left without an income source and the bottom of the income pyramid has enough to keep consuming. 

The fourth solution is to ignore this and hope for the best. If history is any guide we’ll either get economic stagnation for decades, or those at the bottom of the wealth pyramid will get so mad it leads to violent revolution. So it’s best we avoid this. 

The Obvious Next Step

It’s clear we’ve stepped into a new world of rapidly increasing wealth, but growth is slowing down because of the effects of globalization and automation. We’re now faced with a few choices. Most of these choices will undo progress and take us back to a previous state of the world with less overall wealth. A UBI embraces capitalism and takes us into a future of happy wealthy lives, with everyone benefitting from the massive increases in wealth humanity has achieved. Even if you’re still doubtful you can see it’s the least worst solution we have to make capitalism work in the 21st century. 

A UBI is the logical next step we must take to move forward as humanity. If we continue to wait more people will suffer and we’ll end up stagnating for decades, or destroying the fruits of capitalism in revolution anyway. 


How to combine Getting Things Done with Trello

Have you read the book Getting Things Done (GTD) but struggled to implement it? Do you have different todo lists on paper, on your phone, on your laptop, without any consistency? Do you want a 21st century technical solution for GTD that keeps everything synced and your system is always available from any device? 

I’ve used dozens of task management systems over the years and always found them good in the beginning but quickly turn to frustration after I’ve used them for a few months and have hundreds or thousands of tasks to sort through.

Today I’m going to show you how after all this trial and error I’ve figured out how to fully implement GTD using Trello. I’ve been using this system of Trello with GTD for a few years without fail now. This article will teach you my full workflow that you can steal to achieve productivity and flow levels you’ve always dreamed of. 

If you have a working GTD system that could do with a little improvement I hope to teach you some new tricks and information to get your system working even better, and if you haven’t implemented anything this will be an awesome beginning of your productivity journey.

I’m a naturally unorganized, forgetful person who has real trouble sticking to a schedule, or even a basic routine (I’ve worked 9-5 for 10 years and still have trouble waking up at the same time every day). Yet this system has allowed me to manage multiple projects and keep track of everything that needs to get done without fail.

People that know me are amazed I can manage to be productive and successful with so little natural organizational ability. This is my secret and so I want to share it with the world.

After implementing this system you’ll be a GTD ninja, able to do all of the following:

  • Whenever you have a new input to your life, such as an idea, todo, product recommendation etc, you’ll have a place to jot them down that you know you’ll come back to to re-prioritize later.
  • Whenever you’re in work mode you’ll have one place to go to see all the tasks on your plate right now.
  • You’ll be able to keep track of tasks over days or weeks when waiting for others to get back to you. 
  • You’ll be able to keep track of projects you want to do over the next decade, without them cluttering up your task manager.

The Getting Things Done Flowchart

Let’s take a recap on what GTD is all about. If you haven’t read Getting Things Done by David Allen yet I highly recommend reading it first. GTD is about having a system for organizing and handling all information inputs into your life, and is summarized by this flowchart:

Each of those bubbles is a place where inputs should flow depending on relevant triggers. Throughout this article I’ll explain how to create each of these locations and ensure that whenever any new task comes into your life you’ll know exactly where to put it. 

What is Trello

Over the years, I’ve tried dozens of todo list apps. Most are useful in the beginning, but quickly turn to disarray as you amass more than a few hundred tasks. Trello is a Kanban task management application that easily handles organizing thousands of tasks as you accrue them over the years, ensuring you never need to declare task bankruptcy and switch to another system ever again.

Instead of a single todo list, you have boards. Each board contains multiple columns and each column has multiple cards, one card for each distinct task you’re managing. On my own Trello boards, I have thousands of cards, some for projects that may be years away. Most tasks are placed on boards that are hidden from view and only analyzed during weekly or quarterly reviews. As a result, I do not get overwhelmed while in the workday zone.

As an added bonus, Trello provides an amazing mobile app that keeps everything in sync across all your devices.

What doesn’t belong in Trello

GTD is about information management, not just task management. Trello is best utilized only for tasks, so rather than attempting to squash my entire workflow into one tool, I use two other supplementary tools to keep track of non-task information.

For abstract thoughts and notes on a subject, video, article or presentation (the “Reference” bubble in the GTD flowchart above) I use Evernote. If I have an idea I’m pondering but there isn’t an action item, it goes in Evernote. If I want to continue thinking about it more I’ll add a card to my Trello inbox with a next action of “Follow up on note”.

For interesting articles and content I want to read later I use Pocket. This allows me to save articles and read them all in one app later without having to transfer them to my task management system back and forth constantly. I used to use Trello for this but realized consuming new content and working on tasks / projects require different head-space’s (shallow vs deep work) so I didn’t want them to intermingle with my task management system. 

Trello Boards

Next, I will demonstrate how I have successfully organized my own tasks using Trello. To start, I have 5 main Trello boards: Next Actions, Inbox, Backlog, Big Ideas and Entertainment.

Next Actions

This is the board in which all the stuff I’m currently working on or want to get done in the next week goes. I have this board open most of the time while working.

From left to right: Unscheduled, Scheduled, Hold, Today, Doing, Done

It has the following columns in this order:

Unscheduled – This is the “Next Actions” bubble of the GTD chart above. Where tasks for the week first end up. They haven’t had a specific time allocated to them yet. 

Scheduled – This is the “Calendar” bubble of the GTD chart above. Where tasks go after I’ve allocated time for them on the calendar. I don’t put most of my tasks on my calendar because I suck at sticking to exact schedules, but that might work better for you if you want a little more structure. 

Hold – This is the “Delegate It” bubble of the GTD chart. Where tasks go when I’m waiting for someone else, and I can’t proceed any further without their input. For example if I’m waiting on someone to email me back, or something I need to buy is currently sold out and I need to check back later. 

Today – The tasks I want to get done today. 

Doing – The task/s I’m working on at the moment. 

Done – These are completed tasks. If I later find there’s more work to do I usually create a new card instead of moving cards out of here.


The input board contains a backlog of things I want to do, but not in the next week. They are sometimes individual tasks with next actions, and sometimes projects that haven’t been broken up into tasks yet. 

From left to right: Inbox, Someday/Maybe, Next 90 Days, Next 30 Days, Done

It contains the following columns:

Inbox – The “In-Basket” bubble in the GTD chart above. Where all new cards go, unless they urgently need to be done in the next week. In that case, they go straight to the Unscheduled column of Next Actions. 

Someday / Maybe – The “Someday/Maybe” bubble in the GTD chart above. It contains ideas and tasks I’d like to do but aren’t in my primary area of focus right now. I generally move tasks here immediately if I can’t think of an action I can take from the task, or if I don’t expect I’ll ever make time to do it. 

Next 90 Days – Ideas and tasks related to my primary area of focus but aren’t urgent. 

Next 30 Days – Tasks I want to get done in the next month, are in my primary area of focus, and are important. 

Done – I have a done column here to easily drag tasks into if I discover I did them in the past when cleaning up my columns. 

Someday / Maybe

This Trello board is the graveyard of ideas I find interesting, but will likely never complete. During the quarterly review process, I clean up my Input board and throw all tasks I didn’t get done and don’t believe I’ll get to in the next 3 months in the Someday / Maybe list, which is then sent to this board. I like to keep the cards at hand because they could turn into blog posts or social media posts describing the idea, hoping somebody else completes it. 

Big Ideas

Big Ideas is a board for projects or companies I would like to create at some point in the future but haven’t started on yet. They are projects that definitely need to be broken up into many cards and are usually at least 3+ months of work to do. This board is different from the others in that every list is a category. 

From left to right: New, Fun Tech, Holidays, Skills, Non-Software Companies, Software Companies, Open source software. There are more but they didn’t fit into this screenshot.

My categories are listed above and quite self-explanatory. You’ll probably have different categories but the overall concept is the same. When you have a big project idea, you can place it here, then during the quarterly review you can come back to this board to see if there are any projects you’d like to tackle in the next 3 months. 

If you decide to take any on, you can move the card to your Input Board’s “Next 90 days” column. When starting work on a project I’ll break it up into a bunch of smaller tasks and link them back to the main card, because it’s no fun to have one card sitting in “Doing” for 2 months straight. 


Imagine having all the best, most recommended pieces of entertainment at your fingertips whenever you have a few hours to relax. You’ll never be bored again! And when a friend asks for a recommendation you’ll be able to help them out with your database of all the best entertainment, crowdsourced from your friends.

From left to right: New, Cooking, Restaurants, Games, Articles, Books. There are more but they didn’t fit into this screenshot.

The entertainment board is similar to Big Ideas, but stores Books, TV Shows and pieces of entertainment my friends have recommended. This is completely unrelated to work but allows me to never be stuck at 8pm on a Saturday night wondering what to do after a few glasses of wine. 

The categories on this board are: New (the input column when I’m sorting my Inbox and haven’t figured out what it is yet), Cooking, Restaurants, Games, Articles, Book, Short Videos, TV Series, Movies, Audio, To Learn, To Visit. I generally put all recommendations in my Input Inbox first, and sort them into the correct categories later. 

Combining GTD + Trello

Let’s put this system together and show how any new tasks that come in can be effortlessly put into the correct bucket based on their demands. 

All of the bubbles in the GTD workflow image correspond to some place on a Trello Board. But I don’t recommend following that flowchart as soon as you’re given a task or have an idea. Instead, open up the Input board and add a new card to the Inbox column. 

Over time your inbox column will fill up with ideas, tasks, important things you want to get done. You’ll probably have more than ever now that your brain knows you have a good place to store them. To keep this column from overflowing I pull out my phone and start sorting the tasks every time I have some downtime at work, are waiting for a meeting, on transport, or even sitting on the loo.

How do you sort the tasks? With the GTD flowchart. When you decide the task is a project or has a next action you then need to decide if it’s something that needs to be done in the Next Week, Next Month, or Next Quarter, and move it to the appropriate column. 

The input board is a combination of projects and next action cards. I like to keep them together on this board because the time period is more important than the task granularity. It’s only when I move cards from the Input Board to the Next Actions board that I ensure every task has a Next Action attached. So if there is a project on the Input Board I’d like to tackle, I don’t copy it across, I break it into smaller individual tasks first and move them to Next Actions, linking them back to the original project card. 

Example Use Cases

“I’m at a meetup and someone mentioned a cool website I should check out” – Create a card in your “Input” column of the “Inbox” with the name of the site, then put your phone away and keep talking. 

“I was reading an article and had an idea for my company” – Create a card in your “Input” column of the “Inbox” with the title as the idea and description as further information. You can judge later during the weekly review if it’s worth tackling. 

“I received this email that links to a cool article that I want to read” – In the past I used to add these to my “Entertainment” board, but realized I rarely made the effort to retrieve and read the articles. Now instead I save the article out to Pocket and then I can easily open the pocket app and read them all when I’m free. 

“I realized I need to get my car serviced in the next few weeks” – Create a task in the “Scheduled” column of Next Actions. Set a date for that task for when you want to think about this next, or when you want to make the booking. If you could make the booking any time, add it to the unscheduled column and get to it when processing your tasks during the workday. 

The Weekly Review Process

How do cards get from the Input board to the Next Actions board? Through the weekly review. This can also be done on a higher cadence but I prefer weekly. This review involves taking a look at your Input board and:

  • Sorting anything in the Inbox if there are cards left to be sorted
  • Taking a look at the Next 30 days column and seeing what you want to get done next week, then moving them to Next Actions. If a card doesn’t have a next action it’s time to add one or break it into smaller tasks before adding it to that board. 
  • Taking a look at the Next 90 days column and seeing if everything in it still makes sense, moving it into Someday/Maybe if it’s no longer relevant or the Next 30 days if it should be done sooner. 

If you find the Next 30 or Next 90 day columns have too much to sort through each week, you could do them in a monthly review and keep the weekly review solely for clearing our your inbox. 

The Quarterly Review Process

The Quarterly Review process is where I clean out the Input board, moving cards I’m not going to get around to, to the Someday/Maybe board. This way the Input board doesn’t get too clogged up with old stale tasks I’m no longer interested in doing. I’ve never had a time where I’ve managed to clear my Input Board through action, because I’m way too optimistic about how much I can get done, and new stuff always comes up. 

I use a Trello plugin called “Card Repeats” to make certain cards get re-created at certain intervals. For the Quarterly review I have one card that comes back on the 1st day of every quarter (Jan 1st, April 1st, July 1st and October 1st) which has a checklist of all the tasks I have to do in the quarterly review. This card looks like this:

Every time it pops up, I schedule a few hours to get it done, and simply follow the steps on the card. The “Projects board” in this screenshot is the Input board. I used to have a separate projects board but it became too irritating to jump to that board on a regular basis and I would frequently forget about it.

Card repeats is a premium feature of Trello, so if you’d rather keep it free you could add this Quarterly Review to your calendar and add the instructions to an Evernote document, then link to that from the Calendar entry. 

In Summary

After you’ve set up this system for task capture and management and started easing into the flow of weekly and quarterly reviews you’ll find it easier than you ever thought possible to keep track of what needs to be done. You’ll never let a task slip through your fingers again. You’ll also find an increase in creativity and your ability to enter a flow state becomes seamless as you no longer have dozens of tasks fluttering through your mind taking up precious mental bandwidth. 

I hope this system works as well for you as it has for me. If you have any questions, suggestions for improvement, or need clarification on how to use this system let me know and I’ll be happy to help you out.


Fixing node-gyp: Permission Denied when running as root

This node-gyp permission denied issue happens when, as the root user, you globally install node modules that require compilation with node-gyp. As root is the default user on Digital Ocean this seems to affect many people and should probably be fixed at the root cause.

Luckily there is a pretty simple workaround for this:

npm config set user 0

The other solution is to create a regular user and install everything as them. This is safer as installing modules as root means they could do anything to your system. I’d recommend installing all node modules as a normal user without root access if you’re on a machine with anything important on it.


NEATo – The Evolutionary AI Battle Simulator

Every year at Amazon there is virtual battle bot competition where engineers from all over the company create bots in JavaScript that fight in a 2D sandbox environment. It’s an optional event where you code the bots in your spare time and it’s a lot of fun. 

The battles are fought one-on-one over 2 minutes. The bots are circles shooting smaller circular bullets. Each bot is able to perform the actions move, rotate, and/or shoot every 75ms and knows the position of the enemy and all bullets every tick. The bots each have 5 lives and can have 5 bullets on screen at once. The tournament is single elimination and the prize is some token gifts and bragging rights.

This year instead of hand-coding a bot I decided to try my hand at writing an Evolutionary AI program, which I’d been fascinated with after seeing this AI learn to play Mario all by itself. Could I create and train a bot good enough to defeat the Human created bots?

Now I’m no AI expert, and this bot isn’t going to beat Alpha Zero any time soon. It’s pretty simple in it’s implementation. It’s a neural network that starts with some input nodes and output nodes, then randomly adds nodes, links between nodes, changes the weights for the links and disables/enables nodes. It’s based off the Evolving Neural Networks through Augmenting Topologies (NEAT) paper. Each neural network is called a genome and they are organized into species of similar genomes. When a genome performs well in battle it gets a high fitness rating and then goes on to have new child genomes with random mutations. If a genome performs poorly it is eliminated. The inputs to the neural network are the position of the walls, bullets, and opponent, and the outputs are the actions the bot should take.

You can train in headless mode and it will run hundreds of battles in parallel, scaling to as many CPU cores as your PC has. During training you can watch the latest generation fight it out in your browser. After making the bots train by fighting each other for a few hundred generations the bots are able to fight at a decent level. I entered a bot with around 600 generations of training into the tournament and it ended up making it through the first 2 rounds and being eliminated in the 3rd.

Rather than let that code go to waste I thought why not open source what I’ve made, and create a custom battle environment so others can learn how an Evolutionary Neural Network works and build their own AI’s. So I’ve done that as well as written an in depth explanation of how everything works in the README and thoroughly documented the code. You can check it out here. Enjoy training your own bot to use in your next game of battle bots and good luck!


New Site – A Decentralized World

I’ve started a new site about something I’ve been passionate about for many years – decentralization. It’s called A Decentralized World. I’ve been obsessed with the technologies that have been invented in the last decade to make this possible; technologies such as Scuttlebutt for decentralized social media, Sia and Filecoin for decentralized file storage, Ethereum and Golem for decentralized compute. I want to push these technologies into the mainstream because I think they could make all our online lives so much more vibrant and fun, and not just for now, but for the next 100 years. 

I fear that the internet, once a place filled with freedom and innovation, is being taken over by corporations. They did this by providing a “free” service, which we flocked to. Then, as their investors wanted a return on their investment, they slowly squeezed their users, making their platforms more and more profit-seeking. This is fine if you’re happy to pay for the product, but it breaks down when you’re a free user, because you become more exploited over time. 

This isn’t a problem that can be fixed by a better, kinder corporation, because the incentives are broken from the beginning. Eventually a company has to start making money to keep their servers running, which means they have to change the product to suit whoever is funding their company. If they don’t start to make money they die. If not, hostile investors replace the board with a more capitalism-friendly set of executives, and milk the userbase for profit. This profit motivation leads them to focus on addicting users, pushing “sponsored content”, and creating algorithms that rank your social feed not based on your needs, but the needs of the company. 

So if all corporations are trapped in this profit cycle, and eventually every social media corporation becomes corrupted by capitalism over time, what’s the solution? The solution is that we build open source peer-to-peer networks that do the same thing that corporations used to do, but with open protocols and open clients. Imagine downloading a social media app that automatically connects to your friends’ apps. You could then do everything you can currently do on Facebook, but directly with your friends sans central servers or corporations. Now imagine you and your friends don’t have to use the same app, just apps that run on the same protocol. Anyone can create their own app, and, as long as they use the same protocol, they can run it on that peer-to-peer network. That is the promise of Scuttlebutt and a decentralized web in general. 

Interestingly Jack Dorsey, the CEO of Twitter is also looking to fund similar applications that can deliver on this promise of an open social protocol that open source apps can be built against. 

I want to explore these technologies and show what they are, how they work, and, if you’re a developer, how you can help contribute by either building apps on top of them or making them better. Then we can all live in a happy online world instead of one constantly being squeezed for profits. If you’re interested in joining me on this journey, check out A Decentralized World and let me know what you think. 


Request: Buttons for logging life events for a quantified self

I love the idea of the quantified self, where you record your life inputs (exercise, sleep, food, supplements, etc) and outputs (happiness, focus, energy, etc) and draw correlations between them. My main barrier to this is the data entry itself – It’s hard to record events on a consistent basis. I’d prefer it to be either completely automatic or so easy that I don’t need to actively think about it. 

I’m seeking a device to track life events with a single button press. There are some solutions available, but I haven’t found any that are:

  • Easy to setup (no hardware hacking required)
  • Reasonably priced (<$10 per input button)
  • Hardware based (so that it’s right in front of me as the event happens, I don’t have to remember to open an app)


An ideal solution would be a series of buttons I can stick to the wall where I have something I want to track. Each button sends a request to an API endpoint with a payload of data related to that button. So for tracking my supplements I could have a button for “Protein Powder”, “Magnesium”, “Vitamin D” etc that I press as I take them, and they each record an event in say AWS CloudWatch Metrics. 

It could work this like: I buy this device, it is a raspberry pi or other cheap compute option with a USB port. I plug it in at home and it creates it’s own WiFi network that I can join on my laptop. It then has a simple website that I can go to in my browser. On this website I can:

  • Make it connect to my home WiFi network for outbound access
  • Select a service or API endpoint I would like it to send messages to
  • Bind key presses to different API payloads. 

I can plug a keyboard or other button like device into the USB port, and then in the web interface I can click “bind button”, press a button on the keyboard, and choose the payload that button will send. 

Out of the box it could be configured for say CloudWatch Metrics. You choose that you want to send your requests there, input your AWS access key, and then for each button you type a string for what it represents, like “Protein Powder”, or “Vitamin D”. It handles formatting the payload to what makes most sense for the service you’re sending the data to.  You should also be able to have a metric like “Happiness Level” and bind the numbers 1 -> 10 to send the “happiness” payload with the number you pressed as a dimension. 

It could get more providers over time, and you could create your own via a configuration file on the device. Then you can select your provider in the web interface and all the button payloads are automatically formatted correctly for that provider. 

You could place these devices anywhere you want to measure a life input or output: Beside your supplements, in your kitchen, at your work desk to measure productivity, at a doorway to mark your happiness as you enter and leave a room etc. 

The company could sell this device by itself, and could also sell a 4×4 grid or 10 x 1 row of buttons with spaces for labels as an add-on to make tracking even easier. 

This doesn’t seem too complicated to create, but I don’t have the time right now, and would like someone to scale this, building a company selling these to others. I think there’s a market for it and I’d like everyone to be able to build their own quantified lives and discover what makes them productive and happy. I would pay up to $100 for a device like this, maybe more for early access.


How to add if statements to your CloudFormation CDK templates

I recently came upon a situation where I was building an application using AWS CDK (Which is a package that allows you to write Typescript code that compiles to a CloudFormation template) and I needed to reference a bucket in the template, but the bucket name would be different in Beta versus in Prod. I naively thought I could just do this:

// Don't use this, this code doesn't work
const stage = new cdk.Parameter(this, "Stage", {
  default: "beta",
  type: "String"

const bucketName = stage === "prod" ? "app-prod-bucket" : "app-beta-bucket";
const Bucket = s3.Bucket.import(this, "AppBucket", {

The mistake I made is forgetting that CDK is compiled into CloudFormation templates, so when I run cdk synthesize it takes this code, evaluates it, sees that the variable stage is currently not set (because it’s provided at runtime), and compiles the string “app-beta-bucket” into the template.

Then when running this compiled template it doesn’t matter what the parameter Stage is, that if statement has already been compiled out and it’s always going to set the bucket name to “app-beta-bucket”.

To fix this you need to use CloudFormation Conditional Statements, like so:

const stage = new cdk.Parameter(this, "Stage", {
  default: "beta",
  type: "String"

new cdk.Condition(this, "UseProdBuckets", {
  expression: cdk.Fn.conditionEquals(stage, "prod")

const bucketName = cdk.Fn.conditionIf(

const Bucket = s3.Bucket.import(this, "AppBucket", {

Now your if statement will be compiled into the template and the bucket name will change depending on the value of the “Stage” parameter


2017 Year in Review

So it’s been a while eh. 16 months since my last update, that’s almost a record. I’ve been procrastinating writing my 2017 year in review for about 8 months now, because as you may have guessed, I didn’t accomplish many of the things I set out to do. I’ll have more to say about work ethic and reflecting on my reasons for failing to meet my expectations soon, but I must get this post out before midnight or I’ll be fined $50. I’ve found having a monetary fine has been one of the best ways to stick to my goals, even if it does cause me to rush at the last minute.

So what did I accomplish out of my monthly goals for 2017? and what am I planning to do in the future?

Paper Towers

I’m happy to report that this goal was completed and you can find the open source Tower Storm here. There’s still a LOT more I’d like to do with this game and codebase such as moving to ES6 instead of CoffeeScript, adding a map editor, removing the dependency on RethinkDB, and making it simpler to setup a server (a docker based setup would be sweet). I also want to release videos walking through the codebase (which I did record and put on Twitch, but it looks like they disappear after a few weeks?). I ended up keeping the name Tower Storm because I already owned the domain and social media pages and I still love the name.

Learn Spanish

This I also somewhat accomplished. I took lessons on italki for a while which were incredibly helpful and accelerated my skills far faster than Duolingo, though both together was a good combo. My girlfriend spent the summer of 2017 in Ecuador doing her masters thesis and I was able to visit for a week and somewhat navigate my way around with the Spanish skills I’d learnt. I could barely hold a simple conversation with someone who spoke slowly and clearly.

Krav Maga

I ended up doing Krav Maga for a year, and it was fun. I learnt a lot and feel like I could defend myself in a bar brawl, but would still have trouble against someone with any kind of weapon. The classes were intense and really pushed my body to the limits, including one I had to bail on half way through because I was close to passing out (probably shouldn’t have done it after not eating for 8 hours). The only downside was there was a long period where I could only take basic classes which was frustrating. There was some special training you had to do to take advanced classes where you actually spar’d with other people, and there were no classes for this coming up for months. I’ve stopped doing Krav Maga at the moment but I may pick it up again in the future.

Study Time

Unfortunately I barely started on Study Time, BUT I did have a big breakthrough in how this would work. For the longest time I’ve been wanting to build a peer to peer social network (it was in my bundle of ideas but didn’t make the top 10 list because I didn’t think I was skilled enough to pull it off). This social network would have no central servers, just everyone hosting some small portion of the data and sharing it with everyone else. Anyway I’ll delve into this deeper in another post but I found a network that is basically this called Scuttlebutt, and using this same technology I think it’ll be possible to build the API’s for the metadata about each lesson / course on top of this network. Then anyone will be able to load up the application, download metadata about courses off other students, and when viewing the videos stream them via torrents. I’m super excited about this and want to try and pull it off again soon, I feel like the pieces are available I just need to put them together.

Learn the Cello

I did this one! For 6 months I learnt the Cello last year, and it culminated in being able to play a (pretty crappy) rendition of the red wedding theme song from Game of Thrones. I stopped after 6 months because I wanted to dedicate time to other projects, but I would like to pick it up again one day.

Educational Honesty, Reverse giving charity, Build a Farmbot, Web Basic, Mass Reforestation

Unfortunately I didn’t even make a start on any of these projects (well, there was some research, but nothing created). Which is a bit of a disappointment. I feel like I got too distracted by my work at Amazon towards the end of the year (with AWS Cloud9 being released) and put everything on hold and slowly forgot about them.

I will be building a FarmBot later this year, I finally have balcony that gets enough sun that this is possible. I’m not sure about the rest of the projects, they’re things I would love to see in the world but don’t quite fit my optimum hedgehog intersection. I’ll be reviewing my ideas backlog and coming up with some further ideas for this year soon. I’ll also be utilizing this monetary fine mechanism to ensure I post more and share my ideas more on this blog, because they’re not going to happen when they’re tucked away in my private notes.

So I accomplished 4 out of 10 ideas I wanted to do last year, which isn’t bad, but I can do better. I’ll be creating my list of goals for the next year soon and taking all my lessons from the last 18 months into account when doing so. At the very least I learnt a ton, and that’s my motto for life: Always be Learning. It’s not about where you are but where you’re going and how fast you’re getting there. If you have ideas or feedback for me, let me know. Last of all: enjoy life, and don’t forget to be awesome.


Projects Status Update – April 2017

I unfortunately procrastinated the March status update so much that it has melded into the April update. Over the past 2 months I’ve been working on 4 of my 10 Projects for 2017. Those 4 are: Paper Towers, Spanish, Krav Maga, and learning the Cello. My current core focus is learning the Cello and I’m spending 3 – 4 hours a week on the rest.

Paper Towers (Now Tower Storm again)

Firstly I decided to stick with the name Tower Storm instead of re-branding this project as Paper Towers. I’m proud to say that Tower Storm is finally Open Source!. I spent around 30 hours in the last 2 months removing all copyrighted graphics and sounds from the game, and cleaning up the code so it’s easy for anyone to run and make modifications. I finally pulled the trigger a few hours ago and put it up on Github. I also did my first open source development stream, if you’re interested in seeing how I develop Tower Storm, how to mod it yourself, and my thoughts on programming in general you can follow me on Twitch.


As of the 21st of April I was up to a 25 day streak on Duolingo doing at least 30 minutes of spanish a day (50xp per day). Unfortunately I lost that streak, but I will be continually learning Spanish on Duolingo over the next year. Alongside that I’ve been watching movies, LoL games and random Youtube videos in Spanish. I’ve also switched my PC and Phone to use Spanish as their default language. Every little bit of learning helps.

Krav Maga

I signed up for Krav Maga 2 weeks ago and so far have done 6 classes. I’ll probably continue this 3 times a week schedule. So far we’ve practiced basic punching, hammer fist, kicking, roundhouse kicks, getting out of chokes, and defending yourself when you’re on the ground. I’m really enjoying it so far, it’s useful, it’s a ton of fun fighting as hard as you can (into pads) and it’s a great workout. I hadn’t been punched in maybe 15 years and it’s an eye opening experience, and made me realize I have to toughen up a lot if I want to survive a real life fight.


To celebrate the open sourcing of Tower Storm and the down-winding of that project I went out and hired a Cello for 3 months. I’ve only had it a week now and haven’t had lessons yet. I bought a beginners book and have been teaching myself how to play with that and YouTube tutorials. I’m excited to report that I can already play the beginning of the Rains Of Castamere song! Albeit with a lot of squeaks and quite slowly. I can’t wait to learn more.

So that’s it. I’ll be continuing to focus on these 4 activities until at least the end of May whereupon I may start on another depending on my progress and time available.


One project every month

I constantly have ideas of software I want to build, skills I want to learn, sites I want to create. I’ve been writing these ideas into Evernote since 2009. The problem is I often start working on an idea but give up a week or two later when something else comes along. Life is too short for that, so now I’m going to get focused.

A few months ago I started organizing all these ideas on a Trello board to figure out how I want to spend the next 5 years of my life.

I had 125 ideas in total, which I’ve whittled down to my 10 favourite. This year I’ll be spending 1-2 months building a prototype or learning the basics of each. Then at the end of the year I should know what I want to spend a few years focusing 100% of my energy on.

My top 10 ideas for 2017 are:

Paper Towers

This is the open source version of Tower Storm. My original vision for Tower Storm is a Tower Defense game with as much depth as DOTA. Unfortunately this scope is far too huge for an indie company. However it has one major strength: It’s a web game that doesn’t require compiling and is configured through JSON scripts. So if I open source it others can build their own TD games using this engine / framework. They can make maps, minions, towers, game modes and more and share them around and help each other, and it can turn into something much bigger and more fun than I could produce by myself. I’d love to see what the community creates once this is released.

Learn Spanish

I’m currently at a level where I can hold a basic conversation. I want to get to a level where I can start thinking in Spanish and be able to hold ongoing conversation consisting of more than introductions and small talk.

Krav Maga

This is mostly about self defense, and hopefully it’ll be a lot of fun too. My first lesson is this Monday.

Study Time

Think Popcorn Time for MOOC’s. Software where you can learn anything you desire and it’s completely peer to peer and streamed via torrents. This way knowledge and lessons can live on forever even when MOOC sites take down their courses or shut down.

Learn the Cello

I’ve learnt the Clarinet and Tenor Sax, but have yet to figure out a stringed instrument. I love the sound of a Cello and my goal is to play the Rains Of Castamere.

Educational Honesty

I’ve been reading Amusing ourselves to death, it was written in 1985 and is absolutely on point with how woefully unintelligent public discourse has become on topics that we should be taking seriously. I want to build a site focused on educating, not influencing. A place where intelligent debate is praised, and all opinions are considered. Twitter, Meme’s and the comment sections on most websites are what I consider “Information junk food”. We had a crisis with actual Junk food in the 70’s, 80’s and 90’s, but if you look around recently you’ll notice these trends are reversing, people are now eating healthier and taking better care of their bodies. We must now do the same with our brains. I believe with good information we can do just that and live healthier mental lives, just like how we fought back against real junk food.

Reverse giving charity

It’s well known in psychology that if you get given a gift you feel more obliged to give back in return, this is why food samples and waiters giving mints at the end of a meal work so well. I’d like to try a charity built around this idea. Imagine giving people free coffee from countries in Africa or South America, and included with that is information about the country it came from, the issues it faces, and how you can help fix those issues, via donations or spreading the word. I think you’d have much more success garnering support in this way than the usual begging on the street, and so want to try it out. I may join an existing charity or start my own (depending on difficulty).

Build a Farmbot

The Farmbot is one of the coolest pieces of technology I’ve ever seen in my life, and it’s completely open source! I’d like to try building one of these from scratch and helping refine their wiki with information on where to source parts and fixing bugs and issues with the documentation or software. Imagine if we could get Farmbot cheap enough and reliable enough that anyone can homestead and get the basic food they need to live completely free.

Web Basic

I recently read an article on how q-basic is still the best beginners programming language, and I have to agree. Q-Basic was the language I started with when I was 11 and it makes far more sense to non-coders than most other languages. But installing q-basic, compiling, and sharing programs is not so beginner friendly. So why not bring Q-Basic to the web. Imagine if you could create a new Cloud9 project and just start coding in Q-Basic, hit run, and the program is compiled to Javascript and rendered using Canvas. Kids could start learning and coding in seconds and send their projects to friends minutes later (just send them the preview link!). This social feedback loop could bring so much joy to kids and lowering that barrier to entry could entice many new kids to learn coding that had never considered it before.

Mass Reforestation

We’ve had mass deforestation for 100 years now and the effects have been devastating. Now we need to reverse this process, but how? With drones of course! Imagine if we could create a drone that surveys a piece of land, uses AI to figures out the perfect combination and density of trees and fauna to re-invigorate that land, and then goes ahead and does it all by itself. The technology is available now, we just need someone to compile the knowledge build the software. The mass reforestation site will share ideas and technology on the latest efforts to reforest the world so that everyone can take part. Eventually with enough people and drones out there we’ll be able to accomplish mass reforestation.

What about the other 115 ideas?

I still really want to see them happen, I’m just not particularly excited about doing them myself. So I’m going to share them here on this blog, please steal them as I post them and help make the world a better place 🙂