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:
To learn more about monorepo, there are many posts on this topic, and I will list a…
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. …
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.
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.
Earlier today I was building a…
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.
Mobile app projects can have a client app and a server, sharing the version information. …
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.
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.
I will demonstrate how to…
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.
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.
There are a few workarounds:
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):
tf_agentwhich abstract necessary concepts
This post aims to be a highly actionable step-by-step tutorial that:
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:
After researching the existing tutorials on building theme systems when I was building one for my side project, I found…
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 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).
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:
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…