Skip to content

Instantly share code, notes, and snippets.

View gpiffault's full-sized avatar

Grégoire Piffault gpiffault

View GitHub Profile
@gpiffault
gpiffault / piecewise.js
Last active April 27, 2024 16:03
Javascript piecewise function factory
function Piecewise(xs, ys) {
return function(x) {
//bisect
var lo = 0, hi = xs.length - 1;
while (hi - lo > 1) {
var mid = (lo + hi) >> 1;
if (x < xs[mid]) hi = mid;
else lo = mid;
}
//project
@gpiffault
gpiffault / gtfs.py
Created May 16, 2014 15:24
Reader for zipped csv files (like GTFS)
class GTFSFile(object):
def __init__(self, file_path):
self.archive = zipfile.ZipFile(file_path)
def get_table(self, table_name):
return csv.DictReader(io.TextIOWrapper(self.archive.open(table_name), "utf-8"))
@gpiffault
gpiffault / ts_to_datetime.py
Created May 23, 2014 09:25
pytz: conversion of POSIX timestamp to python timezone-aware datetime
import pytz
def ts_to_datetime(ts, tz="UTC"):
utc_dt = datetime.datetime.utcfromtimestamp(ts).replace(tzinfo=pytz.utc)
tz = pytz.timezone(tz)
dt = tz.normalize(utc_dt.astimezone(tz))
return dt
# Reverse function is dt.timestamp()
@gpiffault
gpiffault / index.html
Created July 4, 2014 16:16
Map drawing
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css" />
<script src="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.js"></script>
<style type="text/css">
html, body, #map {
margin: 0;
height: 100%;
}
@gpiffault
gpiffault / canvas.html
Created November 28, 2014 10:20
Drawing semi-transparent blobs on canvas
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Canvas</title>
</head>
<body>
<canvas id="canvas"></canvas>
</body>
<script type="text/javascript">
@gpiffault
gpiffault / maps-directions.html
Created November 28, 2014 13:09
Google maps direction polylines
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
html, body, #map-canvas { height: 100%; margin: 0; padding: 0;}
</style>
<script type="text/javascript"
src="https://maps.googleapis.com/maps/api/js">
</script>
<script type="text/javascript">
@gpiffault
gpiffault / gradient.js
Last active February 11, 2024 22:25
Multi-stop color gradient (AMD module)
// Color interpolation
// Usage:
// var myGradient = Gradient([
// [50, "#9999ff"],
// [100, "#99ff99"],
// [150, "#ff9999"]
// ]);
// myGradient(75); // returns "#99cccc"
define([], function () {
@gpiffault
gpiffault / vanilla-xhr.js
Last active September 14, 2017 12:23
Vanilla xhr
function xhr(options, success) {
var r = new XMLHttpRequest();
r.open(options.method || "GET", options.url, true);
r.onreadystatechange = function () {
if (r.readyState != 4 || r.status != 200) return;
success(r.responseText, r);
};
r.send(options.data || null);
}
// ex: strftime("%Y-%m-%d %H:%M:%S")
function strftime(format, d) {
d = d || new Date()
function pad (v) { return ("0" + v).substr(-2, 2) }
var r = format.replace(/%Y/g, d.getFullYear())
r = r.replace(/%m/g, pad(d.getMonth() + 1))
r = r.replace(/%d/g, pad(d.getDate()))
r = r.replace(/%H/g, pad(d.getHours()))
r = r.replace(/%M/g, pad(d.getMinutes()))
r = r.replace(/%S/g, pad(d.getSeconds()))
/* eslint-disable-next-line */
export default ['Africa/Abidjan','Africa/Accra','Africa/Algiers','Africa/Bissau','Africa/Cairo','Africa/Casablanca','Africa/Ceuta','Africa/El_Aaiun','Africa/Johannesburg','Africa/Juba','Africa/Khartoum','Africa/Lagos','Africa/Maputo','Africa/Monrovia','Africa/Nairobi','Africa/Ndjamena','Africa/Tripoli','Africa/Tunis','Africa/Windhoek','America/Adak','America/Anchorage','America/Araguaina','America/Argentina/Buenos_Aires','America/Argentina/Catamarca','America/Argentina/Cordoba','America/Argentina/Jujuy','America/Argentina/La_Rioja','America/Argentina/Mendoza','America/Argentina/Rio_Gallegos','America/Argentina/Salta','America/Argentina/San_Juan','America/Argentina/San_Luis','America/Argentina/Tucuman','America/Argentina/Ushuaia','America/Asuncion','America/Atikokan','America/Bahia','America/Bahia_Banderas','America/Barbados','America/Belem','America/Belize','America/Blanc-Sablon','America/Boa_Vista','America/Bogota','America/Boise','America/Cambridge_Bay','America/Campo_Grande',