网络寻租

Programmer, Gamer, Hacker

放下的智慧

| Comments

image

很遗憾, 我起了一个很读者的标题.

我们索取过多, 我们祈望过多. 我们希望有车有房, 我们希望傲世他人, 我们希望获得更多的享受,

但是我们因此付出代价, 更多的支出需要更高工资的工作, 更高工资的工作让人疲于奔命, 结果人们却说这是现代节奏.

对吗? 如果你认为你的祈望值得你的付出, 那么很好, 继续下去.

但是你的祈望是否真实? 你真的需要有车有房? 还是只是社会观念让你这样做? 你真的 需要 这些吗?

我现在过着租房的生活, 我买不起房, 也不认为房值得买.

现在我住在一个小书房里面, 木地板三面都有窗户, 有柜子收纳杂物, 有躺椅可以坐着看书, 买了植物和空气清新剂, 感觉很安逸.

有时候, 我甚至觉得房产证是一种束缚——又不能带来收入, 还需要日常的照料(房子越大工作量越多), 又干扰我做决定, 要它做什么呢?

人生苦短, 资源有限, 我们是否可以考虑平衡下, 投入资源到其他的方面?

如果我们有钱买房, 为什么不用这笔钱去世界旅游? 为什么不去开始做自己真正想做的事情, 比如开一间小书店? 比如去做一些自己认为真正有价值的事情?

房子如是, 甚至工作也如是. 现在做的活是否喜欢? 更重要的, 是否有价值?

一句话: 自己的目标, 现在的生活轨迹, 有没有考虑 放下?

Ruby_on_rails

| Comments

image

最近有项目要用到ruby on rails, 于是下载了书, 看了一段时间.

具体学习方法

根据专家意见, 直接看ruby on rails guide.

学习时间, 连同ruby, 在一周时间. 根据我个人的体会, 也差不多. (前提是web程序员)

个人感觉

  • ror哲学是convention over configuration, 就是约定大于配置. 比如默认约定xxx/是指向xxx/index, 你直接修改index.html.erb模板文件即可., post xxx/ 会自动指向create方法, 等等..
  • 大量的生成器. 命令行自动生成view/model等等.
  • 内嵌功能, 你想要的东西都有, 对于常见的模块, 比如分页, 用户验证, 管理什么的都有直接的模块可以调用.
  • ruby这种魔法语言, 可以让代码量减少到非常低的程度.

这样的结果就是, 你写的东西(包括输入的命令)非常地少, 信息密度和产能非常地高.. 开发愉快, 不伤手指.

再加上这个东西比较容易学(一周), 那么我有一个疑问: 为什么大家不去学ror呢?

南京游记

| Comments

image

决定

最近清明节放假三天, 除了一天去玩 http://snakechallenge.org 以外, 剩下两天我决定去南京玩, 避免宅在家里.

我在南京没有认识的人, 于是我在豆瓣上面吼: 谁在南京? 于是有 半仙@深山 回应我. 于是我放心地——裸游了. 我除了中山陵, 完全没有计划好到底去哪里玩, 就出发了.

4/4

我8:10从嘉定坐长途出发, 11:30左右到南京中央门. 我这趟旅行虽然不能说惊天动地, 但也非常有意义. 首先, 在长途车上面, 我就遇到了一位美女(非女性的指代, 而是真正的美女), 她坐在我的边上, 我们进行了亲切友好的交流, 互相介绍了自己的状况, 以及看了<武林外传>的电影. 在车上, 经过我的再三邀请, 她终于同意和我一起去南京中山陵玩.

我们打算做游一公交车去中山陵. 在路上, 我果断向其他一同等车的人们询问, 有谁一起去中山陵. 不出我所料, 果然有很多人去. 其中一对学生情侣中的女生, 已经去过好几次了, 于是我请求组团. 他们同意了.

