I just booked my tickets for ElixirDaze conference in St. Augustine, FL, March 4th. It will be my first Elixir conference and Iâm really looking forward to it. I hope to you see you all there!
Iâll be there!
Damn, so close yet so far! Should have been in Miami, an easier destination for everybody to reach.
I was just about to say @kblake is a speaker!
@sergio - welcome to my world - we rarely get any conferences here in South Wales
I will look forward to seeing the youtube videos
Iâll be there! Really excited to meet yâall.
Iâll be there, too, and itâs my first Elixir conference as well! Iâm looking forward to it!
I wish to attend it. But i am in India.
Is there a way to get there? Visa, travel expenses and ticket.
Do you mean like a sponsorship? If so I am not aware of anything.
âŠYouâll have to catch up via youtube vids like the rest of us who canât make it - hereâs hoping there will be some anyway
How did you all get on? Got any pics to share?
Does anyone know if they recorded the talks? Will they be up anywhere?
You can check out some photos and livetweets of the conference topics on Twitter. It was really a good time! For me, it drove home the fact that Elixir is a small and vibrant community that is a lot of fun to be a part of. And it was really cool to see all the challenging problems people were solving with Elixir. Great speaker and talk lineup that all seemed to build on each other. A++ would recommend Next year it will be in Orlando, apparently, and probably a two-day conference.
Keep an eye on Confreaks for videos from the conference. All the talks were recorded.
Thanks both
I had been keeping an eye on Twitter, hadnât seen this little vid tho:
Looks like it was a nice venue and a fantastic turnout - pleased you had a great time James!
Will definitely be keeping an eye out for the Confreaks vids (didnât know they were going).
Edit: Oh the âliveâ Twitter feed is much better - lots more pics I havenât seen! I think I spotted a few Elixir Forum members too
Thatâs me across from the table where the camera guy is sitting. Great seat! Next to him is Garth Hitchens who works on Nerves and who I was able to talk with briefly. Raspberry Pi 3 support is coming soon, and they are working on a way for people to code support for their own favorite platforms.
I may write up some of my notes from the conference here. The Elixir Meetup in Boulder, CO will be going over the conference, so maybe I will write here after this Tuesday.
That would be great, thanks James
I hadnât heard of Nerves before, looks like a great project (and this video on embedding Elixir looks interesting).
Are you sitting next to who looks like @soundstruck? If so cool beard! (I can never get past the stuble stage!). The whole crowd looks great.
Below are some of my notes from the conference. I hope someone finds these helpful.
Keynote by Rob Conery
He was out with food poisoning. Johnny Wynn presented his slides for him, but there is no Confreaks video of it.
- hashtag
#myElixirStatus
- peers are gonna test your idea (of using Elixir)
- Fowlerâs Law & DHH quote: âDonât distribute your objectsâ
- Mavericks (surfing) wave â no one believed him
- Put your Elixir code in production and show them how itâs done!
Explicit Elixir by Paul Lamb
- starting an Elixir group
- make website (Discourse?)
- Tweet out Google Hangouts link
- doesnât take a lot to get started
- José Valim
- Elixir pushes toward explicit rather than implicit
- instead of hiding state in objects
- Elixir pushes toward explicit rather than implicit
- Dave Thomas
- âAll programming is just transformationâ
-
|>
pipelines tell the data transformation story - Write comment for each transform step to show how data transforms
- For each Enum function, break it out into a nice named function and test it.
Plugs are functions. Web applications are pipelines of plugs.
â Programming Phoenix
connections
|> endpoint
|> router
|> pipelines
|> controller
- Start with pattern matching
- Use idioms âŠ
- When you need to check the output of a pipeline, use
with
-
CAUTION:
if
andunless
:- probably not pattern matching correctly
- if more than one condition âŠ
-
CAUTION:
get_
andset_
functions- thinking in objects
- When you need to check the output of a pipeline, use
- Mystical guru side of Elixir
- processes, distribution, OTP, supervisors
Design by Contract in Elixir by Elba SĂĄnchez
elixir-contracts
on GitHub- âLet it crashâ means âit shouldnât crashâ
- Design by Contract (DbC) has its roots in Hoareâs logic
- formal reasoning & verification
- DbC vs. Testing
- Pre-condition vs. Post-condition
- if pre-condition fails: blame the client
- if post-condition fails: blame yourself!
- In Eiffel:
require do ensure end
- âWhen quality is pursued, productivity follows.â
- Reliability
=>
Correctness and Robustness - Clojure has DbC natively
- DbC in Elixir
- MACROS!
- Rule #1: Donât write macros (think, Fight Club)
- Rule #2: Use macros gratuitously
- MACROS!
Processing Millions of Images - David Padilla
@dabit
- David Padilla on Twitter- (May not be the right way)
- He used this project to learn Elixir
- Ruby 2.0 has global lock on threads
- Ruby uses all CPU cores but gives unexpected results without some (extra) work
- Pipe together Ecto query params
- Use Erlport to use other languages
- Naa, use Erlcloud to upload to S3
- make arguments to [Erlang functions with] charlist not string
- Naa, use Erlcloud to upload to S3
-
:poolboy
- worker pool factory-
:size
is always on -
:max_overflow
- as needed for processes
-
- From 31.5 days w/ Ruby @ 1 second per image to 4 days w/ Elixir @ 0.128 seconds per image
Building a Neural Network from Scratch with Karmen Blake
- What does a neural network (NN) do?
- task => pattern recognition
- continually adapting through training
- changes its internal structure through flow of data
- back propagation => update connection weight
- delta of error rate becomes smaller
-
âTransform all the dataâ
- Structs:
- Neuron
- Connection
- Layer
- Problems connecting NN layers by copying structs
- Structs:
-
HowIStart.org - José Valim
- Use Agents to keep state
- Use PID to reference neuron
- Data is not duplicated
- stays in sync, easier to transform and connect layers
- Data is not duplicated
- Macro & micro data transformations
- Macro - transform whole neural network is too hard, and maintaining state
- Micro - easy, list update,
|>
use liberally
- Use bitwise operations to train neural net
- We know the expected outputs!
- Output error delta over thousands of training epochs
-
mix docs
andmix test.watch
- Alchemist + Spacemacs
Adventures in Robotics by Jean-François Cloutier
- slides
ev3
on GitHub- ev3dev
- Linux exposes Mindstorms sensors as files under
/dev
- Linux exposes Mindstorms sensors as files under
- Global & mutable state; side effects (robot) with functions / immutable data (Elixir)
- Marvin Minsky
-
defstruct
s for:- Percept
- Motive
- Intent
- Finite State Machine (FSM) for behavior
- triggered by motive
- reacting to percepts w/ intents
- Generating concurrent control loops
- OTP to implement society of agents
- perfect fit
- robot supervisor (see slide below)
- Monitor GenEvent w/ GenServer. Otherwise, its failure is silent
Nerves - Getting Started and the Road Ahead by Garth Hitchens
- for embedded control systems
- Actor model is uniquely capable of managing complex hardware behavior
- Platform, framework, tools
- Read-only filesystem for long-term stability
- No RPi3 support yet
Building and Testing API Endpoints with Phoenix by Brian Cardadella
- DockYard hired Chris McCord to protect their investment in Phoenix
- Using JSON API
- schema is pre-defined
- helpful for consuming many APIs
-
ja_serializer
to cover edge cases
- Configure plug for JSON API MIME
- Encrypt password in
changeset()
-
Inquisitor - composable query builder for Ecto
- abstracts out recursive build post Ecto query
- Leverage pattern matching to build complex API controllers
- Voorhees for testing JSON API
-
auth_test_support
-
require_authorization
for boilerplate testing 401, roles authorize_as()
-
-
valid_field
- test changesets
- doesnât work well for testing DB constraints
-
ExUnit
+Ecto
:@tag fixtures [:users]
- âComposability is king.â
Elixir, Phoenix, and WebRTC - An Enterprise-Class Soft Phone in the Browser by Stephen Pallen
smpallen99/webrtc_example
-
SpeakEx
andExAdmin
- WebRTC for phone in Browser
- draftspec for audio, video, data
- P2P
- Client state machine (GenFSM)
- GenServers, Agents, Supervisors
- Asterisk - FOSS telephony (UDP)
- Use Agent to save/recover state if GenFSM fails
- Admin on separate port & auth
- run under same supervisor
- Production:
- Remove debug info - set in
mix.exs
-
exrm
=> rpm -
conform
for config - syslog
- Remove debug info - set in
- WebRTC not quite ready
- No out-of-the-box for handling migrations w/
exrm
-
migrate ecto
runs on host
-
Keynote: New Heights by Chris McCord
- Tsung for benchmarking (a lot of server work)
- Rackspace: 2 million clients on $1300/mo server
- Groundbreaking
- ulimit was set to 2M
- Use case: maybe 2M nerves devices
- weather devices for emergencies
-
timer_send_interval
vs.process_send_after
- ETS:
:bag
vs.:duplicate_bag
-
:bag
inserts in linear time -
:duplicate_bag
inserts in constant time - shard subscriptions to solve timeouts from mass unsubscribe
- parallelize subscribe
-
-
Phoenix.Presence
- uses cutting edge CS research in conflict-free replicated data types (CRDT)
- ORSWOT
- heartbeat protocol
%CRDT.Delta{}
- Local node concerns: user may be connected from many devices or browser tabs
- what happens when one client disconnects?
- Multi-node concerns: use Redis? naa
- ephemeral data, so Redis is too much
- orphaned users if client crashes
- other platforms donât solve presence well
- Vector clocks for catching up on missed deltas
- PubSub adapters work on Heroku
- Heroku doesnât do clusters
- uses cutting edge CS research in conflict-free replicated data types (CRDT)
- Ecto 2.0
- subqueries
- many-to-many associations
- insert structs
- async transactions/tests
- Good platforms drive you toward optimal solutions
- Following the principles produces fast, maintainable programs
Awesome summary! Thanks for posting!