11
29
2014
6

APEC 蓝与北京灰

APEC 蓝:

北京灰:

这不是月亮:

在玩过山车的空气质量:

8
31
2014
21

又想起曾经的老师们

刚刚竟然梦到了高中英语老师,那个带领我们猜测试题的意图的脾气挺好的女老师。不过这里我要说的是另一位老师,一位脾气很坏的老师,一位造成我即使对很好相处的老师也感到害怕与不友好的老师,一位部分地导致我在很长的时期内与年长的人的交际障碍的老师。

她叫刘静,和中国广播电台经济之声一位主持人重名了。武汉市蔡甸区第三小学的一名教师。1997年至2000年是我所在班级的班主任,教「数学」(我不认可那时的教学方式和教学内容是数学;算术罢了)。当时她年龄大概30来岁。脾气很坏,教课无方。最常见的教学手段有二:一、拿教鞭跳起来敲讲台,敲得讲台上的粉笔头到处乱蹦,粉笔灰弄成雾霾;二、拿教鞭打手心来惩罚学生。当然那个时代,几乎所有老师都体罚学生,有些手段还更讨厌。只是体罚加上她在讲台上的「表演」,让我们在下面的学生都噤若寒蝉、惊恐不已。更重要的是,她的女儿也在这个班级,所以我们经常可以观看到一场场惊心动魄的家祖暴力。哦对了,我当初转到她这班里时没送礼,据说要不是成绩单上的数字比较大她还不会收。所以大家看,成绩好有时候并不是什么好事。

「上帝欲使其灭亡,必先使其疯狂。」不知道她现在灭亡了没有。但愿她没有继续毁人不倦。

刘静是我印象最深刻的一位老师。同时期还有一位叫张攀的男计算机老师给了留下了深刻的印象。我从那时就很喜欢计算机了,当然能力也在同学之上。但是这位张攀老师对我的提问不理不睬,因为他偏爱另一位成绩也很好的萌妹子。不仅如此,他似乎对我怀有敌意。每个孩子都会犯错。当时课上在关机的情况下练习使用鼠标,我觉得颇为无聊,把鼠标当成非电器左右推来推去地玩儿,结果招致他很严厉的一句话。具体是什么我已经忘记了。他平时脾气挺好的,经常和学生有说有笑的。那是唯一一次我见到他生气。

也就是从那时候起,我开始对各种老师敬畏有加,生怕不小心又招惹到某位疯狂或者敌意的大人。所以,尽管后来遇到过不少挺不错的老师,我也只能辜负他们的友善和帮助了。孩童时代教育中受到的伤害,和在爱情中所犯下的错误一样,要花费数十倍的时间才能慢慢弥补。

Category: 未分类 | Tags: 教育
8
29
2014
77

再三错过(及关于工作的各种吐槽)

刚刚看到一则消息,令我很不好受。又拍云,就是我这博客现在贴图和文件下载使用的那个 CDN,也是 CloudFlare 的中国版,依旧在招开发工程师。而两个月前,我在他们那里。他们告诉我当时他们只缺一个人。十数日之后,他们 HR 终于在数倍于承诺的时间之后告诉我,他们不缺人了

福无双至,祸不单行。这种令人很不好受的事情也并不是第一次发生了。大约两年前,我找朋友内推红帽(中国)的工作。结果被拒了,理由是,他们不缺人。大约两三个月之后,那位朋友又告诉我,他们又开始招人了。

更早一些,我毕业那年,搜狐来武汉了。我去面试,结果认为我能力不够。等我确定工作之后,他们却又有人在 Gtalk 上问我要不要去那里。

其实阿里巴巴那次也有类似的情形出现,虽然被拒的主要原因在于我严重休息不好、自由太少导致的状态欠佳。哦对了,没有预料到他们有人自己不懂 TCP 基础就问我网络相关问题也应该是原因之一。当时有人给我推荐工作的时候他们很缺人。但是因为我刚回到老家,很累,还没准备好应聘下一份工作,所以迟了几天。结果那时候他们就不怎么缺人了。

