Skip to content

{ Monthly Archives } 七月 2007

轻量级 Web 服务器

        虽然轻量级 Web 服务器有很多共同之处,但是各有各的不同。大多数轻量级 Web 服务器是用 C 编写的,但是实践证明,有些其他实现语言也可以成功地用于实现服务器,这些语言包括 Erlang、Java、Lisp、Lua、Perl、Python 和 Tcl。 由于很多特定的原因,可能会要求选用某种 “不常见” 的语言: 教学:使用轻量级 Web 服务器来制定一个重要、但是并不太大的目标。这是获得使用某种语言的经验的好方法。 虽然用 C 编写的轻量级 Web 服务器大小为 10-50 KB,更高级的语言有 100 KB 到数 MB 的运行时,但整个 Web 服务器的源文件可能只占几千个字节。这种 Web 服务器占用的空间很小,因此比 Apache 更易于与技术伙伴共享。 更高级的语言可以使实验更吸引人 —— 例如,添加一个新的 HTTP/1.1 特性可能只需几行源代码。这些轻量级服务器是非常方便的实验材料。 将 HTTP 服务器添加到已有的、用高级语言编写的应用程序中只需增加几行源代码。 Athana 可以作为这些主题的例子。它是用 Python 编写的 Web 服务器。它支持 HTTP 多部分(上传)、会话、 cookie 等。从 0.2.1 版开始,Athana [...]

转:征西将军朱广沪传

        朱广沪字光负,吴郡沪人也。诞于新华元年九月。沪诞时,有群豕入其门户,驱而不去。既诞,室满异香,有五色毫光降于庭,群豕忽而不见。其父甚异焉,因事起名曰:广沪,即喻光户也。 沪少时顽鲁,宗族莫知。不甚乐读书,好美服、尤喜逐疯犬,以此为乐,故世人未之奇也。汝南许子将,世名知人,先言后验,莫有不中者,人皆服之。尝过吴郡,见沪而异之,曰:“国足祚尽,衰及三世,非命世之才不能济也。能忍辱当之者,其在君乎?”沪亦奇之,因问曰:“我何如人也?”子将不答。固问之,曰:“子治队之能沉,乱队之奸熊。”沪抚掌大笑。 及长,以善蹴鞠闻名乡里,吴郡太守辟为骑督。改革五年,因连下数城,擢为郎中令,稍迁羽林军破蛋中郎将。 三表三年,拜偏将军,令督健力宝虎步营,率部曲远征东夷巴西。征战五年,数有战功,威震海外。及王俊生登基,欲建功业。闻沪名,语于左右曰:“何期大贤流于海外耶?”。遂召沪归,授军师祭酒,领国奥行军司马。时胡将霍顿为大都督,沪尽心辅之,亦有功勋。

转:神六有多热?

据报道,神舟六号飞船在距地面343公里的圆形轨道飞行。回忆一下中学地理,这个位置处于地球大气层中的热层(或电离层),温度大概在1000摄氏度以上。1000多度,大部分的金属都将融化。那么飞船采用什么技术来耐如此高温呢? 上大学时,有幸旁听了黄吉虎教授几堂《航天技术概论》。这个刁钻问题俟一扔出,整个课堂一片寂静,无人应答。 答案是飞船在那里并不需要防高温,飞船上的防热材料主要是用于对付返回大气层时气体摩擦产生的高温。大家惊诧之时,黄教授徐徐启发。 首先,温度是什么呢?这个概念倒是很熟悉,温度表示物体的冷热程度,也是物体内部分子热运动平均动能的标志。 其次,飞船所处在的空间位置是什么环境呢?300公里以上的高空,气体密度已经极低,大概是地面空气密度的千亿分之一。因为那里近于真空,气体分子可以自由的飞来飞去,所以导致平均运动速度较高,也就是温度较高了。 最后,热量传导的方式是什么呢?气体分子撞击在飞船外壳上,引起飞船外壳的分子震动加剧,这样就可以让飞船的温度也升高了。可是那里的分子实在太少,并没有足够的能量能够使飞船也升温。我们可以这么理解,整个区域温度很高,飞船到了哪里,哪里就迅速降温。神六虽在1000度高温的空间中,其实并不热。 大家恍然大悟,都是简单的知识,学艺不精导致如此盲点。黄教授还提示,那些看起来很普通平常的物理量,到了一些极限状态诸如真空,超低温等等,就会让人另眼相看,透彻的理解他们并不容易。 在神六顺利回收之际,回忆起了那堂受益匪浅的课程,回忆起了这位令人尊敬的老师,并将温度的知识与大家分享。

