Shell's Home

Progress Linux

Feb 13, 2012 - 3 minute read - Comments

别紧张,我不是要progressLinux,这是一种新的distribution(算是吧)。http://progress-linux.org,是一个基于Debian的dist。 为什么要有这个dist?其实严格意义上说,这不是一个完整的dist。不同于Ubuntu,这个dist可以完全的寄生在Debianstable(squeeze)上面。你不需要真的去官网上下载一个ISO,然后安装。只需要安装Debianstable,然后加入 Progress-Linux的source就好了。如果你胆敢在Ubuntu上这么干,只会把系统弄的一团糟。当然,直接下载Progress-Linux的安装ISO也是可以的,这个ISO基于Debian Live,作者(Daniel Baumann)本人也是DD,是Debian Live的主要作者之一。 为什么要这样?因为Debian是以严谨到变态而闻名的系统。例如,mdadm这个包有一个很小的不便。每个月当检查RAID的时候,会发一封mail。如果你有一堆电脑需要管理,这件事情就非常烦人了。要修正这个问题,只需要在其中一个脚本中加入参数-q。但是Debian修这个bug修了9个月。因为具体的包维护者并不是很关心这个事情(低优先级),而Release Term需要确保这个bug必须先在Sid中修复,确认没事了(基本是没问题的,只加一个-q而已),再修复testing的,最后修复stable的。于是,你的邮箱要被一堆垃圾持续淹没9个月。 Progress-Linux就快多了。 但是为什么要做成dist呢? Debian的模式设计,是方便fork,而严格控制release的。Debian的版本库更新要很多条件,例如符合DSFG(也就意味着符合一系列的开源授权协议),更新的时候首先作用于SID,Release Term说了算等等。DD也没有权利要求更新Debian stable中的包,他必须申请Release Term批准。想想也能明白,如果真的每个DD都能直接更新包,那才天下大乱了。我们不能绕过Release Term去解决问题,也不想让这些问题留着。 那么怎么办?只有自己做一个仓库。Debian鼓励这么做(有很多dist就是这么做的),但是这时就不能用Debian的名字,因此作者才做了一个新的dist。DSFG这时变成了一个优势,Debian的所有包,都满足DSFG的第8条,“不仅仅对Debian授权”,可以直接应用。 因此,其实Progress-Linux是一个基于Debian的改进。更快的bug fix,更多的backport,更少考虑版权问题。当然,限于作者关心的包。另一个激动人心的特点是, Progress-Linux的包和backport包不会碰撞,因此使得stable可以简单的安装很多新的包。如果你喜欢,可以在安装系统后加入他的source,作为系统的改进。但是不要指望有什么实质性变化,都是一些细节改进而已。如果你希望知道几个例子,可以看这个页面(http://www.progress-linux.org/project/about/)。 也许你希望使用一个中国区的mirror来做这个事情(这样更快,也省去中间的一些其他麻烦),http://mirrors.ustc.edu.cn是debian中国区域的主镜像(即http://ftp.cn.debian.org),这个节点已经完成Progress-Linux的镜像。 Relax, I don’t mean to progress Linux, it’s a new distribution (kind of). http://progress-linux.org, a new dist based on Debian. Why people made this dist? Technically, it is no a fully dist. Unlike Ubuntu, this dist can totally on the top of Debian stable(squeeze). You don’t need to download a ISO from website and install.

外包和派遣的一些问题和顾虑

Feb 10, 2012 - 1 minute read - Comments

