Prever Start 开发笔记整理(5、6月)

这些记录一直睡在老QQ号的QQ空间里,鲜人问津,今天整理发布,以示纪念。

Prever逐步展开!2009年05月21日 08:34

经过一段时间的努力,前些天已经完成了Prever的预加载部分,跟后期的AIVOS雷同,也带有进度条。类库最后还是走了老路,当然,是实施上的,而不是规划上的。也就是用到什么写什么。干脆透露一点类库构思中很重要的成分,就是程序不用再自己写xmlhttp的一大片代码,实际上这个表达还不够准确,AIVOS里面已经自己写了个可以一个语句完成xmlhttp的函数,所以应该说现在规划的是几乎所有文件的读写和操作都通过Prever提供的函数完成,比如我有一个My.File类,可以提供文件的信息读取,删除,重命名等操作。这样以来,程序代码又能大大减少了,并且在安全上也更加有保障了。关于安全性,相较AIVOS有了很大的进步,比如现在储存登陆信息的位置在用户的文件夹中,而用户文件夹是和网站根目录并列的。不过Prever到目前已经抛弃了一个之前的构想,便是把任务栏作为一个程序,为系统添加钩子,后来想到大大增加了难度,便还是把任务栏放在了系统代码里…嗯,加油!

慎用JS中的for…in循环2009年05月21日 15:47

刚了解到这个东西的时候深深地觉得它是个好东西,但这个“好东西”却给我带来了很多莫名其妙的问题,又因为莫名其妙,花了很多时间才找出问题所在。第一个问题是其中的引索,比如for ( i in arr ),一直很自然地认为其中的i是数值变量(Number),一次,因为在我的一个函数中,有关于引索的加法,一次又一次的undefined让我脑袋都差点爆了,特别是用alert()检查明明一样的两个不同来源的数据总是有一组不对,一点一点排查,发现只有几个数据的数组出现了31的脚标,然后就懵了…一直在想它怎么出来的,最后终于弄明白原来那个引索的类型是String…极度无语…还有就是今天遇上的,firebug老是报”url.indexOf is not a function”,但我的url明明就是String啊,后来alert()出来就呆了,原来for…in把我给Array自定义方法也枚举出来赋值给url了…真是,本来还想图个便宜,结果倒失把米…不过还是怪自己没能很好的了解其性质…这也是搜索引擎式自学的弊端啊!

程序加载的问题2009年05月23日 23:08

在AIVOS里,程序都是要注册才能使用的,而且放置的位置也都固定了,所以,只要程序类命唯一,就好办了。但在Prever里,构想中是允许“绿色”程序的,而且程序可以随意地放置在文件夹里,这样以来,相同程序的两个版本便可能发生冲突。现在在想把脚本中的类命用特殊符号标记,在加载前替换为唯一名称,我觉得也是可行的,但比较麻烦。实际上,类似的方法已经在CSS文件的加载中用到了。Prever中,为了保证用户的信息安全,对储存空间进行了“分区”,默认是System:\和Disk:\,System中的文件因为可以通过http访问,所以仅用来存一些没有保密必要的信息,比如系统源码之类的,而Disk的路径可以设置来与网站根目录并列,这样就能避免没有权限的人查看了。但这样一来,CSS文件中的相对路径也就没有作用了,为了解决这个问题,在加载CSS之前对其中的url进行了处理。

窗口实现拖拽和大小调整2009年06月05日 23:20

昨天实现了窗口的拖拽和大小调整,和预期的一样,比较麻烦但难度不大,窗口可以通过左、左下、下、右下、右,五个地方进行调整。但是到目前为止,还没有处理细节,今天争取搞定,再把最大化这些做了就可以把窗口和任务栏操作连起来了。等到这些做完了,就可以开始程序的编写了,打算把文件图标专门做成一个类,然后把文件浏览做成一个控件,这样可以大大节约开发时间(前提是不计“控件”这个新类型的脚本的规划及实现时间,能够预计它的困难)。Prever的桌面功能将会比AIVOS强很多,所以实现也需要更多的时间和精力。对了,顺便说说Prever的应用程序,Prever的应用程序是一个以psp(Prever Script Program)为后缀的文件夹,里面有一个规定名称的信息文件,用于程序的初始化,之后,Prever会加载其中指向的脚本、样式表、以及图片,使用的是异步加载,不过还没有完善,打算还是边写程序边完善。突然发现在onmousedown之后return false在FF和Chrome就可以避免鼠标移动时选中内容,又省了不少代码,不过在IE上不奏效…明天继续加油!

原来顺序交换比想象中简单很多2009年06月07日 23:00

看来原来的担心仅仅是因为在开发AIVOS的时候没有遇到过,解决起来也没有想象中的复杂,不过,思维难度还是有的。与预期的一样,实现了层次的划分,窗口得到焦点也不会跑到级别高的上层去,只能在同级里呈现在最前面。还要实现浏览器窗口大小调整后的程序窗口位置调整。我猜这个问题很多时候都被忽略了,比如,一个窗口贴近右边,当浏览器窗口变小后,如果窗口位置不变,可能就被埋没了,也就是说,当某些条件不同时,位置的定位方式应该不同,以避免刚刚这种情况的发生。这个才真的有点麻烦,还要考虑到窗口显示不完等等情况,干脆先放一放…

