Skip to content

Instantly share code, notes, and snippets.

View exogen's full-sized avatar

Brian Beck exogen

View GitHub Profile
@exogen
exogen / uber.py
Last active November 16, 2023 15:55
Tally your Uber trips from a Gmail export
#!/usr/bin/env python3
#
# Usage: python3 uber.py ~/Downloads/Takeout/Mail/Uber.mbox
#
# Dependencies: Python 3.4+
#
# How to get the .mbox export:
#
# In Gmail, create a filter that applies the label "Uber" to emails matching:
#
@exogen
exogen / parse-icu.js
Created October 26, 2020 20:11
Tiny ICU message syntax parser
/**
* Parses ICU message syntax into an AST.
* Supports these features:
* - Apostrophe escapes (uses DOUBLE_OPTIONAL mode).
* - {simple} substitution.
* - {var, type} substitution.
* - {var, type, format} substitution, where format can contain complex nesting
* of additional ICU messages, for example:
* “I’ve invited {n, plural, offset:1
* =0 {nobody!}
@exogen
exogen / watch
Created September 15, 2011 23:22
Generic file watcher script.
#!/bin/bash
#
# Author: Brian Beck <exogen@gmail.com>
# Usage: watch PATH COMMAND...
#
# This script watches PATH and runs COMMAND whenever PATH or a descendent
# of PATH is modified. COMMAND is everything after the first argument.
#
# If PATH is "-", then the list of paths comes from standard input.
#
// This is based on some transpiled Babel code causing the `default` export
// to be undefined. If you look at the ultimate code that ends up in the Next.js
// bundle, `Object` method references are changed to strange `@babel/runtime`
// references, which seems to potentially cause a circular import (?) resulting
// in it being undefined.
exports.__esModule = true;
exports.default = DebugProvider;
exports.DebugContext = void 0;
var _react = _interopRequireWildcard(require("react"));
// Default mixin settings
@spinner-default-color: #000;
@spinner-default-size: 16px;
// Opacity, spacing, speed
@spinner-opacity: 70%; // Opacity of the brightest dot
@spinner-decay: 0.7; // Opacity of each dot compared to the previous
@spinner-spacing: 1; // Distance multiplier between dots
@spinner-duration: 1s; // Time it takes for one revolution
@exogen
exogen / diff-create-react-app.sh
Last active November 22, 2017 03:19
Show divergence from create-react-app as a diff.
#!/usr/bin/env bash
#
# Determine divergence from create-react-app!
# Use this if you've ejected from create-react-app and want to see how its
# latest output would differ in key areas (package.json, config, scripts).
#
# - Assumes you can run create-react-app, so make sure it's installed.
# - Only shows files you've modified or removed from create-react-app.
# - Runs $FORMAT_COMMAND below on the create-react-app directory so formatting
# differences don't show up. Use something like Prettier, eslint --fix, etc.
@exogen
exogen / graphql-server.js
Last active October 26, 2017 18:06
Simple GraphQL server
const express = require('express')
const graphqlHTTP = require('express-graphql')
const makeExecutableSchema = require('graphql-tools').makeExecutableSchema
const schema = makeExecutableSchema({
typeDefs: `
type Query {
user: User
}
@exogen
exogen / fix-svg-height.js
Created September 27, 2016 15:15
Fix SVG heights
/*
* WebKit (possibly others; Firefox looks fine) does a bad job of scaling an
* SVG's aspect ratio such that its contents fill the extent of the space
* horizontally. If you're letting the browser determine the dimensions of your
* SVG, including the aspect ratio (e.g. by setting a percentage width and using
* `height: auto`), then you probably want to use `preserveAspectRatio="none"`
* in your SVG for the best results. But if you can't do that, you can at least
* bump up the SVG's height just enough for it to fill the `img` horizontally,
* letting the browser add the leftover padding to the top and bottom rather
* than the sides.
@exogen
exogen / DefaultKeyBinding.dict
Last active June 7, 2016 21:00
Fix Mac smart quote shortcuts
// Put this file at ~/Library/KeyBindings/DefaultKeyBinding.dict
// You may need to run: mkdir ~/Library/KeyBindings
{
"~[" = (insertText:, "\U2018"); // Option-[ inserts left single quote
"~]" = (insertText:, "\U2019"); // Option-] inserts right single quote
"~{" = (insertText:, "\U201c"); // Option-Shift-[ inserts left double quote
"~}" = (insertText:, "\U201d"); // Option-Shift-] inserts right double quote
}
@exogen
exogen / rgb2hex
Created October 13, 2011 21:23
Convert RGB values to hex and copy the result to the clipboard (Mac)
#!/bin/bash
# rgb2hex -- Convert RGB values to hex and copy the result to the clipboard (Mac)
# usage: rgb2hex [r] [g] [b]
hex=$(python -c "print '#%02x%02x%02x' % (${1:-0}, ${2:-0}, ${3:-0})")
echo -n $hex | pbcopy
echo $hex