Skip to content

Instantly share code, notes, and snippets.

@arnehormann
arnehormann / must.go
Created September 23, 2013 10:58
usage example for reflect.MakeFunc: create panic-on-error wrappers which do not pass the error (in a comfortable but probably rather slow way)
import "reflect"
// assumption for fptr: func with error as last argument
func makeMust(fptr interface{}) {
must := func(in []reflect.Value) []reflect.Value {
if err := in[len(in)-1]; !err.IsNil() {
panic(err.Interface())
}
return in[:len(in)-1]
}
@arnehormann
arnehormann / set.go
Last active December 21, 2015 02:19
functional set variant in golang
package set
type Set interface {
Empty() bool
Size() int
Equal(t Set) bool
Subset(t Set) bool
Superset(t Set) bool
Union(t Set) Set
Intersection(t Set) Set
#!/bin/bash
# stop on errors and undeclared variables
set -e -u -o pipefail
err() {
echo "[$(date +'%Y-%m-%dT%H:%M:%S%z')]: $@" >&2
}
@arnehormann
arnehormann / shortcut-generator.hta
Created July 11, 2013 14:11
create a bunch of shortcuts to a program with the specified arguments (intended and great for putty with pageant)
<html style="padding: 0; margin: 0; width: 690; height: 480;"><head>
<hta:application id="oShortcutter" applicationname="Shortcutter" border="thin" caption="yes" contextmenu="no" scroll="no" showintaskbar="yes" singleinstance="yes" />
<title>Shortcut Generator</title>
<script language="VBScript">
'<![CDATA[
Option Explicit
On Error Resume Next
Sub SelectFolder
' For next value see http://msdn.microsoft.com/en-us/library/bb773205(VS.85).aspx
@arnehormann
arnehormann / ssl-email.sh
Last active April 20, 2016 11:52
create openssl certificates for ca, server and user (email); and sign them
#!/bin/bash
# crash on error exit codes and undefined variables
set -e -u
if [ "true" = "$TRACE" ]; then
# trace execution (+x to get rid of noise)
set -x
fi
@arnehormann
arnehormann / index.html
Created June 14, 2013 08:08
*reflect.StructField
<!DOCTYPE html>
<html><head><title>Go: '*reflect.StructField'</title><style>
html { background-color: #fafafa; }
div[data-kind] {
box-sizing: border-box;
position: relative;
/* font */
font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
font-weight: 300;
@arnehormann
arnehormann / dirtysql.go
Last active December 18, 2015 10:09
Hit the dangerous wobbly ground running: Quick&dirty up to speed with go database/sql
type must struct {
db *sql.DB
stmt *sql.Stmt
rows *sql.Rows
err error
closers []io.Closer
}
func Open(dbdriver, dsn string) *must {
m := &must{}
@arnehormann
arnehormann / truthtable.js
Created March 14, 2013 15:29
Create a truth table enumerating all possible parameter combinations for a function taking booleans. Arguments: target function, number of boolean arguments, string for true, string for false.
function truthTable(fun, bits, t, f){
var vars = bits || 4
, max = 1 << vars
, tStr = t || ' T '
, fStr = f || ' F '
, i, j, str, arr, set, res;
for (i = 0; i < max; i++) {
str = '';
arr = [];
for (j = vars - 1; j >= 0; j--) {
@arnehormann
arnehormann / liveedit.html
Created March 11, 2013 11:22
CSS live editing test
<html><head><meta charset="utf-8"><title>CSS live editing test</title>
<!-- credit: http://www.campaul.net/blog/2013/01/29/stupid-browser-tricks-live-editing-styles/ -->
<style type="text/css" style="display: none;">
/* show css for a very tight feedback loop */
html { position: absolute; width: 100%; }
head, body { display: block; position: absolute; }
head { width: 40%; right: 0; background: #eee; }
body { width: 60%; left: 0; }
style { display: block; white-space: pre }
</style><style type="text/css" contenteditable="plaintext-only">/* Edit CSS */
@arnehormann
arnehormann / gauges.html
Last active December 14, 2015 11:49
A charting experiment
<html><head><meta charset="utf-8"><title>Donuts</title>
<!-- This is a modified version of the one found at http://www.larentis.eu/donuts/ -->
<style type="text/css">
.donut { font-size: 33px; }
.donut-big { font-size: 62px; }
.donut-small { font-size: 17px; }
.donut {
position: relative;
display: inline-block;