Chrome也有window.event 2009年06月08日 23:54

原来还一直以为window.event是IE的专利,今天才明白原来Chrome也有,这下…今天把拖拽和大小调整封装了起来,方便以后的编程,不过大小调整还没有完全完成,现在还不能用,明天应该就可以了。觉得还不错,现在一句就可以实现让某个元素可以被拖拽。实际上,在原来写VB时想自己做个窗口样式,但不知道怎么进行拖拽,这次写把拖拽功能封装起来,就是为了方便想自己制作窗口样式的程序实现这个功能。还有,觉得在Chrome上运行JS简直就是一种享受,虽然学校的机子配置不敢恭维,但运行相对IE和FF都舒服很多。还有昨天发现IE渲染的一个小问题,不知道算不算一个bug,有空研究下,虽然没有什么太大的影响,但看着不爽…呵呵,看着Prever基本的架构一点一点完成,相信不久就可以开始写FileManager了,还在想先写这个好呢还是先写MyPrever(我的桌面程序名称)好,再说吧,窗口最大化和最小化都还没做好呢…不过猜想那个没什么太大的难度。加油,明天将会是充满激情的一天!

2009年06月09日 23:30

首先补充昨天写掉了的,搞计算机竞赛时学的算法终于用到一点了,那就是传说中最简单的DFS(深度优先搜索),还是用的递归算法,哎,都忘得差不多咯…然后,今天终于把两个类(拖拽和改变大小)封装完毕了,不过还不满意,明天继续改进。

2009年06月10日 23:35

今天完成了拖拽和缩放类的改进,增强了其扩展性,开始做最大化、最小化、还原等窗口调整。不过还在想最大化的实现方法,是基于现有的普通窗口呢还是重构一个框架呢?不过我觉得重构是不太现实的但如果直接基于目前的窗口,不知道效果如何。主要是边框处有点细节问题。睡啦…

2009年06月11日 23:42

什么错误最费时间?今天优化了窗体架构,但,几个小问题又费了不少时间。虽然没有完全解决,但看得到希望。如此以来,又方便了接下来的窗口最大化开发。不过有件事一直想不通,没有更改position,也没有float(父元素有),底下的div居然和上面的重起来了,而且Chrome和IE8都是…最后加了float解决,但,为什么呢?窗口这个东西,快点搞定你,好继续下一步…明天继续加油!

2009年06月14日 00:10

这个实际上应该算是6.13的,进度不错,完成了最大最小化,实现了窗口定位,横竖分别可以有左中右,上中下来定位,不过效果还不是特别理想,慢慢改进.
    注意了下EyeOS对于窗口变动的处理,结果就是,它根本没有处理…唉,细节决定成败啊!现在正在从最初的系统开发过渡到系统与程序并行开发了.不过还是在想,桌面上的图标要不要和FileManager共用一个类,希望今天能做个梦想清楚.
    虽然这两天的工作难度和复杂度都比较大,但因为主要是脚本,兼容性问题不大,加油!
    最后,说下自己的目标,要做”性能/年龄”比最高的PreverOS!

2009年06月16日 23:21

今天开始做桌面的图标显示,完成了图标排列等等,明天开始细化,不过在想排列顺序的问题,不知道难度如何。还好写的icon类有一个index属性用于定位,应该也不会太难。后面还会有个比较复杂但难度应该不大的地方,就是对图标关联的处理,还有鼠标事件的响应,不过AIVOS里也不是没有处理过,唯一的不同或许是Prever是一个真正的WebOS,对于管理能力要求高,所以虽然动起手来简单,动手之前的规划却是很棘手的。不过到目前为止,还是感到很欣慰的,AIVOS平台的开发其实没有用多少时间的,如果姑且把AIVOS当做一个WebOS的话,它便是重程序而非重系统,说白了AIVOS本身只有打开和关闭外加选项卡的功能,再就是提供了一些函数,所以就算把AIVOS说成只是一个有扩展性的文件管理器也不为过。Prever当然在这方面已经飞跃了,至少就目前投入在系统本身上的时间和精力就不能同日而语。加油!PS:“谁倒是赞助我一台好点的电脑啊,学校我用的那台太那啥了…”还有一个东西写漏了,为了方便icon的排序等等的批量操作,还专门写了个iconController类,鼓掌!

2009年06月17日 23:58

今天做了几个图标并开始规划程序和关联文件的“注册表”,最后还是放弃了xml,和程序引导文件一样,用了JS里对象的格式,这样便于赋值。初步设想是给每一个程序(以路径来区分)分配一个唯一的ID,然后文件再关联到这个ID上。AIVOS里有一个没有实现的设想,就是“打开方式”,希望在Prever中顺利过关!突然想起半年多之前,自己JS的最高体现也不过是无刷新提交信息罢了,连怎么实现类都不知道…还要谢谢AIVOS给我的飞跃,也期待Prever给我的飞跃!

2009年06月18日 23:49

