致程序员

有人说 你永远走在加班的路上 其实我知道 那最后一班回家的列车 是你对自己的承诺 对梦想的执著

有人说 你不懂浪漫 其实我知道 你不仅会敲代码 还会吟唱爱的离骚

有人说 你不善言谈 其实我知道 你在用一串串优美的代码 诉说着世界上最美的语言

有人说 你是彻底的宅 其实我知道 你在用所有的时间 做了一个改变世界的梦

March 30, 2016Permlink

Python Web 框架中 Context 机制

在 Python 世界里的各种 Web framework 摸爬打滚了好些日子,也是时候该总结一下自己的看法了,这篇看法里没有方法论,只有通篇的扯淡。

Web 请求的实现是需要有上下文 context 的,如何保存和传递 context 则是一个框架和库需要解决的核心问题。简单来说,一个简单的 HTTP 请求到达 Server 后,Web framework 需要处理这个 HTTP 请求的数据吧,如何传递和保存这个 HTTP 请求的数据,方便后面的 Handler 来处理,这里就可以简单理解为 HTTP 请求处理过程的上下文,即 Context。

1、Function-based Context

Function-based Context 就是利用函数的上下文来传递和保存数据的形式,现实中的 Web framework 有 Flask/Bottle/Django 等,利用 threading.local 这样(或着近似)的全局或者局部变量来传递和保存 Context 的。

2、Class-based Context

Class-based Context 就是利用类实例的上下文来传递和保存数据的形式,现实中的 Web framework 有 Tornado/Web.py 等,利用 class 来传递和保存 Context 的。

Context 作为一个 Handler 存在的环境,其意义一直被大家所忽略。而能从 context 去理解一个处理过程,其价值和意义就超出了一个框架和库,进入到更加广阔的线程/进程/协程等一堆的任务处理的状态隔离的术语中去了!融会贯通这个词,在这里可见一斑。

February 28, 2016Permlink

从前慢

从前的时光很慢,车马信很慢,一生只够爱一个人

从前的时光很慢,车马信很慢,一生只够爱一个人

February 19, 2016Permlink

说说家庭装修中的弱电网络设计

不想写什么高大上的理论和经验,就写写自己在装修过程中摸索到的一些经历,特别是家庭装修中弱电网络的设计建议。

作为不入流的互联网从业者,跟网络有着离不开的关系,平时运维见到这些网络设备都快要吐了,也没有想着在家里建机房,所以能简单就简单点,关键是不用这么折腾。

1、家庭弱电网络拓扑

家庭的弱电网络主要就是光纤宽带(ADSL宽带)、广电同轴电视和固定电话这几种吧,以前者为大头。我自己折腾的网络拓扑设计如下图:

家装中的弱电网络拓扑

提示:单独打开图片可以查看大图!高清大图!

图中的网络都是全千兆的网络。各个设备的功能和作用如下:

  1. 电信光纤接入:这个应该很多小区和地方都有吧,要不就换ADSL宽带,一个样的实现。采用电信光纤接入有两个好处就是电信的光猫默认就有电信IPTV机顶盒的接口和电信固话的接口,这相当于简化了家庭网络入口的实现。而且,我们这里的电信都是IPTV绑定光宽带作为套餐的,家里有使用电信手机的可以默认多带个电信固话,也是送的,好无语。图里我写了双 WLAN 接入。双 WLAN 记得要带个可以双 WLAN拨号的路由器!那个移动的送的宽带,不要白不要,不过移动的光纤宽带网络质量甚忧,就当个备用的吧;
  2. Mikrotik/EdgeRouter 路由:这个貌似不是很接地气吧,小众产品,适合折腾使用。里面是 RouterOS/EdgeOS,随意折腾 Firewall、QoS、OpenVPN,网络实验场地!然后可以折腾各种科学上网的做法 ChinaDNS、dnsmq、Shadowsocks 等随便折腾吧;
  3. 千兆交换机:为了全屋的千兆网络,网管不网管无所谓,家里使用划什么 VLAN实在是没有意义。注意记得选择有端口链路聚合功能的,这个可以提升家庭 NAS 多终端读取时候的速度;
  4. Intel NUC:这个家庭常开的电脑,也是IT从业者的个人爱好吧,什么BT下载、挂机做种等等各种想要一直运行的东西都统统扔这个 NUC 里面;想折腾的可以装个 VMWare vSphere各种虚拟,就是图个折腾吧;不折腾的装个Windows好了,用 Virtualbox 或者 Windows Hyper-V 也应该足够各种折腾啦;
  5. 家庭 NAS:这货拿出来可以单独写一篇好长好长的文章了,不折腾就是直接群晖吧,省事不折腾;单算折腾的可以自己搞黑群晖,HP Gen8 microserver 挺不错的;
  6. 不间断电源(UPS):这个UPS是为 NAS 服务的。UPS嘛,这个没有什么好说的,保护硬盘嘛,顺便也保证家庭网络出口的供电稳定吧;

