为什么要自己架个"gtalk"服务器

为什么要自己架个"gtalk"服务器如果你也因为不使用QQ,同时偶尔有即时通信的需要,GTALK又被隔在GFW下时而
不能登录,那么可以试试自己架设一个服务器。GTALK基于一种开源通用的聊天协议,叫做jabber,或者XMPP。凡是遵循jabber协
议的服务器和遵循jabber协议的客户端都能相互通信,这样的免费开源服务器和
客户很多。服务器之间可以连接起来彼此通信,还可以与msn等聊天工具互通。在这里,我
只架单个服务器,容纳几个账号。各种感慨都在最后,非技术人员请从此跳过,方法是按END键。1. 选型很多种服务器,著名的有 jabberd2, jabberd14, openfire。我用了openfire,
因为1.它支持web管理界面,偶尔远程管理的时候工具容易选择;2.支持
ssl/tls,通信安全;4.有deb包,ubuntun容易安装;5.基于java虚拟机,也可
以在windows上跑。客户端也有很多种,我用得少,感觉不到太多差别。为了测试,我这次安了
gajim,平时主要用emacs-jabber。2. 安装安装真是没啥可说的,下载
openfire_3.7.1_all.deb,[http://download.igniterealtime.org/openfire/openfire_3.7.1_all.deb]
然后装上。3. 运行这个麻烦点。起初,各种毛病,反正我没运行起来。网上说openfire的手册要比jabberd*要好,不过我没空看。比如存储账户信息,
我希望使用内置的数据库,不想用mysql。因为顶多10个账户以下,而且跑在我的
笔记本上,根本不想为此架个mysql server。但是,报错,说内置数据库有麻
烦,参见手册,但是在手册的哪里,没有提。后来终于找到 (跟着某位大侠的贴
子,他说,他就要放弃时找到了)了,说是第17 次版本更新的时候(?)数据库的
语句写错了,应该把哪段以前的都删除就好了。我登时傻眼了。怨不得有人说开源的维护成本高,这手册是给人类看的么。又一顿折腾,我屈服了,安了mysql。可能有的同学会问,你为什么不架jabberd14或jabberd2呢?因为我遇到了更大
的麻烦。用ubuntu软件中心安装上以后,我参考了一下手册,我又傻眼了。手册
上说,要先建 jabber 这个用户和组。我知道,又有同学跳出来说了,这难么?不难。问题是,此时处在"用ubuntu软件中心安装上以后"这个时间点,我发现
jabber 这个用户和组已经建了。那应该是ubuntun软件中心的版本建的,那么,
接下来手册里的步骤,哪些已经完成,哪些没有完成呢?一步一步检查?我可能检查了20步,都完成了,一放松警惕,结果第21步软件中
心没自动给建好。所以,在jabberd*两个版本上,我花了一个小时,两个小时
(?),然后放弃了。如果你小的时候,有大人一边给你喂药,一边说"不苦",结果你吃下去苦得直咧
嘴;如果你修牙的时候,牙医说"不疼",结果整得你一身汗;如果你的高中老师
告诉你上了大学就好啦……以后你都不要相信他哪怕一句话。总之吧,后来我使用mysql,安装mysql-server, mysql-client, jdbc。然后
jabber服务器openfire就跑起来了。剩下的,还需要数据库的一些设置,登录口令和主机啦啥的,你如果会也不用我
罗嗦,你如果不会,我这一篇也写不下,如果只列上我的步骤,哪怕一小步你的
机器跟我的不一样,还特别把你引入歧途。所以,略。对了,得跑下面这条语句:
> cat openfire_mysql.sql | mysql openfire -u root -popenfire_mysql.sql这个东西,在我机器里是在
[/usr/share/openfire/resources/database]下面。参见
[http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/database.html]。4. 客户端连接
* with emacs-jabber
localhost:5222 ssl* jabber客户端 gajim用户名需要类似 young@young-laptop; localhost:52225. 外网连接这个时候,内网就可以用了。如果你在防火墙 (或者NAT,或者无线路由)的里
面,而你需要外网用户连进来,需要查到你的外网IP。可以这么查,用浏览器访问[http://www.showmyip.com/]。然后你需要设置防火墙 (或者NAT,或者无线路由),让从外网能够访问你的防火
墙某个端口,相当于对应访问内网你的jabber server的IP及端口。为啥说这么
麻烦呢,因为不同的防火墙在这时使用的名字不一样。比如我的,在"转发规则
->虚拟服务器"里设置。为了对用户友好,开发商起了这些"友好"的名字,结果
连专业人员也不知道那是什么了。用户?当然也不知道。以上设置完成以后,你可以告诉你要聊天的对象,让他把jabber客户端的服务器
设置为你的外网IP,还有端口……然后,你们就可以聊了。6. 其他我禁用了注册用户的功能,凡是要用的,手动添加。文字聊天,传文件,都行。
语音没试,我嗓子基本还是不能发声,所以没啥意义。还有,各种客户端里,还就是pc版的gtalk不行,它不能更改服务器的地址,只
能连到google。--------------------有的同学可能会问,你为啥不用QQ呢?其一,2007年12月,我在博客里提到 我永不使用QQ,"永"对现在而言,仍然是有
效的。其二,QQ是某个公司开发的产品,使用者没法选择这一服务而拒绝产品。如果你
使用电子邮件这一服务,有很多产品可以用。对网络中心提供的不爽,你还可以
用google的,对google不爽,你还可以用163的。你对QQ提供的不爽呢?其三,QQ的一些模式真的令我非常不爽,不仅2007年底事件,还经常让我想起许
多敏感词。比如吧,比如,我发放课件的时候,会向同学的信箱发送,而不是要求同学到我
的博客或网站下载,原因非常简单,要求别人如何如何,是一种*侵入式*的合作
方式。如果老板要求下属必须使用某款手机,不能要求下属去买一个,而只能为下属备
好免费的,还要问下属乐不乐意非工作时间带在身上,要不要公司为带这么沉个
东西付补偿款。老板不能因为员工也可以用这手机聊聊私喀,就理所当然地认为
有权利要求下属了。这让我想起李记者讲过的例子:为了避免侵版被告,公司老板要求员工自备操作
系统和所有开发工具。你怎么不要求产业工人自备车床呢。所以,各种旧的和新的原因吧,我仍然不使用QQ。很多同学问过我这个问题了,
你一个IT男为啥没有QQ呢。2007年12月那篇博客,我是这样写的:我将永不使用QQ。
我的MSN和邮箱:[email protected]
对给您带来的不便深感抱歉。
添麻烦了。有不少朋友问到原因。如果你不知道,麻烦google: QQ soff查对方IP可以使用netstat或其他QQ版本。以此纪念soff君。不认识soff,也基本
没用过他的作品,也不关心审判结果。弃用是因为感情上不再能接受QQ,不是技
术原因。转个故事,说明一下原因。古时候,阿跋斯哈里发王朝的第四代哈里发叫阿尔・马蒙。他有匹千里马。一
次,一个叫奥玛的商人路过巴格达,他看到阿尔・马蒙的马,羡慕不已,提出用
十个金币来换,但阿尔・马蒙说就是给一百个金币,他也不换。奥玛恼羞成怒,
决定用诡计把千里马骗到手。奥玛打探到阿尔・马蒙每天独自溜马的路线,选择了一个离城门最远,人迹罕至
的地方,乔装成病重的流浪汉,躺在路边。果然,善良的阿尔・马蒙看到
有人病倒路边,赶紧把他扶上千里马,打算带他进城治病。奥玛装作有气无力的
样子指了指地上的包袱,阿尔・马蒙把他的包袱拾起来,系在马背上。奥
玛又指了指远处的木棒,阿尔・马蒙以为这是流浪汉的木棒,忙转身去捡。
奥玛趁机夺过缰绳,纵马逃走。阿尔・马蒙追在后面追了很久,终于跑不动了。奥玛知道奸计得逞,便想奚落奚落
阿尔・马蒙。他勒住马,得意洋洋对阿尔・马蒙说:"你丢了千里马,连一
个铜子也没有得到,都是因为太慈悲了。你还有什么好说的?""马可以归你,但我有个要求," 阿尔・马蒙大声说,"别告诉别人你骗走千里马的方法。"奥玛哈哈大笑说:"原来哈里发也怕别人嘲笑!""不,"阿尔・马蒙喘着粗气说,"我是担心人们听说这个骗局后,会怀疑昏倒在路
边的都是骗子、强盗。说不定哪一天你我也会染疾,倒卧路边,那时谁来帮助我
们呢?"后来,两年前吧,与包师弟聊天QQ和gmail等事情。对话基本是这样的:你不用QQ,如果哪天gtalk也封了呢?那我们就用gmail,然后电话或短信通知邮件发了吧。如果gmail也封了呢?对话围绕着,如果A不能用了,那么用B吧,如果B也不能用了,那么用C吧……如果
Z也不能用了,我们要不要用QQ呢?一个人,你可以杀死他,但是,也不能令他屈从。屈从,以及生命,不能共存于
一个人的身体中。好在,除了QQ,我们不是还有别的么,比如 jabber server。--------------------
博客会手工同步到以下地址:[http://giftdotyoung.blogspot.com]
[http://blog.csdn.net/younggift]
[http://www.renren.com/268966623/profile#pblog]

去看李记者,天津印象

去看李记者,天津印象李记者现在天津工作。丹麦著名的制药公司(或者著名的丹麦制药公司?),NNIT。
NNIT以生产治疗糖尿病的药而闻名,老李同学正需要这个。lars说,李记者去对
地方了。不过,正如李记者其实不是记者,而是IBM什么技术方法的咨询师一样,
他的NNIT也不产药,而是产软件的。去天津看了他一趟。坐下吃了半天饭,我说:你瘦了啊。才注意到。这家伙已经由圆脸变成了方脸,
隐约有皱纹。他说:140斤了。这就跟我的份量不相上下了。不过他肚子尤在且大,刘典同学不必担心,你仍然不是最胖的。然后我们开始总结他变瘦的原因。三班倒,天津太热,天津空气不好。诸如此类
的。在这之前,李记者带我参观了意大利风格的小镇。没错,在天津,一个意大利风
格的小镇。也不知道像不像,反正我没去过意大利。李记者说,那个叫"花仙子"
的雕塑有几份复制品,摆在好几个地方。真的,这几个半裸女子有的互相还能看
到呢。去吃早餐的时候,他非常小资地带我去了星巴克。我非常小资地选择了坐在外面
木头地板上。然后他告诉服务员把遮阳伞打开,我惊叹:这东西原来是能打开的。
这可不是瞎扯,当时我确实没想到那东西居然还能打开,脑袋不够用。天津很
热,而且漫天大雾,雾气似乎完全不流动,就缠在你的每个毛孔旁边。你刚刚渗
出一点汗,就生生给你逼回去。CPU过热的感觉。在这样的雾里行走,觉得自己不是很清醒。像是刚散了瞳,世界非常明亮,而极
端不清晰。我看到完全不能转的摩天轮立在广场上,在海风里生着铁锈。它的后
面是满是青色玻璃的大厦从雾里一直插进云里。还有伪装成很古老的忘了名字的
桥,上面立着些金光闪闪的女神,每个人手里端着一样乐器。海河在桥下静静地
流,像这里的浓雾一样没有波澜。看呐。一个家伙在海河里游泳。我赶紧把相机拽出来,这会工夫,他又改成了安
逸的仰泳姿势。旧的波纹在他周围慢慢散开,再也没有新的。欧洲小镇里来来回回的,是来自西安的河南的各地的游客。导游拿着个大功率的
喇叭,"一九几几年……"我说:就这点不像欧洲啊。他们的导游似乎不带迈克的。李记者问:扯嗓子喊么?我说:不。他们人少,能听见。我俩大笑。我说:另外,这会吵到别人吧。我的声音非常小,不是因为修养,是因为声带还在失声。所以,大部分时间都是
李记者在说,我只是倾听。其实,这也正是他需要我做的吧。偶尔,我讲起"有
一个新故事,是这样的……"。他说,"哈哈,你真的老了。这个故事你讲过啦。"是吧,我们就是这样开始衰老的。衰老从来不是渐变的,而是突然产生的。你生
了一场病,然后很快就老迈了。我老到开始重复自己说过的话了,而且还不记得。我拖着行李箱,他背着有NNIT标志的书包。我们走在天津的街道上--为了伪装成
欧洲小镇的效果,街上的铺路石特意很不平的样子,我的行李箱一直
gegelengleng响着。不过我猜,那些铺路石并没有看上去和应该的那么深。我们这样走了很有一会儿,因为小镇在执行欧洲坐息时间。饭店都要11点以后才
能营业。除了游客导游,还有维修维护和清洁工走来走去。我和李记者坐在星巴
克的伞下,观察他们。非常非常热,太阳很亮,我不由得眯着眼睛。去厕所的时候才知道,原来星巴克里面非常地凉快,空调大开。我原以为屋里要
比外面更难忍呢。但是我们仍然坐在外面,这样才够小资。事实上,有一些我还是没有告诉你,而只是选择了小资的那部分侃侃而谈。比如,我脱了鞋,把脚搭在对面的椅子上。虽然只有我们两个小资的顾客坐在外
面,也不算雅观。而且,我换上了跨栏背心--或者你也可以理解成男式吊带或大
砍肩式样的。再比如,我们离开饭店去车站,坐的是小三轮摩托。我没有想到天津这样的城
市,这种交通工具居然还合法大行其道。这确实有点欧洲精神,不过一点也不小
资。再比如,在小三轮摩托上,李记者似乎看着窗外,其实已经开始点着头睡过去了。
他在和我见面之前,刚刚上完夜班,然后是1个小时的车程赶来。再比如。我们在车站的广场握别,互道珍重。我转身走出一段路,回过头,放下
行李,取出相机,开始拍李记者的背影。他背着NNIT的包,逐渐深入到雾里去。
大雾依旧。近处远处的高楼在雾里沉浮着,这个城市才刚刚醒来。而李记者,要
回去睡觉了。在火车上,我发送短信给他。当我到达长春,他的短信回复了。深夜,我们都出
现在网络上。我们说:相聚时短,各自珍重。博客会手工同步到以下地址:[http://giftdotyoung.blogspot.com]
[http://blog.csdn.net/younggift]
[http://www.renren.com/268966623/profile#pblog]

我在课堂上为什么要展示编码的过程,而不止是结果

我在课堂上为什么要展示编码的过程,而不止是结果我在上程序设计课程的时候,会在课堂上当场编程。而我见到的大多数老师喜欢
事先备好课,用PPT或WORD以更大的字体展示程序内容。为了能够更好地展示现场编程,我试过一些办法:尽可能缩小班级人数、不用投
影仪而是用机房的广播系统。这确实带来一些麻烦,更不用说,现场编程比事先
备课更容易出错,挂在黑板上。那么我坚持现场编程序的原因是什么呢?1. 过程我要向同学演示代码由无到有的过程。事先备好课确实有很多优点,但是当我是同学的时候,我总感觉是在看场魔术。
老师拿来个帽子,展示一番,然后,突然从里面掏出只兔子来,有毛能跑的。如
果我只是观众,哈哈,很逗。但是如果我是学魔术的同学,我就会特别想看到慢
动作地重放--从空帽子到兔子的过程。而这个过程,如果事先备好课,通常就只是打开工程,然后编译,运行,出结果
了。结果就是老师说的那个,但这一点也不令人意外。我想看到代码修改以后还能跑么?最好是从什么都没有,开始创建一个工程,然
后代码逐渐增多。不然,除了神奇,我什么也没有学到。作为同学我这样想,我私下猜测,同学们也会这样想吧。所以,我想展示给同学
代码的过程,而不仅仅是代码本身。代码本身能学习和分析的东西确实很多。我们对着早就墨迹干涸的红楼梦也能分
析出比它本身厚得多的著作来。但是,如果你站在曹雪芹的身后,越过他的肩膀
看他把红楼梦写出来,那样的话,收获该是多少呢?你能看到他删除掉了哪几个
人物,哪几个人物原本不是这样的,她们 (想想真似乎没有几个男子,所以不妨
直接用女字旁了) 的命运、性格原来是那样,历经了几次修改……但是我们都没有那样的机会。所以,"披阅十载,增删五次",作者不得不感叹,
这样好的过程你们都没有看到。我们要看画家作画的过程,看不到甚至要用X光去还原底下一层层都是些什么。
我们要看鲁迅或韩寒的手稿,最好是不清楚的勾勾抹抹的那种,才能了解当时当
事,都发生了些什么。代码,也是一样的。如果我们跟踪Linux核心的所有历史版本,而不仅是分析最
近的,会得到更多的东西--为什么某个特性那么迟才添加进去;最初的有力地构
成整个系统是,是哪几个要素?同学们看到那一大砣代码时想问的问题:你咋把它整出来的。过程说:呶,先这样,再这样。如果只给最后的结果,那就是:你猜呢。2. 出错我想让同学看到 老师也会出错,挟带的私货,更重要的是学习老师解决错误的过
程。bug人人会造,代码能跑起来靠的一个重要功夫就是把各种bug杀掉。同学们最初
遇到bug的时候容易感到惊慌失措,并倾向于自我否定,"怎么会这样呢?"然后
就想知道,如何从"这样"恢复,最终把那一砣代码整出来并跑起来。从bug中恢复过来,除了归类总结,文字材料以外,很重要的是让同学看到:呶,就
是这样。没看过血的,理论学得再好,也当不了临床医生。我甚至特意造出bug,大家一起傻眼,调吧。然后,我们一起看看调试bug的过程。也演出了编程习惯。比如一对大括号,要先写前面后面,再添中间。这些,亲眼
所见与纸上看来,对初学者,终究有所不同。说到这里插一个话题。颇有些研究生同学喜欢看视频学习的,我和几位学长都认
为非常不可取。理由非常多。其中一个是视频太慢,还有一个是视频往往太肤
浅。还有一个是视频可能会对初学者造成一个困扰--"为啥老师那么整能行,我同
样的操作,现象就不一样了呢?之前,我只有一步有一小点不同吧。版本不同,
那是什么?"之所以课堂上的展示不必讨论上述话题,是因为无论展示编码过程,还是只展示
结果,然后分析,视频的弊端都是存在的。3. 还是过程稍微大一点的代码,都不是一次成型的。尤其,一定不是从头往后写的。小学作文老师教我们,要有大纲。写代码也是的。可能,我们一个键也没有敲,
但是此时已胸有沟壑。这个时候老师得把这些沟壑都画图画图交代一翻,指点
好,这里我要写啥,这里我要写啥。此外,为了保持一直可以编译、测试,而有时代码写作要持续几天的时间,中间
不可能连个厕所也不去。有时代码非常长,超出了初学者直接写作的能力。这个
时候,我们会一点点写--重要的是,在这一点点写的时候,始终保持可编译和测
试。所以,有时中间结果与最终的差别非常大。代码可能先多起来,然后又慢慢
删除掉一些,后来成了最终的样子。而不是像有的同学想的,一直由少到多。我的一个比喻。如果你体力不济,还想游过一个大湖,我们要做的不是横渡,而
是沿着湖边,不停地隔一会上岸歇会。我们确实更慢了,更是安全更重要。这样,最终的代码 (到达对岸)与中间的代码的差别会非常大。有时,我们很难
一下子就想像到中间发生过些什么。你能从残局猜到那些死掉的车马炮都怎么牺牲地么?我们用过程向同学们展示这
些。4.保证向同学们保证,你看代码确实是活人写的,因此你也能写出来。身边活人的榜
样,比书上印好的铅字更有说服力。想当年我跟韩老师去北京学习,他买了个魔球 (能变成棒子还能变成三角什么的)。
没见过的同学,你可以把它当成三维的七巧板。韩老师很快拼了好几个形状。
拼,也正是看图纸上的最终结果,把过程猜出来。后来到球形的时候,他放弃
了,说这个不行。然后轮到我玩。他看我拼出球来,让我拆了。拿过去没两分钟
就把球拼出来了。所以说,身边活人的榜样,比书上印好的铅字更有说服力。我用课堂上编码的过
程向同学们展示:活人编的啊,真是活人编的。当然,让同学展示,比让老师展示的效果更好。不过同样,一旦同学们把这位同
学当成与他们不一样的人,那就失效了。这个时候,我真的也不知道该如何告诉
同学们:你真的也行。装睡的人,你是怎么也叫不醒的。5. 例子我见过周老师讲JSP的时候,就在课堂上现搭环境,现写代码。见过林老师讲
win32api编程的时候,现写代码。6. 未来的工作考虑过做视频发布,但是我们的视频站点目前的清晰度,是为了看大片或小片准
备的,看代码,似乎清晰度还不够。再就是p2p上传了吧。

怀念,我最初的学生

怀念,我最初的学生正下雨。约好一会儿一起去吃饭,和大E、建一、瀚哥三位同学,他们就要毕业
了。想一想,这也让人伤心不已。最初与他们三位相识,是在我主讲的C++程序设计语言课上。也是在那门课上认识
了关同学。他们后来都做了我的学生,没有师生名义却有师生情份的。在这样的
课程上相识,现在想来,也是具有预言意味的。他们几位,在以后所有的项目
中,都承担了核心和最困难的部分。甚至,因此少有看得见的收获。C++,像是宿命一样跟随我们。事情上,相隔六七年,这门课程我也只讲了这一次。那一轮以后,就换成另一位
老师。我把我所有的课件都交给她了。当时有不少 (所有?)同事提到,这并非必
要,课件是属于个人的知识成果。很多理由中的一个,我如此地爱着C++,比这门
课程本身还重要,甚至比我对我的学生的感情还重要。我爱着我的学生,正是因
为他们都像C++一样,而并非相反。所以,即使换了人讲,我也希望我所看到的
C++的精神能够得到延伸。当时那位老师说,"美国人确实挺先进的,他们现在都用STL。"我说,"我有小半
个学期的内容就是STL。"我非常欣慰,这部分内容看来不会换掉。说到这里,题
外话,我们也一直在使用最先进的工具,算是敏感地发现新的有前途的技术。我的学生们就要毕业了,希望他们能一直秉承着C++的精神,始终成为核心,始终
承担最困难的部分。至少看得见的收获,既然大家都看得见,我们不妨不去看它。C++,我们用这样的工具,一起征战了诸多领域,也打了很多败仗。如果有一天我
被钉十字架上了,我仍愿意承认他们是我最初的弟子。我们是一起成长起来的。几年来,骨子里都渗透着一些彼此的性格特征。而且根
深蒂固。C++也一直在成长,也许有一天不小心就长成了别的什么。但是,有些东
西会就此固定不变,停留在你人生的某个阶段。同时我庆幸和感到光荣的,他们都没有成为我,而是成为与我不同的人。除了我们所说的"行政命令"以外,在工程上,我们讨论所有的可能,而无论那是
谁提出的。所谓"行政命令"就是,我们打算这么干了,不再讨论了,并且万一错
了就重头再来。我看到他们从最初的接受我全盘的想法,逐渐成熟,在技术上屡屡试图反对我的
方案。我心中窃喜多次。我对建一说过:我不同意你的方案,但是按你的方案去做吧。因为在项目中,你
做得爽,甚至比项目本身还要重要。技术如此,更何况是在人生的各种选择上。最终,大家都会选择各种不同的路,
成长为完全不同的人。如果所有的学生都和导师的想法一样,这个世界就要完蛋了吧。其实,这是一种多么矛盾的心理。一方面,按自己的经验和判断,似乎这个方案
更好;另一方面,如果学生们完全按我的方案,那他们还能有什么前途可言--更
不用说,他们小野兽一样呲着牙死死护着自己的领域。一起成长的六年,我看到你们的成长。当初小雏鸟一样,我还记得你们尝试那些
小程序,虽然幼稚,但是已经清晰露出的锋茫。现在,终于,一个个要展翅高飞了。我想挨个揉揉你们的小脑袋瓜。去吧,也带着我的理想。很多父母或者老师都愿
意说,或者是这样做的,认为你们是他们全部的希望。我不愿意这样想,因为我
也有我自己的理想。但是终究,我看到你们的理想也飞起,我的理想正黯淡下去。2008年底,我写了《北方之城》,主角的名字是建一。它还有一个副标题,在发
给你们每个人和编辑的时候都已删除。那个副标题是:告别理想,拒绝飞翔。希望你们都努力去飞,别忘了自己的理想。偶尔,也能捎带上我的,我的那些最
初的纯真的理想。我爱你们,更爱我的理想。愿这些理想在你们身上延伸--以各种不同的方式。