Skip to content

Instantly share code, notes, and snippets.

View atomkirk's full-sized avatar

Adam Kirk atomkirk

View GitHub Profile
atomkirk / udot_regions.sql
Created March 8, 2022 19:59
UDOT Regions 1 & 2 GIS
This file has been truncated, but you can view the full file.
INSERT INTO "public"."gis__objects"("id","layer","geometry","properties","inserted_at")
(E'udotreg1',E'udot_regions',E'SRID=4326;POLYGON((-113.47488600498771 41.9933094053436,-113.47701796048186 41.993290592340216,-113.47965799142257 41.993267513722095,-113.48183048968212 41.993248275413805,-113.48442960325997 41.9932255219256,-113.48659558154715 41.993206333678295,-113.48914726497632 41.99318405086824,-113.49136078839656 41.99316446201844,-113.492336364185 41.993155700446096,-113.49386453053565 41.99313573035917,-113.49620402201325 41.99310529484248,-113.49858127956367 41.99307443869104,-113.50104721969728 41.99304241079656,-113.50292987922532 41.993017833210615,-113.50597269767145 41.99297851586337,-113.50791966759073 41.99295317178795,-113.51089816756081 41.99291467895187,-113.51203139408835 41.99289968747675,-113.51290988984236 41.99289062542413,-113.51576741908306 41.99286132012711,-113.51790018395923 41.9928393870467,-113.5206364298568 41.99281127081749,-113.52289058677229 41.992788109236464,-113
atomkirk /
Last active June 13, 2024 23:53
Force download a zoom recording
  1. Open dev tools
  2. Search for the <video… tag.
  3. Copy the source URL
  4. Right click on the body tag and click Edit as HTML
  5. Add an a link with the src right inside the body tag like:
  <a href="url-you-copied">download</a>
atomkirk /
Created February 9, 2021 14:25
Stop all Docker containers

I will often run this command to make sure all my docker containers are stopped and removed before running docker-compose up. Sometimes when you restart your system, old containers will start back up automatically in the background.

docker stop $(docker ps -aq) && docker rm $(docker ps -aq)
atomkirk / postgres_enum_add.sql
Created February 9, 2021 14:22
Add postgres enum values in order (for sort)
ALTER TYPE enum_type ADD VALUE 'new_value'; -- appends to list
ALTER TYPE enum_type ADD VALUE 'new_value' BEFORE 'old_value';
ALTER TYPE enum_type ADD VALUE 'new_value' AFTER 'old_value';
atomkirk /
Last active July 1, 2020 13:26
Run Elixir tests on VSCode save

A really great workflow is to write your test first (TDD anyone?), run the test to verify it fails (eliminate false positive) and then write the implementation. I've included a runOnSave setting to run a test file anytime it is saved and, second, to run any failed tests as soon as any other elixir file is saved.

So, you write the test, save, it fails. You write Elixir code, save, it still fails. You keep writing Elixir code and saving until it passes.

This is obviously cool. But one thing that is particularly cool is that while you are writing the implementation, you often want to peek at values and experiment with code. Well, thats easy! Just write the code, IO.inspect it and then save! You'll instantly

atomkirk / factory.ex
Last active March 2, 2022 17:50
Generating Example Data in Elixir
defmodule App.Factory do
alias App.Repo
def create(module, overrides \\ %{})
def create(module, overrides) when is_list(overrides), do: create(module,
def create(module, overrides) do
attributes = module.example() |> Map.merge(overrides)
atomkirk /
Last active April 15, 2020 21:56
elixir tuple constant time

Whats the fastest way to look up an index in Elixir?

Lets create a long list of a million items and look up the 500,000th item

iex(54)> range = 1..1_000_000

iex(55)> index = 500_000
atomkirk / ios-camera.html
Created March 13, 2020 04:49
iOS Safari Camera API
<video id="player" autoplay muted playsinline> </video>
<button id="capture">Capture</button>
<canvas id="canvas" width=320 height=240></canvas>
const player = document.getElementById('player');
const canvas = document.getElementById('canvas');
const context = canvas.getContext('2d');
const captureButton = document.getElementById('capture');
const constraints = {
atomkirk / hungarian.ex
Last active January 8, 2023 20:25
Hungarian/Munkres algorithm in Elixir
defmodule Hungarian do
@moduledoc """
Written by Adam Kirk – Jan 18, 2020
Most helpful resources used:
atomkirk /
Last active January 18, 2023 17:23
Storing files on S3 with Elixir

I have this abstraction in my application code called a "CloudFile". This is where I store in the database information about files on S3 and it gives me a resource for other resources to own. For example, a user would have an avatar_cloud_file_id. On the front-end, I would load this relationship and display the avatar with user.avatar_cloud_file.download_url

defmodule RL.CloudFile do
  use Ecto.Schema
  import Ecto.Changeset

  @timestamps_opts type: :utc_datetime_usec