The remote extension that Visual Studio Code provides makes developing inside a Docker container more convenient than ever.
However, during my usage, I found configuring Git identities a bit annoying since every time a container is built or re-built, I need to the following to be able to commit changes:
The naive solution is to run the commands as part of the Dockerfile, but we don’t necessarily want to do that because (a) it exposes the name and email to the internet and (b) people will step each other on the toes if the repository has multiple contributors.
Running machine learning algorithms on GPUs is a common practice. Although there are cloud ML services like Paperspace and Colab, the most convenient/flexible way to prototype is still a local machine.
Since the beginning of machine learning libraries (e.g., TensorFlow, Torch and Caffe), dealing with Nvidia libraries has been a headache for many data scientists:
Semantic-release is a tool to automate commit messages to version calculation to publishing flow for Node.js projects.
Combined with GitHub actions, developers can simply push code and the workflow will automatically calculate versions and publish the package to registries.
It’s super convenient. So convenient that it makes me feel bad for my Ruby projects 😂
However, after researching and tinkering, it turns out that it can be easily customized for Ruby projects.
The semantic-release tool can be installed as npm packages:
Note: it’s much easier to initialize a dummy Node.js project inside the Ruby project than installing semantic-release globally.
GitHub Actions are code-defined workflows that can be triggered by GitHub events to monitor repository health.
GitHub Actions need code to define the workflow and configuration to define the environment to execute the code.
There are three types of GitHub Actions:
TS GitHub Actions are commonly preferred when possible because it’s:
As a developer, I spend a lot of time jumping between GitHub repositories, open source projects, and Stack Overflow questions.
It’s frustrating to start every new tab by searching on Google, looking through bookmarks, or typing the full URL.
In companies, developers commonly use some form of a “go to” link service internally to easily navigate. For example, developers will define
gh to represent GitHub or
q for Stack Overflow.
Similar services can be handy outside work as well.
There are a few solutions, but they are flexible enough for my use cases.
For example, golink is only enterprise-facing and…
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…