Skip to content

Instantly share code, notes, and snippets.

View wedesoft's full-sized avatar

Jan Wedekind wedesoft

View GitHub Profile
@wedesoft
wedesoft / deps.edn
Last active October 26, 2023 04:44
{:deps {org.clojure/clojure {:mvn/version "1.11.1"}
org.lwjgl/lwjgl {:mvn/version "3.3.2"}
org.lwjgl/lwjgl$natives-linux {:mvn/version "3.3.2"}
org.lwjgl/lwjgl-opengl {:mvn/version "3.3.2"}
org.lwjgl/lwjgl-opengl$natives-linux {:mvn/version "3.3.2"}
org.lwjgl/lwjgl-glfw {:mvn/version "3.3.2"}
org.lwjgl/lwjgl-glfw$natives-linux {:mvn/version "3.3.2"}}}
@wedesoft
wedesoft / deps.edn
Last active May 23, 2023 08:04
Clojure/Java matrix library comparison core.matrix vs EJML vs vectorz-clj vs fastmath
{:deps {org.clojure/clojure {:mvn/version "1.11.1"}
net.mikera/core.matrix {:mvn/version "0.63.0"}
net.mikera/vectorz-clj {:mvn/version "0.48.0"}
org.ejml/ejml-all {:mvn/version "0.43"}
criterium/criterium {:mvn/version "0.4.6"}
generateme/fastmath {:mvn/version "2.2.2-SNAPSHOT" :exclusions [com.github.haifengl/smile-mkl org.bytedeco/openblas]}}}
@wedesoft
wedesoft / guard.sh
Created April 27, 2023 07:47
Guard script to automatically run tests
#!/bin/sh
while true; do
clear;
poetry run pytest "$@";
git ls-files -z | xargs -0 inotifywait -e CLOSE_WRITE;
done
@wedesoft
wedesoft / cloudcube.clj
Last active November 18, 2022 21:37
Clouds with self-shadowing using deep opacity map
(require '[clojure.core.matrix :refer (matrix div sub mul add mget mmul inverse) :as m]
'[clojure.core.matrix.linear :refer (norm)]
'[clojure.math :refer (PI sqrt pow cos sin to-radians)]
'[com.climate.claypoole :as cp]
'[gnuplot.core :as g]
'[sfsim25.quaternion :as q]
'[sfsim25.atmosphere :refer :all]
'[sfsim25.clouds :refer :all]
'[sfsim25.shaders :as s]
'[sfsim25.ray :refer :all]
@wedesoft
wedesoft / testletter.tex
Last active November 7, 2022 11:44
Latex letter
% https://www.dickimaw-books.com/latex/admin/html/letter.shtml
\documentclass[12pt]{letter}
\usepackage[a4paper]{geometry}
\usepackage[british]{babel}
\begin{document}
\begin{letter}{Mrs Mabel Canary\\24 The Street\\
@wedesoft
wedesoft / worley-clouds.clj
Created June 9, 2022 19:38
Volumetric clouds rendered with multiple forward scattering
(require '[clojure.core.matrix :refer (matrix div sub mul add mget mmul) :as m]
'[clojure.core.matrix.linear :refer (norm)]
'[clojure.math :refer (PI sqrt pow cos sin to-radians)]
'[com.climate.claypoole :as cp]
'[gnuplot.core :as g]
'[sfsim25.quaternion :as q]
'[sfsim25.atmosphere :refer :all]
'[sfsim25.clouds :refer :all]
'[sfsim25.shaders :as s]
'[sfsim25.ray :refer :all]
@wedesoft
wedesoft / pi.clj
Last active November 14, 2020 22:33
Calculate Pi in Clojure
; Calculate Pi in Clojure
; https://rosettacode.org/wiki/Pi
; https://en.wikipedia.org/wiki/Spigot_algorithm
(defn pi-digits [& {:keys [q r t k n l]}]
(if (< (- (+ (* 4 q) r) t) (* n t))
(cons n
(lazy-seq
(pi-digits :q (* q 10)
:r (* 10 (- r (* n t)))
:t t
@wedesoft
wedesoft / eratosthenes.clj
Last active November 2, 2020 18:53
Prime number sieve of Eratosthenes in Clojure
; This one is really nice and compact but it quickly runs out of stack space:
(defn primes [i] (cons i (lazy-seq (filter #(not (zero? (mod % i))) (primes (inc i))))))
(take 100 (primes 2))
; (2 3 5 7 ...)
(take 1000 (primes 2))
; Error printing return value (StackOverflowError) at user/primes (NO_SOURCE_FILE:1).
; This one is slightly less elegant but works for large numbers:
(defn primes [i p]
(if (some #(zero? (mod i %)) p)
@wedesoft
wedesoft / imageio.clj
Created October 28, 2020 21:14
Save and load images using JMagick and Clojure
(import '[magick MagickImage ImageInfo ColorspaceType])
(defn spit-image [file-name width height data]
"Save an RGB image"
(let [info (ImageInfo.)
image (MagickImage.)]
(.constituteImage image width height "RGB" data)
(.setSize info (str width \x height))
(.setDepth info 8)
(.setColorspace info ColorspaceType/RGBColorspace)
@wedesoft
wedesoft / mnist.scm
Last active December 7, 2018 12:58
download and view MNIST data
(use-modules (oop goops) (ice-9 binary-ports) (rnrs bytevectors) (aiscm core) (system foreign) (aiscm xorg) (ice-9 format)
; http://yann.lecun.com/exdb/mnist/
(define f (open-file "train-labels-idx1-ubyte" "rb"))
(define magic (bytevector-u32-ref (get-bytevector-n f 4) 0 (endianness big)))
(define n (bytevector-u32-ref (get-bytevector-n f 4) 0 (endianness big)))
(define bv (get-bytevector-n f n))
(define labels (make (multiarray <ubyte> 1) #:memory (bytevector->pointer bv) #:shape (list n)))
(define f (open-file "train-images-idx3-ubyte" "rb"))
(define magic (bytevector-u32-ref (get-bytevector-n f 4) 0 (endianness big)))