Instantly share code, notes, and snippets.

View decode.txt
Operating System: macOS"
CPU Information: Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz
Number of Available Cores: 8
Available memory: 16 GB
Elixir 1.7.0-dev
Erlang 21.0
Benchmark suite executing with the following configuration:
warmup: 5 s
time: 30 s
View on_conflict.ex
defmodule Upa.VideoWatchProgress do
def save(attrs) do
struct(Upa.VideoWatchProgress, attrs)
|> changeset
|> Upa.Repo.insert(on_conflict: insert_conflict_strategy(attrs))
|> case do
{:error, _} = error -> raise Upa.DatabaseCommandError
{:ok, changeset} -> :ok
end
end
View event_consumer.ex
defmodule UpaEventSourcing.VideoWatchProgress.EventAggregator do
def start_link(event) do
Task.start_link(fn ->
Upa.VideoWatchProgress.save(event) #Saves to the database
end)
end
end
defmodule UpaEventSourcing.VideoWatchProgress.EventConsumer do
use ConsumerSupervisor
View application.ex
children = [
worker(UpaEventSourcing.VideoWatchProgress.EventStore, []),
worker(UpaEventSourcing.VideoWatchProgress.EventConsumer, [
%{producer: UpaEventSourcing.VideoWatchProgress.EventStore,
processor: UpaEventSourcing.VideoWatchProgress.EventAggregator}
])
]
View config.exs
config :upa, video_watch_progress_min_demand: 1
config :upa, video_watch_progress_max_demand: 192
config :upa, Upa.Repo,
adapter: Ecto.Adapters.MySQL,
hostname: "host.example.com",
database: "our_database",
username: "${MYSQL_USR}",
password: "${MYSQL_PWD}",
pool_size: 48
View event_store.ex
defmodule UpaEventSourcing.VideoWatchProgress.EventStore do
use GenStage
@event_processing_timeout 11 #Max seconds to process a track video watch progress event
def start_link() do
View video_watch_progress_controller.ex
#Phoenix Action
def track_time(conn, params) do
RequestParamsHandler.prepare(conn, params)
|> EventStore.enqueue #Send to GenStage pipeline
send_resp(conn, 201, "")
end
View upa_event_sourcing_application.ex
#Supervision Tree definition for Events
children = [
worker(UpaEventSourcing.VideoWatchProgress.EventStore, []),
worker(UpaEventSourcing.VideoWatchProgress.EventConsumer, [
%{producer: UpaEventSourcing.VideoWatchProgress.EventStore,
processor: UpaEventSourcing.VideoWatchProgress.EventAggregator}
])
]
View elixirconf-2017-recap.md

Elixir Native UI - Boyd Multerer https://www.youtube.com/watch?v=77FW-jrCyCs

Thinking In Ecto - Darin Wilson https://www.youtube.com/watch?v=YQxopjai0CU

  1. Repository pattern https://youtu.be/YQxopjai0CU?t=2m12s
  2. Explicitness https://youtu.be/YQxopjai0CU?t=5m29s