Skip to content

Instantly share code, notes, and snippets.

View mfikes's full-sized avatar

Mike Fikes mfikes

View GitHub Profile
@mfikes
mfikes / main.c
Last active May 14, 2023 16:52
Modified nrf/samples/bluetooth/peripheral_hids_keyboard/main.c
/*
* Copyright (c) 2018 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
*/
#include <zephyr/types.h>
#include <stddef.h>
#include <string.h>
#include <errno.h>
(require '[cljs-bean.core :refer [->clj ->js]])
(defn update-vals
"m f => {k (f v) ...}
Given a map m and a function f of 1-argument, returns a new map where the keys of m
are mapped to result of applying f to the corresponding values of m."
{:added "1.11"}
[m f]
(with-meta
(persistent!
@mfikes
mfikes / README.md
Last active April 5, 2021 02:17
Example of foreign library property namespace

Example using library property namespace with a foreign lib:

clj -M -m cljs.main -co co.edn -re node -r
ClojureScript 1.10.844
cljs.user=> (require '[yq$yowza :as yz :refer [getMessage]])
nil
cljs.user=> (getMessage)
"Hello, world!"
cljs.user=&gt; (yz/sayHello "hola")
@mfikes
mfikes / README.md
Last active February 2, 2021 18:23
Macro with side effect in ClojureScript
% clj -M -m cljs.main
ClojureScript 1.10.773
cljs.user=> (require 'foo.core)
nil
cljs.user=> (foo.core/m 1)
here
2
@mfikes
mfikes / keys-vals.md
Last active November 23, 2020 13:27

The following works in Clojure:

(keys (filter (comp odd? val) {:a 1 :b 2 :c 3}))

The docstrings for keys and vals don't indicate that you can do this. Is this accidential or intentional?

I vaguely recall Alex Miller indicating at some point that this capability was deemed useful and is intentionally allowed. Yes, this is an appeal to authority, but nevertheless, it makes a fairly convincing argument.

Self-hosted:

$ plk
ClojureScript 1.10.597
cljs.user=> (require '[foo.core :refer [defnmy]])
nil
cljs.user=> (defnmy FOO clojure.string/lower-case [x]
       #_=>   (inc x))
#'cljs.user/foo
/Users/mfikes/test-krell/AwesomeProject/node_modules/react-native/scripts/launchPackager.command; exit
Last login: Fri Apr 17 17:24:32 on ttys005
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
Mikes-iMac:~ mfikes$ /Users/mfikes/test-krell/AwesomeProject/node_modules/react-native/scripts/launchPackager.command; exit
###### ######
### #### #### ###
Mikes-iMac:AwesomeProject mfikes$ clj -Srepro -m krell.main -co build.edn -r
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
[1] AwesomeProject sdm845
[R] Refresh
Choice: 1
Last login: Fri Apr 17 17:07:01 on ttys002
/Users/mfikes/test-krell/AwesomeProject/node_modules/react-native/scripts/launchPackager.command ; exit;
The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`.
For more details, please visit https://support.apple.com/kb/HT208050.
Mikes-iMac:~ mfikes$ /Users/mfikes/test-krell/AwesomeProject/node_modules/react-native/scripts/launchPackager.command ; exit;
@mfikes
mfikes / ESP32-REPL.md
Last active July 6, 2022 22:32
ClojureScript REPL into ESP32

To set up a REPL that has cljs.core available, we need to re-partition the ESP32 and allocate more memory in Espruino for "JsVars".

The default Espruino bootloader.bin, pre-built variants of partitions_esprinuo.bin and rebuilt espruino_esp32.bin, and the ClojureScript runtime core.bin are also available here.

bootloader.bin gets flashed to 0x1000, partitions_espruino.bin gets flashed to 0x8000, and espruino_esp32.bin gets flashed to 0x10000 as per a usual ESP32 Espruino setup, and we put the ClojureScript runtime at 0x2C0000: