menu

为PHP增加SVN扩展

这次涉及到一个网上资料很少的问题,PHP的SVN扩展。
windows平台下,最简单的php服务器搭建无疑是xampp。但是当前版本的xampp(1.7.3)并不带有svn的扩展,即php_svn.dll。从版本更新中得知2009.1.23的xampp做了如下的变化:

23. Jan 2009 1.7.0 pl1 beta3 
Delete php\ext\php_svn.dll 
Delete php\php5.ini 
Delete mysql-gui-tools-noinstall-5.0-r15 
New build xampp-control.exe 
Patching phpMyAdmin\main.php (305-318)

也是在这个版本开始,xampp移除了对svn扩展的支持。

Read more... »

滑动展示窗

这段短短50行的JS滑动窗效果,算是我的第二次JS编写(2009-04-06)。最后作为了毕业论文网站的一个小插曲。

122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
<script type="text/javascript">
	var currentTab = "tab_1";
	var widthUnit = 670;
	var maxTab = 7;
	function srollArrow(direction,scrollSection){
		if(direction=="left"){
			if(currentTab.split("_")[1]=="1"){
				nextTab = "tab_"+maxTab;
			}else{
				var nextTabNum = parseInt(currentTab.split("_")[1])-1;
				nextTab = "tab_"+nextTabNum;
			}
			scrollTab(nextTab,scrollSection);
		}else{
			if(currentTab.split("_")[1]==maxTab){
				nextTab = "tab_1";
			}else{
				var nextTabNum = parseInt(currentTab.split("_")[1])+1;
				nextTab = "tab_"+nextTabNum;
			}
			scrollTab(nextTab,scrollSection);
		}
	}
	var moveManager = {begin:0, end:0, change:0 ,finalPos:0 , time:18.0, limit:8.0};
	function scrollTab(tabName,scrollContent){
		if(currentTab == tabName){
			return;
		}
		lastTab = currentTab;
		currentTab = tabName;
		document.getElementById(currentTab).className = "active";
		document.getElementById(lastTab).className = "inactive";
		moveManager.begin = parseInt(lastTab.split("_")[1]);
		moveManager.end = parseInt(currentTab.split("_")[1]);
		moveManager.change = (moveManager.begin - moveManager.end)*widthUnit;
		moveManager.finalPos = -(moveManager.end-1)*widthUnit;
		oScrollContent = document.getElementById(scrollContent);
		nowLeft =  parseInt(oScrollContent.style.left);
		move();
	}
	function move(){
		if(moveManager.time<=moveManager.limit){
			oScrollContent.style.left = moveManager.finalPos + "px";
			moveManager.time = 18.0;
			return;
		}
		nowLeft += parseInt(moveManager.change*1/moveManager.time);
		moveManager.time-=0.9;
		oScrollContent.style.left = nowLeft + "px";
		setTimeout("move()",15);
	}
</script>
Read more... »

JavaScript菜单抖动

挖出了一些很怀念的代码。
这是一段我最早写的JS代码,大概时间是一年半以前的事了,实现的是一个菜单抖动的效果。看看这些代码,总是能回想起刚开始写JS时的兴奋之情。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<script type="text/javascript">
	var currunt=0
	function dis(menu_number){
		currunt=menu_number;
		width=30;
		speed=5;
		positionX=0;
		preSpeed=0;
		flag=1;
		document.getElementById("content"+menu_number).style.display="block";
		hidRest(menu_number);
	}
	function hidRest(menu_clicked){
		var MENU_LENGTH=6;
		for(i=1;i<=MENU_LENGTH;i++){
			if(i!=menu_clicked){
				document.getElementById("content"+i).style.display="none";
			}
		}
	}
	function shake(){
		if(flag==1){
			speed=1-speed*0.8
			positionX+=speed;
			positionX-=preSpeed;
			document.getElementById("d"+currunt).style.left=positionX
			if(Math.abs(speed)<1.0){
				document.getElementById("d"+currunt).style.left=0;
				flag=0;
			}
			preSpeed=speed;
			setTimeout("shake()",50)
		}
	}
</script>
Read more... »

关闭WordPress的post revision特性

WordPress从2.6开始就多了一个比较烦人的特性,就是 post revision 。这个特性使得作者可以回顾每次更新的文章内容,可以回滚到之前的版本。这对于多人作业的博客系统来说非常有用,但是对于单独作者的个人博客来说,显得非常无用。最糟糕的是,每次还会在wp_posts中添加新的记录,如果修改的很多的话,不一会,就会让整个数据库充满revision,而那些恰恰可能是毫无用处的。

Google后从Lester的博客上找到了解决方法,虽然还有很多其他方案,但是Lester给出的办法很有效。
要关闭post revision特性,只要在wp-config.php中加入如下行:

define('WP_POST_REVISIONS', false);

同时他还提供了删除多余revision数据的SQL语句:

1
2
3
4
5
DELETE a,b,c  
FROM wp_posts a  
LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)  
LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)  
WHERE a.post_type = 'revision'

在执行前先备份数据库。

这样一来,数据库干净了许多,revision不会再生成,但autosave仍然有效。
在Lester博客的评论里我还看到有WP-CMS可以关闭这个特性,并提供更多关于wordpress接口的控制。

Moose File System(MFS)

FMS是一个网络分布式文件系统。它将物理的本地化(Server)数据以单个的资源呈现给用户。对于标准文件操作来说,MFS表现的和其他类Unix文件系统一样。它有层状的结构 (目录树), 存储了文件的属性(权限,最后访问和修改时间),并且能够创建特别的文件(块以及字符设备,管道和套接字), 符号链接(文件名指向其他本地的可访问的文件,不是MFS必须的)和硬链接(一个文件的不同名称指向MFS上的同一数据)。

Read more... »

LVS:Ubuntu基于IPVS LVS-DR模式的简单配置

Linux Virtual Server (LVS),此文是我学习LVS之后一个初步的简单配置的过程。
这真是一个相当复杂的集群系统,至少在我看来是这样,初次接触的话还要补充繁多的网络术语和以前一直一知半解的名词。其长达数百页的全英文的HOWTO,比起qmail更加让人头疼。qmail况且有中文的《life with qmail》可以用来入门,至少解决了许多的特殊的名词。

Read more... »

mx:WebService导致的浏览器崩溃

这算是回头去记录一些以前遇到的问题。在一个视频监控的项目里,忽然在调试的时候出现浏览器常常崩溃的情况。而且一旦崩溃后就调试不能。但是项目编译确没有问题,swf文件照常生成,打开相应网页也能在浏览器中正常工作,唯独不能调试。不论使用IE还是FF都出现同样的问题。

Read more... »

Hello world!

第一篇文章总是要有些来龙去脉,就如同第一个程序总是要来个Hello world!一样。
以前不止一次搭建过wordpress,但最终都宣告失败。原因多种多样,忙碌者有之,兴尽者有之,或者,无墨者亦有之。但终究是不想放弃的。
过去的几年,学了很多,但都疏于梳理,以至荒废。
VB C C++ Java C# XHTML+CSS JavaScript PHP ActionScript Ruby Perl
Photoshop Flash Fireworks Illustrator CorelDRAW AutoCAD 3DsMax Maya
渐行渐远的内容,以及愈发冗长的行径线路,都充斥着迷惑。当再次回首时忽然有一种冲动,摘记、梳理、铭记,一路走来,挺有趣的。

1
2
3
4
5
6
7
/*C programming language*/
#include <stdio.h>
int main()
{
	printf("Hello,world!\n");
	return 0;
}
Read more... »