记一次难忘的编译经历

继续之前写UI的故事。

这些天完善了一下之前用qt quick 1.1写的UI,不再满足于乡村英伦风般的动画的我,准备在界面中加入能生成二维码的功能。

然而对于二维码我并没有任何的认识,好在已经有人造完了轮子,三两下我便找到了这个库相应的类的实现。在qt的这个官方文档的指导下,我迅速的就抄出来了一个qml的模块。又三两下调整了一下anchors和大小,心想大功告成。

然后欣喜的在ubuntu里跑了一下,果然一切都像我预想的一样,堪称完美。(顺便自我满足了半个小时)

半个小时之后,逐渐回过味儿的我才想起来这个东西是要运行在那块破开发板上的。于是开始移植。

小手一点build&run,这个时候才被编译器提醒开发板上没有依赖库libqrencode。

这个时候我才想起来需要编译一个适用于开发板的库。(顺便插播,板子的处理器是S3C2440A,armv4t架构)

而之前我也忘了什么时候在stackoverflow上看得什么问题,下了一个arm-linux-gnueabi-gcc;现在就有了两个编译器,一个是从apt下载的arm-linux-gnueabi-gcc,一个是从淘宝卖家那里搞到的arm-linux-gcc(暂且这么叫吧)。

然后就没动脑子的用这个从apt下载家伙编译了ARM能用的zlib、libpng12和libqrencode,个中艰辛在此不表,以后再叙。

再赶紧把qt工程中的pro文件修改一下,在开发板中的配置开发环境的脚本中添加LD_LIBRARY_PATH变量。把编译好的库文件挪到开发板上。

小手再一抖,结果蹦出来了个从来没见过的错误『illegal instruction』。

事实证明我直觉还是有些准,第一时间我就想到了指令集的问题上去(其实是错误都写脸上了)。

于是跑到可执行文件的输出目录,用file命令看看,结果没错啊,是ARM的。

ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, not stripped

然后又readelf -a看看,末尾写的也确实是v4T架构。

Displaying notes found at file offset 0x00000188 with length 0x00000020:
Owner Data size Description
GNU 0x00000010 NT_GNU_ABI_TAG (ABI version tag)
OS: Linux, ABI: 2.6.32
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "4T"
Tag_CPU_arch: v4T
Tag_ARM_ISA_use: Yes
Tag_THUMB_ISA_use: Thumb-1
Tag_ABI_PCS_wchar_t: 4
Tag_ABI_FP_denormal: Needed
Tag_ABI_FP_exceptions: Needed
Tag_ABI_FP_number_model: IEEE 754
Tag_ABI_align_needed: 8-byte
Tag_ABI_enum_size: int

接着就想起来了之前没有把新编译好的库添加进去之前,实际上是没有出过『illegal instruction』的问题的。所以qt creator里选择的淘宝卖家自带的arm-linux-gcc的编译环境没有问题。

而一切问题都是出在在脚本中设置了LD_LIBRARY_PATH变量之后。我试着将export LD_LIBRARY_PATH一行去掉,果然『illegal instruction』的问题消失了,只剩下了找不到库的问题(明摆的嘛)。

明白问题出在库上之后,开始顺藤摸瓜。这三个库的源文件肯定是没有问题的,有问题只能是编译器的问题。于是试着用arm-linux-gnueabi-gcc(apt-get下的那个)编译了一个helloworld,传到开发板上,果然有『illegal instruction』的问题。然而用arm-linux-gcc(淘宝得到)编译,就没有任何问题。用readelf -a发现用arm-linux-gnueabi-gcc编译出来的是v5t架构。

Displaying notes found at file offset 0x00000188 with length 0x00000024:
Owner Data size Description
GNU 0x00000014 NT_GNU_BUILD_ID (unique build ID bitstring)
Build ID: 2695a06d3c4b95dec91472aefbdebf734fe95bb5
Attribute Section: aeabi
File Attributes
Tag_CPU_name: "5T"
Tag_CPU_arch: v5T
Tag_ARM_ISA_use: Yes
Tag_THUMB_ISA_use: Thumb-1
Tag_ABI_PCS_wchar_t: 4
Tag_ABI_FP_rounding: Needed
Tag_ABI_FP_denormal: Needed
Tag_ABI_FP_exceptions: Needed
Tag_ABI_FP_number_model: IEEE 754
Tag_ABI_align_needed: 8-byte
Tag_ABI_align_preserved: 8-byte, except leaf SP
Tag_ABI_enum_size: int

然后鬼使神差的用readelf -d看了一下输出的可执行文件用到的动态库。只有一个libc.so.6。

恍然大悟,估计就是这个库有问题!

locate libc.so.6,发现对应着两个编译器,果然有两个libc。

/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/sys-root/lib/libc.so.6
/usr/arm-linux-gnueabi/lib/libc.so.6

再用arm-linux-gnueabi-objdump -f看看这两个libc对应的都是什么架构。

果然/usr/arm-linux-gnueabi/lib/libc.so.6的架构是armv5t。

/usr/arm-linux-gnueabi/lib/libc.so.6: file format elf32-littlearm
architecture: armv5t, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x0001840c

而/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/sys-root/lib/libc.so.6的架构是armv4t。

/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/sys-root/lib/libc.so.6: file format elf32-littlearm
architecture: armv4t, flags 0x00000150:
HAS_SYMS, DYNAMIC, D_PAGED
start address 0x000151dc

自己还是要提升姿势水平啊!

自己还是要提升姿势水平啊!

一切真相大白,都是libc的锅。应该是需要-rpath指定库的目录。还是乖乖的用回淘宝上给的编译器吧...

一年之后,域名更换到juiceyang.com了

最近几天godaddy给我发了好几封邮件提醒我域名要过期了。

因为当时注册域名的时候,com域名比me域名贵了好多;而平时主要是在博客上瞎唠叨唠叨,绝大内容都是个人内容,本来想一直将这个域名用下去的。

同时godaddy的界面越来越花哨了,且据说namecheap域名比godaddy便宜许多,于是便准备把域名转到namecheap。

在转域名的时候偶然发现com域名竟然比me域名便宜了许多,加上自己的博客基本上除了自己也没人看,所以果断的把域名换到了juiceyang.com。

回头看自己开始在博客上唠叨的这一年,心里还是有些感慨。

