ecto_autoslug_field version 1.0.0 release
ecto_autoslug_field is a reusable ecto library which can automatically create slugs for schemas from other fields.
With the new release we now support ecto >= 3.0 and latest elixir versions.
Empex 2019 - Los Angeles Elixir Conference 2/2/19
Hi all, the Empex organizing committee wanted to let you know there’s an upcoming Elixir conference in Los Angeles - Sat Feb 2, 2019. The agenda, ticketing information, and talk summaries can be found at our conference site at http://empex.co/la.html, along with more details. It is also featuring Nerves Training by the amazing Nerves team members Frank Hunleth and Justin Schneck! @nervesproject
Please help us spread the word! We’re proud to announce that this year we are one of the premier Elixir conferences featuring a wonderfully diverse lineup of speakers. And yes, we still plan on having a disco ball! #techdiversity #myelixirstatus @elixirlang @empexco
Distributed Phoenix Chat using Redis PubSub
Distributed Phoenix Chat using Redis PubSub
In this article we see how to solve an issue we faced in the previous article, scaling horizontally the Phoenix Chat app. We’ll see how to integrate the PubSub Redis adapter to our chat app, and make it distributed.
Decoding JSON into Elixir Structs
This post covers a few things I learned when decoding JSON into Elixir structs.
https://davidtang.io/2019/01/22/decoding-json-into-elixir-structs.html
Serving Plug: Building an Elixir HTTP server from scratch
To understand how HTTP servers work, we’ll implement a minimal example of one that can run a Plug application. We’ll learn about decoding requests and encoding responses, as well as how Plug apps interact with web servers.
https://blog.appsignal.com/2019/01/22/serving-plug-building-an-elixir-http-server.html
How To Get Struct Type In Elixir
Three ways on how to quickly get the type of a struct in Elixir.
http://mattheakis.com/blog/view.php?name=how_to_get_struct_type_in_elixir
PDX |> Elixir |> Group - Monthly Meetup Feb 20th
Elixir Monitoring Tools: Observer, New Relic, Telemetry and more
Presented by: Vince Foley
Arcdown: a plain-text blogging format w/parser
Last week I invented a simple plain-text blogging format called Arcdown (.ad) to assist in publishing rich-featured blog posts in a simple plain-text format. It currently supports these attributes:
- title
- slug
- author/email
- topics/sub-topics
- tags
- article summary/content
It’s compatible with Markdown and presumes you’ll parse the article content with a library like Earmark. I’ve written a relatively robust Arcdown parser and published it to hex as version 0.1.1:
- source: https://github.com/functionhaus/arcdown
- hex package: https://hex.pm/packages/arcdown
- docs: https://hexdocs.pm/arcdown/0.1.1/readme.html
This will be developed into the backend of a plain-text blogging engine called Archivist, somewhat like Nabo but tailored for a more robust featureset. Any thoughts, PRs, or feedback are welcome :)
~Mike
Utah Elixir meetup: "Mox" library for defining concurrent mocks in Elixir
Utah Elixir meetup recording on January 17, 2019: Denver Smith is talking about Mox, an Elixir library for defining concurrent mocks.
ElixirMix Podcast 034 - First Nerves project with Anders Smedegaard Pedersen
In this episode of ElixirMix, the panel talks with Anders Smedegaard Pedersen about overcoming the fear of “doing it wrong” and getting started. We talked about Nerves project structure and organization, community standards, contexts, domains, Poncho projects with Nerves and much more!
Avoid these OTP Supervision performance pitfalls
Jose dropped a gem in a recent discussion on elixir-lang-core that for me was totally non-obvious, so I decided to write about it:
https://medium.com/@derek.kraan2/avoid-these-otp-supervision-performance-pitfalls-c3fe64e70f9e
An illustrated breakdown of the bitwalker/libcluster library
The library works like magic, while the illustrations and annotations I use to explore it will make you cringe!
https://medium.com/@TehBrofessor/whats-going-on-in-libcluster-76f239f00d57
From Rails to Elixir: Safe Rewrites with NOOP Deployments
System rewrites are hard. Mitigate risks by planning carefully and doing it incrementally.
https://dev.to/jdcosta/from-rails-to-elixir-safe-rewrites-with-noop-deployments-40cb
Create a High-Availability Kubernetes Cluster on AWS with Kops
Create a High-Availability Kubernetes Cluster on AWS with Kops
This week I’ve published an article mainly focused on DevOps. I show how to create a High-Availability Kubernetes cluster on AWS with Kops and deploy a Phoenix Chat application.
I explain the basics to have our own HA Kubernetes cluster on the cloud, so we can later (in further articles) experiment and discuss on the deployment of Distributed Elixir applications.
Credo Plus 1.0.1 Released
I’ve released the first version of CredoPlus. It’s a place for cool features not in Credo - but that you want anyway.
This release adds:
- the report_card command (with HTML output!)
- a check for code coverage
Learning How To Loop in Elixir Through Recursion
My latest post about looping in #Elixir through recursion. I rebuilt a few Enum functions as a learning exercise. It was super interesting seeing pattern matching, function clauses, and the cons operator all work together.
https://davidtang.io/2019/01/13/learning-how-to-loop-in-elixir-through-recursion.html
Cool CLIs in Elixir with IO.write/2
Use IO.write/2 to craft cool CLI output
https://dennisbeatty.com/2019/01/09/cool-clis-in-elixir-with-io-write-2.html
Monitoring Your Elixir App with Telemetry
See how to use Telemetry to hook into your app and record Prometheus metrics. This is a continuation of the previous post on instrumenting your app for Prometheus.
Bolt Routing Driver, the Bolt+Routing Neo4j driver that supports clustering
At Badi, we open sourced a few weeks ago Bolt Routing Driver, the Bolt+Routing Neo4j driver that supports clustering for Elixir using bolt_sips.
It means that you can send a read query to the driver and using one of the load balancing strategies will forward it to a chosen core.
# We need to specify when we are sending a write query that will require to be sent to the leader
iex> Bolt.RoutingDriver.write_query("CREATE (n:Person { name: 'Adrian' })")
[debug] [Bolt.RoutingDriver] localhost:7687 query...
{:ok,
%{
stats: %{"labels-added" => 1, "nodes-created" => 1, "properties-set" => 1},
type: "w"
}}
# Then we can send read queries, that will be executed in a different follower each time
iex> Bolt.RoutingDriver.read_query("MATCH (n:Person {name: 'Adrian'}) RETURN n")
[debug] [Bolt.RoutingDriver] localhost:7688 query...
{:ok,
[
%{
"n" => %Bolt.Sips.Types.Node{
id: 0,
labels: ["Person"],
properties: %{"name" => "Adrian"}
}
}
]}
# Now, it will run in a different follower
iex> Bolt.RoutingDriver.read_query("MATCH (n:Person {name: 'Eduard'}) RETURN n")
[debug] [Bolt.RoutingDriver] localhost:7689 query...
{:ok, []}
Any feedback or suggestion is more than welcome!