很多公司老总很头痛的一个问题是外包。相比自己生产程序,外包有一定的优势,也有劣势。 优势 1.外包便宜,从实现角度,比自己养程序员便宜很多。毕竟自己养程序员还要交三金所得税,外包程序员需要自己管理自己的三金所得税——通常都不会交。所以比自己养的要便宜的多。 2.在安全性上,外包并不一定比自己养程序员差。毕竟自己养程序员也没法杜绝跳槽,也没法杜绝恶意的underhand代码。 劣势 1.不稳定,极度不稳定。能不能完成并不像自己养的程序员那样有一个项目经理在跟踪,搞不好就是到期了,基本什么都没有。虽然可以不付钱,但是被耽误的时间更麻烦。 2.逼良为娼。如果你的需求类似一个论坛,他们就会诱使你做一个论坛。论坛可以用开源的项目经过定制和修改来完成,看起来工程浩大牛逼XX,实际上没花多少时间,实现小开销大收入的目的。如果你真的没被说动,他们会先答应你的一切需求,等期限快到了再告诉你,论坛做起来很快的,改一点需求吧。如果再说不动,参考问题1。 3.良莠不齐。多年筛选下来,很多优秀的,可靠的外包团队真的很厉害。但是混事的团队混事能力也很厉害,很多问题说的头头是道,价钱也比正儿八经做的便宜不少。你觉得便宜的就是混子?错,有时混事的团队比正经外包公司还贵。万一一个没看准,那就又参考问题2了。 4.外包没法解决资金来源。很多老板对这个问题只会哈哈一笑,不过有的时候这确实是个问题。不是每个外包团队都能提供发票的,很多团队没有挂靠公司,或者挂靠公司但是发票加税点。这时候你开出来的外包费用就无法按照服务费计算,只能当作其他费用处理。要么你自己找发票填上,要么就扣税。 我看下来,愿意做外包的老板,大概不足一成,而且大多都是逼上梁山没办法了(要么人力来不及按时完成了,要么没人会做了),才外包一部分。 相比起来,人力资源派遣是个新行当。这行当和外包差不多,只是他们不分离做,他们找人去你公司做。 优势 1.你的项目经理可以盯着他们了。 2.派遣多数都是从公司来的,大半有发票。 3.你让干吗就干吗,不行滚蛋。 劣势 1.可没比自己养程序员便宜,搞不好还贵。 所以很多公司对人力派遣也不是很喜欢。不过我说句实话,要是需要一个特殊类型的人才,预计时间不长,或者想试用一下,不妨考虑考虑。 目前很多外包也参考了HR派遣的做法,他们的做法是这样的。谈项目。达成协议。派团队去你的公司,该干吗干吗。验收。撤回团队。 你的项目经理可以随时验证他们的工作,因此也不会出现逼良为娼的情况。 但是无论如何,请自己找一个项目经理!不要让你的程序员来做项目经理的事情,更不要指望什么都不管丢钱下去程序就会自动长出来!

lfs under debian注记

Feb 9, 2012 - 1 minute read - Comments

1.严格按照说明做,少看一点无关内容后面就一堆err了。 2.新分区大点,4G不够的,最小用8G。我用了20G的,硬盘不值钱。另外说一句,并不是4G不能够做到,而是你可能被迫删除不少有用东西,或者是移到其他位置,增加复杂度。 3.每次你进入一个section,以前针对这个包进行解压,打补丁,并修改的source都作废了。直接删除它们,然后重新解压。lfs不依赖于以前解开的源码,在任何一节的开始都不需要翻以前怎么处理(解压,打补丁,修改)源码的。你在任何一节都可以(并且必须)独立操作源码。 4.mawk会出错,装一个gawk。 5.yacc没有的时候,装bison,it’s works。 6.如果碰到见鬼的tar.xz,用tar Jxf。或者更简单的,现代tar都支持xf直接解压,不用再自己选择zjJ。 7.chapter5的流程?先用系统的编译器编译了binutils,gcc和glibc,然后再用刚刚编译好的再编译这三个,这样编译系统就统统连接到了/tools上。然后用/tools的连接编译了一堆编译用工具,bash啦,make啦。这样,就完成了编译环境的建立,/tools是一个独立于主系统的,完整而可用的编译系统。用这个编译系统编译任何东西的结果应当是相对可控的。 8.如果我是你,在chapter5完成的时候会tar czf ~/tools.tar.gz /tools。这样会让你在chapter6中犯错的时候不至于血本无归。 9.chapter6的流程?用chapter5的编译系统,编译了新系统的编译系统。当然,这个不容易,因为刚刚的编译系统所有指向都是/tools。所以lfs指导你做了不少patch。然后重复chapter5的过程,逐步把源码编译安装到正式系统中。 10.lfs真TMD的辛苦,连source code的typo都需要在书中指出和fix。。。而且lfs自己还有errata。 11.lfs的56两章看起来像是两个人写的,风格习惯不一致。chapter5用``,chapter6用\$()。还有gcc-pass2的时候,cp -v XXX{,.tmp}; sed XXX.tmp … > XXX。而chapter6的binutils则是sed -i.bak。当然,有可能是因为有些系统的sed不支持-i,例如redhat的系统始终不支持netstat -nlp46,I hate it。BTW,我喜欢sed -i。 12.编译过程真心傻X,大部分都是解开源码,configure –prefix=… && make && make check && make install。这些过程好像可以用一个不知道啥脚本来简化,建议不要手工干这堆事情,没意思的。相反,倒是很多调整有些意思。