一开始本来想着将博客作为一个技术博客,分享下自己平时的小发现什么的。可是逐渐的发现自己只是中二病发般的想获得一些成就感,除了热情,并没有实力。并不像许多大牛一样能写出许多别人需要的东西。

后来转而向着将博客作为一个记录学习笔记的地方,后来发现这个想法也不太容易实现。一是自己平时上课时的东西基本上都是填鸭式的,少有需要思考和记录的地方,一切都是那么『理所当然』。二是自己平时虽然会玩些奇奇怪怪的东西,伪装的有点geek,实际上也都是google出来的,少有原创内容。三是自己实在是懒,许多东西做出来也懒得在动笔记下来。

最后自己的贪玩的本性还是暴露了出来。记了许多自己游戏、电影、动漫的观后感。逐渐的『技术博客』的主题变成了『吃喝玩乐』。

不过在这一年里,通过写博客还是有许多收获。

即使是受虚荣心的驱使也好,平时干活也比原来认真了许多。遇到问题的时候,更不容易退缩了,经常想着把这个问题解决了,然后把解决方法发到博客上(经常发现别人早就发现了 ( ̄∇ ̄)真是令人伤心)。所以做事比原来顽强了许多。

甚至于玩游戏、看电影、看动漫也比原来认真了许多。前些天看《剑风传奇》的时候,就十分注意作者的画工和分镜,不想原来看JOJO的时候那样傻看。

然而现实是残酷的,许多事情不是认真起来就能短时间内吃个胖子。现在让我写个《剑风传奇》的读书报告,依旧是说不出个一二三。绝大多数事情想要解决还是要依靠google。

不过这一年间自己还是有所成长的(虽然被大神们越甩越远,sigh)。希望自己能在接下来的一年里严于律己,继续进步吧。

ShOnline爬虫小结

前一段那个事儿的不行的『计算网络心理学』的爬虫大作业终于是告一段落了,虽然是强行告一段落。在我们组同学纷纷不给力,我懒癌发作,其他任务缠身的情况下,只是做到了自己满足(反正技术学得差不多了)的地步,估计老师还是很不满意(把上课的学生当作免费劳动力是不对的)。

这个作业的整体代码难度倒也不算难,需要留心的地方无非就是用BeautifulSoup解析、Regex处理文本两块。本来想着数据存到文件系统里虽然速度快,不过查询不好用。后来一想老师虽然没说运行环境,不过应该不能自行配置,就SQLite那个残废的样子,还是用文件系统凑活下吧。

关于Regex处理文本的方法,在去除Discuz!论坛生成的乱码这个里面已经说的差不多了。无非就是写个『筛子』,『筛』文字的过程,没什么好说的。

至于bs,那就更简单了。Regex的『筛子』还要自己写,bs的筛子都是写好的,直接拿来用就行。随便看看文档很容易就能上手。

我觉得值得我学习的就是老师要求的各个模块之间传递的格式是类似于json的那种样子,用一个dict传递。这样将各个模块分的很清晰,多个人开发的话,接口的地方清晰,所以容易沟通且不容易出错。如果换我估计我是想不到这种样子传递的,值得学习。

所示说整个作业没什么难的,难的就是耗时间,人手不够。要说什么是最需要批判的,就是这个课的需求总是变化

这个课是一个老师上课,然后由另外一个不知道是博士还是留所的年轻老师检测代码。然后坑爹的是,老师上课的时候用两个文档提出了一堆要求,然后给出了一个例程,自然例程是满足要求的,然而例程不仅满足了文档中的要求,还满足了一些额外的要求(当然这些要求只存在于老师脑子里)。如果不看例程(想来不喜欢看别人代码),直接就去实现的话,就会miss掉例程中的一些特性,只满足了文档中的特性。

比如这个在爬单个帖子的内容的时候,会开多个线程下载html,这是没有争议的。但是在接下来解析的时候是单线程解析还是多线程解析的时候就会出现分歧。我觉得因为GIL的存在,解析这种明显是运算密集型的工作单线程就好了,多线程反而会因为context-switch多多浪费时间。所以自己的作业里就是那么写的。然而老师觉得多线程下载,顺手就解析了被,所以例程里就是多线程解析。文档里又是另一种要求:只要求了多线程下载,至于解析则没有要求。

最后在提交代码的时候,这个问题就被老师提了出来,他说例程里是多线程解析,我说文档里没有要求。闹得不欢而散。

反观历经了半个学期的这个大作业(虽然从学到写完也就是一周多),最值得反思的问题就是沟通问题。甲方(暂且把老师叫做甲方)的要求不能实时向乙方(暂且把学生叫做乙方)推送;每沟通一次甲方就会多出一个要求,不能在一开始全部列清楚;都什么时代了还在用qq作为通信工具,同一个问题在QQ群里能说N多遍,且不说Linux下面没有qq,这种以时间为轴的讨论方式效率实在太低。

解决这些问题都很容易,比如搞一个maillist,有新信息直接全部发送,大家讨论的问题也都能看到;在项目开始时,仔细的写一个要求的文档,然后就不能再添加新的要求;使用团队协作工具,主题式的讨论等等都可以解决之前的问题。

只可惜许多事情不是做不好,只是人们都是懒癌发作,压根就不想好好做罢了。说来也是,又不给多发钱,又何必呢,呵呵。

duiniutanqin

说来说去估计也就是这种结果。想做好的人自然会做好,不想好好干的人怎么说都没用。

 

Hello world again!

忙活了一整天,还是把博客从SAE挪出来了。

前一段时间东富帅搞了个Github的Student Pack。在他的刺激之下,我也好不容易摆脱了之前的懒散,经过5道手,把钱交到Digital Ocean的手里面。

实在受不了GoAgent的速度了,于是搞了个SS。觉得有些资源浪费,于是就又把博客挪过来了。折腾一通之后,感觉确实比SAE的日本线路快了不少,而且也方便了些,毕竟不再用折腾SVN了。

也亏着自己原来在用七牛的插件疯狂的薅七牛的「牛毛」,图片都是直接上传,然后cdn到七牛那。没有用外链省了不少劲。

如果现在让我在选择一次的话,估计我会直接把博客安在VPS上吧。过程也不想自己之前想的那么麻烦。就是用户权限那里废了些劲。而且SS配置好了确实速度很快,100M的免费带宽不用白不用。可惜的就是好像有UDP端口的游戏都不能用这个,比较残念。而只用TCP的就没问题,POE玩的嗖嗖的。

