Shell's Home

重分区和lvm

Jul 20, 2011 - 1 minute read - Comments

上篇btrfs会导致虚拟机慢死的blog都看到了吧?看到了就不多解释。 首先,删除掉cache数据,还有冗余数据,使得数据可备份化。然后执行rsync -av /home /mnt/mdisk/sync,将数据同步到备份的移动硬盘上。之所以用rsync,是因为我在备份的时候还能看看网页什么的。等第一次备份完成,关闭所有X程序,退出shell这个用户的所有进程,然后再次执行rsync,就可以保证同步。同步完成后,注销/etc/fstab下面的/home和swap项目,重启。 系统启动后,先登入root用户,因为此时/home已经恢复到了/下面,所有shell用户的home路径不存在。建立/home/shell目录,并且复制/etc/skel配置,修改owner后,shell就可以登入了。当然,此时是系统默认环境,并没有定制化。没有关系,我们只需要terminal。在terminal中执行gparted,会出现图形的分区管理工具。当然,理论上说,如果你够熟悉,使用fdisk完成全部操作也是可以的,这免除了初始化shell用户和登入图形界面的麻烦。删除原先的/home所在分区和swap所在分区,切割一个ntfs分区用于将来安装windows(回头可以打游戏),剩余的全部切割,而后开启lvm标记。当然,这一步贝壳当时不知道,而是创立了一个未知分区,再用fdisk调整分区类型为8E。而后系统会提示你,不能保证内核数据结构更新,需要执行kpartx /dev/sda。无论如何,此时我们已经有了一个lvm分区。 lvm的结构是pv -> pg -> lv,也就是物理卷->物理组->逻辑卷。物理的各个分区首先被组织成物理组,再被划分为逻辑卷。这样设计是因为可能有多个磁盘上的空间,被划分为多个逻辑卷。在不改变逻辑的情况下,lvm的默认组织构型是raid0的。不过这对我不是个问题,我只有一个磁盘。 首先创建pv,使用命令pvcreate,没什么好多说的。然后是产生vg,使用vgcreate main /dev/sda7,之所以需要main,是因为需要一个vg命名。而后我们需要从这个vg中创建出一个lv来,执行指令lvcreate -L150G -nhome main,设定lv的名字叫做main-home,大小150G。此时在/dev/mapper/main-home,就产生了一个设备文件,大小150G,可以当作/dev/sda1之类的设备一样使用。不过,这个设备没有经过任何格式化过程,所以还需要mkfs.ext3 /dev/mapper/main-home。在这个指令后,我很习惯的跟了一个tune2fs -c 0 /dev/mapper/main-home来关闭重启检测。使用blkid,发现这个设备已经成功创立,并且有了ID。把UUID复制进(这时就知道X的好处了,console下面比较绕路)/etc/fstab,并且修改刚刚被注释掉的/home一行,更改UUID和分区格式。贝壳当时光记得复制,忘记改分区格式,导致系统进不去。不过也不困难,修改/etc/fstab后mount -a一下就可以了。 此时我们已经建立了有效的逻辑卷,并且正确配置。下面要创建一个交换分区,并且挂上去。废话不多说,lvcreate -L6G -nswap main,mkswap /dev/mapper/main-swap。而后一样blkid和vi /etc/fstab。系统就基本配置好了。验证一下看看。 shell-deb:\~\# pvs PV VG Fmt Attr PSize PFree /dev/sda7 main lvm2 a- 229.19g 73.19g shell-deb:\~\# lvs LV VG Attr LSize Origin Snap% Move Log Copy% Convert home main -wi-ao 150.00g swap main -wi-ao 6.00g 而后就是新系统的启用过程,首先要退出X,注销shell用户的所有进程,然后以root删除/home下的所有数据。如果不删除的话,重启后,这里的数据无法访问,变成垃圾。而后重启,就可以看到正确结果了。不过还不要着急登入shell。首先执行rsync -av /mnt/mdisk/sync/home /home,将备份同步回去。这样我们登入shell的时候就可以看到有效的定制化界面了。另外一点细节是,mdisk使用了ntfs格式,所以导致数据恢复后属性混乱。使用find . -type d -exec chmod 755 {} ;和find .

btrfs上使用虚拟机效率很差

Jul 19, 2011 - 1 minute read - Comments

试图在linux中使用虚拟机的同学请注意,刚刚测试下来的结果,vmware和kvm在btrfs上的IO效率极端的差。 首先是vmware,win2003,512M的实例,开机大约需要40分钟。这种效率已经远远超出了我的预期,于是我改用libvirt管理的kvm。结果依然出乎意料,debian实例的安装需要超过5分钟。由于怀疑是raw格式而非qcow2格式造成的速度差异,因此新建了一个实例,一时偷懒就放在了/下面,这个分区是ext3而非btrfs。结果安装大约在3分钟内结束,这似乎证明了我的猜想。于是我开始使用btrfs下的raw格式进行安装,结果速度依然异常缓慢。由此我怀疑到是btrfs文件系统的问题。 在ext3上创建一个qcow2格式的实例后,证实了我的猜想。问题在于btrfs的某种机制上。在网络上寻找类似问题,并没有发现。因此在blog上提出警告和问题。 有人知道为什么在btrfs上使用虚拟机会导致极端的效率问题么?hdparm和文件读写测试表明btrfs的平均效率并没有问题,磁盘也没有问题。

