Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
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
33
gen_statem - OTP's Unsung Hero
whatyouhide
2
300
The World is a Network (and We Are Just Nodes)
whatyouhide
1
240
BEAM: The Perfect Fit for Networks
whatyouhide
1
230
Update from the Elixir team - 2022
whatyouhide
0
440
Testing Asynchronous OTP
whatyouhide
1
550
Elixir Sightseeing Tour
whatyouhide
0
460
Mint - Disrupting HTTP clients
whatyouhide
0
280
BEAM Architecture Handbook
whatyouhide
7
2.9k
Other Decks in Programming
See All in Programming
AIエージェントのキホンから学ぶ「エージェンティックコーディング」実践入門
masahiro_nishimi
5
440
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
なぜSQLはAIぽく見えるのか/why does SQL look AI like
florets1
0
460
16年目のピクシブ百科事典を支える最新の技術基盤 / The Modern Tech Stack Powering Pixiv Encyclopedia in its 16th Year
ahuglajbclajep
5
1k
AI & Enginnering
codelynx
0
110
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
170
Grafana:建立系統全知視角的捷徑
blueswen
0
330
カスタマーサクセス業務を変革したヘルススコアの実現と学び
_hummer0724
0
690
Data-Centric Kaggle
isax1015
2
770
AI前提で考えるiOSアプリのモダナイズ設計
yuukiw00w
0
230
CSC307 Lecture 05
javiergs
PRO
0
500
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
430
Featured
See All Featured
Docker and Python
trallard
47
3.7k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
340
Color Theory Basics | Prateek | Gurzu
gurzu
0
200
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
170
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
120
We Have a Design System, Now What?
morganepeng
54
8k
Statistics for Hackers
jakevdp
799
230k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.1k
The Cost Of JavaScript in 2023
addyosmani
55
9.5k
GraphQLの誤解/rethinking-graphql
sonatard
74
11k
Thoughts on Productivity
jonyablonski
74
5k
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