- https://itunes.apple.com/us/app/lumino-city/id958604518
- https://itunes.apple.com/us/app/prune/id972319818
- https://itunes.apple.com/us/app/causality/id928945016
- https://itunes.apple.com/us/app/kami-2/id1133161444
- https://itunes.apple.com/us/app/connectly/id1014519980
- https://itunes.apple.com/us/app/altos-adventure/id950812012
- https://itunes.apple.com/us/app/love-you-to-bits/id941057494
- https://itunes.apple.com/us/app/alice-in-wordland/id1196607505
- https://itunes.apple.com/us/app/never-alone-ki-edition/id1065127755
- https://itunes.apple.com/us/app/i-love-hue/id1081075274
View tee.js
function tee(asyncIterable) { | |
let source = asyncIterable[Symbol.asyncIterator]() | |
return [[], []].map((buffer, i, buffers) => ({ | |
async next() { | |
if (0 in buffer) return buffer.shift() | |
let item = await source.next() | |
if (!item.done) buffers[1 - i].push(item) |
View iterator.js
// Example usage: | |
// | |
// void async function() { | |
// let [clicks, onclick] = iterator() | |
// document.querySelector('button').addEventListener('click', onclick) | |
// for await (let click of clicks) console.log(click) | |
// }() | |
export default function iterator() { | |
let done = false |
View s3-etag.js
const {createReadStream} = require('fs') | |
const {createHash} = require('crypto') | |
module.exports = (path, chunkSize = 5242880) => { | |
return new Promise((resolve, reject) => { | |
const hashes = [] | |
const options = {highWaterMark: chunkSize} | |
const rs = createReadStream(path, options) | |
rs.on('error', reject) |
View deploy.sh
#!/bin/sh | |
aws cloudformation deploy \ | |
--template-file stack.yaml \ | |
--stack-name edge-lambda-test \ | |
--capabilities CAPABILITY_IAM \ | |
--parameter-overrides Nonce=$RANDOM |
View template.yaml
AWSTemplateFormatVersion: '2010-09-09' | |
Transform: AWS::Serverless-2016-10-31 | |
Resources: | |
GetFunction: | |
Type: AWS::Serverless::Function | |
Properties: | |
Handler: index.handler | |
Runtime: nodejs6.10 | |
CodeUri: index.js | |
Events: |
View recommendations.md
View jabberwocky.txt
'Twas brillig, and the slithy toves | |
Did gyre and gimble in the wabe: | |
All mimsy were the borogoves, | |
And the mome raths outgrabe. | |
"Beware the Jabberwock, my son! | |
The jaws that bite, the claws that catch! | |
Beware the Jubjub bird, and shun | |
The frumious Bandersnatch!" | |
So rested he by the Tumtum tree, | |
And stood awhile in thought. |
View handler.js
'use strict' | |
// for context, see https://twitter.com/jedschmidt/status/732244756491816960 | |
const https = require('https') | |
const qs = require('querystring') | |
const WEBHOOK_PATH = '/services/YOUR_WEBHOOK_PATH_HERE' | |
const EVENTS_BY_CLICKTYPE = { | |
SINGLE : {emoji: ':coffee:', type: 'beverages'}, |
View progress.js
"use strict" | |
function progress(strs, current, total) { | |
let str = `${strs[0]}${current}${strs[1]}${total}${strs[2]}` | |
let ratio = Math.min(Math.max(current / total, 0), 1) | |
let length = Math.floor(ratio * str.length) | |
let pattern = new RegExp(`^.{${length}}`) | |
return str.replace(pattern, "\x1b[4m$&\x1b[0m") | |
} |
View bundle.js
import {join} from "path" | |
import browserify from "browserify" | |
import babelify from "babelify" | |
import archiver from "archiver" | |
let opts = { | |
standalone: "code", | |
// these are the API equivalent of --node | |
// https://github.com/substack/node-browserify/blob/master/bin/args.js#L67-L78 |
NewerOlder