JS混淆软件推荐

这次做的这个游戏,需要将代码混淆,到网上搜了一些混淆工具,有在线的,也有桌面的,不过多数都会害死我的JS,可能是因为我喜欢用一些特殊(其实也比较常见)的写法,而这些工具都还不够完善。

后来找到了JSA。JSA是jar应用,所以需要JAVA的环境。使用非常简单,将脚本复制到JSA的文本框,在顶部菜单栏选择“操作”>“压缩”,在弹出的窗口中设置好,确定即可。

下载地址:http://sourceforge.net/projects/jsintegration/files/

注意下载的时候选择All Files下方tools中的JSA而不是上面的JSI。

JS圆形碰撞算法的探讨及实现

也是做同一个东西,碰撞是又一个关键,受限于JS的执行速度,我们必须考虑CPU的承受能力。因为有这个想法,我一开始的思路是通过数学计算得到一个式子,用于求碰撞的位置,但是,当我假设运动是匀速直线时,得出来的是一个以时间t为未知数的一元四次方程,能解,但是很长很悲壮。更不要说匀加速运动了。

现在连续的数学方法走不通,就只有搜索,因为最终会表现到网页上物体位置的变化,而这个过程会消耗大量的资源,如果让搜索密度较大,并且每次搜索都向页面反馈的话,恐怕CPU承受不了,如果降低搜索密度,又会降低搜索的精确程度,最终影响碰撞的效果。于是,将其折中,搜索一定次数后,向页面反馈一次,这样一方面提高了精确程度,一方面也减小了CPU资源消耗。

这样一来,在哪里碰撞就变得很容易得到了,接下来的问题就是碰撞后物体的方向,和速度的大小。高中物理经常遇到两个物体对撞的问题,其实这里也大同小异,不过首先要做的,是将速度分解为沿两圆圆心连线方向和与该连线方向垂直的分速度,根据两分速度(矢量)相加等于合速度,还有到角公式tanα = (k1 – k2) / (1 + k1k2),可以算得分速度。

这时候,需要进行处理的就是圆心连线方向的分速度了,根据物理的动量守恒和能量守恒,可以算得碰撞之后的相应速度,最后,和与圆心连线垂直的分速度相加,即可得到碰撞后的速度(矢量)了。

上JS,这个是我用来计算碰撞后的速度的,里面有些东西没有上下代码,所以不能运行,仅供参考。

//获取相关数据
var p1 = c1.p, p2 = c2.p; //获取位置(坐标)
var v1 = c1.v, v2 = c2.v; //获取速度(矢量)
var m1 = c1.m, m2 = c2.m; //获取质量
var x1 = p1.x, x2 = p2.x, y1 = p1.y, y2 = p2.y; //位置坐标
var vx1 = v1.x, vx2 = v2.x, vy1 = v1.y, vy2 = v2.y; //速度

//计算两个圆圆心连线的斜率
var k;
var dx = x1 – x2;

//判断斜率是否存在
if (dx) k = (y1 – y2) / dx;
//如果不存在,则去尽可能大的值
else k = kmax;

//**速度分解

//*第一个圆
//圆心连线方向的分速度
var vox1 = apart(vx1, vy1);
var voy1 = vox1 * k;

//与连线方向垂直的分速度
var vpx1 = vx1 – vox1;
var vpy1 = vy1 – voy1;

//*第二个圆
//圆心连线方向的分速度
var vox2 = apart(vx2, vy2);
var voy2 = vox2 * k;

//与连线方向垂直的分速度
var vpx2 = vx2 – vox2;
var vpy2 = vy2 – voy2;

//碰撞后与连线方向垂直的分速度不变,连线方向的分速度变化
var vox1a = calculateV(m1, m2, vox1, vox2);
var vox2a = calculateV(m2, m1, vox2, vox1);

var voy1a = calculateV(m1, m2, voy1, voy2);
var voy2a = calculateV(m2, m1, voy2, voy1);

