1. "Smoothing Your Rust Crates Release With Cargo-release"

    Cargo-release is a cargo subcommand that automates your libraries release process. The idea was inspired by Clojure's leiningen, which has a release command does exact same thing.

    Typically, when you decide to release a library to crates.io, you need to go through following steps at least:

    • bump version in …
  2. "Handlebars 的 rust 实现"

    本来一度感觉到用过 Clojure 之后很难对新语言产生兴趣了,还好遇到了 Rust 再次激活了这方面的生命力。今年的重点之一是学习 Rust 语言,方便自己能真正 touch bare metal。1月17号的 Rust 聚会上发现很多人都持有类似的想法。 C++ 之后鲜有这种语言,以至于之后成长起来的一代人都是在一个 VM 里编程,无论是 Java 还是 Python,最终都没有办法自己去管理内存,Rust 的出现给了大家一个机会。一个具备现代特性的系统编程语言,Zero runtime,可以运行在各种设备上。去年还给程序员杂志写了一篇 Rust 的文章,结果导致现在程序员杂志停刊了。

    扯远了,和当时学 Clojure 一样,这次的计划还是写一个正经的项目来促进学习。关于时机的选择,主要是 crates.io 仓库的发布基本上标志生态圈开始建立了,这个时候写东西就方便很多了。

    这次选的就是实现 Handlebars …

  3. "AVOS Cloud 实时通信服务架构:微服务和服务发现"

    “微服务” (Microservice) 是今年特别热的一个概念,Martin Fowler 的文章对微服务作了详细的介绍。简而言之,微服务鼓励用户把功能拆分以细粒度的服务接口暴露出来,并通过REST 服务或轻量级消息队列集成。在微服务架构里,一个业务的实现,可能由不同的功能单元组合而实现。

    在 AVOS Cloud,我们提供数据存储、统计、实时通信等不同功能的服务,在实现上,这些功能需要共用基础设施,有的服务本身也根据业务性质的不同拆分功能模块,我们目前就是以这种“微服务”架构思路来实现拆分。有句话说,if you cannot split, you cannot scale.

    以实时通信服务为例,根据功能角色的不同,我们有这样一些模块:

    • Push 服务:处理推送的订阅关系,触发推送
    • 长连接服务器:维持设备与服务的长连接
    • Router:应用层的 lookup,负责分配合适的长连接服务器给新设备
    • WatchDog:从多台长连接服务器收集运行和统计数据,对异常情况发起报警 …
  4. "在 Docker 中安装和使用 Rust nightly 版本"

    一直关注 Rust 语言,最近一下发现了两个 web 框架,IronNickel.rs。先不说这两个框架成熟度如何,一般情况下,一个语言有了 web 框架,算是一个里程碑,说明他离靠谱也不远了。这样我决定跟一下 nightly 版本(新框架都是跟 nightly),另外也能感受一下 Yehuda Katz 的构建工具 Cargo。ArchLinux 的仓库里已经有 0.11 版本,再用脚本安装必然会有冲突。于是想到了最近半年最火的 Docker,可以轻松的创建多个环境,正是一个非常好的场景。

    安装

    安装 Docker, Arch Linux 仓库里很早就有,非常方便:sudo pacman -S docker。完成之后启动他 …

  5. "Mapzei 和 观察者"

    写了两个 Android 应用一致没有在博客上提,那么就一起提一下吧。

    其一是3月份写的 Mapzei,是Roman Nurik的live wallpaper Muzei的扩展。 Roman Nurik 之前做过 Dash Clock,本身也是个开放架构,允许第三方增加扩展。 Mapzei是Muzei的扩展,每天取一张随机城市的地图作为桌面。用户可以配置地图的数据源:Google,OpenStreetMap或者Mapbox。

    另一个是观察者网客户端,看新闻用。应用本身倒没有什么,用了一些典型的开源库:

    • UniversalImageLoader
    • SuperListView
    • ButterKnife
    • Eventbus

    另外这个应用还发布在了小米商店.

  6. "扩展 Linux ephemeral 端口限制"

    默认情况下,单一Linux能发起的客户端连接数是十分有限的,为此,我们要测试大规模连接程序时不得不启动很多客户端机器模拟连接。下面介绍一些增加单台Linux发起连接数的方法。

    增加文件打开数

    第一步最为基础的,提高打开文件描述符的数量。默认的情况下,这个配置为1024,是不能满足我们的使用的。增加到999999个:

    $ sudo ulimit -n 999999
    

    持久化这个配置,可以在/etc/security/(或/etc/security.d/,取决于你的发行版)下建立文件,增加

    *       hard    nofile      999999
    *       soft    nofile      999999
    

    这将对所有用户起效。

    增加客户端端口数

    当Linux发起客户端连接时,如果没有显式指定,会给客户端socket绑定一个 ephemeral 端口。这个端口的范围是从这个区间选取的:

     $ cat /proc/sys/net/ipv4/ip_local_port_range
    32768   61000
    

    如果这个区间的端口耗尽 …

« Page 2 / 40 »