恩,新的IP,新的开始。希望趁着这股热乎劲能把之前的懒散扫一扫吧。

因果关系与蕴含的不同

前几天写AI的作业的时候,老师让将一个命题写成公式形式,然后化成子句集。其中第一个命题是「每个储蓄钱的人都获得利息」,想着这个命题的意思应该是「如果一个人存一定数量的钱,那么该人会获得一定数量的利息」。

如果和那么两个分句的结构倒是挺明显的,在这两个分句之间的关系上我遇到了困难。

首先从蕴含符号开始说吧,(Prightarrow Q = sim P vee Q)。其真值表如下所示。

(P) (Q) (Prightarrow Q)
T T T
T F F
F F T
F T T

这个表的第1、2种情况很容易想通,结论是明显的。

举一个例子。令(P:xneq 0)和(Q:x^2>0),显然((forall x)(Prightarrow Q))。也就是说,直观来看,这个命题应当是成立的。

但是看上面的那个真值表的话,诡异就在于当(P=F)或(Q=T)时,(Prightarrow Q=T)成立。

我认为这个问题应该这样理解。因为「((forall x)(Prightarrow Q))」和「因为(P),如果(Q)」并无法准确的表示因果关系。

不妨设(P=F),则明显(Q)为任何命题,命题((forall x)(Prightarrow Q))都为真。直观的说就是命题(P)和命题(Q)即使是在没有关系的情况下,如果满足上文中的关系,那么命题((forall x)(Prightarrow Q))也是永真的。即,命题(P)和(Q)不需要有联系,就可以满足「如果(P),那么(Q)」的关系。即,(P)和(Q)之间即使不存在因果关系,也可以满足「如果(P),那么(Q)」的关系。换言之,「如果(P),那么(Q)」无法得出「(P)和(Q)之间存在因果关系」的结论。

可能会有「既然无法表达,那么为什么还要用这个」的疑问。这也是没办法的事情,因为不这样安排真值表的话,就会和因果关系的真值产生冲突。可以说,使用蕴含是一种无可奈何的折中路线。

整个问题的根源还是在于汉语中的「如果,那么」这个连词覆盖的范围更大。因为「如果」表示假设,而「那么」表示上文的假设成立之后也成立,其也包括了同时成立却没有因果关系的句子。如果比作一个集合的话,表示因果关系的句子应当是使用「如果,那么」的句子的子集。

原因很简单,随便举几个常见的例子。

1.如果冰淇淋畅销,那么会有很多人淹死。

事实上,这都只是夏天到来之后的现象,天热导致冷饮畅销和游泳的人变多,其分别与夏天到来有因果关系,但是两种现象并没有因果关系。

2.如果起风了,那么雾霾就会消散。

本句中的两个分句是存在逻辑关系的。所以此时「如果,所以」是表达因果关系的。

3.如果太阳打西面出来,那么明天是世界末日。

本句是典型的「如果」一个永假命题,再「那么」一个真值随意均可的命题的句子。因为假设的东西永远不会成立,所以后半个分句也不需要在任何情况下成立,即不需要判断后半句是否成立即可判断整个句子成立。

4.如果明天会下雨,那么今天太阳会打东面出来。

P.S. 没准世界末日太阳就不出来啦!

本句是典型的「如果」一个真值随意均可的命题,再「那么」一个永真命题的句子。无论前提是真是假,后半句都会成立,所以整个句子也永远成立。

上面4个例子1、3、4三个例子中的分句都没有因果关系,2这个例子中的分句是有因果关系的,但他们都符合蕴含的定义。

所以说,使用蕴含表示因果的这种奇怪的错觉还是因为自然语言中无法准确表达逻辑所导致的。当自然语言中的一个存在因果关系的句子被转化成了蕴含形式之后,就再也无法分辩其是否具有因果关系了。表达其因果关系的语义永远的消失在了符号之中。

而事实上这种因果关系,也并不是命题逻辑所关心的重点,命题逻辑所关心的,也只是各个部分的真值被确定之后,整个公式的真假情况。

野长城游记

在怀柔大学已经待了大概一个月了。本来想着闵行大学已经够偏得了,没想到怀柔大学更偏,离市区足足有了70多公里,去市里坐公交大概要3个多小时。

不过乡下也有乡下的好处,在闵行的时候还感觉不出来。到了怀柔,这个感觉就特别明显。

怀柔郊区的空气确实不错,毕竟离市区70多公里,给我一种到承德比到北京还近的错觉。学校周围两面环山(不知名小山包),一面环水(雁栖湖)。一出门就能看到满山的翠绿色,从学校走不了多久也能到雁栖湖边,传说骑车子绕一圈都要一个小时。来北京之前总在犹豫空气是不是不是很好,过来以后发现这和闵行的空气也差不了多少。

今天风和日丽,红旗招展(拖走)...

总之天气不错,和班里的几个同学一起去爬了一次学校背面的野长城。

爬之前还觉得野长城就是那种破破旧旧的年久失修的长城,到处都是断壁残垣、破砖烂瓦那种。结果到那里发现完全不是那么回事。

IMG_20140927_134308

还没上山就看到了坑国际友人的路牌,果然怀柔和国际范不相容啊!

除了入口处的未对公众开放的牌子,和长城上到处可见的羊粪蛋以外,完全看不出来这是段野长城。城墙也好,烽火台也好,都修的有板有眼,现代感十足。当然少不了的,长城砖上面写满了XXX到此一游之类的东西。想起来毕业前去武汉玩发现长江大桥上都有这种东西,不知道我朝人民在宣示X权这方面是不是有着特殊的爱好。

这次爬得长城是个南北走向的,长城的西面是个山谷,因为有着胸墙所以暂且估计此面向敌。东面也是个山谷,山谷里有各种野生的果树,班里的小伙伴们摘了不少野山楂和野枣,本来还有不少野栗子,不过都被摘光了。

IMG_20140927_140506

爬得第一个烽火台,透过窗孔就可以看到“敌人”一侧。当然现在是一条将长城截断了的公路。

山上的虫子很多,也很大。路上见到了半张手那么大的螳螂,将近十公分长的蚂蚱,当然还有漫山遍野的臭板虫和壁虎。上山的山路上还看到了一只巨大的蜘蛛。