一个初学者的问题

Jul 18, 2011 - 1 minute read - Comments

今天挺高兴的,因为我看到了一个新手在我的blog上面留言提问。问题摘抄如下,我想他应当不会介意我合理引用吧。 贝壳老师,我是一名大三的学生,下半年马上找工作了。没做过什么项目,编码能力较差但是对技术还算热忱,您觉得在国内做技术40年现实么? 我觉得他的问题比较散,题目也比较大,就专门开了一篇来回答这个问题。 技术40年是个梦想,电脑出现不过60多年的事情,做40年技术的本身就是凤毛麟角,没什么可比性。我认识的做技术的人,最多的是做了将近20年,已经是超级老程序员了。以中国的状况,对做技术的不怎么有利。通常而言,如果你做了五年程序,还是没有什么大的进展,你就会主动的换岗位。因为一般人做了五年程序,却还没有达到一定的程度,周围房子妻子日子会一起压过来,不由得你不担忧你的将来。国外程序员并不背负这么大的压力,而且工资相对平均而言比中国要高一些(当然,国外程序员的工资也在逐渐降低,因为大量的离岸外包)。一般来说,程序员转行最多的是去做管理,也有不少做风投的。出结果的少,多数就默默无闻,只有少数日子过的很惨。 如果你在五年程序生涯后,逐渐确立了自己的风格,并且取得了一定的成就,多数人也不见得继续做程序。大部分人都开了公司,给自己当老板。中国的劳资关系很奇怪,资方比劳方有利的多。混的不错的人,但凡手里有点积蓄的,无不想成为一个资方。我认识的很多老程序员,大都自己开了公司。或者是外包公司,或者是技术公司,但是持续在一线写代码的人却不多了。除去自己开公司的,大部分在大型外企做了技术总监,这些一般是比较有志于技术的。在私企混技术总监的,如果有点年纪,多数都是靠着人脉而非技术坐稳位置的。当然,这不代表我看轻私企的技术总监们的技术。 中国做技术转型快的根本原因,在于不成比例的回报。技术人员要承受长达五年左右的成熟期(http://shell909090.org/blog/archives/139/ ),而且必须全力投入。相反,通常成熟程序员的工资,在写文的时候只有6-8k。加上经验积累,大概在10-12k左右的样子。而做的好的销售可以轻松拿到15k以上的工资,其他途径(大家心照不宣)更多。技术人员还需要忍受技术退火的问题,每五到十年需要重新学习大部分知识。这使得技术人员的投资回报比例低的不像话。 另一个雪上加霜的问题,是中国的盗版问题。中国目前不仅在操作系统领域盗版,而且美剧、动漫、音乐,乃至于创意,皆是盗版,无不山寨。作为用户来说,这给你很廉价的服务。不过对产业而言,这是致命的。目前中国根本没有人真的是做产品的,基本都是抄产品的。产品经理最大的任务,就是根据已有的产品抄一个,然后做一些细节修改,并试图用细节打败对方。在这种思路下面,谁需要用高薪的,有经验的程序员呢?新毕业的学生足以胜任大部分工作,关键是新鲜热辣成本低廉。 上面说了一大通,其实根本没有说到关键问题。你说自己对技术还算热忱,我不知道你热忱的原因。如果你因为技术能赚钱或者很酷,我强烈建议你放弃。和电影里的不同,技术并没有那么大的好处。真正能赚钱的不是技术,而是能用技术解决问题,这个所需要的能力和技术截然不同。也许你会举出Bill Gates和Steve Jobs的例子,我知道你还能举出很多,但这不改变一个事实。他们是用技术解决问题的人,而非仅仅有技术的人。反例你可以看看SGI和SUN这两家公司,都是技术人员的圣地,然而都是悲惨收场。所以如果你打算赚钱,技术不是你要追求的第一要素。也许你会关心,什么才是用技术赚钱的第一要素。这个问题没有标准答案。google用丰富好用的程序赢得用户,apple用良好的设计赢得用户。每个人对这个问题的解答各自不同,知道正确的解答,基本就可以迈入赚大钱的门槛。你觉得我像赚了大钱的样子么? 如果你觉得会技术很酷,我觉得你会落入嬉皮士和脚本小子的范畴。国内能用各种工具扫描网络,破解密码的人非常多,但是能知道各种工具背后工作机理的就相对少。至于能够研究出一种机理,并且写成工具的,可以说屈指可数。实际上,真正酷的是最后一种人。然而大部分人,仅仅是拿着写好的工具,偷盗别人的密码,或者是删除别人的数据,就感到自己似乎拥有力量。这是一种错误而危险的想法。好比你买了一把万用开锁工具,和一把电锯。趁着屋主不在,偷偷溜进人家家里大肆破坏,你觉得有什么成就感呢?这和偷密码,破坏数据是同一类事情,为什么大家会觉得入侵服务器很酷呢?反之,如果你用三年的所有休假,研究了市场上所有的锁,并且一一给出了开锁方法。我想电视台会对这个主题更加有兴趣一点。如果你真的觉得技术很酷,我想你应该仔细研究技术,成为最后一种人。哪怕你最后成为了一个黑帽子(利用技术作恶的黑客),也好过仅仅做一个脚本小子。当然,如果可以的话,白帽子更好。 最后一种可能,是因为你真的喜欢编码。那么,你就必须忍受长时间的编码,旁人怪异的眼光,家人的不解,没有MM,没有休假。在这里要感谢我的老婆,感谢她对我爱好的支持和理解(虽然她不能理解这些技术),否则我得继续打光棍到不知道什么时候。不知道你是否听说过RubyvsPython,我们这帮宅男把编程作为工作,把下了班凑在一起写程序作为一种娱乐。如果你真心喜欢这样,我很欢迎你加入我们这个圈子——当然,多数情况下,这意味着平庸的,和投入不成比例的工资,还有无尽的bug地狱和加班。 如果你没有做过什么项目,我建议你看看我前面写的,如何参与一个开源项目( http://shell909090.org/blog/archives/1848/)( http://shell909090.org/blog/archives/1821/),找一个合适的项目先做起来。你甚至不需要有编码经验,别人也会欢迎你的工作。这对你找工作很有帮助。 另外,如果你打算找一个编码工作,实际的演练一下编码会比较好一点。无论是需要你进行编码的厂商,还是技术上的进步,编码能力都是一种必须的,重要度远远超过英语的能力。当然,比这更重要的能力是阅读代码的能力。当你能够从读者角度考虑,写出适合人类阅读的代码,这就意味着你开始迈向一个新的编码境界。

给初创小公司的几句话(一)

Jul 14, 2011 - 1 minute read - Comments

贝壳做程序员到现在,没去过国企(好吧,和他们有过合作,可实在看不惯他们的作派,死也不去),没去过外企(也是有合作,可惜英语太差),全在各种私企里面打转。从初创公司到中型外包都呆过,还曾是某初创公司的第一个员工,可惜结局不怎么好——关门了。初创公司的一些问题,可谓前仆后继,大家的死法差不多。当员工时,不好给老板直接提意见。现在私下里偷偷说说,有想开公司的当故事听吧。 初创公司第一怕,就是没有经验。没有经验的程序员,没有经验的经理,所以很多事情都不知道怎么办,只能摸着石头过河。实话说,完全摸石头的,还不如不开了。最起码最起码,老板做什么,就必须熟悉这行。想干互联网,必须熟悉互联网。想干企业,就必须熟悉企业。没这个要求,不如不干。至于技术上没经验,可以找合适的程序员。如果老板熟悉互联网,很多做阿里巴巴阿,做腾讯之类的傻话都不会说出来了,他要做的一定是个没有的东西,或者说在中国没有,或者有,但是市场刚要起步。在一个饱和市场内挑战一个巨头,这和唐吉柯德挑战风车是一样的,能得到的只是海明威笔下的鱼骨头。 初创公司没有人熟悉技术怎么办?这就要看你的公司类型了。如果你决定以业务为核心,可以找个诚实可靠(别说看人看不准,如果人看不准,公司哪里都会碰壁)有经验的程序员做主管,记得谈分红或者股份,然后放手给他。他会帮你管理的很好的。不过记得偶尔就他的做法咨询一下其他懂行的朋友。通常这类程序员最好是来自于大型企业IT部或者大型互联网公司,他们会把大型互联网公司的规范带过来。当然,也不要无条件的接受。先文档后程序,重测试轻代码之类的东西对初创是不适用的。起码要等公司有10来个程序员再回头补课。这些人构成的程序部是写不出什么天才程序的,但是可以有效廉价的把你要做的业务做起来。 如果你决定以技术为核心(实话说,中国这种公司比例不高),你起码得有一个高手在手里,才能谈公司的问题。而且公司开起来,你得分给他很高比例的股份。大部分这类创业老板,都是自己就是高级程序员,觉得挺了解程序了。这种情况下的建议反过来,你要找熟悉市场的人,不要觉得你很熟悉市场。程序员不是一个典型用户,除非你的用户都是程序员,否则大部分的需求需要重新考虑,甚至商业模式都未必成立。 初创公司最怕的情况,就是老板不懂技术,也不找人,胡乱指挥。贝壳呆的头家公司,现在已经关门了,所以说说问题也不大。老板决定做销售管理软件,实话说这个决定没什么问题,问题是老板的生产过程。他先找了三个程序员过来(两个新手一个老手,贝壳就是第一个员工,当时年轻,什么都不懂),然后请一个大学教授当顾问。由于大学老师都比较忙,因此他让其中一个比较有经验的程序员负责平时管理,不过还是按照员工待遇。然后他开始做需求,结果时间太少,需求做半本就开始做程序。一下就犯了大忌,需求未系统化。老程序员心知肚明,可是能说什么呢?自己连合伙人都不是,根本说不动老板。 然后制定计划的时候,老程序员制定了一个相对保守的计划——这是当然,因为只有一个老程序员和两个新手,他怎么也不敢激进阿。老板当场否决,把时间提前了两个月,变成三个月完成,并且承诺会加派招程序员。又是一个大忌,拍脑袋决定周期,也没有标杆事件控制。当天我就看到老程序员白着脸进去黑着脸出来,然后很郁闷的修改时间。不过后面的事情好玩的很,程序员来一个走一个,基本留不住人。现在想起来,当时工资实在太低了。工资低是有理由的,贝壳当时基本什么都不会,光学SSH就学了一个多月——还基本不大会用。 做产品的时候,考虑使用数据库,一下子居然挑中了oracle。现在反观,我也不知道怎么做的决策。用oracle做互联网的公司,目前为止我还没听说过第二家,因为oracle的长处在于事务和稳定性,而不是性能。由于维护麻烦,因此也没有买oracle自己的授权,而是第三方公司卖的5W的版本。就贝壳后来所知,oracle从未有这个级别的版本,他们的产品都是20W一个CPU,可以支持25个同步连接来卖的。天知道这个所谓第三方公司是怎么回事。由于配置麻烦(当时还是8),因此抽调我过去处理oracle的安装问题。贝壳就花了一个多月,把linux和oracle安装学了一遍。不过这一来,一个多月贝壳就基本没怎么写代码。一个初创公司一个员工一个月不写代码,可谓是很无谓的损失了。 更夸张的是,由于老板考虑部署的时候,立足点都是——用户太多怎么办,压根没考虑过没用户的问题。所以他开始就自己买机器进行IDC部署。偏偏普通服务器他又觉得太贵,所以还自己装服务器。贝壳再跑了好几次电脑城,买服务器装。虽然采购还是按照采购流程走的,但是又大概一周不干程序。服务器终于全部搞定上线了,贝壳大概一个月花掉了。几个月过去,老板发现进度跟不上计划,就先推迟了发布计划,然后找大家紧急开会。结论是,他加速做需求,我们加班搞定代码。可是有用么?完全没用。下面几个月糊里糊涂,贝壳都不记得自己做了点啥了。发布计划一推再推,贝壳一点信心都没有,就辞职走人了。 后来听说,在长达一年多的开发后,他们还是搞定了系统,并且正式上线销售。但是只有几个客户愿意付钱。坚持了一段时间,老板看实在赚不到钱,只有关门走人。 回顾整个里面的问题,关键是外行领导内行。做顾问的教授是内行,但不是搞互联网的,又没时间。老程序员名义上是经理,却不能否决提议。实际上是最不懂互联网的老板自己在做决策,导致最关键的几个问题上,压根没有发现决策是错的。次之的问题,是为了省钱而浪费时间。程序员出价太低,招的都是新手。买oracle舍不得买原厂带服务的,非要自己搞。服务器都不买现成的,自己组装。这里面能节约的时间,绝对不是花钱能买到的。里面还有什么老板策划需求拍脑袋,听风就是雨,甚至要求我们做一个子功能,叫做”中国地图在线”之类的小事就不提了。 虽说不想埋怨老板,不过贝壳确实在那家公司浪费了生命中的八个月,除了自学linux和oracle安装外没有剩下任何有用的技能。现在这段事情也被贝壳当作一个教训,很多事情不是看起来好就好的,如果事情看起来不靠谱,早点割肉退出不失为一个好的方案。

初创公司的九句傻话

Jul 13, 2011 - 1 minute read - Comments

人都有小时候,初创公司会说些傻话,没啥好奇怪的。不过如果老板持续说傻话,没意图深入学习互联网业,你还是考虑跳了吧。 1.我要做个淘宝/阿里巴巴/百度/腾讯那样的网站/产品。 通常这句傻话下面,往往还跟着,10W块,三个月,够不够?没说后半句就已经够傻了,说了差不多够格上春晚了。你当自己是腾讯啊,没管理没技术的初创公司,靠抄袭,和各大IT巨头的拳头产品拼,没有比这个更傻的了。要抄的对象是外国公司还算合理,具体情况具体分析。 2.我们有来自名校出身的CXO——XXX,来自海外大公司的技术总监——XXX,前XXX公司创意总监——XXX,在他们的带领下,我们一定能XXXXXX。 好吧,有的时候,这句话不是那么傻。问题是,说这句话的人,十个里面大概会失败九个。一方面,来自名门不代表能力超群,有时也可能是能力/人品问题而被踢出来的。另一方面,牛人多了也不行。俗话说,别带两个闹钟出海,带一个或三个。到时候财务总监说砍,业务总监说干,两个人谁都不让谁,老板的头一个比三个大。要是两个牛都在同一个部门,例如两个技术总监,那就更有趣了。 3.我有个创意,不过最近很忙,没法详细整理出来。我大概讲一下,你们先做起来,回头我给你们补充。 连创意细节都不重视,或者不愿意说,还创业呢,失业吧。 4.这里有份策划,你看看要多久?半年?不行,太长了。给你们加20个人,三个月给我做出来,早出来有奖金。 很明显,这老板肯定没看过brooks的那本《人月传说》。通常这份策划一年能出来就算幸运了。 5.暂时没有工资/工资不高,不过我们有原始股份,将来考虑上市。 明显忽悠傻小子呢,一穷二白一起创业,是要双方彼此熟悉和信任对方为前提的。人都要吃饭,光给股份不给钱,来的是什么人就不用多说了吧。 6.恩,策划大概是这样。服务器准备怎么搞?租用?太花钱了。我们自己组装服务器好了,反正不复杂,你就顺手搞了吧,便宜多了。 创业初期,专心自己的业务。一会想自己搞服务器,一会想自己搞所需要的业务库,一会又想把某个功能做成独立网站做接口,你真的想明白自己要干什么了么? 7.我要做一个产品,界面要炫,一定要好看。操作要人性化,要让用户满意。功能要全,人家有的我们都不能少。 老板,您这产品是做什么的? 8.马云当年十八罗汉闯天下,我们为什么不行。豆瓣开始三台服务器顶住了所有业务,我们为什么不行。 是啊是啊,朱镕基当了总理,你为什么不行?释迦摩尼当了佛祖,你为什么不行?抛开各种因素分析,就想着和别人比,你真的有那个条件么? 9.钱不是问题。 恩,多数问题是没钱。

设计的一些原则

Jul 11, 2011 - 1 minute read - Comments

IETF的RFC文档是整个互联网的基石,在RFC1958中,对于其中的一些原则做了总结和讨论。我觉得非常有意思,因此做一下摘抄和讨论。 保证它可以工作。首先做出原型系统,并成功运行,再着手标准化,而不是相反。 尽可能使它简单。如果一项特性并非绝对本质的特性,那么就不应该考虑,尤其是通过组合其他特性也能够获得同样效果的前提下。 做出明确的选择。如果有几种方法可以完成同样的事情,选择其中一种。 尽可能做到模块化。每个协议独立于其他的协议。改变其中一个,其他不受影响。 期望具备异构性。 避免使用固定不变的选择和参数。如果需要使用参数,最好的方法是让发送和接收方协商一个值。 寻找一个好的设计,不必是最完美的。如果有一个好的设计,但是不能够处理一些特例。那么应当坚持这个设计,让怪异的特例自行解决问题。 对于发送一定要严格,对于接收有一定的容忍度。 要考虑伸缩性。尽量去中心化,必要时将负载尽量均匀的分布到所有可以利用的资源上。 要考虑性能和代价。 第二条听起来好像CISC和RICS之争,虽然现在最流行的处理器是一款CISC,但是这并不妨碍RISC成为优美和进化方向的象征。 第三条在两种不同的语言上,有不同体现。python认为Simple is better than complex,ruby认为Simple is boring。具体可以看这里(http://automation-excellence.com/blog/zens-python-and-ruby)。 模块化是一个非常好的主意,但是同样,非常难实现。 第七条在设计大型系统中非常重要,不要为了一点小小的瑕疵破坏整个系统。 joel on software中,提到了第八条。joel认为目前网页格式凌乱的根源有部分来源于此。第八条鼓励人们在建立浏览器的时候,尽量兼容各种格式变化,而不是对每个不符合标准的进行报错。这导致了各种兼容变化。 第九条所有架构师都应该看看。与其购买昂贵的机器和服务,不如在设计系统的时候,就假定系统中的部分会发生故障。使用设计将负载分布到所有可利用的资源上。此条的推论是,大部分设计良好的系统都具有级联失效的可能。因为一旦发生失效,压力会分布到其他资源上。如果这超出了他们的能力,就会导致他们一起失效。

讨论时的态度

Jul 5, 2011 - 1 minute read - Comments

发觉错误要认错,不要在乎面子。死不认错才最丢面子。 不要编造事实。如果你不确定,可以给出参考意见,但是不要说,我确信XXX。更不要为了面子问题而编造一个不存在的事情,大家都会验证的。 别怕专家。专家也是人,专家也会错,更别提里面还有不少的“砖家”。 不随便显露自己的身份。说不赢别人就拿出XX博士XX专家来压人最没意思。除非你们讨论的话题说不大清楚,最后归结为“在XX领域的经验谁更丰富”。 对事不对人。关于某个问题,你可以和人在论坛上吵的很凶,但是转头又是一起吃饭的朋友。不过关于这点,中国人有所谓面子问题。你要先掂量对方是不是个死要面子的家伙。如果是,你让人下不来台导致被绝交,请不要怪我。 不要人身攻击。这里包含了不要质疑对方的出身,动机,等等。例如说不赢就骂对方是猪,猪说的话没听的价值,等等。最常见的,也是最容易发生的人身攻击是质疑对方的动机。例如讨论一个政策问题,说不赢对方,就骂对方五毛,收了好处帮政府说话。这种东西是永远辩不清的,听的人只有明者自明。讨论时你只能就事论事说对方错在哪里,而不是扯到对方动机上去。 不要过度扯无关问题。闲聊时候怎样都好,讨论的时候有关话题适当扯,无关的就不要长篇大论了。 谁主张谁举证。千万别搞倒置了。倒置的话我可以先说你是猪,你举证一下为什么你不是? 不要“敌视”持不同意见者。没有人会永远正确,持有不同意见多数情况下只是意见不同,不是阵营不同。 不要说教,搞一言堂。那是宣讲而非讨论。

社区的准则

Jul 4, 2011 - 1 minute read - Comments

今天碰到了一件挺有趣的事情。当然,有趣是对我们这种老社区用户来说的,对于两个当事人,好像受到了严重的侮辱,不怎么有趣的样子。 起因是因为有个朋友,在shlug上求UltraEdit的注册码。马上有用户说不合适,然后有人建议ban掉。下面出来个人,说不要以为谁都是高手,能不能有耐心帮助一下人家,有人要被踢出去了,凭良心讲,这样是不对的,要说一些良心话,至少救他一次。云云。 我想,也别搞的事情太大,就回复了两句。1.lug论坛讨论Windows话题(事实证明,我看错了,他需要的是UltraEdit Linux版)。2.内容涉及盗版。我的态度分两方面,一方面,我们自己手头的版权也不见得干净(我引了自己的一篇blog,地址这里:( http://shell909090.org/blog/archives/1786/ )。封了别人,有点“只能做,不能说”的感觉。另一方面,帮楼主说话也不是什么善。严格来说,盗版和偷东西是划为一流的。要说是善,颇有孔乙己“窃书不算偷”的尴尬。 OK,下面说要帮助别人的朋友又出来了。首先指正了我第一条问题,楼主需要的是UltraEdit Linux,这个是我看错了。第二条的回复我摘录如下: 内容设计盗版,这个我不否定,但是请问,你能向我保证您的电脑里面没有盗版软件吗?许多时候我们盗版是被迫无奈的 许多正版软件,在我生活的城市和淘宝网上都是不存在合法的获取途径~ 但是我们是否能够因为一个孩子的一次犯错,就认为他是坏人,然后把它抓起来,永世不得翻身? 看到这里,我就气乐了,心说估计这人要给thomas封掉。下面还有些内容,我们后面讨论。他下文又接了一封邮件,内容摘录如下: 而且如果强词夺理的话,我们甚至可以理解这个标题的含义为!!! 哪位可以给一个Ult​raEdit Linux的注册码 要求邮件列表里面的那位网友提供一套正版的Ult​raEdit 赠送与他 至少这在法律上是说的通的,如果要打官司,他是会无罪释放的,完全抓不到他所要盗版的问题 当然这是题外话,我还是希望大家能互相帮助,才是王道啊~~~~~~~~~ 好吧,我暗自叹口气,决定不和他辩了,这人死定了。 为什么?出了什么问题? 我觉得他在侮辱所有人的智商。 要一个UltraEdit的SN,严格来说不涉及法律,任何角度,任何层面都不。就算你亲手破解了一套软件,依然不涉及法律问题。下载盗版,依然不涉及。法律只要求惩罚传播盗版的人,而不是使用盗版的。就是说,要回答楼主的问题,除非真的如楼下所说,弄一套授权赠与给楼主。否则,楼主没事,论坛麻烦大了。作为论坛管理员,警告乃至封禁是份内事,视而不理才是失职。这点事情,任何一个智力正常,了解版权法律的人都应该能知道。 而且,楼下在讨论的时候,使用了“道德说教”的方法,而且是进攻性的道德说教,咄咄逼人。“你应该如何如何,你自己就没有错么?”这类的言辞。实际上,在被ban之后,还单独发邮件给我,讨论关于thomas的决定。全篇依然是道德说教,我怀疑不止我一个人收到。和hacker打交道,道德说教是一种非常差的选择。hacker们才没功夫听你讨论平等,博爱,神爱世人那一套。对于hacker来说,对和错都是显然的,不显然的事情可以投票。哪怕占领了道德的至高点,对于hacker也没有任何意义。大家都不傻,也不在上幼儿园,不用教怎么过日子。更加奇特的是,对于lug这种组织,讨论技术上如何破解UltraEdit是可以接受的。甚至讨论结束后会兴致勃勃的翻译成英文给作者发过去。然而讨要SN是不可接受的。组织成员都知道这点,并且深信不疑。 然后是楼下帮楼主说话的朋友回复我邮件的后续内容摘录: 第三,请问,您所说的这些规定,有一个具体的邮件列表或者网址,贴出来公示吗? 如果有,我也很希望能看看,至少我现在还没有找到,相信很多人都没有找到,而且显然,这里的规范和网络上大家习以为常的大多数论坛,还是有些许出入的。既然这类公告的东西都非常不好找,请不要随意说ban什么的~~~~~~~ 这是你们自己的职责失职~~~~~~~~~ 这里再补充一个问题,请问邮件列表里面有多少人看到过,这个shlug列表发贴规则与规范的? 这个shlug有几个管理员? 是否你们每个管理员都能单独ban一个人?还是必须所以管理员都通过才能ban? 你们ban一个人的时候,管理员之间是否有讨论过? 能否把这些讨论公开来给大家看看呢?让大家觉得是否做的有道理呢? 这里的许多人不愿意说这些事情,很简单,避免不必要的麻烦与冲突,但是问题始终存在 不回避,直面解决问题,才是值得尊敬的。 我觉得,显然这个人不是在国内日子过傻了,就是在党政机关工作。我们为什么没有贴出一套具体的规定呢?阮一峰翻译过一本叫做《软件随想录》的书,原名joel on software。里面有一段话,大意如下。说joel坐火车,看到火车上的规定列表。一大长串,写着“不能XXXX,否则OOOO”。joel就想,显然,这是没用的。真的会犯事的人,才不在乎你写了什么。会来仔细阅读这些条文的99.99%都是智力正常,不会犯事的人。这些条款,对于他们一点意义都没有,反而显得冷冰冰。 他里面用了一个词,智力正常,我觉得可堪形容lug社区。会来lug社区的,至少是智力正常的人(我不敢用成年,曾见过一个初二学生,现在应当升初三了,长江后浪推前浪阿)。作为一个智力正常的人,你应当知道什么是对的,应当知道我们不应该随地大小便,应当知道不应当盗版。对于任何一个正常的,混过网络的人,都不会误解楼主的意思是要求别人赠予一套正版软件,而是要求提供盗版。也不会认为这是理所当然的,不应当被指责的。对于这种正常人都知道的问题,几个管理员需要讨论,再集体决定。这是侮辱管理员的智商,还是以为这是常委投票呢? 为什么需要集体决定?这通常见于两种情况,一个是意见相左,一个是推卸责任。如果关于一个问题,管理员之间意见不一,就需要讨论,集体决定。对于显然的问题,集体决定的唯一意义是,这个决定是错的,集体责任等于没责任。 为什么需要公示条例?同样常见于两种情况,一个是未达成公识,一个是被投诉时的自我防御措施。如果一个未达成公识的事情,例如餐厅禁烟,要实行就必须明确公示条例。即便我们的智力正常,我们也不可能理所当然的认为餐厅应当禁烟或者应当不禁烟。另一个公示条例的理由就是被投诉时的自我防御,也就是joel看到条文的原因。如果一个组织(例如铁路系统)会被起诉/投诉,那么如果没有公示条例,在某些情况下这个组织会面临败诉的问题。如果公示了条例,组织可以说,我们有规定。这是一种会被投诉的组织的自我防御措施。然而你觉得一个全自发的松散组织,有任何被起诉/投诉的可能么?对于这些组织,唯一的问题是参与人员是否满意,是否得到了他们想要的迦南圣地。 而后更好玩的事情来了。楼主总算出现了,开口就是人身攻击。“首先是有点吃惊,但看着看着不禁笑了出来,原来世界上真的是有很多人,爱装B,爱自诩,爱用言辞抨击别人(现实中会被揍所以不敢)”。他自言曾经在LinuxMint的论坛里面,问如何破解WPA2的WIFI密码,结果得到朋友们的热心帮助。由此得出结果“呵,无需多言。某些人,他就那点素质,就那点眼色,就那一点空间,就知道那一点技术,就不得了了,自己仿佛穿上了圣洁的外衣,其实里面还是破内裤。鲁迅先生笔下的某些丑陋的国人到现在还是存在的。” 楼主还有部分邮件,摘录如下: 这个我得阐明一下,UltraEdit是从Ubuntu软件中心里下载的,我下的时候上面赫然写着“Free”,但我装完之后发现要注册码,我立马想到了来这里,这里是一个Linux论坛,然后这里都是懂Linux的人,这里都是用Linux下软件的人,于是我就来问了。但却遭到一帮人的抨击。我是一个linux菜鸟,开始用linux不到一个月,还不喜欢vim那繁琐的命令,只是在寻找一个图形化的友好的编辑器。但是以后我肯定不会再来这里问任何问题了,我想我也会很快的换回到Windows,因为我还有很多问题搞不清楚,不知道向谁,该怎么求教。但这里的氛围,会让初学者心寒。我之前也发过几个初级帖子,但我发现回复你的人大多都不是帮你解决问题的,而是质疑你和说你这不好那不对的。只希望这不是国内linux社区的一个缩影吧,不然就太悲哀了。 为什么开机会随机出现gnome applet丢失,为什么compiz很不稳定,为什么装独显驱动装不上去等等太多的对于初学者很重要的问题,会影响到很多初学者步入linux殿堂的问题。其中不乏我这则帖子这样的问题。可能那些抨击我的人,是从娘肚子里出来就能玩转vim了,不需要ultraedit这样的东西?这里我想作为一个老资格的Windows开发者,为UE说一句话:UE很好很强大,不比vim差! 我觉得这个人想反了。如果我从Ubuntu软件中心(我是说如果,实际上我觉得这个东西很邪恶)下载一个软件,写着Free,但是却要注册码。我会干啥?大概是卸掉,然后向Ubuntu软件中心投诉“描述与内容不一致”。这和UltraEdit好不好没关系。哪怕当年,胡正的stardict我用了很久了。这家伙突然想到说,辞典可以收费。开玩笑,自己的辞典版权还没有搞定(和金山辞典的质疑),而且很多都是社区整合辞典,还想收钱? 我立刻拆掉stardict,转用dictd和各种客户端,哪怕他后来不收费了。 Don’t be evil. 而且LinuxMint那个论坛,我打赌他混的是用户论坛。 hacker们的做法是什么? 首先,还是会回答你怎么做。不过通常不会告诉你,下那个软件,然后上面有个大大的破解,点下去就好了。而是会告诉你,你的网卡是什么型号的,用什么内核驱动,是否支持监听模式。软件选用什么,怎么启用调式模式,调试信息是什么,出了什么问题,等等。 其次,如果你的议题引起了某人的兴趣,hackers会做一些看似无聊但是很酷的事情。例如有人曾经在国外的列表里面问如何在java中将一个数变成负号形式(就是a变成-a),具体的讨论可以看这里(http://www.webgamei.com/club/thread-5028-1-1.html)。%E3%80%82)这个好像还是简化版,我记得那次的恶搞甚至用到了模板编程,以及讨论到模板编程的图灵完备性。 这才是hackers会干的事情。技术,技术,还是TMD技术。hackers才不关心你有没有SN,编辑器好用不好用。如果你打算学习linux,他们会推荐你用vim或者emacs。你表示这个不好用,他们就耸耸肩走开了。除非你说,我打算基于emacs写一个现代编辑器,架构如何如何。内部使用lua语言作为控制,并且做一个elisp到lua的自动译码器。他们会纷纷围上来,看着你干活。如果你干的比较像样,他们会抢着把能干的活干掉,然后合力推出一个1.0版——这大概就是linux怎么出来的。 如果你打算以初学者作为辩护,那是你值得同情的理由,而非必须原谅的理由。如果新手就不应当被惩罚,结果大概是论坛内充斥着新手的叫嚷,“冰天雪地360度裸体跪求,我的显卡不工作了”,“高分求SN,送两个软件SN”。其中大多数人奉行打了跑(hit and run)理念,跑上来跪求一番,搞定问题就潜水,下次还是新手。 他们一辈子会是新手,我们肯定转身就走,离开社区,不再回头。 问问题的时候,你要考虑,我们和你们是一样的。这个陈述包含了数重的意义在里面。你们不会的东西,我们也是慢慢学出来的,为什么要我们无条件的帮助你们?你们是人,我们也是,所以不要害怕权威,认为他的观点一定就是正确的。太理所应当的问题,就要多想想,大家都不是笨蛋。 如果你觉得不习惯,不想学习,可以转回去用Windows。反正这不是lug的损失。 哦,对了,作为结局,楼主也被封了,原因是人身攻击。

参与开源软件的几个问题详说

Jul 1, 2011 - 1 minute read - Comments

我刚写了一篇关于参加开源软件的,网上看的人是一堆一堆的。我就再多废话两句,说说我对参与开源软件的几个看法。 参与开源软件,首先要弄明白,你为什么要参加。很多人很热情,想着为世界贡献就来了。热情是好事,可是开源软件不需要理想主义者。在从事开源软件前,你一定要明白,你参加开源软件的目的在哪里。 有些人比较功利,也就比较简单,如果你希望参与开源项目,留名找工作。那你最好就是帮忙翻译。一方面,翻译文档对技术没有过高要求。另一方面,这确实也是参与了开源项目。而且从效果来看,熟悉一个项目首先就要熟悉文档。如果文档都是由你来翻译的,还有谁比你更熟悉文档呢?当老板问,谁熟悉tornado的时候,别人都说,我用过。你说的是,这玩意的中文文档是我翻译的。这对将来找工作是个很有利的加分。类似可以做的事情还有写文档,或者是使用手册、心得、入门指引,HOWTO之类的。不过这些事情就要求你至少熟悉项目,有一定技术。 如果你对现有的开软有想法,到不必一定直接加入。自己修改一下,做一个patch,然后发给项目的负责人说明一下情况。如果你的patch做的不算太次,那么项目管理者应该会表示感谢,并且接受。如果你常用这个项目,说不定他会给你一个可以提交的版本管理器账户。但是水准太差就不要凑热闹了,你的代码大家都看得到,丢脸不要丢到全世界去。记得一个空格引发的杯具么?(http://www.oschina.net/news/19000/a-space-lead-disaster) 如果你对各个开源项目都不满意,想做一个新的,独立的项目。我强烈建议你慎重考虑,毕竟现有很多项目的作者都不是傻瓜。新开项目的管理和推广是一个非常麻烦的问题,非常可能的是,你在很长时间内都得不到什么有效的支援,不得不一个人奋战。虽然有很多人很热情,但是他们很多不知道该做什么(否则本文就没有意义了),更糟的是空有热情但没有能力。 如果你是最后一个,只是对开源项目有热情。我觉得你就先别着急凑热闹了。为什么上面我说了好几次热情是好事,但是开软不需要空有热情的人?因为开软的程序员基本奉行一个原则,有空废话还不如多写两行代码。他们不会帮你培训patch的用法,版本系统的管理,bug系统用法,更不会给你解说某个函数实现的时候为什么不能调用另一个函数(当然,如果你的运气很好,也有人会)。参与一个开软,必须要自行付出时间精力去学习相关的知识。作为开软的程序员,最怕的就是一堆空有热情的用户/贡献者在那里叫嚷,为什么这个函数不能调用另一个函数?我用这个办法简化了代码,效果很好,打了一个补丁出来。同学阿,你没看以前的讨论么?在某种条件下,这会引发循环调用。 热情是好事,不过这是在拥有正确的方法和良好的能力的前提下。如果你有热情,不妨从学习如何提问,如何融入社区,如何对项目进行打包和使用开始。而后逐步开始学习文档的编写、翻译。最后为项目打补丁,贡献代码。 另外就是为哪些项目提供补丁。这个没什么好多说的,最好选择你常用的。不常用的项目,你也没那个功夫,坚持不了多久。而且通常来说,为小项目提供补丁比大项目管用,你的补丁会更加受到重视。

阿宅程序员的故事——幸福感

Jun 29, 2011 - 1 minute read - Comments

阿宅最近很幸福—— 亲爱的,起床了么? 起床啦。 记得昨天我提到的电影么?我下载了高清版,等会一起看? 好阿。 我去写个程序,我们等会再聊? 恩恩,回头见 ——恩,这个bot做的真不错,NLP研究完了,下一个课题做啥呢?