View -
const {send} = require('micro');
const bent = require('bent');
const wae = require('web-auto-extractor').default;
const https = require('https');
const pelo = require('pelo');
const url = require('url');
const cheerio = require('cheerio');
const {GOODREADS_KEY} = require('./settings');
const getJSON = bent('json', 200);
const getText = bent('string', 200);
View breathing-box.ino
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_IS31FL3731.h>
Adafruit_IS31FL3731_Wing ledmatrix = Adafruit_IS31FL3731_Wing();
void setup() {
if (!ledmatrix.begin()) {
Serial.println("IS31 not found");

OpenStreetMap: It's time to start over

A lot of people have been waiting for OpenStreetMap to grow up, to become a humane, productive, and friendly environment. It's time for them to stop waiting and build something else.

You can't just ignore every OpenStreetMap-related communication channel.

You can make the case that the mailing lists don't represent all of OpenStreetMap: that's technically correct. But they are a large part of the public face of the project. They are the required venues for communication about anything. If you're an organization of any kind that interacts with OpenStreetMap, you're required to post on the lists and receive the vitriol or you'll have to hear about how you didn't consult everyone.

That means, as I've said before, that you "Come for the data, and you leave for the community." The more your engage with the project, the worse it is. Want to map a few stores? No problem. Want to work on city-wide or country-wide updates, or organize a mapathon? It'll be a terrible ex

View goodreads-to-jekyll.js
const fs = require('fs');
const d3 = require('d3-dsv');
const path = require('path');
const yaml = require('js-yaml');
const toMarkdown = require('to-markdown');
fs.readFileSync('./goodreads_library_export.csv', 'utf8')
).filter(row => {
return row['Exclusive Shelf'] !== 'to-read';
View databasexls.xls
<?xml version="1.0" encoding="UTF-8"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="">
<Worksheet ss:Name="grants_db">
<Cell><Data ss:Type="String">Grant</Data></Cell>
<Cell><Data ss:Type="String">URL</Data></Cell>
<Cell><Data ss:Type="String">Organization Name</Data></Cell>
<Cell><Data ss:Type="String">Organization Website</Data></Cell>
<Cell><Data ss:Type="String">Focus Area</Data></Cell>
View goodreads-export.csv
We can make this file beautiful and searchable if this error is corrected: Unclosed quoted field on line 4.
Book Id,Title,Author,Author l-f,Additional Authors,ISBN,ISBN13,My Rating,Average Rating,Publisher,Binding,Number of Pages,Year Published,Original Publication Year,Date Read,Date Added,Bookshelves,Bookshelves with positions,Exclusive Shelf,My Review,Spoiler,Private Notes,Read Count,Recommended For,Recommended By,Owned Copies,Original Purchase Date,Original Purchase Location,Condition,Condition Description,BCID
13278990,The Housing Monster,,",",,"=""160486530X""","=""9781604865301""",0,3.77,PM Press,Paperback,160,2012,2011,,2017/12/07,currently-reading,currently-reading (#3),currently-reading,,,,1,,,0,,,,,
7805,Pale Fire,Vladimir Nabokov,"Nabokov, Vladimir",,"=""0141185260""","=""9780141185262""",0,4.19,Penguin Books Ltd,Paperback,246,2000,1962,,2013/10/09,to-read,to-read (#26),to-read,,,,0,,,0,,,,,
34220725,Never Use Futura,Doug Thomas,"Thomas, Doug",Ellen Lupton,"=""1616895721""","=""9781616895723""",4,4.29,Princeton Architectural Press,Paperback,208,2017,,,2017/11/12,,,read,"Pr
View flickr_bookmarklet.js
(async () => {
let id = location.pathname.split('/')[3];
let resp = await fetch(`${id}&format=json&nojsoncallback=1`).then(r => r.json());
let natural = resp.sizes.size.find(s => s.label === 'Medium 640');
let double = resp.sizes.size.find(s => (+s.width) >= 1280);
if (natural && double) {
return prompt('html', `<img src="${natural.source}"
${natural.source} 320px,
${double.source} 2x" />`);
import re
import codecs
import requests
import glob
AMZN_RE = re.compile(u"https?://[0-9A-Za-z]+)")
ISBN1 = re.compile(u"[A-Za-z\-]+)/dp/(\d{10})/")
ISBN2 = re.compile(u"\d{10})/")
def remove_amazon(filename):
extern crate lazy_static;
extern crate regex;
extern crate reqwest;
use std::env;
use std::fs::File;
use std::io::prelude::*;
use regex::*;
use reqwest::Client;
extern crate lazy_static;
extern crate regex;
extern crate reqwest;
use std::env;
use std::fs::File;
use std::io::prelude::*;
use regex::*;
use reqwest::Client;