Skip to content

Instantly share code, notes, and snippets.

View isaksky's full-sized avatar

Isak Sky isaksky

View GitHub Profile
@isaksky
isaksky / omit_nils.clj
Last active June 4, 2025 23:16
omit-nils reader macro
(ns com.isaksky.belt.omit-nils)
;; License: MIT
;; Note: 4 defs here are stolen from tonsky/clojure-plus:
;; https://github.com/tonsky/clojure-plus/blob/fdb3675a2760ac5ec60da5c58ed0cc8e9b6d6f80/src/clojure%2B/hashp.clj
;; - config, defualt-config
;; - install!, uninstall!
(defn- default-config []
@isaksky
isaksky / keybindings.json
Created June 1, 2023 20:26
Calva Keybindings, WASD movement
[
// Disable crazy VSCode default bindings
{
"key": "ctrl+shift+w",
"command": "-workbench.action.closeWindow"
},
{
"key": "ctrl+w",
"command": "-workbench.action.closeActiveEditor"
},
@isaksky
isaksky / step.cljc
Last active August 3, 2021 22:30
tbd.step macro
(ns tbd.step
(:require
[clojure.spec.alpha :as s]))
(s/def ::binding-kvp (s/cat :lhs symbol? :rhs any?))
(s/def ::bindings
(s/and
vector?
(s/conformer vec vec)
@isaksky
isaksky / i18n-impl.cljs
Created November 5, 2019 05:05
Handling translations in ClojureScript
(ns front.utilities.i18n-impl
(:require [front.i18n]))
(defn build-domain-index [text-vec]
(let [by-msgid (atom (transient {}))
by-msg (atom (transient {}))]
(doseq [{:keys [s_message s_message_id] :as text} text-vec]
(when-not (clojure.string/blank? s_message_id)
(swap! by-msgid assoc! s_message_id text))
(when-not (clojure.string/blank? s_message)
@isaksky
isaksky / solution.sql
Last active November 4, 2019 16:33
Solution to Robot Journey in TSQL https://github.com/mikehadlow/Journeys
declare @input nvarchar(max) =
N'1 1 E
RFRFRFRF
1 1 E
3 2 N
FRRFLLFFRRFLL
3 3 N
0 3 W
@isaksky
isaksky / gist:f693864aeedef8b54c1163342b36d788
Created October 8, 2019 16:10
Watch fancy CSS (less, scsss, etc) via shadow-cljs
(ns front.tasks.watch-css
(:require [clojure.java.io]
[clojure.java.shell :refer [sh]]
[juxt.dirwatch :refer [watch-dir]]
[clojure.core.async :as a]
[clojure.string :as str]
#_[shadow.cljs.devtools.api :refer [send-to-runtimes!]]))
(defn debounce-chan
"Taken from https://gist.github.com/xfsnowind/e15cc2e6da74df81f129"
@isaksky
isaksky / no-stutter.cljs
Last active September 17, 2019 23:32
Non stuttering text control in re-frame
(require '[reagent.ratom :as ra])
(require '[reagent.core :as reagent])
(require '[re-frame.core :as rf])
(defn non-stuttering-text-control [props]
(let [text-value-atom (atom "")
outside-change-counter (ra/atom 0)
to-dispose (atom [])]
(fn [props]
@isaksky
isaksky / Foo.ex
Created May 23, 2019 15:00
Update URL via Liveview
# In somethingLive.ex:
def handle_event("some_event", _params, socket) do
assign(socket, :updated_url, Routes.project_path(MyApp.Endpoint, :index))
end
# In template: <%= js_url_update_script(assigns[:updated_url]) %>
# In form_helpers.ex, or similar:
Initial Commit
@isaksky
isaksky / codemirror.cljs
Created December 12, 2018 16:22
Reframe codemirror
(ns mything.components.codemirror
(:require [reagent.core :as reagent]
[re-frame.core :as rf]
[reagent.interop :refer [$]]
cljsjs.codemirror
cljsjs.codemirror.mode.clojure
cljsjs.codemirror.mode.sql))
(def codemirror-defaults {:lineNumbers true
:lineWrapping true