来自 Elixir Radar, ElixirDaily, ElixirWeekly. 有任何对文章的补充和错误之处欢迎邮件指出: zengzhilgATgmail.com
PS: elixir简讯的邮件订阅服务正在构建中ing, 敬请期待 : )

Params Modules for Phoenix

通常传到服务器的参数都应该是不可信的, 要处理这些数据我们可以通过所谓的 Params 模式(pattern) 对这些传入controller的参数做校验和处理. 其核心利用了Ecto中的 Ecto.schema 和 Ecto.Changeset, 难怪ecto现在将sql层分离作为一个单独的库了, 用Ecto我们也不需要和数据库打交道哇. 想知道更多ecto不那么常用的用法请参考
Lonestar ElixirConf 2019 - Ecto Without a DB - Greg Vaughn (youtube)

Nightly Tasks with a GenServer

Eric 使用GenServer为自己的游戏系统做了一个简单但有效的定时任务服务. 使用了Process.send_after/4handle_continue/3

ExDoc v0.20

Wojtek 介绍了新版ExDoc带来的更多方便功能, 包括 快捷键支持, 文档搜索补全于原文搜索支持以及一些其他的特性.

Micro: Read cmd line pipes in elixir

Regis 在其博客展示了如何将终端输出导入Elixir中处理的方法.其实在*nix系统中已经内置一些方便的处理方式, 不过Regis用elixir处理的方式也别具一格.

Cleaning up Phoenix Controller Actions

Damon 提供了一种好的模式(pattern)来清理将大量变量通过render传入到view层时render参数太长的问题. 解决的重点在于使用Phoenix提供的assign/3这样原本的写法

  1. def index(conn, _params) do
  2. ....
  3. conn
  4. |> put_flash(:info, "Hello")
  5. |> render("index.html",
  6. users: users,
  7. foo: foo,
  8. bar: bar,
  9. long_variable_name: long_variable_name,
  10. other_var: get_other_var(),
  11. last_var: last_var
  12. )
  13. end

就可以写成

  1. ...
  2. conn
  3. |> put_flash(:info, "Hello")
  4. |> assign(:users, users)
  5. |> assign(:foo, foo)
  6. |> assign(:bar, bar)
  7. |> assign(:long_variable_name, long_variable_name)
  8. |> assign(:other_var, other_var)
  9. |> assign(:last_var, last_var)
  10. |> render("index.html")

Elixir protocols, how do they work? the erlang perspective

Mariano 从erlang的角度研究了下Elixir中的protocals是如何实现的. 要弄懂的话估计需要对erlang有点了解. 有兴趣的不妨一看.

Real World Phoenix |> A LiveView Dashboard

Tjaco Oostdijk 使用Liveview做了一个今年ElixirConf的倒计时页面, 还顺便加了个实时显示twitter相关讨论的小组件. 据他所说,由于现在和conf相关的推还不多, 可以试试改成#apple的推文试试, 估计内容会刷的飞起.

The Elixir AST explained using the AST Ninja

Arjan Scherpenisse 给elixir社区带来了一个叫做 AST Ninja 的小工具, 可以将elixir代码显示为对应的抽象语法树(AST), 该工具是一个开源的工具. 我感觉用LiveView应该会很好实现, 不知道是不是的.


一些看到比较有用的视频教程网站

pragmaticstudio
包含elixir, ruby还有前端的视频资料. 按课程打包收费

elixircasts
以elixir相关内容为主, 订阅制, 部分内容免费