Elixir: 函数装饰器

2017-05-06
阅读 2 分钟
4.6k
通过符号注解的方式, 给被注解的函数或对象添加新功能, 重写现有的功能, 而又不对现有的代码做变化的一种方法. 它对使用者是透明的. 通过装饰器可以实现的常用功能包括:

Elixir: 多太(Polymorphism)

2017-04-17
阅读 2 分钟
2.8k
多态(Polymorphism)按字面的意思就是"多种状态". 在面向对象语言中, 接口的多种不同的实现方式即为多态. 多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术, 赋值之后, 父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作. 简单的说, 就是一句话: 允许将子类类型的指针赋值给父类类型的指针. ...

Elixir: 作为Elixir函数的SQL查询工具库 - Defsql

2017-02-04
阅读 2 分钟
3k
Elixir的世界是函数的世界. 这里没有对象, 没有实例. 在这种情况下, 我问我自己一个问题. 我真的需要ORM吗? 我的答案是: NO. 我需要数据. 直接来自于数据库的纯粹的数据. 另一个我思考的问题是: 我需要一个查询数据库的DSL吗? 答案同样是否定的: NO. 其实, 我们已经有了一个现成的数据库查询语言, SQL, 记得么? 如果我创...

使用 Elixir 开发嵌入式系统: 使用DS18B20传感器测量体温

2016-12-20
阅读 4 分钟
3.6k
文本, 我会使用一个Elixir实现的模块函数去读取连接到树莓派的DS18B20温度传感器的温度数值. 文本假设你熟悉 数字电路基础 Elixir编程基础 视频演示 [链接] 原料 树莓派3, B型(图片省略, 下文有) DS18B20传感器 4.7KΩ 电阻(一分钱一颗) 面包板(图片省略, 下文有) 公母头杜邦线 连接温度传感器 接线图 面包板内部连通图 ...

使用 Elixir 开发嵌入式系统: 串口调试

2016-12-13
阅读 2 分钟
5.3k
问: 为什么需要串口调试?答: 因为显示器直连Respberry Pi的HDMI的启动信息无法向上滚动, 无法查看完整的启动信息, 非常不方便硬件调试.

使用 Elixir 开发嵌入式系统: 小试身手

2016-12-08
阅读 5 分钟
6.5k
有C下面的驱动开发经验. 你对Erlang或Elixir比较熟悉, 有Erlang/Elixir的项目经验. 你有硬件开发相关的经验. 原材料 清单 明细 Respberry Pi 3 Model B 一个 HDMI 转 DVI显示输出数据线一根 USB 电源一个 16G SD卡一张 SD 卡读卡器 过程 创建 Nerves 项目 第一步, 创建外层项目和子项目 {代码...} 配置 Nerves 项目 修改...

Elixir Cookbook: 生成伞状项目

2016-11-24
阅读 1 分钟
2.1k
App 是一个自包含的代码单元, 每个App都有一个名字 有时候, 一个应用程序可能是被引用的以其他语言实现的库. 这对代码的可重用和模块化是一个非常好的方式, 但有时把所有App放在一个项目作为一个整体纳入版本控制之下, 允许更加方便的进行测试, 集成等等. 伞状项目就是作为一个容器包含一个或多个App, 让他们就像一个单...

Elixir Cookbook: 管理应用程序配置

2016-11-24
阅读 2 分钟
1.9k
Mix 任务运行在一个特定的环境之中. 预定义的环境为产品,开发和测试(prod, dev, 和test). 默认环境为 dev. 在本节中, 我们为每个环境的相同配置赋予不同的值. 并基于特定的配置, 在不同的环境中调用相同的函数输出不同的配置值.

Elixir: Kitto, 一个创建仪表盘(Dashboard)的框架

2016-11-23
阅读 2 分钟
4.4k
Kitto 是一个用 Elixir / React 开发的, 帮助你创建仪表盘的框架. 用途 主要用作实时监控服务器的各个运行指标. 比如在一个游戏服务器中,Kitto 通过 SSE(服务器事件流) 连接到管理服务器获取服务器的运行状态指标. 达到实时监控的目的.

Elixir Ecto: 使用Arbor在Postgresql中实现邻接列表与树的遍历

