我正在 SegmentFault 上录制一些 视频课程,欢迎购买收看,这是支持我创作更多技术内容的好机会哦。
基于业界最成熟的加密和版本控制工具 —— GPG 和 Git 的密码管理器:Elecpass
归档 2013 年 4 月

石头剪子布

(写于半个月前)

闲来无聊看了一部同名微电影,25分钟,翻拍自在QQ空间和微博流传了很久的一个段子。

一个变态杀人狂绑架一对情侣,让他们玩石头剪子布,赢的人活下来,平局一起死。

电影本身,画面还是相当精致的,而剧情在原有的不足140字的段子的基础上真的没有什么突破。影片展现了三对情侣的选择,他们无一例外地都事先约定好了一起死,但却又都没能如愿,有的是因为自私,有的是想保护对方,还有的不得而知。

对我这个情商为零的死理性谈爱情和生命的取舍实在不好玩。生命的唯一意义就是繁衍后代,爱情不过是附属品。从前有一群人不这么认为,后来就没有后来了,因为他们都死光了。更何况两个人活一个比一起死要划算的多,就算是为了惩处凶手,避免更多人受害,也要留个活口啊。再加上石头剪子布这个十分不靠谱的游戏方式,如果不是因为有情侣这个元素,我丝毫不认为这个段子会火。

我想如果是我,我不会事先约定的,随运气吧。

来看另一个更经典也更简洁的博弈问题(囚徒困境).

两个同案犯,因证据不足,必须要互相指认对方的罪行才能定罪,于是警察将他们分开审问。

若两人都不指认对方,则均无罪释放;若一人指认另一人不指认,则前者从轻后者从重,分别判一年和十年;若两人都指认对方,则各判一年。

本来从两个罪犯组成的团体来讲,两人都不指认是最好的结果。

但一旦从个人的角度来考虑,那么指认则是最佳选择:若对方不指认,我指认,那么我能获得更少的刑期;如果对方指认,那我同样必须指认才能获得更少的刑期。

可以看出囚徒困境是对个人利益和团体利益的一个博弈,在无法沟通的情况下,因为出卖同伙会为自己带来短期的利益,所以彼此出卖虽然违反团体的最佳利益,但却是个人的最佳选择。

我想电影中的杀人狂想要通过游戏验证的也是情侣之间是否真正地信任对方,能否通过这种信任换取两个人的最佳利益。不得不说,电影中这个游戏规则,设计得很失败。

笔记:PHP和PEAR, PHAR, PECL

这三个东西可以算是PHP中的高新技术了, 既”高科技”, 又是新东西.

有PHP开发经验的可能见过这几个词, 但真心估计没几个详细了解过的.

它们有一个共同点, 都是用来管理PHP的扩展的.

PECL

即PHP Extension Community Library, PHP扩展库.

这里的扩展指的是使用C语言编写的动态链接库扩展, 通过php.ini配置, 并随PHP进程被装入内存.

常见的PECL扩展比如:

  • apc – 字节码缓存器
  • xdebug – 调试工具
  • PDO_xxoo – 数据库驱动
  • memcache, mongo – NoSQL数据库驱动
  • markdown – 文本处理器
  • zip – 压缩算法

这种动态链接库又分两种, 一种是用户空间扩展, 如mongo, markdown, 旨在通过C代码提升性能, 为PHP代码提供更好的抽象.

另一种是Zend扩展, 这是对Zend内核(PHP引擎内核)的扩展, 如apc, xdebug.

PECL在Windows上并不好用, 通常的做法是直接下载形式如php_xxoo.dll的已编译好的二进制动态链接库.

下载时还应该选择对应PHP版本号, 处理器指令集, 线程安全性的版本.

