星期三, 十二月 31, 2008

2008末2009初

写在2008岁末2009年初,2008年对我来说是个大年,总结一下:

  • 找了个好老婆,我们结婚了:)
  • 工作也挺好的,慢慢有点悟了
  • 尝试做Adsense,投机取巧,得些许小利,终被封号,得第一桶金

2009年,我的wish list:


星期六, 十二月 27, 2008

Clear Type 调整器

 
 
现在我们一般用的都是液晶显示器,但有时候我们会发现液晶显示器显示的文字会发虚,很模糊,看不清楚。
这其实不是显示器的原因,而是我们没有设置好。
 
此时我们就需要使用Clear Type调整器来进行调整。
 
下面这个页面给我们说明了调整器的下载和使用方法。
 

星期四, 十二月 25, 2008

显卡上的S/PDIF接口

今天帮同事买了块华硕EN9600GT冰刃版的显卡,看到有个S/PDIF接口,感到很郁闷,为什么显卡会有音频接口呢。
后来查了一下,这是块支持HDTV的显卡,附有1个 DVI转HDMI转接头 和1 个 HDTV输出信号线,需要将音频输出到电视机的话就要链接S/PDIF。

星期二, 十二月 23, 2008

优盘(U盘)检测软件

http://www.mydigit.cn/mydisktest.htm

优盘检测软件,

现在奸商一堆,就连可爱的calf也中招了,所以大家还是多个心眼,买到U盘后检测一下。

utf8编码的中文分词词库下载

utf8编码的中文分词词库下载
http://cn.minidx.com/index.php?option=com_docman&task=doc_download&gid=47

星期一, 十二月 22, 2008

中文分词基本概念

英文是以词为单位的,词与词之间上靠空格隔开,而中文是以字为单位,句子中所有的字连起来才能描述一个意思。例如,英文句子I am a student,翻译成"我是一个学生"。计算机可以很简单的通过空格知道student是一个单词,但是"学","生"假如分开来,计算机是无法理解的。必须把他们合在一起才变得有意义。把中文的汉字序列切分成有意义的词,就是中文分词。再比如"研究生命",可以划分为"研究生/命",也可以是"研究 /生命",假如是人脑可以很明显的判断出这里后者的划分更加的确切,但是计算机要做到这一点却是相当的困难。

现有的分词算法有3种:基于字符串匹配的分词算法、基于理解的分词算法和基于统计的分词算法。

什么是中文分词
何为分词?中文分词与其他的分词又有什么不同呢?分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。在上面的例子中我们就可以看出,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段可以通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,但是在词这一层上,上面的例子中我们也可以看出,中文比之英文要复杂的多、困难的多。

中文分词的意义和作用
要想说清楚中文分词的意义和作用,就要提到智能计算技术。智能计算技术涉及的学科包括物理学、数学、计算机科学、电子机械、通讯、生理学、进化理论和心理学等等。简单的说,智能计算就是让机器"能看会想,能听会讲",让计算机像人类一样可以快速判断出"研究生命"这样短语的切分。要想实现这样的一个目标,首先就要让机器理解人类的语言,只有机器理解了人类的语言文字,才使得人与机器的交流成为可能。再反观我们人类的语言中,"词是最小的能够独立活动的有意义的语言成分",所以对于中文来讲,将词确定下来是理解自然语言的第一步,只有跨越了这一步,中文才能象英文那样过渡到短语划分、概念抽取以及主题分析,以至于自然语言理解,最终达到智能计算的最高境界,实现人类的梦想。目前我们常用的Google,Baidu,Yahoo这些主流的搜索引擎,还都是基于关键字(Keyword)来匹配结果的,不过可喜的是,已经有很多公司投入了大量的资金进行着自然语言检索的方式来进行查询,随着研究的进行,计算机可以理解人类的语言从而实现真正意义上的人机对话,那也将不再是遥不可及的而变得指日可待了。从现阶段的实际情况来看,英文已经跨越了分词这一步,也就是说在词的利用上已经先我们一步,并且已经展现了良好的应用前景,无论是信息检索还是主题分析的研究都要强于中文,究其根本原因就是中文要通过分词这道难关,只有攻破了这道难关,我们才有希望赶上并超过英文在信息领域的发展,所以中文分词对我们来说意义重大,可以说直接影响到使用中文的每一个人的方方面面。

中文分词的应用
中文分词主要应用于信息检索、人机交互、信息提取、文本挖掘、中外文对译、中文校对、自动摘要、自动分类等很多方面。下面就以信息检索为例来说明中文分词的应用。
通过近几年的发展,互联网已经离我们不再遥远。互联网上的信息也在急剧膨胀,在这海量的信息中,各类信息混杂在一起,要想充分利用这些信息资源就要对它们进行整理,如果由人来做这项工作,已经是不可能的,而如果面对中文信息不采用分词技术,那么整理的结果就过于粗糙,而导致资源的不可用,例如一个我们常见的比较经典的例子:"制造业和服务业是两个不同的行业"和"我们出口日本的和服比去年有所增长"中都有"和服",而被当作同一类来处理,结果是检索"和服" 的相关信息,会将他们都检索到,在信息量少的情况下,似乎还能够忍受,如果是海量信息,这样的结果就会令人讨厌了。通过引入分词技术,就可以使机器对海量信息的整理更准确更合理,在 "制造业和服务业是两个不同的行业"中"和服"不会被当做一个词来处理,那么检索"和服"当然不会将它检索到,使得检索结果更准确,效率也会大幅度的提高。
所以中文分词的应用会改善我们的生活,使人们真正体会到科技为我所用。目前对分词的研究,大都集中于通用的分词算法,以提高分词准确率为目的。

目前的分词算法中,一些切分精度比较高的算法,切分的速度都比较慢;而一些切分速度快的算法,因为抛弃了一些繁琐的语言处理,所以切分精度都不高。

速度:每秒几十k~几M

切分正确率:80%~98%  

中文分词简介和困难  

中文分词(Chinese Word Segmentation):将一个汉字序列切分成一个一个单独的词。比如将"一次性交足100元"切分成"一次/性交/足/100/元"的话,那这样比较"色"的分词并不是我们所希望的。另外还有就是未登录词识别,比如"施瓦辛格"这个词字典中并没有,如何才能让计算机正确的识别出这是一个词,当然这并不是中文分词所独有的难点,英文等其他语言也都有这样的问题。

分词规范:词的概念和不同应用的切分要求

分词算法:歧义消除和未登录词识别  

分词规范方面的困难  

汉语中词的界定,也就是消除歧义

"长春市长":"长春/市长"?"长春市/长"?"长春/市/长" ?

核心词表如何收词?

词的变形结构问题:"看/没/看见" ,"相不相信"  

分词算法上的困难  

●切分歧义的消除

交集型歧义(交叉歧义):"组合成"

我们/小组/合成/氢气了;组合/成/分子;

�组合型歧义(覆盖歧义):"马上"

他/从/马/上/下/来;我/马上/就/来/了 ;

�"学生会组织义演活动" : "学生/会/组织/义演/活动" or "学生会/组织/义演/活动"?

●未登录词识别

�命名实体:数词、人名、地名、机构名、译名、时间、货币

�缩略语和术语:"超女"、"非典"

�新词:"酱紫"、"星盘"

●先识别已知词还是先识别未登录词

�先识别已知词:"内塔尼亚/胡说"

�先识别未登录词:"胜利取决/于勇/气"  

常用评测指标  
召回率(Recall)
准确率(Precision)

常用评测指标  

召回率(Recall) image
准确率(Precision) image


基于词典和规则的方法  

●最大匹配

�正向最大匹配、反向最大匹配和双向最大匹配

�实现简单,而且切分速度快。但无法发现覆盖歧义,对于某些复杂的交叉歧义也会遗漏。

实际试验的结果表明,反向最大匹配的准确率要高于正向最大匹配。

●全切分

�利用词典匹配,获得一个句子所有可能的切分结果。

�时空开销非常大。

●基于理解的分词算法

�模拟人的理解过程,在分词过程中加入句法和语义分析来处理歧义问题。

�难以将各种语言信息组织成机器可直接读取的形式,还处在试验阶段  

基于规则的消歧和未登录词识别

这一步其实在语根处理 (stemming)中也可以处理,比如Snowball就是一个不错的过滤器,但是可惜的是目前的版本出错率比较高。

�规则消歧

CONDITION FIND(R,NEXT,X){%X.ccat=~w}SELECT 1

CONDITION FIND(L,NEAR,X){%X.yx=听|相信|同意}SELECT 1

CONDITION FIND(L,NEAR,X){%X.yx=假如|如果|假设|要是|若}SELECT 2

OTHERWISE SELECT 1

�用规则识别未登录词

LocationName à Person Name LocationNameKeyWord

LocationName à Location Name LocationNameKeyWord

OrganizationName à Organization Name OrganizationNameKeyWord

OrganizationName à Country Name {D|DD} OrganizationNameKeyWord  

●N元语法(N-gram)模型

image




隐马尔可夫模型(HMM)

对于一个随机事件,有一个状态序列{X1X2,…,Xn},还有一个观察值序列{Y1Y2,…,Yn}。隐马模型可以形式化为一个五元组(S,O,A,B),其中:

S ={q1,q2,…,qn}:状态值的有限集合

O={v1,v2,…vm}:观察值的有限集合

A={aij},aij =p(Xt+1=qj|Xt=qi):转移概率

B={bik},bik =p(Ot=vk| Xt=qi):输出概率

={ }, =p(X1=qi):初始状态分布  

N元切分法(N-gram) :对一个字符串序列以N为一个切分单位进行切分。

�如二元切分法: "ABCDEFG" →"AB\CD\EF\G"

�交叉二元切分法(Overlapping Bigram):"ABCDEFG" →"AB\BC\CD\DE\EF\FG"

�简单快速,但会产生大量无意义的标引词,导致标引产生的索引文件的空间,以及检索和进行标引的时间都大大增加。同时,因为它的切分单位并非语言学意义上的词语,所以也会导致检索的查准率下降

1.查询切分和文档切分采用相同的分词算法,有一些文件切分错误的词,在查询时也遇到相同的切分错误,所以即使切分阶段错误,但最后相同错误匹配,使得仍然可以正确检索到;

2.有些词被错误的切分成几个部分,尽管这样会导致分词正确率下降,但对于检索来说,最后可以通过结果合并得到正确的结果,分词的错误并不影响检索的性能;

3.分词测得的准确率高低并不是绝对的,有时跟用标准答案有关。这涉及到对词的定义问题,有些标准答案认为是该切分的词,实际上不切分用于检索更加准确一些。如:"国\内"vs"国内" 、"民进党团"vs"民进\党团"vs"民进党\团"  

1.分词算法的时间性能要比较高。尤其是现在的web搜索,实时性要求很高。所以作为中文信息处理基础的分词首先必须占用尽可能少的时间。

2.分词正确率的提高并不一定带来检索性能的提高。分词到达一定精度之后,对中文信息检索的影响不再会很明显,虽然仍然还是有一些影响,但是这已经不是CIR的性能瓶颈。所以片面的一味追求高准确率的分词算法并不是很适合大规模中文信息检索。在时间和精度之间存在矛盾无法兼顾的情况下,我们需要在二者之间找到一个合适的平衡点。

