Skip to content

Instantly share code, notes, and snippets.

View acj's full-sized avatar

Adam Jensen acj

View GitHub Profile
@acj
acj / mergesort.clj
Created October 3, 2011 16:43
Merge sort in Clojure
; Example usage: (mergesort [5 1 8 16 25 11 4])
(ns mergesort
(:use clojure.contrib.math))
(defn merge-two
"Merge two (already sorted) vectors"
[vec1 vec2]
(let [v1f (first vec1) v2f (first vec2)]
(cond
(empty? vec1) vec2
@acj
acj / gist:3843841
Created October 6, 2012 04:25
Drawing a circumscribed triangle inside a known circle
// This implementation assumes that the origin is at the upper-left corner of the
// drawing surface.
//
// Sample usage:
//
// Paint paint = new Paint();
// paint.setStyle(Paint.Style.STROKE);
// float centerX = 200;
// float centerY = 200;
// float radius = 100;
@acj
acj / keybase.md
Created June 16, 2014 17:51
Proof of identity for Keybase.io

Keybase proof

I hereby claim:

  • I am acj on github.
  • I am acj (https://keybase.io/acj) on keybase.
  • I have a public key whose fingerprint is 8B49 8B25 F16C A3F2 78BD 9E98 BB8F 2A78 6D76 A639

To claim this, I am signing this object:

@acj
acj / TrimVideo.swift
Last active November 2, 2023 15:05
Trim video using AVFoundation in Swift
//
// TrimVideo.swift
// VideoLab
//
// Created by Adam Jensen on 3/28/15.
// Updated for Swift 5 (tested with Xcode 10.3) on 7/30/19.
// MIT license
//
import AVFoundation
@acj
acj / ATTENTION.md
Last active May 5, 2023 12:23
Build a movie from jpeg images in Swift using AVFoundation

This code has moved

Please refer to the TimeLapseBuilder-Swift repository on GitHub from now on.

I will leave the original code here as a reference, but new comments may be removed. Please open an issue on GitHub if you have questions or would like to contribute.

Thanks!

//
// BuildTimelapseViewController.swift
//
// Created by Adam Jensen on 5/9/15.
//
import JGProgressHUD
import JoePro
import UIKit
@acj
acj / elixir_md5_chunks.exs
Created December 2, 2016 22:12
Compute MD5 digest in Elixir using streams and chunks
def md5_digest_for_file_at_path(file_path) do
File.stream!(file_path, [:read, :binary], 1024 * 1024)
|> Stream.chunk(1)
|> Enum.reduce(
:crypto.hash_init(:md5),
fn(chunk, acc) ->
:crypto.hash_update(acc, hd(chunk))
end)
|> :crypto.hash_final
|> Base.encode16
@acj
acj / radeongate-fix-custom-iso-steps.md
Last active July 7, 2018 17:37
Building a custom ISO to fix the 2011 MacBook Pro Radeongate GPU problem

How to build a bootable Arch-based thumb drive that can temporarily disable the Radeon GPU in a 2011 MacBook Pro.

I recently spent a few hours rescuing a faithful 2011-era MacBook Pro that had begun to suffer from the "Radeongate" graphics distortion problem. While it's possible to disable the Radeon GPU, the steps involve a lot of manual labor. Their automated solution produced an ISO that wouldn't boot for me, so I ended up building a custom ISO that only requires me to run one command after installing each macOS update. A non-technical family member can perform the fix, which is a big plus.

You'll need to buy RealMacMods' automated utility so that you can grab their script that does the heavy lifting. It's $10 at the time of this writing and is a nice way to support the

@acj
acj / microk8s_in_lxc.md
Last active November 2, 2024 09:03
Installing microk8s in an LXC container

Installing microk8s in an LXC container

I wanted to run Microk8s on a Proxmox 6 host inside of an LXC container. These are my notes from the journey.

  1. Create a privileged LXC container through the Proxmox web interface
  • Enable nesting and FUSE
    • In Proxmox UI, select container, then Options > Features > Check nesting and FUSE boxes
  1. SSH into the Proxmox host and edit the container's config in /etc/pve/lxc/.conf
    • Add the following lines
  • lxc.apparmor.profile: unconfined
@acj
acj / actions_runner_controller_on_microk8s.md
Created April 5, 2020 19:54
Installing actions-runner-controller on microk8s running in LXC

Installing actions-runner-controller on microk8s running in LXC

This is a niche problem, but these steps worked for me. Proxmox 6.1-5 with microk8s v1.18.0 running in an LXC container. Tested with actions-runner-controller 0.4.1.

  • Need to add --allow-privileged=true to /var/snap/microk8s/current/args/kube-apiserver
    • Then restart the API server: sudo systemctl restart snap.microk8s.daemon-apiserver.service
    • If this is a cluster of nodes, then this change needs to be applied on node hosting the control plane
  • Enable "Create device nodes" feature for the container (Options > Features)
  • Add to LXC container config: lxc.cgroup.devices.allow: a