Shell's Home

Bittorrent

May 31, 2005 - 1 minute read - Comments

关于纯粹的BT技术,并没有啥好说的。BT的迅猛发展表明了这个技术的生命力。不过BT还要面对几个问题。首先,也是最大的一个,就是Copyright的问题。 嗯,先回顾下网络文件发布的方式和版权追究的历史。最开始的互联网是bbs形式的,而且比firebird一类的telnet形式还要落后。这种情况下要么是通过bbs交换文件,要么就是ftp。多数是大学在用,很少有追究版权的,而且多数东西用于研究时可以藐视版权法。所以这个时期根本没有所谓版权的问题。 然后就是欧洲某个研究所(似乎是欧洲核物理研究所)搞出的html协议,到今天成为了xml协议的基础。这个协议可以在客户端灵活的使用各种媒体对象表示,而不用管对方是啥系统。今天的xml可以保存和创建各种内存对象也不用管是啥系统,从某个意义上说,这是一脉相承的重大进步……呃,好像扯远了。这个时候出现的各种文档基本都是本人发布或者转载,多数也是大学使用,没有版权问题。 后来我们的网络渐渐转向民用,这个时候微软也搅合了进来,发布了IE。然后很多网站就搞了个人主页服务。还有部分小型网站根本就是大流量的个人主页。为了吸引访问量,经常东抄抄西搬搬。这个时候就有了盗版的概念,不过盗版的多数是文字,也经过修改。这个时期的后期渐渐演变成了盗版歌曲,Mp3格式之争由此而来,相信大家非常熟悉了。 网页毕竟比较好处理,盗版的人虽然多,不过稍成气候就可以一个警告让ISP关闭服务。唱片公司们虽然头痛还比较好处理。(当然,他们可能认为这已经是比较严重的问题了。但是和后来的境况相比,他们的却还没有见到啥大场面。)而后出现了分布式的歌曲共享系统和搜索引擎,这让各个公司大大的头痛了。两者的结合使得免费的歌曲在网络上满天飞,整个唱片行业据说损失惨重。唱片公司们为此甚至将歌曲共享先锋的Netisper(貌似这个名字,偶忘记了)告倒了。不过倒了一个人,起来千万个。反正目前来说,唱片公司已经放弃封杀所有免费歌曲流行的可能。改成授权下载了。用非常低廉的价格销售所谓“授权正版Copy”。老实说对于这个我非常的佩服,不但宣传了自己,减少了盗版损失。对于我们来说,合理合法,支持了自己喜欢的歌手,而且还方便查找。这手算是诸公司们非常成功的举措。 然后就是近代,Edonkey和Bittorrent为代表的两种DFS横空出世(其实ED是个老家伙了)。满世界乱飞的盗版根本没法解决,而且盗版的范畴从主要是音乐和文字扩展到了各个领域。从游戏到电影,啥都有。甚至严重的打击了盗版商,将中国多年未竟的反盗版销售的事业推向了顶点。一个卖盗版的朋友是这么评价的:“以后我们只卖三种软件光盘,系统,office,大众软件”。我今年的所有电视和电影都是从网络上下载的。由此可见我们的盗版正式进入了战国时代。 为盗版而生想必不是P2P软件的本意,不过去除盗版后P2P恐怕没啥明天可言。不信你可以上bt.btchina.net数数到底多少共享是有授权的,包括shareware,XXX授课录像Live这种就算授权过好了。照样是盗版比非盗版多。但是P2P极大的刺激了网络的发展,并且可能成为将来的一个核心技术。 当然我相信,立个法禁止P2P软件简单。但是,这是倒退,而不是进步。P2P软件现在逐渐分布化,BT可以自我组件平台,并且透网络运行,凡可上网处皆可BT。如此优良的技术弃而不用,岂非倒行逆施?但是相对,BT也无法参照歌曲运营的模式来个网络授权正版。如此一来,BT被告上法庭的机会就非常高。要是真的禁止了BT,相信会有新的共享软件应需求而生,状况非但没有好转,反而恶化。绝对不是立法禁了就解决的了的。 目前来说,寻求一种共享中盈利的模式是当务之急。不但是各个损失惨重的公司,而且是众多的BTFans。如果公司倒了,我们还能BT啥呢? 另外一个就是BT的共享方式。BT的算法仅仅可以用于静态文件,这点另我非常不齿。目前最需要分布运行的多数都是动态数据,例如电视广播,股票数据等等。BT不可以用于动态数据的原因我比较清楚,因为我曾经就算法设计问过运筹的老师。不过有分流比没有分流好,仔细看看当今诸多股票提供上捉襟见肘的状况就可以知道了。如果BT2.0协议提供包括动态数据流和认证下载,网络穿越在内的一系列能力,相信会非常具备竞争力的。这个我早在一年前就考虑过,不过奇怪的是,我预计一年可以实现,现在都快一年半了……根本没有声音。