3.切分的颗粒度仍然可以依照长词优先准则,但是需要在查询扩展层面进行相关后续处理。在信息检索中,分词算法只需要集中精力考虑如何消除交叉歧义。对于覆盖歧义,我们可以利用词典的二次索引和查询扩展来解决。

4.未登录词识别的准确率要比召回率更加重要。要尽量保证未登录词识别时不进行错误结合,避免因此切分出错误的未登录词。如果将单字错误的结合成未登录词了,则有可能导致无法正确检索到相应的文档。

百度百科直接接入词条的url

通过下面的url可以直接进入百度百科某个条目,如果条目不存在的话会导入到百度搜索结果页面

http://baike.baidu.com/list-php/dispose/searchword.php?word=%CD%B5%CF%E3&pic=1

其中word参数就是你需要搜索的关键字。

星期五, 十二月 19, 2008

免费全球IP地址数据库

http://ip2nation.com/

提供免费全球IP地址数据库,还有查询的示例代码。不错的网站:)

星期二, 十二月 16, 2008

google Ajax API 的使用

试了一下google搜索Ajax,发现使用非常方便,主要将下面的示例代码放到html源文件中就可以使用google ajax搜索插件了。

只需改变searchControl.execute("abc");语句中的关键词(abc)就可以改变google
ajax搜索页面显示的搜索结果。简直就是傻瓜式的。

=========================================================

<script src="http://www.google.com/jsapi" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
google.load("search", "1.0");
function OnLoad() {
// Create a search control
var searchControl = new google.search.SearchControl();

// Add in a full set of searchers
searchControl.addSearcher(new google.search.WebSearch());
searchControl.addSearcher(new google.search.VideoSearch());
searchControl.addSearcher(new google.search.BlogSearch());
searchControl.addSearcher(new google.search.NewsSearch());
searchControl.addSearcher(new google.search.ImageSearch());

// tell the searcher to draw itself and tell it where to attach
var drawOptions = new google.search.DrawOptions();
drawOptions.setDrawMode(google.search.SearchControl.DRAW_MODE_TABBED);
searchControl.draw(document.getElementById("searchcontrol"), drawOptions);

// execute an inital search
searchControl.execute("abc");
}
google.setOnLoadCallback(OnLoad, true);
//]]>
</script>
<div id="searchcontrol"> Loading </div>

=========================================================

用vim直接打开压缩文件

用vim可以直接打开压缩文件,gz和zip压缩格式都是支持的。
可以编辑压缩文件里的某个文件,直接将文件保存到压缩文件中,
而不需要解压,编辑,保存,在打包压缩这些繁琐的过程了。

物质Vs精神----思考Vs信息

相比20,30年前,我们的物质生活得到了很大的提高。无论是衣食住行,柴米油盐,还是开门七件事,都不会在困扰我么了。现如今物质已经是很丰富了。

对于精神生活而言,现如今是信息时代,资讯时代,或是网络时代,信息爆炸已经不足以概括当今信息丰富的程度了。我们每天可以获得大量的信息,资讯。当我们打开电脑,连上网络,铺天盖地的都是信息。

我们拥有过去任何一个时代都无法比拟的信息,那为什么我们还时常会感到空虚,无聊呢? 为什么开心网上有那么多人热衷于买卖人口,校内网上面那么多人在挑战那些无聊的游戏。

很显然资讯信息不等于人的精神生活。

其实我们的时间是一定的,当我们用更多的时间去接受信息时,那么用来思考,消化的时间就相应减少了。我们上网的时候,往往抱着某一个目的,去查找某一个事务,但是,到后来发现自己已经和原来的目标相差不知道十万八千里了。网络是发散的,网络的发散远远超过人类。在点来点去之间,你的时间已经不知不觉的溜走了。回头再想想,我好想得到了很多信息,但是仔细想想,好像什么都没有。所以我们会觉得无聊,觉得空虚。

因为我们没有思考,什么都没有了留下,精神生活的意义在于思考,如果没有思考,那么就没有精神生活。那就是为什么信息越来越多,但是我们还是觉得空虚的原因。

我们是不是习惯了接受,而很少有时间去做真正的思考呢?

让我们远离网络,重新让你的脑袋转起来吧。

星期一, 十二月 15, 2008

Adsense帐号被关了:(

大家看一下信吧

---------- Forwarded message ----------
From: Google AdSense <adsense-noreply@google.com>
Date: Mon, Dec 15, 2008 at 2:43 PM
Subject: Google AdSense Account Disabled
To: *
Cc: Google AdSense <adsense-noreply@google.com>


Hello *,

While going through our records recently, we found that your AdSense
account has posed a significant risk to our AdWords advertisers. Since
keeping your account in our publisher network may financially damage
our advertisers in the future, we've decided to disable your account.

Please understand that we consider this a necessary step to protect the
interests of both our advertisers and our other AdSense publishers. We
realize the inconvenience this may cause you, and we thank you in
advance for your understanding and cooperation.

If you have any questions about your account or the actions we've
taken, please do not reply to this email. You can find more information
by visiting
https://www.google.com/adsense/support/bin/answer.py?answer=57153&hl=en_US.

Sincerely,

The Google AdSense Team
-------------------------------------------------------------------------------
This message was sent from a notification-only email address that does
not accept incoming email. Please do not reply to this message.


星期四, 十二月 11, 2008

windows IIS 下面 drupal的url重写文件 httpd.ini

还是不太好用啊

[ISAPI_Rewrite]

RFStyle New

# http://www.isapirewrite.com/
RepeatLimit 32
# Block external access to the httpd.ini and httpd.parse.errors files
RewriteRule /httpd(?:\.ini|\.parse\.errors).* / [F,I,O]
# Block external access to the Helper ISAPI Extension
RewriteRule .*\.isrwhlp / [F,I,O]

# Rewrite protolive to fully qualified url
RewriteCond Host: www
RewriteRule (.*) http\://your.fqdn.for.com$1 [I,R]
# Accept a url with a period and pass it through unchanged.
#RewriteRule (.*\..*) $1 [I,L]
# Accept a url with the following extension and pass it through unchanged.
RewriteRule (.*\.htc) $1 [I,L]
RewriteRule (.*\.ico) $1 [I,L]
RewriteRule (.*\.css) $1 [I,L]
RewriteRule (.*\.js) $1 [I,L]

RewriteRule (/themes/.*) $0 [I,L]
RewriteRule (/misc/.*) $0 [I,L]
RewriteRule (/modules/.*) $0 [I,L]

# Accept a url with /cron.php and pass it through unchanged.
RewriteRule (/cron.php) $0 [I,L]
RewriteRule (/update.php.*) $0 [I,L]
RewriteRule (/xmlrpc.php.*) $0 [I,L]
RewriteRule /index.php.* $0 [I,L]
RewriteRule /(.*)\?(.*) /index.php\?q=$1&$2 [I,L]
RewriteRule /(.*) /index.php\?q=$1 [I,L]

ftp移动文件

ftp移动文件的命令和重命名的命令是一个,
那就是 rename

rename   [filename]   [/new/path/to/filename] 

这样可以比较方便的实现文件的移动,
不知道拷贝文件的命令是什么,看了一下help,尚无解。

KDS 详解


常遇KDS,不明其意,故google之,得一解,觉尚可,录如下:

KDS即pchome.net电脑之家网站论坛中宽带山版块的拼音缩写。
宽带山来源于宽带上网,因此版民风彪悍,所以此版中的用户被称谓tf(即土匪),所以宽带上网版块又被称作了宽带山。
KDS目前已经成为最重要的上海本土民生论坛之一。 
尽管对于kds而言,有着很多人并不认同,但其精髓就在于彪悍的论坛,不需要解释!
诚然喜欢kds的tf需要的仅仅是赤诚的心、彪悍的神经外加一套耐用的键鼠(该论坛的精髓仅在于首页,需要不断的刷新!)
该论坛的优势在于你发的主题贴很快会有回复,因为一帮死忠长期驻守。

KDS虽然个性明显,但缺点也很明显,最为人诟病的便是无以复加的地域情结,对外地人的歧视观念,这大概和上海的历史有很深的渊源,因此论坛总会时不时爆发有关地域的争吵,即上海本地人和外地人的永无休止的矛盾,这对kds的形象有很大负面影响,也对继续扩大论坛影响力造成很大的阻碍。

KDS slogen

Just YY IT !灵感起源于著名的just do it !但更加青出于蓝,更本土化,吻合kds的特性!

KDS 常用词汇总

懂得入:入了就要射...有付出才能得到
5PP54:无图无视
骑兵:有石马
步兵:无石马
弄刚弄戆伐:上海话,转换为普通话:你说你傻伐?(记住是傻伐,千万不要打成傻娃...会和悍匪"傻娃"接梁子的...)
特色表情:绿――>回复表情,很绿很和谐!
5zp:下作胚
我么进来过:雁过留声,人过留言;写这个回复的基本是装清纯型的羞涩的老匪老下作胚!
我是路过打酱油的 或者是我是进来打××的:和无么进来古一样
我是进来做俯卧撑的:同打酱油
日后再说:就是日后了再说
"三不一说"原则 即不主动 不拒绝 不负责 日后再说
TF,即土匪的缩写,源于电脑之家网站论坛中宽带山版块,整体素质不高(有1人管理5K台台式机的高手、有股票正向&反向高手若干群、有一个叫超级菠菜的是搞宏观经济研究的,但是就是这样一个专业人士却被TF们活生生的逼成了一个三流股评家,明明是艺术家到了KDS却变成了小报记者,简直就是逼良为娼!!还有以一挑十的特种兵、有职业拳击手、有券商超盘手、有水货手机专商、有电脑商、有游戏机商、有奇瑞的、有神州的、有戴尔的...卖珍珠奶茶的...嗯嗯(借HSM的台词用一下)...还有中科院的院士(白天院士,晚上原始;目前兼职制片、编剧...网络剧)!奇花异草,百花怒放,一片春意盎然的网络乐土,这样神奇的土地难道是素质不高?),收入偏低(基本月入1w以下的不敢在山上发帖、回复,要被BS...),宅男居多(这个社会别说宅男了,在上海不是人人可以做宅男的,做宅男还要做有房无贷的!不然要被人54的!),自认彪悍,实际阿乌卵(土匪习惯于常年蹲点于人广来福士正门口,不服的来单挑&群殴,并有专业摄影摄像师全程实录!)。
此外,KDS与上海另一著名论坛篱笆网有不共戴天之仇恨!

2009年假期安排

2009年元旦、春节、清明、劳动节、端午、国庆、中秋放假安排。
国庆中秋同乐,放假8天。

星期三, 十二月 10, 2008

公司年会海报

一年又到头了,看一下公司年会的海报吧

星期一, 十二月 08, 2008

vim中改变显示颜色

VIM中可以使用 :colorscheme 来切换vim的显示,包括字体颜色,背景颜色等。

如我就是用的evening的现实模式

 :colorscheme evening

默认情况下有下面一些值可以设置:

 :colorscheme
blue delek evening murphy ron torte
darkblue desert koehler pablo shine zellner
default elflord morning peachpuff slate

雷达制导导弹

主动和半主动雷达制导导弹

半主动雷达制导:

http://zh.wikipedia.org/w/index.php?title=半主动雷达制导&variant=zh-hans

      照射目标的雷达信号不是由导弹自身的制导装置发出的,

      (比如半主动空空导弹是由载机发射雷达信号照射目标).

      导弹的制导装置只负责接受目标的反射信号.

主动雷达制导导弹:

http://zh.wikipedia.org/w/index.php?title=主�雷��引&variant=zh-hans

      是就是既能主动发出雷达波,靠自身雷达追踪目标,

      又能探测分析敌方雷达波信号,并跟踪其载机。

主动制导雷达实例:

美国AIM-120系列

AIM-120 (Advanced Medium-Range Air-to-Air Missile)

http://zh.wikipedia.org/w/index.php?title=AIM-120&variant=zh-hans

导航系统

中途导引

拦截远距离目标时,AMRAAM 使用两段式导引。

发射时,会将目标的动态和飞弹发射的位置输入到AMRAAM中。

AMRAAM利用飞弹内的惯性导航系统(INS)和这些资讯来拦截目标。

机载雷达、红外线搜索追踪装置(IRST)、联合战术情报发布系统(JTIDS

或是空中预警管制机(AWACS)都能提供目标的动态。

如果持续追踪目标,飞弹内目标的资讯也会同时更新。

AMRAAM会根据目标速率、方向的改变,来修正拦截路线,

让目标能成功的进入飞弹主动雷达的侦测距离,进行自我归向导引。

不是所有AMRAAM用户都决定购买中段升级方案,这限制了AMRAAM 的有效性。

英国皇家空军 决定不购买中段升级方案去强化他们的龙卷风F3

因为测试证明AMRAAM比配备半主动雷达导引的天闪空对空飞弹更弱

--AMRAAM本身的雷达的有效距离必然不及战机的雷达)。

终端导引

一旦飞弹接近目标并进入自我归向导引时,AMRAAM会启动主动雷达去寻找目标。

如果目标出现在估计的位置或其附近,AMRAAM会将自己导引至目标。

当在近距离空战时(通常指视距范围内,最远10海里),无需雷达锁定可直接发射,

AMRAAM发射后会立即启动主动雷达,让飞弹成为真正的[[射后不理],飞行员称为 MADDOG , 意为"放疯狗咬人"]

这使AMRAAM会做类幅度很小\似于"滚桶"的机动,以增大AMRAAM自带雷达的搜索范围,增加补获目标的机率,

MADDOG 下的AMRAAM有可能打着自己人,因为任何空空导弹自身都不具备敌我识别能力,

发射前的敌我识别靠的飞机自身体的IFF(敌我识别系统),而不是导弹。

北大西洋公约组织在无线电中使用代号"PITBULL"来表示飞弹进入自我归向导引模式,

如同发射时使用的"Fox Three"(意指发射主动雷达导引飞弹)。


国产外销型SD-10空空导弹亮相 射程70公里 (第七届中国珠海航展)

http://mil.news.sina.com.cn/p/2008-11-04/0059528284.html

Picture (Device Independent Bitmap)

此次展中国一航二航展厅展示了国产最新型SD10"闪电"导弹实弹。

从这枚导弹弹身上的英文说明可以看到一些最为准确与详细的数据。

SD10中低空对空拦截防御导弹,它是采用组合综合制导的导弹系统,

采用的形式为:主动雷达+姿态惯性+数据传导。

即导弹在行进中采用姿态惯性制导控制与数据传输系统控制。

在末端导弹开启弹载主动雷达照射系统

该导弹目前是国产并不多见的真实具有全程自控导航攻击导弹俗称"发射后不用管的导"。

SD10导弹弹径203mm。弹身长度为3934mm,战斗全重约199公斤。

最大射高约为0-21公里。最大夹角射程大于70公里。

可应用于战斗机,地面防空武器系统。制导精度误差可达米级水准。


星期六, 十二月 06, 2008

hostmonster 独立 IP

Dedicated IP Address

Your Dedicated IP Address is: 67.222.56.180

According to our records, you already have a Dedicated IP created on October 23rd, 2008 (7:50 am).

If you feel this information is not correct, please contact us at (866) 573-4678.

星期二, 十二月 02, 2008

字符编码笔记:ASCII,Unicode和UTF-8 zz

http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html

今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料。

结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚。

下面就是我的笔记,主要用来整理自己的思路。但是,我尽量试图写得通俗易懂,希望能对其他朋友有用。毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识。

1. ASCII码

我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出 256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从 0000000到11111111。

上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。

ASCII码一共规定了128个字符的编码,比如空格"SPACE"是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。

2、非ASCII编码

英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。 于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使 用的编码体系,可以表示最多256个符号。

但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码 中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0—127表示的符号是一样的,不一样的只是128—255的这一段。

至于亚洲国家的文字,使用的符号就更多了,汉字就多达10万左右。一个字节只能表示256种符号,肯定是不够的,就必须使用多个字节表达一个符号。 比如,简体中文常见的编码方式是GB2312,使用两个字节表示一个汉字,所以理论上最多可以表示256x256=65536个符号。

中文编码的问题需要专文讨论,这篇笔记不涉及。这里只指出,虽然都是用多个字节表示一个符号,但是GB类的汉字编码与后文的Unicode和UTF-8是毫无关系的。

3.Unicode

正如上一节所说,世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。

可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,就像它的名字都表示的,这是一种所有符号的编码。

Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字"严"。具体的符号对应表,可以查询unicode.org,或者专门的汉字对应表

4. Unicode的问题

需要注意的是,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。

比如,汉字"严"的unicode是十六进制数4E25,转换成二进制数足足有15位(100111000100101),也就是说这个符号的表示至少需要2个字节。表示其他更大的符号,可能需要3个字节或者4个字节,甚至更多。

这里就有两个严重的问题,第一个问题是,如何才能区别unicode和ascii?计算机怎么知道三个字节表示一个符号,而不是分别表示三个符号 呢?第二个问题是,我们已经知道,英文字母只用一个字节表示就够了,如果unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必 然有二到三个字节是0,这对于存储来说是极大的浪费,文本文件的大小会因此大出二三倍,这是无法接受的。

它们造成的结果是:1)出现了unicode的多种存储方式,也就是说有许多种不同的二进制格式,可以用来表示unicode。2)unicode在很长一段时间内无法推广,直到互联网的出现。

