Skip to content

Instantly share code, notes, and snippets.

@ZJONSSON
ZJONSSON / lambda.js
Created Jan 22, 2019
CircleCI coverage lambda
View lambda.js
const Promise = require('bluebird');
const request = require('request');
const requestAsync = Promise.promisify(request);
const USER = process.env.GITHUB_USER;
exports.handler = async (event, context) => {
try {
if (!USER) throw new Error('GITHUB_USER env missing');
const module = event.pathParameters.module;
@ZJONSSON
ZJONSSON / Dockerfile
Created Sep 18, 2017
scipy-notebook with rasterio
View Dockerfile
FROM jupyter/scipy-notebook
USER root
RUN apt-get update
RUN apt-get -y install software-properties-common
RUN apt-get -y install apt-utils
RUN conda install gdal -y
USER jovyan
RUN pip install rasterio
View gist:6fc452a19facae4857d0

Client-side SSL

For excessively paranoid client authentication.

Using self-signed certificate.

Create a Certificate Authority root (which represents this server)

Organization & Common Name: Some human identifier for this server CA.

openssl genrsa -des3 -out ca.key 4096
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
@ZJONSSON
ZJONSSON / app.js
Last active Aug 29, 2015
Happy Birthday
View app.js
function encode64(data) {
var BASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
var PAD = '=';
var ret = '';
var leftchar = 0;
var leftbits = 0;
for (var i = 0; i < data.length; i++) {
leftchar = (leftchar << 8) | data[i];
leftbits += 8;
while (leftbits >= 6) {
@ZJONSSON
ZJONSSON / README.md
Last active Aug 29, 2015
Optimal denominations
View README.md

This small script uses combinatory analysis to figure out the optimal denominations for given number of possible coins to minimize the coins required to produce any amount between 1 cent and 1 dollar. The candidate set of denominations is reduced to keep the combinatory possibilities within reason.

@ZJONSSON
ZJONSSON / arb.js
Last active May 2, 2020
Bitcoin Arbitrage (extension)
View arb.js
// Get all k-combinations from array
function combinations(arr, k){
if (k==1) return arr;
var ret = [];
arr.forEach(function(d,i) {
combinations(arr.slice(i+1, arr.length), k-1)
.forEach(function(sub) {
var next = [].concat(sub);
next.unshift(d);
ret.push( next );
@ZJONSSON
ZJONSSON / arb.js
Last active Jan 1, 2016
Bitcoin Arbitrage - Priceonomics
View arb.js
// Get all possible states for a k length array
function states(k) {
if (k==1) return [0,1];
var ret = [];
states(k-1).forEach(function(d) {
ret.push([0].concat(d));
ret.push([1].concat(d));
});
return ret;
}
@ZJONSSON
ZJONSSON / index.html
Last active Jan 22, 2020
New York Traffic - Live
View index.html
<!DOCTYPE html>
<meta charset="utf-8">
<body>
<a style="font-size:10px" href="http://nyctmc.org/">Source: nyctmc.org</a><br>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script>
var cams = [252,263,644,494,200,489,488,486,485,484,487,261,251,102,491,258,497,400,203,430,431,290,429,428,432,305,466,299,465,446,448,304,401,447,440,439,444,443,441,355,354,352,350,349,468,469,455,424,425,427,281,551,335,116,434,550,105,106,285,286,438,337,194,348,548,538,547,530,524,536,523,527,526,517,532,535,539,529,528,521,531,537,525,519,533,318,325,324,339,340,445,464,496,341,178,143,166,442,643,642,641,419,329,330,420,421,426,202,201,635,481,127,108,269,268,266,609,509,508,505,504,503,506,502,510,279,280,140,163,603,604,605,606,611,459,457,458,453,500,495,175,173,188,247,615,616,450,483,482,303,302,294,182,157,129,264,570,571,572,555,560,562,564,565,566,563,567,556,569,568,558,573,561,557,191,296,297,467,470,475,111,184,386,397,399,273,613,614,612,122,187,289,186,473,309,492,316,3
@ZJONSSON
ZJONSSON / index.html
Last active Dec 18, 2015
Nearest Citibike
View index.html
<!DOCTYPE HTML>
<style>
body {font-family: Verdana, Geneva, sans-serif;font-size:14px;}
th {font-weight:bold;text-align:left;}
td,th {padding-left:5px;}
</style>
<body>
<script>
var data,pos,limit=10;
@ZJONSSON
ZJONSSON / adaptor.js
Last active Dec 18, 2015
Minimalistic Promises A+ framework (without setTimeout/nextTick. 2 of 231 test fail)
View adaptor.js
var promin = require("promin");
module.exports.adaptor = {
fulfilled: function(value) { return promin().set(true, [value]); },
rejected: function(reason) { return promin().set(false, [reason]); },
pending: function() {
var p = promin();
return {
promise: p,
fulfill: function(value) {