闲耘.博客

June 28, 2008

生死历险记

Filed under: Uncategorized — hotoo @ 10:18 am

早晨上班,玉古路上遇到一貌似前世与我有仇之公交司机,挡我去路,夹我于龟裂之中,害我爆胎,几近谋我性命;完了又来个梅开二度,夹我于车道之中,欲与迎面之轿车相撞也。

于生死存亡之际,我冷静迎战度过危机,平时练就之单车本事亦派上自保之大用处也。

强行钢圈行路二千米,于玉泉站上了那与我有仇之同僚坐骑,迟到十分。

June 20, 2008

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

Filed under: Uncategorized — hotoo @ 4:15 pm

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

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

参考:
《范美忠 郭松民 凤凰卫视 一虎一席谈》( 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 )

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

May 29, 2008

让Google Calendar Sync支持Windows Server 2003

Filed under: Calendar, Windows, Tools, Google — hotoo @ 2:38 pm

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

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

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

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

May 21, 2008

“万能的”切换/设置windows网络环境脚本应用程序

Filed under: Shell, Windows, Code, Network — hotoo @ 8:40 pm

这个shell可以辅助你:
1. 来回切换预设好的两个(你也可以改为更多个)网络设置;
2. 自动获取网络设置;
3. 手动设置网络环境(一般临时用一下);
4. 启用/禁用网卡;
5. 查看网络设置。