一直想不明白,为什么事情会一直是这个样子,总是错过想要的工作。也许自从走进武汉大学信息学部的那一刻就注定了如此命运吧。也许这种事情再三出现,是因为那次冲动的初恋告白。好像我总是第一次做不好呢。第一次初恋。第一次找工作,没有任何经验,根本不懂得表达自己。第一次选学校,由于信息严重不足导致选择了不适合的学校-专业组合。第一次正式学习编程语言,也是因为资源有限,学了 C++。第一次选择文本编辑器,还是由于信息不足,而选择了私有且不再支持 Linux 的 EditPad Pro。第一次选择命令行 shell,既没有选择大众的 bash,也没有选择功能强大的 zsh,却是挺随意地用上了(当时有不少问题的)fish。第一次自己买电脑,CPU 竟然不支持虚拟化。第一次租房,也是很令人不悦的方寸之地。

当然,人总是会从过去的不满和失意中吸取教训,在反复不断地练习之中臻于熟稔。可是,现在,在这里,这个社会似乎并不认同这一点。我应聘阿里巴巴的时候,他们几乎不问任何具体的技术问题,而是纠结于你之前的工作内容是什么、有没有管理服务器经验(我应聘的是运维开发)、做过的项目能多少并发(你倒是给我找来足够压垮我的项目的用户呀)。也问过我根本没有接触过的东西,比如如何管理上百万的服务器。这其实是很容易学习的事情。他们不承认人的学习能力,总希望别的公司给他们的员工培训,让他们的员工在别处赚取经验。当然,这样规避了风险,使得招进去的人的能力的标准差比较小。没办法,他们招人的人的能力不行(不懂 TCP 就别给我谈网络),所以只能招到能力不是很行的人(连重要的密码都敢往 GitHub 公开项目里扔)。(其实历史已经证明了招个王垠进去也不会出大事的说。)

曾经有人跟我说,我在群里帮忙解答问题的那些人,工资都是我的几倍。很无语。但是也没什么好说的。他们在专业技能上花的时间少,但是在交际、演讲方面花的精力多。招聘通常没办法直接测量应聘者的专业技能,于是只能通过一些表象来推测。就像让你只通过观看来比较两个物体的质量,你只能从体积、色泽、纹理等方面去揣测。然而,这其中没有一项有比较高的证明力度。经验在大多数情况下有效,仅此而已。

我还听我曾经的 boss 评价一个自称对多个方向均有兴趣的应聘者,认为一个人不可能对如此多的方向均有兴趣。言外之意是认为简历有吹嘘之嫌。可是我比那人的兴趣点还要丰富得多啊:Python、C、Linux 系统管理、网页开发、自动化运维、Lua、函数式编程,还有更远一些的,数学、物理、化学、天文、地理、语言学、经济、历史、生物、文学,这些也都是我所喜欢的。另一些人(很正确地)注意到,「喜欢」、「有兴趣」与「擅长」是两码事。于是,「喜欢XYZ」没用。你已经会了什么就继续干什么吧。和第一份工作的公司一样,开始决定结局

我注意到现在很多人喜欢「撞大运编程」。根本不理解程序在干什么。它不工作了,那么就这样试试,再那样试试。有错误消息?太晦涩难懂了,当作不存在好了。很好奇为什么我能很快看出问题来?答案很简单:因为我在尝试理解已有的信息表达了什么。在这里这个对象本应该有的方法却不存在。咦这个对象根本不是预期的对象。哦,这个对象是在初始化那里通过注入的方法弄进来的。咦你声明要注入的对象列表里怎么比初始化的参数列表少了这个出问题的对象?OK,问题解决。

这个事例也很好地说明了我为什么要用 Vim,我为什么不喜欢重复的代码,以及在必要的时候我为什么喜欢复制粘贴已有的相似代码片断而不是重新打一遍。使用 Vim 当然是因为搜索和复制以及对复制之后的代码的处理很方便。除了弱到爆的文件编辑功能(你一直在切换键鼠、一直在找需要的文件所在的那个标签、一直在输入已经输入过的单词和代码行,你没意识到么),另一个 IDE 令我吃惊的是,它们竟然鲜有支持多栏布局的!就是同时显示多个文件,通常是竖直并列,这样方便对照查看。不然用那么大的显示器多浪费啊。