windows下那些好用的免费程序

Feb 8, 2012 - 1 minute read - Comments

大部分开源,不开源的特别注明。 firefox或者chrom替换掉IE。 不解释了。本公司UED坚持认为在windows下使用IE是一类人格缺陷,有这种缺陷的人应当被自然淘汰。我当然不支持他人格缺陷的论点,我认为是智力缺陷。 Everything(不开放源码) 文件搜索工具,肯定要装,平时不消耗资源,需要的时候闪电一般的把你需要的东西找出来。这个东西会彻底的改变你文件管理的习惯。 klite codec 还在用腾讯/暴风影音?我推荐klite codec。这个玩意里面内置了Media Player Classic - Home Cinema作为播放器,并且把常用的解码器组件都装上了。基本好用。当然,所谓基本,和商用播放器的一堆花哨功能不同。klite的功能还是略差的,比较偏向基本功能的稳定。不过好在,有的地方klite更强一点——例如没有烦人的广告和插件,性能和稳定性都很不错,而且有些生僻格式也做了支持。实际上,我觉得出问题最多的还是这些生僻格式和wmv。 mplayer 比klite还强的播放器,和vlc并称最强播放器之二。就是太难玩了。 另外,我不推荐在windows下用vlc,不太稳定。 MediaCoder 转编码不错,除了rmvb格式外都很好转。压个片给手机的时候很方便。 putty(英文版!) 远程命令行工具,基本是做linux开发的不二选择。即使我没事用windows也习惯装个虚拟机,跑个linux,然后用putty连上去。当然,putty肯定是要用英文版的,具体自己google吧,不要baidu。 foobar2000(不开放源码) 音乐播放器,替换千千静听和酷狗的。确实是超级强的定制工具,居然支持从zip/7z中加载音乐。这样我下的音乐包都可以直接用了,不用解压。 launchy 启动工具。有更好的启动程序可以给我介绍一下,我现在用的是launchy。按热键,敲几个字母,就可以启动程序了。而且这个是linux/windows支持的,两者习惯完全一致。当然,如果你stick在某个系统上,可以找找更适合的软件。 honeyview(不开放源码) 漫画工具,主要是还在维护。能用的漫画工具也没几个了,comicviewer不维护了,acdsee根本是个庞然大物。 peazip 压缩工具,挺不错的。现在大多数都用winrar了吧?一个是这玩意需要破解,不然就乱弹窗。作为一个程序员,我实在不好意思破解。另一方面,这个东西对samba的支持不好,在win7下,他没法打开samba共享出来的文件,而且某些文件会乱码。peazip可以解压我要用的全部格式,包括rar。并且可以生成我要的大部分格式,包括linux格式,不包括rar。这个主要受限于copyright问题。 不过peazip对某些比较奇怪的字符支持不如winrar,有时会不认识一些日文压缩包。这个问题对honeyview等程序都存在,我认为是这些压缩包自己的问题。 Foxit(不开放源码) pdf阅读工具,国产软件,比adobe的强。不过细节总是做的不是很好。例如书签不够强大,注记功能不足,不支持zip文件读取等。不过要不用foxit,就要用回adobe,你自己看着办。

国产软件更换计划

Feb 7, 2012 - 1 minute read - Comments

