Friday, September 12, 2008
Google出世(演义)
譬如用户输入关键词"奥运会",搜索引擎的任务是查找与奥运会相关的网页。如果恰好有一篇网页,内容无他,"奥运会,奥运会,。。。",连说100遍。早 期的搜索引擎肯定把这个网页放在结果的首页,说不定还置顶,因为, 1. 网页内容中,"奥运会"这个关键词出现的频率非常高,2. 没有出现与奥运会不相干的内容。
早期搜索引擎的问题很明显,但是如何解决,却是仁者见仁智者见智。
1996年,刚刚入学Stanford计算机系的Larry Page和Sergey Brin哥俩儿觉得,提高搜索引擎的准确性,或许可以从网页与网页之间的相互链接入手。譬如,网页A中提到奥运会时,给了一个链接,指向网页甲,那么网页 甲的内容很可能与奥运会相关。如果不仅网页A有这样的链接,而且网页B,C,D等等,都有类似的链接,那么网页甲的内容与奥运会相关的可能性就极高。
批评者说,这不是三人成虎吗?Larry心里也没谱,就跑去问他的导师,Terry Winograd。
导师外形很像爱因斯坦,想了一想,说,"先把Stanford校园网内所有网页收集下来,验证一下你们的想法。然后扩大到更大范围,再验证一下。如果验证 的结果不错,就把全世界互联网的所有网页,统统收集下来,做一个搜索引擎,上线,让全世界的人用,让全世界的人都来验证你们的猜想。"
两年后,1998年,Google上线了,三人成虎的猜想被实践证明是行之有效的。
Terry导师大手一挥,"把全世界互联网的所有网页,统统收集下来",可把Larry和Sergey哥俩儿忙坏了。互联网上有多少网页,统统收集下来, 需要占用多少硬盘空间?Larry和Sergey当时是博士班一年级学生,囊中羞涩,买不起那么多设备,没办法,开始四处讨钱。
托了七大姑八大姨,拐弯抹角找到了一个大款,名叫Andy Bechtolsheim。此公早年在CMU拿了EE的硕士后,跑到Stanford读CS/EE博士。没来得及拿到博士学位,就伙同Scott McNealy和Vinod Khosla,下海开公司去了,这个公司就是大名鼎鼎的SUN Microsystems。 Scott McNealy任SUN的CEO长达20多年,而Andy Bechtolsheim功成身退,跳出SUN自己开了一个小公司,后来这个小公司卖给了Cisco。
坊间传说,Larry和Sergey拜访Andy的时候,Andy正在电话上。冗长的电话,Larry和Sergey两个小伙子血气方刚,哪里耐得住这份性子,抬腿告辞。因为是朋友介绍,Andy有点过不去,就追到门口。问,"二位上门,有何需求?"
Larry和Sergey铁青着脸,说,"也没什么大事,就是想找点钱,做一个大规模文件系统。"
Andy问,"多大规模呢?存储什么数据?"
Larry和Sergey,"打算把互联网上所有网页都下载,然后建一个搜索索引。"
Andy,"把互联网上所有网页统统下载?!需要多大空间?几个Giga不行吧,几个Tera也不行吧,几个Peta,几个Zetta?。。。嗯,我看几个Googol也许才能撑得住。知道Googol吗?就是10的100次方,就是一个1后面拖100个0!"
Larry和Sergey,"是的,我们的确就是打算处理海量数据。"
Andy,"你们打算怎么做?买个EMC?那玩意儿很贵的哟,我可没那么多钱让你们烧。"
Larry和Sergey,"我们打算自己动手,用一堆PC做一个分布式集群。"
Andy,"PC?死机了怎么办?干嘛不用工作站,干嘛不用NFS?"
Larry和Sergey,"工作站比PC贵太多,NFS的不是很切合我们的需要。。。"
Andy挤出一点笑容,"好吧,小伙子们,给朋友一个面子,而且年轻人探险也是值得鼓励的。给你们10万吧,省着点花啊!"
Andy掏出支票本,一边签名一边问,"你们的公司叫什么?"
Larry和Sergey面面相觑,那时候他们还没来得及给公司取名。"要不就叫Googol吧?","Googol不太好拼写,要不改一改,叫Google吧。" Google这个名字从此诞生。
Monday, September 1, 2008
如何保持SSH链接不因IDLE时间过长而中断?
ClientAliveInterval 602. 重启SSH服务:
/sbin/service sshd reload详细说明如下:
Using an OpenSSH server's ClientAliveInterval, it is possible for the ssh server to send periodic "keep alive" messages to the ssh client, keeping the connection open indefinitely. This is useful when a firewall or other packet filtering device drops idle connections after a certain period of time. Note that this is different from the KeepAlive directive in ssh_config.
From the sshd_config manpage:
ClientAliveInterval
Sets a timeout interval in seconds after which if no data has
been received from the client, sshd will send a message through
the encrypted channel to request a response from the client. The
default is 0, indicating that these messages will not be sent to
the client. This option applies to protocol version 2 only.
Example (send "keep alive" messages every 5 minutes) on Red Hat Linux:
1. Add ClientAliveInterval 300 to /etc/ssh/sshd_config
2. Reload the sshd server configuration with /sbin/service sshd reload
Note: you may want to configure the ClientAliveCountMax value in sshd_config to set the number of times that "keep alive" messages are sent. If ClientAliveCountMax number of "keep alive" messages are not acknowledged by the ssh client, the connection is terminated by the ssh server. The default value of 3 should be sufficient for most users.
Friday, August 29, 2008
傅立叶变换的意义与卷积
傅立叶变换是数字信号处理领域一种很重要的算法。但是该算法到底有何意义呢?
要知道傅立叶变换算法的意义,首先要了解傅立叶原理的意义。傅立叶原理表明:任何连续测量的时序或信号,都可以表示为不同频率的正弦波信号的无限叠加。而根据该原理创立的傅立叶变换算法利用直接测量到的原始信号,以累加方式来计算该信号中不同正弦波信号的频率、振幅和相位。
和傅立叶变换算法对应的是反傅立叶变换算法。该反变换从本质上说也是一种累加处理,这样就可以将单独改变的正弦波信号转换成一个信号。
因此,可以说,傅立叶变换将原来难以处理的时域信号转换成了易于分析的频域信号(信号的频谱),可以利用一些工具对这些频域信号进行处理、加工。最后还可以利用傅立叶反变换将这些频域信号转换成时域信号。
从现代数学的眼光来看,傅里叶变换是一种特殊的积分变换。它能将满足一定条件的某个函数表示成正弦基函数的线性组合或者积分。在不同的研究领域,傅里叶变换具有多种不同的变体形式,如连续傅里叶变换和离散傅里叶变换。
傅立叶变换属于调和分析的内容。"分析"二字,可以解释为深入的研究。从字面上来 看,"分析"二字,实际就是"条分缕析"而已。它通过对函数的"条分缕析"来达到对复杂函数的深入理解和研究。从哲学上看,"分析主义"和"还原主义", 就是要通过对事物内部适当的分析达到增进对其本质理解的目的。比如近代原子论试图把世界上所有物质的本源分析为原子,而原子不过数百种而已,相对物质世界 的无限丰富,这种分析和分类无疑为认识事物的各种性质提供了很好的手段。
在数学领域,也是这样,尽管最初傅立叶分析是作为热过程的解析分析的工具,但是其 思想方法仍然具有典型的还原论和分析主义的特征。"任意"的函数通过一定的分解,都能够表示为正弦函数的线性组合的形式,而正弦函数在物理上是被充分研究 而相对简单的函数类,这一想法跟化学上的原子论想法何其相似!奇妙的是,现代数学发现傅立叶变换具有非常好的性质,使得它如此的好用和有用,让人不得不感 叹造物的神奇:
1. 傅立叶变换是线性算子,若赋予适当的范数,它还是酉算子;
2. 傅立叶变换的逆变换容易求出,而且形式与正变换非常类似;
3. 正弦基函数是微分运算的本征函数,从而使得线性微分方程的求解可以转化为常系数的代数方程的求解.在线性时不变的物理系统内,频率是个不变的性质,从而系统对于复杂激励的响应可以通过组合其对不同频率正弦信号的响应来获取;
4. 著名的卷积定理指出:傅立叶变换可以化复杂的卷积运算为简单的乘积运算,从而提供了计算卷积的一种简单手段;
5. 离散形式的傅立叶变换可以利用数字计算机快速的算出(其算法称为快速傅立叶变换算法(FFT))。
正是由于上述的良好性质,傅里叶变换在物理学、数论、组合数学、信号处理、概率、统计、密码学、声学、光学等领域都有着广泛的应用。
在图象处理上的应用
傅立叶变换是图像处理中最常用的变换。它是进行图像处理和分析的有力工具。
傅立叶变换的数学定义
传统的傅立叶变换是一种纯频域分析,它可将一般函数f(x)表示为一簇标准函数的加权求和,而权函数亦即f的傅立叶变换。设f是R上的实值或复值函数,则f为一能量有限的模拟信号,具体定义如下:
2、图像傅立叶变换的物理意义
图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。 如:大面积的沙漠在图像中是一片灰度变化缓慢的区域,对应的频率值很低;而对于地表属性变换剧烈的边缘区域在图像中是一片灰度变化剧烈的区域,对应的频率 值较高。傅立叶变换在实际中有非常明显的物理意义,设f是一个能量有限的模拟信号,则其傅立叶变换就表示f的谱。从纯粹的数学意义上看,傅立叶变换是将一 个函数转换为一系列周期函数来处理的。从物理效果看,傅立叶变换是将图像从空间域转换到频率域,其逆变换是将图像从频率域转换到空间域。换句话说,傅立叶 变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数,傅立叶逆变换是将图像的频率分布函数变换为灰度分布函数。
(二) 卷积的意义
参见剑桥的课件,写得很好。
傅立叶级数与傅立叶变换之间的关系
Sunday, July 27, 2008
心目中的编程高手







