Shell's Home

Apr 1, 2006 - 1 minute read

整死人

我在编译mplayer1.0的时候需要xf86vmode.h文件,这应该是安装某个dev包。根据packages的结果,是xlibs-static-dev。不过系统还提示找不到,事实上,他在libxxf86vm-dev。

Mar 31, 2006 - 1 minute read

debian的桌面研究(二)--完美桌面

一个系统好不好,不是看他崩溃频率(除非崩溃得比9X还欢),也不是看精美程度(除非比MAC还夸张比windows还花哨看界面就像在看美国大片),而是看功能,看应用程序的多少。linux下面要流畅的工作,大致需要以下几个软件。 firefox gaim lumaqq azureus xmule xmms office eclipse 下面逐个讲解安装过程: firefox:著名的浏览器,功能强劲方便安全 1.aptitude里面找,安不上的纯粹RPWT。 2.debian里面firefox的最新版本是1.0.2,不过网络上面出到1.5了,而且还是比较稳定的。如果要自行升级的请看下面流程,当然,首先先下个firefox的包。 tar -zxvf OOXX.tar.gz chmod -R 755 firefox/ mv firefox /usr/share gedit /usr/share/applications/firefox [Desktop Entry] Encoding=UTF-8 Name=firefox Exec=/usr/share/firefox/firefox Icon=/usr/share/firefox/..#你自己看什么合适吧 Terminal=false Type=Application Categories=Application;Network; StartupNotify=true gaim:聊天程序,要上msn/icq的找他 aptitude里面找,安不上的纯粹RPWT。 lumaqq:聊天程序,上QQ4linux的 安装比较麻烦,首先要安装java4linux。下面我要装eclipse,所以用的是jdk,用jre的也差不多处理。 xmms:音频播放,linux下面的winamp aptitude里面找,安不上的纯粹RPWT。 PS,gnome的菜单包是menu-xdg,放置位置/usr/share/applications,模版如下 [Desktop Entry] Encoding=UTF-8 Name=程序名称 Exec=执行代码 Icon=图标 Terminal=false Type=Application Categories=Application;Network;Develope; StartupNotify=true 根据需要修改添加就可以了。 PS,其实还有两个,realplay和mplayer,不过这两个程序正常debian用的话有点小问题,所以放到下篇说了。

Mar 31, 2006 - 1 minute read

debian的桌面研究(一)--精简安装

debian应该算是一个比较方便的OS,100M的安装盘就可以自动安装。不过最近debian出了点小小的bug,所以安装过程也要有点技巧的好。下面所说的所有系统都指debian3.1sarge,去年五月出品,是目前最新的版本。 问题出在一个系统核心的更新上,如果默认安装的话就全部都会失败。所以应该在安装的时候中断所有安装更新动作,不安装任何桌面和服务,直接完成安装进入系统。然后更改/etc/apt/source.list加入所有你想要的源(这样安装的速度会比原来快很多),然后运行aptitude -o APT::Force-LoopBreak=1。update一下,有什么可以更新的全部更新上,再选中最新的合适使用的内核和源码(对stable和testing来说,debian的最新发布内核已经没有什么瑕疵可能存在了),然后安装。这个过程大约要下载70-100M的东西,端看你什么时候跑的安装。我这里大约是三刻钟就跑完了下载安装。重启下,用最新内核启动,然后卸载旧内核(不重启的话会非常罗嗦,而且不安全)。这样整个可用系统的最小版本就出来了,装机大约是一个钟头。 然后是桌面环境了,在aptitude里面,选择以下包vim gnome mc x-system-core im-switch gaim选中,然后再选择所有中文桌面和环境(不要用的输入法可以去掉点),这样大约有350M上下的文件需要下载,整个过程约会持续三个钟头。其中设置就不具体说了,不过系统还需要做以下更改。 首先在/etc/X11/xorg.conf里面将mouse类型改成ImPS/2,模拟三键去了。然后修改/etc/X11/xinit/xinput.d/default文件,加入以下内容。 GTK_IM_MODULE=SCIM XIM=SCIM XIM_PROGRAM="/usr/bin/scim" XIM_ARGS='-d' 这样基本来说系统就ok了。