debain

May 31, 2005 - 1 minute read - Comments

根据babylon的结果,没有debian这个词。根据我的拼音加加的结果,debian打出来是“得便”的意思。而事实上……debian是一个linux的版本。 不过我很奇怪了,why所有的linux发行版本都这么大呢?windows2000的发行版本是4in1,四个版本合一张光盘。而RedHat9的发行版本是1in3,一个版本放了三张光盘……这个居然还好意思号称内核精简。windows的内核严格说起来也只有2M而已,smss大约100K,Csrss不知道多大,加上NTDLL.user32.Kernel32.win32k.gdi32也没有多大。不过windows组件模型比较大,搞得整个windows貌似比较庞大而已。一般来说,优化过后服务器上大约需要2-3G的分区空间。而一个正常可以跑的linux桌面大致也需要这么多的空间……界面和通用性上还不及。这厢真是郁闷大了。 不过仔细想想,linux和windows的传奇都貌似到了顶点。windows自从2003后就基本没有了声音,就算现在他出什么新版本我会不会买账还是回事情。(2003现在都没有试过呢……)linux出新版本总比windows落后一步,usb如此,摄像头亦如此。加上PDA或者智能手机一类的嵌入设备中越来越多的使用WinCE(就是PPC啦),ActiveSync和windows捆绑的迹象越发严重。linux的路不好走啊。 下面恐怕就是分布式系统了吧,如同我前面所讲。分布式系统相对正常系统具备极大的优势。例如硬盘空间共享,这样利用效率就会上升。软件的安装和维护集成,节约成本。CPU资源共用,有利于承担突发事件,并且方便利用用户使用不了的CPU时间。(例如一个在看网页的人的空闲CPU可以分配给运行大型程序的)不过最大的问题就是保密性、可维护性和网络速度问题。一般来说只有当网络速度和硬盘读写速度量级相当的时候才可以考虑分布系统。目前的接入普遍都不快,只有内部网络貌似可以达到这个级别。100Mbps=12.8MB/s,硬盘大约是30MB/s-60MB/s。尚可以考虑考虑。 分布系统的话首先应当选择微内核,否则不同的机器跑不同的内核岂不乱套。网络部分可能会编译到内核里面来加速。不过最大的问题就是,进程如何跨越机器?如果进程无法跨越机器,那么分布系统啥意思都没有了,干脆上一个DFS算了。如果进程要跨越机器,那么操作台占有,信号,等待,互斥等等就都成了问题。以前可能不明显的互斥问题在网络上就会产生明显效应,不同的互斥算法造成的效率差异会非常显著。 我设想分布系统可能如此实现。网络和文件系统编译入内核来加速。程序的运行都要在中央服务器上启动才行。每个进程会派生出控制端的概念,控制端对应不同的权限。严格来说,控制端是一个亚进程的概念。因为同样一个程序可能又多个机器要运行,例如IE一类的浏览器。如果放出多个进程恐怕太过浪费,但是如果放出一个进程,那么这个进程的权限又不好控制。考虑中是否可以将界面控制部分和程序分立开,成为控制端。控制端具备独立的变量空间和权限环境,对应不同终端上的用户窗口,可以容纳多个线程。或者进一步说,同样代码在不同机器上运行时候,环境理论上应当相同,除了控制端部分的数据应当不同(替换成本地的数据)。这样输出窗口的时候可以输出到不同的窗口上。 理论上说,每个程序应当只允许运行一个Instance。如果有人运行某个程序,则应当建立程序的私有空间,并且初始化程序,察看是否已经在运行中。如果在运行中则自网络上虚拟映射入整个程序。而后初始化控制端,并且派生出本地线程。由本地线程来运作整个程序。程序对非控制端部分的操作都要进行互斥访问……真麻烦。 如果某个机器具备空CPU,而另外一个机器CPU运行满,则将整个进程映射入空闲机器中,包括控制端部分。这样可以用空闲的CPU,当然前提必须是支持多线程,这样才可以移动一个线程过去。不过问题是保密性,还有如果空闲的机器也要运行这个程序了怎么办?这样恐怕就要将线程移动回去,然后清空控制端重新初始化。但是空闲的CPU就无法利用了。 呃……貌似扯的蛮远了,从linux安装失败一直扯到了分布系统……今天就这样吧,郁闷……

la paloma

May 31, 2005 - 1 minute read - Comments

原本以为la paloma是法文的鸽子,前几天和Gigi谈起。她说……法文的鸽子,和英文有差别吗?我当时一愣,难倒是意大利文或者拉丁文?回来抄起工具,下了一个babylon pro5.05 tiral。然后找个破解补丁上去,再下载我看的到的本地词典,连接所有可行的网络词典。总共花费400M的磁盘空间,查了下,终于出来了。 la paloma是西班牙文,意思是……鸽子……

郁闷

May 31, 2005 - 1 minute read - Comments

今天没事,看看大家的blog去。结果发现基本都没有更新。然后看到Gigi的上面写的郁闷宣言。然后万分悲惨的……我也郁闷了…… 算算已经快六一了,当然我已经不是儿童,儿童节没啥好企盼的。不过答辩在6.13,目前核心算法还只写了一半,优化和美化完全没有做,文档动笔才3000字。最郁闷的就是,找不到老师,也找不到研究生。毕设还打不打算让我准时过去啊? 当然,要仅仅如此还不至于郁闷到死。那个做的太快导致老师来不及布置任务也就算了,反正我不着急毕业,也不准备拿啥奖。(不给我个最差劲学生奖就不错了)就算准时答辩照样还有30号的运筹学考试拦着,左右无法正常毕业,拖也无妨。问题是现在很无聊,所以家里就开始催我找工作。我说,这人是不是没有被某些人雇佣就不是人啦?那雇人的人呢? 我又不是很差(呃……不说我的成绩……),找个一千二千的工作肯定找的到。问题是好的工作不好找啊。一个个不知道啥理由的催催催,仿佛多催催就可以找到好工作似的。没有找到工作我也暴郁闷啊(在此再次BS中国的就业率)。 更郁闷的就是程序的问题了,呃,不是编程上的问题。最近看看行情,悲哀的发现,中国计算机还过的去的MM就如同秃子的头发,没几个。而且还要排除如花……干吗,BS我?BS我也要排除,我又不是周星星。剩下的人再排排队。然后,意料之中的发现……轮不到我。我周围计算机最顶尖的MM就算Gigi和zoomy了。不过按照程序员的角度来看问题的话,那个也没啥东西……其他的就更别提了,最基础的系统优化都做不好,写个程序头痛的要死。发嗲和骗GG代劳的本事比计算机水平要高,对于电脑的感觉就和对于体重计的感觉差不多。 虽然说我已经做好了没有人分享心理的准备,也决定了今后不相信任何一只动物,尤其是人。不过对于生命繁衍的需要和某些乐趣(呃,请诸MM不要扁我,扁我也不要拿东西,拿东西也别拿硬的,拿硬的也别扁我脸)的需要,一个共享空间和环境的对象是必须的。(写完才发现,上帝啊,系统引论真的看多了。越看越像不同程序共享同一进程空间……)目前状况来看,恐怕不是运气级好的撞上一个秃子的头发(去去,如花退散……),就是必须忍受一个讲话如同对XX谈琴的对象。 不过总总来说,这还不是郁闷之最。郁闷之最的是……我该干什么?迷茫啊…… 呃……我没醉……我没醉,妈的,谁把啤酒换成香槟的……