首先声明,我不是歧视国产软件,我自己做出来的也算国产软件,如果我真的在玩歧视,我是歧视我自己,OK? 不知道为什么,中国人做出来的软件,或者中文软件,和外文软件有完全不同的风格和特性。我很早就骂过,我们的软件充斥着免费的流氓和收费的冷屁股。现在更改一下,我承认有的软件很好用,所以中国的软件是好用的流氓大集合。 为什么?我怎么知道为什么?前两天千千静听的事情把我恶心坏了,而且还有中文putty后门事件。难道国内就没有好用的软件了么?自己想想,很杯具的发现,貌似可能性不大。首先,如果我们的程序好用而且免费,程序员就得从其他渠道赚钱。这年头程序员的第一需求是老婆需求,这是刚需。有老婆需求就有丈母娘需求,有丈母娘需求就有房子需求。OK,哪怕我们的程序员是个只对程序感兴趣的大宅男,只要他不是个Gay(说明一下,只要一不找我,二保持固定关系,我没有歧视的意思),最终还是会归结到钞票需求,而且还不是一般的钞票需求。 所以,大量的程序员都必须赚钱,赚大钱。相比起来,很多老外程序员的想法我们就觉得很奇怪。我有位朋友(在此先恭喜他喜得贵子,然后按照他的习惯隐去名字,请认识的人也不要写出本名给搜索引擎搜),他希望办一家中国公司做一项技术,因此曾经找上中国的干部。干部对这个技术很感兴趣,因此愿意给支持。我提醒他,有支持就有相应的条件,他以后将不能撤资,而且赚到的钱也不完全是自己的。他很奇怪的看我,开公司的目的是推广这项技术在中国的应用,只需要基本收入就好了。作为一个同样需要赚钱的中国程序员,我顿时觉得我们在两个世界。 而且,中国软件界普遍的情况是对恶和权不敏感,例如很多程序员都在用盗版VS。当然,我会听到很多理由,但是我觉得他们只能被称为借口。我认为盗版只在两种情况下合情理——用于教学实验目的和为了表达对版权制度的抗议。当然,后者虽然合情理,但是违法。如果说国内程序员用盗版的理由是一,那太侮辱智商了。而如果是二,我从没有看到他们举着反对版权的旗子去游行,也没有看到他们所写的所有软件都声明——本程序没有任何版权。 我也和不少程序员谈过所谓授权和回避方法,基本都是新手程序员觉得“很有道理”,老手就付之一笑了。因为老手知道,这些事情是没必要的。是否在软件包中声明使用了某个BSD的库?没有区别。商业软件使用了GPL的库?没人关心。你多此一举,只会引发项目经理的反感而已。OK,既然程序员对作恶和权不关心,那么绿坝版权问题的发生只是迟早而已。 难道中国软件界改良的希望需要寄托在培养基友程序员上? 这么大的问题我暂时无解,但是我需要做和我有关系的部分。我会逐步移除电脑中的国产windows程序,并且将其余国产程序加入观察名单。中文软件主要是指在国内制作和汉化的闭源windows软件,原生软件汉化不算,开源不算,linux软件不算。实际上,观察名单对我而言不会太长,基本就是QQ国际版,Foxit,和几大网银。 我建议读到这篇文章的人,也好好考虑一下,哪些软件真的是有风险的。这并不是让你马上回家删掉所有国产软件——实际上我至少得留着网银,他们没替代品——而是说,我建议你在脑子里面转一下,自己装了些什么东西,会造成哪些问题,是否愿意接受。这会花掉你几分钟的时间,但是也许会让你少碰到一些恶心问题。

千千静听被百度收购了,WTF

Feb 6, 2012 - 1 minute read - Comments

我挺喜欢千千静听的,这玩意被我调整到习惯和winamp差不多。自从winamp变成一个庞大的怪物以来,我一直用的这个。 不过在win7上,我一直删除不掉百度插件。每次我请他们出去,他们又会装上。后来我启用了严格的UAC,并蓄意把目标文件夹标记为没有人拥有权限,发现了问题——千千每次启动都查找并试图重装baidu插件。我开始以为是我下载的版本不对,被捆绑了其他组件。然后我去他们官网,下载了一个最新版本。安装的时候,我留意到发行者是baidu online…。OK,问题看来不是我下载的版本被恶意捆绑,而是原始版本就写入了这个代码。 用过firefox或者比较正规的软件(包括微软那个IE)的人都可以留心到,在关于页面中,可以看到这个软件使用了哪些开源组件。这个大部分是因为这个库的版权限定要求使用者必须列出库的名称。不过这点在中文软件上就做的比较差,也许是根本不拿授权当回事吧。 但是,在软件内打入和软件功能无关的其他组件,那是另一回事情。个人认为,一个程序如果在安装包内捆绑插件,让用户选择安装,我还能接受。毕竟很多软件作者也要吃饭,做插件推广是一条路。如果捆绑强制安装,那就有流氓之嫌了。如果捆绑完了不算,还在每次启动的时候都检查插件是否还在,那就是确定无疑的流氓。 当然,千千的行为比这个更糟糕(我不选择说更流氓)。千千主页上没有任何地方说明千千归属了百度旗下,只有最下方有一条<千千静听联手百度娱乐推出“百度新歌汇”>的新闻,以及最下方有百度软件世界的连接。我也是从UAC的警告中发现,千千的软件包是用winrar打的(不知道是否是正版),而签名则是Baidu。至于选择,软件安装的时候的却有选择,不过即使选择了“不安装百度工具栏”,“不将hao123设为主页”也没用。还是会有一个叫做BaiduMusicCtrl的东西伴生安装进去,每次ttplayer启动时伴生启动的就是这个。说是和音乐有关的东西么,我在IE的插件和系统启动项中都找不到这个东西的影子,不知道是干吗的。千千删除的时候也不会跟随删除,不过可以找到独立的“百度音乐控件”项目,并且手工删除。更神奇的是,我在主页上找不到任何关于此事的说明还不算,连软件的发行授权都没有。没有发行授权,这软件我们用着算怎么回事呢? 我又安装了一遍千千,找到了软件使用协议“版权归属所有者所有”。这不是TM废话么。 OK,很多人在我说,中国人不大在意版权,这句话的时候,要我拿出证据。现在就是一个明证。从整个过程中,我感觉到的并不单是恶意捆绑这么个事情,而是对版权和授权的一个漠视: 1.没问你要不要,总之给你捆绑安装百度音乐控件,每次千千启动时自动启动更新。 2.被百度买了,页面上什么关联都没写。 3.关于授权,这个软件什么都没写。(另外,写授权的时候不要写“保留一切权利”,这是句屁话。你最起码得度让使用权,否则发行软件给别人就是故意诱使别人犯罪。千千的“保留知识产权”还是正确的。)因此,不要问我如果你把千千放到你的主页上会如何——这算再发行,合法不合法就看作者定义了——虽然我觉得他自己都不一定觉的出区别。 现在改用了foobar2000,很满意。这个东西可以接受samba共享系统,并且支持从zip/7z中读取文件。我很多下载的zip音乐包就可以直接使用了。虽然界面简陋很多,不过用起来更顺手。千千还是留给度娘控吧。

