Skip to content

Instantly share code, notes, and snippets.

View willjobs's full-sized avatar

Will Jobs willjobs

View GitHub Profile
@willjobs
willjobs / gpx_merge.py
Last active January 27, 2021 22:05
Merge (and possibly rename) GPX files
########
# This code is useful for combining many GPX files, each with a single <trk>, into
# a single GPX file containing one <trk> that has one <trkseg> per input GPX file.
#
# This is necessary for animating GPX files using GPX Animator: https://gpx-animator.app/
########
import shutil
import glob
from datetime import datetime

Software Preferences (and why)

This is meant to be an ongoing list of software alternatives I've evaluated, the pros and cons of each, and which I ultimately favored. It's mostly meant to remind me why I did or didn't switch so that I don't waste time re-evaluating in the future when I get annoyed by a bug or UI issue in the one that I chose. In case this helps others, I've posted it here too.

GoodNotes vs Notability

Winner: GoodNotes, for now

GoodNotes
@willjobs
willjobs / Extract_PDF.py
Last active March 27, 2020 20:21
Extract PDF - Python script to extract pages of PDF into separate files
import os
from PyPDF2 import PdfFileReader, PdfFileWriter
orig = input("enter path to file:\n")
pages_at_a_time = int(input('how many pages per file?\n'))
path, filename = os.path.split(orig)
path += '\\split'
filename = filename[:-4]
@willjobs
willjobs / python_subdir_import.py
Last active January 31, 2021 02:23
Python Relative Imports
# allows importing of ModuleB from ModuleA within the same subdirectory, when the code is run from a parent directory
# see https://stackoverflow.com/a/49375740/1102199
import os
import sys
sys.path.append(os.path.dirname(os.path.realpath(__file__)))
@willjobs
willjobs / ynab-google-sheets.js
Last active June 2, 2023 06:16 — forked from notself/ynab-google-sheets.js
Revisions to the original gist to add columns, show split subtransactions on multiple rows by default, fix time discrepancies, and add an indicator of the last data pull
function YNABAccounts(accessToken, budgetId) {
const accounts = _getBudgetAccounts(accessToken, budgetId);
if(accounts == null) {
return null;
}
const columns = ["Name", "Type", "Budget", "Closed", "Balance"];
const rows = accounts.map(function (acc) {
return [
@willjobs
willjobs / Excel Comparison.txt
Last active January 31, 2021 02:22
Custom Excel Functions to compare two strings
Public Function countDifferences(str1 As String, str2 As String) As Integer
Dim i As Integer
If Len(str1) <> Len(str2) Then
countDifferences = -1
Exit Function
End If
countDifferences = 0
For i = 1 To Len(str1)
If Mid(str1, i, 1) <> Mid(str2, i, 1) Then
@willjobs
willjobs / magoosh_gre_time.js
Created November 29, 2017 08:10
JS code to summarize the amount of video content on the Magoosh GRE site (https://gre.magoosh.com/lessons)
overall_sum = 0;
$('.thin.list-unstyled.lesson-list-condensed').each(function(idx, el) {
sum = 0;
$(el).find('.lesson-item').each(
function(idx2, inner_el) {
time = $(inner_el).find('.lesson-item-subtitle').text();
time = time.split(':');
if(time.length > 1) {
@willjobs
willjobs / getMonth.gs
Created October 11, 2017 05:24
Google Sheets custom function to get month name (either full or 3-character abbreviation), given an integer
function getMonthText(val, short) {
if(val !== parseInt(val,10)) {
return "";
}
if(val < 1 || val > 12) {
return "";
}
var x = "";
switch(val) {
case 1:
@willjobs
willjobs / wifi-passwords.ps1
Created October 2, 2017 03:33
PowerShell script to show all wifi passwords saved in Windows
(netsh wlan show profiles) | Select-String "\:(.+)$" | %{$name=$_.Matches.Groups[1].Value.Trim(); $_} | %{(netsh wlan show profile name="$name" key=clear)} | Select-String "Key Content\W+\:(.+)$" | %{$pass=$_.Matches.Groups[1].Value.Trim(); $_} | %{[PSCustomObject]@{ PROFILE_NAME=$name;PASSWORD=$pass }} | Format-Table -AutoSize
@willjobs
willjobs / google-sumdollars.js
Created October 2, 2017 03:11
Custom function for Google sheets to sum all of the dollar amounts written in notes in a given cell. If given a range of cells, will calculate the sums for each cell independently and output them below the cell with the formula.
function sumdollars(input) {
if(input.map) {
return input.map(sumdollars);
} else {
if(input.length === 0) {return 0;}
if(typeof input === 'number') {return input;}
var strArr = input.split('$').slice(1);
var mysum = 0;
for(i=0; i < strArr.length; i++) {
mysum += parseFloat(strArr[i].split(/[^0-9\.]+/)[0]);