今天实现了文件打开的关联和注册,不过应该还会改动,因为虽然实现了通过一定的方式注册,这种方式是否便于修改(因为之后要交给Prever,不能总手动操作),还要经过实际考验。相信不久就可以实现桌面的基本功能啦!

2009年06月20日 22:06

今天学习了下JS里继承的实现,并且在Prever中得到了实践。总体进度不错。因为要实现桌面图标,而图标被我分成了3种类型,每种之间有相同也有不同,于是就想到用继承了,效果不错。现在已经可以通过注册的扩展名和程序等分配图标和用指定程序打开文件,支持一个扩展名多个对应程序,可以设置默认,为以后的打开方式等做好了铺垫。虽然桌面上已经有图标了,也可以打开应用脚本和文件,但毕竟只是开始,路漫漫其修远兮…

2009年06月23日 22:39

今天突然意识到,已经很久没有用Firefox调试Prever,没想到今天Prever居然全线通过!可能一个原因是最近都是写JS多,而且原来也有一定的兼容经验了。然后已经开始做ContextMenu类了,AIVOS里也有一个菜单类,但是不支持多级,图标等,功能很基础,相信在进一步面向对象后,Prever会做得更好!加油哈!

一点发散2009年06月24日 20:25

今天实现了鼠标右键菜单,不过,还只是个空家伙,没有实质内容,风格有点像微软03年以后的右键菜单,左边支持图标。并且,这个菜单类是完全面向对象的,甚至细到了菜单中的一个选项。这样的好处便是,大大方便了开发和今后的使用。比如,我要添加子菜单,就只用调用对应选项的AddChildMenu()方法,参数是一个菜单类,相当好用。顺便介绍下Prever的皮肤功能。在AIVOS的后期,我还是勉强地实现了皮肤,由于之前没有规划,AIVOS的皮肤也实现得相当生硬。还有一点,虽然AIVOS可谓几近DIV+CSS,但却绝少使用CSS文件,CSS基本上都写进了style里。其实有了当初VNS网站的开发,CSS已经比较熟练了,但到了特殊的环境就要考虑可行度。从主观上我尽量避免使用iframe,这里就牵涉到了很多问题,比如重名啊,图片路径啊,等等。在AIVOS的大环境下,可以说是很难实现的,而Prever的架构却使之成为可能。在Prever中,我觉得有很多很有创意的地方,就不列举了。哦,回到皮肤,Prever有独立的皮肤文件,其中有一个名为Main.js的皮肤配置文件,用来配置皮肤将用到的脚本,样式表,图片等。样式表中的图片Prever在处理时使会自动预加载,不过需要加上[p:…]这样一个标签,因为Prever为了保证用户的信息安全,基本上是通过一个动态页面获取文件的,而路径采用了Prever专有的“绝对路径”,CSS文件又是动态加载到页面的,这样做在经过Prever处理后,实现了CSS中的相对路径。当然,主要是因为Prever中的一个新的理想,程序可以放在任意路径,皮肤也不例外。当然,这个理想就目前来看是实现了的。另外,对于Prever中的程序支持,可以说也是考虑的相当周到的,比如窗口支持多种定位方式,保证在浏览器窗口变化时,不同的窗口能回归到正确的位置,比如像迅雷一样的图标,在Prever中就可以使用RightTop的定位方式。更多的就不一一列举了。啊,打了好多,告一段落先。

2009年06月25日 20:31

今天开始做菜单类的多级部分,虽然技术上难度不大,但细节相当多。比如什么情况下打开、关闭菜单,用什么事件,等等。希望进度能快些!

2009年06月26日 19:47

啊,终于基本搞定了ContextMenu类,虽然完成度尚未100,但后来就没什么难度了,因为主要的定位和多级菜单都实现了,提供的定位方式分两大类,七小类。两大类指鼠标定位和元素定位,鼠标定位只有一种,元素定位有六种,分别是ElementLeft,ElementRight,ElementTop,ElementBottom,ElementRightOrLeft,ElementLeftOrRight。给自己鼓下掌!其中那个Or实际上表示一个优先顺序。如果前一个不满足要求,一般是指超出了窗口范围,就使用第二个。我要继续奋斗啦,争取把今天把菜单完全完成,然后开始又一个我讨厌的东西,规划菜单的注册项,并实现…

2009年06月27日 20:28

今天算是值得纪念的一天,早上加中午加一节晚自习,我终于把从注册文件中读取信息并放进一棵树的代码在草稿本上写出来了,当然,包括了规划的时间。明天去看看能用不,要是可以,就开始写创建这个结构的菜单的函数啦,加油!

2009年06月30日 23:39

终于,终于,菜单部分正在逐渐成熟,可能明后天就能真正完成了。为自己鼓个掌先。然后,今天发生了一件很神奇的事情,闲着无聊,我把备份在手机上的Prever解压出来了,然后无意间打开了prever.htm这个页面,然后无意间看到启动界面的进度条动了起来!只能说明两点,一个是Nokia的浏览器不错,一个是我写的东西不错,呵呵。不过后来需要有服务器端,在手机上我就看不了了,有机会一定试试!