转:快速平方根算法

作者:Blackbird 文章出处:友善之臂旅店 在3D图形编程中,经常要求平方根或平方根的倒数,例如:求向量的长度或将向量归一化。C数学函数库中的sqrt具有理想的精度,但对于3D游戏程式来说速度太慢。我们希望能够在保证足够的精度的同时,进一步提高速度。 Carmack在QUAKE3中使用了下面的算法,它第一次在公众场合出现的时候,几乎震住了所有的人。据说该算法其实并不是Carmack发明的,它真正的作者是Nvidia的Gary Tarolli(未经证实)。 // // 计算参数x的平方根的倒数 // float InvSqrt (float x) { float xhalf = 0.5f*x; int i = *(int*)&x; i = 0x5f3759df – (i >> 1); // 计算第一个近似根 x = *(float*)&i; x = x*(1.5f – xhalf*x*x); // 牛顿迭代法 return x; } 该算法的本质其实就是牛顿迭代法(Newton-Raphson Method,简称NR),而NR的基础则是泰勒级数(Taylor Series)。NR是一种求方程的近似根的方法。首先要估计一个与方程的根比较靠近的数值,然后根据公式推算下一个更加近似的数值,不断重复直到可以获得满意的精度。其公式如下: 函数:y=f(x) 其一阶导数为:y’=f’(x) 则方程:f(x)=0 的第n+1个近似根为 x[n+1] = x[n] – [...]

转:Linux服务器整体性能监控

