Skip to content

Instantly share code, notes, and snippets.

@kaja47
kaja47 / phash.go
Last active April 9, 2021 19:53
Perceptual hashing + locality-sensitive hashing example
package main
import (
"fmt"
"image"
"image/color"
"os"
"math"
"path/filepath"
_ "image/gif"
@kaja47
kaja47 / RadixQuicksort.scala
Created April 4, 2016 22:01
Three-way radix quicksort
import java.util.Arrays
// Three-way radix quicksort aka Multi-key quicksort
//
// Fast Algorithms for Sorting and Searching Strings
// http://www.cs.princeton.edu/~rs/strings/paper.pdf
object RadixQuicksort {
def sort(arr: Array[String]) =
@kaja47
kaja47 / XMLSW.scala
Created August 27, 2018 03:19
nicer javax.xml.stream.XMLStreamWriter
object XMLSW {
private val f = XMLOutputFactory.newInstance
def document(encoding: String = "utf-8", version: String = "1.0")(body: XMLSW => Unit) = {
val out = new StringWriter()
val w = f.createXMLStreamWriter(out)
val ww = new XMLSW(w)
ww.document(encoding, version)(body)
w.flush()
w.close()
@kaja47
kaja47 / gist:f1804142577495beae13041c9d9094d8
Last active February 15, 2018 18:44
reasonable replaceAll
import scala.util.matching.Regex
import java.util.regex.Matcher
def replaceAllByString(r: Regex, s: String, f: Matcher => String) = {
val m = r.pattern.matcher(s)
m.reset()
var lastAppendPos = 0
var result = m.find()
if (result) {
def parseLine(l: String) = {
def march(l: String, pos: Int, ch: Char): Int = {
var i = pos; while (i < l.length) {
if (l.charAt(i) == ch) return i
i += 1
}
sys.error("")
}
def marchUntilStringEnds(l: String, pos: Int): Int = {
@kaja47
kaja47 / gist:4407844
Created December 29, 2012 16:19
React.PHP promise timeout
<?php
use React\Promise\Deferred;
function timeout($time, $promise, $loop) {
$defer = new Deferred;
$r = $defer->resolver();
$sig = $loop->addTimer($time, function() use($r) {
$r->reject('timeout');
});
@kaja47
kaja47 / regex-api-is-really-intuitive.scala
Last active June 28, 2017 19:46
scala.util.matching.Regex.replaceAll
val matchAll = new Regex(".*")
matchAll.replaceAllIn("I have no money", m => m.matched)
// I have no money
matchAll.replaceAllIn("I have $0", m => m.matched)
// I have I have $0
matchAll.replaceAllIn("I have $1", m => m.matched)
// java.lang.IndexOutOfBoundsException: No group 1
@kaja47
kaja47 / parallelRadixsort.d
Last active June 6, 2017 21:10
parallel radix sort
import std.range;
import std.parallelism;
import core.atomic;
import gcc.builtins;
T[] parallelRadixsort(T)(T[] arr, T[] tmparr) {
assert(arr.length == tmparr.length, "lengths");
alias Histo = int[256];
alias Histo4 = int[256][T.sizeof];
@kaja47
kaja47 / radix-sort.d
Last active May 27, 2017 14:08
radix sort in D
T[] radixsort(T)(T[] arr, T[] tmparr) {
assert(arr.length == tmparr.length);
int[256][T.sizeof] counts;
foreach (v; arr) {
foreach (b; 0 .. T.sizeof) {
uint c = (v >> (b * 8)) & 0xff;
counts[b][c] += 1;
}
@kaja47
kaja47 / gist:31e741552085437dc367
Last active December 31, 2016 10:22
soon in PHP 7
<?php
// really really fast loop (0.008s)
$arr = range(1, pow(2, 24)+1);
for ($i = 1; $i < 200000; $i++) {
unset($arr[$i]);
$arr[] = 1;
}