//重新复合速度
v1.x = vox1a + vpx1;
v1.y = voy1a + vpy1;
v2.x = vox2a + vpx2;
v2.y = voy2a + vpy2;

//告知动量变化量
var dp1 = sqrt(sqr(vox1a – vox1) + sqr(voy1a – voy1)) * m1;
var dp2 = sqrt(sqr(vox2a – vox2) + sqr(voy2a – voy2)) * m2;

c1.collideCallBack(dp1, c2);
c2.collideCallBack(dp2, c1);

//分解出与圆心连线方向的分速度的x方向速度
function apart(vx, vy) {
return (k * vy + vx) / (sqr(k) + 1);
}

//根据动量和能量守恒计算速度变化
function calculateV(m1, m2, v1, v2) {
return ((m1 – m2) * v1 + 2 * m2 * v2) / (m1 + m2);
}

弹跳曲线算法

这个是做某JS游戏时遇到的第一个问题,如何生成一个相对符合物理规律的弹跳曲线呢?

现在假定我们有一个物体的初始位置和速度信息等,首先需要做的,就是计算出相应的抛物线。高三课本中讲到的导数在这里就得用上了。


y = ax2 + bx + c

则有
y’ = 2ax + b

设物体的初始位置为(0, h),初始速度水平和竖直方向分别为vx、vy,那么,当x = 0时,我们列出以下方程
h = c
y’ = b = vy / vx

然后在物理上,有
s = at2 / 2
s = vt

在本例中(当物体还没有着地时),即有
y = h + vyt- gt2 / 2
x = vxt

带入之前的方程,有
h + vyt – gt2 / 2 = a(vxt)2 + bvxt + h

解得
a = – g / 2(vx)2
b = vy / vx
c = h

那到此最关键的部分就完成了,然后通过
x2 = (b – √(b2 – 4ab)) / 2a
可计算得落点的位置,通过累加x,可以将这三个解扩充。

下面附我写的JS类
//速度类
function Speed(x, y) {
this.x = x;
this.y = y || 0;
}

/******** 通用函数 ********/

//剩余速度比例
function Remain(x, y) {
this.x = x;
this.y = y;
}

//平面路径
function Route(speed, height, gravity, remain) {
var v = copyObject(speed);

var a = [], b = [], c = [];
var vX = [];

var lastX = 0, lastT = 0;
var lastH = height;

var xAreas = [], tAreas = [0];

var xByT = [];

for (var i = 0; ; i++) {
var aI = a[i] = -0.5 * gravity / sqr(v.x);
var bI = b[i] = v.y / v.x – 2 * aI * lastX;
var cI = c[i] = lastH – aI * sqr(lastX) – bI * lastX;

nowX = (-bI – sqrt(sqr(bI) – 4 * aI * cI)) / (2 * aI);

xAreas.push(nowX);

lastT += (nowX – lastX) / v.x;
tAreas.push(lastT);
vX.push(v.x);
xByT.push(lastX);

if (nowX – lastX < 1) break;

lastX = nowX;

v.x *= remain.x;
v.y = -(2 * aI * lastX + bI) * v.x * remain.y;
lastH = 0;
}

var xAreaI = 0, tAreaI = 0; //为了减小比较数量,此值会在必要时累加.

//通过x坐标获取高度(y)
this.getHeightByX = function (x) {
while (x > xAreas[xAreaI]) xAreaI++;
return a[xAreaI] * sqr(x) + b[xAreaI] * x + c[xAreaI];
};

//通过时间获取坐标
this.getPositionByT = function (t) {
while (t > tAreas[tAreaI + 1]) tAreaI++;

var x = xByT[tAreaI] + vX[tAreaI] * (t – tAreas[tAreaI]);
var y = this.getHeightByX(x);

if ((x !== 0) && !x || (y !== 0) && !y)
return null;
else
return { x: x, y: y };
};

this.reset = function () {
xAreaI = tAreaI = 0;
};
}

function copyObject(obj) {
var newObj = {};
for (child in obj)
newObj[child] = obj[child];
return newObj;
}

