Skip to content

Instantly share code, notes, and snippets.

View oakes's full-sized avatar

Zach Oakes oakes

View GitHub Profile

How Clojure's documentation can leapfrog other languages

Summary

I made a documentation generator that cashes in on Clojure's dynamism. See the play-cljs docs (a ClojureScript game library) for an example of its output.

The Problem

Like many of you, I've often wondered what my final regret will be on my deathbed. My best guess came to me in a dream recently. I was walking across the charred earth of an apocalyptic future world, maneuvering around the remains of the less fortunate. I was startled to find a young girl, barely holding onto her life. She murmured something to me. I asked her to repeat it, and she said more loudly: "I...wish your Clojure projects didn't have such crappy documentation."

Did you know nim can eval itself at runtime like a frickin scripting language?

Clone this gist and do...

nimble install compiler
nim c -r nimeval.nim

...and you should see:

@oakes
oakes / digital_ocean.md
Last active September 28, 2022 21:46
Running a JAR on Digital Ocean
  • Create a Digital Ocean account
  • In the OS X terminal, run ssh-keygen, then hit enter until it is done
  • Create a droplet
    • Select Ubuntu 16.10 x64
    • In Finder, Go -> Go to Folder... then type ~/.ssh
    • Open id_rsa.pub with TextEdit
    • Copy the contents of the file and paste them in the "New SSH Key" text field
    • Click "Create"
  • In the Terminal app, run ssh root@YOUR_IP_ADDRESS
  • Run apt-get update
@oakes
oakes / project.clj
Last active October 17, 2021 22:57
Using Paravim with Leiningen
(defproject lein-paravim "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.10.1"]]
; since paravim is in the `:dev` profile,
; it will launch when you do `lein run`.
; if you don't want that behavior,
; just change `:dev` to something else.
; if you change it to `:paravim`, you can
; launch it by doing `lein with-profile paravim run`
:profiles {:dev {:dependencies [[paravim "RELEASE"]]
:main paravim.start
@oakes
oakes / bbs.ansiwave
Last active June 14, 2021 19:58
Ideas for a modern, decentralized BBS
██╗██████╗ ███████╗ █████╗ ███████╗ ███████╗ ██████╗ ██████╗ █████╗
██║██╔══██╗██╔════╝██╔══██╗██╔════╝ ██╔════╝██╔═══██╗██╔══██╗ ██╔══██╗
██║██║ ██║█████╗ ███████║███████╗ █████╗ ██║ ██║██████╔╝ ███████║
██║██║ ██║██╔══╝ ██╔══██║╚════██║ ██╔══╝ ██║ ██║██╔══██╗ ██╔══██║
██║██████╔╝███████╗██║ ██║███████║ ██║ ╚██████╔╝██║ ██║ ██║ ██║
╚═╝╚═════╝ ╚══════╝╚═╝ ╚═╝╚══════╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝
_______________________________________
|,---"-----------------------------"---,|
||___ ............................ ||
@oakes
oakes / bug.nim
Last active February 20, 2021 10:17
# to build this with emscripten, you need emsdk on your PATH.
# first, clone https://github.com/emscripten-core/emsdk
# then in that repo run:
# ./emsdk install latest
# ./emsdk activate latest
# and then add the directories it prints out to your PATH
#
# then in this repo run:
# nim c -d:emscripten bug.nim
#
@oakes
oakes / deps.edn
Last active February 12, 2021 14:30
{:deps {net.sekao/odoyle-rules {:mvn/version "RELEASE"}}}
guitar: o3 b8 > c8 d4 < b > c < a b g a %1
banjo: @1 o3 b8 > c8 d4 < b > c < a b g a %2
guitar: @2 o3 b8 > c8 d4 < b > c < a b g a %3
guitar: @3 d1 g4 g a b g b a1 %4
banjo: @4 g4 g a b g1 %5
@oakes
oakes / core.clj
Last active July 15, 2017 06:13
Standalone Nightmod Template
(ns my-game.core
(:require [clojure.edn :as edn]
[clojure.java.io :as io]
[play-clj.core :refer :all]
[play-clj.g2d :refer :all]
[play-clj.g3d :refer :all]
[play-clj.math :refer :all]
[play-clj.physics :refer :all]
[play-clj.ui :refer :all])
(:import [java.io StringWriter]))