Skip to content

Instantly share code, notes, and snippets.

View jpstroop's full-sized avatar

Jon Stroop jpstroop

  • Princeton University Library
  • Princeton, NJ
View GitHub Profile
@jpstroop
jpstroop / asdf_which.sh
Last active December 26, 2021 15:58
asdf which extension - adds an option to specify a version as the third arg to the which subcommand and get a path the binary
# (Paste into your bash .profile or whatever you use)
#
# $ asdf which python
# /Users/jstroop/.asdf/installs/python/3.8.5/bin/python # version in .tool-versions
# $ asdf which python 3.7.6
# /Users/jstroop/.asdf/installs/python/3.7.6/bin/python # version from 3rd arg
#
# NOTE: Python < 3.11-dev does not compile on Apple silicon.
# See: https://bugs.python.org/issue43878.
# Use Rosetta if necessary.
@jpstroop
jpstroop / home-nut_notes.md
Last active June 1, 2021 15:51
My Notes on Configuring NUT for Home Use

Setting up Network UPS Tools (NUT) at Home

Note that these instructions use offensive master/slave terminology because they are still necessary keywords in the NUT configuration files. There is work in progress to change this. I am going to use server and client whenever I can, but you can't avoid master/slave in upsd.users or upsmon.conf.

Given two UPS's:

And a Raspberry Pi, I'm setting up my home network and critical hardware to shutdown gracefully when the power fails.

@jpstroop
jpstroop / orient_image.sh
Last active May 22, 2018 14:14
Guess the orientation of an image using OCR and Spellcheck
#!/bin/bash
# Script takes a single argument, which is a path in an image file.
# NOTE: this file will be replaced with the version that this script deems to be 'correct'
file=$1
TMP="/tmp/pulfa/img_harvester/rotation-calc"
# Clean up if there are files from the last run
# (leaving them around is handy for debugging)
if [ -d $TMP ]; then
#!/bin/bash
for md_file in $(find . -name "*.md"); do
gsed -r -i -e 's/([A-z])\.\s{2,3}([A-Z])/\1. \2/g' $md_file
done
@jpstroop
jpstroop / map.json
Last active October 12, 2017 21:25
IIIF canvasMap proposal
{
"@context": "http://iiif.io/api/presentation/2/context.json",
"id": "https://plum.princeton.edu/concern/scanned_resources/pt722jw092/manifest",
"type": "sc:Manifest",
"label": [
"Reports of the Princeton University expeditions to Patagonia, 1896-1899 : J. B. Hatcher in charge"
],
"viewingHint": "paged",
"viewingDirection": "left-to-right",
"rendering": {
@jpstroop
jpstroop / unwatch_all.py
Last active August 22, 2021 12:22
Unwatch all Github repositories.
#!/usr/bin/env python
#
# Unwatch from all Github repositories. Note that it will only work with up to
# 100 repos at a time (pagination is not implemented), so you may need to run
# more than once.
#
# Depends:
# requests : http://docs.python-requests.org/en/master/
#
# Output (to stdout):
@jpstroop
jpstroop / beach_image_workflow_proposal.md
Last active January 9, 2017 16:57
Beach Image Workflow Idea

Deprecated. Moved here: https://docs.google.com/document/d/1GY9_CfvFb5WCFOoSQ54DwzoMKPXmh5UrBgBuN5QXjUg/edit#

Proposed Flow

  1. Talk to RBSC cat.
  2. Enhace EAD w/ item level data from TEI. Including pudl0123 IDs temporarily
  3. Use TEI to EAD mapping to reorg. images to match new EAD (item level) components
  4. Remove temporary pudl0123 IDs from new EAD components
  5. Generate new PULFA METS and load EAD
  6. Migration New PULFA METS to Plum - Make sure EAD component ID is in dc:replaces
  7. Map Plum manifest URIs back to TEI
@jpstroop
jpstroop / iiif_agg_disc_import.md
Created November 13, 2016 15:51
IIIF Discovery Strawperson

IIIF Aggregation, Discovery, and Import

Introduction

Audience and Scope

  • Carefully acknowledge somehow that this extends the scope of IIIF, but is at least controlled mission creep (i.e. similar to a controlled burn :-))

  • Use cases:

    • thematic registries and portals
  • ad-hoc reuse/remixing/mashups

@jpstroop
jpstroop / get_exif.py
Created October 23, 2016 16:19
Get EXIF, IPTC Metadata, etc. with Python & PIllow
from PIL import Image
from PIL.ExifTags import GPSTAGS
from PIL.ExifTags import TAGS
# Keys are listed here:
# https://github.com/python-pillow/Pillow/blob/master/PIL/ExifTags.py
def _map_key(k):
try:
return TAGS[k]
@jpstroop
jpstroop / kakadu_vs_opj_reduce.txt
Created October 15, 2016 18:29
Proof that OpenJPEG and Kakadu both round up when discarding resolution levels
$ kdu_expand -quiet -i 0001.jp2 -o 0001.bmp -reduce 0; identify 0001.bmp
0001.bmp BMP3 5906x7200 5906x7200+0+0 8-bit sRGB 127.6MB 0.120u 0:00.129
$ opj_decompress -i 0001.jp2 -o 0001.bmp -r 0; identify 0001.bmp
0001.bmp BMP3 5906x7200 5906x7200+0+0 8-bit sRGB 127.6MB 0.120u 0:00.129
$ kdu_expand -quiet -i 0001.jp2 -o 0001.bmp -reduce 1; identify 0001.bmp
0001.bmp BMP3 2953x3600 2953x3600+0+0 8-bit sRGB 31.9MB 0.030u 0:00.040
$ opj_decompress -i 0001.jp2 -o 0001.bmp -r 1; identify 0001.bmp
0001.bmp BMP3 2953x3600 2953x3600+0+0 8-bit sRGB 31.9MB 0.030u 0:00.040