代码保存为*.bat/*.cmd均可,双击执行。
注:因为Win2003的命令行代码页默认不支持中文(可以通过改注册表修正)这里把网卡名称改成了Lineate,如果你的命令行支持中文(也可以通过修改该批处理文件的快捷方式属性->选项->当前代码页为936),把Lineate改成你的网卡名称(如“本地连接”)即可。

参考:http://windowsitpro.com/articles/index.cfm?articleid=41111&cpage=1#feedbackAnchor

@echo off  

title Switch Network Settingset card=Lineate  

set house_ip=192.168.2.98
set house_mask=255.255.255.0
set house_gway=192.168.2.1
set house_dns0=127.0.0.1
set house_dns1=202.96.134.133  

set office_ip=192.168.1.113
set office_mask=255.255.255.0
set office_gway=192.168.1.1
set office_dns0=192.168.1.1
set office_dns1=202.101.172.35  

:Lab_choice
cls
echo Choice the Network type (for [%card%]):
echo -------------------------------------------------------------------------
echo *  [1] : [ House ] Network Setting:%house_ip% %house_mask% %house_gway%
echo *  [2] : [ Office ] Network Setting:%office_ip% %office_mask% %office_gway%
echo *  [3] : Set Address by Youself.
echo *  [4] : Auto.
echo *
echo *  [5] : Disable Interface.
echo *  [6] : Enable Interface.
echo *  [7] : Change Network Card Name (Current : %card%)
echo *  [9] : Show Status.
echo *
echo *  [?] : Help.
echo *  [0] : Exit.
echo -------------------------------------------------------------------------  

set /p type=Choice:
if %type%==0 exit
if %type%==exit exit
if %type%==quit exit
if %type%==1 goto Lab_house
if %type%==2 goto Lab_office
if %type%==3 goto Lab_userset
if %type%==4 goto Lab_set_dhcp
if %type%==5 goto Lab_disable
if %type%==6 goto Lab_enable
if %type%==7 goto Lab_changeCard
if %type%==9 goto done
if %type%==? goto Lab_help
goto Lab_choice  

:Lab_changeCard
cls
echo All Network Card Config Infomation:
echo -------------------------------------------------------------------------
netsh interface ip show config
echo -------------------------------------------------------------------------
set /p card=Input Network Card Name:
goto Lab_choice
rem ==========================================================================  

:Lab_userset
cls
echo Input Network
echo -------------------------------------------------------------------------
set /p ip=IP Address:
set /p mask=Subnet Mask:
set /p gway=Default Gateway:
set /p dns0=Default DNS Servers:
set /p dns1=Spare DNS Servers:
echo -------------------------------------------------------------------------
echo  [y/Y] : Update network setting immediately.
echo  [n/N] : Cancel and goto main menu.
set /p confirm=Config the Network Setting(y/n):
if %confirm%==y goto Lab_set_static
goto Lab_choice  

:Lab_house
set ip=%house_ip%
set mask=%house_mask%
set gway=%house_gway%
set dns0=%house_dns0%
set dns1=%house_dns1%
goto Lab_set_static  

:Label_office
set ip=%office_ip%
set mask=%office_mask%
set gway=%office_gway%
set dns0=%office_dns0%
set dns1=%office_dns1%
goto Lab_set_static  

rem ==========================================================================
:Lab_set_static
echo Reset Network Setting...
netsh interface ip reset "%card%"
echo Setting IP Address and Subnet Mask...
netsh interface ip set address "%card%" source=static addr=%ip% mask=%mask%
echo Setting Default Gateway...
netsh interface ip set address "%card%" gateway=%gway% gwmetric=1
echo Setting Default DNS Servers...
netsh interface ip set dns "%card%" static %dns0% primary
echo Adding Spare DNS Servers...
netsh interface ip add dns "%card%" addr=%dns1% index=2
goto done  

rem ==========================================================================
:Lab_set_dhcp
echo Auto get IP Address...
netsh interface ip set address "%card%" source=dhcp
echo Auto get DNS Servers...
netsh interface ip set dns "%card%" source=dhcp
goto done  

:Lab_disable
netsh int set interface name="%card%" admin=disabled
goto done
:Lab_enable
netsh int set interface name="%card%" admin=enabled
goto done  

rem ==========================================================================
:done
echo Current Network Setting:  

echo -------------------------------------------------------------------------
netsh interface ip show config "%card%"
echo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ipconfig /all
pause
goto Lab_choice  

:Lab_help
cls
echo Help Infomation - Advance Usage
echo -------------------------------------------------------------------------
echo ? get help.
echo.
pause
goto Lab_choice

May 20, 2008

注册apache,mysql为服务

Filed under: Setting, mysql, Apache, Uncategorized — hotoo @ 1:05 am

以前是把apache,mysql都安装在非系统盘下,现在重装了系统,如何把这一堆残留下来的绿色软件重新激活并保留原来的状态和数据便成为一个重要的问题:

将apache注册为windows服务:

%APACHE_HOME%binhttpd.exe -k install

将mysql注册为windows服务:

%MYSQL_HOME%binmysqld-nt.exe –install mysql5 –defaults-file=”%MYSQL_HOME%my.ini”

注:将%MYSQL_HOME%替换为mysql的安装目录,一定要使用绝对路径,如果在命令行下切换到mysql安装目录下然后以相对目录执行命令,在服务中可能会找不到mysql应用程序。

这样,之前的apache配置,mysql数据库都可以完整保留下来。

又注:mysql一般可以使用bin目录下的mysqld.exe和mysqld-nt.exe两个程序来注册,当你使用mysqld-nt.exe来注册时,可能会受mysqld-nt.exe中间的横杠影响导致注册伪成功(不能正常启动服务),解决办法是使用引号括起路径字符串(这种方法也用来解决路径中存在空格等特殊字符的问题)。

May 11, 2008

飞鸽传书(IPMsg中文版)日志转换器

Filed under: Logs, IM, Code, Javascript — hotoo @ 5:21 pm

由阿志翻译的飞鸽传书(IPMsg中文版),其日志部分(包括“关键字”和日期格式等)同样被翻译为中文,这本身没有什么不好,但是如果你想用IPMsg官方网(日文)(或英文)推荐的日志查看器(IPmsgView),那就不行了,除非将日志转为原始格式。

这里提供一个Javascript实现的在线转换器,可以帮你解决以上问题。如果您有上万行记录,或者机器性能不够自信,请分批转换。

http://labs.xianyun.org/trans/IPMsg-logs-trans.html

这里附上源码:

function trans2(src){
	var r = src.replace(/^ 来自: /mg, " From: ");
	r = r.replace(/^ 发往: /mg, " To: ");
	r = r.replace(/^  (文件)/mg, "  (files)");
	var m=["","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
	var w={"一":"Mon","二":"Tue","三":"Wed","四":"Thu","五":"Fri","六":"Sat","日":"Sun"};
	return r.replace(/^ 时间: ([0-9]{4})-([0-9]{2})-([0-9]{2}) (?:星期(.)) ([0-9]{2}:[0-9]{2}:[0-9]{2})(?: ((组播))?((RSA))?((封装))?)?/mg, function($0,$1,$2,$3,$4,$5,$6,$7,$8){
		var t=($6?"(multi)":"")+($7?"(RSA)":"")+($8?"(sealed)":""); // multi, RSA, sealed
		return " at "+w[$4]+" "+m[$2|0]+" "+$3+" "+$5+" "+$1+(t?" "+t:"");
	});
}

May 6, 2008

恶心的javaeye注册系统

Filed under: Code, Javascript — hotoo @ 2:00 am

在javaeye.com论坛上看到JSI Side 代码风格与规范,里面提到的大部分细节/技巧都很有创意,但是看到关于原始类型对象量的部分,正好我也有过“研究”,想说两句,于是发现要注册,我觉得javaeye.com还是不错的,便填写资料注册之,注册过程/之后发现激活邮件里竟然带有我输入的原始明文密码,失望1;算了,有话想说,先吐为快吧,却发现新注册用户需要在三天之后才能评论,天哪,三天,此时我都已经无语了,失望2;跑到作者javaeye博客上,发现和论坛一样,也是3天….。

下面是我想说的两点,其实本身并没什么好说的,都是关于对象比较的,更多介绍请参看我的《深入Javascript对象比较》一文:

1.    new String(”test”) != new String(”test”);
两次new String()得到两个(不同的)对象,内存地址当然不相同。

2.    if(new Boolean(false)){
        alert(”执行到”)
      }else{
        alert(”未被执行”)
      }
new Boolean()得到的也是对象,在if里相当于true,当然“执行到”,你可以试一下: if(new Boolean(false).valueOf())

April 21, 2008

Javascript相等符(==)与完全相等符(===)之效率

Filed under: Code, Javascript — hotoo @ 11:47 pm

前段时间不记得在哪里看到的说法:Javascript全等于(===)比普通等于(==)效率低,我当时在没有测试的情况下就隐约相信了这样的提法,因为初步想来,要多一个等号字符,要同时比较类型和值,效率低一点不是没有道理的。有了这种想法,就时时顾虑着我之前偏向于使用“强类型”的完全等于比较符是否于我不利。

今天一位同事看我代码时“抱怨”我用的完全等于太多了,并随口问了句“三个等号效率要高一些吗?”兴许说者无心,但是听着有意,在Editplus里随手写了几行测试代码,却发现结果与前文提到的说法完全相反:

var I=400000;
var d1 = new Date();
for (var i=0; i<I; i++){
 1==”1″;
}
d1 = new Date()-d1;

var d2 = new Date();
for (var i=0; i<I; i++){
 1===”1″;
}
d2 = new Date()-d2;

document.write(d1+”:”+d2);

测试结果是完全等于(===)效率要高于普通等于(==),我猜想造成这样的结果缘由如下:完全等于不进行类型转换,但是普通等于需要进行类型转换(Javascript是弱类型、但不是无类型)。

注:这里使用了两个类型不同的对象/值进行比较,如果换成同类型对象/值进行比较(如:1==1/1===1)则效率相当。

关于使用等于/完全等于的建议:
1. 如果程序对“强”类型不作要求,或者看重代码量(虽然我认为多加几个等号代码也多不到哪里去),则建议使用等于(==);
2. 否则建议使用完全等于(===)。

我过多使用完全等于号即考虑类型匹配性,如果不匹配,快速失败。

April 8, 2008

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

Filed under: Math, Code, Javascript — hotoo @ 4:02 pm

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

传统的递归算法写起来很漂亮,代码很简洁,但是没递归一次就需要更深一层的堆栈支持,可能会造成内存溢出而失败,所以递归和goto语句一样声名狼藉。

甚至《代码大全》的作者有这样一句话:如果为我工作的程序员用递归去计算阶乘,那么我宁愿换人。作者对递归的态度相当谨慎,这在静态命令式语言中显然是正确的,但是在函数式语言中,由于有尾递归优化的存在,递归反而是最自然的形式,况且我打心里认为递归更符合人类思维。(by dennis)


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

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),普通递归的效率最为底下,且需要深入堆栈。

参考:
尾递归》-百度百科
用递归计算阶乘咋不行呢?》-dennis

April 2, 2008

罪名:程序员。

Filed under: Funny — hotoo @ 9:45 am

群里一个朋友开发时需要封闭,这是他们的聊天记录片段:

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
当了程序员。。

Next Page »

Powered by WordPress