Mar 28, 2006 - 1 minute read

补牙

最近很倒霉,原来补的位置掉了,所以两天不能好好吃东西。而且刚刚牙痛的时候还贪方便吃芬必得,结果其药物反应。上吐下泄,晚上还打抖发冷,次日微烧无力。反正我以后是不敢再吃了。 今天去补了个牙,花了三十,等了一个钟头,禁食六小时,总算是搞定了。哎,希望别再掉咯。

Mar 21, 2006 - 1 minute read

语言

如果不考虑实现的难度,理论上说只要能输入16进制的编码就可以编程。不过事实上这种事情即使在小说里面也不会有人去做的,毕竟人的精力是有限的。现在人们一般使用某种语言来进行编程,那么语言的到底是什么呢? 就程序语言的发展来说,最初的语言应该是汇编。这种语言严格来说不具备语言的特征,只是转换可理解的代码到不可理解的代码而已。近代首次语言上的重大突破是IBM公司的forturn语言,这种语言基本具备了高级语言的几大特征。而后就是伴随UNIX一起称霸了计算机界半边天的C,以及同属于C系列的C++/Jaca。目前趋势来看,形式化/结构化语言用Java,操作化语言用C已经成为流行。估计在十到二十年内我们会迎来语言的又一大发展。 任何语言基本来说,都要考虑三大要素。语义逻辑解析,程序操作接口,复用。这三大要素的出现顺序是按时间顺序排列的。 首次出现高级语言的时候,着重是在语义逻辑解析上。主要目的是将人类思考的形式以自然语言的方法描述,转换成可以实现的机器语言。这一时期的语言不能说没有考虑后两者,不过在实现上的却比现在差很多。 程序操作接口是我们注意的第二个要素,我不知道C以前的语言是怎么处理和系统交互的问题的,不过C的解决方案的却不算是很理想的方案。C利用相对独立的和系统相关的代码库来实现接口的抽离,这种方式如同舍弃高级语言中的转跳而使得语言结构化增强一样,是一种无奈的取舍。但是如此一来,操作底层的时候就必须舍弃标准代码,而使用标准代码就却不能完全脱离系统。(关于此点,相信所有被TC中16位的unsigned int困扰过的朋友们都深有体会)于是std标准库就成了半个鸡肋,之所以说半个是因为聊胜于无。java在抽离上比C更进了一步,彻底的同系统抽离了,这使得在形式操作的时候我们可以避免考虑系统差异。但是和刚刚一样,java操作底层是非常差劲的。大家可以试试用java在windows中编写一个服务,注册运行。不过jni的开放在一定程度上弥补了这个问题,上有java,下有C。虽然差强人意,不过也算是比较完美的解决了系统接口的问题。 最后一个问题就是当前我们关心的要点,复用。复用的最大意义就是减少劳动的重复,增加劳动的效率。从目前来看,复用主要是两种形式。黑箱接口,同形重用,而这两者又不是完全割裂的。黑箱接口的核心就是将相同部分组成一个黑箱,黑箱外可以任意操作黑箱。只要遵循黑箱的说明原则,就不必关心黑箱内部是怎么实现的。而同形复用也可以相对称为白箱复用,是指将一系列代码组成一个白箱,对外部并不封闭。在应变的时候需要改变箱内的内容,但是这种改变要么是自动的,要么是轻松的。黑箱多数是运行时复用,而白箱多数是编译时复用。例如库技术,接口,COM(这个应该也算接口吧)就是黑箱。在编译前无需假定操作对象是什么。而C++的模板技术就是典型的白箱,编译前必须假定操作对象。如果编译的时候我们没有编译针对某个类的函数,那么运行时就会出错。 复用和接口有着紧密的关系,假定我们有一套操作下层接口的方法,并且经常被用到。那么根据复用的原则,我们就应该把他封装成复用块。这样,复用块成了新程序的基础。也就是说,对在此上写的程序来说,这些复用的代码是接口的一部分。 我前面曾经说,在十到二十年内我们会迎来语言的又一大发展,主要是在说分布和同步上。目前我们的所有程序都已经从单线程转为多线程了(我指支持,如果你硬要写单线程也可以),然而线程间的同步依旧是非常麻烦的事情。如果线程间共享数据,那么我们必须手工操作同步。java算是比较先进的,可以通过形式化的方式来设定同步。然而这不是语言发展的最终目的,我们的最终目的是要使得同步有一系列明确的机制,只要按照机制来做,就可以不考虑同步的问题。这不仅仅是说本地线程的同步,而且是说如果一个程序在两个地方分别有一个线程,到底应该如何操作。如果能完美有效的解决这个问题,相信我们也就同时解决了诸如B/S好还是C/S好,分布资源的调集等等我们现在非常头痛的问题。

