JavaScript 小知识, 加没加 prototype , 用法大不同

2019-10-12
阅读 1 分钟
1.4k
只有加了 prototype 的方法才能被实例访问到. 新建一个类 {代码...} 直接添加个方法 {代码...} 再为 Pig 的 prototype 添加一个方法 {代码...} 新建实例 {代码...} 耶✌️

JavaScript新建实例不需要带 new 的小技巧

2019-10-12
阅读 1 分钟
916
让我们可以不加 new 地新建实例. 首先, 需要使用function而不是class. {代码...} 测试一下 {代码...} 所以, 可以这样 {代码...} 试试 {代码...} 耶✌️

[elixir! #0048] 好玩的时间戳数据格式

2019-05-20
阅读 3 分钟
1.8k
逝者如斯夫, 不舍昼夜. 时间戳的处理恐怕是我们日常编程中经常要面对的问题, 尤其是涉及到国际服务的时候, 如何存储正确的时间, 就特别重要. 一般我们使用 UTC 时间, 也就是 0 时区的时间作为标准时间. 获取当前的 UTC 时间戳: {代码...} 这得到的是个啥?其实是一个 struct: {代码...} 这里面有 calendar, 翻译成 历法 ...

[erlang] 什么是supervisor_bridge

2018-07-28
阅读 2 分钟
1.9k
在OTP的源代码中,我发现了一个陌生的behaviour,名为supervisor_bridge。它的作用是什么,和普通的supervisor又有什么区别呢?

重新启用的 op codes 的用例 by Steve Shadders

2018-03-21
阅读 4 分钟
2.1k
作为启用这些旧操作代码规范的共同作者,我承认未能理解社区对这个修改的明确解释的胃口。在开发人员中,可以认为脚本语言中基本操作的用例非常普遍,因此不需要声明。我们每天都会多次使用像算术,字符串操作和按位逻辑这样的基本操作,而在没有它们的情况下编写任何有用的代码几乎是不可想象的。

关于OP_RETURN

2018-03-08
阅读 1 分钟
4.4k
在比特币的每一笔交易信息中,包含input和output两个部分。output里的脚本又称验证脚本,input里的脚本又称调用脚本。要想花掉交易A的ouput中的比特币,就需要构造一个交易B,能够使B的调用脚本满足A的验证脚本。

交易是所有权的转移

2018-03-07
阅读 2 分钟
2k
当谈到比特币的时候,我们会听到各种描述:“比特币是一个数据库,里面保存了交易。”,“比特币是一个虚拟机,能够执行脚本。”,“比特币是分布式账本”等等。其实,在描述一个新事物的时候,人们通常会用旧的概念来做类比,反映出新事物的某些特点。那么我们今天就来观察一下比特币的“交易”究竟是什么样的。

一门基于stack的命令式语言

2018-03-06
阅读 2 分钟
2k
Forth FORTH 语言由 Charles H.Moore 在 1970 年设计。 让我们来看一下这门语言的一些代码: {代码...} 让我们用来模拟一下stack(栈)的状态: {代码...} 可以发现只需要从左到右按顺序把指令压入栈就可以了。 CR 表示将栈顶的内容输出到新的一行, . 表示语句结束,返回 ok。 再看一个复杂一点的例子: {代码...} 这段...

[rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因

2017-11-09
阅读 8 分钟
5.7k
([链接] 30 July 2015 如标题中明示的, 今天我要写一下Rust标准库中带来的 traits, 特别是从标准库作者的角度, 向用户提供一个好的体验. 注意, 我将"内置"定义为"Rust安装包中所自带的". 这些 traits 没有特殊的语言机制. Rust 在很多地方使用了 traits, 从非常浅显的操作符重载, 到 Send, Sync 这种非常微妙的特性. 一...

[rust! #003] markers

2017-11-03
阅读 1 分钟
2.1k
在rust中, 可以根据类型(Type) 的固有属性来将它们分类, 这些分类就表现为 特性(trait). 有一些 trait 和 struct 是用来表明类型的某些基本属性的. 例如:

[rust! #002] rust 中的关键字(Keywords)

2017-11-02
阅读 1 分钟
3.5k
as: 基本类型变换, 消除某个项中包含的特定trait的歧义性, 或者是重命名use和extern crate中所用到的项. break: 立刻退出一个循环. const: 常量项以及常量原始指针. continue: 继续下一个循环迭代. crate: 连接外部crate, 或者是一个宏变量以表示宏定义所处于的crate. else: if 和 if let 控制流结构的回退. enum: 定义...

[rust! #001] rust 中的基本类型 (primitive types)

2017-11-01
阅读 1 分钟
2k
array: [T; N] 数组, 长度需要在编译时就确定为非负整数N; 元素的类型T要相同. bool: 布尔类型. char: 字符类型. f32, f64: 32位和64位的浮点数. fn: 表示函数. 例如: fn(usize) -> bool. i8, i16, i32, i64: 8位, 16位, 32位和64位的有符号整数. isize: 表示长度(size)的有符号整数. pointer: 原始, 不安全的指针, ...

[elixir! #0047] 简单对比record, map, keyword

2017-09-26
阅读 3 分钟
2.7k
今天写个suan好了, 不是大蒜的suan, 是算盘的算. 有个人一直和我争, erlang里面record和map哪个更好. 我语重心长,循循善诱: "就用map啦, 多方便, record是什么鬼, 不就是tuple吗". 那人还不服: "record速度比map快多了, map辣鸡". 那我今天就来算一下, 看谁打脸.

[elixir! #0046] 由elixir的config文件直接生成 `sys.config`

2017-09-02
阅读 1 分钟
2.2k
通常, 在 elixir 项目 release 之后, 都会生成一个 sys.config 文件. 包含了项目的配置信息. 这个文件是由 erlang 的列表加元组层层嵌套而成, 对于不熟悉 erlang 的人来说, 可读性较差, 修改起来也很麻烦. 所以, 我们能否直接将 elixir 的配置文件转换成 sys.config , 或者是, 直接使用一个 mix 命令就可以生成 sys.conf...

[elixir! #0045] 确认路径上的文件夹都存在

2017-08-18
阅读 1 分钟
1.9k
{代码...} 确认路径上的文件夹都存在, 如果不存在则新建. 也可使用 {代码...}

[elixir! #0044] `mix.exs` 文件中的 application 设置选项

2017-08-16
阅读 1 分钟
1.9k
:applications在运行时, 你的应用所依赖的所有应用. deps 中的所有应用都会默认加到这个列表里. 这个列表里的应用会在你的应用之前按顺序启动.

[elixir! #0043] 精确到 1bit 的字符串处理

2017-08-12
阅读 1 分钟
2k
1 byte(字节) = 8 bit(比特), 1 bit 在 elixir 中表现为 <<0~255>>.长度可以被8整除的 bit 串, 即为 binary, 也就是 elixir 中的字符串.

erlang 快速排序算法, 单核与多核版本

2017-08-08
阅读 2 分钟
3.1k
前几天在书上看到 quicksort 算法, 于是到 rosettacode 上找了一下 erlang 的实现. 原理 {代码...} 首先找到一个参照值(pivot), 再把所有元素分为(<pivot)和(>=pivot)两部分, 再重复此步骤直到排序完成. 单进程版本 {代码...} 多进程版本 {代码...} rosetta 上的多进程版本有点小bug, 顺手修复了:) 测试 测试数据...

[elixir! #0042] 与 rust 的初次会面

2017-07-10
阅读 5 分钟
2.6k
在看了许多安利 rust 的视频之后, 我决定花一个月的时间来尝试一下 rust. 一周过去了, 我对 Ownership, Lifetime 这些概念还是一头雾水, 但我也不求立刻理解 rust 里所有的概念, 因为它的其它部分同样引人注目.

[elixir! #0041] I, Actor

2017-07-02
阅读 2 分钟
2.2k
计算机科学中的演员模型是并行计算的数学模型,将“演员”视为并行计算的通用原语。 响应于收到的消息,演员可以:做出本地决定,创建更多演员,发送更多消息,并确定如何响应接收到的下一条消息。 演员可以修改私人状态,但只能通过消息相互影响(避免需要任何锁)。 ---- Wikipedia

使用 RabbitMQ 的详细步骤(elixir版本)

2017-06-29
阅读 1 分钟
3.2k
启动 rabbitmq 服务 在安装好 rabbitmq 之后, 运行: {代码...} 打开浏览器 [链接] , 就可以看到rabbitmq的管理界面了. 默认账号 guest, 密码 guest. 使用amqp amqp 是 elixir 版本的 rabbitmq 客户端. 在 elixir 项目中添加依赖: {:amqp, "~> 1.0.0-pre.1"}, 你也可以到hex.pm上查找更稳定的版本. 建立稳定的 rabbitm...

[elixir! #0039] run_erl ---- elixir服务器打包后的日志配置

2017-06-28
阅读 1 分钟
2.7k
当我们使用 distillery 等工具将 phoenix 服务器项目打包, 运行之后, 我们会在项目的根目录发现 var/log 文件夹, 其中包含了服务器运行时产生的日志. 我们可以通过 run_erl 来对这些日志进行配置.

[elixir! #0038] Map 的玩法

2017-05-16
阅读 2 分钟
2.8k
Map 是 elixir 中经常会用到的一种 key-value 数据结构。它有着 使用简单,顺序无关,可以用任何值做 key,可模式匹配 等优点。

[elixir! #0037] Agent 小传

2017-05-15
阅读 1 分钟
1.6k
Agent 是 elixir 中引入的一个新的抽象。 它建立在 GenServer 之上,它的实现非常简单。基本的机制就是 agent 进程接收一个函数, 然后对它的 state 执行这个函数。

[elixir! #0036]关于 elixir 应用的配置

2017-05-10
阅读 4 分钟
2.7k
最近完成了一个 elixir 项目, 打包发布之后, 却遇到了一些问题. config 文件中的配置信息, 都在编译的时候固定了, 打包之后就无法更改配置了. 为了解决这个问题, 实现运行时的配置, 我查询了一些资料, 整理成本文.

[elixir! #0035][译] 单进程, 还是多进程? by Saša Jurić

2017-04-24
阅读 10 分钟
3.8k
是将所有东西放在一个进程里, 还是, 把我们所需的 state 中的每一小块各自放在单独的进程中, 这是个问题. 在本文中, 我将讨论使用和不使用进程. 我还会讨论如何将复杂的状态逻辑与其它关系分开, 例如时间行为以及跨进程通信.

[elixir! #0034] 将 Logger 日志保存到硬盘

2017-04-13
阅读 1 分钟
3.2k
提供了 debug, info, warn 和 error 等级的日志. Logger 支持多个 backend, 默认的是 console, 即在控制台里显示错误信息. 我们将使用 logger_file_backend 来实现 Logger 数据的持久化. 你可以根据 Logger 的文档自己实现一个 backend.

[elixir! #0033] 在 elixir 项目中使用 riak 数据库(2) ---- 启用 solr 搜索

2017-03-16
阅读 2 分钟
1.7k
Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展并对查询性能进行了> 优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。

[elixir! #0032] 在 elixir 中使用 ets (2) ---- 匹配查询

2017-03-16
阅读 1 分钟
2.3k
上次我们介绍了 ets 表的基本配置方法, 这次我们将通过 phoenix pubsub 的源码来了解 ets 中的一些其他操作方法. 新建 ets 表 {代码...} 这里 ets 表中元素允许重复的 bag, 同时允许并发读写, 最大限度提升性能. 插入新数据 {代码...} 新的数据以 {key, value} 的形式插入. 匹配并删除 {代码...} 匹配 ets 表中的数据, ...

[elixir! #0031] 掌控元编程的魔法(2) ---- 编译时生成大量函数

2017-03-15
阅读 2 分钟
2k
网络媒体类型(MIME type) 是互联网通信协议中很重要的一部分,每种 MIME 类型对应着任意种文件的扩展名. elixir 的 mime 包实现了 mime 类型和扩展名之间的转换. 让我们来看看它的实现方法. mime.types 文件 {代码...} 该文件中包含了一千多种 mime 类型的对应关系. 首先, 我们在编译时读取这个文件的内容: {代...