function sqr(n) {
return n * n;
}

function sqrt(n) {
return Math.sqrt(n);
}

Prever Start 开发笔记整理(7、8、9、10月)

2009年07月01日 23:50

今天遇到一个很棘手的问题,开始做“Prever菜单”,类似于“开始菜单”,当然,根据规划,它也是一个程序,不过在关闭菜单的时候,如果后面有程序,会出现死循环,郁闷…而且不像一般的错误,一下就可以找到,这个还要逐句去分析…最那啥的是,因为上一次写那一段代码已经是很久以前了,都忘得差不多了…明天继续想!还有就是生成菜单的时候,会处理信息树,之前都忘了,突然发现按一定顺序点开菜单会出现不同的现象…才意识到是改动了信息树,于是写了个深度复制(类似于深搜),每次生成菜单前先弄一个副本出来,这样就避免了问题,但效率就…鱼和熊掌啊…

反思,大改…2009年07月02日 16:17

今天又一次看了下OOS,也是一个网页操作系统。见www.oos.cc。原来就听说它有个开发程序,今天看了下,程序本身到没什么,但它的默认的代码给了我不少启发,所以决定暂停Prever的开发,好好反思下,改善规划,大改一次!其实我猜也花不了多少时间,毕竟Prever还在前期,啊,幸好还在前期…

2009年07月15日 19:47

桌面功能已经恢复了,接下来要继续改普通窗口,这个比起桌面的窗口来要复杂多了,希望早点改完,然后就改ContextMenu类,然后就基本完成了?或许吧?改完了就专心开发接下来的东西,不过,先后顺序还没有想好…

2009年07月21日 16:37

这多天经过努力,终于让Prever的窗口重新出来了,这也意味着大改的窗口部分(这次大改的核心)终于要告一段落了,不过从外观上看起来,和以前是一模一样的…哎,忍了,我现在深刻地相信着,有了这次大改,以后会方便很多。不过那天把时间列了下,才发现暑假20来天可能根本不够,也就是以后的午觉又泡汤了…都是那些教育部的…让我高呼,还我暑假!还我暑假!还我暑假!

2009年07月24日 09:12

昨天更改了任务栏选项卡的一个东西,就是当选项卡较多时的处理,原来使用的是滚动显示,因为主观上觉得通过改变宽度(类似于Windows)实现可能比较复杂…但昨天下决心改了之后,才发现简单了不晓得多少…郁闷…不过发现了一点小问题,就是当上面的窗口关闭时,下面的窗口有时没有获得焦点,争取今天解决…然后窗口部分还要弄子窗口和父窗口抢焦点的功能,不过想来难度不大,加油!

2009年08月01日 16:34

把My.Element.Icon.Container的排序基本写好啦,真的可以说是功能惊艳!支持横纵优先,左右优先,上下优先,而这个功能的第一个试用者,就是Prever.FileManager控件。这个控件的第一个试用者呐,就是FileManager了。实际上我猜想,给网页操作系统里的程序加控件这个概念,还是第一次吧。加油,这两天有点颓废,感觉没有寒假状态那么好,得加快进度了!

2009年08月03日 00:32

昨天的状态不错,不久FileManager的浏览功能就可以实现了,加上Icon类及其辅助类Icon.Container强大的功能,更换显示模式就很简单啦。这个做完了就是它的文件操作功能与扩展,这些大多工作是在后台,AIVOS也写过了,所以进度应该会很快。今天起来继续加油!

2009年08月05日 01:00

昨天主要在做文件管理,进度还是不理想,中途牵涉到一个范围比较大的改动,耗时有点多,都怪自己一开始没有想周到…还有一点,因为核心是一个控件,所以在保证满足当前连带开发部分需求的同时,要为以后的不同需求的调用做准备,这点我想是最麻烦的了…而且因为这部分连带了三个地方,所以弄起来相当麻烦。完了…刚刚脑袋里又蹦出来一个念头…难道今天又要大改?天哪…希望不会花费太多时间。

