Skip to content

Instantly share code, notes, and snippets.

@bdesham
bdesham / process.awk
Last active March 7, 2024 11:56
Takes a list of commands with timing information and displays the elapsed time for each one.
# Takes a list of commands with timing information and displays the elapsed
# time for each one.
#
# The input is expected to look like
#
# +1518804574.3228740692 colors:76> local k
# +1518804574.3228929043 colors:77> k=44
# +1518804574.3229091167 colors:77> color[${color[$k]}]=44
# +1518804574.3229229450 colors:77> k=33
# +1518804574.3229279518 colors:77> color[${color[$k]}]=33
@bdesham
bdesham / gist:e57582dbb4fee3d3d16d
Created December 24, 2014 17:13
stat(1) man page from OS X 10.10.1
STAT(1) BSD General Commands Manual STAT(1)
NAME
readlink, stat -- display file status
SYNOPSIS
stat [-FLnq] [-f format | -l | -r | -s | -x] [-t timefmt] [file ...]
readlink [-n] [file ...]
@bdesham
bdesham / submit_urls.py
Last active December 4, 2022 17:45
Takes a sitemap file and submits each URL to the Wayback Machine
#!/usr/bin/env python3
# Takes a sitemap file [1] and submits each URL to the Wayback Machine [2].
#
# Usage: python3 submit_urls.py sitemap.xml
#
# The script will contact the Wayback Machine for each URL in turn and request
# that it be saved [3]. The script prints (to standard output) the HTTP status
# code received from the Wayback Machine for each URL. The output looks like
# this:
@bdesham
bdesham / flatten-sets.clj
Created June 3, 2011 03:46
A Clojure function like flatten, except that it pulls elements out of sets instead of sequences.
(defn flatten-sets
"Like flatten, but pulls elements out of sets instead of sequences."
[v]
(filter (complement set?)
(rest (tree-seq set? seq (set v)))))
@bdesham
bdesham / field.hs
Created October 14, 2017 22:05
Adding a new key to the context based on a metadata key
-- | Creates a new field based on the item's metadata. If the metadata field is not present then no
-- field will actually be created. Otherwise, the value will be passed to the given function and the
-- result of that function will be used as the field's value.
transformedMetadataField :: String -> String -> (String -> String) -> Context a
transformedMetadataField key itemName f = field key $ \item -> do
fieldValue <- getMetadataField (itemIdentifier item) itemName
return $ maybe (fail $ "Value of " ++ itemName ++ " is missing") f fieldValue
@bdesham
bdesham / test.html
Created December 18, 2013 18:49
A simple HTML file that demonstrates some font-rendering weirdness when used with Bigfoot (http://cmsauve.com/labs/bigfoot/).
<!DOCTYPE html>
<head>
<title>This is a test</title>
<link rel="stylesheet" href="bigfoot-default.css" type="text/css"/>
</head>
<body>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam iaculis leo ac lacus pretium iaculis. Cras eget eros mauris. Vestibulum ac sapien malesuada, pulvinar odio vel, pellentesque lectus. Duis commodo nibh vel mi commodo consequat. Nam egestas gravida eros et bibendum. Praesent vel suscipit odio. Suspendisse dignissim arcu vitae sapien auctor, vitae auctor libero dapibus.<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> Pellentesque sagittis, justo vitae mattis tristique, nibh neque convallis metus, a dapibus turpis nisl ut metus. Curabitur consectetur sodales mauris. Donec id vestibulum augue. Aliquam sollicitudin ligula in bibendum malesuada. Praesent tincidunt, purus sed semper vestibulum, purus nulla tempor nisi, vel tincidunt enim lectus et velit. Aenean rhoncus lectus non laoreet laoreet.</p>
@bdesham
bdesham / repetition.py
Created September 3, 2013 13:55
Visualizing song repetition with Python. For more information, see <http://www.bdesham.info/2013/09/visualizing-repetition>.
#!/usr/bin/env python
# repetition.py
#
# Usage: python repetition.py input.txt output.svg
#
# Given a text file containing song lyrics, generates an SVG image showing the
# relationships between the lines of text. For more information, read the
# article at <http://www.bdesham.info/2013/09/visualizing-repetition>.
#
(defn matrix
[vectors]
(for [i (range (count vectors))
j (range (count vectors))]
(distance-between (nth vectors i) (nth vectors j))))
; originally written in Python as
; def generate_matrix(vectors):
; size = len(vectors)
; return [[distance_between(vectors[i], vectors[j]) for i in range(size)] for j in range(size)]
@bdesham
bdesham / gist:4983084
Created February 19, 2013 04:22
Asks the user to input students’ names and grades, storing them for later use
grades = {}
for i in range(number_of_students):
# using input() can be unsafe; use raw_input() instead
name = raw_input("Name: ")
first_grade = int(raw_input("First grade: "))
second_grade = int(raw_input("Second grade: "))
grades[name] = (first_grade, second_grade)
# after running, grades will be something like
@bdesham
bdesham / obfuscate.clj
Created August 11, 2012 20:26
Obfuscate text for use in web pages
; Replaces each character with an HTML escape code like "&#x20;".
; This is useful as some lightweight protection against e-mail harvesting;
; it probably won't perform correctly with non-ASCII input.
;
; example:
; (obfuscate "example.com")
; => "&#x65;&#x78;&#x61;&#x6d;&#x70;&#x6c;&#x65;&#x2e;&#x63;&#x6f;&#x6d;"
(defn obfuscate
[text]