992 karma · joined April 30, 2015
Bonus points if you have a supplier for einsteins!
Don't know how I feel about optional quotes around strings, that seems like a mistake. And having an immutable set literal would be nice as well.
Just like `core.async` itself was a frontrunner of Virtual Threads on the JVM, I view `core.async.flow` as the Clojure version of the upcoming [0]Structured Concurrency JEP. I do wonder if it will use that under the hood once it becomes stable, the same way `core.async` is planning to move away from the `go` macro to just have it dispatch a virtual thread.
[0]https://en.wikipedia.org/wiki/Verifiable_credentials [1]https://en.wikipedia.org/wiki/Decentralized_identifier [2]https://en.wikipedia.org/wiki/JSON-LD
That said, I have never used a ref, nor seen one in use outside of a demo blogpost.
;; "maps" the keys to the values
(map {1 "a" 2 "b"} (take 5 (cycle 1 2))) ;;=> '("a" "b" "a" "b" "a")
;; acts as a predicate that tests for membership
(filter #{"a" "b" "c"} ["a" "b" "c" "d" "e" "f"]) ;;=> '("a" "b" "c")
Once you get used to this idiom you naturally start thing of other functions (or applicative functors) the same way. The syntax sugar makes for some very concise and expressive code too.Now I need to figure out a fun way to do spelling, since both of the kids like to write but English is really tricky to spell.
Both kids are now in school and reading significantly above grade level and I have different concern - their ability far outstrips their experience. So even though they can read large unfamiliar words, the subject matter of the stories that are challenging enough to be interesting to them deal with themes and experiences that are pretty foreign. Books that deal more with their experiences and interests are written at a much more basic reading level and are not interesting to them.
They seem to really enjoy reading but sometimes I wonder if early reading is really beneficial in the long run. On the other hand, I certainly read some books too young, but I don't really regret that, so maybe I'm just making up problems to worry about.
webserver: ring-jetty9-adapter[0]
routing: reitit[1]
html templates: hiccup[2]
never used an ORM, but happily used HugSQL for making composable queries[3].
[0]https://github.com/sunng87/ring-jetty9-adapter [1]https://github.com/metosin/reitit [2]https://github.com/weavejester/hiccup [3]https://www.hugsql.org/
I'd recommend Elements of Clojure[0].
Don't be fooled by the title, it's not really about Clojure, it just uses Clojure as an illustration as it discusses a very subtle general problem. From the website:
> The first chapter, Names, explains why names define the structure of our software, and how to judge whether a name is any good.
> The second chapter, Idioms, provides specific, syntactic advice for writing Clojure which is clean and readable.
> The third chapter, Indirection, looks at how code can be made simpler and more robust through separation.
> The final chapter, Composition, explores how the constituent pieces of our code can be combined into an effective whole.
I find it a thoughtful and considerate overview of an area that everybody has some implicit knowledge of, and something that leads to a more abstract concept of quality.
Of course, all this was thrown away in the next installment, so it turns out I'm the fool!
This is really useful for signing json-ld, it goes a bit further then regular normalization schemes like JCS by allowing different arrangements of the same data graph to hash to the same thing.
The precise/pedantic lisper may insist that since Lisp stands for List Processing and Lists are chains of cons cells and since Clojure doesn't have cons cells for the built-in lists, then Clojure is not a Lisp.
If, however, you view lisp (lower case) as a family of homo-iconic languages that use s-expressions, then Clojure happily fits under that umbrella.
The trick is to pay close attention to whether the person is talking about a Lisp (ANSI Common Lisp implementation) or a lisp (the family). Sometimes people say "lisp" when they are talking about "Lisp", which can cause some confusion.
Mutation is a deep magic that learners shouldn't start with. It's pure premature optimization. Also everything should be expressions, no statements, why force people to learn extra syntax? Thank you for listening to my TED Talk.
...but thank you for making this tool! I love the IDE - simple, clear, and self-documenting!