Skip to content

Instantly share code, notes, and snippets.

Avatar

Emily Strickland emilyst

View GitHub Profile
@emilyst
emilyst / yt-dlp-config
Last active Aug 29, 2022
~/.config/yt-dlp/config
View yt-dlp-config
# /usr/local/bin/docker run --name "yt-dlp" --rm -v "/volume1/Media/Clips:/downloads:rw" jauderho/yt-dlp:latest --config-locations /downloads/yt-dlp-config
--batch-file /downloads/to-download.txt
--embed-chapters
--embed-info-json
--embed-metadata
--embed-subs
--embed-thumbnail
--concurrent-fragments 2
--mtime
View 20-quiet-printk.conf
# /etc/sysctl.d/20-quiet-printk.conf
kernel.printk = 3 3 3 3
View why-image-stacking-works.md

Image stacking is a collection of related techniques used in astrophotography which all use multiple images taken by a camera to achieve a more detailed photo than would otherwise be possible. I’ve talked about image stacking in the past, but I hand-waved the statistical parts a bit. In this post, I want to dig into those mathematical details so that you understand why image stacking actually works.

But first, I’ll tell a story about thermometers. We’ll come back to image stacking after that.


Let’s imagine you’re a scientist, and you need to know the temperature of the room you’re in to within a tenth of a degree in order to run an experiment. You dutifully order a super expensive NIST-traceable thermometer online, but on the day it arrives, you open the box only to discover that you got a hundred cheap alcohol thermometers instead.

The expensive thermometer would have done the job to within a hundredth of a degree, but now it’s too late to wait for a new one to arrive, and all you have are these che

@emilyst
emilyst / 99-usb-cdrom.rules
Last active Sep 25, 2022
Description for getting MakeMKV working on Synology with DSM 7 using jlesage/makemkv via Docker Compose
View 99-usb-cdrom.rules
SUBSYSTEMS=="usb", ATTRS{idVendor}=="", ATTRS{idProduct}=="", GROUP="cdrom", MODE="0666"
@emilyst
emilyst / mash.rb
Created Sep 15, 2019
Flatten a hash's structure in a somewhat naive way
View mash.rb
#!/usr/bin/env ruby
class Hash
def mash(prefix=nil)
reduce({}) do |a, (k,v)|
case v
when Hash then a.merge(v.mash(k.to_s + '_'))
else a.merge({ "#{prefix}#{k}" => v })
end
end
@emilyst
emilyst / video2gif-filtergraph-diagram.txt
Last active Apr 26, 2019
Diagram of video2gif filtergraph
View video2gif-filtergraph-diagram.txt
.─────────.
( input )
`─────────'
┌────────────┐
│ fps │
└────────────┘
@emilyst
emilyst / sleepwake-iokit.py
Created Mar 19, 2019
This doesn't work either
View sleepwake-iokit.py
#!/usr/bin/env python3
import objc
from Foundation import (
NSDate,
NSDefaultRunLoopMode,
NSLog,
NSObject,
NSRunLoop,
NSThread,
View sleepwake-threaded.py
#!/usr/bin/env python3
import threading
# from multiprocessing import Pool
# from multiprocessing import Process
class EventLoopThread(threading.Thread):
def __init__(self):
super(EventLoopThread, self).__init__()
@emilyst
emilyst / sleepwake.py
Created Mar 11, 2019
Log sleep/wake notifications on macOS
View sleepwake.py
#!/usr/bin/python
from AppKit import NSWorkspace, \
NSWorkspaceWillSleepNotification, \
NSWorkspaceDidWakeNotification, \
NSObject, \
NSLog
from PyObjCTools import AppHelper
class NotificationHandler(NSObject):
@emilyst
emilyst / # macvim - 2018-09-08_10-35-42.txt
Created Sep 8, 2018
macvim on macOS 10.14 - Homebrew build logs
View # macvim - 2018-09-08_10-35-42.txt
Homebrew build logs for macvim on macOS 10.14
Build date: 2018-09-08 10:35:42