5.UTF-8

互联网的普及,强烈要求出现一种统一的编码方式。UTF-8就是在互联网上使用最广的一种unicode的实现方式。其他实现方式还包括UTF-16和UTF-32,不过在互联网上基本不用。重复一遍,这里的关系是,UTF-8是Unicode的实现方式之一。

UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。

UTF-8的编码规则很简单,只有二条:

1)对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码。因此对于英语字母,UTF-8编码和ASCII码是相同的。

2)对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10。剩下的没有提及的二进制位,全部为这个符号的unicode码。

下表总结了编码规则,字母x表示可用编码的位。

Unicode符号范围 | UTF-8编码方式
(十六进制) | (二进制)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

下面,还是以汉字"严"为例,演示如何实现UTF-8编码。

已知"严"的unicode是4E25(100111000100101),根据上表,可以发现4E25处在第三行的范围内(0000 0800-0000 FFFF),因此"严"的UTF-8编码需要三个字节,即格式是"1110xxxx 10xxxxxx 10xxxxxx"。然后,从"严"的最后一个二进制位开始,依次从后向前填入格式中的x,多出的位补0。这样就得到了,"严"的UTF-8编码是 "11100100 10111000 10100101",转换成十六进制就是E4B8A5。

6. Unicode与UTF-8之间的转换

通过上一节的例子,可以看到"严"的Unicode码是4E25,UTF-8编码是E4B8A5,两者是不一样的。它们之间的转换可以通过程序实现。

在Windows平台下,有一个最简单的转化方法,就是使用内置的记事本小程序Notepad.exe。打开文件后,点击"文件"菜单中的"另存为"命令,会跳出一个对话框,在最底部有一个"编码"的下拉条。

bg2007102801.jpg

里面有四个选项:ANSI,Unicode,Unicode big endian 和 UTF-8。

1)ANSI是默认的编码方式。对于英文文件是ASCII编码,对于简体中文文件是GB2312编码(只针对Windows简体中文版,如果是繁体中文版会采用Big5码)。

2)Unicode编码指的是UCS-2编码方式,即直接用两个字节存入字符的Unicode码。这个选项用的little endian格式。

3)Unicode big endian编码与上一个选项相对应。我在下一节会解释little endian和big endian的涵义。

4)UTF-8编码,也就是上一节谈到的编码方法。

选择完"编码方式"后,点击"保存"按钮,文件的编码方式就立刻转换好了。

7. Little endian和Big endian

上一节已经提到,Unicode码可以采用UCS-2格式直接存储。以汉字"严"为例,Unicode码是4E25,需要用两个字节存储,一个字节 是4E,另一个字节是25。存储的时候,4E在前,25在后,就是Big endian方式;25在前,4E在后,就是Little endian方式。

这两个古怪的名称来自英国作家斯威夫特的《格列佛游记》。在该书中,小人国里爆发了内战,战争起因是人们争论,吃鸡蛋时究竟是从大头(Big- Endian)敲开还是从小头(Little-Endian)敲开。为了这件事情,前后爆发了六次战争,一个皇帝送了命,另一个皇帝丢了王位。

因此,第一个字节在前,就是"大头方式"(Big endian),第二个字节在前就是"小头方式"(Little endian)。

那么很自然的,就会出现一个问题:计算机怎么知道某一个文件到底采用哪一种方式编码?

Unicode规范中定义,每一个文件的最前面分别加入一个表示编码顺序的字符,这个字符的名字叫做"零宽度非换行空格"(ZERO WIDTH NO-BREAK SPACE),用FEFF表示。这正好是两个字节,而且FF比FE大1。

如果一个文本文件的头两个字节是FE FF,就表示该文件采用大头方式;如果头两个字节是FF FE,就表示该文件采用小头方式。

8. 实例

下面,举一个实例。

打开"记事本"程序Notepad.exe,新建一个文本文件,内容就是一个"严"字,依次采用ANSI,Unicode,Unicode big endian 和 UTF-8编码方式保存。

然后,用文本编辑软件UltraEdit中的"十六进制功能",观察该文件的内部编码方式。

1)ANSI:文件的编码就是两个字节"D1 CF",这正是"严"的GB2312编码,这也暗示GB2312是采用大头方式存储的。

2)Unicode:编码是四个字节"FF FE 25 4E",其中"FF FE"表明是小头方式存储,真正的编码是4E25。

3)Unicode big endian:编码是四个字节"FE FF 4E 25",其中"FE FF"表明是大头方式存储。

4)UTF-8:编码是六个字节"EF BB BF E4 B8 A5",前三个字节"EF BB BF"表示这是UTF-8编码,后三个"E4B8A5"就是"严"的具体编码,它的存储顺序与编码顺序是一致的。

9. 延伸阅读