我们的运气不错, 虽然好不容易地挤上游一公交车, 但是总比在下面几站路上没有办法挤上来(师傅根本不停车)的同学们要好很多了. 师傅好心地欺骗他们: 很快就有下班车.. 但是我们都知道, 下班车只会更挤.

我们到了中山陵, 然后——那对学生情侣就飞奔起来(当然只是走路), 我和美女都拼命地赶啊赶啊, 爬楼梯, 上中山陵, 排队看国父和青天白日满地红, 然后下山了…

然后我们就走下山的路, 走啊走啊走啊走啊走啊走啊走啊, 路上车多人多, 走了好久终于走到地铁站. 然后我们就互相告辞分开各奔东西. 如果那位美女看到这个日记, 我要说声对不起让你在最挤的时候来中山陵以及一直在赶路…

之后就是: 去买火车票, 去万庭酒店checkin, 以及和半仙同学回合. 晚上腐败去他家以及在周围(万达广场)逛了下. 然后就休息了.

4/5

第二天, 我们约定8点碰头, 他带我去吃了下鸭血粉丝汤. 还行. 然后我们去莫愁湖, 结果发现竟然要27块的门票, 周围还被围墙围起来了, 于是我们决定不进去了, 转移往南京图书馆和总统府.

南京图书馆里面还是挺大的, 并且有足够的座位让人看书. 但是没有我期望的: 24小时开放以及能够住人. 在我看来, 不能让人一口气看一星期的书而不需要出门的图书馆是不够格的(好像中国没有这样的图书馆吧).

然后我们从正门离开, 去看了看总统府外围. 人太多就不进去了. 这种名存实亡的”尸体”也看看外面就好了.

然后我们路过美术馆, 这天的展会是书法, 作者里面有姜昆我心里就凉了. 冲着免费就进去看了看, 没有什么感觉就出来了.

之后我们杀往玄武湖. 我们到的是南部白马寺附近, 放风筝的人很多. 我们从西边走, 感叹环境很不错, 城墙很高什么的… 中途有上去的路, 于是我们上了城墙, feel good.

然后我们下城墙, 找吃的, 走了很远很远很远很远很远很远很远很远的路, 到了湖南路, 小吃一条街, 因为我不想吃太油腻的东西, 我们去吃了一个中式快餐的粥店..

然后我们去了凤凰书城, 然后我决定回去之前剩下的2个小时时间就去玄武湖坐坐. 我们走过去, 避开玄武门前的人流高峰, 往南走, 在一个凳子上面坐着, 聊天打屁, 看经过的美女, 然后搭讪..

然后我们被一个看相的大妈搭讪了, 半仙调戏了她一段时间后就把她气走了.

我们继续看美女. 半仙同学觉得一个蓝衣美女不错, 于是开玩笑地说等她回来(玄武湖过去有很长的路, 不是所有人都能走到头的, 到头也没有地铁站), 结果… 果然等到她回来了. 鉴于半仙同学没有勇气搭讪, 于是俺进入尾行状态, 他只好也一起尾行. 然后我上去问问题, 接上了话茬. 但是美女同学还是不怎么搭理我们. 这个时候我使上了杀手锏: 向美女同学介绍, 半仙同学对你很有兴趣, 希望认识下.. 然后我们顺利同行, 美女还是半理不理的…

在我多次鼓励多次未遂屡败屡战出谋划策下, 半仙同学终于要到了QQ号. 并产生了一个momentum: 她排的卖票机无法购买了, 于是我排的另外一条队帮忙买了票. (其实她应该能买到票结果因为替我买票于是没有买成—挺复杂的).

之后我们互别, 我去火车站他们.. 他们干什么事情我就不知道了..