教育的思考

Feb 2, 2012 - 1 minute read - Comments

首先说明一点,这是贝壳自己对自己受到教育的反思。由于本人不从事教育行业,所以结论可能和现有的理论相悖离,也不保证正确。 教育最重要的时刻,不是在高中,而是在幼儿园。幼儿园的老师不应当教知识,而是应当教常识。常识是非常重要的,我们有意无意,善意或恶意,都会给小孩子灌输扭曲的常识,例如孩子问你他是哪里来的,你说是从垃圾桶中捡来的。等孩子成长了,他的第一件事就是推翻不正确的常识。还记得那个笑话么?——我知道你的父母和老师都对你这么说,但是,圣诞老人是不存在的。是的,超人也不存在。哦,不不,驯鹿和美国总统是存在的。 孩子听到越多不正确的常识,就需要浪费越久的时间逃脱常识的束缚。大部分孩子甚至终身会带着一些偏见——例如以前的“地球是宇宙的核心”,到不久前的“空间是连续的”。从有意的“抢到的东西就是自己的”,到无意的“大人说谎也不受惩罚”。越多错误的束缚,孩子需要浪费越多的时间逃离束缚,将来的成就就越小,这就是为什么我觉得幼儿园是一个孩子成长的关键的原因。 至于第二语言,真的没有必要在幼儿园就开始学起,我甚至觉得语言不应当被独立教授。还记得你的打字是怎么练成的么?我打赌我的读者中,有一半以上不是在正规的课堂中,按照老师的指示一点一点去练习每个键位,最后成为打字高手的。我自己是在QQ起步的时候,在网络上和别人聊天。从开始的一对一还是被人家嫌慢,到最后可以很轻松的一对二甚至一对多,大概只花了我半年多的时间。同样,要在课堂上学习语言,比不上在语言的环境中学习,这个大多数人都知道。但是什么是语言的环境?这不是说找个外教,或者用英语授课就解决的。孩子使用语言的关键,在于和同龄人组织学校社会的时候。如果他们圈子里面用英文,你的孩子只有三种可能,1.不和同龄人交往,变成书呆子,2.根本不去上课,退学了,3.英文熟的你根本听不懂。问题是,在中国如何控制学校中的学生交际圈呢?所以从这个意义上说,在中国要稳定的学好英文,而且和老外差不多,是不现实的。只能靠你孩子的天赋和运气。 很多人把孩子送到了国外,实话说,这是一个不负责任的选项。孩子可以没有很强的英语能力,但是在成长中,脱离家庭的关心是致命的。除非你送到国外后,在当地有其他人可以替代你关心孩子,否则将来成长的结果只能靠运气。有很多人,在出国后交往男女朋友(这个很正常),颓废,不用功学习,失去生活目标(这个不应当在初中和高中出现),乃至吸毒(这个也不算太少)。当然,以国内不少家长的情况而言,陪着孩子成长只会导致更严重的问题。 中国的小学和初中教育,是一个学习的过程,这个没问题。但是学的内容太深入,又不够广泛。现在家长都在喊教育内容不要超纲,喊教学速度过快,喊小学上大学内容。但是,什么是纲,为什么要有纲。诚然,学习的问题上,有些时候不到一定年龄,学生是理解不了某些问题的。但是在学习知识上,实际是没有边界的。我们拆掉考试的问题来反观教育,如果真的是为了更好的工作,那么凡是需要的知识都必须要学,可以多不能少,何来超纲?超纲是一个基于考试产生的现象,本质是考试的难度无法增加,就通过增加范围来提高分辨率,强行区分学生。 以初中数学为例,我们初中数学的很大一部分都在教授二次方程特性和解法。实际上呢?二次方程用到的机会非常少。大家也都是从考试中走出来的社会人,你们凭良心告诉我,毕业后有多少机会用到了二次方程?个人觉得这部分教到过概念和解法就可以了,不必对特性深入到奇怪的地步,特意构造一些特例问题来考察学生的解题能力。其实只要在需要的时候,找一下wiki,然后根据问题能解出来就行了。我的高等数学学了很久,现在也差不多都还给了老师。但是需要的时候,我可以通过很短时间的查找资料,把问题现场解出来。反倒是从小学到高中,对一些现代数学的基础学习不足,尤其是线性代数和统计学。高中没有教授现代统计学,因为这依赖于高等数学。线性代数只教了方程组解法和行列式,没有教授矩阵运算。实际上这是现代数学概念的基础,应当在足够的时间内深入学习。 至于语文和思政,更是沦为执政党的免费广告课程。这部分课程大部分人在高中开始就吐掉了,吃都吃不下去。 高中开始,学校教授的不应当是知识了,而是研究方法。当然,研究方法其实应当从小就开始学习了,包括论文格式,研究过程和方法,预算控制等等。尤其是一些现代科学中基本的精神,都应当在实际的课题报告中做足够的检讨。国人经常在一些莫名其妙的地方出奇奇怪怪的毛病,部分可能就源自没有系统的接受过研究方法论的影响。例如,在研究效果的时候,应当应用双盲法。如果这是一道填空题,我估计大部分国人都能做对。但是实际操作的时候,有很大可能陷入双盲误区中。尤其是单向相关性断定,当有A,就发生B时,就开始断定是A导致了B。又例如中医问题,对于接受过研究方法论的人而言,双盲法检验需要不需要根本不应当是一个问题。要么就拜托你,不要自称中医是科学,这也行。不是每个结论,在科学上都有解释。不管你信不信,反正有人信。这没什么,有人信上帝,有人信科学。但是不要对外声称,我们的上帝经过科学检验。。。 至于有些民科,或者一些不知道什么的人,写出来的东西就更神奇了。为什么地球在远处向太阳坠落就会形成旋转,为什么太阳是黑洞在发光。他们写的每个字我都认得,但是连贯起来就完全看不懂说了些什么。老外的神奇论文,是从常识性的结论和公式出发,通过推导,得出一个反常识的结果。然后再验证这个结果,而且居然是对的。例如泊松斑,水星近日点漂移,宇宙膨胀。对于这些东西,我虽然看不懂,但是每个上下文的联系都能看到,只是不明白基础知识,也不知道为什么要如此推导。民科的论文则相反,是从常识性的结论和没有公式出发,跳跃性的得出反常识的结果,然后没有人能够验证。我不但看不懂上下联系,而且连他想说什么都看不明白。当然,最神奇的是这样的东西也有人买。。。 至于大学,会在大学学习知识的人是傻子。大学是一个教授研究方法论和寻找人生意义的地方,如果一个学生大学毕业,能够找到自己的人生目标,认识一群好兄弟,就已经很满足了。至于学到的知识,真的和大学无关。如果要说有什么关系的话,最多是借助大学的环境,可以更广泛的接触自己想要接触的东西。当然,后者即使对于毕业的人也不是无法做到,所以去大学绝对不是学知识的。 说到这里,国人有个奇怪的现象。大部分人好像都相信知识改变命运,更多的知识就能带来更成功的人生。但是实际操作的时候却都是脑体倒挂,进行脑力劳动的不如进行体力劳动的。程序员赚钱靠什么?加班。书本靠什么赚钱?印刷。