Mar 7, 2006 - 1 minute read

妖怪阿

硕志公司的员工招聘仿佛是被女巫诅咒过一般,完全找不到人。先是来了个余工,共产党员。然后一个月后辞职,原因是要去日本当地下党……后面来了个刘磊,资深IT工程师。结果头天还说要来,第二天神秘失踪,人找不到,手机一直通,没人接……再后面,再后面是顾工(股肱之臣阿……XXX表打偶……),来了一天。在签约前包袱款款跑了……再后面,再后面就是偶许某人辞职了……希望杨总不要因此花轰。 这种怪异情况基本有以下几种可能。一个是被人恶意整蛊,来了就跑,招不到人。一个是招聘范围太窄,开出天价还是招不到合适的。还有就是薪水不合理,这种薪水招不到合适的人。招来的根本不能开发。按照偶的观点,貌似是最后一个。

Mar 6, 2006 - 1 minute read

装机记

连续叫了两个月的升级,昨天终于升好了。AMD Athlon64 3000+/E6的内核,200x9频率超到233,FSB933。内存是KST512MDDR400,目前在233外频工作。七彩虹镭风x550ct冰封骑士4,PCIE16,在110MHz的外频工作。总共花了3000大洋,加一个机箱。然后剩下一个C1.2G+256M内存,40G SGU6硬盘组linux试验机。另外还剩下了一个256M内存(居然还是BGA封装),一个三内存条的PIII800M,一个SGB4 40G硬盘,没有显卡没光驱,外加一个机箱。准备出货给赵一博同学……谢谢接盘。 下面说说在本次装机中的妖怪事情,AMD64的片子正常应该是可以点32的系统的,但是我这里上32系统就死机。看上去是内存问题,但是XP内核的光盘系统可以运行,内存测试通过。估计是某种体质上的兼容问题吧。反正64系统能跑,我就不管了。64系统上AMDCPU后可以开DEP,我看了看,这个和64程序基本是一致的。现在只有系统的软件是开了DEP的,也只有系统程序是64位的。这样在溢出攻击上恐怕要特殊点。其它程序统统还是32位模式,不开启DEP。估计其中差异在LARGEADDRESS选项打开上。赵一博同学说ND和DT跑不了,用司机和酒精就好了。只是rich8就不用指望了,那个一定要DT加RP才开的起来……BT哦…… 另外就是系统管理模式的完善,开两个用户,一个admin,一个user。然后用XP的账户选项弄成一个受限用户一个管理用户。受限的那个加PowerUser组,然后所有数据目录都加Administrator组F,User组R,PowerUser组RW。这样一般的受限用户在数据上只读,来宾是看不到,高级是正常用,权限归admin管。再把windows下面的权限调整成adminF,PowerUser只读,User只读,这样一般软件都动不了系统了。然后微调服务和策略,基本就可以完成配置。

Feb 22, 2006 - 1 minute read

分布式软件构架的变革

