Notes

Atom Feed

Debian and Ubuntu Releases

February 13, 2021

Debian Releases

Version Name Release End of Standard Support
11 Bullseye TBA TBA
10 Buster 2019-07-06 2022
9 Stretch 2017-06-17 2020-07-18
8 Jessie 2015-04-25 2018-06-17
7 Wheezy 2013-05-04 2016-06-04
6 Squeeze 2011-02-06 2014-07-19

Ubuntu Releases

Version Name Release End of Standard Support
20.10 Groovy Gorilla 2020-10-22 2021-07
20.04 Focal Fossa 2020-08-06 2025-04
18.04 Bionic Beaver 2018-04-26 2023-04
16.04 Xenial Xerus 2016-04-21 2021-04
14.04 Trusty Tahr 2014-04-17 2019-04
12-04 Precise Pangolin 2012-04-26 2017-04-28
10.04 Lucid Lynx 2010-04-29 2015-04-30
8.04 Hardy Heron 2008-04-24 2013-05-09

Permalink

Setting Up FastAI Fastbook on a Fresh Ubuntu Instance

January 31, 2021

This is how to set up the fastai environment on a fresh Ubuntu instance, for those of us who have a computer with a good Nvidia graphics card and Ubuntu and don’t want to use a cloud-based platform.

  1. Install nvidia CUDA drivers. So far, the most dependable guide that I’ve found has been this askubuntu post.
  2. Verify that the CUDA drivers have been installed correctly following this guide.
  3. Download fastbook with git clone [email protected]:fastai/fastbook.git && cd fastbook.
  4. Install the latest version of python - sudo apt update && sudo apt install python3.9 python3.9-venv python3-setuptools
  5. Create a virtual environment: python3.9 -m venv env
  6. Activate the virtual environment: source env/bin/activate
  7. Install a build requisite: pip install wheel
  8. Install packages: pip install -r requirements.txt
  9. Launch the notebook with jupyter notebook

Permalink

Tip for Developer Tools Startups

January 30, 2021

I recently had a really annoying experience with a startup in the developer tools space. I’ve been looking for a better CI platform for a while now (I’ve used Codeship, CircleCI, Travis, and Jenkins) and I found a promising CI platform that relied significantly on open source repositories as plugins to run its build pipelines. Many of these repositories are owned under the company’s own Github organization. Onboarding a few repositories of mine during an initial trial period, I found that there was a major missing feature in one of these plugins which would block me as well as other users from using this CI system effectively. I even found an open Github issue from another user a year earlier that reported the same missing feature. I then went into the plugin, learned the architecture, wrote a patch, added tests and documentation, and submitted five pull requests to fix this missing feature.

I’ve been waiting for three weeks for the company to merge or at least comment on these pull requests. In the meantime, my two week trial period ended which means I can’t even test changes to my pull requests. I therefore have significant doubts whether I should be using this company’s products.

Here’s a tip for dev tools startups: your customers and yourself are likely Github users, and if your customers contribute free feedback or features to your company through Github, you had better be responsive.

Permalink

A Better Go Defer

October 20, 2020

Go has a defer statement built into the language which allows a function to be executed at the end of another function. This is pretty useful in particular for cleanup (e.g. closing a file handle) or for recovering from errors (because Go code usually contains a lot of if err != nil { return err } and scattering cleanup code everywhere can be visually distracting).

// Real working go code
// Prints out "Start\nmain\nClose
// https://repl.it/@varsnap/Go-Defer-Example
package main

import "fmt"

type Instrumenter struct {}

func (i *Instrumenter) Start() *Instrumenter {
  fmt.Println("Start")
  return i
}

func (i *Instrumenter) Close() {
  fmt.Println("Close")
}

func main() {
  i := Instrumenter{}
  defer i.Start().Close()
  fmt.Println("main")
}

The funny thing is, although Go has first-class support for functions, defer statements take a a function call as an argument, not just a function declaration or function name - i.e. defer run() and not defer Run. While this may be a minor annoyance while programming, it can be pretty unintuitive when combined with a factory pattern that might use defer with a double function call.

I humbly propose (with heavy doubt it’ll be implemented) that the defer syntax be changed so that defer accepts a function rather than a function call as an argument, thereby making defer accept a continuation that can be invoked at the end of a function call (this does cause some problems with variable mutations that may happen later on, which become even more complicated when exception handling is introduced, but hopefully it can be worked out). I also propose that defer be changed from a built-in statement into a function that can accept a continuation as a parameter.

Permalink

Covid-19 Economy Predictions

October 13, 2020

(Software-Engineering) Office culture

  • Informal mentorship (whiteboard sessions, (useful) code reviews) will become rare as remote works adds friction to the process.
  • Lack of organic mentorship will make companies not as efficiently extract value from junior employees who require more guidance. Many companies will move to a more Netflix-style model and value senior employees. This will make senior employees more valuable (i.e. paid more) but increase operational risk for those companies as knowledge and leadership will become more concentrated. Junior and new-grads will have an even harder time finding their first few jobs.
  • The risk of people being interpretted incorrectly will increase. This will result in unfocused teams at best and gossip at worst. This hasn’t happened yet because newly remote companies still have teams who know each other from before becoming remote.
  • Impressions (and biases) will form a more significant part of how people work with each other because of limited alternative information.
  • Management has a long way to go in building best practices and tools for remote management. Many management philosophies are still predicated on strong social interactions which break down when working remotely. There is a billion dollar company in building a tool to bridge this gap (and this company will make Zoom look like Cisco).

