2011年5月31日星期二

HR该干吗

    这个帖子(http://www.douban.com/people/March_Liu/miniblog/446401835/)里,蘑菇叔(好吧,现在该叫牛柳叔了)和别人在争论一个问题。其实我对他们的争论没什么兴趣,但是有几个论点挺有意思的。
  1. 面试题不应该拿回家做。面试题是即时抽查对方个人程序能力的一种测试,要是拿回家,就变成测试亲友团能力了。七大姑八大姨的儿子面试,知道你是个程序员,让帮忙做题,难道还能不做?我曾经也帮人做过面试题,不过做之前我都会和他们说。你可想好了,这些题目不算简单,我做没什么问题,没意外你应该能进去。但是这些题目比你能力超出太多,进去后你能不能呆的住,有什么后果自行负责。对方多半是一脸不在乎的说,先进去慢慢学吧。我知道结果的两个,一个进去三天,连试用期都没过就被开出来了。因为是试用期关系,企业还不管赔。另一个则是苦熬三个月后还是扫地出门。目前我的结论是,允许把试题带回家做的企业是不靠谱的企业,允许做题时上网也一样。做面试题时会去想作弊的技术应该转行去做销售。当年吴士宏的《逆风飞扬》里面说,主管问她会不会一个技术,她不会,但是说会,回家后连夜学起来。这种行为在销售上也许是值得称赞的行为,本人也够努力。但是作为技术岗位,这种思路是行不通的,而且非常不负责。技术是依靠长期积累的,指望在几天内突飞猛进根本不现实。相反,你闯祸的可能远比做好的可能大。做一名技术,就得踏踏实实把事情做妥当了。
  2. HR不应该管工资。蘑菇叔的另一个观点是,HR不应该管工资。实际上,我一直不知道HR该做什么。当年我做招聘的时候,基本就是两种思路。一种是来一个人,HR告诉我大概要多少薪水,我谈下来直接向老总汇报。另一个是我面试能力,然后告诉HR这人我们大概给多少薪水,最高给多少。虽然名义上是HR主导的工资谈判,但实际上做出判断的一定是技术主管。因为除了技术主管,没有人(包括HR)清楚这个人能力能够为企业带来多少价值。HR评估价格的方法通常都是对比法,用证书和资历去做加减。可是证书和资历一方面容易造假,另一方面是否和企业技术合拍不得而知。
  3. 性价比太高的人都是不稳定因素。这句基本就是"价格围绕价值波动"的另一个表述形式。一旦一个人,你觉得他的性价比非常高,基本是几种可能。一种是他的能力非常特殊,只有少数企业需要。一旦从你公司离职,对他非常不利。而对于你们企业来说,找其他人非常不利。因此你才会觉得他的性价比特别高。第二种是因为这个人在其他方面有所求,例如商业间谍,或者需要从你公司里面积累一些必要的技术和资历。最后一种是因为——这个人快离职了。如果你发现一个人性价比特别高,请务必查一下为什么。是否是特殊能力很好判断,是否需要积累一些必要的能力和资历也不难分析。如果不是,请务必先考虑商业间谍的问题,再考虑你是不是应该要加薪了。
    从第二个论点,我回想起以前和现在碰到的HR,发现他们的职能基本都不是很明确。或者说,多半明确的职能越界了。检查考勤,计算工资奖惩,招聘,安排培训,处理人事材料,负责离职事宜,这是HR的基本几个职务。我碰到的多数情况下,检查考勤和计算工资都由行政代劳,奖惩是老板拍脑袋的。招聘,处理人事材料和负责离职事宜倒是行政负责,但是基本没有企业安排培训。相反,人事的最大用途就是和员工谈判工资和福利,能压多少压多少。甚至很多人事的工资和他的谈判能力成正比。
    这招对初级的岗位用用还可以,但是对于中级以上的技术人员,是绝对不能用的。应当说,凡是五年以上的程序员,应当禁止HR砍价,直接让老总去谈。为什么?具体看上面的论点三,招一个靠谱的人难阿。往往一个靠谱的职工,仅招聘成本就以千计。以一年期合同来说,为了每月500的价钱(一年大概差6000)谈跑了一个程序员,不仅招聘成本都打了水漂,而且再要招人还会更加困难(一方面是很难碰到,另一方面很多老程序员都互相认识)。这种HR不被问责才有鬼了。

阿宅程序员的故事——引子

    阿宅程序员不姓阿名宅,也不姓程名序员。所谓阿宅是死窝在家里不肯出来的意思,原因就是——因为他是个程序员。据说这种变态职业的最高水准,可以在一个密闭房间内盯着一个阴极摄像管长达数个月之久,中间除了有人送饭和洗澡上厕所外都不间断,哪怕睡觉都是往后一躺拉上被子就睡的。理所当然,这种职业的人多数会成为阿宅,然后成为去死去死团成员,再光荣的晋级大龄男青年,初级怪蜀熟,中级怪蜀熟,乃至成为最终职业——怪蜀熟之王。
    阿宅已经想不起来自己是为什么才会变成程序员的,据说阿宅小时候成绩还不错,老师曾经给过评语,学好数理化,走遍天下都不怕。阿宅是数理化班上成绩最好的一个,没想到连房门都走不出去。这点上倒不如班上几个只会英语的女生,索性学孔子周游列国不回来了。据说搞计算机的,有一半人是英语很好,另一半人则是数学或物理很好。英语好可能是因为计算机资料中有大量的英语,看懂资料就会用计算机。不过阿宅来看,到底是英语好使得计算机水准好,还是因为要学计算机才学好了英语,还真是一个困难的问题。因为据说周游列国的诸位美女,往往连"gtalk为什么不能传输文件"这种简单问题都不理解。但是说要学计算机才学好了英语,阿宅至今和人说的最复杂的一句英语就是"hello, world",对方MM十分钟没有回话——因为在用MSN——然后慢悠悠的回了一句"?",再然后,阿宅就不知道该说什么了。
    阿宅经常被人夸——当然也经常被人骂。人家说他计算机"好",于是他就想,好在哪里呢?问问别人,得到的回答往往是。你会装电脑啊。装什么电脑?组装硬件还是装系统?没区别,反正都很厉害。于是阿宅无语,大概猜到,其实自己和世界上其他的程序员差不多。只不过周围的人没见过真正的野生程序员,才说他厉害。至于周围人见到的程序员是什么东西,经过阿宅的观测,看起来像是研究生的升级版吧。
    据他的一个当老师的师兄说,目前研究生的水准大概和人肉代码执行器差不多,或者可以简称人肉CPU。你可以用通用语言——在中国大多数都是用中文——把你要做的事情详述出来,包括每个步骤。名为研究生的CPU就会按照你的预订逻辑把你的描述执行完。如果出现了异常而你没有捕获,往往就会留下异常现场。看师兄说话时的脸色,阿宅不大想猜测那是一个什么样的现场,大概和自己写程序忘记捕获异常被老板抓到时候差不多吧。
    阿宅的很多朋友都发了大财,很多人的智商都不如阿宅,工作程度也不如阿宅。阿宅也想不明白这是为什么。如果说自己的收入比不上几位组长,那是一点都没什么好奇怪的。但是有几位按老师评语,除了打架什么都不会的同学,居然能在不声不响间赚到阿宅从宋朝开始工作才能积攒的财富。阿宅总觉得哪里出了问题,到底是老师的问题,社会的问题,还是自己的问题,他是真弄不明白了。不管怎样,死宅的日子每天有吃有睡,还有自己感兴趣的技术可以研究,阿宅对拼死赚钱也没什么太大兴趣——虽说和别人说这话的时候,人家都一脸嫌恶的说,你那工作量居然还好意思说这种话。
    阿宅的工作很简单,老板经常会有些想法。有想法很正常,人类要是没了想法,世界指不定会变成怎么样呢——反正阿宅肯定会失业就是了。阿宅的国家某位伟人说过,黑猫白猫,抓住老鼠就是好猫。阿宅自己的理解是,黑盒白盒,抓出bug就是好方法。老板的理解则是,好想法坏想法,不做一做就是没想法。做一做总要有人来执行吧?于是阿宅就和组长一起被叫过去,聆听老板的一些想法和创意,并且设法实现出来,这就是所谓程序员的职业。据说在日本的神话中,貘是一种食梦的怪兽。阿宅觉得自己干的事情和他差不多,都是把别人的梦想嚼吧嚼吧吞下去,然后拉出来一坨完全不一样的东西,再卖给另外的人。大部分的情况下,吃下去的东西,拉出来的东西,写出来的东西,我们都用同一个字称呼他们。
    如此简单的工作,照理说应当是应者云集。可是却不是。照统计,中国的程序员数量就一直没怎么涨过,一直维持在150-200W上下——大概和全国高校计算机系每年毕业的学生持平吧——这还得算上研究生升级版的所谓人肉计算执行器。阿宅很理解为什么高校毕业生就业困难,要是每个计算机系应届毕业生都要有份对口的工作,全国程序员就得每年失业一次,所以程序员特别怕刚毕业的大学生。其实别看程序员怕刚毕业的大学生,大学生还怕程序员呢。每年的程序员面试题目在应届生看来如鬼途一般可畏——这里可没有好好教授先生的开根号乘10的慈悲秘技。如果运气不好,一同前来测试的同年们水准特别高,要么就是及格仍旧丢了工作,要么就是保住了工作保不住工资。最杯具的是和刚刚面了管理职位的同学比比,无论工资职位还是发展,没一个可以相提并论的。多少年轻人立刻多年梦碎,拍拍屁股转职成管理者。
    我们下面的故事,就是这个死宅程序员的日常生活。注意,下面发生的事情并没有一个绝对的逻辑先后关系,也没有一个时间的跨度关系,你可以想像他们发生在多个平行时空中。如果你发现什么前面阿宅脑袋开了瓢后面却兴高采烈的去游泳之类的问题,请不要奇怪。他们可能发生在逻辑上的十年间,也可能游泳其实在开瓢之前。当然可能最大的是因为阿宅根本不会游泳,所以走在泳池旁被绊了一下导致脑袋开瓢......

2011年5月29日星期日

结婚公告

    我结婚了。
    我和她在facebook上认识,所以,首先感谢国家,感谢党。是你们封了facebook,把我培养成一个坚定的翻墙主义者。没办法,不翻墙,无老婆。
    谢谢所有我认识的不认识的朋友,谢谢你们的支持。在我发推结婚的数小时内,总共有150+条rt祝福。我很开心,她也很开心,所以在签字结婚的时候,她只考虑了十多秒。另外友情提示,如果你们带女友去登记,最好一气呵成直接带去,然后在签字前再给她一次考虑的机会,不要提前预告。如果不给女孩子一个考虑的机会,好像在强迫人家。但是如果给了太多考虑的机会,她会持续失眠一周以上,反应迟钝,出现恐婚心理,甚至危及你的人身安全。从维护女性健康的角度,最好在求婚成功后就直接去登记,你好我好大家好。
    最后,我会开一个小系列,讲述一下我每天的生活。名字大概就叫——阿宅程序员的故事。

2011年5月26日星期四

上海地铁的七宗罪

    上海地铁是我见过的最扯淡的地铁之一。之所以有之一,是因为还有北京地铁在后面排着。
  1. 停车误差半个门很常见,最高误差了半截车厢,再倒车。停不准已经成了上海地铁的特色之一,尤其是二号线,停不准是正常的,准了您就知道,今天是老师傅上班。
  2. 上下车关门不等人。四号线上下班高峰经常在世纪大道站迟到,然后掌车要按照时刻表赶回来。但是世纪大道站又是上下客流非常大的一站,经常是10-20秒不够上下的。结果掌车在无法确认人已经全部上车的情况下就开始关门,后来的人要么强行顶住门,要么等了一辆车被车门关在外面,车里面还是空的。
  3. 地铁没厕所。我不知道是不是中国的惯例,反正我在中国没看到几辆地铁有厕所的。上海地铁金沙江路,金科路我知道站外有厕所,世纪大道站内有厕所。其他站好像基本没看到,有几个站我专门问过,没有。
  4. 信号烂到渣。闵行附近有个信号盲区,上海火车站到宝山路有个信号盲区,这两个已经是出名的连信号都没有的地方了,不过这毕竟是地面,覆盖不全是移动问题。可是二号线世纪大道站一下光有模拟信号没有数字信号,只能收短信不能上网,外加部分上来的地方连电话都会断线,很明显是泄漏电缆出了问题。二号线延伸段已经竣工一年多了,这种小问题都迟迟不解决。这还不说,四号线信号时好时坏,每天想用飞信给朋友发个消息纯属摸彩。
  5. 下雨天地铁内发霉的味道重到一塌糊涂。不知道地铁内空气循环系统怎么设计的,一到梅雨天就有一股发霉的气味,让人喘不过气来。就这种空气系统,多少安检都属摆设,万一有人往进气口放一颗毒气弹,出的事故比地铁内爆炸轻不了多少。
  6. 上地面的出口安排不科学。金科路站靠近金科路祖冲之路的出口,连接了一条双向的人行道,最高可容三人并排。但是几乎所有人都是向十字路口方向走,导致单向人流满载。平时上下班高峰还有人在这么拥挤的地方摆摊无人过问,也不知道城管这会到哪里去了。就不说这种中国特色问题,单是下雨天无人摆摊的时候,由于打伞,因此地铁出口入口严重滞留。自从施工因素导致一面栏杆被拆除后,很多人就找到了出路。一旦又遇到下雨或者摆摊导致拥堵,就从非机动车专用道上走到入口附近,翻栏杆进入地铁口。很多人还互相问,今天要不要翻墙?
  7. 安检纯属扯淡。没有强制安检能力,没有规范的操作方法,没有明确统一的培训和标志。你不知道在那里搞安检的人是谁,也不知道什么要检,什么没事。每回被检查都像被刁难,为什么我这个要检,前面那个看起来差不多的就不检。更不谈安检纯属扯淡,有此vvoody拿着一盒德州扑克的筹码进去,标准的赌博工具。安检一点异议都没有,过去后我们从后面看了,外观上看起来像六管炸药。安检人员真的有良好的培训,能够分辨什么是危险物品么?
    上述这些都是扯淡中的扯淡,相比起来,倒是有些不那么扯淡的事情,我们也列一下。
  1. 经常晚点停开。这个不完全是上海地铁的过错,毕竟上海地铁已经是世界上人流量最高的地铁之一了,算里程好像也是世界第一,因为意外而晚点实属难免。但是上海地铁缺乏一些有效手段引导人流规避。有一次在世纪大道听到广播说哪里哪里地铁严重延误,我觉得这已经是个不小的进步。个人希望能够通过网页,围脖等方式将运作过程中的事故展现出来,让乘客避免死胡同问题。
  2. 高人流量交错没有进行多站交互分流,例如香港地铁的中环和金钟。在香港地铁设计中,但凡大人流量交错的换乘都是多站分流的。说的更通俗点,就是两条线有两个交点。大家可以想想,要是人民广场站分两站交错,人流何至于如此拥堵。上海地铁设计的看似阡陌交错,但是在最密集的几个站人流压力极大,浪费大量空间做人流疏导,而且要走很远。而最稀疏的几个站又人流不足。不过回想上个世纪上海地铁设计的时候,那时候打死我也想不到地铁会发展到现在这个样子,而且是在十年内。所以设计失误有其历史原因,但历史问题造成的后果还需要我们正视。
  3. 拥挤,拥挤,还是TMD拥挤。这个也得部分的归功于上海的发展。目前上海地铁的票价比北京高出不知多少,还是非常拥挤。北京拥有全国最拥堵的地面交通系统和地铁票价,可见其地铁拥挤程度。这是典型的政府好心办坏事的结果,其中最典型就是广州市政府免除地铁票价导致的地铁功能失效。希望上海地铁能推行"峰-谷"折扣票价,推高峰口票价,降低平时票价,充分利用平时用不到的运能。

2011年5月24日星期二

使用uwsgi搭建python应用

   wsgi是python的一个标准web服务接口,具体去google pep文档,不解释。在李木头的忽悠下,贝壳试用了一下uwsgi搭建python服务器,感觉还不错。
   首先,贝壳将uwsgi打包成deb包,因为这东西和python基本没什么关系,就是一个标准的系统守护服务程序。其中贝壳测试了一下,uwsgi编译的时候是依赖版本的。所以请教了一下thomas,打了uwsgi2.6和uwsgi2.7两个包。没办法,mercurial对python2.7的支持不是很好,每次都出问题。具体的可以加贝壳的repos: http://shell909090.com/debian/ testing,然后通过一下贝壳的key,就可以直接安装uwsgi2.6了。当然,不通过key也可以,只是每次安装升级都有警告。
   贝壳写了一个很简单的init.d,使用--vhost来启动uwsgi为服务模式。这种模式的好处是,uwsgi的具体执行的应用都是由nginx来确定的,因此所有的映射只需要修改nginx配置就好。uwsgi参数很多,包括可以指定内存限制,工作进程/线程,定时重启工作进程,多解释器等等。是一个高效的,功能强大的服务器。具体可以自己参考调整。最好的的地方是,uwsgi还支持virtualenv,你可以给不同的应用建立不同的工作环境,从而在环境中使用指定的包,而不是系统包。
   下面是一个nginx配置的例子。
      location /ticket {
               include uwsgi_params;
               uwsgi_param UWSGI_PYHOME /usr;
               uwsgi_param UWSGI_CHDIR /home/shell/workspace/hg/thost;
               uwsgi_param UWSGI_SCRIPT main;
               uwsgi_pass unix:/var/run/uwsgi.socket;
       }

       location /mlocate {
               include uwsgi_params;
               uwsgi_param UWSGI_PYHOME /usr;
               uwsgi_param UWSGI_CHDIR /home/shell/workspace/hg/thost;
               uwsgi_param UWSGI_SCRIPT main;
               uwsgi_pass unix:/var/run/uwsgi.socket;
       }

       location /hg {
               include uwsgi_params;
               uwsgi_param UWSGI_PYHOME /usr;
               uwsgi_param UWSGI_CHDIR /home/shell/workspace/hg;
               uwsgi_param UWSGI_SCRIPT hgweb;
               uwsgi_param SCRIPT_NAME /;
               uwsgi_param SERVER_NAME hgweb;
               uwsgi_pass unix:/var/run/uwsgi.socket;
       }
   这里面设定了三个应用。由于贝壳不需要virtualenv,所以PYHOME设定了/usr。第一二个应用的基础路径在/home/shell/workspace/hg/thost,脚本叫做main.py。第三个应用的基础路径在/home/shell/workspace/hg,脚本叫做hgweb.py。需要注意的是,uwsgi会以模块方式导入这些脚本,然后使用其中的application对象作为wsgi处理函数。所以不要把application对象赋值放在if __name__ == '__main__'里面,那没用的。第三个应用指定了SCRIPT_NAME和SERVER_NAME,是因为hg的wsgi模块没有SCRIPT_NAME不工作,而这个应用和前两个不在一起,所以如果不指定SERVER_NAME会导致覆盖冲突。
    这种部署模式的好处是,我可以使用一个宿主来管理所有的应用,而不必每个应用启动一个宿主,省去了多个宿主管理的麻烦。而多进程,压力分布等等问题都被uwsgi的配置系统搞定了。于是应用程序宿主做到了彻底的免管理,即装即用,只用调节性能匹配即可。具体程序配置下放到nginx中,要修改映射关系只用管理一个位置。

2011年5月23日星期一

debian中文初学者引导——中文化

    讲了半天废话,都是在介绍你应该用什么应该用什么,基本没讲到中文用户最关心的一个问题,中文化和输入法。
    其实没讲是有原因的,因为debian的中文实在太简单了。在你安装的时候选择中国地区和中文,装出来应该就是中文的。如果不是,或者你安装的时候忘记选择了,可以先运行dpkg-reconfigure locales,出现一个很长的语言列表。其中选择中文的几项,常见的有zh_CN GBK(不推荐18030,多出来的字很少用到,生成时间极长),zh_CN UTF-8,zh_HK UTF-8(香港地区编码,不用可以不选),zh_TW BIG5,zh_TW UTF-8(后两者为台湾地区编码,不用可以不选)。选择好后,确定,推荐zh_CN UTF-8为默认编码。然后就是漫长的生成,完事。试试看重启后你的env | grep LANG有没有变成zh_CN.UTF-8?过去就对了,没有的话,手工修改/etc/default/locale加入也一样。其实dpkg-reconfigure locales就是修改了/etc/default/locale和/etc/locale.gen,然后locale-gen一下。
    不过这不代表你能正确的使用中文,只是你的满屏看不懂的东西变成了一堆方块而已。因为,你还没装字体。当linux不支持该种语言的时候,出现的是满屏的乱码。如果支持了但是没有字体,则是一个个方块。下面是我常用的一堆字体,保证不含windows,大家可以选择自己喜欢的用。ttf-arphic-bkai00mp,ttf-arphic-bsmi00lp,ttf-arphic-gbsn00lp,ttf-arphic-gkai00mp,ttf-arphic-ukai,ttf-arphic-uming,ttf-wqy-zenhei。其中最后一个就是赫赫有名的文泉驿正黑。安装方法都很简单,aptitude install就好。如果你还不满足,非要自己安装字体。那就在/usr/share/fonts下面新建个目录,把你的字体复制进去(符号链接也可以),然后在这个目录中运行mkfontscale,mkfontdir。全局运行fc-cache。
    OK,中文支持快走到最后一步了。你现在应该可以看到满屏的中文,可是,可是——你还什么都输入不进去。恩,没装输入法吧。debian的特点是什么东西都是自己来装,而不是系统帮你装好。所以,你需要自己装输入法。简体中文而言,比较流行的有三种,fcitx(传说中的小企鹅),scim,ibus。下面就要根据你的具体配置选择了。ibus是我用过的比较好的输入法,但是相对比较费cpu,在低端机器(例如netbook)上老是丢字,scim对这种情况略好些。如果你安装了一个以上,可能你还需要im-switch来切换输入法。这个软件会调整/etc/alternatives/xinput-zh_CN的链接指向,这是debian的alternative系统,细节不说。
    另外说一句额外的提示,做完上面的步骤,你应当可以阅读和输入中文,但是你看到的软件还是满眼的鸟语,对不对?这是因为软件的语言在软件书写的时候就确定了,他不会随着你的内容改变而改变。但是这并不是说常见软件没有中文版。例如你安装一下iceweasel-l10n-zh-cn这个包,再跑iceweasel (firefox)看看?

2011年5月19日星期四

debian中文初学者引导——上网

    上网是linux系统的一大强项,除了那个变态的QQ外。
    通常而言,上网指的是网络三大基础应用,浏览器,IM工具,电子邮件。最后一个我们介绍过了,那么我们就集中介绍一下linux的两大杀手级浏览器。firefox和chrome。
    firefox是debian内置的,不过用的是开放分支,iceweasel。其实主要就是改个名字换个图标做做兼容性测试打几个下游补丁什么的,内核还是一样的,版本号和firefox都保持一致。目前testing下的firefox还是3,不过估计很快就会升到4。firefox下有很多插件,你可以挑选部分来安装,改善浏览器特性。记得linux是一个多用户系统么?对了,你在firefox下安装的插件(addons)都是针对个人起效的。所以,你老婆安装了一堆插件,对你不会构成任何干扰。如果你打算全局安装,可以用apt-get来安装部分插件。
    用firefox的话,你可能疑惑flash插件怎么装。系统会给你默认安装拉,不过那个非常不好用。你需要用non-free版本的flashplugin-nonfree,直接从仓库中可以下到。注意这个组件是x86 only的,如果你用64好像要自己装ia32来做模拟,否则无法生效。如果连这个都说版本太老,就去adobe的网站上弄个最新linux版本回来,for debian或者for ubuntu都可以,自己装。
    chrome的安装使用就比firefox简单很多了,直接去这里( http://www.google.com/chrome/ )下载合适的包,安装后,你的系统/etc/apt/sources.list.d/位置下会多出一个google-chrome.list,每次update的时候会检查google的仓库,跟随升级。这点chrome做的非常无缝,你基本没有感觉。
    另外就是IM软件的选用。国内装机量最大的是QQ,不过鉴于我对企鹅这厮没什么好感,我强烈不推荐你用QQ。整个开源社区做QQ兼容做了不下三次(QQ for pidgin, luma, eva),还都是在未公布资料的黑盒情况下做的。每次都被腾讯改协议给封掉。自己出了个linuxqq,做的烂不说,还多年不升级,也不管客户反应。微软就算讨厌开源,也好歹没有封杀开源办公软件兼容他的文件格式。既然这厮不打算支持开源,那么开源也不打算支持他。你非要用,可以用webqq,或者很痛苦的用linuxqq。有不支持的功能,请打电话给腾讯吧。
    linux下用的比较多的IM还是gtalk, msn和skype三种。不得不感慨大中华局域网的威力,国内和国外的东西都不一样的。国外好用的东西就是进不来,国内的山寨货大家玩的不亦乐乎。首先是最多的gtalk,这个东西什么都不支持。没有定制表情,不一定能传输文件,没有远程协作。那为什么列为第一推荐IM呢?因为这个东西就是为了随时通讯而生的。支持gmail内置客户端,可以在无客户端的情况下用网页使用(这也就是为什么不一定能传输文件的原因)。支持几乎所有的第三方客户端,支持手机,强安全通讯。(腾讯的另外一个问题是,在同一个网段内的人可能可以获得你的聊天记录)并且,这是我所知唯一能同时在多个地点登录的IM工具。你可以在地铁上通过手机聊天,到了公司后直接登录,不必担心手机和电脑互相提下线的问题。电脑关机,手机持续在线。
    MSN是老牌IM,不过微软逐步淡化了这个系统。某个版本后居然需要安装100M+的客户端,我就没在windows下继续使用。但是linux下的pidgin可以同时支持gtalk(协议是jabber)和MSN,开一个软件可同时登录多个账户,也不需要一个超级庞大不知道干了点啥的客户端,非常方便。skype是国外知名的IM工具,特点是音频支持能力,说白了基本当电话来用的,在国内发行的版本有记录聊天记录的问题。linux下要使用skype需要独立下载软件,pidgin-skype这个东西居然要skype在运行才能使用,这不是扯淡么?贝壳的repos里面有skype的安装包,你也可以去下载官网的安装包,应该没什么问题。不过最近这厮被微软收购了,也不知道将来命运如何。

2011年5月18日星期三

debian中文初学者引导——办公

    作为一台中国的电脑,最重要的三大功能就是上网,办公和游戏。当然,linux下你需要暂缓考虑游戏。不过最基础的,办公功能应当还得有。
    首先要说明的一个问题是,linux下对微软的office系列的支持并不好。这当然不是linux的过错——你让微软打开odp或者tex文件看看?不过鉴于现在office满天飞的现状,你总要支持doc系列文件,否则办公就直接出局。这部分的是为什么只有程序员才用linux的原因——在IT公司里,用office的是异类。我们公司里,老大带头用openoffice。对于没有这种幸运的人,我的建议是安装libreoffice这个包,这个的前身是sun的openoffice,不过开源社区做了一个完全自由的分支。后来sun杯具了,debian下的头号办公系统就是他了。大部分的文件打开,使用和保存都是没问题的。如果光论正常文档,文字的编辑,段落编排,libreoffice的功能都不会和office差太多。不过高阶功能开始,libreoffice就会变的很不顺手。这是当然的,office用户众多,发掘出的用法和资料不知凡几。libreoffice用户不但少,而且多数还是老外。
    当然,作为一个linux用户,通常都抱有一个观点。平文本(plain text)比复杂的办公软件好用多了。大多数情况下,这都是对的。当你写毕业论文的时候,内容比你排版技巧更加重要。当你给上司做一份汇报材料的时候,内容比排版技巧更加重要。平文本的简单编排,libreoffice还是可以比较好的兼容掉office的。如果这些工作上,公司的要求是排版技巧更加重要,那你可以考虑换一个公司。有少部分情况下,排版技巧会比内容更加重要。例如客户PPT展示,公司报纸美编,这些工作不要使用办公软件来完成,你应当做的是寻找合适的软件来做到完美,而不是用一个不专业的软件在那里折腾,然后抱怨不好用。记得我们开始说的么?要懒,而且有创造力。
    除了office系列,另一个办公上常用的东西是pdf文档。debian下可以用的选择就比较多了,闭源的有foxit reader,开源的有epdfview,mupdf,xpdf,evince等等一堆。个人比较推荐foxit reader,基本可以解决大部分情况下会让你比较烦恼的中文看不见问题。如果要生成和处理pdf,选项更多。linux下大部分办公软件都可以直接输出PDF。即使不可以,也可以像windows那样,装一个虚拟的打印机,然后输出pdf来。
    提到PDF不能不提的就是打印,这点上debian做的并不太好,当然,也不算太差。在windows下的行为通常是,连接打印机,安装驱动,在打印机设备中出现新设备,配置打印机,并标记为默认,然后就可以工作了。在debian下需要先安装cups包,启动服务。再安装合适的驱动,例如hplip-cups。连接打印机,然后用浏览器访问http://localhost:631/来访问管理界面。新建打印机,再选择合适的配置。对于不大熟悉的人,通常会在驱动选择和管理界面上花费不少功夫。这里( http://zh.wikipedia.org/wiki/CUPS )介绍了常见系统下的管理工具,能减轻一些负担。不过实话说,直接用web管理并不繁琐。
    办公中还有一个比较重要的功能就是收发邮件。作为初学者,我建议你用thunderbird开始,debian下需要安装icedove这个包,这是thunderbird的开放分支。基本简单配置后就可以直接收发邮件了,没什么值得好讲的。不过既然你选择了linux,我建议你好好学习一下gnupg和签名技术。你要知道,通常的电子邮件安全性和明信片背后写的祝福大致相当,以这个作为办公基础实在是一件相当危险的事情。

2011年5月17日星期二

组合翻墙方法——细节

   中国这网络,越来越没法上了。现在你访问国外禁网,就会中断连接10分钟。问题是我也不知道哪个网是禁止的...
   现在教大家一招,基本能够永久套上翻墙。理论上你就没有中招的可能,尤其适用于公司使用。
   首先是squid,这个是流量分离和缓存的关键部件。你可以用pac替代,但是这只局限于某台具体的机器,并且代理用户支持pac。squid的好处是,任何http访问都可以分流,而且无须客户端支持。甚至如果你精通squid配置,你可以配置成透明代理(cache拦截),从而避免在每台机器上修改代理配置。当然,cache拦截是有技术问题的,具体请参考这篇(http://home.arcor.de/pangj/squid/chap09.html#a6)。
   squid的配置如下:
include /etc/squid3/gfw.conf
acl localnet src 192.168.0.0/16
http_access allow localnet
http_access allow localhost
cache_peer 127.0.0.1 parent 8123 0 no-delay no-query
cache_peer_access 127.0.0.1 allow gfw
always_direct deny gfw
never_direct allow gfw
   以上配置是允许192.168.0.0的C类内部子网访问本机,所有gfw规则的域名必须通过8123端口的上层代理,而其他的直接访问。注意以上不是完整配置,不保证可以独立运行,只保证在debian的标准配置文件的基础上,修改以上内容就可以工作。独立配置你可能还需要加入以下两句。
http_access deny all
http_port 3128
    配置中的gfw.conf是gfw这个规则的定义文件,这个文件是由程序生成的,程序如下。注意,你系统上的python版本应当在2.5以上。
#!/usr/bin/python
from __future__ import with_statement
with open('gfw', 'r') as fi:
   for line in fi: print 'acl gfw dstdomain .%s' % line.strip()
   以上内容,保存为平文本,赋予执行权限后,直接执行即可。同目录下必须有一个gfw文件,平文本,里面一行保存一个域名。域名不以.开头,可以使用泛域名(例如google.com匹配www.google.com)。执行后打印出内容,所以你还需要重定向。./gfw2squid > /etc/squid3/gfw.conf。当每次gfw文件升级时,你都需要重新生成,并且迫使squid加载。方法是squid -k reconfigure。
   OK,现在你有一台配置了分流的squid,然后你需要一个可以翻墙的代理。由于我的目标是看youtube,所以我采取了一个非常复杂而高性能高可靠的方案。
   我配置了一台polipo作为http socks5协议转换。由于squid的特性,不能直接使用socks5,因此还是做了一重转换的。polipo这个代理的性能和稳定性也相当不错,用来做缓存代理也是可以的。不过我们用了更强大的squid,就没必要用polipo了。因此启用以下几句来减少polipo的性能消耗,同时,将本地8123端口的http代理服务转向到7777端口的socks5代理。
socksParentProxy = "localhost:7777"
socksProxyType = socks5
chunkHighMark = 819200
objectHighMark = 128
diskCacheRoot = ""
    在polipo之后的,是一个负载均衡系统。http是一种无状态协议,对不对?所以同一个session可以分布在不同的服务器上处理。也是同样理由,我们可以把后端的socks5连接分布到多个socks5服务器上。以下是haproxy.cfg的简单配置,由于提取出时做了部分删节,我不保证一定能在所有系统上跑通,但是同样的,debian问题应当不大。
global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        maxconn 4096
        user haproxy
        group haproxy
        daemon
frontend socks5
        bind    0.0.0.0:7777
        default_backend ssh-balance
backend ssh-balance
        balance roundrobin
        server  ssh1 0.0.0.0:7778 maxconn 20 weight 20
        server  ssh2 0.0.0.0:7779 maxconn 10 weight 10
        srvtimeout      20000
    最后是一个核心问题,7778和7779是真实的socks5翻墙代理服务器,具体是什么呢?很简单,多台ssh服务器。当然,如果你用别的方案,只要是提供socks5的,都可以混用。
    整个系统运转起来后,一个公司内十多号人的访问可以全部通过这个系统。具体需要多少个ssh,多少性能够用要看翻墙的频率。但是由于做了负载均衡和本地缓存,所以性能是相当可以的。单人使用的时候可以看youtube,十多人同时使用的时候还能正常的访问google搜索,邮箱服务等。而且不翻墙没有ssh压力,节约流量,也方便使用。后端的方案可以做其他变化,例如如果你是多台vps,你可以在上面部署polipo,然后用ssh做端口转发,本地用haproxy做负载均衡。同理,如果你使用别的方案,只要是提供http代理的,也可以省去polipo,用haproxy群集。
    至于另一个核心问题,gfwlist的获得,你可以从autoproxy中提取一个,自己处理,过程很是繁琐哦。贝壳已经处理好了一个,做了签名压缩,你可以找我要。

2011年5月16日星期一

debian中文初学者引导——安装

    这篇主要讲安装。所以,请去这里( http://www.debian.org/CD/http-ftp/#stable )下载一张stable光盘。如果你对testing和unstable比较感兴趣,没问题,装好了可以改的。但是对于初学者,我建议你从stable开始玩起。在选择了合适的架构后,你会被引导到光盘镜像服务器上。作为国内玩家,我建议你别用官方服务器,那个在美国,很慢。个人推荐中科大服务器( ftp://ftp.cn.debian.org/debian-cd/ )去下载合适镜像,服务器是电信联通教育网三线路的,无论是学生还是商业人士都很合适。目前而言,我推荐你下载debian-6.0.1a-i386-netinst.iso作为安装镜像。这个镜像只安装最小部分,而且在安装时无须联网,适合大多数场合。注意,如果你的机器只有无线网络,请不要使用这张镜像,因为难度太高了。
   好吧,下面我假定你有镜像了,你有三种常见的安装模式,刻录光盘安装,liveusb安装,虚拟机直接使用镜像。刻录光盘没什么好多说的,虚拟机直接使用就看你会不会用虚拟机,liveusb就有点复杂。具体参考我写的这篇文章( http://shell909090.com/blog/2010/12/u%e7%9b%98%e5%ae%89%e8%a3%85debian%e7%9a%84%e6%8a%80%e5%b7%a7/ )。无论从哪里开始,你都必须保证开机启动的是你的debian安装镜像。所以发生例如debian安装时进入了硬盘上的windows这种问题别来问我,直接去google BIOS设定。
   很多人经常问的一个问题,是关于如何安装linux和windows共存。其实这种模式并不好,至少我知道的使用这种模式学习linux的人都失败了。因为你平时会经常进入windows,然后懒得出来了。最好的方法是,彻底告别你的windows,然后下定决心用linux解决所有问题。如果你觉得底气不足,可以用虚拟机运行一个小实例,至少我觉得这比共存模式方便。因此,我不会介绍windows和linux共存的有关问题——这些问题太复杂了,虽然技术上说并不难,但是会占用大量篇幅。
   单独安装linux也需要划分分区。通常的建议是/ /usr /var /home /tmp swap全部可以考虑分开。不过作为初学者,我建议你用一个分区/就够了。如果内存在1G及其以上,也不一定需要用swap。减少麻烦不是什么值得羞耻的事情,制造麻烦才是。如果你看了半天,搞不懂这段话什么意思,我建议你先看看下一篇《系统管理》中关于linux文件组织结构的介绍。如果你觉得有些不安,常见的方法是/ /home swap。这通常用于大型机器上,分离的home会让你在重装时无须额外的做数据保留操作,swap则提供更高的内存使用率。文件系统的建议是全ext3,这个会减少你很多的管理麻烦。如果你想尝试一些新的文件系统,最好不要在/上面尝试。
   安装过程没什么好多说的,安装完成后,才是一系列最艰难的地方。debian-netinst是不带X系统的,所以如果你想使用图形界面,安装完成后的配置才是最关键的。通常你的电脑可以联网,因为安装的时候会自动配置你的网卡。如果你是无线网卡,请先连一根有线。如果不行,那就不是初学者课程了——你需要自行安装wpasupplicant,iw和相关依赖包,然后手工建立config文件。通过config连接合适的ap,再手工dhcp获得地址。总之,这些问题初学者就不要想了,请直接拉一根网线,接上,启动机器(次序不要反),你的机器就联网了。如果不是,找人求助吧。
   第一件事,请先去/etc/apt/source.list下面,修改你所选用的镜像。如果你希望用testing或者unstable,直接修改此处就可以了。通常我们需要安装contrib和non-free部分,所以在main后面加上contrib和non-free。这里有些重要的商业程序,例如sun-java,rar/unrar,flashplugin等等。另外就是名称。通常镜像后面的名称是lenny这类的代号,建议改成stable这样的代号。当debian升级,版本切换的时候,你的系统会自动的升上去。当然,商业级别的服务器反之,不要用stable这样的代号,因为会造成稳定性问题。
   当你修改完source后,执行aptitude update,然后再执行aptitude install vim slim xfce4。当然,如果你喜欢用gnome,那就是aptitude install vim gdm gnome。然后重启?你的机器应当出现了一个可爱的,花里胡哨的界面。啧啧,简直俗毙了。不过鉴于新手都比较习惯图形界面,我还是继续从图形界面开始介绍吧。

2011年5月15日星期日

debian中文初学者引导——系统管理

    装什么系统就要能玩什么,如果你安装的是windows,也需要解决几个最简单的管理工作——文件存放,如何联网,安装软件。不过幸好,用debian的好处是,你暂时不用担心病毒了。
    在进行管理工作前,我先说明一个事实。平时你在windows下,可以随便进行的系统管理工作,在debian下面不是谁都能干的。如果linux也像windows那样允许所有用户都修改系统,那早就天下大乱了。为了修改系统关键部分,你需要root权限。如果在命令行下(多数系统管理都是命令行完成的),那么用su -来变成root,或者在执行具体命令的时候在前面加上sudo,如果你已经配置了sudo工具的话。需要特别注意的是,我不建议新手随时都顶着root权限做事,这很危险。在windows下我们很容易修改系统导致出错和崩溃,原因之一就是我们随时都可以拥有系统最高权限。所以,当你需要root权限的时候,开一个root的命令行来管理,不要一直用root命令行做日常工作。
    首先是文件存放,这和windows有基础概念区别。windows的文件组织结构继承了DOS的特征,使用A-Z的分区号标示每个物理设备。而linux的文件组织结构继承了unix的特征,所有数据都在一颗单根树下。就是说,系统只有一个根目录。每个物理设备,都被"挂载"在特定的目录下。在windows下,我们把光盘放入光驱,就可以在F盘上面看到一颗目录树。如果在linux下,我们需要将光盘"挂载"在某个目录下。这个目录下的原本内容就消失不见(放心,没有被物理的删除),取而代之的是光盘的目录结构。当然,debian下面通常有自动挂载程序会帮你完成检测到光盘插入后自动挂载的过程。
    文件存放的结构也和windows大有不同。windows下的程序安装和文件组织遵循"同包内聚"的结构特征。即是说,只要属于同一个软件,这些文件就被放到一起。大家可以看看program files下面一堆堆的目录,每个都属于一个软件。而linux则基于FHS结构,大部分的时候是"功能内聚",即是说,同类功能的文件被放到一起。例如可执行代码基本放置在/usr/bin和/usr/sbin,前者是普通用户可执行代码,后者是特权用户可执行代码。当你执行ls的时候,其实是调用了/bin/ls。这样的好处是路径设定及其简单,你不信可以对比windows的path设定和linux的path设定。当然,坏处是无法通过直观的文件删除来删除所有包。
    这当然不代表debian卸载软件比windows更费力。实际上,是更简单。debian提供了dpkg工具来管理包,和apt工具来管理仓库。你可以很简单的用apt-get install 包名,来安装一个包。用apt-get purge 包名来彻底删除包。purge和remove的区别相当于windows中的"是否删除注册表",如果是purge,是不会保留你自己修改和定制的配置文件的,除非这些数据存在于你的HOME目录下。你可以用aptitude update来追踪系统升级,不过这个不会自动的未你下载最新包。update只是检查服务器上有没有新的包出现,然后通知你,有新东西了。升级是upgrade的事情,不过我建议手工进行升级,具体要多读debian参考手册,也要有几次搞坏系统的准备。
    最后一个问题是如何联网。debian是一种很网络化的系统,你的系统升级,使用,都是通过网络的。乃至于我每天用系统的时候,一多半时间都在透过ssh来管理不同的设备。对于这种系统,如何联网是一个很重要的问题。如果你是有线网络,由于不大可能断线,我建议通过/etc/network/interfaces来配置。方法在debian参考手册里面,根据你是dhcp还是static配置好,重启,基本就固定下来不用动了。如果是无线网络,建议直接安装NetworkManager,并且注释掉/etc/network/interfaces中的所有内容。nm的使用很简单,你看着办就好。

2011年5月12日星期四

debian中文初学者引导——总论

   上次写了篇debian中文争议问题,结果发现好多人都在搜debian 中文,我估计他们对debian中文名没什么兴趣。纯粹想玩玩debian,但是却难于入手。由于此类人中中文使用者居多,对于debian良好的资料无法使用。所以我准备写这篇debian中文初学者引导,来让更多的人可以玩玩这个系统。
   在开始玩debian之前,请确定你是适合使用linux的人群。当然,这里并不是说linux只适合程序员。我认识的人里面,使用linux的还有金融工作者,大学教师(非计算机专业),初中学生。他们使用linux完成日常工作,没有什么太大的问题。如果你希望学习linux,首先,你不能是重度游戏爱好者。linux下的游戏无论从数量还是质量,和windows都不在一个级别。其次,你需要一定的英语水准。当然其实不需要太好,贝壳自己连四级都没过。你只需要能认识基础的指令和提示,照抄到网络上即可。如果您是初中未毕业,26个字母尚有困难,建议还是别用了。最后,也是最重要的一点,你需要热爱折腾,总觉得现有软件满足不了自己,但是又没有什么好办法。当然,如果您热爱折腾又有办法,那估计是个程序员。程序员就别废话了,完全没学过linux的程序员不算是完整的程序员。
   我的目标是,尽量让你从最简单方式安装一台系统出来,然后普通使用三个月以上,期间基本不用windows。当然,鉴于中国国情,有些网站是永远的IE,所以要用到windows是难免的。实际上,如果你的学习能力不算太差,大约在一周以后,使用linux的不舒服感就会减少,甚至消失,出现问题无法搞定的几率也会降低。大约在一个月后,就会开始自己折腾各种配置。差不多从你开始折腾自己的配置开始,你就会无可救药的爱上linux。
   学习linux最重要的几件事情是——合作,创造,懒惰,不满足。
   当你学习linux时,最重要的就是和其他人合作,包括看文档和问问题。所以,首先请学会自己查看常见文档,包括man和google,来解决一些简单的问题。例如ls的哪个参数能够列出目录详细信息这种问题就不要问出来。次之,你需要学会《提问的智慧》( http://bbs.csdn.net/IndexPage/SmartQuestion.aspx ),请不要问出愚蠢的问题来。其中最愚蠢的就是,为什么linux不能XXX,windows可以。唔,为什么老虎不能拉车呢?驴可以。最后,尽量认识几个linux玩的不错的,又比较有空的人,这对解决你的燃眉之急很有帮助。
   作为linux玩家,你必须是懒惰而具有创造力的。通常linux玩家不喜欢太"勤劳"的人。自己辛辛苦苦的在一个文件的所有行头部加上行号是一个很愚蠢的行为——作为一个懒人,你应该想——这个是不是有人做过了,有没有什么比较省力的方法?要能够懒惰,你必须很有创造力。见没见过用光驱不断弹出收入来晃动婴儿床的想法?恩,这家伙很懒,我很欣赏。
   作为开始使用linux的基础,请把这个网址( http://www.debian.org/doc/manuals/debian-reference/ )收入你的收藏夹。里面说了很多实用的东西,足可引导一个人正常的使用整个系统完成工作。其次,专门准备一台电脑,不用太好,用来安装debian。如果没有,那就用虚拟机。尽量不要多分区混合安装,因为你不会记得去用linux的。现在一台专门的电脑并不贵,一般人家里都有几台很老的电脑,用那个就好,通常还免去了最新硬件无法驱动的烦恼。
   如果上面的东西你都看过了,确定自己需要学习使用debian,那么,请慢慢看接下来的文章。

2011年5月11日星期三

再论openvpn的搭建

    从概念上说,openvpn类似于一根网线,或者一台交换机。你拨上vpn,差不多相当于给自己的机器装一个虚拟的网卡,从上面拉一根线到服务器的虚拟网卡上。所以,vpn的配置大概和网络配置差不多,分为几个大类。

    一类是第一层交换,即虚拟网卡和真实网卡组成网桥。这样可以把虚拟网络上的设备引入真实网络,让虚拟网卡获得真实网络的地址,或者反之。坏处是配置复杂,稳定性差。
    例如你家里是192.168.0.0/24网络段,你决定用tap配置一个网桥,就需要新建一个br0设备,将eth0和tap0设备加入网桥。这样,一台IP为192.168.0.10的家庭机器,在访问IP为192.168.0.110的远程机器的时候,所发出的ARP请求会被转发到远端,然后ARP响应转发到本地。通过这种方式,10就会直接把MAC报文发送到中转机上,然后再转发远端。可以看出,由于ARP请求往来非常费时,在子网内机器多的时候,会消耗不少时间和带宽进行ARP转包,以及各种链路级开销。所以通常除了两个安全封闭子网因为管理理由必须这么玩,并且两者间又都有服务器和高速链接的时候,其他时候我不推荐这种玩法。
    更何况,在debian系统下配置网桥需要额外脚本,不如路由那样,可以使用默认脚本启动,然后动态修改路由表。

    大部分是二层交换,即将服务器作为路由器使用。这又分为两种情况,网络地址转换,和网关互通。
    网络地址转换是最常见的情况,这个又叫做NAT。网关在转发你的包的同时,会将地址转换成自己的地址。从而避免修改路由的行为。
    同样是192.168.0.0/24举例,远程网络假如叫做192.168.1.0/24。当你拨号上远程网络时,你就拥有了一个远程IP和一个本地IP。你可以配置路由表,让哪些IP从远程走(这就是地址段选择翻墙的原理)。大多数情况下,会被配置为默认都从远程IP走,除了几个特定地址(例如VPN服务器地址,这个也走虚拟网络会引起循环的)。而远程的网关,假定是192.168.1.1,开启了NAT。这时候你的所有网络流量就都从远程的VPN服务器上发出和接收了,如同你正坐在远程服务器后面的小网络内一样。

    网关互通是更复杂的一类情况,通常是小型企业为了多个连通多个地点办公子网而设计的。理论上说大型企业也适用,但是大型企业有钱,IT部为了防范责任问题,通常会直接采购Cisco之类大公司的产品直接使用。基本概念是将虚拟网络和真实网络配置成两个子网,两个子网可以互相访问。
    还是192.168.0.0的例子,我们假定另外有一个子网叫做192.168.1.0/24。现在我们需要连通两个子网,或者,更进一步,多个子网。
    我们首先配置一个虚拟子网叫做192.168.254.0,然后架设一台共用服务器。这是比较简单的模型。更复杂的可以将其中一个子网的某个服务器映射出去作为核心,配置就更加复杂,不过可以依照同样原理推导。架设好共用服务器后,我们需要在每个子网的网关上下手,否则就无法做到透明路由。修改这个网关的路由表,将192.168.0.0/16全部转发到虚拟网关(即共用服务器的虚拟IP)上去(当然,除去本网段不转发)。在OpenVPN上面可以配置,当某条链路拨接上来后,就在服务器上加入一条路由,将其后面的网段加入网关路由表。于是,当192.168.0.100的某台服务器希望直接访问192.168.1.100。首先这台主机会检查自己的路由表,发现这个需要由网关192.168.0.1转发,就先转到了192.168.0.1。192.168.0.1检查路由表,发现192.168.1.100需要被转发到虚拟网关,即192.168.254.1。于是通过虚拟网络,该网关做出转发。当192.168.254.1接收到后,他会依照上面的路由表,检查到这条链路是否已经拨接上来,拨接上的话对应的虚拟IP是多少,然后转发过去。最后是目标网关,192.168.1.1,转发给192.168.1.100的过程。整个过程复杂无比,不过实现起来都是自动化的。

    在配置文件中,有ca cert key三项,这三项分别对应不同作用。cert和key是用于向客户端验证服务器身份的。客户端那里有一个ca.crt,服务器这里的cert和key必须是那个ca.crt签署过的。这样,客户端就可以验证服务器是否是可信任的。而服务器这里的ca则是验证客户端身份的,客户端那里同样也有cert和key,必须由服务器端的ca.crt签署过。通常,我们用同一套ca.key签署两个cert,分别部署在服务器端和客户端,就可以工作了。
    另外一点需要注意的是,ns-cert-type server这个参数。在debian的默认系统中有这个参数,一旦指定,openvpn就会检验服务器证书上是否有server的选项。对于easy-rsa签署的证书,这个肯定是有的。但是如果自己用openssl签署,就要记得做ext,否则检验不通过会报错。

2011年5月9日星期一

一切终将过去

前几天才说纸质书电子书怎么怎么的,今天就爆出一条新闻,新华书店指责当当网倾销。
能不指责么,上回说到书籍成本中,有大约三成是流通成本,也就是运输,仓储,退换,宣传成本。网络书店可以省去仓储成本,宣传也是搭的实体店的车。通常的东西,网上卖的都比实体的便宜,这都成了一个共识了。衣服尚有合不合适的问题,书就只有哪个出版社的问题了,可以说是全国标准化产品。对于这种产品,从网络上购买,除非碰到假货,否则几无不合适的可能。实体书店可以先看一下,网络书店还可以找到大段内容呢,例如china-pub就有。甚至部分书同时出版电子版和纸质书,effective
stl中文版,我是先看了电子书,然后才买了一本纸质的。当然,现在很后悔,能不能光付钱不要纸阿。
对于标准化物件销售,网络对上传统销售几乎是没有悬念的。书籍,U盘,电子器件,化妆品,这些都是一旦确定买什么产品,型号代码一定,哪里买都一样的。在店里转两圈,地板一走,口水一噴,老板就是10多元的成本,一件东西不赚个20-30根本回不了本。在网络上,一台服务器2W一年成本计的话,够上千人连续逛一年,合一个人连续不断,不分白天黑夜逛一年才10元成本。当然,网络更多的是开发和运营费用,但是随着规模的上升,这些费用是会降下来的。这也就是为什么网络公司做上规模后来钱很快的原因。对上这种架子越大赚钱越多的对手,传统零售业的失败是已经注定的。
那么新华书店指责当当倾销,这话是怎么说的呢?倾销,常见于美国对中国的一些政策上。最早指的是一种商业手法,以低于成本的方式供货,打压对手,淘汰出市场。当成功占领市场后,再拉高价格,补回亏损。倾销往往是和垄断联系在一起的,在现代商业社会中,由于倾销通常会导致垄断,从而造成公司被拆分,所以本国对本国倾销的很少,多数都是对其他国家玩这手。也有用于本国某某协会抗议对方倾销,导致本国协会工人失业的例子。当然,这些事情在中国这个神奇的国度都是不存在的。
当当网算不算倾销呢?未必是,未必不是。当当的供货成本是比实体书低了很多没错,但是不是说所有的差价都一定是来自技术造成的成本降低。对于互联网公司,急于上市的情况下,拿钱补贴产品,造成消费者竞相抢购,从而让报表非常好看的手法屡见不鲜。我不确定当当网一定是这样,也不确定一定不是。但是一个当当倒下了,又会有别人站起来。互联网销售的成本太低了,是土地,就会有花要发芽。人不来种,自然生之。
另外还有一点问题,见于网络营销很多。就是通过实体店打样,网络上购买。这其实是一种并不公平的模式,因为靠山山倒,靠人人跑。实体店败局是个定数,实体店倒了,怎么打样呢?没地方打样,网络销售也玩不起来。这是一个会把自己玩死的胜利。今后更加现实的模式可能是格子屋形态的样品店。网络销售者租一个格子,放他们的样品。看好样子,网络订货。实在想要,可以把样品买走,销售者再补货就是。这种模式兼顾了网络营销的低成本和实体营销的可打样,似乎平衡的更好一些。不过最终形态,应当是借助新技术普及,发展虚拟打样为主的。
另外,网络销售如此,一些其他的事情上,大致也能看出,现在的世界,和以前不一样了。以前觉得理所应当天经地义的事情,现在也要重新考虑了。毕竟MJ走了,拉登也走了。虽然世界还没有完成更替,我们却也可以说,纸质书会成为历史,人们都将看电子书。我们也可以说电视将成为历史,人们都看网络视频。甚至也可以说,电话将成为历史,我们会打网络视频电话。当新东西出来时,虽然会相对弱小,需要一定时间的发展。但是最终必然会将陈旧的技术,乃至社会形态彻底摧毁。

2011年5月5日星期四

android常用软件

    专为职业用户介绍,菜鸟就别看了。
  • barnacle wifi tether,将手机变成3G无线路由器,紧急的时候可以拿来让普通笔记本上网。当然,如果你3G带宽或者流量不够,就别考虑了。
  • comicbricks,漫画阅读器,支持从网络上拖一堆漫画离线慢慢看。
  • connectbot,功能强大的ssh客户端,支持密钥方式连接服务器,可以做简单的操作。适合在车站,想看看服务器状态的时候用。
  • es文件浏览器,还算不错,支持ftp和smb方式文件共享。很容易使用windows文件共享进行操作。
  • gtasks,如果你平时使用google calendar的任务列表管理自己的任务,gtasks就是你需要的东西。
  • keepassdroid,平时各种密码一大堆,是不是记不住?用keepassdroid,支持linux和windows共享密码文件,记忆一个密码就可以到处用。
  • openvpn settings,不解释,翻墙必备。倒是自带的pptp客户端连接不上去,很奇怪。
  • QQ影音,虽说腾讯到处抄,但是QQ影音做的确实不错。功能中规中矩,大部分格式都能放,而且程序体积不大。
  • realcalc,计算器,不解释。
  • seesmic,twitter客户端,支持api代理,功能强大,不解释。
  • sshdroid,ssh服务器端。有了这个东西后,你就不需要连接usb连线并且安装adb这个大家伙了。凡是能操作ssh的机器都能登录操作,支持文件上下传(sftp),支持密码和密钥。
  • 安全隧道,翻墙必备,不过是走ssh代理的。
  • 大众点评,出门吃饭消费必备。我所知的信息最全的LBS。
  • 静读天下,小型阅读器,可堪一用。体积比ireader小,也没那么多花哨的功能。打开文件的时候有点慢,没有别的缺点。
  • 快图浏览,强烈推荐替代android自己的图库。速度如飞一般,图片瞬间出来。不过仔细看的话,从出来到清晰化大约有一秒的间隔,可见底下还是用模糊运算的。
  • 麦当劳优惠券,打折优惠应用。这类应用都差不多,从网络上下载一段时间的某品牌优惠组合,然后统一显示给你,方便你直接挑合适的组合去。严格来说,麦当劳优惠券不算真的优惠券,只能算优惠组合。当然,有些品牌的产品还是需要看一眼优惠券的,这时候这类应用也提供图片的优惠券。总之,在外面混的时候,带上这个应用,不知道什么时候就有点小折扣。
  • 迷你飞信,不介绍了。比较小巧,消息存储在系统信息里面。和系统自身整合做的不错。
  • 墨迹天气,体积比较大,不过支持多个地区天气,预报比较准(有几个预报误差太大),皮肤不错。
  • 淘宝,什么都不说了,在超市里尤其有用。就是家附近的沃尔玛没信号......
  • 天天动听,播放器,支持网络自动搜索,找封面和歌词。
  • 宜搜小说,自动从网络上找最新的小说来看,追连载的利器。用这个软件连找都不必了,上下班直接看就好。
    注意,此处comicbricks和宜搜小说有违反版权的问题,请对版权敏感的人不要用。

2011年5月3日星期二

地铁和保安

    我没说反对保安,当然,我也不赞同。
    我只是说,要么把保安撤了,省的浪费我们的钱,站着还碍眼。要么通过程序,地铁强制安检。
    目前的体系,我们花了钱花了时间,但是真想危害公共安全的人,一点也不困难的可以混进来。
    坑爹阿。

常用电池的分类和养护

概念讲解

1.电极电位差
    电池的材料决定电极电位差,因此,材料固定了,电池的电压就固定了。电池型号大不一定代表电压高,只是代表电量有差异。电池在使用中有电压下降是因为电池的内阻升高。
2.电量单位
    常见单位有两种,mAh和J。前者是常用单位,后者是理论热功单位。换算关系是,1V * 1A = 1W,1W * 1s = 1J。所以电池的电压乘以Ah(注意不是mAh,差1000倍)为Wh。1Wh = 3.6KJ。
    通常只有UPS的大功率电池或者少量笔记本才用KW和KJ的单位,其他地方,厂家写出这种单位的,让他换成mAh。

电池分类介绍

1.干电池
    通常电池指的就是这个,也叫碱性电池,不可充电。主要电极是锌,电极电位差1.5V左右。常见分一号,五号,七号三种型号,长度和电压一致,粗细和电量有差别。后两个型号也叫AA电池和AAA电池。
    通常说是不能充电,但是个人经验,拿老式充电器还是可以冲一下。新式的因为设定了截止电压,所以充不进去。不过充电后的稳定性和耐久性都很差,跑跑电筒钟表什么的凑合一下还行,正式用就形同废物了。
2.镍氢电池
    普通的充电电池,电极材料是镍,电极电位差大约是1.2V,比干电池略低。常见五号电池大小,主要用于数码相机上。以前的手机也有用到,但是近几年很少见了。
    镍氢电池的养护比较特殊,因为电池有记忆效应。一但某次冲放不完全,电池总容量就会受到影响。因此需要在买入后放电完全再充电完全进行激活,并且使用的时候必须冲放完全。如果发生记忆效应,可以通过深度充放电部分恢复,不过不是普通电池管理设备能做到的。
3.锂电池
    最常用的充电电池,电极材料是锂,电压通常是3V以上,最高可达3.7V,比能容非常高。有各种封装形态,通常我们说的笔记本三芯电池,指的就是22000mAh/3.7V的一节高能电池三节串联,组成22000mAh/11.1V的电池组。六芯电池指的是两个这种电池串联组成的44000mAh/11.1V电池组。
    锂电池没有记忆性,但是开始使用的时候还是最好激活一下。根据IBM的资料,锂电池最佳使用方法是保持低温,维持电力在15%-85%之间。也就是说,如果使用锂电池的手机和笔记本,不用等到电耗尽,在20%的时候开始充电最为合适。至于截止电压,IBM可以管理充电到85%,但是其他电源管理就只能一直充电。如果不用的话,充电到60%-70%,然后放入冰箱保存。
4.铅酸电池
    常用于汽车或是中小型UPS,电极材料是铅,电极电位大约是2V。通常都叫铅酸免维护电池,不过实际使用非常麻烦。电解液有干涸和冻结的可能,所以在寒冷的地带,往往有蓄电池冻结导致汽车无法发动的案例。不过通常寒冷地带的汽车往往也会在电池电解液中加入抗冻液,而且通常电解液在有电状态下凝点比较低。通常会发生这种问题的车都是温带开过去的,或者是车上电池耗尽。
    铅酸电池的比能容和电压都不很好,而且很不环保,对环境污染很大。但是成本便宜,可以做的很大,而且没有记忆效应。如果同等能量的电池换为锂电池驱动,汽车价格就会飙到普通人无法承受的地步。