2009年08月30日 09:54

这段时间在做文件选择器,之后是文件夹选择器,不过除开Prever,心里有了一个更加宏伟的计划,而且,设想中的Prever II的开发和这个计划有相当大的关联。不过还是有些遗憾,Start因为抢时间,在有些地方还规划得很不完善。虽然已经相当神奇。但话说回来,就像这个版本的代号一样,Start,只是一个开始,它的开发经验将会给II更多的积淀。而Prever II,作为第一个享受我下一个计划的项目,又会为我计划中的产物积累宝贵的经验,至于这个计划到底是什么,就暂时不透露了,呵呵。不过计划再好,也高三了,接下来近一年的时间肯定是没办法进行了的,打算到了大学组个团队一起做。但…大一JS有我这水平的我想也难找…郁闷。

2009年09月09日 17:42

经过一个又一个中午的战斗,终于把文件选择控件写好了。支持设置多种文件类型,和多选、单选模式。功能简单,但是比较实用。已经应用到了图片浏览器上,但是遇到了一点小问题,明天争取解决。其实今天中午效率多高的,一般我是12点40的样子到,14点走,今天把那个做了我看到都50多分了,就回了教室,结果发现一个人也没有,然后回过来看时间,才13点…郁闷…接下来按理说应该先做文件夹选择控件,但决定先放下。呵呵,做些实用的小东西。主要还是时间不够…哎…

2009年09月10日 17:56

问题解决了,还是细节。Window类里面初始化的时候没有给IsMinimized赋值为false…平时到是看不出问题的,因为undefined转换为boolean也是false,但我有个地方判断了是否等于null,然后就…接下来是做文本编辑器还是做桌面日历呐?

2009年09月17日 09:13

想到前段时间解决的一个问题。我的图标排列不同的图标边距不同,很长一段时间来看到我的FileManager里的图标本来应该有边距,却没边距了,有时又刚刚相反。但长时间以来以为是浏览器的BUG,也就放了一放。终于,当我下决心要解决的时候,才发现…是有关边距的一个变量我忘了声明,被当成了全局函数…哎,要更加细心啊!

2009年09月20日 09:26

前两天把日历的颜色由灰色改为了蓝色,生气了许多。然后偷了下懒,做了个文本浏览器,就暂时放放文本编辑器了。只有10天中午的时间了,考虑做下在线解压,必须把我的右键菜单利用起来,当时写了那么久…然后再写个简介和伪SDK,还有示例程序。我在想那些评委些看不看我的代码啊,还是就点几下鼠标?不过话说还有一件很巨大的事情,我的Prever菜单(类似“开始”)还有快捷菜单还是空的…右下角的状态栏也没动…算了,忍了,这10天抓紧,能做多少做多少…

2009年09月23日 09:41

昨天把文件解压做了,因为赶时间,做得比较简陋,没办法…但至少让我的带图标的多级菜单没有白写。只能解压ZIP的,不过也够用了。

2009年09月24日 23:02

今天搞定了桌面背景的设置,但加上图片后才发现原来黑色的图标字体很不清楚,于是要考虑加影子咯。IE我加了3个shadow的filter,就为了把文字包围起来,然后刚刚Wait提醒了我,是不是可以考虑用文字发光?呵呵,还是我太死了。不过text-shadow不知道怎么实现那种环绕的效果,明天查下。嗯嗯,明天可能是最后一天在学校做Prever,然后回家还可以奋战两三天,加油!

2009年09月29日 09:49

有个窗口小问题Franky貌似在暑假就提过了,不过一直没处理,直到昨天Wait再提,我才决定弄一下…结果又一次比想象中简单无数倍…发现自己总是喜欢把复杂问题想简单,把简单问题想复杂…哎。

2009年10月05日 23:00

从今天起,摸电脑的时间就很少了,不过还是决定把睡觉前的时间拿来把《JavaScript高级程序设计》看了,不能半途而废。觉得这本书讲的东西比DOM那本对我有用,呵呵,谁叫我学的不系统呢。嗯,继续看书咯,看一会儿睡觉去!