* The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets(关于字符集的最基本知识)

* 谈谈Unicode编码

* RFC3629:UTF-8, a transformation format of ISO 10646(如果实现UTF-8的规定)

(完)

PHP编码转换函数 zz

iconv() 函数
Definition and Usage
定义和用法
iconv()函数的作用是:转换字符串的编码。

Description
string iconv ( string in_charset, string out_charset, string str )

Tips and Notes
注意点
注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符,//IGNORE 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。

mb_convert_encoding() 函数
Definition and Usage
定义和用法
mb_convert_encoding()函数的作用是:转换字符串的编码。

Description
string mb_convert_encoding ( string str, string to-encoding [, mixed from-encoding])

注意:但是需要先enable mbstring 扩展库。
两者区别:mb_convert_encoding 中根据内容自动识别编码;mb_convert_encoding功能强大,但是执行效率比iconv差太多;

总结:一般情况下用 iconv,只有当遇到无法确定原编码是何种编码时才用 mb_convert_encoding 函数.

下例中使作它将字符串utf-8码转换为gb2312码

PHP代码
  1. $str   = iconv("UTF-8","GB2312//TRANSLIT",$str); 

上奉线 -- 很空,很快,很强大

昨天晚上和今天早上试坐了一下上奉线。

昨天晚上6:30在上海南站发车,7:15到虹梅南路剑川路。车程45分钟。
车子很空,中间停的站很少,大概只有几站。

今天早上7:40从从家出来,8:30到石龙路地铁,还是很空,很快,很强大。

上奉线上海南站在南广场坐车,离三号线近的那个广场,和上嘉线一块的。


站点设置:
上海南站→石龙路地铁站→植物园→徐浦大桥→华泾镇政府→关港→吴泾焦化厂→吴泾化工厂→吴泾热电厂→吴泾→虹梅南路→莲花南路→电力学院→星南家园→西渡→肖塘→陈河浜→环城东路→解放中路→南桥汽车站

线路走向:上海南站南广场公交枢纽站-柳州路-龙川北路-罗城路-东泉路-石龙路-龙吴路-剑川路-A4剑川路出入口-A4莘奉金高速公路-A4西闸公路出入口-西闸公路-沪杭公路-团南公路-南桥?环城东路-南奉公路-南桥汽车站

上奉线从2009年2月23号做了一些调整:
  • 加了三个站,好像是陈家宅,紫阳,还有一站不知道叫什么。
  • 票价也做了调整,石龙路到红梅南路只要2块了。

不过人一下子多了好多,以前上下班都是有位子的,尤其下班的时候,那个空啊。
现在基本没有空位了,上班的时候还狂挤,因为左右都是两个位子,中间过道很窄,哎,好日子没了,还好快搬家了,好怀念过去的上奉线啊,坐着真是那个舒服啊。

农夫卖猪与金融危机 zz

一男赶集卖猪,天黑遇雨,二十头猪未卖成,到一农家借宿。 

    少妇说:家里只一人不便。 

    男:求你了大妹子,给猪一头。 

    女:好吧,但家只有一床。 

    男:我也到床上睡,再给猪一头。 

    女:同意。 

    半夜男与女商量,我到你上面睡,女不肯。 

    男:给猪两头。 

    女允,要求上去不能动。 

    少顷,男忍不住,央求动一下,女不肯。 

    男:动一下给猪两头。女同意。 

    男动了八次停下,女问为何不动? 

    男说猪没了。 

    女小声说:要不我给你猪…… 

    天亮后,男吹着口哨赶30头(含少妇家的10头)猪赶集去了…… 

  哈佛导师评论:要发现用户潜在需求,前期必须引导,培养用户需求,因此产生的投入是符合发展规律的。 

  (加强篇) 

  另一男得知此事,决意如法炮制,遂赶集卖猪,天黑遇雨,二十头猪未卖成,到一农家借宿。

    少妇说:家里只一人不便。 

    男:求你了大妹子,给猪一头 

    女:好吧,但家只有一床。 

    男:我也到床上睡,再给猪一头。 

    女:同意。 

    半夜男商女,我到你上面睡,女不肯。 

    男:给猪两头。 

    女允,要求上去不能动。 

    少顷,男忍不住,央求动一下,女不肯。 

    男:动一下给猪两头。女同意。 

    男动了七次停下,女问为何不动? 

    男说:完事了~~~

女:...... 

    天亮后,男低著头赶2头猪赶集去了...... 

  哈佛导师评论:要结合企业自身规模进行谨慎投资,谨防资金链断裂问题。

  又一男得知此事,决意如法炮制兼吸取教训,遂先用一头猪去换一粒伟哥,事必,天亮后,男吹着口哨赶38头(含少妇家的18头)猪赶集去了…… 

哈佛导师评论:企业如果获得金融资本的帮助,自身经营能力将得到倍增。

  知道此法男多,伟哥供不应求,逐渐要2头,3头猪换一粒伟哥。 

哈佛导师评论:这就是通货膨胀。 

  当伟哥价格涨到16头猪一颗的时候,哈佛导师评论:该男已经进入边际成本,除了拥有对自身能力的自信和未来良好愿望以外,实际现猪流已经为零。 

  但换猪男越来越多,卖伟哥的决定,扩展生产能力,推出一种次级伟哥,如果你缺一头猪,只要你承诺可以到该女房中一夜,就可以先借,事成后补交猪款,这个方法大大促进了伟哥销售。 

哈佛导师评论:这就是贷款,让企业可以根据未来的收益选择借支流动资金。

  伟哥专卖店后来在即使你一头猪都没有,只要你承诺可以到该女房中一夜,就可以先借,事成后补交猪款。 

  哈佛导师评论:这就是金融创新,让现在的人花未来的钱,反正等你老了未来的钱你  也花不动。 

  消息一出,换猪男越来越多,有人找伟哥专卖店,这个项目太好了,我们把它变成优质基金,对外销售债卷,你们也就可以分享我的收益,如何? 

  结果伟哥专卖店觉得甚好,于是该公司把换猪男分三类,一类是拿现猪换的,一类是一部分现猪贷的,一类是完全没有现猪借的,发行三种债卷。大家踊跃而上。纷纷购买伟哥专卖店的债卷,伟哥专卖店生意太好,就把债卷销售外包给另外一家公司运作,该公司也一并大发其财,公司越做越大,甚至可以脱离实际伟哥销售情况来发行,给自己和伟哥专卖店带来巨大的现金收益。 

  哈佛导师评论:这就是专业的人做专业的事,从实体经营到资本运作,经济进入了更高的层次。 

  为了防止自己债卷未来有损失,该公司决定给它买上保险,这样债卷销售就更容易,因为一旦债卷出现问题,还可以获得保险公司的赔付,哇,债券公司销售这下子太好了,保险公司也获得巨大平白无故的保险收入。 

  哈佛导师评论:这就是风险对冲,策略联盟,提高了企业的抗风险能力,也保护了消费者利益。 

  换猪男太多,排长队等待,该女无法承受,说老娘不干了,我搬家。一时间有无数拥有伟哥的欠猪男。 

  哈佛导师评论:这是个别现象,属于市场的正常波动,不会影响整个经济。  

  结果该女迟迟不肯搬回。一部分欠猪男没有收入,只好赖帐,结果大量债卷到期无法换现猪吃,债卷公司一看,一粒伟哥16头猪,这哪里还得起,宣布倒闭。

  哈佛导师评论:这是次贷危机,不会影响整个金融行业。 

  哪里晓得债卷公司还把债卷上了保险,保险公司一看,这哪里赔得起,于是也宣布要倒闭。

  哈佛导师评论:这是金融危机,还不会影响整个实体经济。 

 

   后文:据说该女已搬到中国定居,因为中国人还没有养成今天花明天钱的习惯,因此不会欠银行贷款。

星期四, 十一月 27, 2008

vim 在新的标签页(tab)打开help

open help window in a new tab.

:tab h pattern

星期六, 十一月 22, 2008

上海闵行 -- 金沙三余(油厂) 长途汽车

路线及时间:

上海发车:

江川路、昆阳路 4:30
东川路、碧江路 4:35
闵行交大永平路 5:00
沧源路农工商    5:05
闵行车站           5:10
东川路沪闵路
沪闵路剑川路
北桥
颛桥
莘庄
南方商城
锦江乐园
虹梅路顾戴路
漕宝路
虹梅路吴中路
虹桥路程家桥哈密路
北新泾大桥
真北路金沙江路
祁连山路梅川路
曹安轻纺市场
曹安路外环线             6:16


三余发车时间:
   
三余地区医院路口  11:30
三余油厂                 12:00
忠义                          12:10
东社                           12:20
唐洪加油站                  12:30
老十八总                    12:50
市中路口、老车站            13:00
金沙车站                    13:40
银河大桥                    13:45
金西路口                    
反帝桥
金乐路口
袁灶
三星                        14:05
天补                        14:10
大兴转盘                    14:15
海太汽渡                    14:20

车号 沪B15779
电话 (南通) 13606288390
         (上海)13391318368

星期二, 十一月 18, 2008

[转帖]自由泳动作分解图文字

[转帖]自由泳动作分解图文字

许多人在学习自由泳时并没有一个科学正确的学习动作示范,因此往往照猫画虎下了池子就知道甩胳膊打腿抓不住动作要领。下面的九张图详细分解了自由泳的一个周期,也是专业运动员体验自由泳动作和感觉的训练方法之一,对初学者和进阶提高都很有用。

在训练过程中要注意几点:
1)学会侧卧游进和平衡。自由泳和仰泳都是纵轴(长轴)摆动泳姿,在一个周期中三分之二的时间身体处于侧卧(左或右),三分之一处于左右转换阶段。侧卧时身体的对水面积最小因此阻力最少,是身体在水中流线型最好的阶段。
2)初学者动作要慢充分体验个阶段水中滑动的感觉,尽量做到一次划水游进最长距离。

图(1)

此主题相关图片如下:



1》左侧卧于水中,左臂水平前伸,右肩露出水面自然平放于大腿册。头右转脸露出水面呼吸。轻打腿以保持整个身体的平衡。这一体位应该是自由泳动作周期中流线型最好的。这一动作也可用来专门练习侧踢腿前进,如果你踢腿的力量不够可以戴上脚蹼(短的,蹼片长不
超过脚长)

图(2)

此主题相关图片如下:



2》转头到水平前视,你应该可以从水下看见水面。保持身体的平衡。

此主题相关图片如下:



3》继续转头直到看见水底,保持平衡。身体仍然是水平伸展,右臂露出水面。
注意:头完全没于水中。

此主题相关图片如下:



4》现在开始回摆你的右臂,感觉就象你从裤兜里抽手一样。保持肘关节始终处于高位。肩发力。保持平衡,头依然看向池底。

此主题相关图片如下:



5》摆臂。
  注意:摆臂过程中手和小臂完全放松就象通过肘关节挂在上臂一样,由肩和上臂带动移动。身体要始终保持平衡、伸展放松。

此主题相关图片如下:



6》当右手开始入水时,在躯干肌肉的带动下开始做原木滚动(想象原木在水中的整体滚动的情形,髋关节和肩关节同时开始同步从右向左滚动)。左臂开始拉抱水。
  注意:1,仔细体验原木滚动的感觉,这是从左右侧体相互转换的关键。也是仰泳体位相互转换的关键。原木滚动——即髋肩关节同时同步饶身体纵轴转动。
      2,这时两臂配合的相位叫——两臂前四分法配合(又叫中前交差)

此主题相关图片如下:



7》左臂划水的同时身体继续做原木滚动。

  这里有两种情况:1,如果你决定不左侧呼吸,头就不随身体做转动,始终看向池底。
            2,如果你决定左侧呼吸,头就随身体做原木转动,感觉就象你的脖子
              打上了石膏不能相对肩做任何转动而只能随其运动。

此主题相关图片如下:



8》继续转动、划臂,保持头身体相对固定。

此主题相关图片如下:



9》转动到身体右侧卧,左臂露出水面水平伸展于体侧。右臂前伸。与图一完全对应相反。 头可继续转动以使脸露出水面,呼吸。一周期结束。

练习应该循序渐进,首先应该达到身体能够稳定平衡地左右交替,动作衔接流畅。再
  加快频率,最终达到比赛速度。

星期二, 十一月 04, 2008

Firefox插件:MeasureIt 测量像素工具。

使用MeasureIt可以测量页面的长度和高度,
不能测量斜线具体,不过一般网页设计时也用不到斜线。

下载地址:
https://addons.mozilla.org/zh-CN/firefox/addon/539

使用方法:
安装之后,状态栏左下角有个按钮,像尺子样的:

Firefox插件:CSSViewer,CSS查看器

CSSViewer可以查看页面的CSS属性设置,使用很方便。
能给出字体,段落等的属性值。

下面是截图:


使用方法:
工具 --> CSSViewer

下载地址:
https://addons.mozilla.org/zh-CN/firefox/addon/2104

星期六, 十一月 01, 2008

中国上海移动取消来电转移

我买的山寨机会自动的来电转移,当我关机时,就转到莫名其妙的电话去。

打了10086,问了移动的MM,下面的方法可以取消所有的来电转移:

拨 ##21## 再按通话键就可以了

在上海可能拨21,其他地方有可能不同,大家打10086问吧。

Firefox addon: Live HTTP Header

Firefox的这个插件可以看到通过firefox所发出的http请求头header, 以及web server返回的http 头header。

对网站的debug很有用。

使用方法:
工具菜单 --> Live HTTP Headers

下载地址:
https://addons.mozilla.org/addon/3829 

星期五, 十月 31, 2008

sed r 命令,将文件内容插入目标文件

sed 的r 命令可以读入一个文件,将此文件插入需要位置:

sed -e "/place_pattern_need_insert_target_file/r target_file_name" you_file_name

星期二, 十月 28, 2008

tcl中expr用来计算常用函数值

我们知道,在tcl中expr可以用来计算加减乘除等运算,如:

set c [expr $a/$b];

除了标准操作符+、-、*、/之外,还可以为expr提供几个能够使它执行其他数学操作的选项。expr命令的基本语法是:

expr function number

expr能够识别的一些函数及其返回的值如下:

abs(x) x的绝对值

round(x) x舍入后所得到的整数值

cos(x) x的余弦(x为弧度)

cosh(x) x的双曲余弦

acos(x) x的反余弦(0到p)

sin(x) x的正弦(x为弧度)

sinh(x) x的双曲正弦(-p/2到p/2)

asin(x) x的反正弦(-p/2到p/2)

tan(x) x的正切(x为弧度)

tanh(x) x的双曲正切

atan(x) x的反正切(-p/2到p/2)

exp(x) e的x次幕

log(x) x的自然对数

log10(x) x的底为10的对数

sqrt(x) x的平方根


下列数学函数采用两个数字变元:

pow(x,y) x的y次幂

这个函数的用法如下:

set a 2;

set b [expr pow($a,3)];

puts $b;

这些命令产生的输出结果为8.0,即2的3次幕的值。

星期日, 十月 26, 2008

flash.swf文件反编译软件

现在网络流行的视频播放都是同过flash来播放flv文件,想得到视频文件的链接地址,从而下载视频文件那么需要对flash文件进行反编译。

因为AS(Action Script)跟javaScript一样都属于解释型语言,它是可逆的,所以很容易被反编译。

Sothink SWF Decompiler 和 Action.Script.Viewer都能够对swf文件进行反向。

不过Action.Script.Viewer 5.0还不支持flash 9,所以有些内容不能反编译。好像Action Script Viewer 6.0 Beta已经出来了,不知道有没有支持flash 9。

星期五, 十月 24, 2008

买了一个独立IP

我的hostmonster的空间前一阵访问不了了,
但是这个空间还有一年多才到期,
现在在国内买个空间也要2百左右,而且功能一帮,不知道服务怎么样。
想想还是买个独立IP,$2.5USD一个月,一年30刀,算下来210块,相当于在国内买一个空间。
也挺划算的:)

我的python小站 http://www.pythonclub.org 欢迎光临啊:)

星期三, 十月 22, 2008

去掉脚本中的续行符"\",并合并两行

有些时候为了除了脚本方便,需要将脚本中的续行符去掉,
sed可以比较容易的帮我们实现这个功能:

sed -e '{:top;N;s/\\\n//;/\\$/b top;P;D}' you.script.file.here

说明:

:top #跳转标记
N #读取下一行,
s/\\\n// #把续行符和换行符去掉
/\\$/b top #如果行尾还有续行符,则跳到前面,继续读取下一行
P #否则打印第一行
D #把模式空间中第一行删除

linux 命令行快捷键


Ctrl + A # Go to the beginning of the line you are currently typing on
Ctrl + E # Go to the end of the line you are currently typing on
Ctrl + L # Clears the Screen, similar to the clear command
Ctrl + U # Clears the line before the cursor position. If you are at the end of the line, clears the entire line.
Ctrl + H # Same as backspace
Ctrl + C # Kill whatever you are running
Ctrl + Z # Puts whatever you are running into a suspended background process. fg restores it.
Ctrl + W # Delete the word before the cursor
Ctrl + K # Clear the line after the cursor
Ctrl + T # Swap the last two characters before the cursor
Tab # Auto
Ctrl + Y # to paste it (as in delete and copy) all text in front of the cursor
Ctrl + b # Move back a character
Ctrl + f # Move forward a character
Alt + F # Move cursor forward one word on the current line
Alt + B # Move cursor backward one word on the current line
Alt + c # Capitalize the word
Alt + d # Delete word
Alt + l # Make word lowercase
Alt + u # Make word uppercase
Alt + backspace # Delete backward from cursor

星期二, 十月 21, 2008

c语言 printf()输出格式控制

awk,python等print的用法和C的基本一样,时间长不用就会忘记,现备份如下:

1.转换说明符
%a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99)
%c 字符
%d 有符号十进制整数
%f 浮点数(包括float和doulbe)
%e(%E) 浮点数指数输出[e-(E-)记数法]
%g(%G) 浮点数不显无意义的零"0"
%i 有符号十进制整数(与%d相同)
%u 无符号十进制整数
%o 八进制整数 e.g. 0123
%x(%X) 十六进制整数0f(0F) e.g. 0x1234
%p 指针
%s 字符串
%% "%"

2.标志
左对齐:"-" e.g. "%-20s"
右对齐:"+" e.g. "%+20s"
空格:若符号为正,则显示空格,负则显示"-" e.g. "% 6.2f"
#:对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;
对e,g,f 类当结果有小数时才给出小数点。

3.格式字符串(格式)
[标志][输出最少宽度][.精度][长度]类型
"%-md" :左对齐,若m比实际少时,按实际输出。
"%m.ns":输出m位,取字符串(左起)n位,左补空格,当n>m or m省略时m=n
e.g. "%7.2s" 输入CHINA
  输出" CH"
"%m.nf":输出浮点数,m为宽度,n为小数点右边数位
e.g. "%3.1f" 输入3852.99
输出3853.0
长度:为h短整形量,l为长整形量

常用Linux系统信息查看命令

系统
uname -a 查看内核/操作系统/CPU信息
head -n 1 /etc/issue 查看操作系统版本
cat /proc/cpuinfo 查看CPU信息
hostname 查看计算机名
lspci -tv 列出所有PCI设备
lsusb -tv 列出所有USB设备
lsmod 列出加载的内核模块
env 查看环境变量
资源
free -m 查看内存使用量和交换区使用量
df -h 查看各分区使用情况
du -sh 查看指定目录的大小
grep MemTotal /proc/meminfo 查看内存总量
grep MemFree /proc/meminfo 查看空闲内存量
uptime 查看系统运行时间、用户数、负载
cat /proc/loadavg 查看系统负载
磁盘和分区
mount | column -t 查看挂接的分区状态
fdisk -l 查看所有分区
swapon -s 查看所有交换分区
hdparm -i /dev/hda 查看磁盘参数(仅适用于IDE设备)
dmesg | grep IDE 查看启动时IDE设备检测状况
网络
ifconfig 查看所有网络接口的属性
iptables -L 查看防火墙设置
route -n 查看路由表
netstat -lntp 查看所有监听端口
netstat -antp 查看所有已经建立的连接
netstat -s 查看网络统计信息
进程
ps -ef 查看所有进程
top 实时显示进程状态
用户
w 查看活动用户
id 查看指定用户信息
last 查看用户登录日志
cut -d: -f1 /etc/passwd 查看系统所有用户
cut -d: -f1 /etc/group 查看系统所有组
crontab -l 查看当前用户的计划任务
服务
chkconfig --list 列出所有系统服务
chkconfig --list | grep on 列出所有启动的系统服务
程序
rpm -qa 查看所有安装的软件包

tar简单应用

经常不记得tar的用法,现记录如下:

