Elixir - Ecto的建模与查询教程

最近两个月来用Elixir写了2个独立的项目,其中都涉及到Ecto查询MySQL。因为Ecto的models和query例子是分开的,一些特别的写法只有看源码才知道如何处理,这里记录下以便以后查阅。

Elixir - 连接Erlang nodes并调用其中的函数

越来越觉得Elixir乃至Phoenix是代替Erlang神器,类ruby的语法和强大的release包管理等插件,确实节省了大量的开发时间。而且PhoenixFramework提供了一套较为完整的Web框架,使构建一个WebServer乃至资源更新/live_reload都做的井井有条。不过老服务依然是跑在Erlang节点上的,有些像cache等还必须与Erlang节点通信。于是这两天写了个rpc的GenServer封装,方便像调本地函数一样call远程节点(Erlang/Elixir)的函数。

inaka - gold_fever for Erlangers

对inaka没什么好感,是因为inaka_json里封装的那个难用的json结构。不过最近看到他们新开源的一个GameServer gold_fever: A Treasure Hunt for Erlangers,正好可以一睹带状态的游戏Server写法。

gensim:关于 word2vec 模型的训练与效果对比

word2vec是Google开源的word to vector工具,通过将词映射到N可配的向量空间,然后基于这个进行聚类、找近似词以及词性分析等。关于word2vec原理和核心算法CBOW(Continuous Bag-Of-Words)、Skip-Gram,有道的同学那篇Deep Learning 实战之 word2vec已经解释得很详细了,不过里面对训练word2vec并不十分详细。这里记录下用社交网络的短语料,训练python版gensim的word2vec,并给出几种参数下的结果对比。

在Elixir中通过cqerl操作Cassandra的方法

项目中需要操作Cassandra,目前ecto不支持于是用了erlang的第三方库。这里记录下遇到的麻烦,算是为Elixir中使用Cassandra增加点资料吧。

解决Cassandra Schema不一致导致的 Column family ID mismatch

说到Cassandra,一般会想到为了支持分页不得不将数据存成多份,每当这个时候都会无比怀念MySQL里想怎么撸就怎么撸的便利性。而实际使用中,最讨厌的还要属”Column family ID mismatch”。从Cassandra的issues列表就能看到,无论在哪个版本都存在CF ID不一致导致的问题:CASSANDRA-8387 / CASSANDRA-6038 / CASSANDRA-5202,而实际上就算线上更新到Cassandra 2.1.5,不小心还是会遇到多节点同时建表导致的同步异常。各种血的教训下终于明白,不要重复修改Schema!不要重复修改Schema!不要重复修改Schema!(因为很重要所以说三遍

用函数式语言计算区间的 merge 和 subtract - Elixir实现

最近遇到个计算两个人是否在某个位置相遇的问题,推演了几遍发现最终问题被归为两个:一是查询某个时间段是否与其他用户的时间段又交集;二是求两个人在相同geohash下的几个时间段相减的结果(subtract interval),并且记录用户在该区域下的活动时长(merge interval)。

在CentOS上安装 OpenStreetMap Nominatim v2.4

Nominatim是一个OpenStreetMap的Server,geocoder又提供了比较好的封装,于是打算搭一个本地用。

Elixir - 升级 maru v0.3.1 与maru_swagger的配置

这几个月过得真有点七荤八素,连blog的更新都搁置了。包括之前升级PixivPy遇到的问题,以及学习Elixir时遇到的难点。说实话,Elixir写代码比Erlang要简单,用上Plug这样神奇的库后,处理请求再也不像之前那样令人头疼。

Pixiv老接口停用提醒,请迁移PixivPy的SAPI到新的PAPI

周三晚用RankingLog爬P站图片,突然发现什么都抓不到了。因为最近要找房子这事一直拖到今天(都是借口…),直到抓包才发现原来Pixiv已经抛弃了用了几年的SAPI。