Macro-economic effects

  • There will be a mass migration of workers from high cost of living to low cost of living areas. While this will create burdens on the real estate market, the more interesting burdens will come from secondary effects like cities and states rebalancing their budgets.
  • Many companies are using Covid-19 as an excuse for layoffs. Smart companies are using the current “employers market” to headhunt future employees.
  • Many companies will use this as an opportunity to shed office-related expenses. This will further accelerate the distribution of employees.

Medicine

  • A vaccine won’t be developed anytime soon that will be very effective (on the order of a smallpox vaccine). General antiviral and experimental therapies will continue to be researched and used until interest wanes.
  • At some point, the medical establishment is going to come looking for their paycheck. How the insurance and pharmaceutical industry will react will be interesting.
  • There are long-term effects from Covid-19. These effects are so far not well-known but at worst could cause slightly increased morbidity for years among those who have been infected by the virus in the past.
  • There’s going to be an interesting “freakonomics” study in 5 years around the health effects of those who partook in quarantine (e.g. increase in BMI, heart disease, mental stress). Most places didn’t quarantine for long enough for any long term effects to build up though.
  • There’s going to be an interesting “freakonomics” study in 10 years around the health effects from dampened employment rates from Covid. It will be hard to find signal in this noisy data though.

Permalink

Basic Docker Monitoring

July 4, 2020

Switching From Go Dep to Go Mod

May 30, 2020

Upgrading LibMySQLClient in Python MySQLDB/MySQLClient

May 25, 2020

Developing Django in Production

May 15, 2020

Quote

March 5, 2020

Sendmail Wrapper for Mailgun

March 1, 2020

Python Release Support Timeline

December 26, 2019

Use the Default Flake8 Ignores

December 14, 2019

Making Pip Require a Virtualenv

December 5, 2019

Engineering Toolbox

November 30, 2019

Node Timezones

November 1, 2019

Sampling Samples

August 21, 2019

Rotating a NxN Matrix in One Line of Python

July 27, 2019

iTerm2 Search History

July 19, 2019

Nginx Auth With IP Whitelists

June 29, 2019

Bash Strict Mode

May 11, 2019

Optimizing Asus Routers for Serving Websites With Cloudflare

May 5, 2019

Browserify, Mochify, Nyc, Envify, and Dotenv

April 1, 2019

Scraping Images From Tumblr

February 24, 2019

There Are Too Many NPM Packages

February 10, 2019

Programmers Writing Legal Documents

January 31, 2019

Solidity Review

November 17, 2018

Likwid

November 9, 2018

My First Server's IP

November 9, 2018

Installing Netdata

September 23, 2018

Interrobang Versus Shebang

July 10, 2018

Bad Interview Questions

July 8, 2018

Showing Users in Different Databases

July 7, 2018

Some MIT (Undergraduate) Admissions Interview Advice

July 4, 2018

Optimize the Develop-Test-Debug Cycle

April 22, 2018

Example of Python Subprocess

March 23, 2018

Spotted in Taiwan

January 20, 2018

Fixing "Fatal Error: Python.h: No Such File or Directory"

December 16, 2017

Cassandra Primary Keys

December 11, 2017

MyPy Review

November 2, 2017

Griping About Time Zones

October 26, 2017

Bundling Python Packages With PyInstaller and Requests

September 23, 2017

Go Receiver Pointers vs. Values

September 4, 2017

Fixing statsonice.com Latency

September 1, 2017

Showing Schemas in Different Databases

August 26, 2017

Straight Lines

June 2, 2017

Emerson on Intellect

May 29, 2017

Core Metric for Developer Productivity

May 21, 2017

How to Capture a Camera Image With Python

May 7, 2017

Python Has a Ridiculous Number of Inotify Implementations

May 2, 2017

Projects: Gentle-Alerts

April 27, 2017

Creating a New PyPI Release

April 24, 2017

Eva Air USB Ports

April 24, 2017

Projects: Git-Browse

March 18, 2017

Cassandra Compaction Strategies

March 5, 2017

Code Is Like Tissue Paper

January 25, 2017

Seen in a Bathroom Stall at MIT

January 24, 2017

Underused Python Package: Webbrowser

January 21, 2017

Pax ?

January 5, 2017

Golang Review

January 2, 2017

Wadler's Law

December 15, 2016

Tunnel V2

December 8, 2016

MultiPens

December 5, 2016

SSH Tunnel

September 18, 2016

That Time I Was a Whitehat Hacker

September 18, 2016

Comparison of Country and Company GDPs

September 8, 2016

Sketching Science

September 8, 2016

Tech Hiring Misperceptions at Different Companies

July 22, 2016

Calculating Rails Database Connections

June 26, 2016

DevOps Reactions

June 12, 2016

Tuning Postgres

June 9, 2016

Fibonaccoli

June 4, 2016