每周收集和 Elixir 相关的文章和讯息.

有任何对文章的补充和错误之处欢迎邮件指出: zengzhilgATgmail.com

Finding bugs with property based testing in a statistics calculation

Tobias Pfeiffer 分享了两个使用基于属性测试( Property based testing) 发现代码错误的例子.

The “How”s, “What”s, and “Why”s of Elixir Telemetry

Samuel Mullen 在这篇文章介绍了 Telemetry 的功能和使用方法.

BEAM + Rust: A match made in heaven

Erlang 的 BEAM 虚拟机有众多先进高效的特性, 但是并没有完美的语言.比如 BEAM 在处理计算密集型的任务时并不是十分高效. 如果能将 BEAM 和 Rust 结合起来就可以取长而补短了. 在这个视频中 SONNY SCROGGIN 介绍了 如何扩展 BEAM 使其和 Rust 沟通, 并且介绍了 Rust 的特点.

Distributing Phoenix — Part 2

这是配置分布式 Phoenix 应用系列文章中的第二期(所以我完美错过了第一期), Erik 在这篇文章中涵盖了如何使用 HordeDeltaCrdt 将业务逻辑分布式处理. 这里也附上该系列的第一篇 Distributing Phoenix — Part 1: Kubernetes and Elixir 1.9 walk into a bar… 注意这里使用了 Elixir 1.9 新的 release 哟.

Health Checks for Plug and Phoenix

Johanna 分享了一个简单高效的方式配置一个用于状态监测( health checks )的路由, 其核心是添加一个 Plug 直接返回 200 结果, 这样就不需要经过 Phoenix.Router 部分处理了.

  1. defmodule HealthCheck do
  2. import Plug.Conn
  3. def init(opts), do: opts
  4. def call(%Plug.Conn{request_path: "/health_check"} = conn, _opts) do
  5. conn
  6. |> send_resp(200, "")
  7. |> halt()
  8. end
  9. def call(conn, _opts), do: conn
  10. end

Scenic - Getting Started from Scratch

Lars 为 Scenic UI 框架写了一篇入门的教程. Scenic 是一个基于 OpenGL 非常有趣的 UI 框架, 我们可以将他部署在嵌入式设备中提供 UI 显示功能, 更加有趣的是 UI 上显示的各个组件是相互独立的 Process, 这意味着如果一个组件挂掉不会影响到其他的组件. 这里有一个 Scenic 作者的介绍视频 ElixirConf 2018 - Introducing Scenic A Functional UI Framework - Boyd Multerer

Refactoring Phoenix Controllers

Hubert 分享了一些关于 Phoenix Controller 重构的方法. 涉及的方法有以下几个大块

  1. 将重复的逻辑重构为. 比如和用户验证相关的逻辑.
  2. 将 controller 中的逻辑重构为 Workflow (Service). 重点用到了 with 这个关键字.
  3. 使用 Ecto 的 Schema 来做表单验证.

Passwordless Authentication from Scratch with Phoenix

Jonathan Sutherland写了一篇在 phoenix 项目中构建无密码用户认证( passwordless authentication)功能的文章. 文章将以下的功能点都覆盖到了

  1. 允许用户只通过邮箱注册
  2. 允许用户只通过邮箱登录
  3. 登录私密链接通过邮箱发送
  4. 链接使用一次后失效
  5. 未使用链接一段时间后失效
  6. 登录后记录 session
  7. 允许用户登出

作者还贴心的给出了网站的代码 repo : repo