2008年6月17日星期二

小议“范跑跑&郭跳跳事件”

前段时间范跑跑事件炒得相当的热,但是我一直没有关心,今天上网查了下事件的经由,并看了凤凰卫视一虎一席谈相关话题视频,了解了个大概。
说实在的,我还是挺支持范跑跑的,觉得他当时是在暂时失去理性的情况下自行先跑的。事后将这"有违伦理"的想法写成文也相当有勇气,道歉真诚而毫不让步。觉得范跑跑有点鲁迅的风格。

至于郭跳跳,是个不值一提的伪君子,而那个让我们怀念微笑的周老师也虚伪的还可以:你可以这么做(弃学生先跑),但不可以说出来;"我没有但是我想有,你连想都不想。"。。。



参考:
《范美忠 郭松民 凤凰卫视 一虎一席谈》( http://v.ku6.com/special/show_2458689/18QaQEVpFEhSLOBw.html )
"郭跳跳"的失态和时评人的缺憾 ( http://campus.eol.cn/guan_zhu_1854/20080613/t20080613_302578.shtml )
"范跑跑"、"郭跳跳"、"赵光光"…… ( http://www.ycwb.com/sp/2008-06/17/content_1913777.htm )

qout:
“不合时宜”后果如此严重?
我想,一个人如果仅因说实话本事而受到谴责,那么这个社会虚伪到了什么程度?构建文明社会首先应基于一个自由、公正的社会契约,而不应过分指望,依赖于人性的“道德”和“善良”。当社会的根基“公正”被破坏,以牺牲个人利益去成全多数人的利益成为一种“顾全大局”的行为理所当然地纳入道德体系;当主流价值观以正义和真理自居,扼杀多元化思想,践踏个体自由已经成为一种习惯;我们看到的一切社会问题便是一个系统问题,不是局部,更不是某些人某个人的问题。

2008年6月11日星期三

让Google Calendar Sync支持Windows Server 2003

至于Google Calendar,没什么好说的,迄今为止世界上最优秀的Web日历(虽然离期望还差一截,但是目前仍然是最好的)。

很早就知道Google Calendar Sync了,但是它不支持安装在windows 2003上,直到今天才找到解决办法:右键安装文件->属性->兼容性->选中“兼容模式”,并选择下拉框中的“Windows XP”->确定。安装后运行很正常。如果需要,可以放到“启动”菜单中随机启动。

整个程序和gNotify一样简洁干净,只有状态栏图标和设置窗口。

经常计划一下要做的事情,有助于控制你的时间;记录做过的事情,有助于分析你如何才能控制时间。

2008年5月22日星期四

全国哀悼日

19号到21号三天的全国哀悼日已经过去了,但是百度,谷歌中国,偶偶等网站还是一片灰色甚至关闭了网站。我认为似乎有点过火了,难道从此举国上下就不能娱乐了,不能见光彩了,为灾区做点实事才是重要的吧。

上面的话可能会被认为有点大不韪。

2008年4月8日星期二

阶乘(factorial)&尾递归(Tail Recursion)

今天看了用递归计算阶乘咋不行呢?》受益良多,这里做下小结。

传统的递归算法写起来很漂亮,代码很简洁,但是没递归一次就需要更深一层的堆栈支持,可能会造成内存溢出而失败,所以递归和goto语句一样声名狼藉。
甚至《代码大全》的作者有这样一句话:如果为我工作的程序员用递归去计算阶乘,那么我宁愿换人。作者对递归的态度相当谨慎,这在静态命令式语言中显然是正确的,但是在函数式语言中,由于有尾递归优化的存在,递归反而是最自然的形式,况且我打心里认为递归更符合人类思维。(by )

尾递归就是从最后开始计算,每递归一次就算出相应的结果,也就是说,函数调用出现在调用者函数的尾部,因为是尾部,所以根本没有必要去保存任何局部变量,直接让被调用的函数返回时越过调用者,返回到调用者的调用者去。举例说明。
 
线性递归(传统递归方式):
function recursion(n){
    return n==1?1:n*recursion(n-1);
}

 
尾递归:
function tailRecursion(n, a){
    a = a||1; // 尾递归之尾,即上次递归结果。
    return n==1?a:tailRecursion(n-1, a*n);
}


这里将基于尾递归的求数值阶乘算法贴下:
Math.factorial_III = function(n){
    var a = arguments[1]||1;
    return n<=1?a:Math.factorial_III(n-1, a*n);
};
 
效率上和循环迭代、阶乘改进算法相当甚至稍胜出(ie6,firefox2,safari3),普通递归的效率最为底下,且需要深入堆栈。
 
参考:
尾递归》-百度百科
用递归计算阶乘咋不行呢?》-

2008年4月2日星期三

罪名:程序员。

群里一个朋友开发时需要封闭,这是他们的聊天记录片段:
Ray(317058699)  9:35:30
封闭还未归?
aspirin(71446375)  9:35:38
早回来了
aspirin(71446375)  9:35:46
刑期已满
Ray(317058699)  9:36:09
呵呵,以后不要干坏事了哦,
IaiJava(282705730)  9:36:11
犯了什么罪?
Ray(317058699)  9:36:26
当了程序员。。

 

2008年3月31日星期一

正则表达式拼接和构建零长度对象

之前在网上收集到一个正则表达式拼接的方法/函数,一直没有注意,直到昨天用jsdoc生成api文档时才看到。心里想这样的方法实际应用中大概没什么意义,但是出于好奇就拿出来玩了一下,这一玩不要紧啊,这么精炼的东西差点成垃圾。

可能是网络编辑器的原因,原始代码有bug,经过修正和测试,现在的代码如下:代码I


/**
* 连接两个正则表达式。
* 题外话:获得字符串常量""的长度,比构建空数组再求其长度效率高(忽略构建过程,求长度消耗时间相同)。
* @param {RegExp} r 指定被连接的正则表达式对象。
* @param {String} p 连接后的表达式使用的选项,由"i","g","m"组合而成。
* @return {RegExp} 返回连接后的正则表达式。
*/
RegExp.prototype.concat = function(r, p){
var i=(this.source.match(/\((?!\?:)/g) || "").length; // 正向预搜索。
return new RegExp(this.source+r.source.replace(/\\(\d)/g, function($0, $1){
return "\\" + (i+($1 | 0)); // 修正第二个表达式中的反向引用。注意这里的位运算。
}), p);
};

原方法名是contact,现在为了和字符串类的一致,换为concat,至于bug/不足这里不做解读。
这个实际应用意义不大的小程式却有值得称道的几点:
1. 正向预搜索匹配第一个表达式里左括号(不包括非捕获组(?:))的个数。
2. 当第一个表达式没有匹配时返回0长度对象(再求其长度),可以构建空数组([])和空字符串(""),这里使用空字符串,理由下面再解释。
3. 修正反向引用时用的位运算(),这里将匹配到的数值字符串与0位或没有其他意义,只是将数值字符串转型为数值,相当于parseInt()函数。
下面介绍为什么使用空字符串而不是空数组构建0长度对象。代码II
var I = 10000;

var d = new Date();
for (var i=0; i<I; i++){
"".length;
}
d = new Date()-d;

var d2 = new Date();
for (var i=0; i<I; i++){
[].length;
}
d2 = new Date()-d2;

document.write(d+":"+d2);

一万次循环叠加可以发现构建空字符串比构建空数组求长度快1到3倍。
再将代码改为:代码III
var I = 10000;
var s="";
var d = new Date();
for (var i=0; i<I; i++){
s.length;
}
d = new Date()-d;

var a=[];
var d2 = new Date();
for (var i=0; i<I; i++){
a.length;
}
d2 = new Date()-d2;

document.write(d+":"+d2);

可以发现,求空字符串长度与空数组长度的过程效率相当。可见,代码II处空数组效率多余的消耗主要在构建空数组对象上。

2008年3月28日星期五

又是神奇的邮件

昨天收到的神奇邮件令我诧异不止,不想今天又收到一封更为神奇的邮件,它的来源是我自己的邮箱地址,却不是我发给自己的:


同样,它被放在了垃圾收件箱,同样打上了警告标语“Warning: This message may not be from whom it claims to be. Beware of following any links in it or of providing the sender with any personal information. Learn more

邮件的内容为空,而标题则是RE...。你哪怕发给我一些广告也好啊,我想,现在这样让我怎么给你的身份定位呢?
你可能怀疑这是我发给自己的作秀邮件,但是我的邮件都会带上个性签名。而且我也尝试过,Gmail不会将发给自己的邮件当作垃圾邮件,也不会打上警告标语。

2008年3月27日星期四

神奇的邮件来源

今天收到一封来自google.com域的垃圾邮件,如图:



当然,这个邮件地址是虚假的,它被Gmail自动放在了Spam里。邮件地址下面的红色警戒条上写着“Warning: This message may not be from whom it claims to be. Beware of following any links in it or of providing the sender with any personal information. Learn more


这种虚假的邮件地址来源很常见,而且我还收到一些邮件地址不合法的邮件,甚至还收到收件人不是我的灵异邮件。


但是,纵然这封邮件的地址很假,纵然这封邮件被放在了垃圾邮件箱,纵然这封邮件本身也是广告内容,我在这里还是要提一下这封邮件本身,他是一封公益广告邮件,内容是拯救西北的沙化,绿化西北,防止沙尘暴。


下面是引用原文:
用您善良的心灵,请友善的点击一下吧!Http://www.net114.com/green/拯救地址,携手绿色西北行动用我们的 爱心我们的 责任我们的 双手
支持 绿 西北行动让沙尘暴不再肆虐 让 绿色 驱赶贫困让我们传递这个共同的责任!请友善的点击一下吧!Http://www.net114.com/green/

拷贝过来的文本已经失去了原文的格式,这里不做调整。

我看过文中提到的地址,下面发一些里面的牛图:

中国许多地区被沙化。




肆虐的沙尘暴。