Skip to content

Instantly share code, notes, and snippets.

Avatar

Tyler Freeman odbol

View GitHub Profile
@odbol
odbol / PendingRequest.ts
Created Aug 4, 2022
PendingRequest: a way to implement Promise-based APIs across process boundaries like iframes or ServiceWorkers.
View PendingRequest.ts
import {Deferred} from './Deferred.js'; // See https://gist.github.com/odbol/1a98cf6186caaace78cae9e7a249c992
/**
* A PendingRequest.
*/
export interface PendingRequest<T> {
/**
* Id of the request for resolving/rejecting later.
*/
requestId: number;
@odbol
odbol / Deferred.ts
Created Aug 4, 2022
Deferred: a Promise that you can resolve or reject after the fact.
View Deferred.ts
/**
* A Promise that you can resolve or reject after the fact.
*/
export class Deferred<T> {
private _resolve?: (result: T) => void;
private _reject?: (error: Error) => void;
promise: Promise<T>;
constructor() {
this.promise = new Promise((resolve, reject) => {
@odbol
odbol / AnimationUtils.ts
Created Jul 15, 2022
Collection of mathy math functions for mathing and animating
View AnimationUtils.ts
export type float = number;
/**
* Interpolate a value with specified extrema, to a new value between new extrema.
*
* @param value the current value
* @param inputMin minimum the input value can reach
* @param inputMax maximum the input value can reach
* @param outputMin minimum the output value can reach
* @param outputMax maximum the output value can reach
@odbol
odbol / CsvCredentialsProvider.mjs
Created Apr 28, 2022
Node.js script to read AWS Credentials from the CVS file that the AWS Console provides you. Baffling that they don't offer this by default...
View CsvCredentialsProvider.mjs
import {promises as fs} from 'fs';
import os from 'os';
import { parse } from 'csv-parse/sync';
/**
* Creates a credential provider to pass to S3Client which reads a credentials
* CSV downloaded from the AWS console.
*
* @param csvFile string path of the CSV file from AWS console.
* @returns a Provider<Credentials> to give to S3Client as the credentials option.
View gist:9df51f6bb323c979efe7b8b6310a557a
I am attesting that this GitHub handle odbol is linked to the Tezos account tz1cdfM7UEtbMt6fMUyGJ4sf5UVNMHEwnEGZ for tzprofiles
sig:edsigtY7ADXz4xbHrP1P6pQx9fJiZ9piF9bw1fTBhVfKLT1AaZp5X6dfZSey3RirZc1NGxb3spS9eqXGKvhe7fS4zVdgwfXa5DE
@odbol
odbol / RxFirebaseUtils.kt
Created Aug 3, 2021
Utilities for converting Firebase results to RxJava Observables
View RxFirebaseUtils.kt
package com.odbol.rx
import com.google.android.gms.tasks.Task
import com.google.firebase.firestore.DocumentReference
import com.google.firebase.firestore.DocumentSnapshot
import com.google.firebase.firestore.ListenerRegistration
import io.reactivex.Emitter
import io.reactivex.Observable
import io.reactivex.Single
import io.reactivex.SingleEmitter
@odbol
odbol / TimePreference.java
Last active May 10, 2021 — forked from nickaknudson/TimePreference.java
TimePicker DialogPreference for Android - fixed to respect user's 24 hour formatting preferences
View TimePreference.java
package com.xxx.xxx.preference;
package com.odbol.android;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import android.content.Context;
View keybase.md

Keybase proof

I hereby claim:

  • I am odbol on github.
  • I am odbol (https://keybase.io/odbol) on keybase.
  • I have a public key ASCGfcow9kaIAW9XZ6jpjOlbnPZLbHm7arhB8gKESG9pHAo

To claim this, I am signing this object:

@odbol
odbol / AnimationUtils.java
Last active Dec 4, 2020
Various utilities for animation and graphics.
View AnimationUtils.java
package com.odbol.utils;
/**
* Various utilities for animation and graphics.
*/
public class AnimationUtils {
/**
* Interpolate a value with specified extrema, to a new value between new extrema.
*
@odbol
odbol / Authentication.js
Created Feb 21, 2020
Firebase login: the easiest way, with promises
View Authentication.js
/**
* Handles logging in to Firebase.
*/
class Authentication {
authPromise;
constructor() {
this.authPromise = new Promise((resolve, reject) => {
firebase.auth().onAuthStateChanged(function(user) {
if (user) {