IMG_20140927_143236

爬到半山腰照得照片。照片右下角的城墙的单侧胸墙可以显示出,照片中是城墙的内侧——也就是自己人一侧。图中的大概是密云县城。

IMG_20140927_153408

图正中间两座山包之间的那片就是我们怀柔大学。那个圆滚滚的火烧一样的建筑旁边就是雁栖湖。

之前知乎上还有人说过长城有运输作用,今天爬完之后我对这个说法产生了深深的怀疑,不知道他们有没有爬过长城。今天爬得长城一开始还好,比较平缓。山头与山头之间就是缓缓的一个下坡和上坡。随着山势变得越来越陡峭,城墙地面的坡度也变得越来越陡峭,最陡的地方已经超过了45度,感觉有50多度的样子。爬得时候被迫手脚并用,十分狼狈。快爬到山顶的时候,道路都是在很大的一块岩石上凿出来的。不知道在这种城墙上怎么能够实现他们说的一路小跑的运输方式,人都走不动,更不要说辎重了。

IMG_20140927_153413

这已经是下山时候的照片了,上山时候爬这段真的是累成了狗。跟腱一直要发力,爬完这段陡峭的城墙之后脚都软了。

说道山顶,山顶的风光确实不错。极目远眺,能够看很远。在天和地的交界处,竟然能看到一条威严耸立着的大裤衩,可见今天北京空气实在不错。再近一些则能看到顺义、怀柔和密云。雁栖湖边的一张火烧一样的建筑物在阳光的照射下熠熠生辉,雁栖湖被湖边的小山丘挡住一部分,好像也没多大。

不过可惜的是山顶的烽火台里面满地都是羊粪蛋,传说是个羊圈,没办法到山顶的烽火台里看啦。而且在山顶照得全景照片忘了保存,什么也看不到啦 T_T

三点多的时候,我们开始一点点的往山下蹭。上山确实比下山容易多了。中途有几次差点滑倒和崴脚。最后同学去摘果子的时候,太阳已经快要下山了。

IMG_20140927_164902

这已经是下山时候的照片了,上山时候爬这段真的是累成了狗。跟腱一直要发力,爬完这段陡峭的城墙之后脚都软了。

IMG_20140927_164840

看着这一根根杆塔,电力狗们真是不好混啊!前景真是灰暗 T_T

坐在烽火台的胸墙上,吹着凉风,驱赶着飞来飞去的臭板虫,闻者满地的羊粪蛋。心想,果然“悠然见南山”这种话就是骗人的啊!

ipv6+goAgent=不限流量的上网

UPDATE 2015/1/16:在使用了一阵子的digitalocean之后,发现原先的策略真是太弱智了。说实话,digitalocean最便宜的vps一个月才5刀,大概30块钱。在网上搭个vps,够许多人共用,速度比GAE快许多,尤其是在现在这个特殊时期。另外还可以在VPS上搭wordpress和爬虫等等一堆东西,注册就送10刀,传教别人充够25刀又会送钱,100M的ipv6的网络环境下速度也相当可以,不用简直对不起自己。趁早放弃GAE吧!

中科院的研究生院相对于交大比较坑的一点是网络限制流量,研一的时候每个学生的流量只有5G国内+2G国际(Update:截止到2014年11月,变成了10G通用,还是不够)。在交大用网肆无忌惮的习惯了之后,用中科院的网感觉各种捉襟见肘。本文大概记录下如何通过ipv6不限流量的上网,反正我也没有在goagent里贡献过一行代码,gae怎么工作也不了解,所以写的会很傻瓜。

首先,所需要的东西:笔记本电脑+一条网线。

1.用网线链接电脑和墙上的网线插口。

2.访问kame.net,如果看到乌龟在动,说明ipv6能用了。(xp可能需要安装,不过现在没啥人用了,就不细说了)

3.访问GAE部署说明,第一部分中一步一步做完。

4.下载最新版本goagent

5.鉴于学校的网比较坑,推荐使用ipv6上传。运行cmd,然后ping一下ipv6.google.com,记下那个ipv6的地址。比如:2404:6800:4005:800::1007。

6.打开/server/uploader.zip,打开appcfg.py,找到def create_connection,大概在50行作用。

iplist = sum(一堆东西懒得打了)

替换为

iplist = ['第5步中的ipv6地址']

比如改成

iplist = ['2404:6800:4005:800::1007']

7.按照goagent上传说明完成上传。

需要注意的是,完成上传之后,/local/proxy.ini中的

profile = ipv4

需要改成

profile = ipv6。

8.之后按照说明运行客户端,并安装浏览器插件。

9.enjoy the internet!

对于网吧的回忆

1995年注定是不平凡的一年。

这一年里,JAVA诞生,它将在20年后让许多大学没学计算机的青年悔青肠子;邓丽君去世,而一票AKB48的成员出生,也仿佛昭示着一个时代的逝去和一个时代的到来;Win95诞生,无数小学生将被那空旷的开机声勾的神魂颠倒。

win95

吐槽分辨率你就输了,这个分辨率在当时的crt显示屏上可是科技感的代名词。

当然除了最后一条是我根据逻辑推断出来的,其余都是google出来的。我的记忆力也绝不至于如此之好,能记得3岁时候的事情。记忆中的第一件大事也就是97年香港回归了,只记得那天大家看上去都比平时要高兴,空气既凉爽又新鲜,电视里传来刘德华和那英的褪色的歌声;几个主持人穿着红色的衣服,围在桌子边上讨论香港回归之后的事情,他们谁也料不到20年后会有着鸡毛蒜皮的龃龉。时间啊,真是神奇。

咳咳,跑题了。回归到网吧的事情上。

1995年,神州大陆上第一家网吧在上海滩诞生。而第一次接触网吧,大概应该是3年后的事情了,1998年,那时小学一年级。

当然那时我们还并不管网吧叫做“网吧”,而是将“游戏厅”这个充满了80年代风味儿的名字延续了下来。“游戏厅”的经营规模也远不能和今日的网吧相比,如果非要在它脑袋上套上“网吧”的名字,那它充其量也就是个“家庭作坊式的黑网吧”。

