Skip to content

Instantly share code, notes, and snippets.

View brayhoward's full-sized avatar

Brandon R. Howard brayhoward

View GitHub Profile
@brayhoward
brayhoward / getStatusBarHeight.ts
Last active February 10, 2023 07:32
A react hook for getting status bar height in ReactNative that works with iOS and android. This accounts for hotspot and GPS banners
import { useState, useEffect } from "react";
import { NativeModules, StatusBarIOS, Platform, StatusBar } from "react-native";
import get from "lodash/get";
const { StatusBarManager } = NativeModules;
export default function useStatusBarHeight() {
// Initialize w/ currentHeight b/c StatusBar.currentHeight works properly on android on Android
const [height, setHeight] = useState(StatusBar.currentHeight || 0);
@brayhoward
brayhoward / time_convert.ex
Created January 17, 2018 02:54
Elixir time conversion module for converting milliseconds or seconds to a readable format.
defmodule TimeConvert do
@minute 60
@hour @minute*60
@day @hour*24
@week @day*7
@divisor [@week, @day, @hour, @minute, 1]
def to_str(time) do
to_str(time, :ms)
end
@brayhoward
brayhoward / convert_aax_files.md
Last active May 8, 2021 21:20
Directions for converting Audible audiobook files, .aax, to .m4a files
# LINKED
txtblk='[\e[0;30m]' # Black
txtred='\[\e[0;31m\]' # Red
txtgrn='\[\e[0;32m\]' # Green
txtylw='\[\e[0;33m\]' # Yellow
txtblu='\[\e[0;34m\]' # Blue
txtpur='\[\e[0;35m\]' # Purple
txtcyn='\[\e[0;36m\]' # Cyan
txtwht='\[\e[0;37m\]' # White
if [ $UID -eq 0 ]; then NCOLOR="red"; else NCOLOR="green"; fi
local return_code="%(?..%{$fg[red]%}%? ↵%{$reset_color%})"
# color vars
eval gray='$FG[237]'
eval orange='$FG[214]'
eval yellow='$fg[yellow]'
eval red='$fg[red]'
eval cyan='$fg[cyan]'
eval magenta='$fg[magenta]'
@brayhoward
brayhoward / globals.d.ts
Last active August 14, 2020 19:20
Typescript utility types. Mostly more descriptive aliases for the any type
type IFixMe = any;
type IToDo = any;
type IInexpressible = any;
type INotWorthIt = any;
type IFuckIt = any;
// When the library you are consuming is fucked up
type IBadTypings = any;
type IAnyFields = { [field: string]: any };
type IWithAnyFields<T> = T & IAnyFields;
@brayhoward
brayhoward / Correct_GnuPG_Permission.sh
Created July 28, 2020 22:51 — forked from oseme-techguy/Correct_GnuPG_Permission.sh
This fixes the " gpg: WARNING: unsafe permissions on homedir '/home/path/to/user/.gnupg' " error while using Gnupg .
#!/usr/bin/env bash
# To fix the " gpg: WARNING: unsafe permissions on homedir '/home/path/to/user/.gnupg' " error
# Make sure that the .gnupg directory and its contents is accessibile by your user.
chown -R $(whoami) ~/.gnupg/
# Also correct the permissions and access rights on the directory
chmod 600 ~/.gnupg/*
chmod 700 ~/.gnupg
@brayhoward
brayhoward / getLast.ts
Created March 1, 2020 22:18
Example of using Typescript keyof operator
interface RecursiveArray<T> extends Array<T | RecursiveArray<T>> {}
function getLast<O extends object, K extends keyof O>(
mapOrList: O | RecursiveArray<O>,
key: K
): O[K] | null {
if (!mapOrList) return null;
if (Array.isArray(mapOrList)) {
return getLast(mapOrList.reverse().find(m => !!getLast(m, key))!, key);
@brayhoward
brayhoward / useAttentionWithin.ts
Created June 27, 2019 16:55
A React hook for determining whether or not a section of DOM still has the users attention. It's like clickAway logic on steroids
import { useState, useEffect, RefObject } from "react";
export default function useAttentionWithin(ref: RefObject<HTMLElement>) {
const [attentionWithin, setAttentionWithin] = useState(false);
function handleAttentionLeave({ target }: Event) {
const targetIsWithin = !!(
ref.current && ref.current.contains(target as Node)
);
@brayhoward
brayhoward / iterm2.md
Created June 5, 2018 14:18 — forked from squarism/iterm2.md
iterm2 cheatsheet

Tabs and Windows

Function Shortcut
Fullscreen + Enter
Previous Tab + Left Arrow
Next Tab + Right Arrow
Go to Tab + Number
Go to Window + Option + Number
Go to Split Pane by Direction + Option + Arrow