格式:  tar  选项  文件目录列表
功能:  对文件目录进行打包备份
选项:
-c  建立新的归档文件
-r  向归档文件末尾追加文件
-x  从归档文件中解出文件
-O  将文件解开到标准输出
-v  处理过程中输出相关信息
-f  对普通文件操作
-z  调用gzip来压缩归档文件,与-x联用时调用gzip完成解压缩
-Z  调用compress来压缩归档文件,与-x联用时调用compress完成解压缩  
例如:
1.将当前目录下所有.txt文件打包并压缩归档到文件this.tar.gz,我们可以使用
tar czvf this.tar.gz ./*.txt
2.将当前目录下的this.tar.gz中的文件解压到当前目录我们可以使用
tar xzvf this.tar.gz ./

awk使用手册 zz

什么是awk? 

你可能对UNIX比较熟悉,但你可能对awk很陌生,这一点也不奇怪,的确,与其优秀的功能相比,awk还远没达到它应有的知名度。awk是什么?与其它大多数UNIX命令不同的是,从名字上看,我们不可能知道awk的功能:它既不是具有独立意义的英文单词,也不是几个相关单词的缩写。事实上,awk是三个人名的缩写,他们是:Aho、(Peter)Weinberg和(Brain)Kernighan。正是这三个人创造了awk---一个优秀的样式扫描与处理工具。 

AWK的功能是什么?与sed和grep很相似,awk是一种样式扫描与处理工具。但其功能却大大强于sed和grep。awk提供了极其强大的功能:它几乎可以完成grep和sed所能完成的全部工作,同时,它还可以可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上,awk的确拥有自己的语言:awk程序设计语言,awk的三位创建者已将它正式定义为:样式扫描和处理语言。 

为什么使用awk? 

即使如此,你也许仍然会问,我为什么要使用awk? 

使用awk的第一个理由是基于文本的样式扫描和处理是我们经常做的工作,awk所做的工作有些象数据库,但与数据库不同的是,它处理的是文本文件,这些文件没有专门的存储格式,普通的人们就能编辑、阅读、理解和处理它们。而数据库文件往往具有特殊的存储格式,这使得它们必须用数据库处理程序来处理它们。既然这种类似于数据库的处理工作我们经常会遇到,我们就应当找到处理它们的简便易行的方法,UNIX有很多这方面的工具,例如sed 、grep、sort以及find等等,awk是其中十分优秀的一种。 

使用awk的第二个理由是awk是一个简单的工具,当然这是相对于其强大的功能来说的。的确,UNIX有许多优秀的工具,例如UNIX天然的开发工具C语言及其延续C++就非常的优秀。但相对于它们来说,awk完成同样的功能要方便和简捷得多。这首先是因为awk提供了适应多种需要的解决方案:从解决简单问题的awk命令行到复杂而精巧的awk程序设计语言,这样做的好处是,你可以不必用复杂的方法去解决本来很简单的问题。例如,你可以用一个命令行解决简单的问题,而C不行,即使一个再简单的程序,C语言也必须经过编写、编译的全过程。其次,awk本身是解释执行的,这就使得awk程序不必经过编译的过程,同时,这也使得它与shell script程序能够很好的契合。最后,awk本身较C语言简单,虽然awk吸收了C语言很多优秀的成分,熟悉C语言会对学习awk有很大的帮助,但awk本身不须要会使用C语言——一种功能强大但需要大量时间学习才能掌握其技巧的开发工具。 

使用awk的第三个理由是awk是一个容易获得的工具。与C和C++语言不同,awk只有一个文件(/bin/awk),而且几乎每个版本的UNIX都提供各自版本的awk,你完全不必费心去想如何获得awk。但C语言却不是这样,虽然C语言是UNIX天然的开发工具,但这个开发工具却是单独发行的,换言之,你必须为你的UNIX版本的C语言开发工具单独付费(当然使用D版者除外),获得并安装它,然后你才可以使用它。 

基于以上理由,再加上awk强大的功能,我们有理由说,如果你要处理与文本样式扫描相关的工作,awk应该是你的第一选择。在这里有一个可遵循的一般原则:如果你用普通的shell工具或shell script有困难的话,试试awk,如果awk仍不能解决问题,则便用C语言,如果C语言仍然失败,则移至C++。 

awk的调用方式 

前面曾经说过,awk提供了适应多种需要的不同解决方案,它们是: 

一、awk命令行,你可以象使用普通UNIX命令一样使用awk,在命令行中你也可以使用awk程序设计语言,虽然awk支持多行的录入,但是录入长长的命令行并保证其正确无误却是一件令人头疼的事,因此,这种方法一般只用于解决简单的问题。当然,你也可以在shell script程序中引用awk命令行甚至awk程序脚本。 

二、使用-f选项调用awk程序。awk允许将一段awk程序写入一个文本文件,然后在awk命令行中用-f选项调用并执行这段程序。具体的方法我们将在后面的awk语法中讲到。 

三、利用命令解释器调用awk程序:利用UNIX支持的命令解释器功能,我们可以将一段awk程序写入文本文件,然后在它的第一行加上: 
#!/bin/awk -f 
并赋予这个文本文件以执行的权限。这样做之后,你就可以在命令行中用类似于下面这样的方式调用并执行这段awk程序了。 

$awk脚本文本名 待处理文件 

awk的语法: 

与其它UNIX命令一样,awk拥有自己的语法: 

awk [ -F re] [parameter...] ['prog'] [-f progfile][in_file...] 

参数说明: 

-F re:允许awk更改其字段分隔符。 

parameter: 该参数帮助为不同的变量赋值。 

'prog': awk的程序语句段。这个语句段必须用单拓号:'和'括起,以防被shell解释。这个程序语句段的标准形式为: 

'pattern {action}' 

其中pattern参数可以是egrep正则表达式中的任何一个,它可以使用语法/re/再加上一些样式匹配技巧构成。与sed类似,你也可以使用","分开两样式以选择某个范围。关于匹配的细节,你可以参考附录,如果仍不懂的话,找本UNIX书学学grep和sed(本人是在学习ed时掌握匹配技术的)。action参数总是被大括号包围,它由一系统awk语句组成,各语句之间用";"分隔。awk解释它们,并在pattern给定的样式匹配的记录上执行其操作。与shell类似,你也可以使用“#”作为注释符,它使“#”到行尾的内容成为注释,在解释执行时,它们将被忽略。你可以省略pattern和action之一,但不能两者同时省略,当省略pattern时没有样式匹配,表示对所有行(记录)均执行操作,省略action时执行缺省的操作——在标准输出上显示。 

-f progfile:允许awk调用并执行progfile指定有程序文件。progfile是一个文本文件,他必须符合awk的语法。 

in_file:awk的输入文件,awk允许对多个输入文件进行处理。值得注意的是awk不修改输入文件。如果未指定输入文件,awk将接受标准输入,并将结果显示在标准输出上。awk支持输入输出重定向。 

awk的记录、字段与内置变量: 

前面说过,awk处理的工作与数据库的处理方式有相同之处,其相同处之一就是awk支持对记录和字段的处理,其中对字段的处理是grep和sed不能实现的,这也是awk优于二者的原因之一。在awk中,缺省的情况下总是将文本文件中的一行视为一个记录,而将一行中的某一部分作为记录中的一个字段。为了操作这些不同的字段,awk借用shell的方法,用$1,$2,$3...这样的方式来顺序地表示行(记录)中的不同字段。特殊地,awk用$0表示整个行(记录)。不同的字段之间是用称作分隔符的字符分隔开的。系统默认的分隔符是空格。awk允许在命令行中用-F re的形式来改变这个分隔符。事实上,awk用一个内置的变量FS来记忆这个分隔符。awk中有好几个这样的内置变量,例如,记录分隔符变量RS、当前工作的记录数NR等等,本文后面的附表列出了全部的内置变量。这些内置的变量可以在awk程序中引用或修改,例如,你可以利用NR变量在模式匹配中指定工作范围,也可以通过修改记录分隔符RS让一个特殊字符而不是换行符作为记录的分隔符。 

例:显示文本文件myfile中第七行到第十五行中以字符%分隔的第一字段,第三字段和第七字段: 

awk -F % 'NR==7,NR==15 {printf $1 $3 $7}' 

awk的内置函数 

awk之所以成为一种优秀的程序设计语言的原因之一是它吸收了某些优秀的程序设计语言(例如C)语言的许多优点。这些优点之一就是内置函数的使用,awk定义并支持了一系列的内置函数,由于这些函数的使用,使得awk提供的功能更为完善和强大,例如,awk使用了一系列的字符串处理内置函数(这些函数看起来与C语言的字符串处理函数相似,其使用方式与C语言中的函数也相差无几),正是由于这些内置函数的使用,使awk处理字符串的功能更加强大。本文后面的附录中列有一般的awk所提供的内置函数,这些内置函数也许与你的awk版本有些出入,因此,在使用之前,最好参考一下你的系统中的联机帮助。 

作为内置函数的一个例子,我们将在这里介绍awk的printf函数,这个函数使得awk与c语言的输出相一致。实际上,awk中有许多引用形式都是从C语言借用过来的。如果你熟悉C语言,你也许会记得其中的printf函数,它提供的强大格式输出功能曾经带我们许多的方便。幸运的是,我们在awk中又和它重逢了。awk中printf几乎与C语言中一模一样,如果你熟悉C语言的话,你完全可以照C语言的模式使用awk中的printf。因此在这里,我们只给出一个例子,如果你不熟悉的话,请随便找一本C语言的入门书翻翻。 

例:显示文件myfile中的行号和第3字段: 

$awk '{printf"%03d%s\n",NR,$1}' myfile 

在命令行使用awk 

按照顺序,我们应当讲解awk程序设计的内容了,但在讲解之前,我们将用一些例子来对前面的知识进行回顾,这些例子都是在命令行中使用的,由此我们可以知道在命令行中使用awk是多么的方便。这样做的原因一方面是为下面的内容作铺垫,另一方面是介绍一些解决简单问题的方法,我们完全没有必要用复杂的方法来解决简单的问题----既然awk提供了较为简单的方法的话。 

例:显示文本文件mydoc匹配(含有)字符串"sun"的所有行。 

$awk '/sun/{print}' mydoc 

由于显示整个记录(全行)是awk的缺省动作,因此可以省略action项。 

$awk '/sun/' mydoc 

例:下面是一个较为复杂的匹配的示例: 

$awk '/[Ss]un/,/[Mm]oon/ {print}' myfile 

它将显示第一个匹配Sun或sun的行与第一个匹配Moon或moon的行之间的行,并显示到标准输出上。 

例:下面的示例显示了内置变量和内置函数length()的使用: 

$awk 'length($0)>;80 {print NR}' myfile 

该命令行将显示文本myfile中所有超过80个字符的行号,在这里,用$0表示整个记录(行),同时,内置变量NR不使用标志符'$'。 

例:作为一个较为实际的例子,我们假设要对UNIX中的用户进行安全性检查,方法是考察/etc下的passwd文件,检查其中的passwd字段(第二字段)是否为"*",如不为"*",则表示该用户没有设置密码,显示出这些用户名(第一字段)。我们可以用如下语句实现: 

#awk -F: '$2=="" {printf("%s no password!\n",$1' /etc/passwd 

在这个示例中,passwd文件的字段分隔符是“:”,因此,必须用-F:来更改默认的字段分隔符,这个示例中也涉及到了内置函数printf的使用。 

awk的变量 

如同其它程序设计语言一样,awk允许在程序语言中设置变量,事实上,提供变量的功能是程序设计语言的其本要求,不提供变量的程序设计语言本人还从未见过。 

awk提供两种变量,一种是awk内置的变量,这前面我们已经讲过,需要着重指出的是,与后面提到的其它变量不同的是,在awk程序中引用内置变量不需要使用标志符"$"(回忆一下前面讲过的NR的使用)。awk提供的另一种变量是自定义变量。awk允许用户在awk程序语句中定义并调用自已的变量。当然这种变量不能与内置变量及其它awk保留字相同,在awk中引用自定义变量必须在它前面加上标志符"$"。与C语言不同的是,awk中不需要对变量进行初始化,awk根据其在awk中第一次出现的形式和上下文确定其具体的数据类型。当变量类型不确定时,awk默认其为字符串类型。这里有一个技巧:如果你要让你的awk程序知道你所使用的变量的明确类型,你应当在在程序中给它赋初值。在后面的实例中,我们将用到这一技巧。 

运算与判断: 

作为一种程序设计语言所应具有的特点之一,awk支持多种运算,这些运算与C语言提供的几本相同:如+、-、*、/、%等等,同时,awk也支持C语言中类似++、--、+=、-=、=+、=-之类的功能,这给熟悉C语言的使用者编写awk程序带来了极大的方便。作为对运算功能的一种扩展,awk还提供了一系列内置的运算函数(如log、sqr、cos、sin等等)和一些用于对字符串进行操作(运算)的函数(如length、substr等等)。这些函数的引用大大的提高了awk的运算功能。 

作为对条件转移指令的一部分,关系判断是每种程序设计语言都具备的功能,awk也不例外。awk中允许进行多种测试,如常用的==(等于)、!=(不等于)、>;(大于)、<(小于)、>;=(大于等于)、>;=(小于等于)等等,同时,作为样式匹配,还提供了~(匹配于)和!~(不匹配于)判断。 

作为对测试的一种扩充,awk也支持用逻辑运算符:!(非)、&&(与)、||(或)和括号()进行多重判断,这大大增强了awk的功能。本文的附录中列出了awk所允许的运算、判断以及操作符的优先级。 

awk的流程控制 

流程控制语句是任何程序设计语言都不能缺少的部分。任何好的语言都有一些执行流程控制的语句。awk提供的完备的流程控制语句类似于C语言,这给我们编程带来了极大的方便。 

1、BEGIN和END: 

在awk中两个特别的表达式,BEGIN和END,这两者都可用于pattern中(参考前面的awk语法),提供BEGIN和END的作用是给程序赋予初始状态和在程序结束之后执行一些扫尾的工作。任何在BEGIN之后列出的操作(在{}内)将在awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行。因此,通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果。 

例:累计销售文件xs中的销售金额(假设销售金额在记录的第三字段): 

$awk 
>;'BEGIN { FS=":";print "统计销售金额";total=0} 
>;{print $3;total=total+$3;} 
>;END {printf "销售金额总计:%.2f",total}' sx 
(注:>;是shell提供的第二提示符,如要在shell程序awk语句和awk语言中换行,则需在行尾加反斜杠\) 

在这里,BEGIN预置了内部变量FS(字段分隔符)和自定义变量total,同时在扫描之前显示出输出行头。而END则在扫描完成后打印出总合计。 

2、流程控制语句 
awk提供了完备的流程控制语句,其用法与C语言类似。下面我们一一加以说明: 

2.1、if...else语句: 

格式: 
if(表达式) 
语句1 
else 
语句2 

格式中"语句1"可以是多个语句,如果你为了方便awk判断也方便你自已阅读,你最好将多个语句用{}括起来。awk分枝结构允许嵌套,其格式为: 

if(表达式1) 
{if(表达式2) 
语句1 
else 
语句2 
语句3 
else {if(表达式3) 
语句4 
else 
语句5 
语句6 

当然实际操作过程中你可能不会用到如此复杂的分枝结构,这里只是为了给出其样式罢了。 

2.2、while语句 

格式为: 

while(表达式) 
语句 

2.3、do-while语句 

格式为: 

do 
语句 
}while(条件判断语句) 

2.4、for语句 

格式为: 

for(初始表达式;终止条件;步长表达式) 
{语句} 

在awk的 while、do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。break中断当前正在执行的循环并跳到循环外执行下一条语句。continue从当前位置跳到循环开始处执行。对于exit的执行有两种情况:当exit语句不在END中时,任何操作中的exit命令表现得如同到了文件尾,所有模式或操作执行将停止,END模式中的操作被执行。而出现在END中的exit将导致程序终止。 

例:为了 

awk中的自定义函数 

定义和调用用户自己的函数是几乎每个高级语言都具有的功能,awk也不例外,但原始的awk并不提供函数功能,只有在nawk或较新的awk版本中才可以增加函数。 

函数的使用包含两部分:函数的定义与函数调用。其中函数定义又包括要执行的代码(函数本身)和从主程序代码传递到该函数的临时调用。 

awk函数的定义方法如下: 

function 函数名(参数表){ 
函数体 

在gawk中允许将function省略为func,但其它版本的awk不允许。函数名必须是一个合法的标志符,参数表中可以不提供参数(但在调用函数时函数名后的一对括号仍然是不可缺少的),也可以提供一个或多个参数。与C语言相似,awk的参数也是通过值来传递的。 

在awk中调用函数比较简单,其方法与C语言相似,但awk比C语言更为灵活,它不执行参数有效性检查。换句话说,在你调用函数时,可以列出比函数预计(函数定义中规定)的多或少的参数,多余的参数会被awk所忽略,而不足的参数,awk将它们置为缺省值0或空字符串,具体置为何值,将取决于参数的使用方式。 

awk函数有两种返回方式:隐式返回和显式返回。当awk执行到函数的结尾时,它自动地返回到调用程序,这是函数是隐式返回的。如果需要在结束之前退出函数,可以明确地使用返回语句提前退出。方法是在函数中使用形如:return 返回值 格式的语句。 

例:下面的例子演示了函数的使用。在这个示例中,定义了一个名为print_header的函数,该函数调用了两个参数FileName和PageNum,FileName参数传给函数当前使用的文件名,PageNum参数是当前页的页号。这个函数的功能是打印(显示)出当前文件的文件名,和当前页的页号。完成这个功能后,这个函数将返回下一页的页号。 

nawk 
>;'BEGIN{pageno=1;file=FILENAME 
>;pageno=print_header(file,pageno);#调用函数print_header 
>;printf("当前页页号是:%d\n",pageno); 
>;} 

>;#定义函数print_header 
>;function print_header(FileName,PageNum){ 
>;printf("%s %d\n",FileName,PageNum); >;PageNum++;return PageNUm; 
>;} 
>;}' myfile 

执行这个程序将显示如下内容: 

myfile 1 
当前页页号是:2 

awk高级输入输出 

1.读取下一条记录: 

awk的next语句导致awk读取下一个记录并完成模式匹配,然后立即执行相应的操作。通常它用匹配的模式执行操作中的代码。next导致这个记录的任何额外匹配模式被忽略。 

2.简单地读取一条记录 

awk的 getline语句用于简单地读取一条记录。如果用户有一个数据记录类似两个物理记录,那么getline将尤其有用。它完成一般字段的分离(设置字段变量$0 FNR NF NR)。如果成功则返回1,失败则返回0(到达文件尾)。如果需简单地读取一个文件,则可以编写以下代码: 

例:示例getline的使用 

{while(getline==1) 
#process the inputted fields 

也可以使getline保存输入数据在一个字段中,而不是通过使用getline variable的形式处理一般字段。当使用这种方式时,NF被置成0,FNR和NR被增值。 

用户也可以使用getline<"filename"方式从一个给定的文件中输入数据,而不是从命令行所列内容输入数据。此时,getline将完成一般字段分离(设置字段变量$0和NF)。如果文件不存在,返回-1,成功,返回1,返回0表示失败。用户可以从给定文件中读取数据到一个变量中,也可以用stdin(标准输入设备)或一个包含这个文件名的变量代替filename。值得注意的是当使用这种方式时不修改FNR和NR。 

另一种使用getline语句的方法是从UNIX命令接受输入,例如下面的例子: 

例:示例从UNIX命令接受输入 

{while("who -u"|getline) 
#process each line from the who command 

当然,也可以使用如下形式: 

"command" | getline variable 

3.关闭文件: 

awk中允许在程序中关闭一个输入或输出文件,方法是使用awk的close语句。 

close("filename") 

filename可以是getline打开的文件(也可以是stdin,包含文件名的变量或者getline使用的确切命令)。或一个输出文件(可以是stdout,包含文件名的变量或使用管道的确切命令)。 

4.输出到一个文件: 

awk中允许用如下方式将结果输出到一个文件: 

printf("hello word!\n")>;"datafile" 
或 
printf("hello word!\n")>;>;"datafile" 

5.输出到一个命令 

awk中允许用如下方式将结果输出到一个命令: 

printf("hello word!\n")|"sort-t','" 

awk与shell script混合编程 

因为awk可以作为一个shell命令使用,因此awk能与shell批处理程序很好的融合在一起,这给实现awk与shell程序的混合编程提供了可能。实现混合编程的关键是awk与shell script之间的对话,换言之,就是awk与shell script之间的信息交流:awk从shell script中获取所需的信息(通常是变量的值)、在awk中执行shell命令行、shell script将命令执行的结果送给awk处理以及shell script读取awk的执行结果等等。 

1.awk读取Shell script程序变量 

在awk中我们可以通过“'$变量名'”的方式读取sell scrpit程序中的变量。 

例:在下面的示例中,我们将读取sell scrpit程序中的变量Name,该变量存放的是文本myfile的撰写者,awk将打印出这个人名。 

$cat writename 
# @(#) 
Name="张三" nawk 'BEGIN {name="'Name'";\ printf("\t%s\t撰写者%s\n",FILENAME,name");}\ 
{...}END{...}' myfile 

2.将shell命令的执行结果送给awk处理 

作为信息传送的一种方法,我们可以将一条shell命令的结果通过管道线(|)传递给awk处理: 

例:示例awk处理shell命令的执行结果 

$who -u | awk '{printf("%s正在执行%s\n",$2,$1)}' 

该命令将打印出注册终端正在执行的程序名。 

3.shell script程序读awk的执行结果 

为了实现shell script程序读取awk执行的结果,我们可以采取一些特殊的方法,例如我们可以用变量名=`awk语句`的形式将awk执行的结果存放入一个shell script变量。当然也可以用管道线的方法将awk执行结果传递给shell script程序处理。 

例:作为传送消息的机制之一,UNIX提供了一个向其所有用户传送消息的命令wall(意思是write to all写给所有用户),该命令允许向所有工作中的用户(终端)发送消息。为此,我们可以通过一段shell批处理程序wall.shell来模拟这一程序(事实上比较老的版本中wall就是一段shell批处理程序: 

$cat wall.shell 
# @(#) wall.shell:发送消息给每个已注册终端 
cat >;/tmp/$$ 
#用户录入消息文本 who -u | awk '{print $2}' | while read tty 
do 
cat /tmp/$$>;$tty 
done 

在这个程序里,awk接受who -u命令的执行结果,该命令打印出所有已注册终端的信息,其中第二个字段是已注册终端的设备名,因此用awk命令析出该设备名,然后用while read tty语句循环读出这些文件名到变量(shell script变量)tty中,作为信息传送的终结地址。 

4.在awk中执行shell命令行----嵌入函数system() 

system()是一个不适合字符或数字类型的嵌入函数,该函数的功能是处理作为参数传递给它的字符串。system对这个参数的处理就是将其作为命令处理,也就是说将其当作命令行一样加以执行。这使得用户在自己的awk程序需要时可以灵活地执行命令或脚本。 

例:下面的程序将使用system嵌入函数打印用户编制好的报表文件,这个文件存放在名为myreport.txt的文件中。为简约起见,我们只列出了其END部分: 

END {close("myreport.txt");system("lp myreport.txt");} 

在这个示例中,我们首先使用close语句关闭了文件myreport.txt文件,然后使用system嵌入函数将myreport.txt送入打印机打印。 

写到这里,我不得不跟朋友们说再见了,实在地说,这些内容仍然是awk的初步知识,电脑永远是前进的科学,awk也不例外,本篇所能做的只是在你前行的漫漫长途中铺平一段小小开端,剩下的路还得靠你自己去走。老实说,如果本文真能给你前行的路上带来些许的方便,那本人就知足了! 

如对本篇有任何疑问,请E-mail To:Chizlong@yeah.net或到主页http://chizling.yeah.net中留言。 


附录: 

1.awk的常规表达式元字符 

\ 换码序列 
^ 在字符串的开头开始匹配 
$ 在字符串的结尾开始匹配 
. 与任何单个字符串匹配 
[ABC] 与[]内的任一字符匹配 
[A-Ca-c] 与A-C及a-c范围内的字符匹配(按字母表顺序) 
[^ABC] 与除[]内的所有字符以外的任一字符匹配 
Desk|Chair 与Desk和Chair中的任一个匹配 
[ABC][DEF] 关联。与A、B、C中的任一字符匹配,且其后要跟D、E、F中的任一个字符。 
* 与A、B或C中任一个出现0次或多次的字符相匹配 
+ 与A、B或C中任何一个出现1次或多次的字符相匹配 
? 与一个空串或A、B或C在任何一个字符相匹配 
(Blue|Black)berry 合并常规表达式,与Blueberry或Blackberry相匹配 

2.awk算术运算符 

运算符 用途 
------------------ 
x^y x的y次幂 
x**y 同上 
x%y 计算x/y的余数(求模) 
x+y x加y 
x-y x减y 
x*y x乘y 
x/y x除y 
-y 负y(y的开关符号);也称一目减 
++y y加1后使用y(前置加) 
y++ 使用y值后加1(后缀加) 
--y y减1后使用y(前置减) 
y-- 使用后y减1(后缀减) 
x=y 将y的值赋给x 
x+=y 将x+y的值赋给x 
x-=y 将x-y的值赋给x 
x*=y 将x*y的值赋给x 
x/=y 将x/y的值赋给x x%=y 将x%y的值赋给x 
x^=y 将x^y的值赋给x 
x**=y 将x**y的值赋给x 

3.awk允许的测试: 

操作符 含义 

x==y x等于y 
x!=y x不等于y 
x>;y x大于y 
x>;=y x大于或等于y 
x
x<=y x小于或等于y? 
x~re x匹配正则表达式re? 
x!~re x不匹配正则表达式re? 

4.awk的操作符(按优先级升序排列) 

= 、+=、 -=、 *= 、/= 、 %= 
|| 
&& 
>; >;= < <= == != ~ !~ 
xy (字符串连结,'x''y'变成"xy") 
+ - 
* / % 
++ -- 

5.awk内置变量(预定义变量) 

说明:表中v项表示第一个支持变量的工具(下同):A=awk,N=nawk,P=POSIX awk,G=gawk 

V 变量 含义 缺省值 
-------------------------------------------------------- 
N ARGC 命令行参数个数 
G ARGIND 当前被处理文件的ARGV标志符 
N ARGV 命令行参数数组 
G CONVFMT 数字转换格式 %.6g 
P ENVIRON UNIX环境变量 
N ERRNO UNIX系统错误消息 
G FIELDWIDTHS 输入字段宽度的空白分隔字符串 
A FILENAME 当前输入文件的名字 
P FNR 当前记录数 
A FS 输入字段分隔符 空格 
G IGNORECASE 控制大小写敏感0(大小写敏感) 
A NF 当前记录中的字段个数 
A NR 已经读出的记录数 
A OFMT 数字的输出格式 %.6g 
A OFS 输出字段分隔符 空格 
A ORS 输出的记录分隔符 新行 
A RS 输入的记录他隔符 新行 
N RSTART 被匹配函数匹配的字符串首 
N RLENGTH 被匹配函数匹配的字符串长度 
N SUBSEP 下标分隔符 "\034" 

6.awk的内置函数 

V 函数 用途或返回值 
------------------------------------------------ 
N gsub(reg,string,target) 每次常规表达式reg匹配时替换target中的string 
N index(search,string) 返回string中search串的位置 
A length(string) 求串string中的字符个数 
N match(string,reg) 返回常规表达式reg匹配的string中的位置 
N printf(format,variable) 格式化输出,按format提供的格式输出变量variable。 
N split(string,store,delim) 根据分界符delim,分解string为store的数组元素 
N sprintf(format,variable) 返回一个包含基于format的格式化数据,variables是要放到串中的数据 
G strftime(format,timestamp) 返回一个基于format的日期或者时间串,timestmp是systime()函数返回的时间 
N sub(reg,string,target) 第一次当常规表达式reg匹配,替换target串中的字符串 
A substr(string,position,len) 返回一个以position开始len个字符的子串 
P totower(string) 返回string中对应的小写字符 
P toupper(string) 返回string中对应的大写字符 
A atan(x,y) x的余切(弧度) 
N cos(x) x的余弦(弧度) 
A exp(x) e的x幂 
A int(x) x的整数部分 
A log(x) x的自然对数值 
N rand() 0-1之间的随机数 
N sin(x) x的正弦(弧度) 
A sqrt(x) x的平方根 
A srand(x) 初始化随机数发生器。如果忽略x,则使用system() 
G system() 返回自1970年1月1日以来经过的时间(按秒计算) 

星期六, 十月 18, 2008

blogbus API支持?

今天又看到一个使用Adsense的blogbus的blog,然后就去找blogbus是否支持API,google了半天,好像05、06年有一阵blogbus是支持API的,现在在blogbus的官方帮助里面看不到关于API的任何内容了。

看到可以支持Adsense的博客我就格外关注,不过号线现在只有blogger和blogbus能够支持,以前和讯开放过自由html,后来国人的大规模入住使得和讯也不得不降低模板的自由度了。

上海人口,户籍人口与流动人口

从上海市人口与发展研究中心的网站的数据 http://www.spic.sh.cn/RKZL/11.htm 可以看到上海在2003年的户籍人口达到1341.77万人。
这个数据应该是官方正确数据,下面看两则新闻

http://news.xinhuanet.com/society/2006-04/06/content_4392188.htm
“据1%人口抽样调查,2005年,本市实有人口已达1921.35万人,其中户籍人口占实有人口69.8%;常住外来人口占22.8%;半年以下外来人口占7.4%。”

http://sh.xinmin.cn/shizheng/2007/03/08/276612.html
“截至2006年底,上海常住人口已达1815万人,到2010年,全市常住人口规模预期为1900万人”

作为估算,我们暂且可以称上海常住人口约为2000万。

Hostmonster CPanel 登录方法, Hostmonster被封后的解决办法

Hostmonster CPanel可以用 http://yourdomain:2082/ 的地址登录。
其中yourdomain 可以是你的域名,也可以是买的独立IP地址。

现在hostmonster的IP大多被封了,解决方法就是买一个独立IP,网上看了一下价格大概是$20~$30,应该还能接受,我的hostmonster的就被封了,准备去买一个:)

星期五, 十月 17, 2008

blogger/blogspot模板中加入digg

通过下面的方法可以将digg加入到blogger/blogspot的每一篇文章中。

  1. 启用Post Pages,在 setting->archive 里面设置,这是由于digg是针对每个web页面的,所以必须在blogger里面启用Post Pages

  2. 去自定义模板,编辑HTML: Layout -> Edit HTML

  3. 选中扩展Widget:

  4. 搜索 <p><data:post.body/></p>

  5. 将下面的代码贴到<p><data:post.body/></p>的上面
    <div style='float:right; margin-left:10px;'>
    <script type='text/javascript'>
    digg_url=&quot;<data:post.url/>&quot;;</script>
    <script src='http://digg.com/tools/diggthis.js' type='text/javascript'/>
    </div>

  6. 预览没问题,保存就OK了。

空间不能访问了

GWF一只听说过,没想到这回落到我头上来了,在hostmonster买的空间国内不能访问了,我的网站可都在上面啊,还有实验室的也在上面,最郁闷的是你不知道找谁去解封,到底出了什么问题。

打电话给备案的说主机不在中国大陆的不用备案,GWF没有任何联系方式,如果有人知道如何解封的话吱一声,在此多谢了。

我的网站 http://www.pythonclub.org

星期三, 十月 15, 2008

买了一个山寨机:大显 X989

现如今山寨机流行。
一次偶然的机会,我在咸亨手机看到一个国产牌子的手机,大屏幕,基本功能齐全,价钱又便宜,就有想法去弄一个来玩玩。

其实山寨机的优缺点就不用我再来讲了,只说说我手上的这个机器吧。

屏幕大,金属外壳,厚实,外观和手感均不错,比较适合男士使用。
软件方面也还可以,支持FM,电子书,蓝牙,MP3/4,还是双卡双待的。

但是细节方面就比较欠缺:
电子书字体不能调节,不过默认的字体够大,看的也不费事。
电子书背光好像不能调亮度,白天还好,晚上看太亮了,刺眼。
FM可以外放,不用接耳线,在家里效果还好。在公交车上不太好(没接耳机线),不知道接了耳机线会不会好些。

mp3,FM音量调节不是连续的,分六个档,外放调到最小一个也很响,音质还行,我对这个要求不高。

价格便宜 ¥450, 包括邮费和256M卡。

看一下照片吧:

星期二, 十月 07, 2008

IIUC的意思

看了一些帖子,经常看到IIUC, 查了一下他的意思:

IIUC: If I Understand Correctly (slang, Usenet, IRC)

如果没有google的话,真是想破头也想不到的啊:)

在google里面可以直接搜 define:IIUC 可以得到此词定义。

vim中使用重定向

:redir 可以将vim的命令行输出重定向到文件中

例子:
:redir!>/tmp/vim-setting.txt|:set all

在linux下面可以直接使用下面的命令
vim -c ':redir!>/tmp/all-my-settings.txt|:set|q' ; vim /tmp/all-my-settings.txt

星期二, 九月 30, 2008

使用vim在行首加入行号

有下面几种方法:
  • :%s/^/\=line(".")." "/
  • :%s/^/\=printf('%4s ',line('.'))

在linux下面可以使用 cat和nl工具:
  • :%!cat -n



星期日, 九月 28, 2008

139移动邮箱

刚刚收到一条短信,说免费赠送139移动邮箱,可以把每个月的移动账单发到邮箱。一直以来搞不清移动的收费,觉得糊里糊涂的,还好我每个月开销不大。不过既然有免费的那就用一下吧。
注册邮箱是免费的:
  • 2G空间
  • 还有500M的网盘
  • 支持POP3和SMTP
  • 可以制动转发
  • 也可以收取其他pop3邮件
感觉还不错,不知道它的账单是否详细,等收到第一个账单再来评一下吧。

可以去 http://www.139.com 注册。
不过对FireFox支持不好,不能正常显示。

adsense 8月收入

今天去拿了 8月份的钱,估计是本年度最后一次拿钱了。
从去年7,8月开始弄blogger,到现在一年整了,所有的blogger都以失败告终。
不过赚到了第一桶,现在有域名,有空间,下面开始好好干,xixi。

晒一下图吧: