Skip to content

Instantly share code, notes, and snippets.

@si14
si14 / dags.md
Last active October 23, 2015 14:55
  1. for "missing?" we often need to query database to check if an item exists. If predicates are truly independent, we will need to do the query again to return the item.
  2. "data flow" looks something like this (in Prismatic's Graph lib):
(def stats-graph
  {:n  (fnk [xs]   (count xs))
   :m  (fnk [xs n] (/ (sum identity xs) n))
   :m2 (fnk [xs n] (/ (sum #(* % %) xs) n))
   :v  (fnk [m m2] (- m2 (* m m)))})

webapp/OAuth2/REST API stack security checklist

OAuth2 (implicit flow)

  • response_type is a constant set for particular app on server (1)
  • redirect_uri, too (1)
  • "state" parameter is echoed by server and checked by client (1)
  • hash of "state" parameters is stored in LocalStorage and destroyed on receiving redirect (1)
  • "client_id" parameter is checked (after obtaining token, make a request to server to get "token_id" for this token and compare to existing one) (2, 3)
  • IP is saved for particular token on grant and checked on access

Keybase proof

I hereby claim:

  • I am si14 on github.
  • I am si14 (https://keybase.io/si14) on keybase.
  • I have a public key whose fingerprint is 9049 8ED9 BDEF 2C3F 9834 824F 810D 6E4E EDC8 5F24

To claim this, I am signing this object:

StreamUtil.zippingStream(WigParser.newParser().parse(sourcePaths[0]),
WigParser.newParser().parse(sourcePaths[1]),
StreamUtil.ZipPair::create)
.peek(StreamUtil.equalityForBoth(wigPair -> wigPair.first,
"wig files should have same structure"))
.filter(StreamUtil.predicateForBoth(wigPair -> {
final Chromosome chromosome = chromosomeMap.get(wigPair.first);
return chromosome != null && !chromosome.isMitochondrialChromosome();
}))
.forEach(StreamUtil.consumerForEach((pairLevel, pairCoverage) -> {
public static class CountedLogSumExp extends CountedCompleter<Double> {
final int lo;
final int hi;
final double[] array;
final int blockSize;
double sum;
double offset;
CountedLogSumExp[] siblings;
import org.apache.commons.math3.util.FastMath;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import java.util.Random;
import java.util.concurrent.*;
import java.util.stream.DoubleStream;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import java.util.Random;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;
import java.util.concurrent.TimeUnit;
import org.apache.commons.math3.util.FastMath;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import java.util.Random;
import java.util.concurrent.TimeUnit;
import java.util.function.DoubleUnaryOperator;

The code (full version here):

// ...
        unsortedArray = new String[arraySize];
        System.arraycopy(allStrings, 0, unsortedArray, 0, arraySize);
        toSearchIdx = arraySize / 2;

// ...