Skip to content

Instantly share code, notes, and snippets.

View zach-klippenstein's full-sized avatar

Zach Klippenstein zach-klippenstein

View GitHub Profile
@zach-klippenstein
zach-klippenstein / ClumpingImpls.sc
Last active August 29, 2015 13:59
Playing around with some different implementations of a clumping algorithm in Scala.
/*
This is my first attempt at implementing clumping – once with folding,
once with iterators. Clumping is what I've called grouping elements by
an arbitrary function on them, much like groupBy, but preserving their order.
e.g. [a,a,b,a,a,a].clump == [[a,a],[b],[a,a,a]]
I'm just getting into functional programming, so this might have a different name.
While the folding method is more "functionally" and concise, I'm not certain
it provides the same laziness as the iterator one.
I'm not sure exactly what calling view on an iterable does. I imagine it's unnecessary,
@zach-klippenstein
zach-klippenstein / Parallel Mergesort from Blocking Sources
Last active August 29, 2015 14:01
Algorithm for sorting lists of items from high-latency blocking sources.
Problem: N independent sources of elements that need to be sorted. Each source has an unknown length,
and reading the next element takes a long time. Here are some approaches to sorting this:
1. Basic, naïve mergesort:
if (lists.size > 2) {
merge_all(for (list1, list2 <- lists.grouped_by_2) {
yield merge(list1, list2)
}
} else {
yield min(list1.peek, list2.peek)

Keybase proof

I hereby claim:

  • I am zach-klippenstein on github.
  • I am zachklipp (https://keybase.io/zachklipp) on keybase.
  • I have a public key whose fingerprint is 01D0 C5AB 55E9 29A5 2337 E6CC 0EDD 53ED 8CE1 CD26

To claim this, I am signing this object:

@zach-klippenstein
zach-klippenstein / floatcomp_test.go
Last active August 29, 2015 14:09
Float Comparison Benchmark: Subtraction vs Multiplication
package main
import (
"math"
"math/rand"
"runtime"
"testing"
)
const DELTA_MULT = 10000000000
@zach-klippenstein
zach-klippenstein / source_bench_test.go
Last active August 29, 2015 14:12
Comparative benchmarks of various methods of providing RNG sources to concurrent goroutines.
package source_bench_test
import (
"github.com/stretchr/testify/require"
"math/rand"
"sync"
"testing"
)
// See https://golang.org/src/math/rand/rand.go
@zach-klippenstein
zach-klippenstein / FunctionalStack.kt
Created January 31, 2015 22:46
Example of a simple functional data structure in Kotlin.
package com.example.funcstack
import java.util.NoSuchElementException
public trait FunctionalStack<out T> {
public val size: Int
public fun pop(): Pair<T, FunctionalStack<T>>
}
/**
@zach-klippenstein
zach-klippenstein / git-edit.sh
Last active August 29, 2015 14:26
Shell script for amending commits on a feature branch.
#!/bin/zsh
if [ "$1" = '-h' ]; then
cat <<-EOF
Usage: git-edit <branch> [args-to-commit]
e.g. If your tree looks like this:
* cc3cd23 (HEAD -> feat1) Feature 1.2
* 53f56c1 Feature 1
* 08355e5 (master) Initial commit.
@zach-klippenstein
zach-klippenstein / complex-diff-csv.rb
Created August 11, 2009 23:04
Ugly-as-heck script for diffing two CSV files that differ in both number of rows and row content.
#!/usr/bin/ruby
#
# Ugly-as-heck script for comparing two CSV files whose rows have changed, and
# where rows were added to or removed from the second file. Traditional diff tools
# can't make the connection between these two types of changes, so show every line as having
# changed.
#
# Uses git and gitk.
require 'fileutils'
@zach-klippenstein
zach-klippenstein / gist:202673
Created October 6, 2009 01:25
Prints out a bunch of information about all files in the current directory and subdirectories, recursively (see comment header for more info)
#!/bin/bash
# by Zachary Klippenstein
#
# Prints out a bunch of information about all files in the current
# directory and subdirectories, recursively.
# Info includes:
# - filename
# - file type (as given by 'file' command)
# - file contents (prefixed by filename and line number in file, and for binary files, result of 'strings')
@zach-klippenstein
zach-klippenstein / kyle_newton.java
Created October 29, 2009 05:26
Various implementations of Netwon's method
public ResultPair solveNewton(double init, double epsilon)
{
int numIt = 1;
double root;
double xn;
double xnPlusOne;
double xnMinusOne;
xn = init;
xnPlusOne = xn - eval(xn) / getDeriv().eval(xn);