据说PECL的基础设施还在建设中, 目前有个简陋的网页(http://downloads.php.net/pierre/)可以下载到一部分编译好的Windows PECL扩展.

而在Linux则方便不少, 比如要安装apc, 只需:

pecl install apc

即可, pecl是PHCL的命令行工具, 可以自动完成扩展的安装(通常是下载源代码后自动编译)工作.

PEAR

即PHP Extension and Application Repository, PHP扩展和应用库.

这里的扩展和应用, 指的是用PHP编写的软件包, 一系列类库性质的PEAR包会被安装到PHP的根目录, 然后你就可以在你的代码中直接包含(require)这些类库.

常见的PEAR包如:

  • phpDocumentor – 文档提取工具
  • PHPUnit – 单元测试框架
  • DB – 数据库封装

PEAR希望创建一个规范化的PHP源代码包仓库, PEAR本身也对源代码的格式提出了一些要求, 以便于让源码包更加通用和规范.

同时PEAR也是PECL的上级项目, PECL是PEAR的一部分, pecl的命令行工具也包含在PEAR中.

#安装标配的源码包:
pear install db
#PEAR也采用了`软件源`的设计, 安装非标配的软件包如phpunit, 需要先添加频道(软件源)
pear channel-discover pear.phpunit.de
pear install phpunit

PHAR

PHAR即PHP Archive, 起初只是PEAR中的一个库而已, 后来在PHP5.3后被重新编写成C扩展并内置到PHP中.

PEAR用来将多个.php脚本打包(也可以打包其他文件)成一个.phar的压缩文件(通常是ZIP格式).

目的在于模仿Java的.jar, 不对, 目的是为了让发布PHP应用程序更加方便. 同时还提供了数字签名验证等功能.

.phar文件可以像.php文件一样, 被PHP引擎解释执行, 同时你还可以写出这样的代码来包含(require) .phar 中的代码.

require("xxoo.phar");
require("phar://xxoo.phar/xo/ox.php");

PEAR中的很多源码包都通过PHAR打包.

bcompiler

提到了PHAR, 我还不得不提一下bcompiler, PHP bytecode Compiler, PHP字节码编译器.

虽然它目前只是个实验性项目. 可以通过pecl安装.

很多PHP编写的商业软件, 有闭源的需要, 通常它们会选择Zend Guard等商业代码加密软件, 它们成熟稳定, 但也价格昂贵.

其实bcompiler就能满足这个需求, 它可以将PHP代码编译成字节码, 虽然保密性不及商业加密软件, 但也很难被轻易修改, 而且因为省去了生成字节码的过程, 会有不少的性能提升, 官方表示编译后体积会减少到原来的20%, 性能会提高30%.

使用bcompiler编译出的PHP字节码文件可以直接使用(就像PEAR那样):

// xxoo.exe 是 xxoo.php 编译后的字节码.
require("xxoo.exe");

题外

有空我写个在线的PHAR和bcompiler编译工具.

宽容和公平

估计大家都有过类似的经历,在学校,某个同学做了些不太光彩的事情,比如偷拿别人东西,背后报复老师同学之类的,但又不知道是谁,班主任老师便会在同学面前威逼利诱,让犯错误的同学自己稍后私下找老师承认错误,然后承诺一定不会说出去。

从小学到初中,再到高中,这样的事情就没少过。前两天,我们班里又(之前有一次丢失若干手机的)出现了一次。班主任的汽车被不知谁划了一条道子。

班主任十分肯定是我们班某个同学故意为之,是在报复她。开始占用大量时间在自习时间和课上和我们讲这些事,还表示这件事如果不调查清楚她就没心思讲课。

一开始她说她已经猜到了是谁,希望这个人能够私下找她,她不会告诉大家,否则她一定让这个人没法在学校待下去。

一天以后,显然没人承认,她的态度软了下来,仍在占用大量时间讲这事,但明显没了起初的自信,看来她并不知道是谁,之前都是在诈。她让同学们每个人写张字条,“匿名”检举,提供线索和猜测,每个人必须写。

所谓匿名为何加引号?她的原话,我是语文老师啊,谁的笔迹不认得。

又过了一天,仍没人承认,班主任说第二天早上一定会去找学校方面查看监控录像,希望那个人能够抓住最后的机会。

第二天,然后,然后没了,没有人再提起过这件事。

以上是我尽可能客观(虽然仍有倾向性)地描述事情的经过。

让我很不爽的一点就是,凭我和班主任老师这关系,我绝对是重点怀疑对象。不过我自以为我还不是头号怀疑对象,我有自己的推测,不过显然我不会说。

以前的若干次类似事件,从来没有过,我离嫌疑人这么近。我开始思考,老师所谓的保护犯错误的同学的行为,真的公平么。

我也不知道最后有没有找到那个人,但无论如何,老师占用怎么多时间去讲之后,每个人都有自己的推测,都有自己的怀疑对象。这样对像我这样的重点怀疑对象公平么?永远没有揭开真相的机会。

如果说这种保护行为只是大家约定俗成的解决方案,那么老师让每个人写字条呢。如果说之前的保护行为只是对少数人不公平,那么写字条会把整个班级都带入一种互相怀疑的诡异气氛中。

我不相信每个人都是坦荡的,每个人都觉得有人在怀疑自己,不然就不会在事件过去之后只字不提,也不会换位思考,给犯错误的人一次匿名的机会。

我觉得除非自己真的被很多人怀疑(不,我说我很坦荡你信么,我只是深夜无聊胡思乱想而已),不会去深入思考这种司空见惯的事情。我在以前的类似事件也是如此,我记得一年前,班里丢手机的那次,我给老师的字条大意是丢失的几个手机也许不是一个人所为,甚至他们也许没有恶意,也许只是拿了别人的手机玩忘了还,结果事情闹大了又不敢还。

而这次我的字条的大意是前几段的委婉浓缩版。

很多时候,人们喜欢宽容少数弱势者,但结果没想到却是间接影响到了多数人的利益,比如城管赶小贩,比如举报高考作弊者。在这件事中,宽容了犯错者,却让其他所有人陷入猜疑,同时也让其他人对犯错有一种侥幸感──自己也可以不必对自己的行为负责。

其实这种事情也没什么标准解法,毕竟学生是未成年人,需要改过的机会。我只是希望再有类似的事件,如果希望宽容犯错者的话,那么点到为止,少说报警啊,让你不得好死一类的于事无补的狠话。或者应当在调查结束后告诉大家真相。不要让大家陷入猜疑之中。

题外:我也没打算给班主任看,之前的很多事情证明了她听不进去任何意见,她会首先质问你居心何在。

现面向粉丝和朋友圈提供小额人民币(一万以下)与 BTC/ETH/LTC 互兑服务

精子生于 1995.11.25, 21 岁,英文 ID jysperm.

订阅推送

通过邮件订阅精子的博客日志、产品和项目的最新动态,精子承诺每一封邮件都会认真撰写(历史邮件),有想和精子说的话也可以直接回复邮件。

该博客使用基于  Hexo  的  simpleblock  主题。博客内容使用  CC BY-NC-SA 3.0  授权发布。最后生成于 2017-11-16.