ElixirDaze conference - March 2016

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! :003:

@sergio - welcome to my world - we rarely get any conferences here in South Wales :lol:

I will look forward to seeing the youtube videos :023:

1 Like

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! :smiley:

1 Like

I wish to attend it. But i am in India.
Is there a way to get there? Visa, travel expenses and ticket.

1 Like

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 :lol:

1 Like

How did you all get on? Got any pics to share? :lol:

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 :smiley: 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.


I assume the videos will show up here at some point: https://www.youtube.com/user/Confreaks


Thanks both :slightly_smiling:

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 :003:



That’s me across from the table where the camera guy is sitting. :wave: 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 :023:

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.

Yup! Nice to meet you, @soundstruck.

1 Like

And nice to meet you, too @uranther!


ElixirDaze 2016 talks are up! :slight_smile:


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
  • 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

|> endpoint
|> router
|> pipelines
|> controller
  • Start with pattern matching
  • Use idioms …
    • When you need to check the output of a pipeline, use with
    • CAUTION: if and unless:
      • probably not pattern matching correctly
      • if more than one condition …
    • CAUTION: get_ and set_ functions
      • thinking in objects
  • 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:
  • “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

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
  • :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
  • 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
  • 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 and mix 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
  • Global & mutable state; side effects (robot) with functions / immutable data (Elixir)
  • Marvin Minsky
  • defstructs 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
  • 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 and ExAdmin
  • 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
  • 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
  • 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!