Author: Robert Virding (Co-inventor of Erlang)
Slides: pdf
Video: youtube
Latency Comparison Numbers (~2012) | |
---------------------------------- | |
L1 cache reference 0.5 ns | |
Branch mispredict 5 ns | |
L2 cache reference 7 ns 14x L1 cache | |
Mutex lock/unlock 25 ns | |
Main memory reference 100 ns 20x L2 cache, 200x L1 cache | |
Compress 1K bytes with Zippy 3,000 ns 3 us | |
Send 1K bytes over 1 Gbps network 10,000 ns 10 us | |
Read 4K randomly from SSD* 150,000 ns 150 us ~1GB/sec SSD |
Всем известный мультяшный персонаж Mr. Freeman составил список книг к прочтению. Хочешь мыслить шире, читай. | |
1.Данте Алигьери «Божественная комедия» | |
2.Аристотель «Политика» | |
3.Александр Афанасьев «Русские заветные сказки» | |
4.Ричард Бах «Чайка по имени Джонатан Ливингстон» | |
5.Александр Беляев «Продавец воздуха» | |
6.Энтон Бёрджесс «Заводной апельсин» | |
7.Михаил Булгаков «Великий канцлер» | |
8.Михаил Булгаков «Мастер и Маргарита» ☑ |
(ns net.cgrand.decay | |
"Exponentially decaying lists. See http://awelonblue.wordpress.com/2013/01/24/exponential-decay-of-history-improved/ | |
for background and http://clj-me.cgrand.net/2013/02/12/decaying-lists-log-scale-for-lists/ for documentation") | |
;; PRNG, formulas straight from java.util.Random javadoc | |
(defn- seed ^long [^long n] | |
(bit-and (unchecked-multiply n 0x5DEECE66D) | |
(unchecked-dec (bit-shift-left 1 48)))) | |
(defn- next-seed ^long [^long seed] |
;; Now, replace the loop by more telling operations. | |
(defn tarjan | |
"Returns the strongly connected components of a graph specified by its nodes | |
and a successor function succs from node to nodes. | |
The used algorithm is Tarjan's one." | |
[nodes succs] | |
(letfn [(sc [env node] | |
; env is a map from nodes to stack length or nil, nil means the node is known to belong to another SCC | |
; there are two special keys: ::stack for the current stack and ::sccs for the current set of SCCs |
Recent improvements to the ClojureScript compiler have greatly simplified setting up development versus production outputs.
This example uses Figwheel as something that you want to exclude for production, but the pattern is general.
With this simple setup you only need one html file/view and it will work for developement and production.
Picking the right architecture = Picking the right battles + Managing trade-offs
A list of commonly asked questions, design decisions, reasons why Clojure is the way it is as they were answered directly by Rich (even when from many years ago, those answers are pretty much valid today!). Feel free to point friends and colleagues here next time they ask (again). Answers are pasted verbatim (I've made small adjustments for readibility, but never changed a sentence) from mailing lists, articles, chats.
How to use: