Shell's Home

语言

Mar 21, 2006 - 1 minute read - Comments

如果不考虑实现的难度,理论上说只要能输入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 - Comments

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

装机记

Mar 6, 2006 - 1 minute read - Comments

连续叫了两个月的升级,昨天终于升好了。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 - Comments

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

标准和软件同质化

Feb 22, 2006 - 1 minute read - Comments

软件标准,啥叫软件标准呢?最出名的(也是我最敬佩的)就是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 - Comments

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

英雄传说VI存档修改

Feb 1, 2006 - 1 minute read - Comments

存档文件都会找吧,HEX编辑器都会用吧。不会还想修改,一头撞死去吧。相对来说游戏还是比较好修改的,继承了FALCOM存档的一致风格。(汗……这个……)和大宇一样白痴兮兮一点加密都没有,差分分析就搞定了……不像某些游戏的存档,居然用RSA加密!(再汗……)不过更夸张的是,游戏的资料全是zip压缩的可读可编辑资源,连对话都可以随便改……(庐山瀑布汗,晕倒。) 下面是地址和数据,除了物品代码和个数是WORD以外,剩下都是DWORD。下面物品不全,有部分我忘记了,还有就是懒。多数情况是够用了,不过晶石是缺的,料理也不全。如果有哪位搞定了全部数据,请和我给我留言…… 0x25C88 金钱 0x25C90 七耀石 0x23E64 Js经验 0x23E98 Es经验 0x266B4 战斗次数 0x25C8C BP 0x266B6 战斗不能次数 0x266B8 战斗胜利次数 0x24C8A 物品 0011 太极棍 0030 黑千鸟.白千鸟 0041 九尾 0062 王权之光 0080 水晶剑 009D 狂战士巨刃 00BA 高能量粒子炮 00D9 代达罗斯护腕 00FD 皇家骑士铠甲 00FE 女武神铠甲 0119 天神之鞋 011A 风神之鞋 012D 银耳环 012E 打火机 012F 幻影戒指 0130 黑色手镯 0131 魅惑项圈 0132 光明背带 0133 珍珠耳环 0134 百合项链 0135 羽毛胸针 0136 骷髅项链 0137 活性脚镯 0138 魔力鸟冠 0139 神圣挂链

The change of M$’s Blog

Jan 31, 2006 - 1 minute read - Comments

偶非常不爽,因为M$的blog改版。可能因为新年,so M$在做改版,至少俺的一个在M$供职的朋友在加班,默哀三指令周期的说。不过新版的东西还不如旧版,可能是js和我这里的IE八字不合,俺……所有的评论回复全回不上去,切到最高权限模式还是一样……幸好发blog还是正常的,否则俺就抓狂了。在此把所有要回的blog先全部回这里,希望偶尔跑过来玩的朋友看到点了你的名字,自己找找到底回的哪里,别怪偶,怪M$吧…… 2kaka:俺也老咯……你还有GG丫…… 2piaoaa:你的歌蛮好听……我不客气的扒下来用了…… 2stella:中间一张漫步海滩头发遮了面容的是你吧……嘿嘿……你们很幸福哦……这种黄昏漫步海边的浪漫……

Runas系统管理方法

Jan 25, 2006 - 1 minute read - Comments

一个系统,做一个管理员(不是administrator),做一个受限用户。然后用受限用户,不用管理员。做一个链接。 C:WINDOWS\system32\runas.exe /user:user C:WINDOWSsystem32cmd.exe 然后启动后输入管理秘密,就可以用管理员身份来做管理了,启动注册表编辑或者啥都很方便。