$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Papers we love: Elixir edition
Search
Andrea Leopardi
July 16, 2018
Programming
5
1.1k
Papers we love: Elixir edition
Andrea Leopardi
July 16, 2018
Tweet
Share
More Decks by Andrea Leopardi
See All by Andrea Leopardi
The Umbrella and the Range
whatyouhide
0
26
gen_statem - OTP's Unsung Hero
whatyouhide
2
280
The World is a Network (and We Are Just Nodes)
whatyouhide
1
240
BEAM: The Perfect Fit for Networks
whatyouhide
1
220
Update from the Elixir team - 2022
whatyouhide
0
430
Testing Asynchronous OTP
whatyouhide
1
540
Elixir Sightseeing Tour
whatyouhide
0
450
Mint - Disrupting HTTP clients
whatyouhide
0
280
BEAM Architecture Handbook
whatyouhide
7
2.9k
Other Decks in Programming
See All in Programming
大体よく分かるscala.collection.immutable.HashMap ~ Compressed Hash-Array Mapped Prefix-tree (CHAMP) ~
matsu_chara
2
220
エディターってAIで操作できるんだぜ
kis9a
0
740
ローカルLLMを⽤いてコード補完を⾏う VSCode拡張機能を作ってみた
nearme_tech
PRO
0
110
これだけで丸わかり!LangChain v1.0 アップデートまとめ
os1ma
6
1.9k
非同期処理の迷宮を抜ける: 初学者がつまづく構造的な原因
pd1xx
1
730
Full-Cycle Reactivity in Angular: SignalStore mit Signal Forms und Resources
manfredsteyer
PRO
0
150
TerraformとStrands AgentsでAmazon Bedrock AgentCoreのSSO認証付きエージェントを量産しよう!
neruneruo
0
130
組み合わせ爆発にのまれない - 責務分割 x テスト
halhorn
1
150
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
4
520
Canon EOS R50 V と R5 Mark II 購入でみえてきた最近のデジイチ VR180 事情、そして VR180 静止画に活路を見出すまで
karad
0
130
Giselleで作るAI QAアシスタント 〜 Pull Requestレビューに継続的QAを
codenote
0
230
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
1.3k
Featured
See All Featured
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
390
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
The Invisible Side of Design
smashingmag
302
51k
Getting science done with accelerated Python computing platforms
jacobtomlinson
0
70
Making Projects Easy
brettharned
120
6.5k
What's in a price? How to price your products and services
michaelherold
246
13k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
The Language of Interfaces
destraynor
162
25k
The Cult of Friendly URLs
andyhume
79
6.7k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
47k
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
Transcript
PAPERS WE LOVE ELIXIR EDITION PAPERS WE LOVE ELIXIR EDITION
@whatyouhide
None
None
None
None
None
“You know Yelp? Yeah, but for weed”– me
None
None
“You know Uber Eats?”– me
None
weedmaps.com/careers
ELIXIR functional concurrent fault tolerant
The Elixir core team
we existing research
Formatting code Diffing data structures Property-based testing ⚙
FORMATTING CODE
Code formatter welcoming to newcomers consistency across teams/orgs/community no style
discussions
print code with line length limit
%{foo: [1, 2, 3], bar: "baz"}
%{foo: [1, 2, 3], bar: "baz"} 30
%{foo: [1, 2, 3], bar: "baz"} 25
%{ foo: [1, 2, 3], bar: "baz" } 25
%{ foo: [1, 2, 3], bar: "baz" } 13
%{ foo: [ 1, 2, 3 ], bar: "baz" }
13
The Design of a Pretty-printing Library John Hughes
Documents "text" concat(document1, document2) nest(document, columns)
"[" |> concat("1,") |> concat("2,") |> concat("3") |> concat("]") [1,
2, 3]
"[" |> line("1,") |> line("2,") |> line("3") |> nest(2) |>
line("]") [ 1, 2, 3 ]
A Prettier Printer Philip Wadler
group( "[" |> concat("1,") |> concat("2,") |> concat("3") |> nest(2)
|> concat("]") ) [ 1, 2, 3 ]
choose( doc, replace_concat_with_line_break(doc) ) DANGER: STRICT LANGUAGE AHEAD
Strictly Pretty Christian Lindig
Our documents color(doc, :blue) nest(doc, :cursor) ...
DIFFING DATA STRUCTURES
1) test two strings are different (Test) test.ex:6 Assertion with
== failed code: assert "hello world!" == "Hello, my world" left: "hello world!" right: "Hello, my world" stacktrace: test.ex:7: (test)
None
An O(ND) Difference Algorithm and Its Variations Eugene W. Myers
“Find the shortest edit script to turn a sequence A
into a sequence B.” = Find shortest path in a graph
O(ND) D is related to how "similar" the two sequences
are DNA strand mutation source code changes
iex> List.myers_difference([1, 4, 2, 3], [1, 2, 3, 4]) [eq:
[1], del: [4], eq: [2, 3], ins: [4]]
Now colorize
No modifications to the paper this time
String Matching with Metric Trees Using an Approximate Distance Ilaria
Bartolini, Paolo Ciaccia, Marco Patella
PROPERTY-BASED TESTING
Shape of input Properties of output + + Randomness =
Property-based testing
check all list <- list_of(term()) do sorted = sort(list) assert
is_list(sorted) assert length(list) == length(sorted) end
String.starts_with?(s1 <> s2, s1) String.ends_with?(s1 <> s2, s2) For any
strings s1 and s2:
Only Erlang tools (with different license)
QuickCheck: A Lightweight Tool for Random Testing of Haskell Programs
Koen Classen John Hughes
all the base ideas are there but it relies too
heavily on types
data Colour = Red | Blue | Green instance Arbitrary
Colour where arbitrary = oneof [return Red, return Blue, return Green]
(prop/for-all [v (gen/vector gen/int)] (= (sort v) (sort (sort v))))
Clojure's test.check
StreamData check all s1 <- string(), s2 <- string() do
assert String.starts_with?(s1 <> s2, s1) assert String.ends_with?(s1 <> s2, s2) end
Generators functions that take some random state and return a
lazy tree
Lazy tree a value plus a "recipe" for shrinking it
StreamData.integer() 3 0 2 0 1 0
StreamData.integer() 3 0 2 0 1 0
map(StreamData.integer(), fn x -> x * 2 end) 3 *
2 0 * 2 2 * 2 0 * 2 1 * 2 0 * 2
map(StreamData.integer(), fn x -> x * 2 end) 6 0
4 0 2 0
HONORABLE MENTIONS
How to make ad-hoc polymorphism less ad hoc Philip Wadler
Stephen Blott
Recursive functions of symbolic expressions and their computation by machine
John McCarthy
Advances in record linkage methodology as applied to the 1985
census of Tampa Florida Matthew A. Jaro
Iteratee: Teaching an Old Fold New Tricks John W. Lato
CONCLUSIONS
Existing research is AWESOME
Research tends to solve problems in a general/simple/flexible/elegant way
HDD Hughes-driven development
@whatyouhide