<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-10343735</id><updated>2011-12-14T04:53:02.366+01:00</updated><category term='owl'/><category term='rdf'/><category term='ontology'/><category term='semantic web'/><title type='text'>且听风吟</title><subtitle type='html'>　　那一天，我摇动所有的经桶，不为超度，只为触摸你的指尖；
　　那一年，在山路匍匐，不为觐见，只为贴着你的温暖；
　　那一次次的转山，不为修来世，只为途中与你相见。
　　------沧央嘉措</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>76</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10343735.post-6974304826467420038</id><published>2010-10-27T17:38:00.001+02:00</published><updated>2010-10-27T17:38:06.049+02:00</updated><title type='text'>Hello, world!</title><content type='html'>I am on the intarweb!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-6974304826467420038?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/6974304826467420038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=6974304826467420038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/6974304826467420038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/6974304826467420038'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2010/10/hello-world.html' title='Hello, world!'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-3309259094339985185</id><published>2007-12-14T16:57:00.000+01:00</published><updated>2007-12-14T17:05:24.620+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ontology'/><category scheme='http://www.blogger.com/atom/ns#' term='semantic web'/><category scheme='http://www.blogger.com/atom/ns#' term='rdf'/><category scheme='http://www.blogger.com/atom/ns#' term='owl'/><title type='text'>semantic web 1</title><content type='html'>&lt;ol&gt;&lt;li&gt;&lt;a href="http://jena.sourceforge.net/"&gt;jena&lt;/a&gt; 是一个semantic web的框架。&lt;/li&gt;&lt;li&gt;ibm有一篇很好的入门文章 &lt;a href="http://www.ibm.com/developerworks/cn/java/j-jena/"&gt;hier&lt;/a&gt;。&lt;/li&gt;&lt;li&gt;用RDF可以很好的表示图， &lt;a href="http://www.betaversion.org/~stefano/linotype/news/46/"&gt;这篇&lt;/a&gt;文章阐述了这个观点&lt;/li&gt;&lt;li&gt;RDF用来描述主体，动词，和对象的规范。&lt;/li&gt;&lt;li&gt;RDF, OWL都是w3建议界别的标准&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-3309259094339985185?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/3309259094339985185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=3309259094339985185' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/3309259094339985185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/3309259094339985185'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2007/12/semantic-web-1.html' title='semantic web 1'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-115532287810827375</id><published>2006-08-11T21:01:00.000+02:00</published><updated>2006-08-11T21:01:18.113+02:00</updated><title type='text'></title><content type='html'> 学校项目的整合总算是初步完成了。忙了一天，回来没吃饭就上楼睡觉去了，醒来已经是快十一点了。吃过饭，看了看有关摄影的文章，转眼就到了一点。喜欢深夜的感觉，大家都沉沉的睡去，周围一片寂静，只有窗外稀疏的雨声，和音响传出的慢慢的vie en rose.这时看什么书都能静静的沉浸下去，没什么必完成之事。慵懒的感觉，不需要放纵的放松。&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-115532287810827375?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/115532287810827375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=115532287810827375' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/115532287810827375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/115532287810827375'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2006/08/vie-en-rose.html' title=''/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-114354149418106949</id><published>2006-03-28T14:23:00.000+02:00</published><updated>2006-03-28T12:25:24.183+02:00</updated><title type='text'>Tag in ION</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Tag in ion is a label. Mark a frame with a tag just click Mod1+ t.&lt;br/&gt; Grab all frame with Tag to a window just click Mod1 + k, a&lt;br/&gt; &lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-114354149418106949?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/114354149418106949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=114354149418106949' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/114354149418106949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/114354149418106949'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2006/03/tag-in-ion.html' title='Tag in ION'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-114354083489946879</id><published>2006-03-28T14:12:00.000+02:00</published><updated>2006-03-28T12:14:18.103+02:00</updated><title type='text'>Dumper Datastructure in Perl</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Data::Dumper::Simple is a useful module for the debug.&lt;br/&gt; &lt;div style="MARGIN-LEFT: 40px"&gt;   &lt;br/&gt;   &lt;span style="COLOR: #3333ff"&gt;use   Data::Dumper::Simple;&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt;   &lt;span style="COLOR: #3333ff"&gt;my @list = ([qw/a b/], [qw/c   d/]);&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt;   &lt;span style="COLOR: #3333ff"&gt;print Dumper(@list);&lt;/span&gt;&lt;br/&gt;   &lt;br/&gt; &lt;/div&gt; Out put is:&lt;br/&gt; &lt;div style="MARGIN-LEFT: 40px"&gt;   &lt;span style="COLOR: #3333ff"&gt;@list = (&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt;   &lt;span style="COLOR: #3333ff"&gt; [&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt;   &lt;span style="COLOR: #3333ff"&gt;   'a',&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt;   &lt;span style="COLOR: #3333ff"&gt;   'b'&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt;   &lt;span style="COLOR: #3333ff"&gt; ],&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt;   &lt;span style="COLOR: #3333ff"&gt; [&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt;   &lt;span style="COLOR: #3333ff"&gt;   'c',&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt;   &lt;span style="COLOR: #3333ff"&gt;   'd'&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt;   &lt;span style="COLOR: #3333ff"&gt; ]&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt;   &lt;span style="COLOR: #3333ff"&gt; );&lt;br/&gt;   &lt;br/&gt;   &lt;/span&gt; &lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-114354083489946879?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/114354083489946879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=114354083489946879' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/114354083489946879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/114354083489946879'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2006/03/dumper-datastructure-in-perl.html' title='Dumper Datastructure in Perl'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-114269258949938490</id><published>2006-03-18T15:35:00.000+01:00</published><updated>2006-03-18T15:36:36.863+01:00</updated><title type='text'>share your fotos wiht flickr</title><content type='html'>&lt;!-- Start of Flickr Badge --&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;#flickr_badge_source_txt {padding:0; font: 11px Arial, Helvetica, Sans serif; color:#666666;}&lt;br /&gt;#flickr_badge_icon {display:block !important; margin:0 !important; border: 1px solid rgb(0, 0, 0) !important;}&lt;br /&gt;#flickr_icon_td {padding:0 5px 0 0 !important;}&lt;br /&gt;.flickr_badge_image {text-align:center !important;}&lt;br /&gt;.flickr_badge_image img {border: 1px solid black !important;}&lt;br /&gt;#flickr_badge_uber_wrapper {width:150px;}&lt;br /&gt;#flickr_www {display:block; text-align:center; padding:0 10px 0 10px !important; font: 11px Arial, Helvetica, Sans serif !important; color:#3993ff !important;}&lt;br /&gt;#flickr_badge_uber_wrapper a:hover,&lt;br /&gt;#flickr_badge_uber_wrapper a:link,&lt;br /&gt;#flickr_badge_uber_wrapper a:active,&lt;br /&gt;#flickr_badge_uber_wrapper a:visited {text-decoration:none !important; background:inherit !important;color:#3993ff;}&lt;br /&gt;#flickr_badge_wrapper {background-color:#FFFFFF;border: solid 1px #000000}&lt;br /&gt;#flickr_badge_source {padding:0 !important; font: 11px Arial, Helvetica, Sans serif !important; color:#666666 !important;}&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;table id="flickr_badge_uber_wrapper" border="0" cellpadding="0" cellspacing="10"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://www.flickr.com" id="flickr_www"&gt;www.&lt;strong style="color: rgb(57, 147, 255);"&gt;flick&lt;span style="color: rgb(255, 28, 146);"&gt;r&lt;/span&gt;&lt;/strong&gt;.com&lt;/a&gt;&lt;table id="flickr_badge_wrapper" border="0" cellpadding="0" cellspacing="10"&gt;&lt;br /&gt;&lt;script type="text/javascript" src="http://www.flickr.com/badge_code_v2.gne?show_name=1&amp;count=3&amp;amp;display=latest&amp;size=m&amp;amp;layout=v&amp;source=user&amp;amp;user=84155484%40N00"&gt;&lt;/script&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;&lt;td id="flickr_badge_source" align="center" valign="center"&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;&lt;td id="flickr_icon_td" width="10"&gt;&lt;a href="http://www.flickr.com/photos/84155484@N00/"&gt;&lt;img id="flickr_badge_icon" alt="tingwang7's photos" src="http://www.flickr.com/images/buddyicon.jpg?84155484@N00" align="left" height="48" width="48" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;br /&gt;&lt;td id="flickr_badge_source_txt"&gt;&lt;nobr&gt;More of&lt;/nobr&gt; &lt;a href="http://www.flickr.com/photos/84155484@N00/"&gt;tingwang7's photos&lt;/a&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;!-- End of Flickr Badge --&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-114269258949938490?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/114269258949938490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=114269258949938490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/114269258949938490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/114269258949938490'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2006/03/share-your-fotos-wiht-flickr.html' title='share your fotos wiht flickr'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-114113227959921657</id><published>2006-02-28T15:08:00.000+01:00</published><updated>2006-02-28T14:11:19.666+01:00</updated><title type='text'>snippet in emacs</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;how to use snippet mode in emacs:&lt;br/&gt; &lt;br/&gt; &lt;span style="COLOR: #3333ff"&gt;(define-abbrev c++-mode-abbrev-table ; abbrev table&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt; &lt;span style="COLOR: #3333ff"&gt; "for" ; name&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt; &lt;span style="COLOR: #3333ff"&gt; "" ; expansion&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt; &lt;span style="COLOR: #3333ff"&gt; '(lambda () ; expansion hook&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt; &lt;span style="COLOR: #3333ff"&gt; (snippet-insert&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt; &lt;span style="COLOR: #3333ff"&gt; "for (int i = 0; i &amp;lt;$${max}; i++)\n{\n $.\n}")))&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt; &lt;span style="COLOR: #3333ff"&gt;&lt;br/&gt; (define-abbrev c++-mode-abbrev-table&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt; &lt;span style="COLOR: #3333ff"&gt; "if"&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt; &lt;span style="COLOR: #3333ff"&gt; ""&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt; &lt;span style="COLOR: #3333ff"&gt; '(lambda ()&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt; &lt;span style="COLOR: #3333ff"&gt; (snippet-insert&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt; &lt;span style="COLOR: #3333ff"&gt; "if ($${test} ) {\n $.\n}")))&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt; &lt;br style="COLOR: #3333ff"/&gt; &lt;span style="COLOR: #3333ff"&gt;(define-abbrev c++-mode-abbrev-table&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt; &lt;span style="COLOR: #3333ff"&gt; "imain"&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt; &lt;span style="COLOR: #3333ff"&gt; ""&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt; &lt;span style="COLOR: #3333ff"&gt; '(lambda ()&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt; &lt;span style="COLOR: #3333ff"&gt; (snippet-insert&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt; &lt;span style="COLOR: #3333ff"&gt; "int main(int argc, char *argv[]){\n $.\n}")))&lt;/span&gt;&lt;br style="COLOR: #3333ff"/&gt; &lt;span style="COLOR: #3333ff"&gt;(provide 'tiw-abbrev)&lt;br/&gt; &lt;br/&gt; &lt;br/&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-114113227959921657?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/114113227959921657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=114113227959921657' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/114113227959921657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/114113227959921657'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2006/02/snippet-in-emacs.html' title='snippet in emacs'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-113450925623545953</id><published>2005-12-13T23:26:00.000+01:00</published><updated>2005-12-13T22:27:36.290+01:00</updated><title type='text'>静态链接库</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;ul xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;li&gt;什么是静态链接库，如何创建&lt;/li&gt;&lt;/ul&gt; 静态链接库只是一个.o文件的集合。通常以.a结尾，a的意思是他是由 archiver 产生的。要把一些.o文件夹到一个&lt;br/&gt; .a 文件里可以用：&lt;br/&gt;     &lt;span style="color: rgb(51, 102, 255);"&gt;ar rcs my_library.a file1.o file2.o&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br/&gt; &lt;/span&gt;&lt;/span&gt; &lt;ul&gt;&lt;li&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;使用静态链接库&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;使用gcc可以 -LlibraryPaht -lmy_library&lt;br/&gt; 要注意的是，你的.o文件要在所有 -l 的全面，否则会有未定义引用的错误(: undefined reference to `lua_open'&lt;br/&gt; test.o(.text+0x23): In function `main'）。&lt;br/&gt; 在/home/wang/lib 里面有 liblua.a 和 liblualib.a两个文件&lt;br/&gt; in Makefile:&lt;br/&gt; &lt;br/&gt; LIB=-L/home/wang/lib/ -llua -llualib&lt;br/&gt;  &lt;span style="background-color: rgb(51, 255, 51);"&gt;g++  test.o  -o test $(LIB)&lt;span style="background-color: rgb(255, 255, 255);"&gt; 没有问题&lt;br/&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="background-color: rgb(51, 255, 51);"&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="background-color: rgb(51, 255, 51);"&gt;&lt;span style="background-color: rgb(255, 0, 0);"&gt;g++  $(LIB) test.o  -o test&lt;span style="background-color: rgb(255, 255, 255);"&gt; 报错&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br style="background-color: rgb(51, 255, 51);"/&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="background-color: rgb(51, 255, 51);"&gt;&lt;span style="background-color: rgb(255, 255, 255);"/&gt;&lt;/span&gt;&lt;br/&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-113450925623545953?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/113450925623545953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=113450925623545953' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113450925623545953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113450925623545953'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/12/blog-post.html' title='静态链接库'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-113450990762743279</id><published>2005-12-13T22:38:00.000+01:00</published><updated>2005-12-13T22:38:27.626+01:00</updated><title type='text'>Getting Started with Lua</title><content type='html'>&lt;a href="http://tonyandpaige.com/tutorials/lua1.html"&gt;Getting Started with Lua&lt;/a&gt;&lt;br /&gt;对lua的介绍，从c++/c的角度。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-113450990762743279?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/113450990762743279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=113450990762743279' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113450990762743279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113450990762743279'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/12/getting-started-with-lua.html' title='Getting Started with Lua'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-113450951155393357</id><published>2005-12-13T22:31:00.000+01:00</published><updated>2005-12-13T22:31:51.553+01:00</updated><title type='text'>Shared Libraries</title><content type='html'>&lt;a href="http://www.tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html"&gt;Shared Libraries&lt;/a&gt;&lt;br /&gt;类似staticLibraries不过时介绍动态链接库的。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-113450951155393357?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/113450951155393357/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=113450951155393357' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113450951155393357'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113450951155393357'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/12/shared-libraries.html' title='Shared Libraries'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-113450945759241940</id><published>2005-12-13T22:30:00.000+01:00</published><updated>2005-12-13T22:35:19.400+01:00</updated><title type='text'>Static Libraries</title><content type='html'>&lt;a href="http://www.tldp.org/HOWTO/Program-Library-HOWTO/static-libraries.html"&gt;static Libraries&lt;/a&gt;&lt;br /&gt;一个很清晰的有关于静态链接库教程，通过它可以了解到什么是静态链接库、如何创建、如何使用、还有使用上的一些注意事项。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-113450945759241940?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/113450945759241940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=113450945759241940' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113450945759241940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113450945759241940'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/12/static-libraries.html' title='Static Libraries'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-113421183506960950</id><published>2005-12-10T12:49:00.000+01:00</published><updated>2005-12-10T11:50:35.083+01:00</updated><title type='text'>Attribute in .NET</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Attribut in .NET&lt;br xmlns="http://www.w3.org/1999/xhtml"/&gt; 要说Attribut首先要了解.NET的一些内部结构。在.NET里，模块、数据类型等是受控制的（并给所有，例外还不知道）。&lt;br/&gt; 模块、数据类型等都有对应的MetaData，对其作一些描述。而Attribut可以把一些特定的MetaData在&lt;span style="background-color: rgb(255, 255, 0);"&gt;编译时期&lt;/span&gt;写入。&lt;br/&gt; 例如下面的代码：&lt;br/&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;using System.Diagnostics;&lt;/span&gt;&lt;br/&gt; class Foo{&lt;br/&gt;   public int bar;&lt;br/&gt;   public Foo(int i)&lt;br/&gt;   {&lt;br/&gt;     this.bar = i;&lt;br/&gt;   }&lt;br/&gt;   &lt;span style="color: rgb(51, 102, 255);"&gt;[Conditional ("DEBUG")]&lt;/span&gt;&lt;br/&gt;   public void setToNull()&lt;br/&gt;   {&lt;br/&gt;     this.bar = 0;&lt;br/&gt;   }&lt;br/&gt;   public static void Main()&lt;br/&gt;   {&lt;br/&gt;     Foo f = new Foo(2);&lt;br/&gt;     &lt;span style="color: rgb(51, 102, 255);"&gt;f.setToNull();&lt;br/&gt;     &lt;span style="color: rgb(0, 0, 0);"&gt;Console.WriteLine(f.bar); // here 2 will be printed&lt;/span&gt;&lt;br/&gt; &lt;/span&gt;    int fee = 1/f.bar;&lt;br/&gt;   }&lt;br/&gt; }&lt;br/&gt; 如果在编译的时候没有定义"DEBUG", （如果想在编译的时候定义DEBUG, 可以使用这条命令：csc /d:DEBUG Foo.cs）&lt;br/&gt; 在运行期不会有因为零作分母而产生的错误。&lt;br/&gt; 因为在编译的时候，编译器会添加一个Token到Foo的MetaData里面，标记出 setToNull 是不可以被&lt;br/&gt; 调用的。在这之后，如果有另外一个模块调用了Foo里面的setToNull，在编译的时候编译器会阅读有关&lt;br/&gt; setToNull 的MetaData，发现这个函数是不可以被调用的，编译期就会忽略掉这句语句。&lt;br/&gt; 在我们的这个例子里面，在 Main 里面 f.setToNull 语句在编译期就会被忽略掉了，所以 bar 的值实际&lt;br/&gt; 上还是 2 ，而不是 0。&lt;br/&gt; &lt;br/&gt; &lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-113421183506960950?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/113421183506960950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=113421183506960950' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113421183506960950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113421183506960950'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/12/attribute-in-net.html' title='Attribute in .NET'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-113390487993242508</id><published>2005-12-06T22:33:00.000+01:00</published><updated>2005-12-06T22:34:39.950+01:00</updated><title type='text'>数字的本地化(C#)</title><content type='html'>&lt;table bgcolor="white" border="0" cellpadding="0" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr id="postTitleRow" style=""&gt;&lt;td style="font-family: Verdana; font-size: 18pt; font-weight: bold;"&gt;&lt;span id="postTitle"&gt;数字的本地化(C#)&lt;/span&gt; &lt;a href="http://www.writely.com/EditTitle" title="Change this blog post's title." class="app" style="font-weight: normal; font-size: 7pt;" onclick="EditTitle(); return false;"&gt;[Edit Title...]&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;                 &lt;tr id="postTitleRowSpacer" style=""&gt;&lt;td style="height: 6px;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;                 &lt;tr&gt;&lt;td id="postBody" style="width: 350px; font-family: Verdana; font-size: 9pt;" valign="top"&gt;由于在德国小数点的是由逗号来表示的，例如：1.5在德国德表示是：1,5。&lt;br /&gt;这在分析字符串的时候会出现问题，例如：&lt;br /&gt;&lt;br /&gt;            double number = Double.Parse("123.12");&lt;br /&gt;            Console.WriteLine(number);&lt;br /&gt;&lt;br /&gt;如果当前的国家设置是德国的时候，在console里面打印出来的是：12312， .NET不会发出&lt;br /&gt;任何的异常！这一点当我们使用小数的时候非常危险的，例如我们要按比例分配给某人一定的&lt;br /&gt;佣金，如10%。当我们输入0.10而不是0,10的时候我们给这个人的钱不是10%而是&lt;span style="font-weight: bold; background-color: rgb(255, 0, 0);"&gt;十倍&lt;/span&gt;！&lt;br /&gt;处理这种情况一定要小心，可以用下拉列表来代替文本框，或是先分析字符串中是否有 ","&lt;br /&gt;还是 "."。&lt;br /&gt;在.NET里面可以制定某一个线程的国家设置：&lt;br /&gt;&lt;br /&gt;            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de");&lt;br /&gt;            double number = Double.Parse("0.10");&lt;br /&gt;               double number2 = 0.3;&lt;br /&gt;            Console.WriteLine(number);&lt;br /&gt;              Console.WriteLine(number2);&lt;br /&gt;            DateTime now = DateTime.Now;&lt;br /&gt;            Console.WriteLine(now.ToString());&lt;br /&gt;            Console.ReadLine();&lt;br /&gt;&lt;br /&gt;会在控制台里显示：&lt;br /&gt;&lt;br /&gt;            10&lt;br /&gt;            0,3&lt;br /&gt;            06.12.2005 22:13:21&lt;br /&gt;&lt;br /&gt;Thread 类是在System.Threading里定义的，CultureInof 是在 System.Globalization 里定义的。&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt; &lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-113390487993242508?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/113390487993242508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=113390487993242508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113390487993242508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113390487993242508'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/12/c.html' title='数字的本地化(C#)'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-113260156870279749</id><published>2005-11-21T21:36:00.000+01:00</published><updated>2005-11-23T12:42:08.436+01:00</updated><title type='text'>Java RMI 编程</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;h2 xmlns="http://www.w3.org/1999/xhtml"&gt;   服务器端&lt;br/&gt; &lt;/h2&gt; &lt;h3&gt;   服务器程序： &lt;/h3&gt; &lt;blockquote&gt;一个接口，扩展&lt;code&gt;java.rmi.Remote&lt;/code&gt;&lt;br/&gt;&lt;code&gt;一个这个接口的实现&lt;/code&gt;&lt;br/&gt;&lt;code/&gt;&lt;/blockquote&gt; &lt;code&gt;&lt;br/&gt; &lt;/code&gt; &lt;h3&gt;编译服务器程序：&lt;/h3&gt; &lt;blockquote&gt;用rmic把实现编译为stub&lt;br/&gt;&lt;/blockquote&gt; &lt;br/&gt; &lt;h3&gt;运行服务器：&lt;/h3&gt; &lt;blockquote&gt;在运行服务器端的程序前，先要运行RMI's registry。方法如下：&lt;br/&gt;&lt;/blockquote&gt; &lt;blockquote&gt;rmiregistry &amp;amp;　（unix)&lt;br/&gt;&lt;br/&gt; start rmiregistry (windows)&lt;br/&gt;&lt;/blockquote&gt; &lt;pre&gt;&lt;br/&gt;&lt;/pre&gt; &lt;h3&gt;把程序登记到：registry&lt;/h3&gt; &lt;blockquote&gt;import java.rmi.Naming;&lt;br/&gt;&lt;br/&gt; public class RegStringInverseImp {&lt;br/&gt; 　　public static void main (String[] s) {&lt;br/&gt; 　　　　try {&lt;br/&gt; 　　　　　　StringInverse sii = new StringInverseImp("demo");// declare sii as interfase StringInverse&lt;br/&gt; 　　　　　　Naming.rebind("//192.168.220.1/demo", sii);&lt;br/&gt; 　　　　　　System.out.println("Registered StringInverseImp");&lt;br/&gt; 　　　　} catch (Exception e) {&lt;br/&gt; 　　　　　　e.printStackTrace();&lt;br/&gt; 　　　　}&lt;br/&gt; 　　}&lt;br/&gt; }&lt;br/&gt;&lt;/blockquote&gt; &lt;pre&gt;&lt;br/&gt;Note during start a server&lt;br/&gt;java -Djava.rmi.server.codebase=&lt;span style="background-color: rgb(255, 255, 0);"&gt;file:///&lt;/span&gt;home/wangtg/verteilsys/uebung/rmi/classes&lt;span style="background-color: rgb(255, 255, 0);"&gt;/&lt;/span&gt; StringInverseImp&lt;br/&gt;If there is no / after classes Exception about class can not found occures. &lt;/pre&gt;&lt;br/&gt;Rather than making &lt;span style="background-color: rgb(255, 255, 0);"&gt;a copy of the implementation object&lt;/span&gt; in the receiving virtual machine, RMI passes &lt;span style="background-color: rgb(255, 255, 0);"&gt;a remote &lt;/span&gt;&lt;em class="Italic" style="background-color: rgb(255, 255, 0);"&gt;stub&lt;/em&gt; for a remote object. &lt;br/&gt; The stub acts as the local representative, or proxy, for the remote object and basically &lt;em class="Italic"&gt;is&lt;/em&gt;, to the caller, the remote reference.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-113260156870279749?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/113260156870279749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=113260156870279749' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113260156870279749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113260156870279749'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/11/java-rmi.html' title='Java RMI 编程'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-113260151188791893</id><published>2005-11-21T21:35:00.000+01:00</published><updated>2005-11-21T20:31:51.896+01:00</updated><title type='text'>动态链接库和静态链接库</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;font SIZE="2" STYLE="FONT-WEIGHT: bold" xmlns="http://www.w3.org/1999/xhtml"&gt;动态链接库和静态链接苦的区别在于：&lt;/font&gt;&lt;br/&gt; 在内存里，只有一个动态链接库的副本，所有基于动态链接库的执行文件共用这个库（使用动态链接器）。而每个基于静态链接库的执行程序，在内存里都有一份自 己的库的副本。由此我们可以看出来，使用动态链接的程序个头都比较小，因为它的一部分是共享内存中的动态链接库的。静态链接的程序相对就大一些。&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-113260151188791893?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/113260151188791893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=113260151188791893' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113260151188791893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113260151188791893'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/11/blog-post.html' title='动态链接库和静态链接库'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-113260148751533060</id><published>2005-11-21T21:34:00.000+01:00</published><updated>2005-11-21T20:31:27.626+01:00</updated><title type='text'>新看HTTP</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;今天的基于WEB的应用软件整合课，让我对HTTP有了新的认识。整个ｗｅｂ就是一个共享系统，象一个数据库，HTTP提供了数据库必须的操作：Ｃ （create)Ｒ(retrive)Ｕ(update)Ｄ(delete)，　通过GET, PUT, POST, DELETE。WEB的超强的扩展能力是基于两个特性的：REST　和　URI。　&lt;br xmlns="http://www.w3.org/1999/xhtml"/&gt; REST：　representation state transfer, http协议是stateless的，所有关于state的东西每一次都要通过uri来传输。所以服务器不用记忆任何一个请求。SOAP的不同在于，他是 通过body而不是报文的头来传输的，报文的头长度是有限制的。&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-113260148751533060?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/113260148751533060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=113260148751533060' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113260148751533060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113260148751533060'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/11/http.html' title='新看HTTP'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-113213707106367408</id><published>2005-11-16T12:34:00.000+01:00</published><updated>2005-11-16T11:31:11.106+01:00</updated><title type='text'>2005-11-16</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;h3 xmlns="http://www.w3.org/1999/xhtml"&gt;  Template 的使用：&lt;/h3&gt; &lt;span style="font-weight: bold;"&gt; template class的构造器：&lt;/span&gt;&lt;br/&gt; 在定义template的成员函数的时候需要特殊的语法来表明这个成员函数是属于一个模板类的。&lt;br/&gt; &lt;br/&gt; &lt;blockquote&gt;template &amp;lt;class T&amp;gt;&lt;br/&gt; class Foo&lt;br/&gt; {&lt;br/&gt; public:&lt;br/&gt;   Foo();&lt;br/&gt;   baa();&lt;br/&gt; ..&lt;br/&gt; };&lt;br/&gt; template &amp;lt;class T&amp;gt;&lt;br/&gt; Foo&amp;lt;T&amp;gt;::Foo(){}&lt;br/&gt; template &amp;lt;class T&amp;gt;&lt;br/&gt; Foo&amp;lt;T&amp;gt;::baa(){}&lt;br/&gt;&lt;/blockquote&gt; 在实例化一个模板类的时候，构造函数也要模板的参数表：&lt;br/&gt; &lt;blockquote&gt;Foo&amp;lt;int&amp;gt; mf = new Foo&amp;lt;int&amp;gt;();&lt;br/&gt;&lt;/blockquote&gt; 这样是错误的：&lt;br/&gt; &lt;blockquote&gt;Foo&amp;lt;int&amp;gt; mf = new Foo()&lt;br/&gt;&lt;/blockquote&gt; 虽然构造函数叫做Foo()。&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-113213707106367408?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/113213707106367408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=113213707106367408' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113213707106367408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113213707106367408'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/11/2005-11-16.html' title='2005-11-16'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-113205019901499498</id><published>2005-11-15T12:26:00.000+01:00</published><updated>2005-11-15T11:23:19.056+01:00</updated><title type='text'>2005-11-15</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;ArrayList用在gsoap里总是出错。引用和指针的关系总算是搞清楚了：&lt;br xmlns="http://www.w3.org/1999/xhtml"/&gt; 引用就是物体本身，指针则是物体的地址。　&lt;br/&gt; vector&amp;lt;int&amp;gt; *vi = new vector&amp;lt;int&amp;gt;;&lt;br/&gt; vector&amp;lt;int&amp;gt; &amp;amp;rvi = *vi;&lt;br/&gt; --------------&lt;br/&gt; vector&amp;lt;int&amp;gt; &amp;amp;createV()&lt;br/&gt; {&lt;br/&gt;   vector&amp;lt;int&amp;gt; *i = new vector&amp;lt;int&amp;gt;;&lt;br/&gt;   return *i;// 注意这里是&lt;span style="color: rgb(51, 0, 51); background-color: rgb(255, 255, 0);"&gt;*i&lt;br/&gt; &lt;span style="background-color: rgb(255, 255, 255);"&gt;}&lt;br/&gt; ---------------&lt;br/&gt; void add(vector&amp;lt;int&amp;gt; &amp;amp;v, int value)&lt;br/&gt; {&lt;br/&gt;    v.push_back(i);&lt;br/&gt; }&lt;br/&gt; vector&amp;lt;int&amp;gt; *vi = new vector&amp;lt;int&amp;gt;();&lt;br/&gt; add(&lt;span style="background-color: rgb(255, 255, 0);"&gt;*vi&lt;/span&gt;, 2);&lt;br/&gt; ---------------&lt;br/&gt; 出现vector&amp;lt;int&amp;gt; &amp;amp;的地方就可以用*vi。&lt;br/&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-113205019901499498?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/113205019901499498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=113205019901499498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113205019901499498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113205019901499498'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/11/2005-11-15.html' title='2005-11-15'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-113192289366794705</id><published>2005-11-14T01:04:00.000+01:00</published><updated>2005-11-14T00:01:33.726+01:00</updated><title type='text'>2005-11-13</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;了解了ｑｔ的事件传输机制。在Qt4里面，很清晰的分清了原因和结果。signal就是因，slot就是果。一个Qt对象（派生于QObject)可以拥 有多个signals和slots。每个signal就负责发信号，每个slot就负责相应信号。connect函数把两者联系了起来：connect (object1, signal1, object2, slot2)，当object1发出信号signal1后，对象object2的slot2就会处理。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-113192289366794705?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/113192289366794705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=113192289366794705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113192289366794705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113192289366794705'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/11/2005-11-13.html' title='2005-11-13'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-113188914183314159</id><published>2005-11-13T15:42:00.000+01:00</published><updated>2005-11-13T14:39:01.886+01:00</updated><title type='text'>Qt In Windows</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;由于学校的项目都用Ｑｔ所以就在家里安装了Qt４。安装到是很简单，是标准的ｗｉｎｄｏｗｓ安装程序，可是安装好了以后，写了一个小的试验程序，在编译的 时候出现有关ValidLicenseForCoreModule的问题，这个问题是因为Ｑｔ是安装好了，可是Qt的库还没编译，在编译前要同意Qt opensource的license。编译库的方法就是：开始－》程序－》Ｑｔ。。。－》Ｑｔ(build debug librarys)&lt;br xmlns="http://www.w3.org/1999/xhtml"/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-113188914183314159?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/113188914183314159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=113188914183314159' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113188914183314159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113188914183314159'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/11/qt-in-windows.html' title='Qt In Windows'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-113169739234471463</id><published>2005-11-11T10:23:00.000+01:00</published><updated>2005-11-11T09:23:12.393+01:00</updated><title type='text'>.NET 里有关.dll路径的问题</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;如果你在你的程序里调用了.dll，那么在编译和运行的时候要注意一些路径的问题。 下面是我的一些经验：&lt;br xmlns="http://www.w3.org/1999/xhtml"/&gt; &lt;h3&gt;&lt;font size="3"&gt;&lt;span style="font-weight: bold;"&gt;编译期：&lt;/span&gt;&lt;/font&gt;&lt;/h3&gt; 我用NANT来管理我的项目。为了在编译的时候指定.dll的路径，可以在编译.exe的目标块里面加入&amp;lt;references&amp;gt;标签，在这个标签里&lt;br/&gt; 加入.dll所在的目录。&lt;br/&gt; &lt;br/&gt; &lt;blockquote&gt;&amp;lt;target name="build" depends="buildlib"&amp;gt;&lt;br/&gt;&amp;lt;csc target="exe" output="bin/${basename}.exe" debug="${debug}"&amp;gt;&lt;br/&gt;&amp;lt;sources&amp;gt;&lt;br/&gt;&amp;lt;include name="src/${basename}.cs"/&amp;gt;&lt;br/&gt;&amp;lt;/sources&amp;gt;&lt;br/&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;      &amp;lt;references&amp;gt;&lt;/span&gt;&lt;br style="color: rgb(51, 51, 255);"/&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;        &amp;lt;include name="bin/lib/Tiw.dll"/&amp;gt;&lt;/span&gt;&lt;br style="color: rgb(51, 51, 255);"/&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;      &amp;lt;/references&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;lt;/csc&amp;gt;&lt;br/&gt;&amp;lt;/target&amp;gt;&lt;br/&gt;&lt;/blockquote&gt; &lt;br/&gt; &lt;h3&gt;运行期：&lt;/h3&gt; 如果在运行期.dll和.exe文件不在一个&lt;span style="color: rgb(255, 0, 0);"&gt;目录里&lt;/span&gt;，要给.exe文件编写一个xx.exe.config文件。在这个文件里可以制定.dll的目录。&lt;br/&gt; &lt;blockquote&gt;&amp;lt;configuration&amp;gt;&lt;br/&gt;&amp;lt;runtime&amp;gt;&lt;br/&gt;&amp;lt;assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"&amp;gt;&lt;br/&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;     &amp;lt;probing privatePath="lib"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&amp;lt;/assemblyBinding&amp;gt;&lt;br/&gt;&amp;lt;/runtime&amp;gt;&lt;br/&gt;&amp;lt;/configuration&amp;gt;&lt;br/&gt;&lt;/blockquote&gt; 我参看了微软的.NET开发者手册（Mircrosoft .NET Entwicklerhandbuch)，根据我的理解是，.dll文件和.exe必须在一个&lt;span style="color: rgb(255, 0, 0);"&gt;目录下&lt;/span&gt;面，&lt;br/&gt; 也就是说：类似 bin/xx.exe bin/lib/xx.dll 的结构是被容许的，但是  bin/xx.exe  lib/xx.dll 是不被容许的，即使在.config文件里&lt;br/&gt; 加入&lt;br/&gt; &lt;blockquote&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;     &amp;lt;probing privatePath="../lib"/&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: rgb(51, 51, 255);"/&gt;&lt;/blockquote&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;也不可以。（这个我试验过了）。对于这问题相信还有解决的办法（把.dll的目录加到系统的path里？我还没试验&lt;/span&gt;&lt;br/&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-113169739234471463?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/113169739234471463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=113169739234471463' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113169739234471463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113169739234471463'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/11/net-dll.html' title='.NET 里有关.dll路径的问题'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-113164993237512925</id><published>2005-11-10T21:12:00.000+01:00</published><updated>2005-11-10T21:26:46.363+01:00</updated><title type='text'>NAnt</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;h3&gt;   &amp;lt;property&amp;gt; &lt;/h3&gt; &lt;blockquote&gt;&amp;lt;property name="somename" value="valueOfName"/&amp;gt;&lt;br/&gt; property 定义一个变量，变量名字为somename, 变量的值为valueOfName。&lt;br/&gt; 使用这个变量的方法是：${somename}&lt;br/&gt;&lt;/blockquote&gt; &lt;h3&gt;   &amp;lt;fileset&amp;gt; &lt;/h3&gt; &lt;blockquote&gt;定义一组的文件，例如：&lt;br/&gt;&amp;lt;fileset&amp;gt;&lt;br/&gt;&amp;lt;include name="bin/*.exe"/&amp;gt;&lt;br/&gt;&amp;lt;/fileset&amp;gt;&lt;br/&gt; 定义了在目录bin里面的所有以.exe结尾的文件。&amp;lt;inlcude&amp;gt;同样可以用在&amp;lt;source&amp;gt;里面定义一组文件。&lt;br/&gt;&lt;/blockquote&gt; &lt;h3&gt;   &amp;lt;exec&amp;gt; &lt;/h3&gt; &lt;blockquote&gt;执行一个程序。 &amp;lt;exec program="bin/HelloWorld.exe" basedir="."/&amp;gt;运行当前目录下的bin/HelloWorld.exe&lt;br/&gt;&lt;/blockquote&gt;&lt;br/&gt; &lt;br/&gt; &lt;h3&gt;   &amp;lt;references&amp;gt; &lt;/h3&gt; &lt;blockquote&gt;加入所需的库。 &amp;lt;references&amp;gt;&amp;lt;include name="lib/some.dll"/&amp;gt;&amp;lt;/references&amp;gt;&lt;br/&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-113164993237512925?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/113164993237512925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=113164993237512925' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113164993237512925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113164993237512925'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/11/nant.html' title='NAnt'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-113139830220813832</id><published>2005-11-07T23:18:00.000+01:00</published><updated>2005-11-07T22:18:22.376+01:00</updated><title type='text'>oddmuse</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://www.oddmuse.org" title="oddmuse"&gt;oddmuse&lt;/a&gt; is a really cool wiki engine. The archietecture of this wiki engine is like emacs. You can&lt;br/&gt; extend this engine by adding a .pl file in $moduleshome. Install of this wiki engine is just copy a&lt;br/&gt; file to your web home (CGI modul of Perl should be installed), and tread it as a normal CGI file.&lt;br/&gt; &lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-113139830220813832?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/113139830220813832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=113139830220813832' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113139830220813832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113139830220813832'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/11/oddmuse.html' title='oddmuse'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-113067954695815354</id><published>2005-10-30T15:42:00.000+01:00</published><updated>2005-10-30T14:39:06.973+01:00</updated><title type='text'>tiw-del-pair.el</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;span style="COLOR: #009900"&gt;&lt;span style="COLOR: #000000"&gt;A elisp program which delete things between "" or [] or {} or (), use it an " or [ or { or ( , it will&lt;br/&gt; delete things in it. Not support recursive pairs.&lt;br/&gt; &lt;br/&gt; &lt;/span&gt;(defun tiw-del-pair ()&lt;/span&gt;&lt;br style="COLOR: #009900"/&gt; &lt;span style="COLOR: #009900"&gt; (interactive)&lt;/span&gt;&lt;br style="COLOR: #009900"/&gt; &lt;span style="COLOR: #009900"&gt; (if (looking-at "\\(\"\\|\(\\|\\[\\|\{\\)")&lt;/span&gt;&lt;br style="COLOR: #009900"/&gt; &lt;span style="COLOR: #009900"&gt; (progn&lt;/span&gt;&lt;br style="COLOR: #009900"/&gt; &lt;span style="COLOR: #009900"&gt; (if (looking-at "\"")&lt;/span&gt;&lt;br style="COLOR: #009900"/&gt; &lt;span style="COLOR: #009900"&gt; (setq s "\""))&lt;/span&gt;&lt;br style="COLOR: #009900"/&gt; &lt;span style="COLOR: #009900"&gt; (if (looking-at "\(")&lt;/span&gt;&lt;br style="COLOR: #009900"/&gt; &lt;span style="COLOR: #009900"&gt; (setq s "\)"))&lt;/span&gt;&lt;br style="COLOR: #009900"/&gt; &lt;span style="COLOR: #009900"&gt; (if (looking-at "\\[")&lt;/span&gt;&lt;br style="COLOR: #009900"/&gt; &lt;span style="COLOR: #009900"&gt; (setq s "\]"))&lt;/span&gt;&lt;br style="COLOR: #009900"/&gt; &lt;span style="COLOR: #009900"&gt; (if (looking-at "\{")&lt;/span&gt;&lt;br style="COLOR: #009900"/&gt; &lt;span style="COLOR: #009900"&gt; (setq s "\}"))&lt;/span&gt;&lt;br style="COLOR: #009900"/&gt; &lt;span style="COLOR: #009900"&gt; ;; (setq s (buffer-substring-no-properties (point) (+ 1 (point))))&lt;/span&gt;&lt;br style="COLOR: #009900"/&gt; &lt;span style="COLOR: #009900"&gt; (forward-char)&lt;/span&gt;&lt;br style="COLOR: #009900"/&gt; &lt;span style="COLOR: #009900"&gt; (kill-region (point) (progn&lt;/span&gt;&lt;br style="COLOR: #009900"/&gt; &lt;span style="COLOR: #009900"&gt; (search-forward s)&lt;/span&gt;&lt;br style="COLOR: #009900"/&gt; &lt;span style="COLOR: #009900"&gt; (- (point) 1)))&lt;/span&gt;&lt;br style="COLOR: #009900"/&gt; &lt;span style="COLOR: #009900"&gt; (backward-char))))&lt;/span&gt;&lt;br/&gt; &lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-113067954695815354?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/113067954695815354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=113067954695815354' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113067954695815354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113067954695815354'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/10/tiw-del-pairel.html' title='tiw-del-pair.el'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-113067938686883211</id><published>2005-10-30T15:39:00.000+01:00</published><updated>2005-10-30T14:36:29.983+01:00</updated><title type='text'>perl include path</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;How to add include path:&lt;br/&gt; &lt;br/&gt; &lt;ol&gt;&lt;li&gt;     the PERLLIB environment variable&lt;/li&gt;&lt;li&gt;     the PERL5LIB environment variable&lt;/li&gt;&lt;li&gt;     the perl -Idir command line flag&lt;/li&gt;&lt;li&gt;     the use lib pragma, as in&lt;/li&gt;&lt;li&gt;     use lib "$ENV{HOME}/myown_perllib";&lt;/li&gt;&lt;/ol&gt; &lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-113067938686883211?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/113067938686883211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=113067938686883211' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113067938686883211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/113067938686883211'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/10/perl-include-path.html' title='perl include path'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-112845734938682132</id><published>2005-10-04T22:22:00.000+02:00</published><updated>2005-10-04T22:25:25.680+02:00</updated><title type='text'>Test</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;This 是一个在线的文档&lt;span style="COLOR: #009900"&gt;编辑器&lt;/span&gt;，我们可以在线&lt;span style="FONT-WEIGHT: bold"&gt;编辑&lt;/span&gt;文档，&lt;span style="TEXT-DECORATION: underline"&gt;并且&lt;/span&gt;和&lt;span style="FONT-STYLE: italic"&gt;他人&lt;/span&gt;共享这些&lt;span style="BACKGROUND-COLOR: #ff9966"&gt;文档&lt;/span&gt;。&lt;br/&gt; 这个文档编辑器是http://www.writely.com提供的，通过这个在线文档编辑器，还可以直接把文档&lt;br/&gt; 发布到你的ｂｌｏｇ上去。&lt;br/&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-112845734938682132?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/112845734938682132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=112845734938682132' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112845734938682132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112845734938682132'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/10/test.html' title='Test'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-112817646846699954</id><published>2005-10-01T16:20:00.000+02:00</published><updated>2005-10-01T16:21:08.476+02:00</updated><title type='text'>RPC vs Messages</title><content type='html'>When using &lt;span style="color: rgb(51, 102, 255);"&gt;RPC&lt;/span&gt;, the client thinks in terms of invoking a remote procedure on the server. This usually means instantiating a remote object and invoking its methods or properties. Thinking is centered on the remote object and its interface, i.e. the properties and methods that it exposes and their parameters. DCOM and .NET remoting are examples of RPC mechanisms.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Messaging&lt;/span&gt; is typically associated with more loosely coupled systems. A messaging client thinks in terms of sending a message to a server and, possibly, receiving a response message. Thinking in messaging systems is centered on the request and response message format rather than the remote object•s interface. By focusing only on message formats, the client and server are less tightly coupled than in the case of RPC.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-112817646846699954?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/112817646846699954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=112817646846699954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112817646846699954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112817646846699954'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/10/rpc-vs-messages.html' title='RPC vs Messages'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-112802745838995675</id><published>2005-09-29T22:38:00.000+02:00</published><updated>2005-09-29T22:59:26.206+02:00</updated><title type='text'>regular express in emacs -- special characters</title><content type='html'>&lt;table&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;any character&lt;/td&gt;&lt;td&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;start of line&lt;/td&gt;&lt;td&gt;^&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;end of line&lt;/td&gt;&lt;td&gt;$&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;0-any characters&lt;/td&gt;&lt;td&gt;*&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;1-any characters&lt;/td&gt;&lt;td&gt;+&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;0-1&lt;/td&gt;&lt;td&gt;?&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;range of characters&lt;/td&gt;&lt;td&gt;[ ... ]&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;anything but a range of characters&lt;/td&gt;&lt;td&gt;[^ ... ]&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;a special character&lt;/td&gt;&lt;td&gt;\&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;a tab character&lt;/td&gt;&lt;td&gt;\t&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;a newline character&lt;/td&gt;&lt;td&gt;\n&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;a backslash&lt;/td&gt;&lt;td&gt;\\&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;start or end of a word&lt;/td&gt;&lt;td&gt;\b&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;next string not in a word&lt;/td&gt;&lt;td&gt;\B&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;start of a word&lt;/td&gt;&lt;td&gt;\&amp;lt&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;end of a word&lt;/td&gt;&lt;td&gt;\&amp;gt&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;start of buffer&lt;/td&gt;&lt;td&gt;\`&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;end of buffer&lt;/td&gt;&lt;td&gt;\'&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;any word character&lt;/td&gt;&lt;td&gt;\w&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;any none word character&lt;/td&gt;\W&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;multiple patterns (or)&lt;/td&gt;&lt;td&gt;\|&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;a group of character&lt;/td&gt;&lt;td&gt;\(...\)&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;a syntactic class&lt;/td&gt;&lt;td&gt;\sc&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;td&gt;a character not in a syntactic class&lt;/td&gt;&lt;td&gt;\Sc&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-112802745838995675?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/112802745838995675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=112802745838995675' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112802745838995675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112802745838995675'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/09/regular-express-in-emacs-special.html' title='regular express in emacs -- special characters'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-112802603818778631</id><published>2005-09-29T22:31:00.000+02:00</published><updated>2005-09-29T22:33:58.196+02:00</updated><title type='text'>Selectively Displaying Program Lines</title><content type='html'>&lt;span style="font-weight: bold;"&gt;C-x $&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 102, 255);"&gt;C-u 2 C-x $&lt;/span&gt; will fold all lines, which are intended more than one character.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-112802603818778631?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/112802603818778631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=112802603818778631' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112802603818778631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112802603818778631'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/09/selectively-displaying-program-lines.html' title='Selectively Displaying Program Lines'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-112798120966071467</id><published>2005-09-29T10:00:00.000+02:00</published><updated>2005-09-29T10:13:03.660+02:00</updated><title type='text'>apropos it !!</title><content type='html'>what do something but don't know if there is such function in emacs? Just apropose it.&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Command: M-x apropose Enter keyword Enter.&lt;/span&gt;&lt;br /&gt;For exmaple: I want to find a function with it I can delete a char before cursor.&lt;br /&gt;M-x apropose Enter delete Enter&lt;br /&gt;You will find alots of descriptions of functions about delete are shown in a buffer, then search delete in this buffer you will find&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;backward-delete-char&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Command: Delete the previous N characters (following if N is negative).&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;backward-delete-char-untabify&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Command: Delete characters backward, changing tabs into spaces.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;delete-backward-char&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Command: Delete the previous N characters (following if N is negative).&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;delete-char&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;Command: Delete the following N characters (previous if N is negative).&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;backward-delete-char is just what i want.&lt;br /&gt;&lt;br /&gt;Add C-u before M-x apropos the keybindings description of a function will also be shown in buffer&lt;br /&gt;&lt;br /&gt;With C-u M-x Enter delete Enter something like following will be shown:&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;backward-delete-char &lt;span style="color: rgb(51, 255, 51);"&gt;(not bound to any keys)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;Command: Delete the previous N characters (following if N is negative).&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;backward-delete-char-untabify&lt;span style="color: rgb(51, 255, 51);"&gt; (not bound to any keys)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;Command: Delete characters backward, changing tabs into spaces.&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;delete-backward-char&lt;span style="color: rgb(51, 255, 51);"&gt; C-h, DEL&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;Command: Delete the previous N characters (following if N is negative).&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;delete-char&lt;span style="color: rgb(51, 255, 51);"&gt; C-d&lt;/span&gt;&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;Command: Delete the following N characters (previous if N is negative).&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-112798120966071467?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/112798120966071467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=112798120966071467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112798120966071467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112798120966071467'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/09/apropos-it.html' title='apropos it !!'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-112716531469230285</id><published>2005-09-19T23:27:00.000+02:00</published><updated>2005-09-19T23:28:34.700+02:00</updated><title type='text'>Register Directive</title><content type='html'>&lt;div class="section"&gt; &lt;h4 class="sect4-title"&gt;@ Register Directive&lt;/h4&gt; &lt;p class="first-para"&gt;When you are adding a custom server control to a page, you  need to tell the compiler something about that control. If the compiler doesn't  know what namespace contains the control or what assembly that namespace is in,  then it will not be able to recognize the control, and will generate an error.  To give the compiler the information it needs, use the &lt;span class="fixed"&gt;@  Register&lt;/span&gt; directive.&lt;/p&gt; &lt;p class="para"&gt;There are two forms of the &lt;span class="fixed"&gt;@ Register&lt;/span&gt;  directive, depending on how the location of the custom control is identified:  &lt;/p&gt; &lt;div class="widecontent"&gt;&lt;pre class="programlisting"&gt;&lt;span style="background-color: rgb(192, 192, 192);"&gt;&lt;%@ Register TagPrefix="&lt;i class="emphasis"&gt;tagprefix&lt;/i&gt;" TagName="&lt;i class="emphasis"&gt;tagname&lt;/i&gt;" Src="&lt;i class="emphasis"&gt;pathname&lt;/i&gt;" %&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(192, 192, 192);"&gt;&lt;%@ Register TagPrefix="&lt;i class="emphasis"&gt;tagprefix&lt;/i&gt;" Namespace="&lt;i class="emphasis"&gt;namespace&lt;/i&gt;" Assembly="&lt;i class="emphasis"&gt;assembly&lt;/i&gt;" %&gt;&lt;/span&gt;&lt;a name="291"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt; &lt;p class="para"&gt;The first usage of the &lt;span class="fixed"&gt;@ Register&lt;/span&gt;  directive is to add support for user controls to the page. The &lt;span class="fixed"&gt;TagPrefix&lt;/span&gt; attribute identifies the string that will be used  to decorate all instances of the custom server control on the page. For example,  if this directive is at the top of the page: &lt;/p&gt;&lt;pre class="programlisting"&gt;&lt;span style="background-color: rgb(192, 192, 192);"&gt;&lt;%@ Register TagPrefix="Ecommerce" TagName="Header"&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(192, 192, 192);"&gt;            Src="UserControls\Header.ascx" %&gt;&lt;/span&gt; &lt;/pre&gt; &lt;p class="para"&gt;Then for every instance of the &lt;span class="fixed"&gt;Header&lt;/span&gt;  user control on the page, it will be prefixed with &lt;span class="fixed"&gt;Ecommerce&lt;/span&gt;, as seen here: &lt;/p&gt;&lt;pre class="programlisting"&gt;&lt;span style="background-color: rgb(192, 192, 192);"&gt;&lt;ecommerce:header id="Header" runat="server"&gt;&lt;/span&gt; &lt;/pre&gt; &lt;p class="para"&gt;The &lt;span class="fixed"&gt;TagName&lt;/span&gt; attribute identifies the name  that will be used to refer to the control within the page. Since a user control  source file, &lt;span class="fixed"&gt;UserControls\Header.ascx&lt;/span&gt;, can only have  one control contained within it, the &lt;span class="fixed"&gt;tagname&lt;/span&gt; attribute  is simply a shortcut to allow us to reference the control.&lt;/p&gt; &lt;p class="para"&gt;The final attribute, &lt;span class="fixed"&gt;Src&lt;/span&gt;, indicates the  file in which the source of the user control resides.&lt;/p&gt; &lt;p class="para"&gt;The second usage of the &lt;span class="fixed"&gt;@Register&lt;/span&gt;  directive is for adding custom server controls to the page. These custom  controls are compiled and contained within assemblies. The &lt;span class="fixed"&gt;TagPrefix&lt;/span&gt; attribute has the same usage seen before – it  defines the namespace of the custom server control when it is used in the page.  The &lt;span class="fixed"&gt;Namespace&lt;/span&gt; attribute indicates the namespace in  which the custom control resides. The &lt;span class="fixed"&gt;Assembly  &lt;/span&gt;attribute indicates the assembly where the namespace resides: &lt;/p&gt;&lt;pre class="programlisting"&gt;&lt;span style="background-color: rgb(192, 192, 192);"&gt;&lt;%@ Register TagPrefix="Wrox" Namespace="WroxControls"&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgb(192, 192, 192);"&gt;                              Assembly="RatingMeter" %&gt;&lt;/span&gt; &lt;/pre&gt; &lt;p class="para"&gt;When using this custom server control within the page, it looks no  different than a user control in the same place:&lt;/p&gt; &lt;div class="widecontent"&gt;&lt;pre class="programlisting"&gt;&lt;span style="background-color: rgb(192, 192, 192);"&gt;&lt;wrox:ratingmeter runat="server" score="3.5" votes="1"&gt;&lt;br /&gt;&lt;span style="background-color: rgb(192, 192, 192);"&gt;                  MaxRating="5" CellWidth="51" CellHeight="10" /&gt;&lt;/span&gt; &lt;/pre&gt;&lt;/div&gt; &lt;p class="last-para"&gt;When creating a custom control, or even a user control, you  can pass attributes to the control by adding them to the tag in the page.&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-112716531469230285?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/112716531469230285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=112716531469230285' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112716531469230285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112716531469230285'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/09/register-directive.html' title='Register Directive'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-112618426517969349</id><published>2005-09-08T14:57:00.000+02:00</published><updated>2005-09-08T14:57:45.180+02:00</updated><title type='text'>a sample makefile</title><content type='html'>SUFFIXES= .C .o&lt;br /&gt;&lt;br /&gt;.SUFFIXES:&lt;br /&gt;.SUFFIXES: .C .o&lt;br /&gt;&lt;br /&gt;LIB=-L/home/tiw/lib -lcppunit -ldl&lt;br /&gt;INCLUDE=-I/home/tiw/include&lt;br /&gt;CC=g++&lt;br /&gt;OBJECTS= Main.o TMyComplex.o MyComplex.o&lt;br /&gt;&lt;br /&gt;all: Main&lt;br /&gt;&lt;br /&gt;.C.o:&lt;br /&gt;    $(CC) -c $(INCLUDE) $&lt;&lt;br /&gt;&lt;br /&gt;Main: $(OBJECTS)&lt;br /&gt;    $(CC)  -o Main $(LIB)  $(OBJECTS)&lt;br /&gt;&lt;br /&gt;clean:&lt;br /&gt;    rm -f Main *.o&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-112618426517969349?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/112618426517969349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=112618426517969349' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112618426517969349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112618426517969349'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/09/sample-makefile.html' title='a sample makefile'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-112618382757344657</id><published>2005-09-08T14:49:00.000+02:00</published><updated>2005-09-13T14:50:30.410+02:00</updated><title type='text'>a perl script automatic make a cppunit test case file</title><content type='html'>&lt;iostream&gt;&lt;cppunit&gt;&lt;cppunit&gt;&lt;cppunit&gt;&lt;cppunit&gt;&lt;tmycomplex&gt;&lt;f&gt;#! /usr/bin/env perl&lt;br /&gt;use warnings;&lt;br /&gt;use strict;&lt;br /&gt;my $DEBUG = 1;&lt;br /&gt;my @methods;&lt;br /&gt;my $fileName = shift;&lt;br /&gt;unless ($fileName)&lt;br /&gt;{&lt;br /&gt;  &amp;Usage;&lt;br /&gt;  exit;&lt;br /&gt;}&lt;br /&gt;open F, $fileName or die "can not open file: $fileName: $!\n";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;my $className = $fileName;&lt;br /&gt;$className =~ s/\.\w+//;&lt;br /&gt;warn "class name is $className" if $DEBUG;&lt;br /&gt;&lt;br /&gt;&amp;getMethods;&lt;br /&gt;if (-e "T$className.H")&lt;br /&gt;{&lt;br /&gt;  print "T$className.H exists\n";&lt;br /&gt;  exit;&lt;br /&gt;}&lt;br /&gt;open T, "&gt;T$className.H" or die "can not create T$className:$!\n";&lt;br /&gt;select T;&lt;br /&gt;my $ucClassName = uc($className);&lt;br /&gt;print "#ifndef T$ {ucClassName}_H\n";&lt;br /&gt;print "#define T$ {ucClassName}_H\n";&lt;br /&gt;print "\n";&lt;br /&gt;print "\n";&lt;br /&gt;print "#include \"$className.H\"\n";&lt;br /&gt;print "#include &lt;iostream&gt;\n";&lt;br /&gt;print "#include &lt;cppunit/testfixture.h&gt;\n";&lt;br /&gt;print "#include &lt;cppunit/test.h&gt;\n";&lt;br /&gt;print "#include &lt;cppunit/testsuite.h&gt;\n";&lt;br /&gt;print "#include &lt;cppunit/testcaller.h&gt;\n";&lt;br /&gt;print "\n";&lt;br /&gt;print "class T$className : public CppUnit::TestFixture { \n";&lt;br /&gt;print "private:\n";&lt;br /&gt;print "  //TODO: Define test target here:\n";&lt;br /&gt;print "public: \n";&lt;br /&gt;print "\n";&lt;br /&gt;print "  void setUp(){\n";&lt;br /&gt;print "//TODO: initialize test target here: \n";&lt;br /&gt;print "  }\n";&lt;br /&gt;print "  \n";&lt;br /&gt;print "  void tearDown(){\n";&lt;br /&gt;print "//TODO: release test resource here:\n";&lt;br /&gt;print "  }\n";&lt;br /&gt;print "\n";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;foreach  (@methods)&lt;br /&gt;{&lt;br /&gt;  print "    void test_$_(){\n";&lt;br /&gt;  print "      // TODO: implement test here:\n";&lt;br /&gt;  print "    }\n";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;print "  static CppUnit::Test *suite(){\n";&lt;br /&gt;print "    CppUnit::TestSuite *suiteOfTests = new CppUnit::TestSuite(\"T${className}\");\n";&lt;br /&gt;&lt;br /&gt;foreach (@methods)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;print "    suiteOfTests-&gt;addTest(new CppUnit::TestCaller&lt;t$&gt;\n";&lt;br /&gt;print "              (\"test_$_\",&lt;br /&gt;               &amp;T$ {className}::test_$_));\n";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;print "    return suiteOfTests;\n";&lt;br /&gt;print "  }\n";&lt;br /&gt;print "};\n";&lt;br /&gt;print "#endif\n";&lt;br /&gt;close T;&lt;br /&gt;&lt;br /&gt;open MAIN, "&gt;Main.C" or die "can not create Main.C:$!\n";&lt;br /&gt;select MAIN;&lt;br /&gt;print "#include &lt;cppunit/ui/text/testrunner.h&gt;\n";&lt;br /&gt;print "#include \"T$ {className}.H\"\n";&lt;br /&gt;print "int main()\n";&lt;br /&gt;print "{\n";&lt;br /&gt;print "  CppUnit::TextUi::TestRunner runner;\n";&lt;br /&gt;print "  runner.addTest(T$ {className}::suite());\n";&lt;br /&gt;print "  runner.run();\n";&lt;br /&gt;print "  return 0;\n";&lt;br /&gt;print "}\n";&lt;br /&gt;close MAIN;&lt;br /&gt;&lt;br /&gt;open MAKEFILE, "&gt;Makefile" or die "can not create Makefile:$!\n";&lt;br /&gt;select MAKEFILE;&lt;br /&gt;print "SUFFIXES= .C .o\n";&lt;br /&gt;print "\n";&lt;br /&gt;print ".SUFFIXES:\n";&lt;br /&gt;print ".SUFFIXES: .C .o\n";&lt;br /&gt;print "\n";&lt;br /&gt;print "LIB=-L/home/tiw/lib -lcppunit -ldl\n";&lt;br /&gt;print "INCLUDE=-I/home/tiw/include\n";&lt;br /&gt;print "CC=g++\n";&lt;br /&gt;print "OBJECTS= Main.o T$ {className}.o $ {className}.o\n";&lt;br /&gt;print "\n";&lt;br /&gt;print "all: Main\n";&lt;br /&gt;print "\n";&lt;br /&gt;print ".C.o:\n";&lt;br /&gt;print "    \$(CC) -c \$(INCLUDE) \$&lt;\n";&lt;br /&gt;print "\n";&lt;br /&gt;print "Main: \$(OBJECTS)\n";&lt;br /&gt;print "    \$(CC)  -o Main \$(LIB)  \$(OBJECTS)\n";&lt;br /&gt;print "\n";&lt;br /&gt;print "clean:\n";&lt;br /&gt;print "    rm -f Main *.o\n";&lt;br /&gt;print "\n";&lt;br /&gt;close MAKEFILE;&lt;br /&gt;&lt;br /&gt;sub getMethods&lt;br /&gt;{&lt;br /&gt;  print "class name : $className\n";&lt;br /&gt;  while (&lt;f&gt;)&lt;br /&gt;  {&lt;br /&gt;    my $line = $_;&lt;br /&gt;    if ($line =~ m/$className\:\:(\w+)\(/)&lt;br /&gt;    {&lt;br /&gt;      push @methods, $1;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;} # end getMethods&lt;br /&gt;sub Usage{&lt;br /&gt;  print "Usage:\n";&lt;br /&gt;  print "    makeTest.pl ClassName\n";&lt;br /&gt;  print "    in the file ClassName target methods are defined\n";&lt;br /&gt;  print "    test file is saved into TclassName.H\n";&lt;br /&gt;  print "Example:\n";&lt;br /&gt;  print "    makeTest.pl ModellAgent.C\n";&lt;br /&gt;  print "    test file is saved into TModellAgent.C\n";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/f&gt;&lt;/tmycomplex&gt;&lt;/cppunit&gt;&lt;/cppunit&gt;&lt;/cppunit&gt;&lt;/cppunit&gt;&lt;/iostream&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-112618382757344657?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/112618382757344657/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=112618382757344657' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112618382757344657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112618382757344657'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/09/perl-script-automatic-make-cppunit.html' title='a perl script automatic make a cppunit test case file'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-112602114680098184</id><published>2005-09-06T17:07:00.000+02:00</published><updated>2005-09-07T17:00:04.516+02:00</updated><title type='text'>how to use CppUnit</title><content type='html'>&lt;span style="FONT-WEIGHT: bold"&gt;How to install cppUnit and compile the test application with it&lt;/span&gt;&lt;br /&gt;1) install:&lt;br /&gt;a) Download and extract cppUnit package&lt;br /&gt;b) compile files&lt;br /&gt;&lt;span style="COLOR: rgb(255,204,102)"&gt;$./configure --prefix=/home/xx&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(255,204,102)"&gt;$make&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(255,204,102)"&gt;$make install&lt;/span&gt;&lt;br /&gt;2) compile the test appliation&lt;br /&gt;g++ -g -L/home/xx/lib -lcppunit -ldl -I/home/xx/include Main.C&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;How to do unit test with cppunit&lt;/span&gt;&lt;br /&gt;&lt;a href="http://cppunit.sourceforge.net/cgi-bin/moin.cgi"&gt;CppUnit&lt;/a&gt; is a C++ unit testing framwork. The processes of&lt;br /&gt;unit testing with Cpp Unit are:&lt;br /&gt;1. write testcases.&lt;br /&gt;a class of a test case is derived from CppUnit::TestFixture,&lt;br /&gt;and the class is composed of four parts:&lt;br /&gt;a) setUp() method&lt;br /&gt;In this method all initial works should be done,&lt;br /&gt;e.g instance object etc.&lt;br /&gt;b) tearDown() method&lt;br /&gt;In this method all permanent resources which are&lt;br /&gt;allocated in setUp() should be released.&lt;br /&gt;c) testcases&lt;br /&gt;test case is normal methode, in which the&lt;br /&gt;features of be tested class are tested.&lt;br /&gt;d) a static method returns a point of a TestSuit&lt;br /&gt;&lt;br /&gt;following is a sample test case class:&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;//--------------------------TMyComplex.h--------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;#include "MyComplex.h"&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;#include &lt;iostream&gt;&lt;/iostream&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;#include &lt;cppunit&gt;&lt;/cppunit&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;#include &lt;cppunit&gt;&lt;/cppunit&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;#include &lt;cppunit&gt;&lt;/cppunit&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;#include &lt;cppunit&gt;&lt;/cppunit&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;class TMyComplex : public CppUnit::TestFixture { &lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;private:&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;MyComplex *mc1, *mc2, *mc3;&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;public: &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;void setUp(){&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;mc1 = new MyComplex(1.0, 2.0);&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;mc2 = new MyComplex(1.0, 2.0);&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;mc3 = new MyComplex(1.0, 3.0);&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;void tearDown(){&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;delete mc1;&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;delete mc2;&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;delete mc3;&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;void testEquality() {&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;CPPUNIT_ASSERT( *mc1 == *mc2 );&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;CPPUNIT_ASSERT( !(*mc1 == *mc3) );&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;static CppUnit::Test *suite(){&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;CppUnit::TestSuite *suiteOfTests = new CppUnit::TestSuite("TMyComplex");&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;suiteOfTests-&gt;addTest(new CppUnit::TestCaller&lt;tmycomplex&gt;&lt;/tmycomplex&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;("testEquality",&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;&amp;TMyComplex::testEquality));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;return suiteOfTests;&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;//----------------------End TMyComplex.h--------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2. write a main program in order to run the testcases.&lt;br /&gt;following is a sample:&lt;br /&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;//----------------------Main.C--------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;#include &lt;cppunit&gt;&lt;/cppunit&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;#include "TMyComplex.h"&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;int main()&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;CppUnit::TextUi::TestRunner runner;&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;runner.addTest(TMyComplex::suite());&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;runner.run();&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;return 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="COLOR: rgb(51,102,255)"&gt;//----------------------End Main.C--------------------&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-112602114680098184?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/112602114680098184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=112602114680098184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112602114680098184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112602114680098184'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/09/how-to-use-cppunit.html' title='how to use CppUnit'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-112578414283737197</id><published>2005-09-03T23:47:00.000+02:00</published><updated>2005-09-03T23:49:02.843+02:00</updated><title type='text'>Web service in ASP.NET</title><content type='html'>&lt;strong&gt;Web service in ASP.NET&lt;/strong&gt;&lt;br /&gt;In ASP.NET, a web service is essentially a listener that monitors a particular URL exposed via HTTP, looking for requests as SOAP messages. When a request arrives, ASP.NET runtime unpackages the request and calls the method for which the request is intended, passing in any parameters included with the request. If the request has a return value, the ASP.NET runtime packages up the return value (based on the XML schema data type specifications) and sends it to the client as a SOAP message. …&lt;br /&gt;Developers expose their functionality as web services by making their methods with a specific metadata attribute, the WebService attribute. The Common Language Runtime takes care of the rest – from packaging and unpackaging SOAP requests to automatically providing HTML documentation of the web service – if it is called from a web browser (rather than by a SOAP request).&lt;br /&gt;&lt;br /&gt;Consuming a Web Service&lt;br /&gt;In ASP.NET consuming a web service is nearly as easy as creating one. ASP.NET provides a utility called wsdl.exe that can create a proxy class, which is a class that knows all of the necessary details of communicating with the web service via SAOP, and which can be called from client application the same way as any other managed class.&lt;br /&gt;-- from ASP.NET IN A NUTSHELL&lt;br /&gt;&lt;br /&gt;How to consume a web service&lt;br /&gt;http://localhost:2696/WebSite1/Hello.asmx is a web service.&lt;br /&gt;1 produces a proxy with wsdl&lt;br /&gt;&lt;span style="color:#33ccff;"&gt;wsdl.exe /out:hello_proxy.cs http://localhost:2696/WebSite1/Hello.asmx&lt;/span&gt;&lt;br /&gt;2 compile proxy into a library&lt;br /&gt;&lt;span style="color:#33ccff;"&gt;csc.exe /t:library /r:System.Web.dll,System.dll,System.dll,System.Web.Services.dll,&lt;br /&gt;System.Xml.dll /out:hello.dll hello_proxy.cs&lt;br /&gt;&lt;/span&gt;3 use classes which is defined in web service&lt;br /&gt;Put hello.dll into your website then you can use classes which are defined in a web service (here is some classes defined in Hello.asmx.&lt;br /&gt;4 test your program&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-112578414283737197?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/112578414283737197/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=112578414283737197' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112578414283737197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112578414283737197'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/09/web-service-in-aspnet.html' title='Web service in ASP.NET'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-112524334001783206</id><published>2005-08-28T17:34:00.000+02:00</published><updated>2005-08-28T17:35:40.023+02:00</updated><title type='text'></title><content type='html'>&lt;div align="center"&gt;&lt;h1 class="aTitle"&gt;错误“操作必须使用一个可更新的查询”原因及解决办法 &lt;/h1&gt;&lt;/div&gt; 来源：&lt;span id="SourceLabel"&gt;&lt;/span&gt;  作者：&lt;span id="AuthorLabel"&gt;大海&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;div id="BodyLabel" class="content" style="padding: 0px 10px; display: block;"&gt;原因：&lt;br /&gt;有几个主要的错误原因：&lt;br /&gt;这个错误发生在当你的程序试图执行更新数据库或其它类似操作时。这是因为&lt;br /&gt;ADO由于以下的几个原因而不能够写数据库造成的。&lt;br /&gt;1。最普遍的原因是匿名用户帐号(IUSR_MACHINE)对该数据库文件没有写权限。&lt;br /&gt;要解决这个问题，在管理器中调整数据库文件的属性，让匿名用户有正确的权限。&lt;br /&gt;当使用ACCESS数据库时，不仅要给文件写的权限，还要给该目录写 的权限，因为&lt;br /&gt;Jet需要在该目录建立一个.ldb文件。&lt;br /&gt;2。第二个原因是数据库没有使用正确的模式打开。应该使用下面的方法打开。&lt;br /&gt;SQL = "UPDATE Products Set UnitPrice = 2;"&lt;br /&gt;Set Conn = Server.CreateObject("ADODB.Connection")&lt;br /&gt;Conn.Mode = 3 '3 = adModeReadWrite&lt;br /&gt;Conn.Open "myDSN"&lt;br /&gt;Conn.Execute(SQL)&lt;br /&gt;Conn.Close&lt;br /&gt;注意默认的Mode是设置0(adModeUnknown),它是允许更新的。&lt;br /&gt;3。还有可能是在ODBC管理器中将该DSN的只读选项选中。&lt;br /&gt;4。你是在同时更新两个表中的字段，也会出现这个错误信息，解决办法是分开来更新&lt;br /&gt;这两个表中各自字段。&lt;br /&gt;5。当你使用了一个从低版本中（如ACCESS2.0,ACCESS7.0）载入到高版本(ACCESS 2000)&lt;br /&gt;中的查询时，在执行这个查询是会出现该错误。 &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-112524334001783206?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/112524334001783206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=112524334001783206' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112524334001783206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112524334001783206'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/08/ado-1iusrmachine-access-jet.html' title=''/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-112397527734269791</id><published>2005-08-14T01:15:00.000+02:00</published><updated>2005-08-14T01:21:17.346+02:00</updated><title type='text'>Laufen ASP.NET Anwendungen</title><content type='html'>Voraussetzungen: .Net Framework und IIS&lt;br /&gt;Vorgehensweise:&lt;br /&gt;1. Starten Sie die Konsole&lt;br /&gt;2. Wechseln Sie in das .Net-Framework-Verzeichnis ( meist C:/WINNT/Microsoft.NET/Framework/v1.1.4322/&lt;br /&gt;3. Um den IIS zu konfigurieren, fuehren Sie die Datei aspnet_regiss.ext mit dem Parameter -i aus.&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;aspnet_regiis.exe -i&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-112397527734269791?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/112397527734269791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=112397527734269791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112397527734269791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112397527734269791'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/08/laufen-aspnet-anwendungen.html' title='Laufen ASP.NET Anwendungen'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-112358298897357868</id><published>2005-08-09T12:21:00.000+02:00</published><updated>2005-08-09T12:23:24.383+02:00</updated><title type='text'>Automatic Variables in makefile</title><content type='html'>&lt;h3&gt;Automatic Variables&lt;/h3&gt; ---from http://www.gnu.org/software/make/manual/html_mono/make.html#SEC111&lt;br /&gt;&lt;br /&gt; &lt;!--docid::SEC111::--&gt; &lt;p&gt;  Suppose you are writing a pattern rule to compile a `&lt;samp&gt;.c&lt;/samp&gt;' file into a `&lt;samp&gt;.o&lt;/samp&gt;' file: how do you write the `&lt;samp&gt;cc&lt;/samp&gt;' command so that it operates on the right source file name?  You cannot write the name in the command, because the name is different each time the implicit rule is applied. &lt;/p&gt; &lt;p&gt;  What you do is use a special feature of &lt;code&gt;make&lt;/code&gt;, the &lt;em&gt;automatic variables&lt;/em&gt;.  These variables have values computed afresh for each rule that is executed, based on the target and prerequisites of the rule.  In this example, you would use `&lt;samp&gt;$@&lt;/samp&gt;' for the object file name and `&lt;samp&gt;$&lt;&lt;/samp&gt;' for the source file name. &lt;/p&gt; &lt;p&gt;  Here is a table of automatic variables: &lt;/p&gt; &lt;p&gt;  &lt;/p&gt; &lt;dl compact="compact"&gt; &lt;a name="IDX575"&gt;&lt;/a&gt;&lt;a name="IDX576"&gt;&lt;/a&gt;&lt;dt&gt;&lt;code&gt;$@&lt;/code&gt; &lt;/dt&gt;&lt;dd&gt;The file name of the target of the rule.  If the target is an archive member, then `&lt;samp&gt;$@&lt;/samp&gt;' is the name of the archive file.  In a pattern rule that has multiple targets (see section &lt;a href="http://www.gnu.org/software/make/manual/html_mono/make.html#SEC109"&gt;Introduction to Pattern Rules&lt;/a&gt;), `&lt;samp&gt;$@&lt;/samp&gt;' is the name of whichever target caused the rule's commands to be run. &lt;p&gt;  &lt;a name="IDX577"&gt;&lt;/a&gt; &lt;a name="IDX578"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;$%&lt;/code&gt; &lt;/dt&gt;&lt;dd&gt;The target member name, when the target is an archive member. See section &lt;a href="http://www.gnu.org/software/make/manual/html_mono/make.html#SEC118"&gt;11. Using &lt;code&gt;make&lt;/code&gt; to Update Archive Files&lt;/a&gt;.  For example, if the target is `&lt;tt&gt;foo.a(bar.o)&lt;/tt&gt;' then `&lt;samp&gt;$%&lt;/samp&gt;' is `&lt;tt&gt;bar.o&lt;/tt&gt;' and `&lt;samp&gt;$@&lt;/samp&gt;' is `&lt;tt&gt;foo.a&lt;/tt&gt;'.  `&lt;samp&gt;$%&lt;/samp&gt;' is empty when the target is not an archive member. &lt;p&gt;  &lt;a name="IDX579"&gt;&lt;/a&gt; &lt;a name="IDX580"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;$&lt;&lt;/code&gt; &lt;/dt&gt;&lt;dd&gt;The name of the first prerequisite.  If the target got its commands from an implicit rule, this will be the first prerequisite added by the implicit rule (see section &lt;a href="http://www.gnu.org/software/make/manual/html_mono/make.html#SEC103"&gt;10. Using Implicit Rules&lt;/a&gt;). &lt;p&gt;  &lt;a name="IDX581"&gt;&lt;/a&gt; &lt;a name="IDX582"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;$?&lt;/code&gt; &lt;/dt&gt;&lt;dd&gt;The names of all the prerequisites that are newer than the target, with spaces between them.  For prerequisites which are archive members, only the member named is used (see section &lt;a href="http://www.gnu.org/software/make/manual/html_mono/make.html#SEC118"&gt;11. Using &lt;code&gt;make&lt;/code&gt; to Update Archive Files&lt;/a&gt;). &lt;a name="IDX583"&gt;&lt;/a&gt; &lt;a name="IDX584"&gt;&lt;/a&gt; &lt;p&gt;  &lt;a name="IDX585"&gt;&lt;/a&gt; &lt;a name="IDX586"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;$^&lt;/code&gt; &lt;/dt&gt;&lt;dd&gt;The names of all the prerequisites, with spaces between them.  For prerequisites which are archive members, only the member named is used (see section &lt;a href="http://www.gnu.org/software/make/manual/html_mono/make.html#SEC118"&gt;11. Using &lt;code&gt;make&lt;/code&gt; to Update Archive Files&lt;/a&gt;).  A target has only one prerequisite on each other file it depends on, no matter how many times each file is listed as a prerequisite.  So if you list a prerequisite more than once for a target, the value of &lt;code&gt;$^&lt;/code&gt; contains just one copy of the name. &lt;a name="IDX587"&gt;&lt;/a&gt; &lt;a name="IDX588"&gt;&lt;/a&gt; &lt;p&gt;  &lt;a name="IDX589"&gt;&lt;/a&gt; &lt;a name="IDX590"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;$+&lt;/code&gt; &lt;/dt&gt;&lt;dd&gt;This is like `&lt;samp&gt;$^&lt;/samp&gt;', but prerequisites listed more than once are duplicated in the order they were listed in the makefile.  This is primarily useful for use in linking commands where it is meaningful to repeat library file names in a particular order. &lt;p&gt;  &lt;a name="IDX591"&gt;&lt;/a&gt; &lt;a name="IDX592"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/dd&gt;&lt;dt&gt;&lt;code&gt;$*&lt;/code&gt; &lt;/dt&gt;&lt;dd&gt;The stem with which an implicit rule matches (see section &lt;a href="http://www.gnu.org/software/make/manual/html_mono/make.html#SEC112"&gt;How Patterns Match&lt;/a&gt;).  If the target is `&lt;tt&gt;dir/a.foo.b&lt;/tt&gt;' and the target pattern is `&lt;tt&gt;a.%.b&lt;/tt&gt;' then the stem is `&lt;tt&gt;dir/foo&lt;/tt&gt;'.  The stem is useful for constructing names of related files.&lt;a name="IDX593"&gt;&lt;/a&gt; &lt;p&gt;  In a static pattern rule, the stem is part of the file name that matched the `&lt;samp&gt;%&lt;/samp&gt;' in the target pattern. &lt;/p&gt;&lt;p&gt;  In an explicit rule, there is no stem; so `&lt;samp&gt;$*&lt;/samp&gt;' cannot be determined in that way.  Instead, if the target name ends with a recognized suffix (see section &lt;a href="http://www.gnu.org/software/make/manual/html_mono/make.html#SEC116"&gt;Old-Fashioned Suffix Rules&lt;/a&gt;), `&lt;samp&gt;$*&lt;/samp&gt;' is set to the target name minus the suffix.  For example, if the target name is `&lt;samp&gt;foo.c&lt;/samp&gt;', then `&lt;samp&gt;$*&lt;/samp&gt;' is set to `&lt;samp&gt;foo&lt;/samp&gt;', since `&lt;samp&gt;.c&lt;/samp&gt;' is a suffix.  GNU &lt;code&gt;make&lt;/code&gt; does this bizarre thing only for compatibility with other implementations of &lt;code&gt;make&lt;/code&gt;.  You should generally avoid using `&lt;samp&gt;$*&lt;/samp&gt;' except in implicit rules or static pattern rules.&lt;/p&gt;&lt;p&gt;  If the target name in an explicit rule does not end with a recognized suffix, `&lt;samp&gt;$*&lt;/samp&gt;' is set to the empty string for that rule. &lt;/p&gt;&lt;/dd&gt; &lt;/dl&gt;  &lt;p&gt;  `&lt;samp&gt;$?&lt;/samp&gt;' is useful even in explicit rules when you wish to operate on only the prerequisites that have changed.  For example, suppose that an archive named `&lt;tt&gt;lib&lt;/tt&gt;' is supposed to contain copies of several object files. This rule copies just the changed object files into the archive: &lt;/p&gt; &lt;p&gt;  &lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt; &lt;/td&gt;&lt;td class="example"&gt;&lt;pre&gt;lib: foo.o bar.o lose.o win.o&lt;br /&gt;       ar r lib $?&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt; &lt;p&gt;  Of the variables listed above, four have values that are single file names, and three have values that are lists of file names.  These seven have variants that get just the file's directory name or just the file name within the directory.  The variant variables' names are formed by appending `&lt;samp&gt;D&lt;/samp&gt;' or `&lt;samp&gt;F&lt;/samp&gt;', respectively.  These variants are semi-obsolete in GNU &lt;code&gt;make&lt;/code&gt; since the functions &lt;code&gt;dir&lt;/code&gt; and &lt;code&gt;notdir&lt;/code&gt; can be used to get a similar effect (see section &lt;a href="http://www.gnu.org/software/make/manual/html_mono/make.html#SEC86"&gt;Functions for File Names&lt;/a&gt;).  Note, however, that the `&lt;samp&gt;D&lt;/samp&gt;' variants all omit the trailing slash which always appears in the output of the &lt;code&gt;dir&lt;/code&gt; function.  Here is a table of the variants: &lt;/p&gt; &lt;p&gt;  &lt;/p&gt; &lt;dl compact="compact"&gt; &lt;a name="IDX594"&gt;&lt;/a&gt;&lt;a name="IDX595"&gt;&lt;/a&gt;&lt;dt&gt;`&lt;samp&gt;$(@D)&lt;/samp&gt;' &lt;/dt&gt;&lt;dd&gt;The directory part of the file name of the target, with the trailing slash removed.  If the value of `&lt;samp&gt;$@&lt;/samp&gt;' is `&lt;tt&gt;dir/foo.o&lt;/tt&gt;' then `&lt;samp&gt;$(@D)&lt;/samp&gt;' is `&lt;tt&gt;dir&lt;/tt&gt;'.  This value is `&lt;tt&gt;.&lt;/tt&gt;' if `&lt;samp&gt;$@&lt;/samp&gt;' does not contain a slash. &lt;p&gt;  &lt;a name="IDX596"&gt;&lt;/a&gt; &lt;a name="IDX597"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/dd&gt;&lt;dt&gt;`&lt;samp&gt;$(@F)&lt;/samp&gt;' &lt;/dt&gt;&lt;dd&gt;The file-within-directory part of the file name of the target.  If the value of `&lt;samp&gt;$@&lt;/samp&gt;' is `&lt;tt&gt;dir/foo.o&lt;/tt&gt;' then `&lt;samp&gt;$(@F)&lt;/samp&gt;' is `&lt;tt&gt;foo.o&lt;/tt&gt;'.  `&lt;samp&gt;$(@F)&lt;/samp&gt;' is equivalent to `&lt;samp&gt;$(notdir $@)&lt;/samp&gt;'. &lt;p&gt;  &lt;a name="IDX598"&gt;&lt;/a&gt; &lt;a name="IDX599"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/dd&gt;&lt;dt&gt;`&lt;samp&gt;$(*D)&lt;/samp&gt;' &lt;/dt&gt;&lt;dd&gt;&lt;a name="IDX600"&gt;&lt;/a&gt; &lt;a name="IDX601"&gt;&lt;/a&gt; &lt;/dd&gt;&lt;dt&gt;`&lt;samp&gt;$(*F)&lt;/samp&gt;' &lt;/dt&gt;&lt;dd&gt;The directory part and the file-within-directory part of the stem; `&lt;tt&gt;dir&lt;/tt&gt;' and `&lt;tt&gt;foo&lt;/tt&gt;' in this example. &lt;p&gt;  &lt;a name="IDX602"&gt;&lt;/a&gt; &lt;a name="IDX603"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/dd&gt;&lt;dt&gt;`&lt;samp&gt;$(%D)&lt;/samp&gt;' &lt;/dt&gt;&lt;dd&gt;&lt;a name="IDX604"&gt;&lt;/a&gt; &lt;a name="IDX605"&gt;&lt;/a&gt; &lt;/dd&gt;&lt;dt&gt;`&lt;samp&gt;$(%F)&lt;/samp&gt;' &lt;/dt&gt;&lt;dd&gt;The directory part and the file-within-directory part of the target archive member name.  This makes sense only for archive member targets of the form `&lt;tt&gt;&lt;var&gt;archive&lt;/var&gt;(&lt;var&gt;member&lt;/var&gt;)&lt;/tt&gt;' and is useful only when &lt;var&gt;member&lt;/var&gt; may contain a directory name.  (See section &lt;a href="http://www.gnu.org/software/make/manual/html_mono/make.html#SEC119"&gt;Archive Members as Targets&lt;/a&gt;.) &lt;p&gt;  &lt;a name="IDX606"&gt;&lt;/a&gt; &lt;a name="IDX607"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/dd&gt;&lt;dt&gt;`&lt;samp&gt;$(&lt;d)&lt;/samp&gt;' &lt;/dt&gt;&lt;dd&gt;&lt;a name="IDX608"&gt;&lt;/a&gt; &lt;a name="IDX609"&gt;&lt;/a&gt; &lt;/dd&gt;&lt;dt&gt;`&lt;samp&gt;$(&lt;f)&lt;/samp&gt;' &lt;/dt&gt;&lt;dd&gt;The directory part and the file-within-directory part of the first prerequisite. &lt;p&gt;  &lt;a name="IDX610"&gt;&lt;/a&gt; &lt;a name="IDX611"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/dd&gt;&lt;dt&gt;`&lt;samp&gt;$(^D)&lt;/samp&gt;' &lt;/dt&gt;&lt;dd&gt;&lt;a name="IDX612"&gt;&lt;/a&gt; &lt;a name="IDX613"&gt;&lt;/a&gt; &lt;/dd&gt;&lt;dt&gt;`&lt;samp&gt;$(^F)&lt;/samp&gt;' &lt;/dt&gt;&lt;dd&gt;Lists of the directory parts and the file-within-directory parts of all prerequisites. &lt;p&gt;  &lt;a name="IDX614"&gt;&lt;/a&gt; &lt;a name="IDX615"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/dd&gt;&lt;dt&gt;`&lt;samp&gt;$(+D)&lt;/samp&gt;' &lt;/dt&gt;&lt;dd&gt;&lt;a name="IDX616"&gt;&lt;/a&gt; &lt;a name="IDX617"&gt;&lt;/a&gt; &lt;/dd&gt;&lt;dt&gt;`&lt;samp&gt;$(+F)&lt;/samp&gt;' &lt;/dt&gt;&lt;dd&gt;Lists of the directory parts and the file-within-directory parts of all prerequisites, including multiple instances of duplicated prerequisites. &lt;p&gt;  &lt;a name="IDX618"&gt;&lt;/a&gt; &lt;a name="IDX619"&gt;&lt;/a&gt; &lt;/p&gt;&lt;/dd&gt;&lt;dt&gt;`&lt;samp&gt;$(?D)&lt;/samp&gt;' &lt;/dt&gt;&lt;dd&gt;&lt;a name="IDX620"&gt;&lt;/a&gt; &lt;a name="IDX621"&gt;&lt;/a&gt; &lt;/dd&gt;&lt;dt&gt;`&lt;samp&gt;$(?F)&lt;/samp&gt;' &lt;/dt&gt;&lt;dd&gt;Lists of the directory parts and the file-within-directory parts of all prerequisites that are newer than the target. &lt;/dd&gt; &lt;/dl&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-112358298897357868?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/112358298897357868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=112358298897357868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112358298897357868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112358298897357868'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/08/automatic-variables-in-makefile.html' title='Automatic Variables in makefile'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-112358052092985431</id><published>2005-08-09T11:37:00.000+02:00</published><updated>2005-08-09T11:44:35.213+02:00</updated><title type='text'>PXPerl - a convenient Perl distribution</title><content type='html'>In maillist of PUG &lt;a href="http://pixigreg.com/?pxperl"&gt;PXPerl&lt;/a&gt; is introduced.  In its mainpage the following is introduced:&lt;strong&gt;&lt;br /&gt;&lt;br /&gt;PXPerl is an easy-to-use, all-in-one, full-featured Perl stuff package for Windows 2000/XP.&lt;br /&gt;&lt;/strong&gt; &lt;p&gt;     It consists of:&lt;/p&gt;     &lt;ul&gt; &lt;li&gt;Perl 5.8.7 compiled with Intel(R) C++ Compiler for maximum performance&lt;/li&gt;&lt;li&gt;Lots of modules, selected on the fly from CPAN (PXPerl has obviously all modules ActivePerl has). Of which, for image manipulation: &lt;ul&gt;&lt;li&gt;&lt;a href="http://www.graphicsmagick.org/"&gt;GraphicsMagick 1.1.6&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.boutell.com/gd"&gt;GD 2.0.33&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;     &lt;/li&gt;&lt;li&gt;&lt;a href="http://pugscode.org/"&gt;Pugs 6.2.9&lt;/a&gt; (compiled with &lt;a href="http://www.haskell.org/ghc"&gt;GHC&lt;/a&gt;), an early implementation of Perl 6 to see new language features in action&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.parrotcode.org/"&gt;Parrot 0.2.3&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.scintilla.org/SciTE.html"&gt;SciTE 1.65&lt;/a&gt; (Serge Baranov's distribution), a free syntax colourizing editor for editing your Perl scripts, the best you can find!&lt;/li&gt; &lt;/ul&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-112358052092985431?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/112358052092985431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=112358052092985431' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112358052092985431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/112358052092985431'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/08/pxperl-convenient-perl-distribution.html' title='PXPerl - a convenient Perl distribution'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111987911035081827</id><published>2005-06-27T15:30:00.000+02:00</published><updated>2005-08-09T16:51:57.313+02:00</updated><title type='text'>Using macro in emacs</title><content type='html'>1. record a macro:&lt;br /&gt;  c-x ( ...actions c-x )&lt;br /&gt;2. name a macro:&lt;br /&gt;  m-x name-last-kbd-macro&lt;br /&gt;3. save a macro into a file&lt;br /&gt;  m-x insert-kdb-macro&lt;br /&gt;4. including a query in a macro definition&lt;br /&gt;  c-x q&lt;br /&gt;  actions of keys:&lt;br /&gt;  SPC: continue executing the marco&lt;br /&gt;  DEL: skip the rest of this macro and cancel further use(repetition) of the macro&lt;br /&gt;  c-d: skip the rest of this macro and cancel further use of the macro&lt;br /&gt;  c-l: redraw the screen and ask for a character to specify contiued operation of the macro.&lt;br /&gt;c-r: enter a recursive editing level in which you can perform editing that is not part of macro. Execute c-m-c to exit any recusive editing&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Using a macro&lt;br /&gt;&lt;/span&gt;Using a named macro just like a normal elisp command.&lt;br /&gt;In order to use a macro on a region the following code can be used. These code come from sam-lib.el:&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;(defun sams-apply-macro-on-region (start end command) ;[Jesper]&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;  "Evaluate a given function (or the last defined macro) on region.&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;I.e. it will continue until the point is position&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;outside the region.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;This function is much like the function apply-macro-to-region-lines,&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;which is shipped with Emacs. It has one difference though. It&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;executes the macros until point is below the end of the region."&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;  (interactive "r\naCommand name (default:last keyboard macro).")&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;  (goto-char end)&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;  (let ((mark (point-marker)))&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;    (goto-char start)&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;    (while (&lt; (point) (marker-position mark))&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;    (if (not (fboundp command))&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;        (call-last-kbd-macro)&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;      (command-execute command)))))&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111987911035081827?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111987911035081827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111987911035081827' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111987911035081827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111987911035081827'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/06/using-macro-in-emacs.html' title='Using macro in emacs'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111938819250414120</id><published>2005-06-21T23:05:00.000+02:00</published><updated>2005-06-21T23:11:41.080+02:00</updated><title type='text'>Something about Semantic Web</title><content type='html'>Today i read something about sematic web. Sematic web is a web and a mashine can deal with the contents of this web.&lt;br /&gt;It let me think, a sematic web and some tools like brain of human. When a web is big and complex enought and enought combination between these information, on day may web smart just like a human.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111938819250414120?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111938819250414120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111938819250414120' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111938819250414120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111938819250414120'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/06/something-about-semantic-web.html' title='Something about Semantic Web'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111779763693494130</id><published>2005-06-03T13:19:00.000+02:00</published><updated>2005-08-09T11:36:13.610+02:00</updated><title type='text'>Create a stardart Perl Module structure</title><content type='html'>With h2xs -AXn Model::Name a whole directory stucture will be made for a Perl Module. And most things are done e.g. Makefile.PL, a sample test etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111779763693494130?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111779763693494130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111779763693494130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111779763693494130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111779763693494130'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/06/create-stardart-perl-module-structure.html' title='Create a stardart Perl Module structure'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111740206455893315</id><published>2005-05-29T23:04:00.000+02:00</published><updated>2005-05-29T23:27:44.563+02:00</updated><title type='text'>用Latex和Prosper来制作幻灯片</title><content type='html'>最近一直用Latex写实习报告，觉得在排版方面比较舒服，主要是因为Latex有现成的模板，要加一个注脚，或是要加一个目录只要添加一个命令（确切是宏把）就好了，这很符合写程序的习惯。开始的时候会觉得命令比较多，可是在&lt;a href="http://www.gnu.org/software/emacs/"&gt;Emacs&lt;/a&gt;和&lt;a href="http://www.gnu.org/software/auctex/"&gt;AUCTeX&lt;/a&gt;的 帮助下很快就可以快速的输入各种命令了，而且还可以自己制定各种宏。最近有一个项目要做一个讨论会，每个人都要做一个讲演，以前都是用Power Point， 可是用Latex写的报告不能直接用在Power Point里面，而且用Power Point书写数学公式很麻烦（着主要是个人习惯， 我极端不喜欢用鼠标，我正在学习使用ion做为我的window manger, 估计以后可以吧鼠标扔了;-)）。发现Latex有个&lt;a href="http://prosper.sourceforge.net/"&gt;Prosper&lt;/a&gt;的包，可是方便的制作幻灯片，还可以制作简单的动画（这点不如Power Point，可是我也不怎么用动画）。Prosper有一个很好的&lt;a href="http://www.math.umbc.edu/%7Erouben/prosper/"&gt;教程&lt;/a&gt;，半个小时就基本掌握了他的一些技巧。&lt;span class="nowrap"&gt;&lt;span class="TeX"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111740206455893315?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111740206455893315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111740206455893315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111740206455893315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111740206455893315'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/05/latexprosper.html' title='用Latex和Prosper来制作幻灯片'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111694142569306018</id><published>2005-05-24T15:29:00.000+02:00</published><updated>2005-05-29T23:01:48.180+02:00</updated><title type='text'>How to stop abbrevation in emacs once</title><content type='html'>在使用emacs的时候，简写（abbrevation）是一种很有用的技术，可以帮助快速书写更规范的词汇。例如 RedHat Linux可以设置为rh、Gnu Emacs可以设置为emacs，还可以自动更正你常见的错误，例如我经常把with写成wiht, 于是我就把with设置为with。可是，简写有一个问题当输入完emacs后，在输入任意标点或是空格，她就会自动的更正为Gnu Emacs, 通常这也是我们希望的，可是也有些个别的时候，我们不希望他自动更正，只是希望输入emacs(例如我想说emacs, 包括Gnu emacs 还包括 XEmacs)， 这个时候你可以在输入完emacs后，在输入ctr－q， 它就不会自动更正了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111694142569306018?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111694142569306018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111694142569306018' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111694142569306018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111694142569306018'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/05/how-to-stop-abbrevation-in-emacs-once.html' title='How to stop abbrevation in emacs once'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111539631685432470</id><published>2005-05-06T18:09:00.000+02:00</published><updated>2005-05-06T18:18:36.893+02:00</updated><title type='text'>automatic insert cvslogtemplate</title><content type='html'>vc and pcvs are two very conveniet emacs mode. With vc a file can be commit just by clicking&lt;br /&gt;c-x v v. Then a buffer occurs waiting for your entering. Normally a template cvs log exists in&lt;br /&gt;CVS dirctory, this is sometime very usefull as a check list for cvs commit log. During my using&lt;br /&gt;of vc and pcvs i can not found how to config these two mode so that cvs commit log template&lt;br /&gt;automaticlly insert  into "log buffer". So i wrote a func to fulfill my request. This func is very&lt;br /&gt;simple so i can list it just here&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;(defun insertCvsLogTemplate ()&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;  (interactive)&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;  (if (or (string= (buffer-name) "*VC-log*") (string= (buffer-name) "*cvs-commit*"))&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;      (if (file-exists-p "CVS/Template")&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;      (insert-file-contents "CVS/Template"))))&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;You must add following code to make your emacs add temple automaticlly&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;(add-hook 'log-edit-mode-hook 'insertCvsLogTemplate)&lt;br /&gt;(add-hook 'vc-before-checkin-hook 'insertCvsLogTemplate)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111539631685432470?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111539631685432470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111539631685432470' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111539631685432470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111539631685432470'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/05/automatic-insert-cvslogtemplate.html' title='automatic insert cvslogtemplate'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111417252763879368</id><published>2005-04-22T14:18:00.000+02:00</published><updated>2005-04-22T14:22:07.640+02:00</updated><title type='text'>emacs &lt;- dictionary -&gt; wordnet</title><content type='html'>Dictionay.el is really  a useful module of emacs. With this module a word can be searched in near 80 web dictionaries. And most intertesting thing is that you can search word with regular expressions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111417252763879368?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111417252763879368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111417252763879368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111417252763879368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111417252763879368'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/04/emacs-wordnet.html' title='emacs &lt;- dictionary -&gt; wordnet'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111411708703503008</id><published>2005-04-21T22:58:00.000+02:00</published><updated>2005-04-21T22:58:07.036+02:00</updated><title type='text'></title><content type='html'>&lt;a href='http://photos1.blogger.com/img/126/3290/640/sin.jpg'&gt;&lt;img border='0' style='border:1px solid #000000; margin:2px' src='http://photos1.blogger.com/img/126/3290/400/sin.jpg'&gt;&lt;/a&gt;&lt;br /&gt;sin&amp;nbsp;&lt;a href='http://www.hello.com/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbh.gif' alt='Posted by Hello' border='0' style='border:0px;padding:0px;background:transparent;' align='absmiddle'&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111411708703503008?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111411708703503008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111411708703503008' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111411708703503008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111411708703503008'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/04/sin.html' title=''/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111411673527542128</id><published>2005-04-21T22:43:00.000+02:00</published><updated>2005-04-21T22:52:15.276+02:00</updated><title type='text'>gnuplot</title><content type='html'>gnuplot 是一个强大的生成plot（a chart or map showing the movements or progress of an object)的工具，已经有近二十年的开发历史了。c't评论她为表现自然科学数据的强大工具。使用很简单，下面是一张sin(x)的三维图&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111411673527542128?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111411673527542128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111411673527542128' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111411673527542128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111411673527542128'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/04/gnuplot.html' title='gnuplot'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111400203896672089</id><published>2005-04-20T14:58:00.000+02:00</published><updated>2005-04-20T15:00:38.966+02:00</updated><title type='text'>covert Dezimal Zahl zu irgend mal Ziffer (&lt; 53)</title><content type='html'>#! /usr/bin/env perl&lt;br /&gt;BEGIN&lt;br /&gt;{&lt;br /&gt;unshift (@INC, "/home/tiw/perl/include");&lt;br /&gt;unshift (@INC, "/home/tiw/sh/");&lt;br /&gt;unshift (@INC,  "/home/tiw/perl/lib/perl5/5.8.0/");&lt;br /&gt;unshift (@INC,  "/home/tiw/perl/lib/perl5/site_perl/5.8.0/");&lt;br /&gt;unshift (@INC, "/home/tiw/perl/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi/");&lt;br /&gt;}&lt;br /&gt;use MY::Util;&lt;br /&gt;use warnings;&lt;br /&gt;use strict;&lt;br /&gt;my $N = 40;&lt;br /&gt;my @ziffer = (qw/0/);&lt;br /&gt;for (1..99999)&lt;br /&gt;{&lt;br /&gt;  @ziffer = add_one(@ziffer);&lt;br /&gt;}&lt;br /&gt;for (@ziffer)&lt;br /&gt;{&lt;br /&gt;  print ext_zahl($_);&lt;br /&gt;}&lt;br /&gt;sub add_one&lt;br /&gt;{&lt;br /&gt;  my @tmp = @_;&lt;br /&gt;  my @result = ();&lt;br /&gt;  my $overflow = 1;&lt;br /&gt;  while (defined (my $z = pop @tmp))&lt;br /&gt;  {&lt;br /&gt;    $z += $overflow;&lt;br /&gt;    if ($z == $N)&lt;br /&gt;    {&lt;br /&gt;      $overflow = 1;&lt;br /&gt;      $z = 0;&lt;br /&gt;    }else&lt;br /&gt;    {&lt;br /&gt;      $overflow = 0;&lt;br /&gt;    }&lt;br /&gt;    unshift @result, $z;&lt;br /&gt;  }&lt;br /&gt;  if ($overflow)&lt;br /&gt;  {&lt;br /&gt;    unshift @result, $overflow;&lt;br /&gt;  }&lt;br /&gt;  return @result;&lt;br /&gt;}&lt;br /&gt;sub ext_zahl&lt;br /&gt;{&lt;br /&gt;  my $ten_base = shift;&lt;br /&gt;  my $any_base;&lt;br /&gt;  if ($ten_base &gt; 9 and $ten_base &lt; 36)&lt;br /&gt;  {&lt;br /&gt;    $ten_base += 55;&lt;br /&gt;    $any_base = chr($ten_base);&lt;br /&gt;    return $any_base;&lt;br /&gt;  }elsif ($ten_base &gt; 35)&lt;br /&gt;  {&lt;br /&gt;    $ten_base += 61;&lt;br /&gt;    $any_base = chr($ten_base);&lt;br /&gt;    return $any_base;&lt;br /&gt;  }&lt;br /&gt;  else&lt;br /&gt;  {&lt;br /&gt;    return $ten_base;&lt;br /&gt;  }&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111400203896672089?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111400203896672089/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111400203896672089' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111400203896672089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111400203896672089'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/04/covert-dezimal-zahl-zu-irgend-mal.html' title='covert Dezimal Zahl zu irgend mal Ziffer (&lt; 53)'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111400181073805548</id><published>2005-04-20T14:52:00.000+02:00</published><updated>2005-04-20T14:56:50.740+02:00</updated><title type='text'>chr and ord -- function transform between alphabet and ascII code</title><content type='html'>chr NUMBER&lt;br /&gt; returns the character represented by that NUMBER in the character set. e.g. chr(65) is "A";&lt;br /&gt;ord EXPR&lt;br /&gt; returns the numeric value of the first character or EXPR. e.g. ord("A") is 65;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111400181073805548?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111400181073805548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111400181073805548' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111400181073805548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111400181073805548'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/04/chr-and-ord-function-transform-between.html' title='chr and ord -- function transform between alphabet and ascII code'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111390076656056411</id><published>2005-04-19T10:52:00.000+02:00</published><updated>2005-04-19T10:52:46.560+02:00</updated><title type='text'>travle salesman problem with perl</title><content type='html'>use warnings;&lt;br /&gt;use strict;&lt;br /&gt;my @tmp = (["a"]);&lt;br /&gt;my @result;&lt;br /&gt;my @source = (qw/b c d/);&lt;br /&gt;my $last = $source[@source - 1];&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;permutation(@tmp);&lt;br /&gt;&lt;br /&gt; my $num = 0;&lt;br /&gt; for my $ra (@result)&lt;br /&gt; {&lt;br /&gt;     print @$ra;&lt;br /&gt;     print "#";&lt;br /&gt;     $num += 1;&lt;br /&gt; }&lt;br /&gt; print "\n";&lt;br /&gt; print "the sum of perm is: $num\n";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#--subroutines&lt;br /&gt;sub insert&lt;br /&gt;{&lt;br /&gt;  my $e = shift;&lt;br /&gt;  my @a = @_;&lt;br /&gt;  my @output;&lt;br /&gt;  for my $i (1..@a)&lt;br /&gt;  {&lt;br /&gt;    my @tmp = @a;&lt;br /&gt;    splice @tmp, $i, 0, $e;&lt;br /&gt;    push @output, \@tmp;&lt;br /&gt;  }&lt;br /&gt;  return @output;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;sub permutation&lt;br /&gt;{&lt;br /&gt;  my @tmp = @_;&lt;br /&gt;  my $e= shift @source;&lt;br /&gt;  if ($e ne $last)&lt;br /&gt;  {&lt;br /&gt;    my @tmp2;&lt;br /&gt;    foreach my $ra (@tmp)&lt;br /&gt;    {&lt;br /&gt;      my @tmp = insert("$e", @$ra);&lt;br /&gt;      push @tmp2, @tmp;&lt;br /&gt;    }&lt;br /&gt;    permutation(@tmp2);&lt;br /&gt;  }else&lt;br /&gt;  {&lt;br /&gt;    foreach my $ra (@tmp)&lt;br /&gt;    {&lt;br /&gt;      my @tmp = insert("$e", @$ra);&lt;br /&gt;      push @result, @tmp;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111390076656056411?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111390076656056411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111390076656056411' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111390076656056411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111390076656056411'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/04/travle-salesman-problem-with-perl.html' title='travle salesman problem with perl'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111389982904291707</id><published>2005-04-19T10:36:00.000+02:00</published><updated>2005-04-19T10:37:09.043+02:00</updated><title type='text'>a perl progrom list all permutations</title><content type='html'>use warnings;&lt;br /&gt;use strict;&lt;br /&gt;my @tmp = ([]);&lt;br /&gt;my @result;&lt;br /&gt;my @source = (qw/a b c d e/);&lt;br /&gt;my $last = $source[@source - 1];&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;permutation(@tmp);&lt;br /&gt;&lt;br /&gt; my $num = 0;&lt;br /&gt; for my $ra (@result)&lt;br /&gt; {&lt;br /&gt;     print @$ra;&lt;br /&gt;     print "#";&lt;br /&gt;     $num += 1;&lt;br /&gt; }&lt;br /&gt; print "\n";&lt;br /&gt; print "the sum of perm is: $num\n";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#--subroutines&lt;br /&gt;sub insert&lt;br /&gt;{&lt;br /&gt;  my $e = shift;&lt;br /&gt;  my @a = @_;&lt;br /&gt;  my @output;&lt;br /&gt;  for my $i (0..@a)&lt;br /&gt;  {&lt;br /&gt;    my @tmp = @a;&lt;br /&gt;    splice @tmp, $i, 0, $e;&lt;br /&gt;    push @output, \@tmp;&lt;br /&gt;  }&lt;br /&gt;  return @output;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;sub permutation&lt;br /&gt;{&lt;br /&gt;  my @tmp = @_;&lt;br /&gt;  my $e= shift @source;&lt;br /&gt;  if ($e ne $last)&lt;br /&gt;  {&lt;br /&gt;    my @tmp2;&lt;br /&gt;    foreach my $ra (@tmp)&lt;br /&gt;    {&lt;br /&gt;      my @tmp = insert("$e", @$ra);&lt;br /&gt;      push @tmp2, @tmp;&lt;br /&gt;    }&lt;br /&gt;    permutation(@tmp2);&lt;br /&gt;  }else&lt;br /&gt;  {&lt;br /&gt;    foreach my $ra (@tmp)&lt;br /&gt;    {&lt;br /&gt;      my @tmp = insert("$e", @$ra);&lt;br /&gt;      push @result, @tmp;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111389982904291707?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111389982904291707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111389982904291707' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111389982904291707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111389982904291707'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/04/perl-progrom-list-all-permutations.html' title='a perl progrom list all permutations'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111358043724952058</id><published>2005-04-15T17:53:00.000+02:00</published><updated>2005-04-15T17:53:57.250+02:00</updated><title type='text'>Perl White Magic - Special Variables and Command Line Switches</title><content type='html'>&lt;a href="http://www.perlmonks.org/index.pl?node_id=431511"&gt;Perl White Magic - Special Variables and Command Line Switches&lt;/a&gt;: ".orig"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111358043724952058?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111358043724952058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111358043724952058' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111358043724952058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111358043724952058'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/04/perl-white-magic-special-variables-and.html' title='Perl White Magic - Special Variables and Command Line Switches'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111356928623941076</id><published>2005-04-15T14:42:00.000+02:00</published><updated>2005-04-15T14:48:06.240+02:00</updated><title type='text'>Select and Paste multiline with vi</title><content type='html'>'&lt;span style="color: rgb(51, 102, 255);"&gt;V&lt;/span&gt;' let vi come into &lt;span style="font-weight: bold;"&gt;visual line&lt;/span&gt; model, in this model use '&lt;span style="color: rgb(51, 102, 255);"&gt;j k h l&lt;/span&gt;' select lines.&lt;br /&gt;'&lt;span style="color: rgb(51, 102, 255);"&gt;Y&lt;/span&gt;' yank these lines, '&lt;span style="color: rgb(51, 102, 255);"&gt;p&lt;/span&gt;' paste lines.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;ctrol-v&lt;/span&gt; let vi come into &lt;span style="font-weight: bold;"&gt;visual block &lt;span style="font-weight: bold;"&gt;,&lt;/span&gt;&lt;/span&gt; in this model use 'j k h l' a block can be selected.&lt;br /&gt;'&lt;span style="color: rgb(51, 102, 255);"&gt;Y&lt;/span&gt;' yank there lines, '&lt;span style="color: rgb(51, 102, 255);"&gt;p&lt;/span&gt;' paste lines.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111356928623941076?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111356928623941076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111356928623941076' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111356928623941076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111356928623941076'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/04/select-and-paste-multiline-with-vi.html' title='Select and Paste multiline with vi'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111350804178879670</id><published>2005-04-14T21:47:00.000+02:00</published><updated>2005-04-14T21:47:21.786+02:00</updated><title type='text'>如何编辑和理解/etc/fstab</title><content type='html'>&lt;a href="http://www.tuxfiles.org/linuxhelp/fstab.html"&gt;How to edit and understand /etc/fstab&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111350804178879670?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111350804178879670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111350804178879670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111350804178879670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111350804178879670'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/04/etcfstab.html' title='如何编辑和理解/etc/fstab'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111350000670094189</id><published>2005-04-14T19:32:00.000+02:00</published><updated>2005-04-14T20:45:08.063+02:00</updated><title type='text'>如何加载一个新的文件系统到已经安装好了的linux上</title><content type='html'>事情是这样发生的。&lt;br /&gt;今年年初，我从c't的附带cdrom里得到了linux的debian发行。由于对RedHat的软件安装不满意，所以就在笔记本原来安装RedHat的5G的分区里安装了debian testing.&lt;br /&gt;由于debain安装软件实在是太方便了，没多久5G的空间就不够了。硬盘里面还有三个5G的空间是给windows用的，现在用的实在比较少，决定分一个给debian。&lt;br /&gt;前段时间正好看了lfs（LINUX FROM SCRACH），知道了如何建立分区，创建文件系统。&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;&lt;br /&gt;$su&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;$cfdisk&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;$mke2fs&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;很简单就搞定了。&lt;br /&gt;由于软件默认都是安装在/usr下的，于是我马上把这个分区挂到/usr上，接下来就是把这个分区加到/etc/fstab里了。&lt;br /&gt;$vi /etc/fstab&lt;br /&gt;$command can not find&lt;br /&gt;vi那里去了？&lt;br /&gt; which vi 没有结果，&lt;br /&gt; ls /usr啊怎么什么都没有了。&lt;br /&gt;一定是由于挂载了新的分区到/usr， 还好reboot不在/usr里。&lt;br /&gt;$reboot&lt;br /&gt;世界又回到了原来的模样：）&lt;br /&gt;嗯，这怎么办。。。最终在单位的administrator的指点下用了如下方法：（我的新分区是/dev/hda6）&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;$mount /dev/hda6 /mnt/tmp&lt;/span&gt;         (/mnt/tmp可以是任意一个空目录）&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;$cd /usr&lt;/span&gt;&lt;br /&gt; &lt;span style="color: rgb(51, 102, 255);"&gt;$tar cf - . |(cd /mnt/tmp; tar xf -)&lt;/span&gt;   (这里把以前/usr的东西搬到新的分区里）&lt;br /&gt;$vi /etc/fstab&lt;br /&gt;加入&lt;br /&gt;  /dev/hda6       /usr            ext2    defaults,errors=remount-ro 0&lt;br /&gt;/etc/fstab里的东西是什么意思看&lt;a href="http://www.tuxfiles.org/linuxhelp/fstab.html"&gt;这里&lt;/a&gt;&lt;br /&gt;$mv /usr /usr.save&lt;br /&gt;$reboot&lt;br /&gt;ok， 到这里就大功告成了，如果一切正常的话就可以把/usr.save删除了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111350000670094189?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111350000670094189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111350000670094189' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111350000670094189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111350000670094189'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/04/linux.html' title='如何加载一个新的文件系统到已经安装好了的linux上'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111348908870894788</id><published>2005-04-14T16:29:00.000+02:00</published><updated>2005-04-14T16:31:28.710+02:00</updated><title type='text'>get STDOUT and STDERR of external application</title><content type='html'>This coming form perldoc perlfaq8, not complete.&lt;br /&gt;How can I capture STDERR from an external command?&lt;br /&gt;&lt;br /&gt;       There are three basic ways of running external commands:&lt;br /&gt;&lt;br /&gt;           system $cmd;                # using system()&lt;br /&gt;           $output = `$cmd`;           # using backticks (``)&lt;br /&gt;           open (PIPE, "cmd |");       # using open()&lt;br /&gt;&lt;br /&gt;       With system(), both STDOUT and STDERR will go the same&lt;br /&gt;       place as the script's STDOUT and STDERR, unless the sys­&lt;br /&gt;       tem() command redirects them.  Backticks and open() read&lt;br /&gt;       only the STDOUT of your command.&lt;br /&gt;&lt;br /&gt;       With any of these, you can change file descriptors before&lt;br /&gt;       the call:&lt;br /&gt;&lt;br /&gt;           open(STDOUT, "&gt;logfile");&lt;br /&gt;           system("ls");&lt;br /&gt;&lt;br /&gt;       or you can use Bourne shell file-descriptor redirection:&lt;br /&gt;&lt;br /&gt;           $output = `$cmd 2&gt;some_file`;&lt;br /&gt;           open (PIPE, "cmd 2&gt;some_file |");&lt;br /&gt;&lt;br /&gt;       You can also use file-descriptor redirection to make&lt;br /&gt;       STDERR a duplicate of STDOUT:&lt;br /&gt;&lt;br /&gt;           $output = `$cmd 2&gt;&amp;1`;&lt;br /&gt;           open (PIPE, "cmd 2&gt;&amp;1 |");&lt;br /&gt;&lt;br /&gt;       Note that you cannot simply open STDERR to be a dup of&lt;br /&gt;       STDOUT in your Perl program and avoid calling the shell to&lt;br /&gt;       do the redirection.  This doesn't work:&lt;br /&gt;&lt;br /&gt;           open(STDERR, "&gt;&amp;STDOUT");&lt;br /&gt;           $alloutput = `cmd args`;  # stderr still escapes&lt;br /&gt;&lt;br /&gt;       This fails because the open() makes STDERR go to where&lt;br /&gt;       STDOUT was going at the time of the open().  The backticks&lt;br /&gt;       then make STDOUT go to a string, but don't change STDERR&lt;br /&gt;       (which still goes to the old STDOUT).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111348908870894788?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111348908870894788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111348908870894788' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111348908870894788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111348908870894788'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/04/get-stdout-and-stderr-of-external.html' title='get STDOUT and STDERR of external application'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111307037610336498</id><published>2005-04-09T20:11:00.000+02:00</published><updated>2005-04-09T20:12:56.103+02:00</updated><title type='text'>格式化输入</title><content type='html'>变量$~存储这当前的格式， format定义格式， write输出格式&lt;br /&gt;#! /usr/bin/perl -w&lt;br /&gt;use strict;&lt;br /&gt;my $nameOfUni = "st";&lt;br /&gt;my $object    = "flower";&lt;br /&gt;my $local     = "park";&lt;br /&gt;$~ = "EMAIL";&lt;br /&gt;write ;&lt;br /&gt;format EMAIL =&lt;br /&gt;MESSAGE&lt;br /&gt;PREDIFINE   @&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;br /&gt;            $nameOfUni&lt;br /&gt;     @&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;@&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;br /&gt;     $object     $local&lt;br /&gt;somethingelse&lt;br /&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111307037610336498?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111307037610336498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111307037610336498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111307037610336498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111307037610336498'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/04/blog-post_09.html' title='格式化输入'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111296840493761557</id><published>2005-04-08T15:48:00.000+02:00</published><updated>2005-04-08T15:53:24.936+02:00</updated><title type='text'>A smail chinese-english dictionary</title><content type='html'>This dictionay is use in command line, it is designed for the people like me (can access internet but&lt;br /&gt;no chinese input methode). Dictionary www.tigernt.com is used.&lt;br /&gt;#! /usr/bin/env perl&lt;br /&gt;use warnings;&lt;br /&gt;use strict;&lt;br /&gt;use LWP::UserAgent;&lt;br /&gt;use HTTP::Request::Common qw(POST);&lt;br /&gt;my $input = "@ARGV";&lt;br /&gt;my $ua = LWP::UserAgent-&gt;new();&lt;br /&gt;my $req = POST 'http://www.tigernt.com/cgi-bin/cedict.cgi',&lt;br /&gt; [inputtype=&gt;"pinyin", word=&gt;$input, outputtype=&gt;"gif",where=&gt;"whole"];&lt;br /&gt;my $content = $ua-&gt;request($req)-&gt;as_string;&lt;br /&gt;my @contents = split/\n/, $content;&lt;br /&gt;my $c = @ARGV;&lt;br /&gt;foreach my $l (@contents)&lt;br /&gt;{&lt;br /&gt;  if ($l =~ m/\[(\w+.*)&lt;\/A&gt;\]\s+\/(.+)\//)&lt;br /&gt;  {&lt;br /&gt;    print "($1) -&gt; $2\n";&lt;br /&gt;  }&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111296840493761557?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111296840493761557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111296840493761557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111296840493761557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111296840493761557'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/04/smail-chinese-english-dictionary.html' title='A smail chinese-english dictionary'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111286432405488305</id><published>2005-04-07T10:54:00.000+02:00</published><updated>2005-04-07T10:58:44.056+02:00</updated><title type='text'>How to create a file handle to a scalar</title><content type='html'>&lt;span style="font-weight: bold; color: rgb(51, 102, 255);"&gt;open SH, "&gt;", \$somescaler or die "can not open scalar: $!";&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;With this technic, you can redirect STDOUT to a scalar:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;  open SH, "&gt;", \$s or die "can not open scalar $s: $!";&lt;/span&gt;&lt;br /&gt; &lt;span style="font-style: italic;"&gt;  select SH;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-style: italic;"&gt;  print "this will be saved into scalar";&lt;/span&gt;&lt;br /&gt; &lt;span style="font-style: italic;"&gt;  select STDOUT;&lt;/span&gt;&lt;br /&gt; &lt;span style="font-style: italic;"&gt;   print "you can see it in tty now";&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111286432405488305?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111286432405488305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111286432405488305' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111286432405488305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111286432405488305'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/04/how-to-create-file-handle-to-scalar.html' title='How to create a file handle to a scalar'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111254290391288310</id><published>2005-04-03T17:39:00.000+02:00</published><updated>2005-04-03T17:41:43.913+02:00</updated><title type='text'>如何删除光标到行首</title><content type='html'>M- - C- k&lt;br /&gt;meta 加 －， 再输入 ctrl 加 k&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111254290391288310?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111254290391288310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111254290391288310' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111254290391288310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111254290391288310'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/04/blog-post.html' title='如何删除光标到行首'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111234947636129859</id><published>2005-04-01T11:52:00.000+02:00</published><updated>2005-04-01T11:57:56.363+02:00</updated><title type='text'>move to previous window</title><content type='html'>C-x o is a very useful command, with it we can move to other windows. But it can not move backword&lt;br /&gt;through windows. If there have more than two windows and you want move to previous window, what &lt;br /&gt;you can do with C-x o is do it n-1 times ( n is number of windows ). C-x o is bind to function&lt;br /&gt;(other-window), and we can give this funciton -1 as parameter to let it go backward a window, so&lt;br /&gt;the following func whill solve this problem:&lt;br /&gt; (defun other-window-backward ()&lt;br /&gt;  "select previous window"&lt;br /&gt;  (interactive)&lt;br /&gt;  (other-window -1))&lt;br /&gt;bind it to a comfortable key, then you can easilly jump back to previous window.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111234947636129859?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111234947636129859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111234947636129859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111234947636129859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111234947636129859'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/04/move-to-previous-window.html' title='move to previous window'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111228016380229984</id><published>2005-03-31T16:41:00.000+02:00</published><updated>2005-03-31T16:42:43.803+02:00</updated><title type='text'>make latex to ps and show it in gv in emacs</title><content type='html'>(defun mps ()&lt;br /&gt;  (interactive)&lt;br /&gt;  (let ((file-name (buffer-file-name)) base-name)&lt;br /&gt;    (if (not (string-match "^\\(.*\\)\\.tex$" file-name))&lt;br /&gt; (message "wrong buffer for this command")&lt;br /&gt;      (setq base-name (match-string 1 file-name)))&lt;br /&gt;    (shell-command (concat "latex " (buffer-file-name)))&lt;br /&gt;    (shell-command (concat "dvips " base-name ".dvi -o"))&lt;br /&gt;    (shell-command "rm -f *.aux *.dvi *.log *.toc")&lt;br /&gt;    (shell-command (concat "gv " base-name ".ps"))))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111228016380229984?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111228016380229984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111228016380229984' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111228016380229984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111228016380229984'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/03/make-latex-to-ps-and-show-it-in-gv-in.html' title='make latex to ps and show it in gv in emacs'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111203552604585675</id><published>2005-03-28T20:36:00.001+02:00</published><updated>2005-03-28T20:45:26.046+02:00</updated><title type='text'>emacs outline perl</title><content type='html'>参看： http://www.perlmonks.org/?node_id=59405&lt;br /&gt;&lt;br /&gt;如何在emacs中用outline看perl的代码：&lt;br /&gt;把下面的代码加入到你的.emacs中：&lt;br /&gt;(defun perl-outline-mode ()&lt;br /&gt;  "set customized outline minor mode for Perl"&lt;br /&gt;  (interactive)&lt;br /&gt;  (setq outline-regexp &lt;br /&gt;    "#!.\\|\\(pac\\)kage\\|sub\\|\\(=he\\)ad\\|\\(=po\\)d")&lt;br /&gt;  (outline-minor-mode))&lt;br /&gt;(add-hook 'cperl-mode-hook&lt;br /&gt;      '(lambda () (and (setq outline-regexp "sub") (outline-minor-mode))))&lt;br /&gt;&lt;br /&gt;快捷键：&lt;br /&gt;C-c @ C-t 折叠所有, C-c @ C-a展开所有, C-c @ C-d折叠一个方程, C-c @ C-s展开一个方程&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111203552604585675?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111203552604585675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111203552604585675' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111203552604585675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111203552604585675'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/03/emacs-outline-perl_28.html' title='emacs outline perl'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111200212648038983</id><published>2005-03-28T11:21:00.000+02:00</published><updated>2005-03-28T11:33:29.216+02:00</updated><title type='text'>perl成语之if (grep $_ eq $bar, @foo)</title><content type='html'>参照：http://www.perlmonks.org/?node_id=280658&lt;br /&gt;代码：&lt;br /&gt;&lt;br /&gt;if (grep $_ eq $bar, @foo) {&lt;br /&gt;   ...&lt;br /&gt;}&lt;br /&gt;解释：&lt;br /&gt;这句代码比较好解释： 用途就是判定$bar是否是@foo&lt;br /&gt;中的一个元素。 grep的作用是： 拿出@foo中的每一个&lt;br /&gt;元素存储到$_中，做$_ eq $bar 的运算，返回值为附和&lt;br /&gt;$_ eq $bar的元素的列表。 grep的用法具体参看&lt;a href="http://www.perlmonks.org/?node=grep"&gt;grep&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111200212648038983?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111200212648038983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111200212648038983' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111200212648038983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111200212648038983'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/03/perlif-grep-eq-bar-foo.html' title='perl成语之if (grep $_ eq $bar, @foo)'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111200154248047144</id><published>2005-03-28T11:03:00.000+02:00</published><updated>2005-03-28T11:34:11.996+02:00</updated><title type='text'>perl成语之keys %{{ map {$_ =&gt; 1} @list }}</title><content type='html'>参照： http://www.perlmonks.org/?node_id=280658&lt;br /&gt;代码：&lt;br /&gt;  my @list = qw/a b c d d a e b a b d e f/;&lt;br /&gt;  my @uniq = keys %{{ map {$_ =&gt; 1} @list }};&lt;br /&gt;&lt;br /&gt;  print "@list\n@uniq\n";&lt;br /&gt;&lt;br /&gt;  __output__&lt;br /&gt;&lt;br /&gt;  a b c d d a e b a b d e f&lt;br /&gt;  e f a b c d&lt;br /&gt;&lt;br /&gt;解释：&lt;br /&gt;这段代码提取出一个数组中不重复的元素，让我们来一段一段的了解，&lt;br /&gt;她是如何运行的：&lt;br /&gt;  map{$_ =&gt; 1} @list&lt;br /&gt;这句产生出一系列的键/值对， 键为@list的值。&lt;br /&gt;&lt;br /&gt;  {map {$_ =&gt; 1} @list}&lt;br /&gt;加上打括号后， 产生了一个匿名的哈希，并且用map这句产生出的键/值对初始化，最终&lt;br /&gt;我们得到了一个哈希的句柄。&lt;br /&gt;  &lt;br /&gt;  key %{{map {$_ =&gt;} @list}}&lt;br /&gt;这句吧上面得到的哈希句柄转换为一个哈希表，并且取出他的键值。&lt;br /&gt;由于哈希的键值是唯一的，所以我们最终得到了@list中不重复的元素。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111200154248047144?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111200154248047144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111200154248047144' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111200154248047144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111200154248047144'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/03/perlkeys-map-1-list.html' title='perl成语之keys %{{ map {$_ =&gt; 1} @list }}'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111167814610495169</id><published>2005-03-24T16:28:00.000+01:00</published><updated>2005-03-24T16:29:06.103+01:00</updated><title type='text'>add a minor mode to a major mode</title><content type='html'>eg.&lt;br /&gt;(add-hook 'text-mode-hook (lambda () (abbrev-mode 1)))&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111167814610495169?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111167814610495169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111167814610495169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111167814610495169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111167814610495169'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/03/add-minor-mode-to-major-mode.html' title='add a minor mode to a major mode'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111167779536008192</id><published>2005-03-24T16:18:00.000+01:00</published><updated>2005-03-24T16:23:15.363+01:00</updated><title type='text'>abbreviation in emacs and vi</title><content type='html'>I always write teh instead of the, in emacs and vi there have a good way to resolve this probem:&lt;br /&gt;emacs:&lt;br /&gt;(abbrev-mode 1)&lt;br /&gt;(define-abbrev-table 'global-abbrev-table '(&lt;br /&gt;    ("rh"  "RedHat Linux" nil 1)&lt;br /&gt;    ("teh" "the" nil 1)&lt;br /&gt;    ("mh" "stuwsl15" nil 1) ;; add any your abbreviation here&lt;br /&gt;    ))&lt;br /&gt;vi:&lt;br /&gt;:iab teh the&lt;br /&gt;:iab rh RehHat Linux " add any your abbreviation here&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111167779536008192?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111167779536008192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111167779536008192' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111167779536008192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111167779536008192'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/03/abbreviation-in-emacs-and-vi.html' title='abbreviation in emacs and vi'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111151757139243596</id><published>2005-03-22T19:49:00.000+01:00</published><updated>2005-03-22T19:52:51.393+01:00</updated><title type='text'>How to make emacs change mode of file to executalb when save file</title><content type='html'>add this in your .emacs&lt;br /&gt;(add-hook 'after-save-hook 'executable-make-buffer-file-executable-if-script-p)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111151757139243596?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111151757139243596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111151757139243596' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111151757139243596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111151757139243596'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/03/how-to-make-emacs-change-mode-of-file.html' title='How to make emacs change mode of file to executalb when save file'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-111117905598856638</id><published>2005-03-18T21:50:00.000+01:00</published><updated>2005-03-18T23:24:28.273+01:00</updated><title type='text'>Per6控制语句</title><content type='html'>&lt;span style="font-weight: bold;"&gt;if&lt;/span&gt;&lt;br /&gt;if之后的括号为可选的：&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;if $a &lt;&gt;&lt;br /&gt;   say "this is ok in perl6"&lt;br /&gt; }&lt;br /&gt;switch&lt;/span&gt;&lt;br /&gt;引入了新的控制符 given when, 要理解given 和 when，必须了解&lt;br /&gt;~~ smart matching. 下面的语句是等价的&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;given $a {&lt;br /&gt;    when 'ting' {...}&lt;br /&gt;    when /^ti../ {...}&lt;br /&gt;     when (1..3) {...}&lt;br /&gt; }&lt;br /&gt; given $a {&lt;br /&gt;      when $_ ~~ 'ting' {...}&lt;br /&gt;      when $_ ~~ /^ti../ {...}&lt;br /&gt;      when $_ ~~ (1..3) {...}&lt;br /&gt; }&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-111117905598856638?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/111117905598856638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=111117905598856638' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111117905598856638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/111117905598856638'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/03/per6.html' title='Per6控制语句'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-110718660375644564</id><published>2005-01-31T16:50:00.000+01:00</published><updated>2005-01-31T16:50:03.756+01:00</updated><title type='text'>EmacsWiki: MakingScriptsExecutableOnSave</title><content type='html'>&lt;a href="file:///D:/Documents%20and%20Settings/Administrator/Application%20Data/Mozilla/Firefox/Profiles/default.e8g/ScrapBook/data/20050131144638/index.html"&gt;EmacsWiki: MakingScriptsExecutableOnSave&lt;/a&gt;&lt;br /&gt;add exe feature to a file, when it is saved in emacs&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-110718660375644564?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/110718660375644564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=110718660375644564' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/110718660375644564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/110718660375644564'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/01/emacswiki-makingscriptsexecutableonsav.html' title='EmacsWiki: MakingScriptsExecutableOnSave'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-110712201800736059</id><published>2005-01-30T22:53:00.000+01:00</published><updated>2005-01-30T22:53:38.006+01:00</updated><title type='text'>BottomFeeder - Cross-platform RSS/Atom News Aggregator</title><content type='html'>&lt;a href="http://www.cincomsmalltalk.com/BottomFeeder/"&gt;BottomFeeder - Cross-platform RSS/Atom News Aggregator&lt;/a&gt;: "&lt;img src='images/bfsitelogo.png' alt='BottomFeeder'&gt;"&lt;br /&gt;a news reader&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-110712201800736059?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/110712201800736059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=110712201800736059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/110712201800736059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/110712201800736059'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/01/bottomfeeder-cross-platform-rssatom.html' title='BottomFeeder - Cross-platform RSS/Atom News Aggregator'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-110712186125319167</id><published>2005-01-30T22:51:00.000+01:00</published><updated>2005-01-30T22:51:01.253+01:00</updated><title type='text'>Software WithStyle - Home</title><content type='html'>&lt;a href="http://www.softwarewithstyle.com/"&gt;Software WithStyle - Home&lt;/a&gt;: "&lt;a href='/'&gt;&lt;br /&gt;        &lt;img src='/images/sws_logo2.gif' alt='Software WithStyle'&gt;&lt;br /&gt;      &lt;/a&gt;&lt;br /&gt;      &lt;hr class='clear'&gt;&lt;br /&gt;      &lt;div class='top_nav'&gt;&lt;br /&gt;        &lt;a href='/'&gt;home&lt;/a&gt;&lt;br /&gt;        &lt;span&gt; | &lt;/span&gt;&lt;br /&gt;        &lt;a href='/screenshots.html'&gt;screenshots&lt;/a&gt;&lt;br /&gt;        &lt;span&gt; | &lt;/span&gt;&lt;br /&gt;        &lt;a href='/developers/developers.html'&gt;developers&lt;/a&gt;&lt;br /&gt;        &lt;span&gt; | &lt;/span&gt;&lt;br /&gt;        &lt;a href='/about.html'&gt;about us&lt;/a&gt;&lt;br /&gt;      &lt;/div&gt;"&lt;br /&gt;WithStyle is a Web user interface, an XML renderer and editor. WithStyle uses standards-based technologies and is an application platform for web-based clients. The WithStyle editor provides a What You See Is What You Get (WYSIWYG) editing experience.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-110712186125319167?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/110712186125319167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=110712186125319167' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/110712186125319167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/110712186125319167'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/01/software-withstyle-home.html' title='Software WithStyle - Home'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-110708190022865956</id><published>2005-01-30T11:45:00.000+01:00</published><updated>2005-01-30T11:45:00.226+01:00</updated><title type='text'></title><content type='html'>&lt;a href='http://photos1.blogger.com/img/126/3290/640/100_0075.jpg'&gt;&lt;img border='0' style='border:1px solid #000000; margin:2px' src='http://photos1.blogger.com/img/126/3290/400/100_0075.jpg'&gt;&lt;/a&gt;&lt;br /&gt;uni-stuttgart&amp;nbsp;&lt;a href='http://www.hello.com/' target='ext'&gt;&lt;img src='http://photos1.blogger.com/pbh.gif' alt='Posted by Hello' border='0' style='border:0px;padding:0px;background:transparent;' align='absmiddle'&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-110708190022865956?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/110708190022865956/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=110708190022865956' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/110708190022865956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/110708190022865956'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/01/uni-stuttgart.html' title=''/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-110707977685856865</id><published>2005-01-30T11:09:00.000+01:00</published><updated>2005-01-30T11:09:36.856+01:00</updated><title type='text'>EmacsWiki: SiteMap</title><content type='html'>&lt;a href="http://www.emacswiki.org/cgi-bin/wiki"&gt;EmacsWiki: SiteMap&lt;/a&gt;一个emacs的宝库，&lt;br /&gt;可以查找到你想要得几乎说有东西&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-110707977685856865?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/110707977685856865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=110707977685856865' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/110707977685856865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/110707977685856865'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/01/emacswiki-sitemap.html' title='EmacsWiki: SiteMap'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10343735.post-110648774919106465</id><published>2005-01-23T14:40:00.000+01:00</published><updated>2005-01-23T14:44:51.306+01:00</updated><title type='text'>一个很好的调试模块</title><content type='html'>&lt;pre&gt;一个对调试很有用的模块，它改良了Dumper的功能。&lt;br /&gt;看看下面的代码就知道了&lt;br /&gt;&lt;br /&gt;&lt;span class="keyword"&gt;use&lt;/span&gt; &lt;span class="constant"&gt;Data&lt;/span&gt;::Dumper;&lt;br /&gt;&lt;span class="type"&gt;my&lt;/span&gt; $&lt;span class="variable-name"&gt;s&lt;/span&gt; = &lt;span class="string"&gt;"scalar"&lt;/span&gt;;&lt;br /&gt;&lt;span class="type"&gt;my&lt;/span&gt; @&lt;span class="underline"&gt;&lt;span class="variable-name"&gt;a&lt;/span&gt;&lt;/span&gt; = ( &lt;span class="string"&gt;"red"&lt;/span&gt;, [&lt;span class="string"&gt;"green"&lt;/span&gt;, {yellow=&amp;gt;&lt;span class="string"&gt;"blue"&lt;/span&gt;}]);&lt;br /&gt;&lt;span class="type"&gt;my&lt;/span&gt; %&lt;span class="underline"&gt;&lt;span class="variable-name"&gt;h&lt;/span&gt;&lt;/span&gt; = (name=&amp;gt;&lt;span class="string"&gt;"wti"&lt;/span&gt;, loveColor=&amp;gt;&lt;span class="string"&gt;"blue"&lt;/span&gt;);&lt;br /&gt;print STDERR Dumper($&lt;span class="variable-name"&gt;s&lt;/span&gt;, \%&lt;span class="underline"&gt;&lt;span class="variable-name"&gt;h&lt;/span&gt;&lt;/span&gt;, \@&lt;span class="underline"&gt;&lt;span class="variable-name"&gt;a&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;print STDERR Dumper($&lt;span class="variable-name"&gt;s&lt;/span&gt;, %&lt;span class="underline"&gt;&lt;span class="variable-name"&gt;h&lt;/span&gt;&lt;/span&gt;, @&lt;span class="underline"&gt;&lt;span class="variable-name"&gt;a&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;&lt;span class="comment"&gt;#------------------------------------------------------&lt;br /&gt;#  The output are:&lt;br /&gt;#&lt;br /&gt;#  $VAR1 = 'scalar';            &lt;br /&gt;#  $VAR2 = {                    &lt;br /&gt;#            'name' =&amp;gt; 'wti',   &lt;br /&gt;#            'loveColor' =&amp;gt; 'blue'      &lt;br /&gt;#          };                   &lt;br /&gt;#  $VAR3 = [                    &lt;br /&gt;#            'red',             &lt;br /&gt;#            [                  &lt;br /&gt;#              'green',         &lt;br /&gt;#              {                        &lt;br /&gt;#                'yellow' =&amp;gt; 'blue'&lt;br /&gt;#              }                        &lt;br /&gt;#            ]                  &lt;br /&gt;#          ];            &lt;br /&gt;#  $VAR1 = 'scalar';&lt;br /&gt;#  $VAR2 = 'name';&lt;br /&gt;#  $VAR3 = 'wti';&lt;br /&gt;#  $VAR4 = 'loveColor';&lt;br /&gt;#  $VAR5 = 'blue';&lt;br /&gt;#  $VAR6 = 'red';&lt;br /&gt;#  $VAR7 = [&lt;br /&gt;#            'green',&lt;br /&gt;#            {&lt;br /&gt;#              'yellow' =&amp;gt; 'blue'&lt;br /&gt;#            }&lt;br /&gt;#          ];        &lt;br /&gt;#------------------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;span class="keyword"&gt;use&lt;/span&gt; &lt;span class="constant"&gt;Data&lt;/span&gt;::Dumper::Simple;&lt;br /&gt;print STDERR Dumper($&lt;span class="variable-name"&gt;s&lt;/span&gt;, \%&lt;span class="underline"&gt;&lt;span class="variable-name"&gt;h&lt;/span&gt;&lt;/span&gt;, \@&lt;span class="underline"&gt;&lt;span class="variable-name"&gt;a&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;&lt;span class="comment"&gt;#------------------------------------------------------&lt;br /&gt;#  The output are:&lt;br /&gt;#&lt;br /&gt;#  $s = 'scalar';                               &lt;br /&gt;#  $h = {                                       &lt;br /&gt;#         'name' =&amp;gt; 'wti',                      &lt;br /&gt;#         'loveColor' =&amp;gt; 'blue'                 &lt;br /&gt;#       };                                      &lt;br /&gt;#  $a = [                                       &lt;br /&gt;#         'red',                                &lt;br /&gt;#         [                           &lt;br /&gt;#           'green',                  &lt;br /&gt;#           {                         &lt;br /&gt;#             'yellow' =&amp;gt; 'blue'      &lt;br /&gt;#           }                         &lt;br /&gt;#         ]                           &lt;br /&gt;#       ];                            &lt;br /&gt;#------------------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;print STDERR Dumper($&lt;span class="variable-name"&gt;s&lt;/span&gt;, %&lt;span class="underline"&gt;&lt;span class="variable-name"&gt;h&lt;/span&gt;&lt;/span&gt;, @&lt;span class="underline"&gt;&lt;span class="variable-name"&gt;a&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;&lt;span class="comment"&gt;#------------------------------------------------------&lt;br /&gt;#  Outputs are same as Dumper($s, \%h, \@a)&lt;br /&gt;#------------------------------------------------------&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10343735-110648774919106465?l=tingwang.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tingwang.blogspot.com/feeds/110648774919106465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10343735&amp;postID=110648774919106465' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/110648774919106465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10343735/posts/default/110648774919106465'/><link rel='alternate' type='text/html' href='http://tingwang.blogspot.com/2005/01/blog-post.html' title='一个很好的调试模块'/><author><name>Beast Break Cage</name><uri>http://www.blogger.com/profile/13789496373845834418</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