Linux服务器性能监测是很重要的工作,服务器运行应该提供最有效的系统性能。当服务器系统性能突然低于平均应有的情况,问题可能来自在执行的进程、内存的使用率、磁盘的性能、网络流量和CPU 的压力。在预算短缺的今天,理解如何优化系统性能比以往任何时候都重要。要实现它的前提是,你必须充分了解自己的计算机和网络,从而找到真正的瓶颈所在。本文提供一些基础的工具来辨别和处理一些性能问题。使用的Linux 发行版本是Red Hat Enterprise Linux 4,工作过程是:首先查看整个系统的状态,然后是检查特定的子系统。Linux服务器进行性能监控有几种方法,每种方法都各有其优缺点。  使用SNMP等标准工具 标准及非标准工具能执行一个或多个收集、合并及传输阶段,如rstatd或SNMP工具,然而标准的rstat后台程序提供的信息是有限的,速度慢而且效率低。  内核模块 几个系统监控工程利用内核模块来存取监控数据。一般情况下,这是很有效的收集系统数据的方法。然而这种方法存在的问题是,当主内核源内有其它改变时,必须保持代码一致性。一个内核模块可能与用户想使用的其它内核模块相冲突。此外,在使用监控系统之前,用户必须获得或申请模块。  /proc虚拟文件系统 /proc虚拟文件系统是一个较快的、高效率执行系统监控的方法。使用/proc的主要缺点是必须保持代码分析与/proc 文件格式改变的同步。事实表明,Linux内核的改变比/proc 文件格式的改变要更频繁,所以,用/proc虚拟文件系统比用内核模块存在的问题要少。本文介绍的方法即基于/proc虚拟文件系统。 一、 /proc文件系统特点 Linux 系统向管理员提供了非常好的方法,使他们可以在系统运行时更改内核,而不需要重新引导内核系统。这是通过 /proc 虚拟文件系统实现的。/proc 文件虚拟系统是一种内核和内核模块用来向进程 (process) 发送信息的机制 (所以叫做 /proc)。这个伪文件系统让你可以和内核内部数据结构进行交互,获取 有关进程的有用信息,在运行中 (on the fly) 改变设置 (通过改变内核参数)。 与其他文件系统不同,/proc 存在于内存之中而不是硬盘上。不用重新启动而去看 CMOS ,就可以知道系统信息。这就是 /proc 的妙处之一。 小提示: 每个Linux系统根据软硬件不同/proc 虚拟文件系统的内容也有些差异。/proc 虚拟文件系统有三个很重要的目录:net,scsi和sys。Sys目录是可写的,可以通过它来访问或修改内核的参数,而net和scsi则依赖于内核配置。 二、 系统负载监测 1 使用uptime命令 使用uptime命令可以查看系统负载,系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数目。如果一个进程满足以下条件则其就会位于运行队列中:没有在等待I/O操作的结果、它没有主动进入等待状态(也就是没有被调用、没有被停止。 # uptime 9:51pm up 3 days, 4:43, 4 [...]

模拟 Linux 密码输入

模拟 Linux 密码输入,回显 ‘*’ ,支持退格删除,Code in C,Only use in Linux: #include #include #define passLength 100 int main(int argc, char **argv) { struct termio tio, tin; char*password =(char*)malloc(passLength); char*b=password; ioctl(0, TCGETA, &tio); tin = tio; tin.c_lflag &= ~ECHO; /* turn off ECHO */ tin.c_lflag &= ~ICANON; /* turn off ICANON */ tin.c_lflag &= ~ISIG; tin.c_cc[VINTR]=1; tin.c_cc[VMIN]=1; [...]

工作一周年

2006年7月3号,周一,从北师大到新浪理想国际大厦报道,开始上第一天班。 那一天的情形似乎还历历在目:一开始,lihui 给了我一台机器(台式机,DELL),格式化后让我自己装一些常用的软件。下午,zhongwei1 就给了我第一个任务:博客搜索首页及结果页改动:    1、首页去掉中间行,改为底部行,其它不动;    2、结果页增加一个黄色图标,其它不动。结果我花了一个下午熟悉 php,以及原来 600+ 行的代码,终于,找到了应该修改的地方,战战兢兢的改了,放到测试服务器上测试——居然一次通过!太高兴了。接下来,邮箱里渐渐的堆满了资料,bug,安排,策划,报警,通知,权限,日报,抄送,等等等等。 开发爱问视频的那段时间是最快乐的了。头脑风暴般的讨论,一个产品从无到有,从破绽百出到逐渐完美,列表页,频道页,排行榜数据,一个个模块在我手里成型,测试,上线,修正到最后定稿,一次次加班,一次次改bug,那些日子,辛苦,却快乐。 后来,被分配做审核后台,不料后台一堆的bug。因为最开始不是自己做的东西,每次出了bug 都很难定位,在长长的代码中寻找,被产品那边的同事催促,郁闷的不行。于是请调去大搜索。在大搜索呆了一周,唯一做的一个东西是 link text 分析,其实还不算分析,就是把几十个 G  的文本从一种格式换成另外一种格式,顺便排序一下,再找出最靠前的几个来。狂看了几天的 C, GDB,最后,还是老大来花了几分钟搞定一个 demo  ,然后留下我一个人唏嘘不已。 一周后,被借到 18 层播客去做接口。播客与研发这边的技术差距还是挺明显的,去了以后,基本上我负责的接口模块很快就开发的差不多了,于是,就时不时的给其他人帮点小忙,做点大块任务之外的零碎事情,为大家鼓劲加油。其实接口程序很简单,但麻烦就麻烦在跟两边的协调。每次修改一点点东西都需要爱问,播客联调,每次联调都需要进行一堆的设置,动用一堆的机器,以及做一堆的动作,模拟整个用户上传到视频显示的过程。 18 层工作环境比研发这边轻松的多,也活泼的多。大家都一直有说有笑,心情轻松了,效率也高些。 好景不长,播客上线后,回到研发来,负责维护视频搜索后台。开始还没有明白过来,以为只要维护播客搜索的,后来才知道,连爱问视频,宽频搜索一并在内了,而且,更让我觉得不可思议的是——只有我一个人!本来头还想让我一并维护视频转换后台的——天啊,拥有 50+ 台服务器的  root  权限,而且这些服务器散落在全国各地,这绝对不是一件值得高兴的事情!幸亏播客那边对搜索提出了一些“变态”的需求,于是,转换另外找人接了,我就只管搜索后台——维护以及针对新的需求的修改。 人生总是在起伏中前行,多少次服务器报警——最严重的宕机,严重的服务进程退出,严重的监控无结果,不那么严重的数据未更新,以及偶尔冒出来的超时过多。多少次bug提交——搜索无结果,某个特定的视频搜不到,搜索重复太多,搜索不能翻页,搜索页面不足条数,搜索结果相关性差,分词考虑不周,结果标红错误,等等等等。 又是一年的 7 月 3 号。这时,学校以及成为往事;这时,工作也渐渐得心应手。原来系统的 bug 太多,视频搜索正计划迁移到一套新的系统上去。新的系统的性能,容错性,搜索相关性都会有很大的提高,新的系统的索引范围也会有一个质的飞跃。期待新的系统的上线! 爱问视频搜索,爱学,爱问! http://v.iask.com/ http://v.iask.sina.com.cn/

密码保护:流水账

无法提供任何摘要。这是一篇受保护的文章。

密码保护:毕业

无法提供任何摘要。这是一篇受保护的文章。