Skip to content

Instantly share code, notes, and snippets.

Connor Lane Smith cls

  • Oxford Nanopore
  • Berkshire, UK
Block or report user

Report or block cls

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
cls / lsln.c
Last active Nov 25, 2018
Resolve a symlink step by step, printing each link in the chain
View lsln.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
static char *getlink(const char *);
static void panic(const char *);
cls / sample-list.lisp
Last active May 25, 2018
Reservoir sampling over a list in Common Lisp
View sample-list.lisp
(defun sample-list (items &optional (size 1))
(let ((sample (make-array size :fill-pointer 0)))
(loop for item in items
for enum from 1
if (<= enum size)
do (vector-push item sample)
do (let ((rand (random enum)))
(when (< rand size)
(setf (aref sample rand) item)))
cls / derivative.sml
Created May 12, 2018
Derivative of a function in Standard ML, using Real.nextAfter
View derivative.sml
fun derivative (f : real -> real) (x : real) : real =
let val pos = Real.nextAfter (x, Real.posInf)
val neg = Real.nextAfter (x, Real.negInf)
(f pos - f neg) / (pos - neg)
cls / braille.c
Last active Jun 24, 2018
Conversion from ASCII to Braille Computer Notation (UK)
View braille.c
#include <stdio.h>
static const unsigned char braille[0x100] = {
0x40, 0x7c, 0x48, 0x70, 0x78, 0x68, 0x6f, 0x44, 0x58, 0x5c, 0x54, 0x56, 0x42, 0x64, 0x72, 0x4c,
0x7f, 0x61, 0x63, 0x69, 0x79, 0x71, 0x6b, 0x7b, 0x73, 0x6a, 0x52, 0x46, 0x66, 0x76, 0x74, 0x62,
0x00, 0x3c, 0x08, 0x30, 0x38, 0x28, 0x2f, 0x04, 0x18, 0x1c, 0x14, 0x16, 0x02, 0x24, 0x32, 0x0c,
0x3f, 0x21, 0x23, 0x29, 0x39, 0x31, 0x2b, 0x3b, 0x33, 0x2a, 0x12, 0x06, 0x26, 0x36, 0x34, 0x22,
0x6e, 0x41, 0x43, 0x49, 0x59, 0x51, 0x4b, 0x5b, 0x53, 0x4a, 0x5a, 0x45, 0x47, 0x4d, 0x5d, 0x55,
0x4f, 0x5f, 0x57, 0x4e, 0x5e, 0x65, 0x67, 0x7a, 0x6d, 0x7d, 0x75, 0x77, 0x50, 0x7e, 0x60, 0x6c,
0x2e, 0x01, 0x03, 0x09, 0x19, 0x11, 0x0b, 0x1b, 0x13, 0x0a, 0x1a, 0x05, 0x07, 0x0d, 0x1d, 0x15,
cls / mk_idmap.sml
Last active Apr 9, 2018
Higher-order relabelling function, ported from OCaml to Standard ML
View mk_idmap.sml
exception NotFound
fun mk_idmap (mk_id : unit -> 'b) : ''a list -> ''a -> 'b =
(fn (x, acc) =>
let val new_id = mk_id () in
fn id => if id = x then new_id else acc id
(fn _ => raise NotFound)
cls /
Created Mar 25, 2018
Execute sed substitution expression over files in a git tree
pattern="$(printf "%s" "$expr" | sed -n 's/^s\/\(\([^\\\/]\|\\.\)*\)\/\([^\\\/]\|\\.\)*\/g\?$/\1/p')"
if [ -z "$pattern" ]
printf "usage: git sed s/lhs/rhs/[g] [file...]\n" > /dev/stderr
cls / row_align.c
Last active Mar 18, 2018
Translate raw two-dimensional bitmap into word-aligned rows
View row_align.c
#include <stdint.h>
#include <string.h>
row_align(uint8_t *dst, const uint8_t *src, const size_t width_in_bits, const size_t height)
const size_t width_in_whole_bytes = width_in_bits / 8;
if (width_in_bits % 32 == 0) { // word-aligned
memcpy(dst, src, width_in_whole_bytes * height);
cls / count-dna.cpp
Last active Mar 9, 2018
Efficient counting of DNA bases and codons
View count-dna.cpp
#include <array>
enum Base { A, C, T, G };
constexpr Base base(char c)
return static_cast<Base>((c >> 1) & 0b11);
static_assert(base('A') == Base::A);
cls / functional-templates.hpp
Last active Mar 9, 2018
Type-level linked lists, with map, filter, and foldr
View functional-templates.hpp
#include <type_traits>
namespace type_list {
class nil {};
template<class Head, class Tail>
class cons {};
// map f [] = []
cls / base64.hpp
Last active Feb 13, 2019
Straightforward constexpr Base64 block encoding in C++14
View base64.hpp
#include <array>
#include <tuple>
constexpr std::array<char, 4> base64(uint8_t octet0, uint8_t octet1, uint8_t octet2)
constexpr std::array<char, 64> table = {
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
You can’t perform that action at this time.