Software engineering and building products.

Mega List of AI Platforms and Tools

Mega List of AI Platforms and Tools

As I've been exploring the brave new world of AI developments, I keep coming across different tools and platforms for the different types of AI. I'm talking about categorizing by Text to Video models,

AI

[Part VI] Healthcare and Health Insurance in the US

[Part VI] Healthcare and Health Insurance in the US

This post covers healtchare and health insurance issues when working in the US as an Aussie.

Personal

[Part V] Finding Housing in the US as an Aussie - Renting, Buying, and Selling

[Part V] Finding Housing in the US as an Aussie - Renting, Buying, and Selling

Part V in my series of posts about moving to the US as a software engineer covers finding housing in the US, including renting, buying, and selling real estate as an Aussie.

Personal

A Software Engineer's Glossary of AI Terms

A Software Engineer's Glossary of AI Terms

My updated list of various AI-specific terms as I learn about the field.

AI

[Part IV] Working in the US with the E3 Visa

[Part IV] Working in the US with the E3 Visa

Part IV of the guide for moving from Melbourne to San Francisco covers my experience with the E3 visa, which allows myself and my wife to work in the US.

Personal

[Part III] Compensation and Interviewing in Tech: Differences between Australia and the US

[Part III] Compensation and Interviewing in Tech: Differences between Australia and the US

This is Part III, the third post in a series about how I moved from Australia to the US as a software engineer. This post dives into the compensation and interviewing differences used by tech companies in San Francisco.

Personal

[Part II] So How Did You Get a Job in the US (As An Australian Engineer)?

[Part II] So How Did You Get a Job in the US (As An Australian Engineer)?

The second post in a series about moving from Australia to the US as a software engineer. This time focussed on finding a job.

Personal

[Part I] Relocating from Australia to the US: My Experience as a Software Engineer

[Part I] Relocating from Australia to the US: My Experience as a Software Engineer

<p>The first part in a series of 4 posts about my experience moving from Australia to San Francisco as a software engineer with a wife and young family.</p>

Personal

Encoding / Decoding JSON objects in Python

Encoding / Decoding JSON objects in Python

<p>A summary of how to serialize and deserialize from Python data structures into JSON-compatible strings, which is especially useful when working with API requests and responses.</p>

Python · Javascript

Bit Manipulation Part 2 - Bitwise operators in Python

Bit Manipulation Part 2 - Bitwise operators in Python

<p>A primer on bitwise operators in Python - left and right shifting, bitwise and / or / exclusive or, and complements.</p>

Python · Software Fundamentals

Bit Manipulation Part 1 - Understanding binary numbers in Python

<p>An easy introduction to binary numbers, which will lead to a follow-up article on bit manipulation in Python.</p>

Python · Software Fundamentals

Primer to Python multiprocessing, multithreading, and asyncio

Primer to Python multiprocessing, multithreading, and asyncio

<p>Basic overview of parallel / concurrent programming, including comparisons between multiprocessing, multithreading, and asyncio (coroutines) in Python.</p>

Python

Redshift and MySQL's giant list of datetime / timestamp functions

Redshift and MySQL's giant list of datetime / timestamp functions

<p>How to find Redshift current date and other common expressions for working with date, time, datetime, and timestamp columns in MySQL 5.7.x and Redshift.</p>

MySQL · Redshift

Method delegation in Python vs composition or inheritance

Method delegation in Python vs composition or inheritance

<p>Using Python, a short example on how to delegate specified methods to another object, as compared to composition and inheritance.</p>

Python

Using Python enums in SQLAlchemy models

Using Python enums in SQLAlchemy models

<p>How to use enums in your models to enforce value consistency.</p>

SQLAlchemy · MySQL · Python

Python command-line scripts with argparse

Python command-line scripts with argparse

<p>A template file for using conditional arguments when running Python scripts from the command line.</p>

Python

SQLAlchemy merge, flush, commit, refresh: Key Differences Explained

SQLAlchemy merge, flush, commit, refresh: Key Differences Explained

<p>I've always struggled to remember between these very similar methods in the SQLALchemy ORM - so I took some time out to research these and write it down.</p>

Python

Code Review Checklist - the most important things to look for

Code Review Checklist - the most important things to look for

<p>A few notes on the code review process, and the steps I go through when reviewing.</p>

Product · Python

SQLAlchemy Many to Many Relationships: An Example in Flask

SQLAlchemy Many to Many Relationships: An Example in Flask

<p>Building model definitions for many-to-many relationships via a secondary table.</p>