我突然有点想什么时候给 CloudFlare 投简历了。虽然我从没有出过国。本来我想去又拍云就是受到了 CloudFlare 那博客的影响,而他们又一直在博客末尾说在招人。不管怎样,那会是一条非常不确定的旅程。我还没准备好。还是努力让生活慢慢变好吧。现在已经比之前好了很多了呢。虽然与我携手走过生命中剩下的旅程的那个人还没有出现,不过带我来到一个不适合我的环境、并一直阻碍着我追寻自己的人已经远去了。

又,我本来不习惯在这边写自己对非技术的想法的。但似乎只有写在这边才会有人看。那么妥协好了。坚持太累,放弃一些给自己放飞。


2014年9月5日更新:阿里巴巴又在招 Pythoner 了,而且这次是非常符合我目前技术方向的职位…………

Category: 未分类 | Tags:
6
3
2014
7

照镜子为什么是左右颠倒,而不是上下颠倒?

这是个虽然简单但是很有意思的问题,以前我竟然未曾想过。后来看到「宇宙的心弦」上对这个问题的回答写得太模糊(什么叫「镜子里头脚的位置没变」?「位置没变」的定义是什么?),所以这里写一个尽可能精确描述的回答。首先,我们讨论最容易引起问题的那种情景,即人站立时正面照镜子。

首先定义几个概念。

左右。以你为原点,你的左手方向为左,右手方向为右。(你知道哪只手是左手吧?)

上下。站在地球表面,在空中静止释放一物体,由于重力,它会运动起来。其运动方向为下,反之为上。

前后。这个有点奇特。你面前站了一个人,背心对着你的时候,这是那人的面。面对着你的时候,你看到那人的面。我们的问题隐含了作为观察者的你,去看外界的像,而不是考察你自己,对吧?

让我们再定义一下坐标系。

右为 x 轴正方向,上为 y 轴正方向,由你(观察者)的后背指向你的胸前为 z 轴正方向。

作为观察者,这里有一个很明白的变换:你所认为「正」的像,其坐标要绕 y 轴旋转 180°,才能与你观察时使用的坐标系一致。让我解释得更清楚一些——

拿鼠标指针选中你,按一下Ctrl-D(如果你不是 Inkscape 用户,那就按一下Ctrl-C再按一下Ctrl-V)。现在有了你的一个像。但是你看不到它,因为它和你重合了。让我们把这个像向 z 轴正方向平衡一段距离,比如 2m,你再看看?哟,它怎么背对着你呀?不行,再原地转身 180°,这样才能看到正面不是?

忽略掉平移,让我们把这个变换记作 \(T_1\),有

$$ T_1 = \begin{bmatrix} \cos{\pi} & 0 & \sin{\pi} \\ 0 & 1 & 0 \\ -\sin{\pi} & 0 & \cos{\pi} \end{bmatrix} = \begin{bmatrix} -1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & -1 \end{bmatrix} $$

我们再来考察一下镜子做了什么。

想像镜子前有一个坐标系的三根轴,就是我们刚刚定义的那个。其中 z 轴正方向指向镜面。于是乎,镜子里的 x 轴与外边的 x 轴是平行且方向一致的。y 轴也是这样。但是 z 轴的位置没有改变,方向却反了过来,箭头对箭头了。所以,这种放置法,使得像与物体的 z 轴反了,\(z\) 变成了 \(-z\)。还是忽略掉平移,让我们把这个变换记作 \(T_2\)

$$ T_2 = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & -1 \\ \end{bmatrix} $$

所以,最终作为观察者的你,看到的镜中的自己经历的变换是:

$$ T_1 T_2 = \begin{bmatrix} -1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & -1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & -1 \\ \end{bmatrix} = \begin{bmatrix} -1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \\ \end{bmatrix} $$

即最终的像的坐标中的 \(x\) 变成了 \(-x\),即左右颠倒。

让我们再考虑另一种情况试试。如果把镜子放在头顶上,看过去会是什么感觉呢?

这时候,y 轴一头扎进了镜子,于是,我们的第三个变换 \(T_3\) 为:

