How Clojure's documentation can leapfrog other languages


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."


The project can be built using Lumo

npm install -g lumo-cljs
lumo build.cljs

Rich Already Answered That!

A list of commonly asked questions, design decisions, reasons why Clojure is the way it is as they were answered directly by Rich (even when from many years ago, those answers are pretty much valid today!). Feel free to point friends and colleagues here next time they ask (again). Answers are pasted verbatim (I've made small adjustments for readibility, but never changed a sentence) from mailing lists, articles, chats.

How to use:

  • The link below in the summary jumps at the answer on this page.
  • The link on the question itself points back at the original post.


View gist:32646c5ea9bd526d9a19d6d442b2867e
* Note that this layout is quite similar to Colekmak in many ways, once optimisations were done I fould that like with * Colemak moving the Z/X/C/V did not have a noticable impact but caused issues with shortcuts.
* The biggest difference is making sure vovels are easily used with accents/diacritics
* Keymap: Layer 0 with Gelatin keyboard layout
* Note that this layout requires a custom OS keyboard map to work correctly.
* Tertiary symbols are accessed using LAlt
* Deadkey functionality is used to combine accents/diacritics and alphabetic letters
* ,--------------------------------------------------. ,--------------------------------------------------.
* | +L1 | 1 !¡ | 2 @ | 3 # | 4 $ §| 5 % ˝|˘ ̑ ˚ | |˘ ̑ · | 6 ^ ̏| 7 & | 8 * | 9 + | 0 = | L0 |
* |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
View project.clj
(defproject eisentower-todo "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url ""
:license {:name "Eclipse Public License"
:url ""}
:dependencies [[org.clojure/clojure "1.9.0-alpha12"]]
:main ^:skip-aot eisentower.core
:target-path "target/%s"
:profiles {:uberjar {:aot :all}
:dev {:dependencies [[org.clojure/test.check "0.9.0"]]}})
''' evdev latency tester '''
import argparse
import statistics
import evdev

A curated list of AWS resources to prepare for the AWS Certifications

A curated list of awesome AWS resources you need to prepare for the all 5 AWS Certifications. This gist will include: open source repos, blogs & blogposts, ebooks, PDF, whitepapers, video courses, free lecture, slides, sample test and many other resources.

OP: @leonardofed founder @ plainflow.

View pdf-sign
DIR=`mktemp -dt pdf-sign.XXXXXXXX` || exit 1
cd "$DIR"
pdfseparate "$1" "$DIR/page%d.pdf"
inkscape `ls | tail -1`
pdfunite page*.pdf "$1 signed.pdf"
rm -rf "$DIR"

How to run Express inside an Electron app

You can run your Express app very easily inside your Electron app.

All you need to do is to:

  • place all the files of your Express app inside a new app folder in your_electron_app\resources\app
  • reconfigure the app.js file
  • refactor some relative pathes in your Express app
View parse-arg.clj
;; Based on
(defn parse-arg [s]
(condp (comp next re-matches) s
#"([+-])(\w+)" :>> (fn [[f k]] [(keyword k) (= f "+")])
#"(\w+)=(\w+)" :>> (fn [[k v]] [(keyword k) v])
(throw (IllegalArgumentException. s))))
(parse-arg "+foo") ;=> [:foo true]
(parse-arg "-foo") ;=> [:foo false]