分布式软件构架由来已久,从最初的并行计算到现在的大规模网络并行计算,再发展到网格计算。这代表了分布软件的一个变革,而另外一个变革则是从数据-程序-界面合一的构架转换到数据-程序-界面分离的构架。MVC大家都很熟悉吧。现在软件界的三大困扰是什么?安全,效率,可复用。其中程序从界面层剥离开造成了当前你用出bug的程序可以对别人施加影响,而程序和数据层间的紧密结合更加剧了这个问题。还有程序到界面的接口是最影响成本和收益的地方,因为界面和程序的可复用是最能降低成本的。 我们现在流行的一种模式是使用网页界面的B/S模式,诚然,这种模式比C/S模式有更大的优点。客户端与系统无关,这样客户端的可复用性非常好。但是这种模式的缺点也是明显的。网络传输效率低(这个现在没有多少人计较了),构架不合理(人家HTTP本来是传输文件的说),而且不安全。 我们相信将来的软件设计模式是基于分布的,那么可能如何分布呢?我个人认为有两种主要模式,一种是平台抽象式分布,一种是组件抽象式分布。 平台抽象式分布是指软件的运行在一个网络平台上,其具体运行在哪个电脑上,如何协调对象,并不是软件关心的内容。平台负责抽象了机器,平衡了性能,增加了效率,但是对于机器间的传输实时性要求比较高。适用于企业内部的发展方向,以多台电脑平衡性能。均衡性能需求峰值,降低硬件成本,并且可以充分利用旧机器。用于这种分布的基础是分布式操作系统,在系统运行后即无条件陷入分布系统的接管中。前台的模拟为纯终端,后台模拟为纯资源。然后终端向资源登陆。这种模式的近似产品是win2k中的AD,不过AD只提供了资源的访问指向和访问控制,还有权限分散管理模型。而没有提供最核心的内存共享和锁定,还有线程分布和游离运行。 组件抽象式的分布其核心是将一个软件分离到不同的组件中,不同的组件在不同的机器上运行。这种模型更适合于自由的广域环境,当然前提是能成功解决组件通讯的问题。现在这种模型相对前种有更广的发展。这种模型和现在的B/S模式中最大的差异是,B/S模式的用户接口是浏览器和服务器程序共同完成的。从来没有人听说过有页面直接驱动后台组件的吧。如果我们可以用一种抽离语言(JAVA的显示效率太低了)来完成前台的接口部分模块,那么我们应该试图用这种方式来发布软件的前台端。这样软件的抽象更为简单明确,而且可复用性更高。

Feb 22, 2006 - 1 minute read

标准和软件同质化

软件标准,啥叫软件标准呢?最出名的(也是我最敬佩的)就是RFC(Request 4 Comment,内容堪称网络的基石,但名字虚怀若谷,绝对比现在乱糟糟的名字好多了),微软的WINAPI也算标准吧,还有POSIX等等。用各种标准来写软件确实方便多了,要DOS时代,每次系统升级都会有报废的软件。而且DOS和WINDOWS软件也不能互换,但是WIN9X和WIN2K的软件互换就超过八成了。 不过软件标准却造成了现在的一个严重问题,就是软件同质化严重。简单的讲是软件的功能一致。深层次来分析的话,软件是一个中间层,他上有实现标准,下有使用标准。在类似的平台上,使用标准是类似的。如果实现标准再类似,那么除非有突破型的技术,否则就注定了软件只有同质化的下场。举例来说吧,例如IM软件,他们的下层都是TCP/IP协议,由于网络情况复杂,多数都不能在IP层(网络层)玩花样,一般都是在TCP/UDP层(传输层)做各种变换。例如内网穿越,代理等等。对上层来说,要实现的标准也是很类似的。由于其上层就是用户,所以必须按照类似的用户需求来写软件,最后IM都是一个模子里面出来的,也没啥好奇怪的了。 软件同质化特点大致有以下几个: 1.值钱不要钱,要钱不值钱。IM来说,最重要的功能是整合通讯,但是现在没有一个IM的整合通讯是收费的。相反,收费的统统是什么送花啦,群拉等等非常花哨的功能。因为整合的功能同质化不严重,所以收费还有人用。但是核心功能都完全同质化了,竞争太严重,根本没法收费,广告都不好打。 2.你卖的软件和我差不多,盗用代码违法,盗用想法合法。这个毕竟也是无奈,要判盗版想法的话,windows都是盗版了。 3.软件行业技术水平低下,技术标准的确立,无疑使得所有使用标准的人之需要在标准上竞争,这样无形限制了竞争的范围。其实在某些情况下,无视标准反而有更强的优势。例如RealMedia系列的压缩格式就完全不同于AVI的封装格式。熟悉媒体格式的人应该知道,AVI是可以封装各种算法的格式。但是RM凭借自己的努力获得了一片天空。如果RM使用的是AVI封装格式的话,现在媒体软件市场是何样形式还很难说。 4.产业增值集中在核心技术和标准上。如果标准是收费的(无论费用是怎么收上来的),那么同质化竞争的最终收益者应该是技术标准所有者,因为他们限制了竞争条件,那么竞争对手的减少造成收益理当的归属标准所有者。如果技术标准不收费,那么他们就不能限制标准的使用,这就是只孵不出蛋的金鸡。 其实我们可以看出,所谓标准,只是另外一种形式的垄断。

