I hereby claim:
- I am ftrain on github.
- I am ftrain (https://keybase.io/ftrain) on keybase.
- I have a public key ASDM7VU2lSOHT1XBQ4IdkIv3O21V6lTe7fQLLbnG1Bop3Qo
To claim this, I am signing this object:
#!/usr/bin/perl | |
while (<>) { | |
s/'/''/g; | |
/^([^\s]+)\s*([^\s]+)\s*(.+)\s+\.\s*$/; | |
my $s = $1; | |
my $p = $2; | |
my $o = $3; | |
$s=~s/[<>]//g; | |
$p=~s/[<>]//g; |
import argparse | |
from math import ceil | |
from more_itertools import powerset | |
from ordered_set import OrderedSet | |
""" | |
$ pip install more_itertools ordered_set | |
$ python spellingbee.py RACFKOT -h | |
usage: spellingbee.py [-h] [--words WORDS] CHARACTERS |
I hereby claim:
To claim this, I am signing this object:
#!/bin/bash | |
# | |
# A script that takes a Twitter data archive, which is produced as a | |
# set of JavaScript files (different from the regular archive, which | |
# is CSV and HTML), and converts the `tweet.js` file, which contains | |
# all of the tweets, into tractable JSON, one tweet per line. It then | |
# inserts /that/ into a SQLite3 database, and extracts a simple | |
# relational table of tweets from the JSON. Finally, it runs datasette | |
# on the resulting database to allow you to explore. |
Sometimes there's a terrible penalty for telling the truth. | |
—The Great Lie (1941) | |
Sometimes even Cupid needs a little help! | |
—The Model and the Marriage Broker (1951) | |
Sometimes any man can be a giant . . . | |
—Giant (1956) | |
Sometimes murder is just a way to pass the time. |
#!/usr/bin/perl | |
# Copyright (c) 2015, Paul Ford, [email protected] | |
# All rights reserved. | |
# | |
# Redistribution and use in source and binary forms, with or without | |
# modification, are permitted provided that the following conditions | |
# are met: | |
# | |
# 1. Redistributions of source code must retain the above copyright |
#!/bin/bash | |
# | |
# _ _ __ | |
# __ _ __ _ _ __| |__ (_)/ _|_ _ | |
# / _` |/ _` | '__| '_ \| | |_| | | | | |
#| (_| | (_| | | | |_) | | _| |_| | | |
# \__, |\__,_|_| |_.__/|_|_| \__, | | |
# |___/ |___/ | |
# | |
# |
/* | |
actually.js | |
_ _ _ | |
__ _ __ _ __ _ __ _ ___| |_ _ _ __ _| | |_ _ | |
/ _` |/ _` |/ _` |/ _` |/ __| __| | | |/ _` | | | | | | | |
| (_| | (_| | (_| | (_| | (__| |_| |_| | (_| | | | |_| |_ | |
\__,_|\__,_|\__,_|\__,_|\___|\__|\__,_|\__,_|_|_|\__, ( ) | |
|___/|/ | |
*/ |
;; simplest fold definition | |
(define (fold f init l) | |
(if (null? l) init (fold f (f init (car l)) (cdr l)))) | |
;; by this time you are almost certainly comfortable with signatures like: | |
;; Int -> Int | |
(fold + 0 '[1 2 3 4 5]) | |
;; => 15 |
(def date-parsers [nil (java.text.SimpleDateFormat. "yyyy") (java.text.SimpleDateFormat. "yyyy-M") (java.text.SimpleDateFormat. "yyyy-M-dd")]) | |
(def grains [:decade :year :month :day]) ;; what's decade doing? | |
(map #(let [[_ year month day] (re-find #"(\d{2,4})[-_]([\dx]{2})[-_]([\dx]{2})" %) | |
date (first (split-with (partial not= "xx") [(if (= (count year) 2) (str "19" year) year) month day]))] | |
[(.parse (parsers (count date)) (clojure.string/join "-" date)) (grains (count date))]) | |
["thefilehasaname__1939-xx-01.mp3" | |
"thefilehasaname__39_01_01.mp3" | |
"thefilehasaname__39-01-01.mp3" |