如何写基于google code的watch file

Feb 1, 2012 - 1 minute read - Comments

google code很好用,可是他的下载页面很恶心,很难跟,而且还改过一次。debian打包党要做watch file的时候,估计会很郁闷。 去http://googlecode.debian.net/,然后提交你的包名,你会得到一个url(其实自己猜也可以猜到)。每次访问这个url的时候,他会代你解析google code,告诉你有没有更新。

PXE模式使用openwrt网络安装debian

Jan 31, 2012 - 1 minute read - Comments

废话不说,上干货。 首先,禁用arptables。当然,如果你没开这个防火墙,那么没必要。其次,注意你的openwrt必须有udisk,否则空间相差太多,根本没有实现的可能。 然后,如果你用的是新版的rom,应该在/etc/init.d/dnsmasq里面看到,dnsmasq()这个函数里面有。 append_parm "$cfg" "tftp_root" "--tftp-root" append_parm "$cfg" "dhcp_boot" "--dhcp-boot" 如果没有,加一下,有的话说明原生支持。下面可以直接修改。 dnsmasq是一个dhcp/dns双重服务器,而pxe引导的第一步就是支持bootp协议。这个选项在/etc/config/dhcp里面。config dnsmasq一节上,增加。 option 'dhcp_boot' 'pxelinux.0' 重启dnsmasq,完成bootp准备。 然后,安装tftpd-hpa,opkg update,opkg install tftpd-hpa。这是一个tftp服务器,默认不启动。如果你打算让pxe引导模式持久化,那么就改为默认启动,同时永久关闭arp防火墙。在/var/tftpd-hpa里面,可以看到tftpd的根路径。从参考3的的连接里面,你可以找到合适的一个下载路径,下载netboot.tar.gz到这个文件。解压后,可以看到pxelinux.0,这个和上面的pxelinux.0相对应。这是pxelinux的组件,隶属于syslinux项目,可以用来完成启动。 这样,就完成了安装的所有准备工作。你可以找一个设备实验一下,应当可以完成网络安装的步骤。 另外,如果需要启动选择amd64或者是i386,或者更进一步定制。那么需要下载其他镜像,自己生成pxelinux.cfg这个目录中的内容。 PXEhttp://wiki.debian.org/PXE NetbootPXEhttp://wiki.debian.org/DebianInstaller/NetbootPXE netinsthttp://www.debian.org/distrib/netinst 配置pxe,安装debian和ubuntuhttp://my.unix-center.net/~whtbie/wordpress/?p=290