他一手做出了Turbo Pascal,也是Delphi, J++(尤其是WFC),C#和.NET的主要作者。这些作品的名字足以为他立传。作为一个程序员,我在这样的大师面前实在无语。生子当如Anders的 说。李维的《Borland传奇》里已详细讲述了Anders的传奇故事,我就不用费舌了:http://java.mblogger.cn/iexploiter/posts/1505.aspx。Artima上有Anders谈C#的系列访谈。MSDN上有一段Anders导游的录像。有兴趣可以去看看牛人的丰采。
最近10年计算机专业图书中的50强
光这62位作者阵营就非常强大,我们熟悉的就有:
- Francesco Balena(《Microsoft.NET框架程序设计——Visual Basic.NET语言描述》作者)
- Bert Bates(《Head First Design Patterns》作者)
- Joshua Bloch(《Effective Java》作者)
- Kalen Delaney(《Microsoft SQL Server 2000技术内幕》作者)
- Stephen C. Dewhurst(《C++ Gotchas》作者)
- Bill Evjen(《Visual Basic.NET宝典》作者)
- Dino Esposito(《构建Web解决方案——应用ASP.NET和ADO.NET、Microsoft .NET XML程序设计》作者)
- Andy Hunt(Pragmatic Programmer系列图书作者)
- Gary McGraw(《Exploiting Software: How to Break Code》作者)
- Steve McConnell(《Code Complete》作者)
- Christian Nagel(《Enterprise Services with the .NET Framework》作者)
- Arnold Robbins(《Linux程序设计》作者)
- Tim O'Reilly(O'Reilly媒体集团创始人)
- Chris Sells(《Windows Forms程序设计、.NET本质论》作者)
- Stephen Walther(《设计模式——可复用面向对象软件的基础》作者)
- John Vlissides(《ASP.NET揭秘》作者)
软件工程类
按照现代计算机技术的发展,《人月神话》应该称得骨灰级图书了,计算机图书能够流行30年,Frederick Brooks确实让人刮目相看。这种现象往往出现在软件工程类和算法类的图书上,这些理论和技术往往经久不衰。比如:
- 《设计模式:可复用面向对象软件的基础》1994年出版(多位大师创作)
- 《人件》1987年出版(Tom DeMarco、Timothy Lister)
- 《企业应用架构模式》(Martin Fowler)
- 《重构——改善既有代码的设计》(Martin Fowler)
- 《解析极限编程》(Kent Beck)
- 《UML精粹:标准对象建模语言简明教程》(Martin Fowler)
Robert C. Martin的《敏捷软件开发:原则、模式与实践》或者是其他?
C/C++类
C语言的设计者Brian W. Kernighan的《C程序设计语言》确实经典,超过C++之父Bjarne Stroustrup的《C++程序设计语言》进入名单榜中。
此外,Scott Meyers的《Effective C++》众望所归,他的《More Effective C++》、《Effective STL》也同样精彩。
Stan Lippman的《C++ Primer》不在榜单,有点可惜。
Java类
不 知道什么原因,Java类图书的排名比较靠后,《Head First Java》是一本不错的教材,不过国内好像还未引进,《Java 2核心技术 卷I:基础知识》已经出第7版了,可见受欢迎的程度。Sun的Joshua Bloch在《Effective Java》采用Scott Meyers的风格,使本书成为真正的Effective Java Book。
不过《Java编程思想》、《J2EE核心模式》、《Contributing to Eclipse》、《Expert One-on-One J2EE Development without EJB》落榜有点意外。
Windows/.NET类
Charles Petzold的《Windows程序设计》是尽人皆知的Win32 API编程经典,也称为“Petzold Book”。由Anders Hejlsberg来写《C#编程语言详解 》,谁说不是经典?不过《ADO.NET实用指南》上榜有点出乎我的意料,为什么不是Jeffrey Richter的《Microsoft .NET框架程序设计》?
Linux/Unix类
这类只有一本《UNIX环境高级编程》,漏掉了《UNIX 编程艺术》是否可惜?
Web开发类
有3本书上榜,Perl之父Larry Wall的《Perl语言编程》是经典的教程,《网站重构》上榜在情理之中,Jeffrey Zeldman一直走在Web标准制定的最前沿。
ASP.NET Page Framework负责人Nikhil Kothari的《ASP.NET服务器控件与组件开发》讲解ASP.NET模式非常清晰,不过,如果是ASP.NET入门的话,我倒是推荐另外一本——《ASP.NET揭秘》。
还有没有漏掉什么啦?《JavaScript权威指南》是不是也很好?
网络通讯类
这类图书上榜比较多,TCP/IP如此的重要,《TCP/IP详解 卷I:协议》和《TCP/IP路由技术(第一卷)》同时上榜。其他的还有《Internet路由结构》、《计算机网络(第四版)》、《DNS与BIND》
数据库类
数据库类评选结果不太好评点,《Transact-SQL权威指南》是一本标准的T-SQL教材,进一步实践,还是建议看邹建最新出版的中文版《SQL Server 2000 开发与管理应用实例》。
其 他上榜的都没有中文版:《A First Look at SQL Server 2005 for Developers》(FirstLook系列过时太快,基本上没有引进)、《Expert Oracle, Signature Edition (One-on-One)》(2005年的新书,作者Thomas Kyte是Oracle的VP)、《Joe Celko's SQL for Smarties : Advanced SQL Programming》(作者Joe Celko是ANSI SQL标准委员会成员)。
安全类
网络社会没有比安全更重要的了,这类图书上榜就有5本,分别是: 《编写安全的代码》、《黑客大曝光》、《信息安全工程》、《网络信息安全的真相》、《应用密码学》。 后2本都是国际公认密码和信息安全专家Bruce Schneier的大作。
算法和代码类
提到算法,没有人不想到Donald E. Knuth的《计算机程序设计艺术》,据说Bill Gates曾放言,做对该书所有习题就能到微软来报到上班,可见此书探讨算法的深度。相比Donald的巨著,《算法导论》更适合做为算法教材。
《代码大全》上榜在预料之中,这本书曾经有过中文版,不过现在已经绝版了,有点可惜。
综合类
不 好归类的都叫综合类吧,《程序员修炼之道》书名翻译不太恰当,《Pragmatic Programmer》代表注重实效的程序员,程序员如何注重实效?全书就围绕这个话题在谈。不过,因为这本书出版时间较早(1999年),我更愿意看《Joel说软件》,这种Blog的写作风格更加通俗易懂。
《编程珠玑》和《程序设计实践》是2本讲解编程技巧的图书,如果说软件是工艺的话,你对这门手艺掌握的如何了?
Merrill R. Chapman作为老资格的程序员、销售主管,在《IT大败局》中以事件亲历的方式来剖析Ashton-Tate等公司的失败案例的时候显得特别具有说服力。前车之鉴、后车之师,何必自己花钱买教训呢?
综合类还有很多好书,比如,Gerald M.Weinberg的《你的灯亮着吗?》、David Kushner的《DOOM启世录》都值得一读。国内的读者还不应该放过李维的《Borland传奇》、蔡学镛的《爪哇夜未眠》 。
其他一些上榜图书没有中文版,不太好点评,分别是:
- 《Microsoft SharePoint: Building Office 2003 Solutions》
- 《Group Policy, Profiles, and IntelliMirror for Windows 2003, Windows XP, and Windows 2000》
- 《Don't Make Me Think》
- 《The Design of Everyday Things》
- 《The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography》
- 《Mac OS X: The Missing Manual, Panther Edition》
- 《The Elements of Style, 4th Edition》
- 《Godel, Escher, Bach: An Eternal Golden Braid》
Thursday, July 24, 2008
Enable Math Rendering in MediaWiki
2. Install texlive-latex
3. Download and install AMS-latex:
ftp://ftp.ams.org/pub/tex/amslatex.zip3. Install texvc (/wiki/math/README)
ftp://ftp.ams.org/pub/tex/amsrefs/amsrefs-tds.zip
4. edit LocalSettings.php:
$wgMathPath = "../images/math";
$wgMathDirectory = "{$IP}/images/math";
$wgTmpDirectory = "{$IP}/images/tmp";
$wgUseTeX = true;