有一家“游戏厅”只是个万千城中村中再普通不过的两层民宅,院子里的小伙伴们都亲切的称之为“老段”,那亲切劲儿就像《血色浪漫》里钟跃民他们称呼“老莫”。而这个名字是怎么来的,直到现在我都不清楚,只是人云亦云的跟着这么叫。

”老段“的大门就像普通城中村建筑的大门一样,黑黑的,上面焊着两个叼着铁环的兽首。唯一特别的是“老段”的电表是挂在家门外的,也许是为了防止抄电表的人发现里面的别有洞天;而大门之上和门前的拐角处,则有两个监控摄像头,现在想起来也不禁感叹一下黑网吧经营者的“良苦用心”。

bnc

“老段”的环境就和图中这样的黑网吧差不多,并没有什么特别之处。只不过现在的孩子们享受的设备明显好多了,那个时候只有crt显示屏和20块钱的双飞燕。

一进门是一个不大的院子,一般堆放着一些杂物。杂物旁边便是一楼的电脑室。加起来大概有10台不到的电脑,屋子的木门上挂着厚重的棉质门帘,门玻璃上粘着一层报纸。屋子里也只有一盏昏暗的白炽灯关了灯之后便是伸手不见五指;屋里的家具也大多是老旧的钢管椅和白色电脑桌。如果没有这些电脑,看起来就像一户普通人家的仓储室一样。

慢慢爬上由被铁锈覆盖了的钢管和水泥组合成的楼梯,“老段”的二楼也有两间屋子,其中有一间是货真价实的“游戏厅”,里面摆着三台方PS1。这大概也就是“游戏厅”这个“官方名字”的由来。另外一间屋子则除了木门边有一扇窗户以外,与一楼的电脑室并无不同。

而关于“老段”的记忆也是从PS1开始的。至今我还记得第一次摸到《古惑狼赛车》时的那种震撼感,就像学前班时透过橱窗玻璃第一次看到《中东战争》一样。于是就开始偶尔和小伙伴去玩上一个小时。记得一个小时是2块还是3块钱,当时也算是一笔巨款了。

后来在玩PS之余会去隔壁的电脑室”瞧瞧“,从主机玩家跳帮成PC玩家也就是那时。1998年还没有流行起CS,Johnny R.是个谁更是压根就没听说过。电脑室里几乎都是《半条命》,大家都在大呼小叫的报点,也会有人不停吹自己弩用的多好,我很讨厌《半条命》里的虫子,很少参与其中。偶尔也能看到两三个人在玩《红警》,当然还是是1代,战术就是比谁坦克爆的快。不过现在想起来令我吃惊的是,网吧里还有不少的外国RPG,当年我还在那里玩过《巫师之怒》。“老段”的老板一般会坐在二楼靠门最近的那个位置,悠闲的抽着烟,玩着《仙剑》,有时我也会站在他后面,看一会赵灵儿不停的放炎咒。外面的阳光透过他面前的窗户,隐隐约约的照射进来,斑驳的铁栏杆影子和缭绕的烟雾让我有些记不起人们的表情。

对于“老段”的记忆断断续续,唯一一件印象深刻的事情也就是有一次我在一楼正玩着《巫师之怒》,突然屏幕一黑。正在我们叽叽喳喳的时候,老板突然探头进来说有人来检查了,叫我们都小声些。我们便都缩到桌子下面,就像地震了一样。结果过了一会,警察什么的并没有出现。老板又探头回来,说已经走了,便合上电闸,我们继续愉快的游戏。

过了一些时间,大概到了二年级,街上的网吧突然就多了起来。相比于“老段”,这些网吧都是正常营业的场所,并不藏着掖着。那个时候好像也没有小学旁边不许开网吧的规定,因为我们学校旁边就有一家,名字好象是叫”赛格网吧”,倒不是因为我经常去,而是因为和我小时候经常穿的一个球鞋牌子一样。

每天中午我都会很早到学校门口等开门,中间无聊的时间就会跑到网吧门口,看坐在门口的老板在联众上下象棋。这个网吧比“老段”干净了很多,机器也少了很多,外间记得只有8台机器,网吧里的人也不像现在网吧里的人,几乎都是30多岁的大叔。他们也不玩游戏,只是泡泡论坛。网吧里间则装满了电话,作为“话吧”使用。现在的孩子们可能很难理解“话吧”这种东西了吧,虽然过去也没见生意有多好。”赛格“大概也就是在两三年左右的时间内倒闭了,联众也在几年以后接近倒闭了。

chaoyue

现在在百度地图搜的话依旧能搜出这个网吧,当时更红火一些的街对面的网吧却搜不出来了。

又过了一些时间,随着年龄的增大以及眼界的拓宽,“老段”的那几个破旧的老游戏再也无法留住我们了。我们也随着年龄的增大,逐渐的开始涉及到更遥远的网吧。记得第一次去那个网吧是有次过年,LC同学拉着我跑到了一个叫做“超越网吧”的地方。

那个时候正在流行传奇,当然不是现在“屠龙宝刀,点击就送”这种。小学生没钱买点卡,便只好去玩私服。记得那个私服的名字好象是叫做“网盟”还是什么的,颇有些江湖戾气。只记得自己当时在新手村刷成了红名...

网吧里也不像现在到处回响着“double kill“、”headshot”之类的。网吧里游戏的种类很多,一排机器10台左右,经常没几个人玩重样的。CS刚刚兴起,一个玩AWP玩的不错的人后面经常会有2、3个人围观,发出阵阵惊叹,不过我玩的飞起也是多年之后初中时候的事情了。泡泡堂也是个蛮火爆的游戏,玩家的实力也多与其游戏角色的花哨程度正相关。

玩家会挑网吧机器配置的事情也是借此知道的。超越网吧街对面后来开了一家腾飞网吧,据LC同学说机器好了很多。反正我也只是没事玩一会一步一卡的私服,撮撮烈火,机器配置对我来说没有什么意义,我便也只是跟着LC同学过去看看,从来没在那面充过值。那些玩CS和war3的好像更看重这个一些,超越网吧的生意那一段时间冷清了不少。

我在超越网吧玩了很长一段时间,直到2002年。

蓝极速事件改变了很多人的生活轨迹。

全国的网吧开始一阵严打,很多网吧都不让未成年人开机器了。加上玩电脑玩的太多导致学习成绩下降太明显,转了学报了课外班,每天忙着满市转悠,一直都没有再怎么去网吧,变成了一个单机游戏玩家。而不少小伙伴则又回到了“老段”的怀抱。

