Fork me on GitHub

what do you think about? has anyone tried it? worthwhile to test?


I just have to recommend the book “The Murderer’s Ape”, by Jakob Wegelius. I think that maybe outside of Sweden it is easily missed for the gem it is. In our family we are four who have read it, aged 8, 11, 21 and 53. We read it together, that is the 21-yo read it loud for the rest of us. We all just loved it! The 8-yo was climbing the walls at times, because of the suspense and the way Wegelius sometimes treats the characters he makes us love. I just have to give it to him, he is a genius author. No idea why this book only has 4.25 on Goodreads! You have to be dead for this story not to totally soak your being. Caveat for me not having read the English translation, but from what I have heard it should be well done.


Totally going to add that to my list. I have a middle schooler who loves murder mysteries.

metal 1

Your in for a treat!


I know this was so long ago, but I finished it! Thanks for the recommendation. It was really good and I’m going to encourage my kids to read it. Thanks so much!


That’s great to hear! Thanks for digging up this old thread to tell me!


CIDER is no worky in my emacs ;_; I get a nil> with an infinite loading === bouncing around


sdkman to the resq


new system for collecting, deriving and working with facts about source code just dropped (in Haskell, by Facebook) I think Rich was working on something similar at some point

Alex Miller (Clojure team)19:08:14

there is actually a codeq v2 but they've never released it


i've mentioned it once but will say again, a queryable runtime is an absolute killer feature of Clojure. And i think it might take a while for that feature to be recognized for the genius that it is

💯 8
Dane Filipczak19:08:26

can you explain what you mean by queryable runtime?


(apropos "rename-keys")
(doc clojure.test) (find-doc "dynamic")


the next best thing is how rust generates documentation and runs a webserver with all of this. but its even more first-class when the runtime itself has all of this. and this includes regular jars. it's just built into the language


@U11BV7MTK 💯 - I have on the back burner a talk about using ed as a clojure editor, not because ed has some killer feature, but because you can do so much of what people think they need editor tooling for in clojure itself

💯 2
🤯 2

for instance, this is our production jar: MB_JETTY_PORT=3006 java -Dclojure.server.repl="{:port 50506 :accept clojure.core.server/repl}" -jar 0.40.0.jar and then just a simple

% nc localhost 50506
user=> (apply require clojure.main/repl-requires)
user=> (apropos "union")
user=> (apropos "password")
(clj-ldap.client/modify-password metabase.api.session/GET_password_reset_token_valid metabase.api.session/POST_forgot_password metabase.api.session/POST_reset_password metabase.api.user/PUT_:id_password metabase.api.util/POST_password_check metabase.driver.common/default-password-details! metabase.integrations.ldap/ldap-password metabase.integrations.ldap/verify-password metabase.models.database/protected-password metabase.models.user/form-password-reset-url metabase.models.user/set-password! metabase.models.user/set-password-reset-token! metabase.public-settings/enable-password-login metabase.public-settings/password-complexity metabase.util.password/active-password-complexity metabase.util.password/common-passwords-url metabase.util.password/verify-password)

🤯 9

i'm querying about all of the things related to passwords from a production jar. that is mind blowing to me


yeah. honestly a first-class dev experience in clojure is really just a way to easily paste forms into a repl buffer, and perhaps to require the current buffer.


everything else is basically built into the language


@U051SS2EU would watch that talk 100%


@U11BV7MTK if you want to play a little bit more, I'm trying to make the "queryable runtime" even more uniform in this project:

👀 3

There's little documentation, but I can help (and add new docs) if you're interested 🙂

Drew Verlee01:09:19

@U3Y18N0UC what is "my repl interaction"?


What do you mean? Is it something that's on the code?


Ah, I see, on the README


Yeah, maybe the README is not that well-written also 😅. It meant that instead of trying to figure out what's the sequence of commands to get all public vars on a specific namespace, and evaluate them, you get an EQL query that will do that for you


Sometimes you can even combine them, like for example, suppose you want to get all vars from a specific namespace. This could be:

(eql {:clj :repl/namespace 'some.namespace}
     [{:namespace/vars [:var/fqn]}])


Or you could ask to include metadata for these vars:

(eql {:clj :repl/namespace 'some.namespace}
     [{:namespace/vars [:var/fqn :var/meta]}])

Drew Verlee01:09:21

That would be great. Thanks for the clarification.


didn't LISP invent the queryable runtime? Seems like it's taking a while to catch on 😉


I once wondered how many things were added to clojure.core over the versions. After cloning the Clojure repo, and doing weird regex checks across history in git, I realised I could just do this:

user=> (->> (vals (ns-publics 'clojure.core))
  #_=>      (keep (comp :added meta))
  #_=>      (frequencies)
  #_=>      (sort-by #(Long/parseLong (subs (key %) 2)))
  #_=>      (run! println))
[1.0 434]
[1.1 38]
[1.2 45]
[1.3 16]
[1.4 8]
[1.5 11]
[1.6 8]
[1.7 19]
[1.8 1]
[1.9 27]
[1.10 8]
That's when I started to really "get" the value of the queryability. I then understood how easily I could implement my own version of clojure.repl/apropos. Edit: fixed the sorting.

👍 2
❤️ 2

Cool! You could then do:

(->> (vals (ns-publics 'clojure.core))
     (keep (fn [v]
             (when ((comp #{"1.10"} :added meta) v)
               (symbol v))))
     (map clojure.repl/source-fn)
     (run! println))
To see the source of the things added in eg 1.10

✔️ 6
Ben Sless12:09:50

When I found out about apropos and find-doc I felt an immense sense of loss having not known about them for over two years