我回上海坐的是高铁无座, 上车后发现又是一个美女, 然后我和她搭话, 被她的电话打断, 期间知道了她是干保险理赔的, 去南京和以前的同学聚会, 学历研究生云云.. 从她的说话方式上面看, 是一位聪明的美女. 奈何电话完毕后就打游戏了, 让我不好和她进一步交流… 真是失败呀. 不过可能她不想认识新人有男朋友平时有很多人追独身主义拉拉.. 搭讪成功的概率其实不高的, 我成功率已经可以了.

然后我去骚扰了另外一位刚研究生毕业去宁波工作学通信进国企的帅哥, 以及另外一位做杂志平面设计在火车上用苹果电脑photoshop修图的美女, 并成功要到了美女的QQ号..

这里补充说明下: 我搭讪是非常有诚意的, 先交朋友, 目标做男女朋友, 未来婚姻什么的. 能走到哪一步看机缘.

结论

所有照片在: https://picasaweb.google.com/linjunhalida/201144

去旅游真的非常有意义.

花费整理

1.5元矿泉水 91长途车 169酒店 36上城墙 146高铁

总计 443.5

以及半仙同学请吃的3顿饭和汽水费

我们来捐款吧

| Comments

image

从2011/3月起, 我计划开始把我收入的十分之一捐出去, 用来让世界更美好一点.

捐款也不是随便捐的, 有三不捐:

  • 不捐给国内政府背景的基金和组织. 这个你知道的.
  • 不捐给我认为对改变世界没有帮助的. 比如某些环保组织, 针对老年人的基金. 我认为这些基金对改变世界用处不大. 比如路上的乞丐, 这个无助于改变他们的生活, 甚至鼓励他们乞讨.
  • 不捐给太大众的基金, 他们已经有很多人捐了, 不缺我这一份.

然后也有几个指导思想:

  • 捐给自己比较了解的领域. 比如wiki, 开源社区. 利用自己的领域知识, 让捐助变得更有效.
  • 捐给本地事业和自己生活周边的事情, 改变世界, 从自己周围做起.
  • 捐给未来. 比如给学生买VPN等等.

以上. 欢迎大家都参与这样的事情. 捐款的数量和你的收入成正比, 如果你的收入少, 比例就少一些. “没钱”从来不是借口.

捐款统计

十分之一收入捐: 500人民币, 70美元

Python-pype介绍

| Comments

image

什么是pipe?

在python里面实现命令行的pipe功能, 比如

1
[1,3,2,0] | sort

介绍在这里: http://blog.csdn.net/lanphaday/archive/2011/03/29/6287114.aspx

安装只需要

easy_install pipe

我写了一个小用法:

在ruby下面有这样的魔法: 1.hours.ago, 它估计是采用修改整型这个类的方式来做的, 这样太不pythonic.. (不知道我说错没有?)

利用pipe的话, 可以这样写

1 | hour | ago

代码如下: https://bitbucket.org/linjunhalida/code-example/src/tip/python/1hourago.py

个人觉得这个东西完全可以扩展到python核心模块中去了.

pipe是如何实现的?

官方网站: https://github.com/JulienPalard/Pipe

我本来以为它是修改了python核心模块, 结果发现它只是这样的: 提供pipe功能的东西都继承至Pipe类:

1
2
3
4
5
6
class Pipe:
    def __init__(self, function):
        self.function = function

    def __ror__(self, other):
        return self.function(other)

核心在于 __ror__, 这个函数对应的就是 | 符号, 不过是右值的.

比如: 当python在解析 [1, 2, 3] | sort 的时候, 如果发现无法在左边的list里面找到or比较的函数的时候, 就会去调用右边的函数__ror__, 就会出现我们想要的结果: 把左边的值传给 sort.function 去执行.

核心代码少得可怜, 大家都可以去观摩下: https://github.com/JulienPalard/Pipe/blob/master/pipe.py

如果我还有一个星期可以活

| Comments

image

如果我还有一个星期的时间可以活, 我会先震惊一个小时..