tcp连接的建立和释放

Jan 29, 2012 - 1 minute read - Comments

大家新年好,新年第一博,我们来写一点干货。 建立tcp为什么是三次握手? 从两军问题说起太远了,三次握手的假定是一条双工线路的每个方向,要么持续通,要么持续不通。就好比一个电话,你和对方可以同时说话,所以是双工线路。你说了对方能听到,这叫单方向。单方向上,要么通,要么不通。 如果从一个不保证稳定的电话线上(例如移动电话,这是典型例子),你怎么确定你们通话是正常的? 假如你首先说“喂”,这时候你什么都不知道,对方能听到,他就知道你到他这里的电话是好的。他会说“喂,我听到了”。你听到了,会知道他到你这里的电话是好的。 事情结束了么?没有呢,他还不知道你能听到他讲的东西,所以你还要回“我听到了”,然后开始说正事。 回想一下自己打电话的经历,是不是往往漏掉了最后一个“我听到了”呢?这样会使得对方无法确认你能听到他说的东西。不过一般来说,当你开始滔滔不绝的时候,他会假定你听到了那句“喂,我听到了”。因为通常没有人会没听到对方的回应就开始说话说个不停。这个模式在tcp中也是可以做到的,在最后一个ack上附加数据。 为什么由发起方开始?因为我们必须要假定有一个方向开始,任意开始就需要处理碰撞问题(就是同时开始)。接通socket总是由发起方开始传输第一个包,你不觉得直接在这个包上面开始测试连通会比较合理一些么? 电话为什么由被叫方开始说话?因为主叫方打电话后,被叫方决定了电话什么时候接通。电话接通的时候,被叫直接就可以说话了(假如电话稳定的话),而主叫要等到下一个“嘟”不出现才能有所反应。所以通常都是被叫先开口。当然,也有被叫方接起电话来等着主叫说话的情况。 另外提一句,如果你使用手机拨打的话,当听到对方“喂,这里是XX,您好”之类的信息的时候,应当先说“喂,我是XX,您好”。等对方确认能听到了,再开口说正事。因为手机有不算太小的几率,双方都听不到,或者单方向听不到。如果不巧是后者,很容易引起不必要的误会和麻烦。例如你滔滔不绝的说,对方作为反应,说了几句。然后你什么都听不到,继续说。对方当然会生气,对不对? OK,现在我们来说说挂电话。 tcp的fin机制,其实是要解决这么一个问题。当你说“再见”后,能够马上把电话放下么? 不行的,因为对方可能还有一些重要的事情还没说。你一说再见就挂断,这个会造成问题。从简单的思考上,我们会得出一个结论。当你说了“再见”后,对方可能还需要说一些事情。当对方也说了“再见”后,你就可以挂电话了。 可是且慢,对电话而言这个模型成立,我们得稍作修改才符合网络——当你挂下电话机后,对方不会出现忙音。于是,当你说再见,对方说再见,你必须再说一次再见,对方才能确定你听见了再见。而且这次,事情非常符合两军问题——你们永远也无法就什么时候挂机达成一致。这个问题再折衷回来,也是一个三次模型,对方说再见,你说完你要说的话,然后说再见,对方再见,挂机。 被动关闭上,这个模型基本是正确的。当你收到“再见”后,把你要说的事情说完,然后再见。这时候不能挂电话,因为你不确认对方听到你的“再见”了。如果你的“再见“对方没收到,那么对方会死等到天荒地老。至于为什么对方可以肯定你收到了他的再见,是因为刚刚你说的那堆废话里,应该已经包含了“我知道你要挂电话了,我会尽快说完”的意思。所以,你需要等对方的“再见”回来。 当然,在tcp的实现上说,所有对对方的回应,都在ack里面。所以是FIN FIN-ACK ACK,关闭。最后一个ACK前,叫做LAST ACK状态。如果ACK丢失,会造成被动方挂断有问题,因此这里需要一个超时机制。用电话术语来说,就是最后一个再见没听见,你就要等到天荒地老,因此当对方首次再见完成的时候,你说再见,如果一定的时间等对方的最后一个再见等不到,就别等了,直接挂机。这个时间比等不到对方任何消息而挂机,要来的短。tcp标准设定为两倍最大生存周期,即2MSL。当然,如果等到了最后一个ACK,就直接删除连接数据结构。 主动关闭的时候,情况会更加复杂一点。为什么?因为刚刚的超时机制。我们从你说再见之前开始说起,这次你是主动告别一方。 你首先说了一个再见,然后进入FIN_WAIT1状态,换成电话术语,就是等对方说再见。tcp机制上,对方的ACK先到,就是FIN_WAIT2。对方的FIN先到,就是CLOSING——这种情况不多见,只在双方同时想挂断的时候发生。如果对方的FIN-ACK一起发送,那就直接保送上TIMED_WAIT。无论是哪种先,最后会收到一个ACK和一个FIN,并且发送一个ACK。换成电话术语,就是你说了再见,对方一定会说知道了和再见,并且你会说知道了。差别在于tcp需要用多个状态来表示哪个事情先,哪个事情后,打电话就不要这么麻烦了。 最复杂的事情,在于说了最后一个再见之后。当你说完最后一个再见,就可以直接挂电话么?电话可以,但是作为tcp,却不可以。因为某些情况下,对方的FIN包没有到就会进入TIMED_WAIT状态。另外一些情况下,对方的LAST_ACK等不到你的ACK,会把他的FIN重发一遍。如果直接销毁连接结构,那么最后一个FIN包可能对新的连接造成干扰,而且会阻碍对方关闭连接。所以,作为主动挂断一方,你有一点很不利的是,无论如何,你必须等这个2MSL的时间。这个值在linux中一般是60s,更进一步可以查看rfc1337。 刚刚解说的最后一个情况,就是很多机器TIME_WAIT很高的原因——因为你的服务器主动关闭了连接。作为本质解决方案,你需要理解为什么会发生这件事情,服务器端关闭连接是否正常。如果正常,那么加一些内存,并且启用tcp_tw_recycle来减缓这个问题。注意,这个参数不应当在NAT后的机器上被启用。具体可以查看rfc1323。