[elixir! #0030] 在 elixir 项目中使用 RiakKV (1) -- Riak CRDT 数据结构

2017-03-14
阅读 1 分钟
2.6k
数据类型 set: 一个 set 内的数据是不可重复的. counter: counter 的值只能是整数. map: 可以包含其它的数据类型. 以下两种数据类型只能包含在 map 或 set 中使用: register: 值为字符串 flag: 值可以是 true 或 false 设置 Bucket 类型 (名称可以为任意字符串) {代码...} try it 处理 Counter {代码...}

[elixir! #0029] 在elixir中使用ets(1)

2017-03-13
阅读 1 分钟
1.7k
ETS 全称为 Erlang Term Storage, 常用于作为一种缓存机制, 适合存储大量的数据. 新建一个 ets 表 :ets.new(:bucket, [:set, :protected] 第一个参数是表的名称, 第二个参数是设置选项, 其中包括: type set 一个 key 一个数据, 无顺序 ordered_set 一个 key 一个数据, 有顺序, 相等的 key 会被当成同一个, 例如 1 和 1.0...

[elixir! #0028] 掌控元编程的魔法(1) ---- 宏的卫生性

2017-03-11
阅读 1 分钟
2.5k
宏的卫生(hygienic)是指, 我们在宏里赋值的变量, 不会对宏之外的变量造成影响. 例如: {代码...} 虽然我们在宏之内将 a 赋值为 1, 但 a 的值仍然为 10. 如果我们想打破宏的卫生性, 使用宏来更改变量的值, 那么我们就需要使用 var!宏: {代码...}

[elixir! #0027] 在 elixir 项目中使用 RiakKV 数据库(0)

2017-03-10
阅读 1 分钟
2.4k
riak KV 是一个分布式的键值存储数据库. 这里我使用的操作系统为 ubuntu 16.04. 配置riak 安装好riakKV之后, 我们需要将 riak.conf 文件中的 nodename修改为本机的 IP 地址. {代码...} 删除 ring 文件 {代码...} 启动 riak {代码...} 使用 riak elixir 客户端 新建 elixir 项目 {代码...} 在mix.exs文件中添加依赖 {代码...

[elixir! #0026][译] Phoenix 1.3.0-rc0 发布 by Chris Mccord

2017-03-06
阅读 4 分钟
2k
如我们承诺的, Phoenix 1.3.0 的第一个版本发布了! 这个版本专注于改进后的项目结构中的代码生成, 对于伞型项目的一流支持, 以及新的脚手架, 使得 phoenix 成为你的更大的 Elixir 应用的 web 接口. 我们还在 Phoenix.Controller 中包含了新的 action_fallback 功能, 能让你把普通的数据结构转换成合法的回应. 在实践中, ...

[elixir! #0025] 在 elixir 中模仿 lisp :)

2017-02-16
阅读 1 分钟
1.9k
Lisp 在 lisp 里我们可以这样写 {代码...} Elixir 在 elixir 中我们可以利用宏来达到类似的效果 {代码...} 来看看效果 {代码...} 纯属娱乐:)

[elixir! #0024] 引擎盖下, `Channel.push` 如何运作

2017-02-10
阅读 3 分钟
1.7k
第一次接触 phoenix 框架时, 照着官网的教程做了一个聊天网页. 服务器可以在 channel 里广播消息, 还可以 push 消息给单个用户. phoenix 究竟是如何做到的. 我们先看看该函数的定义

[elixir! #0023] 引擎盖下, `IO.puts` 如何运作

2017-02-09
阅读 4 分钟
2.4k
接触elixir时, 学会的第一行代码是 IO.puts "Hello world!". 出于好奇, 我观察了一下 IO.puts 函数的实现.

[elixir! #0022][译] 用Elixir和Elm做个混音web应用:后端-Part II by Jeff Cole

2016-12-29
阅读 5 分钟
3.2k
最后的也时最复杂的功能就是在后端平衡每个channel topic 或者说"jam"中的用户.从这里开始, 我们要离开Phoenix提供的便捷, 开始使用Elixir OTP 服务器来处理应用的 state.

[elixir! #0021][译] 使用Phoenix和Websockets创建一个游戏大厅系统 by Alex Jensen

2016-12-27
阅读 6 分钟
5k
随着Phoenix web 框架进入大家的视野, 许多人惊讶于它对 websockets 优秀的支持, 以及用它创建一个"hello world" 聊天应用是多么简单. 鉴于 websockets 在 Phoenix 中的一等公民地位, 我想可以用它来解决一些比简单的聊天应用更难的问题. 在本文中, 我们将了解如何使用Phoenix 创建一个包含邀请功能的游戏大厅.

[elixir! #0019][译] 测试Phoenix WebSockets by Alex Jensen

2016-12-27
阅读 4 分钟
3.4k
在开始之前, 我们需要运行 mix test, 先删除一些默认的测试, 并解决测试中的小问题. 当我们编写测试之前, 希望没有其它的错误消息. 接着, 删除所有Phoenix generator 自动生成 channel 测试, 因为我们将要从头开始编写它们.

[elixir! #0020][译] Elixir 和 Elm 制作的交响乐应用Part.1 by Jeff Cole

2016-11-08
阅读 4 分钟
2.2k
当我开始学习 Elixir 和 Phoenix 时, 让我最震惊的部分是它对实时网络连接的一流支持.一旦你掌握了 Elixir , 并习惯于函数式编程, 你就可以愉快地使用Phoenix 为我们设置好的 socket 和 channels 抽象.

[elixir! #0018] 漫话源代码之 GenEvent

2016-11-04
阅读 3 分钟
1.9k
2016年的 elixir 大会上, Jose 提到了一个重要的项目 “GenStage”. 并声明它将取代 elixir 中原有的标准库 GenEvent. 那么, GenStage 到底有什么用处, 它比 GenEvent 又优越在哪里呢?

[elixir! #0017] Supervisor 究竟怎么用

2016-11-04
阅读 2 分钟
3.5k
初学 Elixir, 我常常对 Supervisor 的概念感到疑惑. 没有Supervisor, 程序也能正常运行, 为什么还要加上这个东西呢? 原来, 这和 Erlang 的基本信条 —— “就让它崩溃” 有关, 在 Erlang 中, 是没有 try…rescue 这样的错误救援机制的. 取而代之的是 Supervisor 机制, Supervisor 是一个专门用来监督进程的进程, 每当它的名下...

[elixir! #0016] 在 phoenix 项目里配置 elm

2016-11-03
阅读 1 分钟
2.3k
mkdir web/elm && touch web/elm/App.elmcd web/elmelm package install -y

[elixir! #0015][译] 学习 GenStage by Joseph Kain

2016-11-02
阅读 3 分钟
2.1k
你好! Leraning Elixir的读者!从我的上一篇文章发表已经过去了很长时间。我一直专注于其他技术,并获得了新的工作。我要感谢我的朋友Doug Goldie,让我在那段时间里仍然关注Elixir。我要感谢我的妻子鼓励我回到这个博客上。

[elixir! #0014][译] 与 socket 来一次零距离接触 by Saša Jurić

2016-11-02
阅读 6 分钟
3.6k
几个月前,我们目睹了Phoenix团队在单个服务器上建立了200万个并发连接。在此过程中,他们还发现并消除了一些瓶颈。整个过程记录在这篇优秀的文章里。这个成就绝对是伟大的,但阅读的过程中我想到了一个问题:我们真的需要一堆昂贵的服务器来研究我们的系统在负载下的行为吗?

[elixir! #0013] 漫话源码之 GenEvent

2016-11-01
阅读 1 分钟
1.6k
GenEvent 有许多应用场景, 例如, 构建一个日志收集系统. 不同的 log 消息对应不同的处理方式. 有的消息会在终端打印出错误信息, 有的会写入文件, 有的会保存在内存中.

[elixir! #0012] 漫话源码之Agent

2016-11-01
阅读 2 分钟
1.9k
我们知道 Elixir 有一个从 Erlang 那里继承来的重要特性 —— immutable, 所以我们不能像 OO语言那样简单地用变量存储临时数据. 因此, Agent 出现了.

[elixir! #0011] 打开一个phoenix网站时发生了什么?

2016-10-31
阅读 3 分钟
3.4k
当我们在浏览器中输入 https://www.phoenix-china.org/ , 按下回车后, 我们将访问phoenix-china论坛. 这是一个使用phoenix框架搭建的网站. 我们省略掉域名的解析等过程, 跟随我们的connection,直接进入phoenix, 看看究竟发生了什么.

[elixir! #0010] 漫话elixir源码之Task

2016-10-31
阅读 1 分钟
2.6k
Task最主要的作用就是, 将顺序代码转换为并发代码. 在并发代码中, 我们不需要等前一步执行完毕, 就可以同时开始执行下一步; 最后收集一下各个Task的结果就行了.

[elixir! #0009] 漫话elixir源码之gen_server

2016-10-31
阅读 3 分钟
2.4k
什么是GenServer? {代码...} 是 generic server 的缩写, 意为通用服务器. 这个模块里包含了所有实现一个服务器所需的最基本的函数. GenServer的工作原理是什么? 本质就是客户端发送请求, 服务器做出相应动作. GenServer模块中有哪些基本函数? {代码...} 回调函数initial/1 , 作用是确定服务器初始化时的状态. {代码...} ...

[elixir! #0008] [译] 理解Elixir中的宏——part.6 现场代码生成 by Saša Jurić

2016-10-23
阅读 10 分钟
2.4k
这是宏系列的最后一篇。在开始之前,我想提一下Björn Rochel,他已经将他的Apex库中的deftraceable宏改进了。因为他发现博客版本的deftraceable不能正确处理默认参数(arg \ def_value), 于是实现了一个修复。

[elixir! #0007] [译] 理解Elixir中的宏——part.5 重塑AST by Saša Jurić

2016-10-21
阅读 5 分钟
1.6k
上一章我们提出了一个基本版的deftraceable宏,能让我们编写可跟踪的函数。宏的最终版本有一些剩余的问题,今天我们将解决其中的一个——参数模式匹配。

[elixir! #0006] [译] 理解Elixir中的宏——part.4 更进一步 by Saša Jurić

2016-10-21
阅读 6 分钟
2k
在上一章中,我们展示了一些分析和处理输入的AST的基本方法。今天我们来看一些更复杂的AST转换。主要是重复一些已经解释过的技术。目的是表明,深入AST并不是很难,虽然结果的代码会很容易地变得相当复杂并有点hacky。

[elixir! #0005] [译] 理解Elixir中的宏——part.3 深入AST by Saša Jurić

2016-10-21
阅读 5 分钟
3.2k
目前为止,你只见到了基础的宏,它们得到AST片段,然后将其结合起来,周围加上一些模板。我们没有分析或解析输入的AST,所以这可能是最干净(或者说最少hack技巧)的编写宏的方法,得到的会是容易理解的简单的宏。

[elixir! #0004] [译] 理解Elixir中的宏——part.2 微观理论 by Saša Jurić

2016-10-18
阅读 6 分钟
2.5k
这是 ‘Elixir中的宏’ 系列的第二篇。上一次我们讨论了编译过程和Elixir AST,最后讲了一个基本的宏的例子trace。今天,我会更详细地讲解宏的机制。

[elixir! #0003] [译] 理解Elixir中的宏——part.1 基础 by Saša Jurić

2016-10-17
阅读 7 分钟
4k
这是讲解macro(宏)的系列文章中的第一篇。我本来计划将这个话题放在我的书《Elixir in Action》里,但还是放弃了,因为那本书的主要关注的是底层VM和OTP中重要的部分。

[elixir! #0002] [译] 在Phoenix中实现动态表单 by José Valim

2016-10-16
阅读 6 分钟
2.7k
今天我们将要学习如何在Phoenix中使用我们的schema信息来动态地构建带有合法性检查,报错等功能的输入框。我们的目标是在模板中支持下列API:

[elixir! #0001] 初探channel,理解最简单的聊天频道

2016-10-07
阅读 3 分钟
5k
Channel 是 Phoenix 框架中的一种高级抽象,也是Phoenix中最激动人心的部分。它可以方便地实现客户端之间的软实时通信,今天我们就来用它来构建一个最简单的聊天频道。主要目的是理解 Channel 的使用方式。