Build an attention-free monorepo project

Photo by Joshua Aragon on Unsplash

Monorepo refers to the practice of containing all sub-projects inside a single repository (by contrast, polyrepo assigns each sub-project its own repository).

Monorepo offers many benefits including:

  • Better code review: a single pull request can cover both the changes and the updates that go into their dependents. It encourages shared responsibilities (don’t just make changes, also fix the messes they cause).

To learn more about monorepo, there are many posts on this topic, and I will list a…

More productivity and less wait time

People huddled around a laptop.
People huddled around a laptop.
Photo by John Schnobrich on Unsplash.

Setting Up Monorepo Was Hard… Until 2020

Monorepo refers to the strategy of having all subprojects located in a single repository. By contrast, with polyrepo, each subproject has its own repository.

Monorepo brings many benefits, including better collaboration and shared responsibilities. There are many interesting articles discussing the pros and cons of monorepo. One of my favorites is Monorepo: please do! by Adam Jacob.

Just a few years back, setting up a monorepo project was complicated due to the incompatibility of frameworks. …

Use as your last resort for TensorFlow installation when nothing works

Photo by Robert Bye on Unsplash

TensorFlow is a framework for building machine learning projects that is pretty easy to use. However, that doesn’t mean it’s always easy to set up, especially when you are playing with the bleeding edge features.

This post if for future reference

During the last few years, I have run into situations where TensorFlow won’t work in certain environments multiple times. Every time that happens, I had to spend hours searching the internet for fragmented information and extra hours to put the pieces together. This time, I decided to write up a detailed tutorial to save future situations where nothing works.

What went wrong this time?

Earlier today I was building a…

I don’t duplicate files, but when I do, I duplicate with style

Photo by JOSHUA COLEMAN on Unsplash

In software development, in theory, we want to reduce duplicated information as much as possible and limit everything to a single source of truth to help improve maintainability.

However, in practice, it’s almost impossible to completely eliminate duplication since systems/frameworks are always incompatible in some ways.

Potential situations for duplication

Example 1

Mobile app projects can have a client app and a server, sharing the version information. …

Make your repository end-to-end automated

Photo by Marc-Olivier Jodoin on Unsplash

GitHub automation infra is ramping up

In recent months, GitHub has launched many tools for automation.

For example, Dependabot (through acquisition), an automated dependency management tool, GitHub Action, GitHub’s native CI/CD platform, and code scanning, an automated tool for vulnerability discovery.

This is great for independent open-source contributors because most of us can’t afford a DevOps team to maintain the side projects.

We still need to fill the gap generic tools can’t cover

However, every project comes in different shapes, so the generic tools can only partially cover the workflow.

Luckily, we developers won’t let the stock solution limit us.

If there is no automation that fits the requirements, then build one.

Steps to build a GitHub automation app

I will demonstrate how to…

Excuse developers from reviewing trivial pull requests

ApproveMan via GitHub

In software development, code review is important for maintaining code quality.

To help project maintainers implement code-review policies, GitHub provides a convenient approach, protected branch, which enforces pull requests to satisfy certain review policies before merging.

The Downside of Enforcing Code-Review Policies

Although protected branches sound like a great plan, in practice, they can be annoying because not all pull requests require human attention.

For example, if I want to update my contact information in a markdown file, there’s no point in asking another developer to review my change.

Potential Workarounds

There are a few workarounds:

  • Split a monorepo project into subprojects with different review policies

A highly actionable plan to build your own DQN

Photo by Max Kleinen on Unsplash (This is a character from my favorite game. Guess what that is?)

Since the hyped Alpha Zero, deep reinforcement learning has been all over the news.

Although A3C is becoming the go-to approach for RL, for beginners, DQN is still the better way to know the RL basics.

However, there are few tutorials that work for the aspiring RL developers.

A lot of the existing deep reinforcement learning tutorials (falls in 1 or more):

  • Don’t have code :(

This post aims to be a highly actionable step-by-step tutorial that:

  • Demonstrates how to…

A guide to enabling colorful user experience for your apps

Photo by Ricardo Resende on Unsplash

As cross-platform frameworks (e.g. React Native and Flutter) and their design patterns mature, building functionalities has become easier than before which brought more focus on building user experiences.

The theme plays an important role in user experience as it appears on every screen of an app.

However, building a user-friendly theme system is a non-trivial work which includes:

  • Making it dynamic (switch between themes within the apps).

After researching the existing tutorials on building theme systems when I was building one for my side project, I found…

Never release the wrong version again

Photo by Adi Goldstein on Unsplash

Flutter: a cross-platform app framework

Flutter is a next-generation cross-platform (Android, iOS, Web, Desktop, etc) app framework from Google with native performance (unlike React Native which has a JS bridge).

Fastlane: an app automation framework

Fastlane is a framework that helps automate uploading app package, changelog, screenshot, and many more useful items to marketplaces (e.g. Apple Appstore, Google Play Store).

Fastlane targets Android/iOS, not Flutter

As Fastlane started before Flutter, Flutter was not part of its plan.

Fortunately, Fastlane and Flutter play well together except a few metadata syncing issues.

A typical Flutter project looks like the following:

Improve resume/profile and help protect our privacy by becoming a Mini Donkey project contributor

Photo by Nathan Dumlao on Unsplash

Mini Donkey is a platform-independent encryption app

Mini Donkey is an app that encrypts and hides messages using AES encryption and steganography.

Since Mini Donkey itself is not a service, it works with all social media apps that support sending images.


It all started when a couple of friends complained that they couldn’t send important messages to friends and families without being under surveillance due to regional restrictions.

Unfortunately, privacy-preserving services aren’t available in those regions for obvious reasons.

I thought “wow, that’s not cool”, especially in 2020 where social media has become an essential part of our lives.

After researching a few privacy-preserving messaging…

Jackson Zhou

Hold my boba. I need to code. I explore new tech every day (currently Flutter). Subscribe to my latest content at

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store