从游戏修改到程序优化

May 28, 2005 - 4 minute read - Comments

前几天在家没事情干,就写了一个通用游戏修改器。代码很简单,利用argv参数获取传入文件位置,然后反复调用EditFile。重复映射文件,并且定位目标位置,修改指定数量的数据,然后保存。然后,我为了某些特殊目的,决定赋予程序动态运行和可扩展的功能。并且加入搜索支持。其实后者并不困难,我们只要反复调用函数对比和赋值,并且逐步推进指针就好。但是前者的实现具有一定困难,为此我不得不增加了部分程序开销,来保存一个函数指针,并且可以动态的调用。这样我们就可以实现诸如轩辕剑中的物品修改。其过程大致如下所述。 轩辕剑中的物品是一个数组,但是数组头的RVA是不固定的,仅仅知道大致位置。我们必须先定位某个物品的代码(特征代码),然后修改后面紧跟的一个WORD,实现修改物品数量。程序会自动的建立一个指针,并且逐步推进。我们的实现函数仅仅需要判断当前指针指向的WORD对象是否等于一个特定值,等于的时候进行修改就好。主体框架如下: #define NOSEARCH 0x00000000 #define SEARCHALL 0xFFFFFFFF #define RADDR(x) (LPVOID)((DWORD)RVABase+(x)) typedef DWORD (*tpEditData)(LPVOID Data); struct _RVATable{ DWORD RVA; DWORD SearchEnd; int size; tpEditData pfnEditData; LPVOID OldData; LPVOID DataBuff; }; _RVATable RvaTab[]={ {0xBA4C, NOSEARCH, 01, NULL, NULL, “x09”}, {0xBA4E, NOSEARCH, 01, NULL, NULL, “x5B”}, {0x76AB, NOSEARCH, 01, NULL, NULL, “x09”}, {0x0000, NOSEARCH, 0, NULL, NULL, NULL} }; void EditFile(LPTSTR lpPath); int CompareMemory(LPVOID mem1, LPVOID mem2, int size); void main(int argc, TCHAR* argv[]){ for(int i=1;i<argc;i++) EditFile(argv[i]); return ; } void EditFile(LPTSTR lpPath){ int i; HANDLE hMap, hFile; LPVOID RVABase=NULL, DataByRva, DataEndRva, DataNow; DWORD FileSize; __try{ hFile=CreateFile(lpPath, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if( hFile==INVALID_HANDLE_VALUE ) return ; FileSize=GetFileSize(hFile, NULL); hMap=CreateFileMapping(hFile, NULL, PAGE_READWRITE | SEC_COMMIT, 0, 0, NULL); if( !

光盘镜像Copy、底层文件读写和CreateFile

May 28, 2005 - 1 minute read - Comments

