计算机技术学习

2016 年终小结

15 年毕业,加上实习,算起来也工作两年多了。总的来说,这两年过得并不舒服。



用 Elixir 写一个装饰器

用多了 Python,始终觉得任何语言都该有装饰器这种便捷的语法糖。实际上 Elixir 也可以利用宏实现类似的功能,虽然并不那么常用。在实际工作中用到一些类似的功能,比如: cache、profile、log 等,都可以用 “装饰器” 的形式来实现,下面就简单的讲讲实现方法。



Elixir 和函数式编程

题目虽然是函数式编程,但是这里并不会介绍函数式编程,Google 一下,全世界都是函数式编程的入门文章。 说起函数式编程的时候,大多数人都知道 Erlang/Haskell/Lisp 是函数式编程语言,并且常见的命令式编程语言如 C/Java/Python 也支持一些函数式的特性。但是,到底什么是函数式编程呢?



一次蛋疼的代码调试

起因是这样的:公司的新游戏不久后就要上线了,做了一个疯狂的估计,那就是如果实时在线人数达到 50w 活动系统还能扛得住吗? 我们的实时活动系统,实际上也是一个日志收集系统。用户的日志(登录、购买、捐赠等日志)通过游戏服务器发送到实时活动系统,实时活动系统存储日志,并根据配置来把日志分发到相应的实时活动进程。缓存会每 3 分钟同步到数据库一次。 实时活动的大致流程是:日志进入 –> 读取当前用户缓存 –> 处理日志 –> 达成条件后发奖 –> 更新用户数据



Metaprogramming Elixir 简单意译

入职快半年,学习 Elixir 也几个月了,Elixir 的传神之处在于它的宏编程。虽然普通情况下他并不常用,官方建议也是慎用宏编程,但是由于实际工作需求,大量的使用到了这一高级特性。踩了许多坑,但是收获也不小。这里,顺便把 Chris_McCord-Metaprogramming_Elixir 也简单翻译了一下,纯属简单意译,并没有仔细校对,作为自己的读书笔记,方便以后查阅。



一个简单的模板引擎

接触 python web 框架,就少不了要鼓捣各种模板引擎。大部分 web 框架的 HTML 模板的实现,比如 tornado、flask 等,实现模板引擎的原理都大同小异,都是将模板代码在初始化时编译成可执行的 python 代码,在调用的时候传入相应的变量值,就可以替换掉模板中原有的对应变量。 想自己记录一下从中学到的简单原理只是,奈何书写功底实在太差,辛亏看到了一篇很棒的文章,它的讲解让理解 HTML 模板变得出奇的简单。又可以 CTC 的搬运工了,下面直接抄重点。



tornado 异步数据库

在使用 tornado 的时候,我们总是希望所有的操作都能够异步,如果其中某些必须操作没有异步,那整个框架都会被阻塞。 而 tornado 自带的 torndb 是以 MySQLdb 为核心,并不支持异步处理,而在实际开发过程中,我们总是希望我们的服务器是全异步的,这时候,就需要用到异步的 mysql 了。 当然,你我都不是第一个遇到这个问题的童鞋,已经有人帮我们实现了这份代码 tornado-mysql ,代码能够很好的进行异步。 然而,好景不长,这个库是基于 pymysql 的,是纯 python 实现的。虽然实现了异步,但实际效率跟 torndb 比起来,不升反降。原因很简单,python 的函数调用太过昂贵,过多的函数调用,耗时远超过了网路 IO。



python logging 模块简单而又实用的记录

转自 关于 logging 的一些琐事



好看的长微博

在做有料道的时候,有一个需求是长微博的分享功能。Xu 说我们有很大程度上会靠长微博进行推广,所以我们这个功能必须要做好。于是,一不小心就在 Xu 的带领下做成了目所能及中最漂亮的长微博。 首先一个问题是如何生成长微博?逛了挺久,没有啥成熟的方案或者分享。要自己写一个工具基本是不可能的,没那个技术也没那么多时间。于是就从 git 上面找工具,经过一番测试之后,找到了两款还算舒服的工具