这个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
由阿志翻译的飞鸽传书(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:"");
});
}
在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())
前段时间不记得在哪里看到的说法: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. 否则建议使用完全等于(===)。
我过多使用完全等于号即考虑类型匹配性,如果不匹配,快速失败。
今天看了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
以前用过各种博客系统,自己也写了一个(由于朋友赞助的服务器无法继续使用,只留了在本地演示)。很长时间以来一直使用Google收购的Blogger.com提供的服务,并绑定到自己的blog.xianyun.org域名下,由于国内过于和谐的缘故,Google DNS服务器也无法访问了,就另图出路。久仰WordPress大名,特来瞻仰。
大概是系统的原因,以前在Blogger.com的日志暂时无法导入过来,实在是遗憾。
昨天申请的帐号,今天写第一篇,以自贺乔迁之喜。最近对数学再返无穷兴趣,在一个数学方面极好的博客上读得关于阶乘计算的好文,就把其中一个较易实现的改进算法发布如下(Javascript实现),初来乍到,不知道怎么发布源代码,请见谅:
/**
* 求阶乘的改进算法。
* @param {Number, Integer} n 求阶乘的目标整数。
* @see <a href="http://www.matrix67.com/blog/article.asp?id=442“>计算阶乘的另一些有趣的算法</a>,
* <a href=”http://www.luschny.de/math/factorial/index.html“>巨牛,20多种阶乘算法的代码</a>
*/
Math.factorial_II = function(n){
if (n.isNegativeInteger()){throw new Error(”param error.”)}
if (n===0){return 1;}
var m=(n.isOdd()?(n+1):n)/2; // middle number.
var r = n.isOdd()?m:m*n; //result;
for (var i=1; i<m; i++){
r*=(Math.pow(m,2) - Math.pow(i,2));
}
return r;
};
/**
* 判断当前数值对象是否是整数。
* @return {Boolean} true,如果数值是整数,否则返回false。
*/
Number.prototype.isInteger = function(){
return /^[+-]?d+$/.test(this);
};
/**
* 判断数值是否是为负数。
* @return {Boolean} true,如果数值是负数,否则返回false。
*/
Number.prototype.isNegative = function(){
return this<0;
};
/**
* 判断数值是否为负整数。
* @return {Boolean} true,如果数值为负整数,否则返回false。
*/
Number.prototype.isNegativeInteger = function(){
return this.isNegative() && this.isInteger();
};
/**
* 判断当前数字的值是否为奇数(定义:不能被2整除的(整)数,如1,3和5)。
* 关于零(0)是否属于偶数,目前似乎尚无定论,这里不予理会,作为偶数处理。
* @return {Boolean} true,如果当前值是奇数,否则,返回false。
*/
Number.prototype.isOdd = function(){
/* Javascript整除(取模)运算:
* 被除数为正整数时,结果为0或1;
* 为负整数时,结果为0或-1;
* 为0时,结果为0;
* 为小数时,结果为正或负小数。
*/
return this.isInteger() && ((this%2)!==0);
};
在封装一个模拟Google风格的多标签自动完成类之余,写了这个字符/串大小写反转方法(Google搜索了一下,暂没发现有写这个方法的),如果有用,请自用之;发现问题,请指教之。
var Character = function(character){ // 单个字符类
if (character.length != 1){
throw Error(”[Error:Arguments error.\nclass:org.xianyun.Character]”);
}
this.value = character; // private:
this.charCode = character.charCodeAt(0); // public:readonly.
};
Character.reverseCase = function(character){ // 单个字符大小写反转,静态方法。
var charCode = character.charCodeAt(0);
if (charCode>=65 && charCode<=90){ // A-Z
return String.fromCharCode(charCode + 32);
}else if(charCode>=97 && charCode<=122){ // a-z
return String.fromCharCode(charCode - 32);
}else {
return character;
}
};
Character.prototype.reverseCase = function(){ // 单个字符大小写反转,成员方法。
return Character.reverseCase(this.value);
};
String.prototype.reverse = function(){ // 字符串顺序反转。
var s = “”;
for (var i=this.length-1; i>=0; i–){
s += this.charAt(i);
}
return s;
};
String.prototype.reverseCase = function(){ // 字符串大小写反转
var s = “”;
for (var i=0; i<this.length; i++){
s += Character.reverseCase(this.charAt(i));
//s += new Character(this.charAt(i)).reverseCase();
}
return s;
};
// from http://www.cppblog.com/mythma/archive/2007/06/25/26923.html
/**题:
* 话说有五个小矮人上山摘野果,摘回来后平均分,可是怎么也分不下去.因为分不平均.
* 到了晚上,一个小矮人爬起来,从里面扔了一个, 刚好能平均分成五份.然后他把自己的那份藏起来,就睡觉去了.
* 第二个小矮个也爬了起来,也把果子扔了一个后刚好分成5份,他也把自己那份藏了起来.然后睡觉,
* 余下3 个小矮人都是这样做的,过程完全一样. 请问,最初这堆果子至少有多少个?
*/
/**解:
* 设共有total个野果;
* 第1个矮人拿走 (total-1)/5 个野果,此时剩下 (total - 1)/5*4 个野果;
* 第2个矮人拿走 ((total-1)/5*4 - 1)/5 个野果,剩下 ((total-1)/5*4 - 1)/5*4 个野果;
* 以此类推…
*/
#include <iostream>
using namespace std;
int getTotal(){
int total = 1; // 设初始野果总数1个
while (true){
int _t = total;
for (int i = 1; i <= 5; i++){
if ((_t - 1) % 5 == 0){ // 条件:扔掉1个能够5等分
_t = (_t - 1) / 5 * 4; // 第i个矮人拿走1/5后剩下的继续循环
if (i == 5){ // 如果5个矮人都拿到野果
return total;
}
}
}
total ++; // 不满足则野果总数加1
}
}
int main(){
cout << getTotal() << endl;
return 0;
}
输出:3121
看《Java编程思想》第2版第297页为所有返回类型各写一个类/接口,突然想到能不能仅仅写一个类/接口,通过多态特性,让它自动返回相应的类型呢,尝试失败。
package org.xianyun.j2se.override;
public class Father {
public String fun(){
return “string”;
}
}
package org.xianyun.j2se.override;
public class Children extends Father {
public void fun(){
// I : 父类返回String,子类返回void。Eclipse报错:返回类型与 Father.fun() 不兼容。
}
public void fun(String str){
// II : 这里是重写(overloading)。
}
public String fun(){ // III : Eclipse报错:存在重复的方法 fun()
return “”;
}
}
从 I 处可以看出,系统判断覆写(Overriding)的凭据是方法名和传入参数。如果是覆写,则判断返回参数。
II 处,正常,属于重写(Overloading),此时Children类多了void fun(String)方法。
III 处证明,判断是同一个方法的依据是方法名和传入参数,不参照返回参数。
注:代码在sun jdk下尝试结果相同。
借此再温习一下覆写和重写:
Overriding (覆写)
方法与父类方法同名同参同返回。,即同方法名,同传入参数,同返回参数类型。
Overloading (重载)
方法与父类方法同名,不同传入参数(个数或/和类型),同/不同返回参数类型。
另,在网络技术交流群小学一招,使桌面上图标文本的默认阴影消失:
我的电脑 -> 属性 -> 高级 -> 性能 -> 设置 选中”在桌面上为图标标签使用阴影”。
利用命令shell的力量。Use the Power of Command Shells.
学习一种文本操纵语言。Learn a Text Manipulation Language.
不要使用手工流程。Don’t Use Manual Procedures.
from《程序员修炼之道》The Pragmatic Programmer
Windows磁盘碎片整理批处理,传说是WinXP,Win2K,Win2003等NT系统才支持。
将下面代码保存为disk.bat,双击运行即可。
defrag.exe c: -f -v >”d:\defrag_report_c.txt”
defrag.exe d: -f -v >”d:\defrag_report_d.txt”
…
其中 c:,d:等表示你要整理的驱动盘符,详细说明可以Google搜索关键字” windows 碎片整理 命令行“,并且在我的Google搜索历史中2007年6月6日的标星记录里都是不错的链接。
将Windows磁盘从FAT32转换成NTFS格式,不会格式化磁盘,保留数据(不过最保险的还是备份先)。由于输入了如下命令后,需要立即手动输入对应磁盘卷标名(即你为磁盘驱动器命的名字,打开”我的电脑”即可看到)才会执行转换,所以几乎没有办法写成批处理,不过还好转换工作不是需要特别长的时间,几十秒到几分钟吧。
CONVERT D: /FS:NTFS
关于Google搜索同上,关键字”fat32 转 ntfs 命令“。