title: Clojure Developer Tooling for Speed and Productivity in 2024
So you’ll show me your cool workflows! (help me get better!)
These resources (articles, books, and videos) are useful when you're starting to learn the language, or when you're learning a specific part of the language. This an opinionated list, no doubt. I've compiled this list from writing and teaching Clojure over the last 10 years.
FROM clojure:openjdk-15-tools-deps AS builder | |
WORKDIR /opt | |
ADD deps.edn deps.edn | |
RUN clj -Sdeps '{:mvn/local-repo "./.m2/repository"}' -e "(prn \"Downloading deps\")" | |
RUN clj -e :ok | |
COPY . . | |
RUN clj -e :ok |
A minimal example of creating a (mostly) working FUSE filesystem using Clojure. NOTE: I have only tested this with OSX, and it assumes you have already installed libfuse.
Create an empty directory at /tmp/meld
to serve as your mount point,
put these files in a directory called meld
, then:
- Specific Notmuch filters (and saved-searches) for: | |
+ The Feed (newsletters, blogs) | |
+ The Paper trail (receipts, ledger) | |
+ Screened Inbox (mail from folks you actually want to read) | |
+ Previously Seen (important mail that you've already read) | |
+ Unscreened Inbox (potential spam / stuff you don't want) | |
- Elisp Functions to move / categorize emails from a particular sender. | |
+ Adds tags needed by filters defined above to all email sent by a particular sender | |
+ Creates an entry in a DB file, which is used by the Notmuch post-new script when indexing new email, to auto-add the relevant tags. |
# Reconstructed via infocmp from file: /usr/share/terminfo/t/tmux-256color | |
tmux-256color|tmux with 256 colors, | |
OTbs, OTpt, am, hs, km, mir, msgr, xenl, AX, G0, | |
colors#256, cols#80, it#8, lines#24, pairs#32767, U8#1, | |
acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, | |
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l, | |
clear=\E[H\E[J, cnorm=\E[34h\E[?25h, cr=^M, | |
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H, | |
cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C, | |
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM, |
(require 'org) | |
(defun org-pinboard-store-link () | |
"Store a link taken from a pinboard buffer." | |
(when (eq major-mode 'pinboard-mode) | |
(pinboard-with-current-pin pin | |
(org-store-link-props | |
:type "pinboard" | |
:link (alist-get 'href pin) | |
:description (alist-get 'description pin))))) |
;;; package --- Fix permissions for Emacs.app on macOS Catalina | |
;;; Author: Artem Loenko | |
;;; Mail-To: <[email protected]> | |
;;; Commentary: | |
;;; Code: | |
(defconst _default-emacs-app-plist-path "/Applications/Emacs.app/Contents/Info.plist") | |
(defconst _temp-buffer-name "*fixing Emacs permissions*") | |
(defconst _temp-buffer (get-buffer-create _temp-buffer-name)) | |
(with-current-buffer _temp-buffer (erase-buffer)) |
(ns hello-world.pg | |
(:require | |
[clojure.string :as string] | |
[cljs.nodejs :as nodejs] | |
[cljs.core.async | |
:refer [<! chan put! close! onto-chan to-chan]] | |
[taoensso.timbre :as timbre | |
:refer-macros [tracef debugf infof warnf errorf]]) | |
(:require-macros | |
[cljs.core.async.macros :as m :refer [go]])) |