然后我就会开始安排后事, 任务交接好, 工作辞掉, 清理网络上面的信息, 标注gmail等网络帐号, 自己在某某时刻会死掉, 然后通知家里人, 整理资产什么的.

但是我不会回去老家, 还是在上海.

然后我会去做些一直没有时间去做, 或者没有动力去做, 但是我非常想做的事情, 比如可能花点钱找个好的小姐打上一炮, 比如去学钢琴, 比如就在人民广场找个顺眼的女孩快速谈场恋爱, 比如.. 没有什么比如了, 我想做的事情不多…

期间可能会有一些人来问我状况, 然后我会和他们讨论讨论人生理想什么的.. 家里人会过来陪我, 不过我还是宁愿一个人呆着更清净些. 那么我可能最后两天再告诉他们(如果他们不知道这件事情的话).

就是这些, 然后一个星期很快就到了. 如果死得痛苦的话, 我会找点不痛苦的死法来先了结自己的生命. 我一直想尝试跳楼, 梦里面跳过几次. 或者我会把自己的生命用在一些有意义的场合, 比如去和XXX同归于尽?

死亡以后什么都没有了, 这个世界和我无关了, 死亡的过程就是逐渐认识到这个事实的过程, 我会选择一个人死去, 享受最后的清净.

如果你还有一个星期可以活, 你会怎么做?

Spacechem介绍

| Comments

什么是spacechem?

image 独立游戏. linux下可玩. 编程类型游戏. 考智商. 音乐很好听. 官方论坛竟然放在reddit..

简单地说, 就是你需要设置化工厂, 然后把采到的资源, 比如H2O什么的, 分子打散, 组合成需要的物质, 比如酒精.. 具体游戏画面如下:

画面1:

image 画面2:

image 画面3:

image 画面4:

image 看起来没有什么感觉? 这里有一个介绍视频:


以及一个游戏视频:

估计你快晕了吧…

哪里有下?

官方网址: http://www.spacechemthegame.com/

有试玩下载: http://store.zachtronicsindustries.com/product/spacechem

如果你喜欢的话, 可以购买, 价格15美元.

我买了, 现在在痛苦通关中… 估计要玩好几个月了…

我的技术储备

| Comments

image

从2006年7月开始, 我已经工作4年半了, 现在的年龄也不小了, 需要整理一下我这一辈子的技术方向.

任何技术都是为了实现特定目标来做的. 我的目标不是很明确, 但是大致方向上面应该还行:

那就是做软件开发(好吧, 不是很具体). 可能是客户端, 或者web, 或者手机, 但是现在还是以客户端为主, web也有一部分, 这个还是走一步看一步吧. 我个人是倾向于往web方向发展, 但是限于水平问题, 还是暂留客户端开发.

考虑到技术过时, 以及自己喜好的问题, 我还是专注在开源社区, 尤其是GNU/linux领域.

因此, 这里整理一下我需要深入的方向:

  • linux平台上面做开发.
  • 客户端/web/手机方向上面的应用软件开发. (具体侧重根据项目需求)

以后随着时间的推进, 我要能够专注积累平台的经验.

下面我要列一下, 我未来(一辈子)的技术储备, 这个文章随时更新.

编程语言

我打算专注在下面几种语言上面, 它们都有对应的适用场景:

抽象能力从低到高:

C – ? – python – lisp

  • C 底层平台语言 用来写性能相关/底层的代码, 以及阅读其他开源项目的代码. C语言是逃不过的, 并且至少在未来30年内不会被取代.
  • python 动态语言. python的简洁, 清晰, 高效开发, 大量的库支持, 几乎所有领域都能够参与, 我采用它作为主力开发语言. 近来python使用者越来越多, 我也需要深入挖掘, 以应对开发者增多带来的技术贬值现象.
  • ? 能够处理复杂度的静态语言 在C和python中间, 我觉得还是会有一个间隙语言, 需要足够的性能, 以及能够处理复杂度. 本来C++是挺适合的(它应用在在Qt和游戏业上面), 但是由于学习成本比较高, 以及对于我来说使用场景不多, 暂时不打算深入. 或许go/lua是好的选择?
  • lisp 抽象语言 我需要有一个充分的抽象语言, 来让我能够用任何自己想用的方式来写代码. lisp简洁的语法, 以及强大的macro功能, 能够支持我的需求. 并且也带来一些优越感.