后记:在后来的时间中,断断续续有一些小改动,譬如添加了文本编辑器,Flash播放器,还有添加了又去掉了的音乐播放器,URL文件等等,很多都是在网吧里完成的。之前还有小机房可以供我使用,但随着小机房被清空,我的周末也便只能耗在网吧了。从开始到现在,已经一年多了,Prever Start让我收获了很多,而我也坚定地相信,正如它的名字,这只是一个起点!

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的浏览器不错,一个是我写的东西不错,呵呵。不过后来需要有服务器端,在手机上我就看不了了,有机会一定试试!

PHP 5.3安装WordPress出现Deprecated错误及其解决办法

环境:Win 7 +EasyPHP( PHP + Apache + MySQL )

这两天开始学习PHP,好不容易终于连上数据库了,准备开始做WordPress的主题,安装好WordPress之后,又报Deprecated错。

其中一个是 “Deprecated: Assigning the return value of new by reference is deprecated in xxx”,通过Google搜索,在 http://www.liuhuadong.com/archives/904/index.html 找到了解决办法。原因是PHP5.3中弃用了(deprecated)“=&”符号,现在找到相关行,把“=&”修改为“=”即可。

然后第二个问题是“Deprecated: Function set_magic_quotes_runtime() is deprecated in xxx”,也是通过Google,在 http://www.boonex.com/unity/blog/entry/Function_set_magic_quotes_runtime_is_deprecated_in_PHP_5_3_0 找到了解决办法。原因是相关函数被弃用,所以在相应位置修改即可。找到 set_magic_quotes_runtime(0); ,在前面加上@,改为@set_magic_quotes_runtime(0); 即可。

貌似一些朋友也用的PHP 5.3,但是没有报错,猜测可能是配置的问题,有的配置比较宽松,有的比较严格,不过还是从严的好!

调子

前两天终于把这个调子用Guitar Pro 5.2弄出来了,不过比较单调.

这个调子大概有2年历史了,不过不排除是潜意识里根据原来听过的调子弄的,虽然我不知道.就当是原创的吧.

高考前一天的趣事

首先是一个同学给我们讲的。
此同学以傻笑著称,今天他所在考室的老师在核对时,看看照片,再看看他,说:“怎么不像呢?”然后此同学立马咧嘴傻笑,老师若恍然大悟,连声道“像了像了!”

然后因为我们学校在考区是最好的,老师嘱咐我们,如果有人问我们是哪个学校的,不能如实回答。此同学(记作A)和年级上成绩很好的一个同学(清北种子,记作B)同一考室,与另一个女考生(记作C)发生了内容大致如下的对话。
C:你哪个学校的?
A:反正很烂啊!
C:那你能考好多分嘛?
A:200多嘛(满分750)。
C:(转向B)你哪个学校的?
B:我们老师说不能说…(汗死)
C:到底哪个学校的嘛!
A:(插话)他跟我一个学校的。
C:你就直接说你哪科最好!
A:200多分就考个专科学校,你自己加一下哪科好嘛…
C:…

另外收到同学的短信,括号内为我的评价:
下面跟我念:
全部科目我已做好复习(这不自欺欺人么);
正常发挥我充满信心(我很清楚这是概率问题);
难易无所谓,上天会眷顾我(抱歉,我无神论者)。

最后之前两个同学从某人身旁走过,一个指着某人腿上的书说:“这个就是抱佛脚型的。”然后另一个说:“不是,他明显在耍手机。”说罢他用手拿开某人腿上的书,嘿,Bingo!

高考1天倒计时

坐在教室,听着歌,大腿上放着语文名句名篇,教室前的挂牌上显示着室温:23℃,穿着白色、单薄的长袖,有一丝寒意。手机和手放到了书下,明天的这个时候,已经是语文考试了。
两天,谁知道会发生什么。
愿一切安好。