Python

Bash script to relink alembic migrations

<p>Sick of `alembic merge heads` slowing down your builds? Here's a short bash script I wrote to rename your migration files and update its down revision.</p>

Python · Tools · Bash · MySQL · SQLAlchemy

Running Metabase locally as a service

Running Metabase locally as a service

<p>Want the power of Periscope or Tableau, without the big monthly bill? Setup Metabase to run locally on your CentOS server.</p>

Product · Servers and Scaling · Tools

Shared filesystem between servers using NFS

Shared filesystem between servers using NFS

<p>Mount a directory to be shared between multiple servers using Network File System (NFS).</p>

Servers and Scaling

Using model callbacks in SQLAlchemy to generate slugs

Using model callbacks in SQLAlchemy to generate slugs

<p>Dive into SQLAlchemy's little known `event.listen` method to automatically generate slugs when saving a model instance.</p>

Python

Overriding default Jinja attributes in Python view templates

Overriding default Jinja attributes in Python view templates

<p>How to use the `do` Jinja extension to modify an existing dictionary in your view template.</p>

Python

Create a custom Alexa Skill with AWS Lambda - Part 3 (Lambda)

Create a custom Alexa Skill with AWS Lambda - Part 3 (Lambda)

<p>Configuring your Lambda function for use with an Alexa skill.</p>

Product · Servers and Scaling

Create a custom Alexa Skill with AWS Lambda - Pt 2 (Alexa Skill)

How to create and configure a custom Alexa Skill.

Product · Servers and Scaling

Create a custom Alexa Skill with AWS Lambda - Part 1 (Overview)

How to build a server-less application which handles authentication, saves details to DynamoDB, and communicates via Amazon's Alexa-enabled products.

Product · Servers and Scaling

Custom Jinja template filters in Flask

Custom Jinja template filters in Flask

<p>A short snippet for creating a template filter, to present datetime objects in Jinja templates.</p>

Python

JSON field type in SQLAlchemy (Flask / Python)

JSON field type in SQLAlchemy (Flask / Python)

<p>Want to store JSON-serialized data in your database? But sick of calling `json.loads()` and `json.dumps()` when dealing with this data in your Flask app? Read on!</p>

Python

How to Open a Port with IPtables [Step by Step Guide on CentOS]

How to Open a Port with IPtables [Step by Step Guide on CentOS]

<p>A step by step guide (with example files) to open a port using IPtables, to allow restricted inbound traffic to a server.</p>

Servers and Scaling

Resolving alembic merge branch conflicts

Resolving alembic merge branch conflicts

<p>How to fix alembic's "Multiple head revisions are present for given argument 'head'" error.</p>

Python

Automated server deployments with Ansible

Automated server deployments with Ansible

<p>Guide to automating server deployments with Ansible playbooks, with example files.</p>

Servers and Scaling

Sending log files to Logstash with Elastic's Filebeat

Sending log files to Logstash with Elastic's Filebeat

<p>Centralize your logging by using Filebeat to send log files to Logstash.</p>

Servers and Scaling

Using Python's Watchdog to monitor changes to a directory

Using Python's Watchdog to monitor changes to a directory

<p>A small Python script to take action whenever a new file is uploaded to a directory or its contents change.</p>

Python · Servers and Scaling

Data Pipelines - Airflow vs Pinball vs Luigi

Data Pipelines - Airflow vs Pinball vs Luigi

<p>Review of 3 common Python-based data pipeline / workflow frameworks from AirBnb, Pinterest, and Spotify.</p>

Python · Servers and Scaling

Bash script to monitor instances and MySQL

Bash script to monitor instances and MySQL

<p>A simple Bash script to check multiple server instances are responding, and rows are being added to a MySQL database.</p>

Servers and Scaling · Bash · MySQL

Line-by-line code profiling in Python

Line-by-line code profiling in Python

<p>How to find slow sections in your Python code.</p>

Python

Serving PHP with FPM (FastCGI) using Nginx on CentOS

Serving PHP with FPM (FastCGI) using Nginx on CentOS

<p>Installation steps to start serving any PHP application (eg Wordpress) using FPM on CentOS, together with a sample Nginx config file.</p>

Servers and Scaling

Simple sysadmin tools - Screen on CentOS

Simple sysadmin tools - Screen on CentOS

<p>Screen is one of my favourite utilities when managing servers - it allows you to use multiple shell windows from a single SSH session and to keep these active even after logging out. It is super useful for monitoring long-running processes.</p>

Servers and Scaling