当然周末也会拉着那时在上大学的表哥绕全城一圈,“巡视”一圈所有我去过的网吧。那个时候网吧的生意还很好,是绝对的卖方市场。一般都是黑压压的一片网民们望穿秋水的站在柜台排号,我也只是和我表哥走马观花,看看最近流行什么,顺便听听他在大学打CS的光荣事迹。

网吧慢慢的也出现了不少新游戏,war3啊,奇迹mu啊什么的。印象比较深是第一次见到魔兽世界时,我被彻彻底底的震惊了,游戏竟然还能这样做。还有玩大话西游的经常会一台机器上开三四个客户端,然后挂着脚本。曾经有一次在表哥家门口的一个叫“冲击波”的网吧里面见过连着4、5台机器前面没有人,都只是挂着机。当时还不明白这都是图什么,现在想大概是早期的游戏工作室吧。

cscdkey

1234567890123,那个时代盗版CS在网吧覆盖率100%。痛痛快快的和朋友玩CS玩到天荒地老以外我便别无所求。

就这样一直到初二,大概是2006年左右吧。搬了家的我周末无所事事。无聊的时候会去距我家一个街区的一家网吧,那家网吧实在没留给我什么记忆,以至于名字都已不记得,现在好像变成了一个蛋糕房。脑子里只剩下当时在那个网吧没有什么可玩的,每次都是进到CS的局域网主机里,然后随便玩玩,要么被人虐退,要么把人虐退。

说起CS,就必须要提到初二升初三那年的暑假补课了。那时每天没有什么课,每天下午早早的就放了学,班主任也不在学校。所以坐在北门小花园下象棋的大爷们就经常会看见一群疯孩子风一样的从教学楼窜出来,骑上车子往东飞驰而去。

初三常去的那个网吧叫“明星网吧”,我们都亲切的称之为“star”(注意发音为死~大!)。“star”的机器极其之差,网线电线都裸露在外,乱糟糟的团成一团,油腻腻沾满了灰。且不说其远比不上超越网吧的环境,可能也就和“老段”一个水平,活脱一个黑网吧的形象。想找几台连着的机器也是很难的事情,开不开机的几率实在太高。那年劲舞团风头正盛,网吧的空格键都纷纷遭殃,导致我们打CS时经常跳不上矮墙。

每天我们都驰骋在bloodstrike、iceworld、dust2这几张图上,枪枪枪的不亦乐乎。不过好景不长,快到正式开学的时候,班主任出差归来,我们便也不怎么去玩了。虽然后来还是没少去,不过肯定不是天天去了。

那一个暑假给我留下了太美好的回忆,出了很多欢乐的事情,比如snake同学的母亲骑车子碰到我们,跟在后面听他儿子吹嘘了一路枪法等等。一起去网吧打CS的所有朋友也成为了很好的朋友,一直到现在都还在联系着。

wowcard

翻出来当年一张9村的密保点卡,记得这应该是我的第一张点卡。时光荏苒,wowchina上的enya的《may it be》都已经没了。

07年擦着录取线的边进了高中,母上大人也去外地上班。家里再也没有人管我了,手头钱也多了很多,以至于每天去“胖仔”吃米线以外还能剩下钱买wow的点卡。记得我第一个到70级的法师号练了足足一个学期,可见我是一个休闲玩家中的休闲玩家。记得当时周二周四中午会和丁丁去阳光网吧玩一会,还真是忙里偷闲。虽然经常和丁丁一起去网吧,我却依旧是个休闲玩家,我从头到尾一直在奎岛和联盟有打有闹,有说有笑。高中快毕业的时候丁丁都已经太阳井毕业好久了。

高中三年混迹在阳光和T3两个网吧,主要还是离家和学校比较近。不过同学都分散在各地,原来那种十连座再也见不到了。网吧里的人也更多的是各玩各的。当然偶尔和LC、耗子他们出去娱乐一下wow还是很有趣,记得有一次在家门口的网吧上网,耗子穿着T6级别的装备结果不会扛KLZ。还有我们几个奥格门口插旗发现互相克制成了剪包锤。

直到上大学之后,网吧这个场所可以说是永远离开了我的生活。因为有了自己的电脑,也是因为网吧的环境实在差,最重要的还是因为朋友们都很难再有年少时代那种心态了。至此,我和网吧的故事也就结束了。

后记:磨蹭出这篇短文是因为前几天和LC、耗子压马路的时候感叹现在都没有什么合适的娱乐活动了,于是回想起了自己成长道路上这些年的种种。网吧可以说是见证了我们这代人的成长轨迹。在“只生一个好”的当代,孩子们也只好将网络当作他们的玩伴了。

可惜的是,随着我们的成长,网吧也像许多其他的事物一样,随着时代的转移,逐渐的没落了。以前去过的网吧或是变成了蛋糕房,或是变成了快餐店,或是变成了药房。剩下的网吧也逐渐变得越来越精致,多数不再以往,像一个社区,失去了风味。

时代的车轮太无情,我也仅仅只能记录下罢了。

对于交大的印象

前言

本科毕业了也有一段时间了。大学四年,匆匆而逝,理应在结束之后有一个总结。

本文主要叙述自己在交大生活了四年之后对于交大的一些印象,好的坏的,优点缺点,表扬抱怨均有。

在进入交大之前,对于交大的印象一直是不错的,颇有些“除了清华,舍我其谁”的感觉。事实上高中毕业之后选择学校的时候也是本着这个原则,从交大和浙大中选择了交大。

之所以选择交大,有两个原因。一是因为当初的自己比较稚嫩,懵懵懂懂的并不知道找一些毕业生问问他们的大学生活是什么样子的,选学校主要靠被忽悠;二是因为交大的名气确实很大,南洋公学的名字也不是闹得,交大作为有名气的工科学校深得我心。

于是在入学之前,确实对于交大充满了期望。入学之初也是踌躇满志,觉得自己将在大学期间大展拳脚,有一个“现充”的生活。

但是往往事与愿违,理想很丰满,现实很骨感。在交大生活了四年之后,回想自己当初对于交大的种种期望,确实有些失望。

试点班英语授课

既然是对于一个学校的印象,肯定首先要说说学习环境。

