Sign in

Hi, there. I’m a software developer and speaker who likes to make things: https://garrettmills.dev/

Comparing named-injection, constructor-injection, and property-injection

This post originally appeared on my blog, here.

A snippet from @extollo/di’s Inject decorator.

Anyone who has read this blog before knows that I have a particular interest in dependency injection and inversion-of-control paradigms.

Over the last few years, I’ve implemented DI in JavaScript for various projects, and I’m currently in the process of rewriting my framework and its DI implementation, so I wanted to share some observations about different JavaScript/TypeScript DI strategies.

In particular, we’ll explore named-injection, constructor-injection, and property-injection.

Named Injection

My first foray into DI in JavaScript relied on purely-runtime code and allowed injecting services from a container by name:

const Injectable = require('./Injectable')class…


Uphold your constitutional and moral duty. Vote to certify.

Roger Marshall, Congressional representative for the Kansas 1st, has expressed his intention to vote not to certify the result of the 2020 presidential election.

I feel very strongly that this is a dangerous and irresponsible move that goes against the core tenets of American democracy.

US House Representative, Kansas 1
312 Cannon House Office Building
Washington, DC 20515

Mr. Marshall -

I’m writing to express my disappointment in your recent support for the irresponsible efforts by various members of your party to oppose the federal certification of the results of the 2020 election.

These results were audited and certified by…


This post originally appeared on my blog, here.

For the past year, I’ve been working on a web application called Noded. Noded is built in Angular on the Ionic framework and provides tools for building a personal tree of information. (If you’re curious, you can try it out here.)​

A screenshot from Noded.

Because Noded is meant to replace whatever note-taking application a person uses, it’s important that it be available offline (on your phone, for instance). …


Tips, tricks, and downright hacks to make working as a remote developer just a little nicer

This post originally appeared on my blog, here.

Given everything that’s happening right now (c. 2020–07–23), many software developers have been fortunate to be able to work from home. However, there are some challenges I encountered with my office’s particular brand of development workflow. Over the last couple months, I’ve fleshed out a pretty good stack of tools for working around them. In this writeup, I want to go over some of them.

“Remote” vs. Remote

There are really two different paradigms for coding remotely. …


Setting Up a Kickass, Self-Hosted, GitHub Alternative with Continuous Integration

This article was originally posted on my blog, here.

This is part I, wherein we set up the web-based GitHub alternative, Gitea. Stay tuned for part II, where we will setup the Docker-based continuous-integration solution, Drone, with plugins for Gitea.

As I have chronicled before, over the last few years I have been on a journey to move to using 100% self-hosted services. The basics were fairly easy (cloud, calendar, contacts, website, &c.), but I ran into a bit of a pain point when it came to moving away from GitHub.

I write a pretty large amount of code in…


Using Agular’s awesome dependency injection

If you’ve ever used Angular for any amount of time, you’ve probably noticed how freaking awesome its dependency injection is. With just the invocation of the injectable decorator, you can pull in reusable instances of any service in your application just by referencing the type:

import {Injectable} from '@angular/core';
import {BackendService} from './backend.service';

@Injectable()
export class AuthService {
constructor(
private backend: BackendService,
) {
this.backend.somethingAwesome();
}
}

Notice that I don’t have to instantiate the BackendService anywhere because it's already handled for me by Angular. …


This article was originally posted on my blog here.

I have decided to try out a new format for my blog. The site that this article was originally published on can be found at the new home of my blog, here. I thought I might take this opportunity to discuss the platform that runs this blog, as well as my motivation for moving the primary source away from Medium.

Enter Hexo

For this site, I’m using a static blog generator called Hexo. Hexo has been around for a few years now, and is fairly mature. More importantly, it has a pretty solid…


Part III —OpenMPI, Python, and Parallel Jobs

This is Part III in my series on building a small-scale HPC cluster. Be sure to check out Part I and Part II.

In the first two parts, we set up our Pi cluster with the SLURM scheduler and ran some test jobs using R. We also looked at how to schedule many small jobs using SLURM. We also installed software the easy way by running the package manager install command on all of the nodes simultaneously.

In this part, we’re going to set up OpenMPI, install Python the “better” way, and take a look at running some jobs in…


Part I — Getting Started

Flitter is my take on a Javascript web-app framework based on Express. If you haven’t read it, I recommend perusing my introduction here to see what it’s all about. This series of posts will look at creating a basic to-do web-app using Flitter. We’ll cover everything from getting set up to using Flitter, to debugging and running your app in production.

What are we building?

The meat-and-potatoes of our app isn’t that important to the purpose of this tutorial, so we’re going to do something simple. We’re going to build a simple to-do application that allows users to sign in to a web panel…


Part II — Some Simple Jobs

This is Part II in my series on building a small-scale HPC cluster. Check out Part I and Part III.

Now that we have our cluster up and running, we can start running jobs on it. While the specific applications of your cluster are up to you, in the rest of this series I will be looking at how to set up a few different pieces of software, as well as how to use the actual cluster scheduler, Slurm.

In this part, we will dive into some Slurm basics, set up some software on our cluster the easy way, and…

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