统计Dreamweaver当前站点的代码行数

2010 二月 9
作者: Luin

自己辛辛苦苦写了一堆PHP代码,想统计一下自己到底写了多少行代码然后装逼向别人显摆一下怎么办呢?Dreamweaver作为一个可视化网页开发工具似乎对代码行数并不感冒,它只会在编辑器中显示行数。当然如果你愿意,可以打开每份文件然后用计算器把行数们加起来。

还有更好的方法。

利用Dreamweaver的查找功能,打开它的“使用正则表达式”选项,这样我们只要统计处换行符的个数就能知道行数了(不要纠结最后一行根本没有换行符)。

如果你担心自己的工作量因为空行被夸大的话,可以把\n改成.+,这样只会统计有内容的行,而且也不会忽略掉最后一行。

用jStore代替Cookies实现客户端存储

2010 二月 7
作者: Luin

开发网站时有时需要把一些数据存储到客户端,一般来讲我们都会使用小甜饼(cookies)来完成这一操作,但是小甜饼不一定总是很好吃:

  1. 每个cookies的大小不能超过4096字节。(没关系,我只存很少东西)
  2. 浏览器一般至多允许每个网站使用20个小甜饼。(浏览器是不接受过度贿赂的)
  3. 一些严厉的浏览器要求所有网站总共的甜饼数不能超过300个。(存cookies都得拼RP)
  4. 最好玩的:小甜饼不能跨浏览器!(好吧,我受够了…)

于是,有些场合cookies便无法满足要求了。

幸运的是,客户端存储还有更多更好的解决方案!

  1. UserData : 只支持IE 7,Cool吧 -_-!
  2. Google Gear:支持所有你找得到的浏览器!但是你得安装Google Gears…
  3. Flash:同Google Gear,只不过装Flash插件即可
  4. HTML5提供了一些本地存储方案,但…别指望了

从上面来看比较好的解决方案应该是Flash了,很少有浏览器不支持(安装)flash。

jQuery的jStore插件则提供本地存储的支持。

下面来个示例(YUI也提供了类似的插件):

我们要实现的功能是一个投票系统(为了简化问题,PHP将不会出场:-( ),对于某个技术,用户可以选择自己的级别(想学、菜鸟、老鸟),选择后将无法再次选择。

HTML代码:

...
<script src="lib/jquery.js" type="text/javascript"></script>
<script src="lib/jStore/jquery.jstore-all.js" type="text/javascript"></script>
<script src="custom.js" type="text/javascript"></script>
...
 
<div id="votes" class="votes-php">
        <a onclick="return vote(1);" href="/">想学</a>
        <a onclick="return vote(2);" href="/">菜鸟</a>
        <a onclick="return vote(3);" href="/">老鸟</a>
</div>
...

其中href链接应该指到一个可以投票的php链接以防止用户的浏览器不支持javascript(而我的方案是对于不支持javascript的浏览器便不允许投票)。

custom.js

//当前技术
var tech;
// First, we must tell jStore where to find the HTMLfile which embeds our flash script.
// If you move the jStore.swf or jStore.Flash.html files out of their default directories (document root),
// use this variable to define where to access the .html file. Within the .html file, you can set up the
// path to the .swf file.
// Then, set up the default engine we wish to use.
jQuery.extend(jQuery.jStore.defaults, {
	project: 'Luin-Demo',
	engine: 'flash',
	flash: '/scripts/lib/jStore/jStore.Flash.html'
}) 
 
// Next, we need to wait for jStore to prepare the storage engine
jQuery.jStore.ready(function(engine){
	jQuery.jStore.flashReady(function(){
		// Finally, we need to wait for the storage engine to be ready.
		// Once this function is called, you can use the jStore interface synchronously
		engine.ready(function(){
			var engine = this; 
 
			tech = $('#votes').attr('class').replace('votes-', '');
 
			var hh = engine.get(tech);
			if(hh) {hideVoteCdLink(hh);}
		})
	})
});  
 
// Finally, we trigger jStore's load function. This is a new step in the
// activation procedure of jStore, since Version 1.1
$(function(){
	//!!!
	jQuery.jStore.load();
}); 
 
function vote(v)
{
    //$.get('/technology/mark?type=nd&amp;t=' + tech + '&amp;value=' + v);
    hideVoteCdLink(v);
    jQuery.jStore.set(tech, v);
	return false;
}
 
function hideVoteCdLink(v)
{
	var cd;
	if(v == 1) cd = "想学";
	else if(v == 2) cd = "菜鸟";
	else if(v == 3) cd = "老鸟";
	$('#votes').html(cd + ' , <a onclick="return changeVoteCdLink()" href="#">修改</a>');
}
function changeVoteCdLink()
{
	$('#votes').html('<a onclick="return vote(1);" href="/">想学</a> <a onclick="return vote(2);" href="/">菜鸟</a> <a onclick="return vote(3);" href="/">老鸟</a> ');
	return false;
}

这样可以看到,用户使用Firefox投票后,再用IE看也是投票后的样子,解决了!(注意JS代码中的//!!!处,如果客户端不支持flash的话,jQuery.jStore.load(); 会抛出异常,你应该try/catch一下并做处理(比如不允许投票或提示安装flash(如果是iPhone的话…) ) )

当然,这只是个没有使用价值的demo,没有数据库就没有一切。

jStore的官方网站:http://eric.garside.name/docs.html?p=jstore

晒一下惨痛的分数

2010 二月 5
Tags: ,
作者: Luin
成绩单

成绩单

最后两门语文和航概连续破了最低分记录,唉,小学时还是语文课代表呢…不过总体上还算OK

最近的网站架构已经做好了,预计不久就会出现在luinlee.com的实验室页面,届时欢迎围观.

Pages 3 of 141234510...末页 »