Feb 21, 2006 - 1 minute read

第三代博客的兴起

第一代博客是少数人的博客,这种博客文化好比前几年的个人主页一般。参与的是少数,出名的也是少数。这种文化好比DHT网络研究中的深度节点模式。不熟悉的朋友也不用看了,大概上讲,信息扩散的拓扑网络有两种主要分类。一种是每个节点的链数目差不多,链接长度也差不多。这种模式传播抗突变和崩溃很好,而且节点的要求也不高。缺点是信息传递路径长,容易变形,而且传播不稳定。还有一种模式是有一些节点的链接数目大,而且长度方差大。这种模式信息传递快而且稳定。但是抗突变能力查,而且节点要求高。目前DHT的努力方向就是以后种模式为骨干的结合两者优点。而“深度博客”文化,或者叫“个人博客”文化。主要是将某些人作为博客的卖点,进而推动博客的发展。如果没有名人,没有卖点,一个博客再稳定强大都没用。而第二代博客是大众化的文字博客。这种博客类似DHT中的分布节点模式,主旨是推行每个人独立的创造博客,最终通过程序链合聚集。在我看来,博客的日志功能只是辅助,其交换,聚集,索引才是核心实质。这种博客是以稳定和强大为基础的,具备很强大的客户粘着性。如果用户的blog某日丢失了,那名人再多也无法挽回局面。 而第三代博客是以媒体为基础的博客。任何媒体,任何形式,都是从文字开始,然后到多媒体。从专业化开始,然后渗入生活。从集成开始,然后嵌入。我们可以仔细观察现在的HTML规范,还有常见的HTML语言,然后和1994年的欧洲核物理研究中心创立的追初的HTML规范对比。我们可以很容易发现,现在的HTML语言更趋近于媒体使用而不是文字,并且现在的HTTP协议更倾向于在网络上交互事件和数据而不是传递文件。后者恐怕我还要专门撰文评价,而前者则是网络界从文字向媒体转换的明证。 我们现在的每个blog理论上都有关键字,所有饮用有通过RSS协议。这是我们得以开放式交换链接,并且实现追踪搜索的根本。如果我们在媒体上类似的处理,我们也可以制作类似的媒体blog。届时我们每天的blog内容更新可以是通过录像而不是打字,这不仅仅是效率的增加,而且是方式的变革。相对来说,当前的blog中加入图片根本是小孩子的玩具。 相信这个问题不是没有人想过,但是实现上有个巨大的难度。当前的第二代blog的栖身之所是巨型的服务器集群,这样才可以负担千万级的用户。如果要在其上传输媒体,未免太强人所难。这个问题可以回到当初我们的DHT网络上去。DHT本质来说是什么?应该是知识网格。通过一些方式将你的知识和信息散布到网络上去,然后别人可以找到。这本不是难事,但是我们现在的主要实现方式是集成数据库!这意味着如果没有核心服务器,我们无法交换信息。而我们交换信息越频繁,核心服务器越大。这当然的限制了交换的发展。DHT是将信息冗余分布在网络上的方法。同样,我们可以将媒体通过一些P2P方式封装,浏览过的人将为将来的人提供上载,这样可以相当的解决第三代blog最严重的带宽问题。 不过其中解决一个问题的同时带来了另外一个问题,公众的公德心,上传的问题。这个问题的解决恐怕要依赖于P2P软件中的补偿机制的完善了。