报交大的时候只是报一个学院,专业是在入学之后学完基础课再分的。也就是说首先确定自己的行政班级,之后在确定自己所在系和专业。而由于高考的时候分数比较多,报交大的话分数有点溢出。所以选择了一个叫做“电院试点班”的班级。其中电院的全称是“电子信息与电气工程学院”,跟电挂点边的都在这个院里;试点班的意思也很是明了,就是小白鼠试验学校的一系列政策。

其中一项比较明显的政策就是试点班,相对于普通班级,被要求修更多的英语授课,估计是意在和国际接轨。比如大一时候的数学分析、离散数学、线性代数等,大二时候的信号系统、嵌入式、DSP等许多课都是英语授课的。

不过首先英语授课进行的并不彻底,其只集中在基础课(例如数学分析、离散数学等)和电院大平台课(就是大家都要上的课,可以理解为高阶基础课,例如基础电路、嵌入式)这个范围中。随着各个专业的专业课的开始,授课方式又退回到了传统的中文大讲堂的形式。由于英文授课要使用英文教材,中文授课要使用中文教材。两种教材中所介绍的方法经常有一些细小的不同之处,所以就造成了在教材转换时出现的不适应。一个明显的例子就是二阶电路求解,英文教材并不是很注重过程,最后也是分了好多类型直接套公式;而中文教材中是通过拉氏变换直接求解。这中间过渡的时候就会遇见一些障碍,不过一般不大。

另外,由于英文授课也是近几年刚刚开始的,老师的教学经验严重不足,从自己的口语到上课内容的准备都不能令人满意。口语问题最明显的例子就是线性代数老师在读orthogonal的时候总是会读成“凹骚高闹”,以至于三个试点班90个人就这么被带跑了,可能现在还有人不知道这个词该怎么读;而上课内容的问题的例子可以举大学物理这门课,这门课往往作业和上课内容没关系,考试和作业内容没关系,抄作业的考的比写作业的高,最后想想的话,其实除了听老师说的一些趣事,这门课内容也不是很多。

当然也不能一棍子打死,事实上由于老师英语授课太水,而英语教材有往往有深入浅出的特点。这些英语教授的课程往往我都自己啃教材,自学下来了。某种程度上说,确实锻炼了自己的自学能力和英语水平。

实验课流于形式

本专业有许多实验课。本来初衷是好的大家都明白不再细说,但是安排的实在是不过脑子。一个学期课时就有限,上课本来就不够用,还要挤出部分做实验。导致上课的时候突飞猛进,草草结束,比如电机控制这门课的矢量控制着一章,看全班的表情就知道两个课时根本就听不懂。

另外,学校安排实验课的内容也有问题。比如修的绝大多数有关嵌入式的课,老师都会准备好例程,最后做实验学生只需要把例程里的一部分代码挪一挪,改一改参数,即可完成实验。这需要修改的还往往只是主函数里的实现功能的部分,硬件的初始化之类的根本不涉及,都是封装好的直接调用即可。最后大四的时候有人竟然连个UART的初始化都写不出来。学生们拿到片子也不知道先查datasheet和user manual,只知道像小鸟见到老鸟一样要各种东西。

当然有好的情况也有坏的情况。大二时候修的科创IIB就很不错,从opencv的基础知识,逐渐的ben过渡过渡,最后完成整个工程。老师在其中也只是起到了一部分领路人的作用,并没有给很多直接的信息。

实验课流于形式的原因也是多种多样,涉及的人也很广。但是我并不是做新闻调查,我也只是从表面现象上描述一下,确实存在着这种问题。

老师给分没有标准

看到这个题目有可能会想,又不是初高中的时候了一切为了高考,分数就是一切。大学了总应该以素质教育为目标了吧,分数都是其次的。
事实上,在天朝这个大环境下,别说是大学,我觉得就是工作之后,也将在很长一段时间内被某些分数困扰着。当然本部分还是会集中在大学阶段的分数。

通过周围人申学校的经历来看,成绩确实占了挺大一个比重。许多GPA不高的大牛都很可惜的没有很顺利的申到自己心仪的学校。其次,大学期间申奖学金、保研资格竞争等等都需要有个不错的成绩。而许多人确实打一进大学开始就是准备出国、保研、拿国奖的。对这些人来说,分数至关重要。

但是提高分数的诀窍是什么呢?

事实上并不是好好学习,这只是比较傻的一个方法(虽然不好好学习基本没戏)。提高分数的一个重要的方法就是选一个给分比较水的老师,具体哪个老师给分高,哪个老师给分低,这个就需要问问往届的学长学姐了。同样要求修的2个学分,很有可能这个老师开的课就比另一个老师开的课能更容易的拿到不错的分数。

当然这就造成了一个问题。很有可能要求严格的老师的班上的学生普遍分数不如要求水一些的老师班上的学生。这个时候分数就失去了评价一个群体中的个体的功能,虽然招生老师觉得这个功能依旧存在。

不给大四狗留饭碗

此处所说的不给留饭碗真的是不给留饭碗。作为东三区周围唯一的一个食堂,三餐,在毕业前两个月的时候关门了。理由是三餐要进行修正,但是实际上直到我们还有几天就离校的时候才开始进驻人员休整,走之前没吃到回民食堂的土豆牛肉面也有些遗憾...

之所以说这个事情,其实是想说,在交大,学生不算什么主体。在做决策的时候,学生的利益是基本不会被考虑的,是当之无愧的弱势群体。三餐的装修也不过只是这悬殊的力量对比之下的缩影,如果在交大生活的话,需要随时做好被各种行政人员甩脸的准备。

转专业很方便

交大也不只是上文所说的那些缺点,事实上也有很多优点是别的学校所不具有的。其中转专业的难度相对于别的学校就很低。

所以对于高考成绩不是特别理想的学生来说,有这样一条道路。就是先进入交大的某一个要分并不是很高的专业,然后在多读一年转专业转到其他系。不过一般两个系都会课程相差比较多,所以很有可能需要在新的院系多上一年课。(这么看的话其实和复读也没什么不一样的)

不过总体来说,先进入交大然后再转专业的风险感觉好像低了那么一些。

饭菜还算便宜

到了北京之后才觉得较大的饭菜其实还是蛮便宜的。与北京这面动辄17、8的价格来看,交大十块出头就能吃到两大肉一素菜吃到饱的价格真是亲民。