2、家庭网络及无线网络

想整千兆网不难吧,用超五类以上的网线应该问题不会太大。打个水晶头这样的事情,网络从业有谁不会的吗?

由于是基于千兆的网络,相信速率上几年内不会是太大问题吧。其实在家里部署千兆有线网络,就是我这样的处女座加强迫症才会去做的吧,事实上家里基本都是无线 Wi-Fi 的天下,基本不会怎么使用有线网络的。

不过既然铺设了千兆有线网络,那就好好利用起来吧。上面这个拓扑图里我没有画无线网络的布置。布置起来挺简单的,就是根据家里的位置大小,找有网线的地方随便插几个无线路由(无线AP)就好了,就这么简单。

3.家庭出口路由的选择

上面写到了,我打算选个 Mikrotik 或者 EdgeRouter 的路由。作为家庭的主要出口路由,我觉得带不带无线不重要,反正也是扔在弱点箱/柜里面吧,无线也没有什么卵用,还不如老实找个有线的路由实用。

说说我选择的需求吧:

  1. 千兆 LAN且至少三个口吧;
  2. 双WA甚至多WAN 接入;
  3. 能根据运营商分流或者负载均衡;
  4. 内建VPN Client/Server;
  5. 价钱嘛越便宜越好且最好不要超过600块吧。

还有一个比较含蓄的需求,就是最好可以在路由里整合dnsmq 这样的,防止DNS被污染的利器,顺便最好还能装 Shadowsocks,这样家里所有设备都可以无缝出国。

不是权贵也并非土豪,选择东西够用就好。经过各种对比和选择,挑出以下产品,记录下来吧,也方便自己以后选择。

Mikrotik 路由:

Mikrotik 的路由内置 RouterOS,其实挺牛逼的啦,网上现成的教程和视频一抓一大把,也有 WinBox 这样的利器去配置路由。但是,虽然 RouterOS 是基于Linux 构建的,但是 RouterOS 是自成体系的,很多 Linux 的包依赖都没有,所以打算当作 Linux 来折腾是不太现实,但好在 RouterOS 的生态圈酝酿多年,也有很多现成的插件可供使用吧,折腾应该不会有太大问题。

  1. RB750Gr2 hEX 或者 RB750GL;价格不贵,淘宝350左右;
  2. RB951G-2HnD;这个带无线,淘宝500左右;

很简单的型号选择,有线的就上 RB750Gr2 hEX,需要带无线的就上 RB951G-2HnD。

EdgeRouter 路由:

EdgeRouter 是UBNT出品的,内置 EdgeOS,其实就是基于Linux(Debian)的软路由,传说中还是根据 vyatta 软路由修改而来的,听说的吧,我没有考证过吧。EdgeRouter 的硬件相对强大,各种评测中各种牛逼,就是刚刚出道,资历尚浅,插件和生态圈没有那么成熟,很多都需要自己折腾。但是EdgeOS 是一个真正的 Debian 啊,可以折腾的事情也真心多得去了。

  1. EdgeRouter X,内存和Flash稍微小点,都是256MB,有5个千兆口,淘宝价格350左右;
  2. EdgeRouter Lite,内存512M,Flash 2G,双核MIPS,只有3个千兆口,淘宝价格650左右;

都很简单的选择,打算硬件牛逼点的上EdgeRouter Lite,简单点的上EdgeRouter X

考虑到折腾的乐趣,我自己选择了 EdgeRouter Lite,记得买铁壳的啊!

February 16, 2016Permlink

定风波 · 南海归赠王定国侍人寓娘

宋 苏轼

序:王定国歌儿曰柔奴,姓宇文氏,眉目娟丽,善应对,家世住京师。定国南迁归,余问柔:"广南风土,应是不好?"柔对曰:"此心安处,便是吾乡。" 因为缀词云。

常羡人间琢玉郎,天应乞与点酥娘。尽道清歌传皓齿,风起,雪飞炎海变清凉。

万里归来颜愈少,微笑,笑时犹带岭梅香。试问岭南应不好,却道:此心安处是吾乡。

试问岭南应不好,却道:此心安处是吾乡。

February 13, 2016Permlink