Skip to content

Instantly share code, notes, and snippets.

View jsumners's full-sized avatar

James Sumners jsumners

View GitHub Profile
@jsumners
jsumners / index.mjs
Created May 5, 2022 11:32
Unsub GitHub org notifications
import dotenv from "dotenv";
dotenv.config();
const ORG = process.env.ORG;
const GITHUB_TOKEN = process.env.GITHUB_TOKEN;
import { Client } from "undici";
const client = new Client("https://api.github.com");
const headers = {
@jsumners
jsumners / walk.mjs
Created November 18, 2021 15:41
Walk a Node project's dependency tree and list the dependencies and their versions
import fs from 'fs/promises';
import treeify from 'treeify';
const result = await readModDir('.');
console.log(treeify.asTree(result, true));
async function readModDir(modDirPath) {
const dirEntries = await fs.readdir(new URL(modDirPath, import.meta.url));
const hasNodeModules = dirEntries.some(entry => entry === 'node_modules');
const pkgSrc = await fs.readFile(new URL(`${modDirPath}/package.json`, import.meta.url));
#!/bin/bash
if [ ! -f package.json ]; then
# Default to npm regardless of missing package file.
echo "npm"
exit 0
fi
NODE_VERSION=$(node --version)
NODE_VERSION="${NODE_VERSION%%\.*}"
@jsumners
jsumners / Readme.md
Created October 24, 2021 13:18
Retrieve tabs from iOS Safari backup
  1. From a backup of the iOS device, extract /HomeDomain/Library/Safari/BrowserState.db to a local directory
  2. Place index.js and package.json in the same local directory
  3. npm install
  4. node index.js > lost_ios_safari_tabs.csv

Note: these instructions were created using an iMazing backup.

@jsumners
jsumners / readme.md
Last active October 11, 2021 15:10
Backup disk over ssh
  1. Boot host to be backed up with a rescue image, e.g. SystemRescueCD.
  2. Connect to destination host: ssh -L 8000:localhost:9000 destination.example.com
  3. On destination host: socat -u TCP4-LISTEN:9000,reuseaddr,fork OPEN:/tmp/backup.img.bz2,create,append
  4. On host to be backed up: dd if=/dev/sda | pv | bzip2 -9 | nc localhost 8000

Notes:

  1. socat installed on destination host
  2. /dev/sda is whatever disk is to be imaged and sent to remote host
@jsumners
jsumners / readme.md
Created March 3, 2021 12:54
Start new PR with an existing PR as a base

Ocassionally, someone will start a pull request and, for various reason, not see it through. Later, someone else may wish to finish that work. Even though the original author was unable to finish their work, we should still include their efforts in our project's history. To do so, the person wishing to finish the original pull request should start their new pull request using the original as the base.

The simplest workflow to accomplish this is:

$ # For the project on GitHub to your account and then:
$ git clone 
@jsumners
jsumners / no-wip.yml
Created September 23, 2020 13:28
No WIP PR merges
name: "No WIP PR Title"
on:
pull_request_target:
types:
- opened
- edited
- synchronize
jobs:
@jsumners
jsumners / bar.js
Created April 21, 2020 16:04
self-ref testing
// `lib/bar.js`
module.exports = 'bar'
@jsumners
jsumners / bar.js
Created April 21, 2020 15:55
self-ref testing
// `lib/bar.js`
module.exports = 'bar'
@jsumners
jsumners / async-await-result-pattern.js
Created June 28, 2018 16:28
A simple pattern for working with async/await
async function doFoo () {
let bar
try {
bar = await something_that_can_throw('a value')
} catch (error) {
return {error}
}
return {value: bar}
}