而且食堂比较多,即使排除了鸡肋的六餐之后,依旧有五个食堂可以选择。门口也有众多的黑暗料理,口味风格覆盖更全,相对来说也不是很贵。

想再想想也蛮怀念那些小饭馆的。

update:

在怀柔呆了两个月之后,发现交大的饭相对北京的学校还是挺贵的...上文中提到的十几块是去教工食堂吃的...同样的一条鸭腿,怀柔卖4.8元,交大楼下可乐庭要7块(截止到2014年毕业)。

有效提升逼格

来了中科院之后发现了这个现象特别明显。不知道是因为交大学生生源好还是因为在交大能有效提升逼格还是因为在交大的时候我周围净是些个逼格很高的人,感觉到了中科院之后这面人的文艺鉴赏能力普遍低下,而且荷尔蒙水平普遍偏高。

明显的感觉就是中科院这面的同学都跟我高中时候的同学似的,“青春”袭人,不知道是真的青春还是因为岁月不待人。交大的那帮子死基佬则显得老成闷骚了点。

原来与交大的同学经常能讨论一些有意义的问题(政治问题也好、哲学问题也好),争论起来甚至能争论大半天,过来中科院这面之后却总觉得没有这种环境了。

迎新晚会上学生会对着一个三俗的小品狂笑不止,却没办法仔细静下心来听一首琵琶曲,真是让人觉得有些悲哀。

后记

总的来说,交大算是个性价比不是很高的学校。当然我并没有去其他学校读过,无从比较,我也一直都在“歹毒”的揣测其实学校之间都差不多,之前的期望都不过是我痴人说梦。不过我觉得既然这个世界能变好一些,还是应当让他变得美好一些。交大在现在这个基础上,本还能做得更好一些。

别了,上海

毕业季到了,满脑子都是《纪念刘和珍君》式的开头,果然总还是要记些什么。

昨天晚上的时候和哥们儿们一起去看了VOS毕业晚会,虽然晚会的节目挺无聊的,不过莫名的还是受到了自己的感触。于是晚会结束了之后又去学校门口吃了黑暗料理散伙饭,喝了大学四年里第一次啤酒。

回到宿舍之后,同学们很有兴致的凑到一个屋子里玩狼人杀,我却怎么也提不起来兴致,只好一个人悄悄的躲到阳台上喝闷酒。

一仰脖子,喉头一下一下的鼓动,这个时候才能感觉到自己还活着。看着酒瓶里一点点冒上来的气泡,看着酒瓶里一点点散掉的泡沫,自己的大学四年也许就像瓶子里的酒一样,盛大再迅速的消散。

想来大学时期自己的改变还是蛮大,这四年里像一块干裂的橡胶一样,心态迅速的老化了。游戏也好,生活也好,对许多之前所热衷的事物都再也提不起任何热情,也从未像现在这样恐惧衰老。只是像一个垂死的老人一样混日子,默默等待着最后审判的来临。

虽然老化了,可千般万般遮盖,还是会留下一些年轻人的习性。毕业前如何如何说着只是毕业而已,真的到了眼下,到了后天就将离校的时候,心里还是有些失落。想自己这四年里的点点滴滴,想自己这四年里的种种遗憾,却也明白无论怎么想,都再也无法改变了。而自己这四年里经常做的事,也再也没有机会继续下去了。再也无法拿上楼一桌子吃不完的可顿,再也无法吃到甜得齁嗓子的冰沙,再也无法开5人黑打AI,再也无法吃饺子吃的一群人扶墙出了。而这景色也再也不再属于我。

backyard

站在阳台上,看着这逐渐变得灯火通明的闵行乡下,看着这个自己一直想要逃出的地方,却又有些不舍了。也许过几年,就像高中一样,变成一个与自己没有任何关系,也没有自己任何印记的地方。我恐惧,恐惧在不久的未来,自己在这里就会变成一个彻彻底底的异乡人;恐惧在不久的将来,一切关于这里的记忆都会随风而逝;恐惧在不久的将来,这些熟悉的事物都将变得可怕的陌生。

可令我感到矛盾的是,自己又想忘记在上海的记忆。在上海的这几年,自己已经彻底的变成了一个屌丝学渣,学业爱情双失败。我像一个难民一样,卑微而迫切的想要逃离上海,逃离这个让我伤心的地方。

在这种种矛盾之中,在这点点酒精之中,精神逐渐变得扭曲,意识逐渐变得模糊。

时间是治疗一切伤病的良药,也是抹去一些痕迹的刻刀。也许再过几年,联系逐渐稀少,同学们会变得逐渐稀疏;对于大学的记忆也会逐渐淡薄,最后就像晾干的纸,只留下几许仿佛的水印,令人看不清明。

今天上午参加了学校的毕业典礼。四年的时间就像一个轮回,我们在参加入学典礼的时候,天空中飘着绵绵的细雨;而我们在参加毕业典礼的时候,天空依旧在哭泣,不知是快乐还是不舍。

毕业典礼结束,扭头看着逐渐散去的人群,看着逐渐空下的看台,看着同一届的同学逐渐消失。我后知后觉的才感觉到,毕业真的到了,这个校园我再也回不来了...而且和以往不一样的是,此次分别,便不知能否再次相见。

看着这些毕业时拍的照片,我清楚的知道,过去的那些好时光已经再也回不去了。面对着我们的,只有离开父母庇护后的残酷的生活。我们也只能这样,就此别过,各自奔天涯。不久的以后,便再也无法互相得知彼此的喜怒哀乐,之间的那份默契也将逐渐消失。在我们逐渐老去的时候,也只能打开相册,看着一张张青春的脸庞,淡淡的叹口气罢了。也许还会拍着脑后勺,怎么也想不起照片中的那个人到底叫什么。

本来想好走的时候大喊一声“西出阳关无故人,天下谁人不识君”的,可真到了自己离开的时候,却怎么也无法平淡的说出这句话了,总觉得有什么在晃。

捏了捏眼,回了回神。无论如何,自己终究要以负犬的姿态离开上海了。自己也终究不是那么重要,也只是一个普通的过客。

别了,上海!

希望大家都好好的。

希望以后你不再负有心人。

希望以后抱有希望的人都有所收获。

希望以后每个人都能过上自己理想中的生活。