$$ T_3 = \begin{bmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \\ \end{bmatrix} $$

乘一下,结果是:

$$ T_1 T_3 = \begin{bmatrix} -1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & -1 \\ \end{bmatrix} $$

咦?这不是上下、左右、前后都颠倒了吗?找面位于天花板的镜子试试看。上下的确颠倒了不是么?再伸出左手试试,左右也和在面前的镜子里一样,也是颠倒的。可,前后感觉并没有颠倒啊?这是因为观察者和被观察对象位于同一垂直线上,感觉不一样了。仔细想想,天花板镜子里的像的前后确实与面前的镜子晨那个的前后是对着的,不是么?而我们定义后者没有颠倒,那么前者当然相对于后者是颠倒过了嘛。

个人拙见 =w=

Category: 未分类 | Tags: 物理
3
13
2014
1

我的浏览器A到Z

Re: 的确挺好玩的~

那个 frecency 懒得去研究是干什么用的,大概是频度之类的?frecency 即是火狐地址栏著名的 frecency 算法的值。

A
标题:工作台 - Chito
URL:http://lilydjwg.is-programmer.com/admin
访问次数:1828
frecency:3564600
最后访问日期:2014-03-13 21:26:42

B
标题:搜索结果 (页 1) / Arch Linux 中文论坛
URL:https://bbs.archlinuxcn.org/search.php?action=show_new
访问次数:1550
frecency:3100000
最后访问日期:2014-03-13 21:47:33

C
标题:Twitter / Interactions
URL:https://twitter.com/i/connect
访问次数:673
frecency:1063004
最后访问日期:2014-03-13 20:30:28

D
标题:豆瓣
URL:http://www.douban.com/
访问次数:290
frecency:212507
最后访问日期:2014-02-26 21:34:39

E
标题:所有消息 - SegmentFault
URL:http://segmentfault.com/user/events
访问次数:298
frecency:539380
最后访问日期:2014-03-13 21:44:30

F
标题:Index of /ftp/python
URL:http://python.org/ftp/python/
访问次数:7
frecency:2614
最后访问日期:2014-02-19 23:45:13

G
标题:Gmail
URL:https://mail.google.com/mail/
访问次数:396
frecency:449053
最后访问日期:2014-02-28 20:26:26

H
标题:工作台 - Chito
URL:http://lilydjwg.is-programmer.com/admin
访问次数:1828
frecency:3564600
最后访问日期:2014-03-13 21:26:42

I
标题:依云's Blog
URL:http://lilydjwg.is-programmer.com/
访问次数:100
frecency:126258
最后访问日期:2014-03-09 23:28:52

J
标题:jQAPI - Alternative jQuery Documentation Browser
URL:file:///home/lilydjwg/%E6%96%87%E6%A1%A3/%E7%BD%91%E9%A1%B5/Javascript/jqapi_2013-01-21/index.html
访问次数:5
frecency:1446
最后访问日期:2013-12-18 02:25:01

K
标题:The Linux Kernel Archives
URL:http://kernel.org/
访问次数:41
frecency:33347
最后访问日期:2014-03-02 21:47:12

L
标题:Lua 5.2 Reference Manual - contents
URL:file:///usr/share/doc/lua/contents.html#index
访问次数:24
frecency:14682
最后访问日期:2014-03-05 21:47:52

M
标题:Google 地图
URL:https://maps.google.com/
访问次数:83
frecency:52035
最后访问日期:2014-03-12 19:30:50

N
标题:None
URL:http://lilydjwg.is-programmer.com/admin/posts/new
访问次数:24
frecency:33600
最后访问日期:2014-03-13 22:08:35

O
标题:查看版面 - Vim和Emacs • Ubuntu中文论坛
URL:http://forum.ubuntu.org.cn/viewforum.php?f=68
访问次数:236
frecency:166138
最后访问日期:2014-03-02 22:26:47

P
标题:Python Module Index — Python v3.3.0 documentation
URL:file:///home/lilydjwg/%E6%96%87%E6%A1%A3/%E7%BC%96%E7%A8%8B/Python/python/py-modindex.html
访问次数:124
frecency:169744
最后访问日期:2014-03-10 23:10:46

Q
标题:Qt 4.8:
URL:jar:file:///home/.ecryptfs/lilydjwg/public/%E6%96%87%E6%A1%A3/%E7%BC%96%E7%A8%8B/qt4-doc/qt4-doc.zip!/index.html
访问次数:9
frecency:5198
最后访问日期:2014-03-06 22:05:35

R
标题:InoReader • 轻便快捷的 RSS 阅读器
URL:https://www.inoreader.com/
访问次数:155
frecency:177119
最后访问日期:2014-03-12 22:41:51

S
标题:SegmentFault
URL:http://segmentfault.com/
访问次数:1486
frecency:411473
最后访问日期:2014-03-13 20:47:13

T
标题:Google 翻译
URL:http://translate.google.cn/?hl=zh-CN
访问次数:138
frecency:145314
最后访问日期:2014-03-11 23:50:21

U
标题:Pinboard: public bookmarks for vayn
URL:http://pinboard.in/u:vayn
访问次数:13
frecency:5589
最后访问日期:2014-02-16 18:42:04

V
标题:查看版面 - Vim和Emacs • Ubuntu中文论坛
URL:http://forum.ubuntu.org.cn/viewforum.php?f=68
访问次数:236
frecency:166138
最后访问日期:2014-03-02 22:26:47

W
标题:新浪微博-随时随地分享身边的新鲜事儿
URL:http://weibo.com/
访问次数:78
frecency:117933
最后访问日期:2014-02-27 22:51:10

X
标题:None
URL:http://localhost/xcache/
访问次数:6
frecency:6688
最后访问日期:2014-03-02 22:50:15

Y
标题:soimort/you-get
URL:https://github.com/soimort/you-get
访问次数:24
frecency:19374
最后访问日期:2014-03-07 21:13:24

Z
标题:消息 - 知乎
URL:http://www.zhihu.com/notifications
访问次数:528
frecency:823165
最后访问日期:2014-03-09 16:53:10


附:从 URL 生成这些数据的代码。当然,还有后期处理,是用 Vim 简单地做了几次正则替换。

#!/usr/bin/env python3

import os
import sys
import sqlite3
from time import strftime, localtime

places = os.path.expanduser('~/.mozilla/firefox/profile/places.sqlite')

def main():
  db = sqlite3.connect(places)
  sql = '''select title, visit_count, frecency, last_visit_date
           from moz_places where url = ? limit 1'''
  c = db.cursor()

  for url in sys.stdin:
    url = url.strip()
    c.execute(sql, (url,))
    title, visit_count, frecency, last_visit_date = c.fetchall()[0]
    print('''\
标题:%s
URL:%s
访问次数:%d
frecency:%d
最后访问日期:%s
''' % (title, url, visit_count, frecency,
       strftime('%Y-%m-%d %H:%M:%S', localtime(last_visit_date//1000000))))

if __name__ == '__main__':
  main()

又附:上边的代码忘记写是哪个字母了 -_-||| 已经补上,用了个 Vim 宏来完成。话说好久没用 Vim 宏了呢~

Category: 未分类 | Tags: 程序员 火狐 浏览器
2
21
2014
10

编程语言的特色

Tcl:一切皆字符串。
Python:一切皆对象,真的!整数、函数、类、方法、模块、代码、函数调用栈等等都是对象!
Lisp:好一碗美味的括号汤!
Lua:在与不在之间——nil。
Zsh 脚本:Perl 根本不算什么!
Haskell:=纯粹+庸懒+晦涩
Erlang:你不是一个人在战斗,不是一个人!
 

Category: 未分类 | Tags: 随思
11
25
2013
9

被冻结的时间

那天中午,照例在网上闲逛时,却得知,那条时间线将永远停留在那时候,永远不会再流动了。不会再有新的消息,也不再会作出回应。

也并不是所有这样的事件都会如此高调地宣告它的发生。

有时,只是突然想起,有个人,很久很久都没有出现过了。

然后发现,询问的消息如石沉大海,有去无回。

甚至都没有办法去搜寻,因为我所知道的信息是那么不完整。

网络世界中,人与人,就像由虚拟的线联系起来。

那些带来温暖和慰藉的线,经常都是那样的纤细。

或者在某个不被注意的瞬间消逝,或者在最后的告别之后断掉。

Mark Pilgram 主动 410 时我只是唏嘘。

当有朋友对我说永别时,我惊讶、不敢置信,亦无限惋惜。

而那些悄然丢失的联系,只能埋藏起来,等待下一次被发掘。虽然明知那几乎不可能。

那些被冻结的时间,那些不会有回应的消息,那些永远的失去。

Category: 未分类 | Tags:
4
13
2013
2

[转] 程序员妻子自述:那些程序员教给我的

来源:伯乐在线

声明:没有找到原文授权说明。文章所有权人如果有异议请联系我。


我曾经跟朋友开玩笑说,这个时代,有两种人的妻子应该要受人尊敬,第一种是军嫂,这是毫无争议的,第二种就是像我这样的,程序员的老婆。当然,这个 玩笑半分自嘲半分真。我的本科是穿着大白褂在各种挂着植物、动物、有机化学、无机化学的门牌的实验室里度过的,在显微镜下给三段生的夹竹桃画过横切片图, 在大头针和解剖剪子的辅助下找过蚯蚓的三条神经,闻过带有臭鸡蛋味的硫化氢气体……

是的,你们都猜对了,我确实是相貌平平,不修边幅,素面朝天的理科女。见了人就开始习惯性地科普:蝴跟蝶,蜻跟蜓,其实是不一样的,还有,白菜跟萝卜其实都是属于十字花科啦,香港的市花根本就不是紫荆,那是马蹄甲,还有,还有,那个康乃馨的学名其实更好听的,叫石竹花……

没有人欣赏我。

因 为没有人在意我在说什么。是啊,我说的那些东西根本就没什么用处,别人还不如去微博上关注科学松鼠会。他们说,女生就应该好好打扮自己嫁个好老公,谁关心 什么纲目科属种。他们说,女生就应该多读点张小娴和亦舒。他们说,女生就应该多学点礼仪和瑜伽。他们说,你要是什么都不会,就学点厨艺啊。他们说,理科的 女生就是木讷,又没有情调,不如去选修一个文科的双学位吧?

——为什么呢?

——为什么?!你不想嫁个好老公吗?!

——哦。

其 实,虽然我没有读过张小娴和亦舒,但是我读过三毛,读过张爱玲,读过严歌苓,读过杨绛,读过席慕容,读过冰心,读过安妮宝贝,读过七堇年,读过王安忆,读 过《飘》,读过《安娜·卡列尼娜》读过《苏菲的世界》……不是只有清新文学和治愈系才能诠释一个女性啊,难道严肃文学就不能解读一个女性了么?

虽然没有学过礼仪,可是我大一就开始报名学习街舞。难道只有学过礼仪的女生才值得被疼惜被怜爱,而一个戴着鸭舌帽跳街舞的女生就应该遭到集体鄙视么?

……

是的,你们都比我聪明,知道我会遇到一个正眼看我的男生。

他告诉我,你很特别啊,很好啊,不需要改变啊……

我顿时就觉得他的周围笼罩了耶稣一般的光辉。

他是个程序员。

当然我不否认我从小到大确实有被一些审美有问题的男生夸奖过长得好,或许是他们深知白富美不会给予垂怜,像我这样的不入流的长相应该可以徒添他们的自信。但是,从来没有一个人跟我说过那么一句话:

你很特别。

可惜晴天霹雳是个贬义词,不然我真的很想用来形容我当时听到这句话的心情。

然后呢,然后我就义无返顾地成了一位程序员的老婆。我继续给他科普各种知识,他从来都是饶有兴致地看着我,就算我口沫横飞手舞足蹈他都不会嫌我聒噪。我甚至在他的鼓励下一天一天觉得自己确实长得不错。

直到有一天,我看到了那个小黑窗,看到了各种在小黑窗上面跳跃的白色字符。

——这是什么意思啊?

——这个表示创建一个目录,这个表示进入这个目录,这个表示查看这个目录的列表内容……

——哦……我给你洗个苹果吧……

后来,我们一个房间两台电脑,我们都不知道彼此在做什么。

后来,我说要不你教教我学编程吧。

后来,他告诉我一个网站,里面是《笨办法学python》,告诉我他常常看cnbeta,看爱范儿,看瘾科技,看糗事百科,告诉我他用 google reader,gmail,告诉我什么是单核什么是双核,告诉我什么是bug,告诉我固件指的不是一个固态的硬件而是软件,他送给我手机, 然后帮我刷机,送给我ipod touch然后帮我越狱,给我的电脑里面装上ubuntu……

他不让我在手机上面贴膜,并花时间跟我解释为什么不需要这么做。也是摔了几次之后他才答应我给手机买个保护壳。

他常常给我普及隐私的重要性,告诉我要及时备份我的各种文件。

后来,我陪他看《生活大爆炸》看《行尸走肉》看《生化危机》……

后来,我陪他逛华强北,逛博物馆,陪他加班……

后来,我考上了研究生,我们结了婚,分隔两地。

我开始学习PHP,学习HTML,学习Java,学习Dreamweaver,学习PS……

然后我开始给身边的女生普及各种计算机知识,陪她们去买电脑,挑手机,告诉她们不要给手机贴膜……

后来,我认识了很多很多很多程序员。从我的老师到同学,从我的朋友到朋友的朋友,从我读的书里面。

我从他们身上学到了很多。

我知道了 Steve Jobs,知道了为什么 less is more,知道了为什么用户体验那么重要,知道了 stay hunger stay foolish.

我知道了 Steve Krug,知道了为什么面包屑会叫做面包屑,也知道了为什么网页要做得 Don’t make me think。

我还知道了 Norman,知道了诺曼门,知道了如果东西使用不便不是我的错,而是设计的问题。

……

我懂得了程序员的幽默。

看到了不一样的世界。

我真正开始从心底里肯定自己,也是因为他。

这是一个好男人带给我的。

所谓的独立,便是不向别人过多索求,也不过多抱怨。

很遗憾的是,我没能带给他什么不一样的东西。

于是就想起了张卫健那首很老的歌:

“我什么都没有,就是有一点吵,如果你感到寂寞,我带给你热闹……”

Category: 未分类 | Tags: 程序员
11
26
2011
8

给博客加入 Google +1 按钮

本来我是懒得去做这种东西的,可鉴于以下几个原因,还是弄了一个。

  • Mike 也 +1 了
  • 代码很简单
  • 方便分享到 Google Plus
  • 反正从国内访问本博客也不容易,就不在乎这个 +1 按钮很可能出不来了

代码如下,真的很简单:

<script type="text/javascript" src="https://apis.google.com/js/plusone.js">{lang: 'zh-CN'}</script>
<g:plusone></g:plusone>

我把它加到了每篇文章的末尾,因为我不认为没看完文章的读者会需要用到它。看不到按钮的读者请自行解决对 Google HTTPS 的访问问题。

Category: 未分类 | Tags: Google
9
29
2011
4

Flash 游戏 Music Catch 2 hack 攻略

Music Catch 是 Reflexive 出品的一款音乐游戏,其PC版本收费,但有两个免费的Flash版本。版本一是一个非常有限的预览版,只内置了一首音乐;版本二不仅内置了更多音乐,并拥有更多选项,它还支持从URL获取外部音乐:

不过,这些选项要逐个解锁——即完成它们。好不容易全部解锁后,终于可以播放自己的歌曲了。搭建个HTTP服务器,却发现需要公网能访问才行,而且速度死慢死慢的——因为它是从自家的网站的一个代理获取歌曲文件的。这也是Flash跨域请求的限制。简单抓包下就可以知道该怎么对付了。

首先修改 hosts 文件,把那个代理劫持到自己机器上:

127.0.0.1       wgextras.gamecentersolution.com

然后是crossdomain.xml文件,把它放自己的根目录下。

<cross-domain-policy>
    <site-control permitted-cross-domain-policies="master-only"/>
    <allow-access-from domain="*"/>    
</cross-domain-policy>

最后是那个代理脚本了,路径是/proxy.php。我简单地用PHP写了个:

<?php
# 为 Music Catch 2 而写
# 使其可以直接从本地读取音乐文件
error_reporting(0);
if($_POST['MusicCatch']){
  $mp3 = file_get_contents($_GET["url"]);
  header("Content-Length: ".strlen($mp3));
  header("Last-Modified: ".gmdate("F d Y H:i:s")." GMT");
  header("Connection: close");
  header("Accept-Ranges: bytes");
  header("Content-Disposition: attachment; filename=\"song.mp3\"");
  header("Content-Type: audio/mpeg");
  echo $mp3;
}else{
  header("HTTP/1.1 400 Bad Request");
?>
<title>400 Bad Request</title>
<h1>400 Bad Request</h1>
<hr/>
<p>This page is intended for Music Catch 2.</p>
<?php
}
?>

就是这样。现在再从URL加载音乐时,只需要一两秒的时间了。

最后,Music Catch 2 SWF 文件下载

Category: 未分类 | Tags: flash 网络

| Theme: Aeros 2.0 by TheBuckmaker.com