2016-11-21
阅读 2 分钟
2.3k
Arbor 项目地址 什么是CTEs? 使用CTEs实现Ecto的邻接列表与树的遍历. Arbor 使用 parent_id 和 CTEs创建简单的树状结构. 使用 {代码...} 获取根级节点 {代码...} 获取兄弟节点 {代码...} 获取祖先节点 获取当前节点的先辈节点, 从下网上返回所有父辈节点. 主要用于显示一个分类导航路径(类似网站的Breadcrumbs面包屑功能...

Elixir: Supervision树的启动策略可视化

2016-10-26
阅读 1 分钟
2.2k
对于一个容错系统, Elixir(Erlang)的Supervision树提供了4种策略, 名称分别为: :one_for_one, :one_for_all, :rest_for_one, :simple_one_for_one.

Elixir Phoenix: 自定义布局模板文件

2016-10-16
阅读 1 分钟
2.7k
作用域范围 基于作用域范围, 可以在如下几个层次设置布局模板文件 基于Render函数的自定义 特定于某个render函数调用的自定义布局模板文件设置 {代码...} 控制器 在控制器级别设置布局模板 {代码...} 基于路由 在路由中设置模板 {代码...} 不使用布局 我们知道 put_layout 可以用于在不同的范围内设置模板使用的布局文件...

MTProto协议第一部分: 云聊天

2016-10-16
阅读 6 分钟
17.2k
[链接] 云聊天(服务器-客户端加密) 图例分析 共享秘钥(auth_key), 持久化的, 通过DH生成 实际的数据总是包含时间, 长度, 序列, 接收端应该在解密后检查这几个字段. msg_key 为 Server Salt, Session ID, 和实际的数据 Payload 的SHA1值的低128位. 整个协议包嵌入到传输层(TCP,HTTP) 解密后 msg_key 必须等于获取到的数据...

Elixir Ecto: 使用Geo库操作空间数据(地理坐标)

2016-10-16
阅读 2 分钟
4.3k
简介 数据格式 Abbr Fullname Description WKT Well Known Text 空间数据的文本标识 WKB Well Known Binary 空间数据的二进制标识 GeoJSON GeoJSON 基于Javascript对象表示法的地理空间信息数据交换格式GeoJSON Elixir 的 Geo 库提供了上述三种格式的相互转换函数. 配置 添加依赖 {代码...} 配置扩展 {代码...} 创建/删...

Collectd & InfluxDb & Grafana 之四: 在Elixir应用程序中收集度量信息

2016-09-28
阅读 4 分钟
6k
Elixir经常被称赞为一个跑的快的语言. 特别是在分布式, 并发应用程序方面. 但是 "快" 如果没有测量指标, 重构会变得异常困难, 也难于判断是否性能得到改善.

Collectd & InfluxDb & Grafana 之三: 应用程序运行指标统计

2016-09-23
阅读 2 分钟
3.8k
通过Elixometer搜集Elixir的运行时统计信息, 并存储到InfluxDB中, 提供给Grafana进行可视化. 应用程序统计 添加依赖 {代码...} 配置 config/config.exs, 内容如下: {代码...} 配置 config/dev.exs, 内容如下: {代码...} 在程序中使用 编写一个模块 {代码...} 运行它 {代码...} 到此, 你的应用程序会每隔5秒向你的InfluxD...

Elixir Ecto: 使用非持久化的Ecto Schema验证GET参数

2016-09-14
阅读 2 分钟
2.2k
HTTP是文本协议, 传递给服务器的参数全部都是字符串, 要在Elixir中使用, 需要转换为合适的类型. 本文使用Ecto Changset内置的cast/3函数对数据类型进行转换. 使用 validate_* 系列函数对参数的值进行验证. Ecto 相关函数文档为 [链接]

Erlang/Elixir: 用Distillery替换Exam打包器

2016-08-19
阅读 2 分钟
4.8k
Distillery 是一个新的在未来用于替换Exrm的Elixir应用程序发布工具. 它有比Exrm更快的构建速度, 完全用Elixir开发, 更灵活的配置, 目标是成为MIX本身的一部分, 作为Elixir的标准工具.

Erlang/Elixir: 外部通信之-C节点

2016-08-13
阅读 10 分钟
5.2k
系列:Erlang/Elixir: 外部通信之-NIFErlang/Elixir: 外部通信之-端口驱动Erlang/Elixir: 外部通信之-C节点 C节点使用Erlang提供的 Erl_Interface 与 Erlang VM进行交互, 因此需要在C文件中包含头文件:#include "erl_interface.h" 2016-08-14 更新: C节点多线程示例 [链接]

Erlang/Elixir: 外部通信之-端口驱动

2016-08-12
阅读 9 分钟
5.3k
系列:Erlang/Elixir: 外部通信之-NIFErlang/Elixir: 外部通信之-端口驱动Erlang/Elixir: 外部通信之-C节点 本文是Erlang/Elixir和外部世界通信的第一篇, 阐述了端口驱动的基本概念以及和外部世界的通信方式, 目前主要有如下几种方式 NIF Port Port driver C node 这一篇文章从端口驱动开始讲起, 后续的文章我会介绍其他...

Elixir Ecto: 范围数据类型

2016-08-10
阅读 3 分钟
2.9k
从 PostgreSQL 9.2 以来, 可以用特定的操作符和函数存储和查询一个值的范围. 这是一个非常不错的特性, 比如在电子商务应用程序方面, 可以用一个字段 price_range 来替代 min_price, max_price 表示一个价格范围.

Elixir Plug: 配置HTTPS支持

2016-08-08
阅读 1 分钟
3.2k
基于 Elixir Plug: 使用Plug开发Web应用程序, 阐述了如何在配置Plug的SSL支持. 过程 第一步: 生成秘钥和证书 {代码...} 第二步: 生成DH参数 {代码...} 这里为了省时使用1024, 正式环境建议4096, 大概半个小时的生成时间. 配置 Worker {代码...} 启动 {代码...} 测试 [链接] [链接] 如何测试 {代码...}

Elixir Ecto: 使用Whatwasit追踪模型的变更和版本化

2016-08-01
阅读 11 分钟
2.3k
Whatwasit 是一个跟踪Ecto模型变化的一个包, 用于审计和版本化. 审计在某些情况下是我们非常需要的, 比如我们需要知道谁在系统中修改了什么, 可以形成审计日志备后期进行审查. 注意: Whatwasit(读作: What was it) 需要Elixir 1.2的支持, 所以要使用 Whatwasit 请首先升级到Elixir 1.2以上

Elixir Ecto: 多数据库跨库查询

2016-07-31
阅读 2 分钟
2.9k
这篇文章说明了如何在Elixir应用程序中使用多个Repo. Repo可以是不同的数据库, 运行在不同的操作系统上. 本文以一个收藏夹的应用来展示如何在Elixir应用程序中使用多个库进行跨库操作.

Elixir Ecto: 在Postgresql中插入二进制数据

2016-07-30
阅读 2 分钟
4.5k
首先我们要知道 Postgresql 中唯一一种二进制数据的类型为 bytea, 表示字节数组或字节序列. 对应于Oracle和MySQL中的 blob.

Elixir Ecto: 复合(多列)唯一约束的Changeset校验

2016-07-30
阅读 2 分钟
2.8k
我们有这么一张表的迁移脚本 20160718132517_create_vehicle_change_owner_table.exs 描述了机动车过户的记录

Elixir Ecto: 解决UTC时间戳和本地时间8小时时差的问题

2016-07-13
阅读 5 分钟
5.8k
Ecto 默认使用的是UTC时间, 它要比中国区的本地时间晚 8 小时. 2016-07-21 更新: 模块已经添加到 Hex.pm, 添加 {:ecto_timestamps, "~> 1.0"} 依赖到mix.exs即可, 详细信息参考项目Ecto Timestamps 项目页面 注意, :autogenerate 需要 Ecto 2.0的支持. 所以要使用这个自定义选项, 需要升级到 Ecto 2.0

Elixir Ecto: PostgreSQL大自增长主键的设置

2016-07-02
阅读 2 分钟
3k
要解决的问题 数据库中存储的行数超过了 serial 类型所能容纳的数量, 因此需要采用 bigserial 类型的整数作为主键serial 的取值范围为: 1 到 2147483647bigserial 的取值范围为: 1 到 9223372036854775807

Erlang/Elixir: 使用 Leex 和 Yecc 解析领域语言(DSL)

2016-06-22
阅读 4 分钟
6.6k
本文需要对编译原理有一定的了解. Leex 是一个 Erlang 语言实现的词法分析器(Lexical Analyzer). 接收字符流输入, 产生符号流输出.Yecc 是一个 Erlang 语言实现的语法分析器(Syntactic Parser). 接收符号流输入, 产生AST.

使用 Rust 语言开发 Erlang NIF

2016-06-22
阅读 3 分钟
6.5k
Rustler 是一个在安全的用 Rust 编写 Erlang NIF 的库. 这里安全的含义是, 它不会导致 BEAM(Erlang 虚拟机)的崩溃. 该库提供了一个设施用于生成与BEAM交互的模板, 处理Erlang Term的编码和解码. Rustler 适用于 Erlang 和 Elixir, Elixir 是首选的.