1.CreateFile读写文件,设备,网络。 刚刚看到有人在问,知道了数据的物理位置,如何读取光盘上的数据。于是我很纳闷,这有何难。看他的意思不会是要编程进行硬件交互读取吧。如果已知数据的偏移地址,那么使用CreateFile(”\.X:“…)就可以直接读取某个盘上的数据了。(Windows 2000 Support Tools中DiskProbe就是用这种方法直接读写物理磁盘的,包括可以读写0面0道0扇区,不过他用的对象是\.PHYSICALDRIVEx而已) 还有可以打开的对象包括管道(会用的人一定知道),文件(废话),Consoles(简单来说就是命令行界面),通信资源(例如COM1)。据说还可以打开内存,似乎是PHYSICMEM资源,记不得了。 以上资源的打开都有限制的,多数都比较简单,就是在打开时候使用OPEN_EXISTING标志。另外还有些当然的限制,例如光盘不能做为GENERIC_WRITE打开(我是没有试过啦,不过想也知道,光盘哪里能写。) 举例来说,这次我做的ISO镜像制作程序(ISO可以是光盘的按字节镜像),代码大致就是这样的。(以下代码都是伪代码,不要拿去编译哦。) GetLogicalDriveStrings(nBufferLength, lpBuffer); lpRootPathName=lpBuffer; while( lpRootPathName\[0\] ){ if(GetDriveType(lpRootPathName) & DRIVE\_CDROM ) break; lpRootPathName+=strlen(lpRootPathName)+1; }; if( !lpRootPathName\[0\] ) return -1; strcpy(RootPathName, "\\."); strcat(RootPathName, lpRootPathName); RootPathName\[strlen(RootPathName)-1\]=0; hFileCDROM=CreateFile(RootPathName, GENERIC\_READ,//我要做镜像,不是刻盘(不知道能不能刻) FILE\_SHARE\_READ, NULL, //你这个用户有访问能力就是NULL,没有自己去看API编程去 OPEN\_EXISTING, //必须如此,这个是打开光盘的限制条件 FILE\_ATTRIBUTE\_NORMAL | FILE\_FLAG\_OVERLAPPED, //交叠模式 0); hFileISO=CreateFile(ISOpath, GENERIC\_WRITE, 0, NULL, OPEN\_ALWAYS, FILE\_ATTRIBUTE\_NORMAL, 0); Overlap.hEvent=CreateEvent(NULL, FALSE, FALSE, NULL); do{ Overlap.Offset=...; Overlap.OffsetHigh=...; ReadFile(hFileCDROM, lpBuffer, BUFF\_SIZE, &NumberOfBytes, &Overlap); WaitForSingleObject(olRead.hEvent, TimeOut); if(!GetOverlappedResult(hFileCDROM, &Overlap, &NumberOfBytes, FALSE) ){ switch( GetLastError() ){ case ERROR\_IO\_INCOMPLETE: CancelIo(hFileCDROM); break; default: break; } //error } WriteFile(hFileISO, lpBuffer, BUFF\_SIZE, &NumberOfBytes, NULL); }while( 1 ); CloseHandle(Overlap.

搬家

May 26, 2005 - 1 minute read - Comments

今天蛮狼狈的,把学校的电脑搬回家来。先是高估了绳子的牢固程度,导致了搬运途中必须依靠手的力量来平衡电脑,而不是拎起来就好了。结果累的要死,甚至有的时候要在大庭广众下扛着电脑跑。后来又发现有个硬盘的螺丝没有敲。要死了,在机器里面逛逛狂磕,这个心疼啊……。最后发现带了电脑忘记带鼠标了,要用家里的破鼠标,学校里面的可是光电啊。 不过也有好事,搬的时候还是挺巧的。碰到一个初中同学,骑车到学校门口。正好顺风拉过去,省的走段路了。聊了聊,发现人家MM是去面试的……哎,自卑……想想自己学校不差,水平不差(虽然不是本专业水平),人品也不算太差。怎么就是找不到工作呢?(画外音:你根本没有找好不好。而且英语不好是你的原罪……) 昨天详细看了Witness2003的破解,感觉还是一样。写这个程序的人多数是个废柴。所有的函数全部打包到一起,没有任何保护措施,连壳都不加。判断非常凌乱,东一个西一个,虽然主要在一个函数里面,不过还有很多不是的。而且最让人鄙视的是,我连破解练习都过不去的水平,居然轻松拆掉了它的保护。由此可见,所谓的保护,其实就是告诉你,不能用,仅仅一个对话框而已。不过非常烦而已。 混帐的毕设终于开始了。其实程序设计不算难,一周的时间我构架和测试都做好了。还是一边看古田任三郎一边写的。不过……主核没做,算法不会。现在已经开始写程序设计说明了,发现其实说明比程序难写,早知道我当时写程序的时候就多写点注释好了。目前程序的每个节点已经非常像控件了,不过没有控件的事件驱动而已。各种操作界面也出来了,基本来说就这样了。看来赶上正常毕业答辩有希望哦。不过前提是我可以正常参加陈峰的考试……

关于未来计算机思考

May 16, 2005 - 1 minute read - Comments

我认为,将来的计算机可能向两个方向发展。一个是嵌入化个人化,一个是集中化。 首先可能出现某种移动数码核心,类似当前PDA的作用。不过在安全方面的使用要完善的多。他可以将手机作为外部设备加载,进行可视电话,或者身份认证,或者仅仅是看看电视上上网。 而后分布系统的发展将会使这个设备不仅仅成为安全认证的核心,而且成为个人电脑的一部分,携带机密数据和软件版权。而各个电脑会成为这个设备的外部扩展,毕竟键盘和屏幕很难随身化的。包括笔记本也可能成为这个设备的一个外部延伸。 而家中的所有设备(或者办公室的)都会集成微芯片,和某个中心连接并且统一规划。该中心在认证(那个核心哦)后接受控制。这样在生活和工作上,人们都依赖于这个核心上。 而在高性能计算和集成应用上,趋势表现为分布化。但是集成中心的负荷不断加重(或者说这才导致了分布化)。说明未来集成的解决也会成为一个热点。 而目前的个人电脑,可能会退化为核心设备的外延。利用强大的网络在一个集成化的设备上工作(分布式系统连接了核心和集成设备),这样对于设备的效率有很好的利用。

无题

May 16, 2005 - 1 minute read - Comments

今天心情不错,数码相机(姑且叫数码相机吧)到了。拿出去拍了N多东西,街道,美女,天空。我拍,我拍。啊,生活真美好。 刚刚想到一个问题,曾经在网络上看到一个文章,是在ring3如何运行ring0代码的。方法是利用Admin权限申请Token,访问DriverPhysicsMemory对象。而后修改进程表,从而隐藏自身。我刚刚突然想到,是否可以隐藏某个HANDLE呢?例如winsock HANDLE。或者直接注入某个sys去和网络连接。这样防火墙不就是一个废物了? 想想似乎可行,过两天找个机会做做看好了。呵呵,Kernel Debug真好玩。 另外想了一个问题,关于时空结构内在形成逻辑的考虑。我预期逻辑的成因是因为时空的特性。如果时空的特性变化就产生不同的逻辑。以因果律为例,如果静止的物体具备速度了。那么它必定被外力作用过。但是如果时空可以重组合,那么一个物体的加速未必存在动力原因。例如一个人留下一个可以穿越时空的方法,而后有人实现,将方法带到过去留下。如此组成循环,那么在未来会出现穿越时空的方法,但是却没有形成的原因。同理,目前的所有逻辑可能都是时空所造成的。如果逻辑不出错,则时空无法逆转。例如考虑超过光速会出现何等现象等等,首先推论的逻辑即无法使用。因为物体运动具备有限速度亦是时空的限制。 我们要假设考虑弯曲并且重新组合时空,则必须有两个条件。首先是存在第五维度,其次是时空可以黎曼形变,这样才有折叠回去的可能。假如时空交叉组合了。那么回到过去的反馈会产生什么效应呢? 我们假设时空的点状态在一个N维空间中,这个N可以无穷大。时空的状态就在N维中变化。时空的变化可能为三。 一个是耗散态,对过去的回馈在量级上等同于过去的量子不定性造成的热变化(布朗效应)。于是对过去的回馈不造成多余的结果。这个等于变性的时空流,没有对外的效应。说例子嘛,寻秦可能基于这个思路。 一个是稳定态,对于过去的回馈造成的结果阻碍对于过去的回馈。于是未来处在一个与原来不同的稳定状态。例如刚刚回到过去那个例子。 另外一个就是非稳定态,对于过去的回馈加大对于过去的回馈。除非时空在回馈中出现非线性的因素,否则如此回馈的结果必定导致未来的不唯一。换言就是没有一个稳恒的未来。例如一个人将金子带回过去,利用知识发财。则下次回到过去可以带更多的金子,等等等等。 不过实话来说,上述推论都仅仅为科幻推论。因为推理的基石,因果率在时空重组下即不成立了。所以一旦时空重组,会产生如何效应并非我们这些三维的人可以理解的。