Skip to content

Instantly share code, notes, and snippets.

;(ql:quickload :cl-ppcre)
;(ql:quickload :cl-interpol)
;(named-readtables:in-readtable :interpol-syntax)
(defun full-match (pattern string)
"Something like Python's re.fullmatch.
Example (with cl-interpol):
(full-match #?/\s/ #?' ') -> T
(full-match #?/\s/ #?'') -> nil"
(equal string (cl-ppcre:scan-to-strings pattern string)))
@Jach
Jach / fmod-test.lisp
Last active October 2, 2021 16:48
Simple hacky test of using cl-autowrap and cffi to load fmod with Lisp and get a song to play
;; Public domain example of using cl-autowrap and cffi to follow using the core api documented at
;; https://fmod.com/resources/documentation-api?version=2.0&page=white-papers-getting-started.html
;; to load and play a sound file with fmod.
;; This file assumes it's in the downloaded fmodstudioapi20009linux/ folder,
;; which contains the C includes and pre-built dynamic libraries.
;; Try it out, evaluating step by step!
(ql:quickload :cl-autowrap)
(defpackage :fmod-test
; union-find.lisp
;; A generic solution for connected components. "I have some number of graphs. Is this element connected to
;; this other element? Or are the graphs/sets each element belongs to disjoint?"
;;
;; A 'backwards' tree with pointers from a node to its parent, which lets you union two separate trees together by
;; just taking the shorter one's root and pointing it at the taller one's (or vice versa, but this way preserves log
;; behavior).
;; The path compression optimization (not done here) seems to just be an extra pass in find(), after you have the result,
;; to re-parent each item along the path to the found root parent so that any future finds() of any of those items
;; A generic solution for connected components. "I have some number of graphs. Is this element connected to
;; this other element? Or are the graphs/sets each element belongs to disjoint?"
;;
;; a 'backwards' tree with pointers from a node to its parent, which lets you union two separate trees together by
;; just taking the shorter one's root and pointing it at the taller one's (or vice versa, but this way preserves log
;; behavior). The path compression optimization seems to just be an extra pass in find(), after you have the result,
;; to re-parent each item along the path to the found root parent so that any future finds() of any of those items
;; will only have one lookup to reach the component root.
(defclass union-find ()
@Jach
Jach / unicode_extract.lisp
Last active January 15, 2019 16:17
extract letter unicodes for js regexes
#|
This file is in the public domain.
I grabbed the data from ucd.all.flat.zip at ftp://ftp.unicode.org/Public/11.0.0/ucdxml/
and use this script to create a UnicodeLetters.txt file
containing a series of unicode chars suitable for using in JavaScript regular expressions
where you want \p{L}.
Note that IE does not support the 'u' flag, you'll need to restrict yourself to the subset of
letters in the BMP (below 0x10000) and use this script to print out a simple "\uABCD" instead of "\\u{ABCDE}".
Also note that reading in the file seems to stress SBCL's default settings, run with
--dynamic-space-size 10000
@Jach
Jach / undef-warning.lisp
Created August 11, 2018 21:12
Track undefined function warnings in SBCL
; put this in my .sbclrc file.
; useful idea I had, rebind defun to keep track
; of functions that have been referenced but not yet
; defined. Loosely inspired by Utopian.
(setf (macro-function 'cl-defun) (macro-function 'defun))
(defparameter *undefined-functions* nil)
(handler-bind
((warning
(lambda (w)
(declare (ignorable w))
@Jach
Jach / reverse-string.lisp
Last active November 8, 2017 19:22
How to write Lisp like C...
(defun reverse-string-c (string string-length)
(prog ((pos 0) (half (truncate (/ string-length 2))))
START (if (= pos half)
(return string))
(let ((swap-pos (- string-length pos 1)))
(rotatef (schar string pos) (schar string swap-pos)))
(incf pos)
(go START)))
(defun reverse-string (string)
@Jach
Jach / roswell-0.0.6.63.ebuild
Last active June 3, 2016 02:08
quick and dirty ebuild for roswell, installed under local dev-lisp/roswell/
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
EAPI=5
inherit eutils autotools
DESCRIPTION="Common Lisp environment setup utility"
HOMEPAGE="https://github.com/roswell/roswell"
@Jach
Jach / sevseg.cljs
Created October 24, 2015 01:29
cljs code for a seven segment display example from http://www.thejach.com/view/2015/10/re-frame_a_software_fpga
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; calc.cljs
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(ns sevseg.calc)
(defn calc
"Expects a 4-item vector of booleans
representing a big-endian binary number.
Returns a 7-item map with keys prefix + num
corresponding to which segments of the display
@Jach
Jach / show_retweets.py
Created September 25, 2014 04:47
Print out all the retweets you made. Download your twitter data backup, go into the data/js/tweets folder and run this script.
import json
import glob
files = glob.glob('*.js')
data = {}
for f in files:
file = open(f)
_ = file.readline()
data[f] = json.loads(file.read())