Parsing JSON objects as custom classes in Typescript and Vue

Parsing JSON objects as custom classes in Typescript and Vue

Short snippets showing how I usually parse JSON objects from API responses into a custom Typescript class, and how it's used in VueJS.

Javascript

Use aliases to supercharge your bash and zsh terminal

Use aliases to supercharge your bash and zsh terminal

A handful of useful command line snippets for Bash and ZSH.

Bash

Resetting Algolia's vue-instantsearch when clicking a result

Resetting Algolia's vue-instantsearch when clicking a result

Fiddling with Algolia's vue-instantsearch component to reset the search input when selecting a result.

Javascript

Introduction to Client-Side Javascript in 2018

Introduction to Client-Side Javascript in 2018

<p>My notes for introducing a junior engineer to client-side Javascript for the first time, touching briefly on vanilla JS, jQuery, and VueJS.</p>

Javascript

Code Review Principles - understand what makes effective reviews

Code Review Principles - understand what makes effective reviews

<p>Some thoughts on what code reviews are and are not.</p>

Product

Supercharged Javascript and CSS animations

Supercharged Javascript and CSS animations

<p>Summary notes from the Browser Rendering Optimization course on Udacity focussed on building 60 fps apps.</p>

Product · Javascript

How do you measure user experience quality?

How do you measure user experience quality?

<p>Are there any factors which help evaluate a product as a bronze, silver, or gold standard of quality?</p>

Product

Overview of basic terms in AngularJS

Overview of basic terms in AngularJS

<p>A glossary of terms commonly used in Angular JS documentation and tutorials.</p>

Javascript

Testing a $rootScope broadcast event with Jasmine

Testing a $rootScope broadcast event with Jasmine

<p>A short snippet for testing AngularJS with Jasmine.</p>

Javascript

Should I use AngularJS or jQuery?

Should I use AngularJS or jQuery?

<p>AngularJS has a good balance of maturity, community support, and productivity - suitable for use either by itself or together with jQuery in production apps.</p>

Javascript

Debugging mobile apps with Charles proxy

Debugging mobile apps with Charles proxy

<p>Notes on using a HTTP / reverse proxy (Charles) to view all traffic between your mobile device and the internet.</p>

Tools · Android

Creating lists of CSS selectors with SASS

Creating lists of CSS selectors with SASS

<p>I like to use CSS selectors like .margin-top-10, .padding-right-20, etc to quickly style a new page. Here's how I create them in SASS.</p>

Tools

Understanding Time, DateTime, and timezones in Rails

Understanding Time, DateTime, and timezones in Rails

<p>My notes on using RoR for formatting times and datetimes to strings, and parsing strings to time objects.</p>

Ruby on Rails

Consuming a JSON API - Part 2 (EventBus)

Consuming a JSON API - Part 2 (EventBus)

<p>Using EventBus to update your Android app after receiving the contents of a JSON API.</p>

Android

Consuming a JSON API - Part 1 (Retrofit)

Consuming a JSON API - Part 1 (Retrofit)

<p>Square's Retrofit library together with EventBus makes it super simple to parse the contents of a JSON API into your Android app.</p>

Android

Simple Android utility to parse config files in your app

Simple Android utility to parse config files in your app

<p>A really simple utility file I keep around in my Android projects which processes a raw JSON file into a List of objects.</p>

Android

Android swipe to refresh, only at the top of the list

Android swipe to refresh, only at the top of the list

<p>Build a swipe to refresh list, which only refreshes when at the top of the list.</p>

Android

Creating an instant autocomplete field in Android

Creating an instant autocomplete field in Android

<p>How to create an autocomplete text field in Android, which displays suggestions in the dropdown and has a clear button.</p>

Android

Rspec - How to test a controller has included concerns

Rspec - How to test a controller has included concerns

<p>A short Rspec snippet to verify the correct concerns have been included in a controller.</p>

Ruby on Rails

How to split Rails routes.rb into multiple smaller files

How to split Rails routes.rb into multiple smaller files

<p>Organise your routes.rb file into smaller files, works in both Rails 3 and 4.</p>

Ruby on Rails

Rails 4 Conditional Page Cache for Logged In Users

Rails 4 Conditional Page Cache for Logged In Users

<p>A technique to generate a full static HTML page for caching, based on any specified conditions.</p>

Ruby on Rails

Recommended Rspec style for Rails models

<p>Listing out my top 10 recommendations for how to structure and layout rspec tests for Rails models.</p>

Ruby on Rails

© 2026 Michael Cho