领域知识

上面只是语言工具的部分, 下面是具体的技术领域(所谓的内功):

算法

虽然我断断续续看了CLRS, 但是基础还是非常薄弱, 需要定期花时间学习..

linux

作为产品的基石平台, linux从内到外的了解都是需要的, 先跑LFS吧…

web

现在是web的时代, 我到现在都没有通读完过tcp/ip那套书, 以及对一些核心协议不是特别了解, 虽然能够使用, 但是该做的事情是逃不过的. 然后就是抽空看RFC.

编程能力

写代码的能力, 能够快速提出解决编程问题的方案, 并实现代码. 这样的能力什么时候都不会过时, 都值得训练. 需要经常做做题目…

设计能力

在不同场景下, 提出和验证方案, 并监督实现, 这个还是需要多多开发, 并经常针对项目做出总结.. 一直以来, 我都没有整理这方面的内容, 是该做这样的事情了.

具体技术

为了能够支持开发, 需要有强大的工具来做作成我的产品. 下面列出一些我需要深入研究的, 并且随着时间, 需要不断更新:

  • 开发工具: emacs

    • 能够根据需要设置成自己想要的方式.. 虽然我已经采用它开发超过2年, 但是还是很粗浅的应用, 不能按照自己的心意调整成想要的状态, 需要整理思路.
  • GUI库:PyQt

    • 这是我主力的用来写界面的库, 但是我对它底层不是特别了解, 这方面需要提高.
    • 最近出来了qml, 作为下一代的GUI语言, 我需要跟进时代.
  • web框架: django/web.py/Pyramid

    • 现在我只是使用过框架, 没有对框架有深入了解, 这样是不够的, 平时开发的时候看不出来, 遇到问题的时候无法解决, 需要弄懂一些基础概念: 整体处理流程/模板机制/数据库
  • 语言库: python库

    • 虽然python库非常好用, 但是还是需要知道下面是如何实现的, 以减少对特定产品的依赖. 最好能够阅读python源码和python库源码.

结论

从上面列出来的东西来看, 我贪多嚼不烂了… 现在先慢慢实际使用lisp吧, 把我的一些python代码用lisp来实现..

Zeromq介绍

| Comments

image

什么是zeromq?

最近断断续续知道了有message queue这种东西, 可以很好地作为不同程序间的粘合剂. 补上了我工具链上面缺失的一环. 在考虑了几个mq的工具之后, 我决定学习 zeromq . 为什么选它呢, 因为它的API和它的网站一样简洁优美, 暗合禅道.

zeromq的基础

zeromq采用api形式来实现队列功能, 它的核心就是: socket.

这个socket和tcp/ip的socket在概念上有点类似, 只不过, 它的socket不需要给出具体通讯的实现以及其他的一些特性, 我们可以把它理解为更高级的socket. socket处理消息是按照份数来进行的, 每次发送一份或者多份消息. 并且, 这个socket不一定是基于网络的, 它可以设置为其他形式的东西, 比如ipc, 进程内部通讯, 通讯方式和代码是解耦合的.

这样的话, 程序员只需要关心数据流的流动方式, 以及对应的网络拓扑应该如何搭建. 我们还是来看看具体的代码吧.

一个简单的例子

如果我们要实现下面这个简单的通讯方式:

client发出’hello’请求, server回应’world’.

image 只需要写这样的代码:

server.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 导入zmq
import zmq, time
# 初始化上下文
context = zmq.Context()
# 生成一个新的服务socket
socket = context.socket(zmq.REP)
# 绑定在一个地址上面
socket.bind("tcp://*:5555")

while True:
    # 等待客户端发起请求
    message = socket.recv()
    # 做一些'具体的'工作
    time.sleep (1)
    # 返回结果
    socket.send("World")

client.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
import zmq
context = zmq.Context()

# 生成一个请求socket    
socket = context.socket(zmq.REQ)
# 连接上服务器
socket.connect ("tcp://localhost:5555")

for request in range (1,3):
    # 发出请求
    socket.send ("Hello")
    # 得到回应
    print socket.recv()

分别在2个终端里面执行上面的代码, 你会发现自己实现了一个非常简单的服务器, 而上面的代码正好是他们应该执行的逻辑, 没有任何底层的肮脏处理代码!

神奇的地方:

  • 你可以开启任意多个client, 服务器都可以响应得过来.
  • 你不需要处理通讯异常的问题, zeromq都帮你实现好了.
  • client和server他们启动的顺序是不互相依赖的, 谁都可以先启动.
  • 不需要其他程序执行, 消息机制是在程序执行的时候, zeromq自动开线程处理的.

zeromq是搭建复杂拓扑的基石. 除了上面那个简单的同步回应请求模式以外, zeromq还可以实现许许多多更为复杂的模式, 这些是依靠它基础的几类socket完成的:

  • REQ 请求socket
  • REP 回应socket. 上面利用这2类来实现了一个简单的服务器.
  • PUB 发布socket. 该socket可以发布消息, 但是不关心订阅者是否收到消息.
  • SUB 订阅socket. 它可以连上PUB, 获取PUB随机发送的消息.
  • PUSH 只送出消息.
  • PULL 只收取消息.
  • PAIR 一对一的管道.
  • XREQ 异步请求.
  • XREP 异步回应.

利用上面的几类基础socket, 可以实现以下的复杂拓扑: 2个云计算集群, 能够根据负载互相转移任务.

image 具体的实现方法这里就不多说了, 你可以看 zeromq教程, 里面解释得非常详细.

安装方法

因为ubuntu源里面的zeromq好像不是最新的, 我是直接上: http://www.zeromq.org/intro:get-the-software 上面下载2.0.10版本的(python绑定最高是2.1.1, 但是没有下载, 于是我选择这个版本).

然后就是解压编译安装. 需要g++以及uuid-dev. 安装完毕后, 需要手动做一下链接库的链接, 不然无法用pyzmq:

ln -s /usr/local/lib/libzmq.so.0 /usr/lib/libzmq.so.0 

然后安装pyzmq

sudo easy_install pyzmq==2.0.10

然后就可以执行上面的python代码了.

结论

zeromq的抽象方式非常优美, 在此层面上, 我们可以专注处理数据流的问题, 而不需要考虑下面的杂活. 我早就希望能够有这样的工具存在了, 现在得偿所愿, 可以构建一些很有意思的系统了.

Gmail不能用了

| Comments

这几天开始, gmail能够登录进去, 但是刷新的时候会停止掉, 但是翻墙之后, 完全正常. 那么到底发生了什么事情应该很明显了.

我这几天想到一个idea, 人们针对自己喜欢和厌恶的事情捐款, 如果喜欢一个人或者事物, 就给他捐款, 如果讨厌一个人或者事物, 就给能够除掉他们的对象捐款. 如果你讨厌windows, 可以给开源基金会捐款, 如果你喜欢苹果, 可以给苹果捐款(直接买他们的产品也可以).

我非常讨厌阻止我看gmail的东西, 如果有人能够除掉它, 那么我非常乐意捐出我的钱. 如果大家都愿意这样做, 那么我们的世界会更美好一点.

对了, 我是说真的, 我现在在申请信用卡途中, 如果有人知道如何捐钱给能够完成上面事情的人或者组织, 请告诉我.