Thursday, August 02, 2018
when using m-x cider-scratch
, if using boot
, can add dependencies like this:
(set-env! :dependencies #(into % '[[org.clojure/data.json "0.2.6"]]))
(require '[clojure.data.json :as json])
watched this talk Domain-Driven Design: Hidden Lessons from the Big Blue Book - Nick Tune
speaker is author of these two books:
- Designing Autonomous Teams and Services (free book)
- Patterns, Principles, and Practices of Domain-Driven Design
compare two regions under emacs:
m-x ediff-regions-wordwise
orm-x ediff-regions-linewise
ediff
will prompt you to select the buffer and regions you wish to compare
continue reading Programming Clojure 3rd Edition
guidelines for FP (clojure-style):
- Avoid direct recursion. The JVM can’t optimize recursive calls, and Clojure programs that recurse will blow their stack.
- Use
recur
when you’re producing scalar values or small, fixed sequences. Clojure will optimize calls that use an explicitrecur
. - When producing large or variable-sized sequences, always be lazy. (Do not
recur
.) Then, your callers can consume just the part of the sequence they actually need. - Be careful not to realize more of a lazy sequence than you need.
- Know the sequence library. You can often write code without using
recur
or the lazy APIs at all. - Subdivide. Divide even simple-seeming problems into smaller pieces, and you’ll often find solutions in the sequence library that lead to more general, reusable code.
rule 3
is particular important to me
(defn lazy-seq-fibo
([]
(concat [0 1] (lazy-seq-fibo 0N 1N)))
([a b]
(let [n (+ a b)]
(lazy-seq
(cons n (lazy-seq-fibo b n))))))
then apply rule 5
:
(defn fibo []
(map first (iterate (fn [[a b]] [b (+ a b)]) [0N 1N])))
however, when using lazy seq, remember not to hold the head (first item) of a sequence, it prevents the garbage collector from reclaiming elements of the sequence
for example, check this question: How to forget head(GC'd) for lazy-sequences in Clojure? and documentation on lazy-cat
a detailed explaination on fold
: Exploring the fold Function from the book Clojure standard library
slides for a talk about aleph: Deep HTTP Dive Through Aleph and Netty
about linux disk io and nginx: How we scaled nginx and saved the world 54 years every day
nREPL added some supports for clj
:
add to ~/.clojure/deps.edn
:
{
:aliases {:nREPL
{:extra-deps
{nrepl/nrepl {:mvn/version "0.4.4"}}}}
}
then run headless nrepl server:
$ clj -R:nREPL -m nrepl.cmdline
Blog Archive
- Newer Entries
- 2018 September
- 2018 October
- 2018 November
- 2018 December
- 2019 January
- 2019 February
- 2019 March
- 2019 April
- 2019 May
- 2019 July
- 2019 October
- 2019 November
- 2019 December
- 2020 August
- 2020 September
- 2020 October
- 2020 November
- 2020 December
- 2021 January
- 2021 February
- 2021 March
- 2021 April
- 2021 May
- 2021 June
- 2021 August
- 2021 September
- 2021 December
- 2022 March
- 2022 April
- 2022 May
- 2022 June
- 2022 July
- 2022 August
- 2022 September
- 2022 October
- 2022 November
- 2022 December
- 2023 January
- 2023 February
- 2023 March
- 2023 April
- 2023 July
- 2023 August
- 2023 September
- 2023 October
- 2023 November
- 2023 December
- 2024 January
- 2024 February
- 2024 March
- 2024 April
- 2024 May
- 2024 June
- 2024 August
- 2024 September
- 2024 October
- 2024 November
- 2024 December
- Older Entries
- 2018 July
- 2018 June
- 2018 May
- 2018 April
- 2018 March
- 2018 February
- 2018 January
- 2017 December
- 2017 November
- 2017 October
- 2017 September
- 2017 August
- 2017 July
- 2017 June
- 2017 May
- 2017 April
- 2017 March
- 2017 February
- 2017 January
- 2016 December
- 2016 November
- 2016 October
- 2016 September
- 2016 August
- 2016 July
- 2016 June
- 2016 May
- 2016 April
- 2016 March
- 2016 February
- 2016 January
- 2015 December
- 2015 November
- 2015 October
- 2015 September
- 2015 August
- 2015 July
- 2015 June
- 2015 May
- 2015 April
- 2015 March
- 2015 February
- 2015 January
- 2014 December
- 2014 November
- 2014 October
- 2014 September
- 2014 August
- 2014 March
- 2014 February
- 2014 January
- 2013 December
- 2013 October
- 2013 July
- 2013 June
- 2013 May
- 2013 March
- 2013 February
- 2013 January
- 2012 December
- 2012 November
- 2012 October
- 2012 September
- 2012 August