<?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-10321167</id><updated>2012-02-15T23:01:51.176-08:00</updated><category term='linux'/><category term='ubuntu'/><category term='google technical resume howto write'/><category term='N71 theme sky'/><category term='vmware'/><category term='vista'/><title type='text'>Stephen's Technical Blog</title><subtitle type='html'>A blog for my technical stuff.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>57</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-10321167.post-2532219676285100133</id><published>2007-04-08T00:48:00.000-07:00</published><updated>2007-04-08T00:55:18.392-07:00</updated><title type='text'>無線上網</title><content type='html'>HKSARG is planning to provide free wireless Internet connection to the general public.  However, the government will not allow user to be online anonymously. One can take such facilities to do illegal activities, such as launching an attack against a corporate network.  So, identity is a concern.  How can we manage the identity of the user who uses the network?  Also, should it be opened only to Hong Kong people? Should a visitor allow to use the facilities?&lt;br /&gt;&lt;br /&gt;... to be continued.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-2532219676285100133?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/2532219676285100133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=2532219676285100133' title='40 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/2532219676285100133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/2532219676285100133'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2007/04/blog-post.html' title='無線上網'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>40</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-2654360390827221818</id><published>2007-01-31T06:19:00.000-08:00</published><updated>2007-01-31T06:20:06.783-08:00</updated><title type='text'>To be better manage the schedule and tasks</title><content type='html'>My target for this year is to focus on managing better schedule and target.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-2654360390827221818?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/2654360390827221818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=2654360390827221818' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/2654360390827221818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/2654360390827221818'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2007/01/to-be-better-manage-schedule-and-tasks.html' title='To be better manage the schedule and tasks'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-568040047905599241</id><published>2006-09-26T19:42:00.000-07:00</published><updated>2006-09-26T19:44:41.694-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='vista'/><category scheme='http://www.blogger.com/atom/ns#' term='vmware'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Installing vmware on Ubuntu</title><content type='html'>to compile the vmware kernel module, we need to get the&lt;br /&gt;&lt;br /&gt;apt-get install linux-headers-`uname -r`&lt;br /&gt;&lt;br /&gt;to continue&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-568040047905599241?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/568040047905599241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=568040047905599241' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/568040047905599241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/568040047905599241'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2006/09/installing-vmware-on-ubuntu.html' title='Installing vmware on Ubuntu'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-8877007063415170565</id><published>2006-09-19T10:11:00.000-07:00</published><updated>2006-09-19T10:18:15.057-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='N71 theme sky'/><title type='text'>First theme for my mobile</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger2/7439/1259/1600/qsn_bg_screen181920.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://photos1.blogger.com/blogger2/7439/1259/200/qsn_bg_screen181920.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Just learnt how to make a theme for my mobile N71.&lt;br /&gt;&lt;br /&gt;It is unique. &lt;a href="http://standby.hk/symbian/theme/MySky.sis"&gt;MySky&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-8877007063415170565?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/8877007063415170565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=8877007063415170565' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/8877007063415170565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/8877007063415170565'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2006/09/first-theme-for-my-mobile.html' title='First theme for my mobile'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-115077298268441256</id><published>2006-06-19T20:09:00.000-07:00</published><updated>2006-06-19T20:09:42.720-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google technical resume howto write'/><title type='text'>"如何写一份好的工程师简历"</title><content type='html'>Just to blog what I read:&lt;br /&gt;&lt;br /&gt;如何写一份好的工程师简历&lt;br /&gt;&lt;br /&gt;2006年6月14日 上午 10:15:00&lt;br /&gt;发表者：王忻，Google 工程师&lt;br /&gt;&lt;br /&gt;最近三年作为 Google（谷歌）的软件工程师，我每周会帮人事部门审查简历，决定要不要给他们面试。Google 这几年的发展让很多许多优秀的工程师都前来申请。到目前为止，我已经看了上千份简历，有些简历留下的印象比别的好很多。尤其是最近亲戚朋友常常问我如何修改他们的简历，所以我积累了一些常见的错误避免的提议，在此跟大家交流一下。&lt;br /&gt;&lt;br /&gt;1．谈到你做过的技术时，应该提到用的程序语言、你的个人贡献和产品细节。&lt;br /&gt;&lt;br /&gt;有时我看到有人把过去的经验在简历上一笔带过，比如说：&lt;br /&gt;&lt;br /&gt;• 在三人小组里，为电子邮件软件写了些 features。&lt;br /&gt;&lt;br /&gt;这是远远不够的，看简历的人希望了解你做的工作的难度和对本公司有多少联系，所以你最好写的具体一些。譬如：&lt;br /&gt;&lt;br /&gt;• 用 C++ 语言写了网络电子邮件的自动 backups。在三人小组里，专门负责设计和写储存服务器。从设计开始， 一年后把这个功能 feature 的用户推到了三千。&lt;br /&gt;&lt;br /&gt;2．多讲事实, 少用形容词。&lt;br /&gt;&lt;br /&gt;看简历的人读你的简历时，需要做判断，所以在简历里需要事实和数目。如果你写“迅速的提高了软件的操作效率”，看简历的人很难判断你成就的难度。但如果你写“在3个星期内，把软件的操作效率提高了40%” 就好多了。&lt;br /&gt;&lt;br /&gt;有些谦虚的朋友们不愿意把话说满，所以你也可以用这个办法。你如果说自己“突出”或“在项目上常常被请去救火”，听起来难免会有点骄傲。但你也可以用不能否认的事实来说明你的观点，如“《纽约日报》评这个产品为‘突出’”，或“加入了三个原本已落后于计划的项目小组，但经过努力和组员一起把它们都按时完成了。”&lt;br /&gt;&lt;br /&gt;3．你获得的奖、商业的荣誉或表扬、受用户欢迎的产品和你做过的有难度的业余项目都该包括在简历里。&lt;br /&gt;&lt;br /&gt;我有位朋友在硅谷一个著名的硬件公司做了六年，她设计的 IP phone（网络电话）为公司赚了上亿的收入，被公司与商业报道多次评了奖。我有一次在旧金山的高速公路上驾车时，看到路边有她产品的广告牌；还有一次我去上海度假时，竟然发现上海公路边上也有！&lt;br /&gt;&lt;br /&gt;不久，这位朋友决定换工作，请我看看她的简历。我惊讶的发现，她居然轻描淡写的写了一句-- "1998 – 2004：网络电话产品的硬件工程师组长" 和她的职责。&lt;br /&gt;&lt;br /&gt;"产品赢的奖呢？它为公司赚的钱呢？" 我追问到。&lt;br /&gt;&lt;br /&gt;"那些也该写吗？" 她说。&lt;br /&gt;&lt;br /&gt;当然该写。&lt;br /&gt;&lt;br /&gt;有人问，业余时间做的项目可不可以写？我觉得只要你的项目有代表性能说明对你的能力，都该包括。&lt;br /&gt;&lt;br /&gt;4．分清主次，删掉相比之下不起眼的成绩，以免冲淡更加突出的成绩。&lt;br /&gt;&lt;br /&gt;有朋友问，写简历是不是写的越多越好？譬如：&lt;br /&gt;&lt;br /&gt;在甲公司做暑假实习生——&lt;br /&gt;* 改善电子游戏的数值分类算法， 减少了内存要求 10%。&lt;br /&gt;* 用 Java 写了 3000 行用户界面程序。&lt;br /&gt;* 每周做两小时的人工测试。&lt;br /&gt;&lt;br /&gt;你在申请软件工程师的职位时，我觉得前两点比较相关，第三点其实就不必写了。有时我看到有的简历里会提到，"按时完成了任务，产品符合原计划规格"。但读简历的人通常会认为这是理所当然的，而你把这些声明出来反而减弱简历的效果。&lt;br /&gt;&lt;br /&gt;写一份简历不容易，但写好了也会带来成就感 （和好工作！）。 Google （谷歌）在中国广召各方面的人才，你不妨可以给我们投个简历！我们不但在信息检索方面招雇工程师，还有计算机图形、用户界面、硬件、Windows、质量保证员和系统管理员等方面。更多信息，请您访问这里。&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/10321167-115077298268441256?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/115077298268441256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=115077298268441256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/115077298268441256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/115077298268441256'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2006/06/blog-post.html' title='&quot;如何写一份好的工程师简历&quot;'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-114801135494133129</id><published>2006-05-18T21:00:00.000-07:00</published><updated>2006-05-18T21:02:34.953-07:00</updated><title type='text'>To be technical~</title><content type='html'>After next week, I will start to be more technical.  As this blog is supposed to be as technical as it should be.  It should be sharing the state-of-the-art stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-114801135494133129?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/114801135494133129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=114801135494133129' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/114801135494133129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/114801135494133129'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2006/05/to-be-technical.html' title='To be technical~'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-113936829175928002</id><published>2006-02-07T19:08:00.000-08:00</published><updated>2006-02-07T20:35:13.426-08:00</updated><title type='text'>## What application I need ##</title><content type='html'>- a program to keep track of tasks [a TODO list]&lt;br /&gt; = allow me to add / modify the list, which might be an article, a webpage, a book etc&lt;br /&gt; = allow me to prioritize them&lt;br /&gt; = set a deadline&lt;br /&gt; = somehow a reminder&lt;br /&gt; = can sync with sunbird&lt;br /&gt;&lt;br /&gt;- Photo album&lt;br /&gt; = similar to sony's imagestation, yahoo! photo album&lt;br /&gt;&lt;br /&gt;Reference:&lt;br /&gt; http://www.imagestation.com&lt;br /&gt; http://photos.yahoo.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-113936829175928002?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/113936829175928002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=113936829175928002' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113936829175928002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113936829175928002'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2006/02/what-application-i-need.html' title='## What application I need ##'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-113936480514090476</id><published>2006-02-07T18:12:00.000-08:00</published><updated>2006-02-07T18:13:25.166-08:00</updated><title type='text'>Blog What I read: talking about design</title><content type='html'>Luis Villa wrote:&lt;br /&gt;&gt; On 2/7/06, JP Rosevear &lt;jpr novell com&gt; wrote:&lt;br /&gt;&gt;&gt; The changes that were implemented were not as radical as the&lt;br /&gt;&gt;&gt; mockups. Basically what Nat F. showed in Paris is what was&lt;br /&gt;&gt;&gt; implemented.  The code will be released to the community soon.&lt;br /&gt;&gt; &lt;br /&gt;&gt; To ask the obvious question, why not now, and why not discussed &lt;br /&gt;&gt; publicly earlier?&lt;br /&gt;&lt;br /&gt;So here's my (ie, not Novell's) answer.&lt;br /&gt;&lt;br /&gt;Two words: "bike shed"[1]. Or actually, "stop energy"[2] works too. Your&lt;br /&gt;pick.&lt;br /&gt;&lt;br /&gt;Although the changes aren't nearly as radical as the original mockups,&lt;br /&gt;they are a big change from the current GNOME panel menu. If we had&lt;br /&gt;proposed the changes on the mailing lists, it would have started a huge&lt;br /&gt;discussion about what people hated about the design ("you can't make the&lt;br /&gt;panel menu depend on beagle!!!") and how it should be different. And&lt;br /&gt;then we could have either (a) completely ignored everyone and done it&lt;br /&gt;ourselves anyway, or (b) had a long conversation about the merits of the&lt;br /&gt;design and then not actually finished the code in time for NLD10.&lt;br /&gt;&lt;br /&gt;So we did it ourselves, and now either GNOME will like what we did, in&lt;br /&gt;which case, yay, free code for GNOME, or GNOME won't like what we did,&lt;br /&gt;in which case, no harm no foul for GNOME, and yay, brand differentiation&lt;br /&gt;for Novell. (And anyone who yells "fork" deserves to get one stuck in them.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;An equivalent answer to the question is "because you can't do design by&lt;br /&gt;committee". Everything good in GNOME is good because one person or a&lt;br /&gt;small number of people working closely together made it good. Much of&lt;br /&gt;what is bad in GNOME is bad because lots of people have contributed&lt;br /&gt;without having a single vision of what the end result is supposed to be.&lt;br /&gt;I mean, look at the stuff John Williams has been blogging about the last&lt;br /&gt;week[3]:&lt;br /&gt;&lt;br /&gt;    * Evolution's UI blocking on I/O SUCKS. Due to lack of design in the&lt;br /&gt;      early stages of development&lt;br /&gt;&lt;br /&gt;    * Evolution's integration with gaim and tomboy RULES. Both of these&lt;br /&gt;      happened because specific people (ChipX86, orph) made them happen.&lt;br /&gt;&lt;br /&gt;    * Multimedia integration SUCKS. No one has ever sat down and tried&lt;br /&gt;      to fix the big picture. (Although I think the gstreamer team is in&lt;br /&gt;      the process of doing this now?)&lt;br /&gt;&lt;br /&gt;    * Apps not remembering their window size and position SUCKS. Again,&lt;br /&gt;      needs someone to take this problem and make it their own. I&lt;br /&gt;      remember xkahn was trying to fix this a few years ago, but never&lt;br /&gt;      finished.&lt;br /&gt;&lt;br /&gt;    * Bug-buddy SUCKS. Jacob's original UI was simple and brilliant. But&lt;br /&gt;      as more and more people added more and more features without&lt;br /&gt;      looking at the big picture, it got unwieldy. (But now a small&lt;br /&gt;      team is putting the simplicity back in again.)&lt;br /&gt;&lt;br /&gt;    * Deskbar applet RULES (kikidonk), dashboard RULES (Nat), and beagle&lt;br /&gt;      RULES (trow and joe). None of these was done *exclusively* by&lt;br /&gt;      those people, but each of them reflects one person's (or a few&lt;br /&gt;      people's) vision, as opposed to the current state of bug buddy,&lt;br /&gt;      which just sort of happened.&lt;br /&gt;&lt;br /&gt;This is just another aspect of the UI "simplicity" thing. We like UIs&lt;br /&gt;that try to do the right thing (metacity, epiphany/firefox, evince)&lt;br /&gt;rather than UIs that try to make every possible user happy&lt;br /&gt;(enlightenment, mozilla, gpdf/acroread). If you try to design something&lt;br /&gt;by committee, you either have to end up with the latter sort of messy&lt;br /&gt;does-everything UI, or you ignore and hence piss off a large chunk of&lt;br /&gt;the committee.&lt;br /&gt;&lt;br /&gt;And that's where we are with NLD. There is no way that everyone in the&lt;br /&gt;GNOME community is going to like the changes we wanted to make. But we&lt;br /&gt;did the user testing, and we believe in it, and we want to make the&lt;br /&gt;changes anyway. So we're doing it. Maybe it will turn out good, and&lt;br /&gt;maybe it will turn out bad. Either way, the GNOME community learns from&lt;br /&gt;it. Think of it like this: wouldn't it have been cool if we could have&lt;br /&gt;tried out spatialus on our users, found out that they hated it, and then&lt;br /&gt;reverted back to browserlus, without ever having to actually piss off&lt;br /&gt;our users? This is essentially what is going to happen with NLD10. If&lt;br /&gt;Novell's customers like the NLD changes, then GNOME can adopt them. If&lt;br /&gt;Novell's customers don't like the changes, then GNOME can stand off to&lt;br /&gt;the side and say "yeah well, we never liked that UI anyway. Not at all&lt;br /&gt;like how we would have done it." :-)&lt;br /&gt;&lt;br /&gt;But some people will still say "But couldn't you have discussed it with&lt;br /&gt;the community before doing it?" No, we couldn't. If we had, it would&lt;br /&gt;either not have happened, or it would have sucked. It's inevitable. It's&lt;br /&gt;not a problem with the GNOME community, it's a problem with communities&lt;br /&gt;in general. The wisdom of crowds[4] only works in situations where there&lt;br /&gt;are clear right and wrong answers. If you try to apply it to a design&lt;br /&gt;problem, where there are many entirely different right answers, then you&lt;br /&gt;end up with a wrong answer. Always[5].&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So to sum up: design by committee is bad, endless debates that result in&lt;br /&gt;code not actually being written are bad, design by very small teams is&lt;br /&gt;good, software with a unified vision is good, trying out cool new UI&lt;br /&gt;ideas is good, free code at least doesn't suck, and of course, for&lt;br /&gt;Novell, not shipping NLD10 is bad. I don't think there's anything we&lt;br /&gt;could have done to get more of the good without also getting more of the&lt;br /&gt;bad.&lt;br /&gt;&lt;br /&gt;-- Dan&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-113936480514090476?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/113936480514090476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=113936480514090476' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113936480514090476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113936480514090476'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2006/02/blog-what-i-read-talking-about-design.html' title='Blog What I read: talking about design'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-113912766803423012</id><published>2006-02-05T00:14:00.000-08:00</published><updated>2006-02-05T00:21:08.046-08:00</updated><title type='text'>Chinese input as if I were in Windows</title><content type='html'>Finally, get one solution.  I like the English UI as I feel it is weird if the interface in Linux is displayed as chinese.&lt;br /&gt;&lt;br /&gt;The following contains the text for reference only.  The original page is:&lt;br /&gt;http://www.mrbass.org/linux/ubuntu/scim/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ubuntu CJK Chinese Japanese Korean Input Guide&lt;br /&gt;&lt;br /&gt;Ubuntu 5.04 Hoary SCIM Chinese, Japanese, and Korean Input Guide&lt;br /&gt;You can install CJK input via ubuntuaddon or do it via internet.&lt;br /&gt;Ubuntu already comes with Chinese, Japanese and Korean fonts preinstalled.&lt;br /&gt;&lt;br /&gt;To install via internet (universe repositories must be enabled)&lt;br /&gt;sudo apt-get install uim anthy scim-gtk2-immodule scim-uim scim-chinese scim-hangul scim-tables-zh scim-tables-ja scim-tables-ko&lt;br /&gt;&lt;br /&gt;Add SCIM to startup for X11&lt;br /&gt;sudo touch /etc/X11/Xsession.d/74custom-scim_startup&lt;br /&gt;sudo chmod 646 /etc/X11/Xsession.d/74custom-scim_startup&lt;br /&gt;echo 'export XMODIFIERS="@im=SCIM"' &gt;&gt; /etc/X11/Xsession.d/74custom-scim_startup&lt;br /&gt;echo 'export GTK_IM_MODULE="scim"' &gt;&gt; /etc/X11/Xsession.d/74custom-scim_startup&lt;br /&gt;echo 'export XIM_PROGRAM="scim -d"' &gt;&gt; /etc/X11/Xsession.d/74custom-scim_startup&lt;br /&gt;echo 'export QT_IM_MODULE="scim"' &gt;&gt; /etc/X11/Xsession.d/74custom-scim_startup&lt;br /&gt;sudo chmod 644 /etc/X11/Xsession.d/74custom-scim_startup&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Press CTRL-SPACE to bring up SCIM input methods.&lt;br /&gt;&lt;br /&gt;Next two steps are OPTIONAL (scim KDE startup and input KDE apps while in GNOME)&lt;br /&gt;&lt;br /&gt;If you installed kubuntu-desktop (KDE) and plan on logging into KDE session do this in terminal&lt;br /&gt;sudo touch ~/.kde/Autostart/startscim&lt;br /&gt;echo '"#!/bin/sh"' &gt;&gt; ~/.kde/Autostart/startscim&lt;br /&gt;echo "scim -d" &gt;&gt; ~/.kde/Autostart/startscim&lt;br /&gt;sudo chmod 745 ~/.kde/Autostart/startscim&lt;br /&gt;&lt;br /&gt;While using GNOME:&lt;br /&gt;you can input into GNOME, GTK apps but NOT KDE apps.&lt;br /&gt;&lt;br /&gt;While using KDE you can input GNOME, GTK and KDE apps.&lt;br /&gt;So if you want to also input in KDE apps while using GNOME do the following:&lt;br /&gt;sudo touch ~/.gnome2/session-manual&lt;br /&gt;echo "[Default]" &gt;&gt; ~/.gnome2/session-manual&lt;br /&gt;echo "num_clients=1" &gt;&gt; ~/.gnome2/session-manual&lt;br /&gt;echo "0,RestartStyleHint=3" &gt;&gt; ~/.gnome2/session-manual&lt;br /&gt;echo "0,Priority=50" &gt;&gt; ~/.gnome2/session-manual&lt;br /&gt;echo "0,RestartCommand=scim -d" &gt;&gt; ~/.gnome2/session-manual&lt;br /&gt;echo "0,Program=scim" &gt;&gt; ~/.gnome2/session-manual&lt;br /&gt;&lt;br /&gt;This will create two SCIM keyboards under GNOME though but allows you to input in KDE apps while in GNOME.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.mrbass.org/linux/ubuntu/scim/scim-input-japanese.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px;" src="http://www.mrbass.org/linux/ubuntu/scim/scim-input-japanese.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-113912766803423012?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/113912766803423012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=113912766803423012' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113912766803423012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113912766803423012'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2006/02/chinese-input-as-if-i-were-in-windows.html' title='Chinese input as if I were in Windows'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-113887498544610653</id><published>2006-02-02T02:06:00.000-08:00</published><updated>2006-02-02T02:10:32.143-08:00</updated><title type='text'>Oh. yes, nearly forget this blog...</title><content type='html'>These days need to prepare the documentation for hmm project.  We are going to abort this project because it is really quite time consuming and the requirement always changes without control.&lt;br /&gt;&lt;br /&gt;The following is a brief architecture overview of hmm project:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/7223/485/1600/arch.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/7223/485/400/arch.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-113887498544610653?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/113887498544610653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=113887498544610653' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113887498544610653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113887498544610653'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2006/02/oh-yes-nearly-forget-this-blog.html' title='Oh. yes, nearly forget this blog...'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-113809152644752909</id><published>2006-01-24T00:31:00.000-08:00</published><updated>2006-01-24T00:32:06.460-08:00</updated><title type='text'>Year 2038</title><content type='html'>just browse the web and found that the year 2038 problem...&lt;br /&gt;&lt;br /&gt;from http://www.dewtronics.com/msdn_090798a.html&lt;br /&gt;&lt;br /&gt;How Many GUIDs, Again?&lt;br /&gt;&lt;br /&gt;Henrik Vallgren and Peter Schaeffer took the time to let Dr. GUI know that he's dead wrong about there being enough GUIDs for each atom in the universe to have its very own. The number of particles (not atoms) in the universe is somewhere around 1079 or so—even Dr. GUI isn't sure of exactly how many.&lt;br /&gt;&lt;br /&gt;A GUID comprises 128 bits, so the number of GUIDs is 2128. That's only about 1038, or 100,000,000,000,000,000,000,000,000,000,000,000,000. And that's a factor of 1041 short of 1079. So a GUID could hold a unique number for only 1 out of every 1041 particles in the universe. Thankfully, each particle doesn't need its own interface ID and/or class ID. (IElectron? IQuark?) So there are still plenty of GUIDs for our uses.&lt;br /&gt;&lt;br /&gt;Henrik's line of reasoning was especially interesting:&lt;br /&gt;&lt;br /&gt;"Consider the sun's mass 2*10^30 kg. Assume that the sun consists of only hydrogen. One gram of hydrogen is 6*10^23 (Avogadro's number) atoms, one kilogram 6*10^26 atoms.&lt;br /&gt;&lt;br /&gt;"The number of atoms in the suns is thus approximately 10^54 (~2^179).&lt;br /&gt;&lt;br /&gt;"The hydrogen assumption is wrong so that number should be divided by the true average atomic weight, of which I have no idea. [But it's certainly less than 100—perhaps less than 10—so the assumption of a pure hydrogen sun doesn't affect these numbers much. Like a factor of 100 isn't much.—Dr. GUI]&lt;br /&gt;&lt;br /&gt;Then consider billions and billions of stars in the Milky Way. And quite a few galaxies on top of that. You'll get the picture ... "&lt;br /&gt;&lt;br /&gt;Indeed, the good doctor does get the picture. Dr. GUI begs your forgiveness 1041 times.&lt;br /&gt;&lt;br /&gt;Note that if the GUIDs were somewhat bigger, they WOULD be big enough to give each particle its very own GUID, or PID (for particle ID). It would take about 264 bits—33 bytes for each GUID.&lt;br /&gt;&lt;br /&gt;Thanks again to Henrik and Peter for taking the time to write.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-113809152644752909?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/113809152644752909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=113809152644752909' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113809152644752909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113809152644752909'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2006/01/year-2038.html' title='Year 2038'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-113755402695436763</id><published>2006-01-17T19:12:00.000-08:00</published><updated>2006-01-17T19:13:46.970-08:00</updated><title type='text'>Saw a comment that quite describe what programmer feels...</title><content type='html'>Source: http://www.javalobby.org/java/forums/m91982704.html&lt;br /&gt;&lt;br /&gt;"Re: Tools for screening new Java developers&lt;br /&gt;Yes, but this opens up the bigger question, doesn't it? Where technology stands in the post-bubble world.&lt;br /&gt;&lt;br /&gt;I've seen people without degrees who could write incredible algorithms and could quote Knuth by heart. Then I've also known Computer Science degreed graduates who barely grasped programming at all. Add to this the technical schools and the "Information Technology" degree that has made it's appearance in colleges of late, and you have a horrible bloated landscape for skilled professionals.&lt;br /&gt;&lt;br /&gt;Continuing this problem is the fact that those who enter technology are not exposed to peer-reviewed journals and a strict respect for the scientific process and experimentation to further the science, but to press release junk and market driven but vaporous software ideas that have little benefit to computer science. Software developers are more likely to Google for ideas than to search EBSCO Host. Is there really computer science anymore? Or is it all just a hacking flaming sub-culture?&lt;br /&gt;&lt;br /&gt;I think this breeds the signifigant lack of creativity and innovation we've seen in technology in the last few years, as we have a glut of people who got in to technology because of the money and not because of the love of the science. I certainly believe that a big driver of open source development is the absolute failure of companies to manage technology professionals and their creativity. When talented people give away their work for free just to see it breathe, you know an industry is in trouble.&lt;br /&gt;&lt;br /&gt;Add to this the fact that many IT programming jobs are, let's face it, simply to wrap a database in Java and be done with it, and you have a situation where even people who love the science may quickly become bored with it and move on to something more fulfilling.&lt;br /&gt;&lt;br /&gt;Knowing this, seeing a sea of mediocre developers come through your door can't be that surprising. The question is: does McDonaldizing the interview process further this mediocrity or protect you against it? I suggest it furthers it.&lt;br /&gt;&lt;br /&gt;This is a company issue that one person can't solve, but in evaluating the hiring process you have to be careful the image you generate towards the candidates as well. Those companies that treat developers as professionals tend to create an atmosphere that automatically repels the least among the group.&lt;br /&gt;&lt;br /&gt;How many mediocre candidates do you think Google or Microsoft or Apple or Accenture gets? In contrast, how many do you think your general staff-augmenting quick-in/quick-out consulting firm gets? This can also manifest itself on a local city-wide scale, not just a national scale.&lt;br /&gt;&lt;br /&gt;In other words, you should be compiling a list of questions to submit to your CIO, not to your candidates :-)"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-113755402695436763?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/113755402695436763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=113755402695436763' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113755402695436763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113755402695436763'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2006/01/saw-comment-that-quite-describe-what.html' title='Saw a comment that quite describe what programmer feels...'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-113653859843096478</id><published>2006-01-06T01:07:00.000-08:00</published><updated>2006-01-06T01:09:58.440-08:00</updated><title type='text'>Leap second in kernel message...</title><content type='html'>"Clock: inserting leap second 23:59:60 UTC" was found in linux servers I managed.&lt;br /&gt;&lt;br /&gt;Remember we have one more second at 2006 Jan 01 00:00:00 GMT&lt;br /&gt;&lt;br /&gt;http://www.maths.tcd.ie/~dwmalone/time/leap2005.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-113653859843096478?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/113653859843096478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=113653859843096478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113653859843096478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113653859843096478'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2006/01/leap-second-in-kernel-message.html' title='Leap second in kernel message...'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-113539977084854974</id><published>2005-12-23T20:46:00.000-08:00</published><updated>2005-12-23T20:49:30.866-08:00</updated><title type='text'>Things to be changed in SC</title><content type='html'>1. to use subversion to replace CVS&lt;br /&gt;2. deploy CAS&lt;br /&gt;3. use Maven&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-113539977084854974?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/113539977084854974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=113539977084854974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113539977084854974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113539977084854974'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/12/things-to-be-changed-in-sc.html' title='Things to be changed in SC'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-113521784855223547</id><published>2005-12-21T18:14:00.000-08:00</published><updated>2005-12-21T18:17:28.570-08:00</updated><title type='text'>Antivirus solutions on the mail server side...</title><content type='html'>Just blog the stuff I got about antivirus solutions on the mail server side:&lt;br /&gt;1. clamav + clamav-milter (sendmail)&lt;br /&gt;2. AMaViS - A Mail Virus Scanner (AMaViS - A Mail Virus Scanner)&lt;br /&gt;3. MailScanner (http://www.mailscanner.info/) should be the easiest way to install&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-113521784855223547?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/113521784855223547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=113521784855223547' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113521784855223547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113521784855223547'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/12/antivirus-solutions-on-mail-server.html' title='Antivirus solutions on the mail server side...'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-113361681478863414</id><published>2005-12-03T05:31:00.000-08:00</published><updated>2005-12-03T05:33:34.800-08:00</updated><title type='text'>ajax framework</title><content type='html'>http://rialto.application-servers.com/demoRialto.jsp&lt;br /&gt;&lt;br /&gt;well, using Apache license and probably, can be employed to be used in our application.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-113361681478863414?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/113361681478863414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=113361681478863414' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113361681478863414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113361681478863414'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/12/ajax-framework.html' title='ajax framework'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-113210600846495265</id><published>2005-11-15T17:52:00.000-08:00</published><updated>2005-11-15T17:53:28.476-08:00</updated><title type='text'>MD5 cracker source released</title><content type='html'>http://www.stachliu.com.nyud.net:8090/collisions.html&lt;br /&gt;&lt;br /&gt;Think if you are going to use MD5.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-113210600846495265?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/113210600846495265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=113210600846495265' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113210600846495265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113210600846495265'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/11/md5-cracker-source-released.html' title='MD5 cracker source released'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-113055784243329926</id><published>2005-10-28T20:11:00.000-07:00</published><updated>2005-10-28T20:50:42.443-07:00</updated><title type='text'>A day of bug fixing...</title><content type='html'>It might be good to tell more about my job...&lt;br /&gt;&lt;br /&gt;Now I received a list of bugs:&lt;br /&gt;[hmm site]/forum/main/list/cn.page&lt;br /&gt;&lt;br /&gt;PRC forum&lt;br /&gt;• Bug: IE browser title text should be in S.Chinese. [Yes it is, I tried to fix it but time is not allowed.]&lt;br /&gt;• Bug: Click 免費入會 will go to HK site.&lt;br /&gt;• Bug: Click 忘記密碼 will go to HK site.&lt;br /&gt;• Bug: Click 登出 will go to HK site.&lt;br /&gt;• Bug: Click 更改個人資料 will go to HK site.&lt;br /&gt;• Bug: Click HMM logo will go to HK site.&lt;br /&gt;• Bug: Add ALT for images on left panel&lt;br /&gt;• Bug: The “編輯” image is broken.&lt;br /&gt; &lt;br /&gt;Both HK and PRC&lt;br /&gt;• Bug: Search, if key in 2 words (1 word is ok) with result of several, return error&lt;br /&gt;&lt;br /&gt;After receiving it from Sam, I starts checking the issue. Well, some is known to me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-113055784243329926?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/113055784243329926/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=113055784243329926' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113055784243329926'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113055784243329926'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/10/day-of-bug-fixing.html' title='A day of bug fixing...'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-113048834099314780</id><published>2005-10-28T01:31:00.000-07:00</published><updated>2005-10-28T01:32:21.003-07:00</updated><title type='text'>DCCP protocol...</title><content type='html'>Congestion Control Protocol&lt;br /&gt;&lt;br /&gt;http://www.icir.org/kohler/dcp/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-113048834099314780?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/113048834099314780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=113048834099314780' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113048834099314780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113048834099314780'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/10/dccp-protocol.html' title='DCCP protocol...'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-113033971608946112</id><published>2005-10-26T08:13:00.000-07:00</published><updated>2005-10-26T08:15:16.100-07:00</updated><title type='text'>Allan mail server is down...</title><content type='html'>Ar. have no idea why it is down... It is the client from Corpmart... We are providing support to them...&lt;br /&gt;&lt;br /&gt;Need to explain why it is hang.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-113033971608946112?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/113033971608946112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=113033971608946112' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113033971608946112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/113033971608946112'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/10/allan-mail-server-is-down.html' title='Allan mail server is down...'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-112047431839040326</id><published>2005-07-04T03:51:00.000-07:00</published><updated>2005-07-04T03:51:58.400-07:00</updated><title type='text'>Using Spamassassin and procmail to filter spam</title><content type='html'>&lt;a href="http://wiki.arslinux.com/Spamassassin_and_procmail"&gt;Using Spamassassin and procmail to filter spam&lt;/a&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;br /&gt;See also: Mail Server FAQ&lt;br /&gt;Table of contents&lt;br /&gt;1 Procmail and Spamassassin&lt;br /&gt;&lt;br /&gt;1.1 SpamAssassin: Automagic teaching&lt;br /&gt;&lt;br /&gt;1.1.1 One spamassassin autolearning setup&lt;br /&gt;1.1.2 An Alternative Autolearning Setup&lt;br /&gt;1.1.3 Performance issues with training the bayesian filter&lt;br /&gt;[edit]&lt;br /&gt;Procmail and Spamassassin&lt;br /&gt;&lt;br /&gt;We'll use the combination of procmail (http://www.procmail.org) and Spamassassin (http://www.spamassassin.org) to filter spam from our incoming mail. Procmail allows us to feed our incoming mail through different programs, then place them in different mailboxes based on the outout of those programs.&lt;br /&gt;&lt;br /&gt;You can setup procmail and Spamassassin to be systemwide, but I prefer to do it by user - for the sake of flexibility. If you do set it up system wide (http://www.spamassassin.org/sitewide.html), the users can always customize their own rules. Refer to this IBM Developerworks article (http://www-106.ibm.com/developerworks/linux/library/l-spam/?t=gr,lnxw03=StampSpam) to get more detail on Spamassassin. Once you have installed Spamassassin and procmail, we want to setup a .procmailrc in our home directory. This will actually take the mail from Postfix, filter it through spamassassin, then deliver it to the Maildirs. For the sake of definition, procmail becomes our MDA (Mail Delivery Agent). Since procmail will be delivering to the Maildirs instead of Postfix, you need to double check this setup again.&lt;br /&gt;&lt;br /&gt;[user@mail ~]$ cat .procmailrc&lt;br /&gt;#.procmailrc - by jorge - Updated by glenn 6/8/05&lt;br /&gt;&lt;br /&gt;# Set our default shell, which may not be necessary, as it&lt;br /&gt;# uses the user's default&lt;br /&gt;SHELL=/usr/bin/bash&lt;br /&gt;&lt;br /&gt;# Set our default Maildir. You can also set the HOME variable, which&lt;br /&gt;# may be set automatically by procmail&lt;br /&gt;MAILDIR=/home/jorge/Maildir&lt;br /&gt;&lt;br /&gt;# Set our default mailbox, which is where mail that doesn't have&lt;br /&gt;# a sort rule applied goes. The trailing / is important.&lt;br /&gt;DEFAULT=/home/jorge/Maildir/&lt;br /&gt;&lt;br /&gt;# Set up logging. It's a good idea to let procmail log all its&lt;br /&gt;# actions until you're sure it's working right.&lt;br /&gt;LOGFILE=${MAILDIR}/procmail.log&lt;br /&gt;LOG="--- Logging ${LOGFILE} for ${LOGNAME}, "&lt;br /&gt;&lt;br /&gt;# Whatever recipes you'll use&lt;br /&gt;# The order of the recipes is significant&lt;br /&gt;&lt;br /&gt;# First, run everything through spamassassin. The "-P -a" tags are&lt;br /&gt;# not needed with 3.0+, as they are now the defaults.&lt;br /&gt;:0fw&lt;br /&gt;| spamassassin&lt;br /&gt;&lt;br /&gt;# Now that we've tagged spam, put it in its own folder&lt;br /&gt;&lt;br /&gt;:0:&lt;br /&gt;&lt;br /&gt;* ^X-Spam-Status: Yes&lt;br /&gt;/home/jorge/Maildir/.spam/&lt;br /&gt;&lt;br /&gt;Notice the DEFAULT directory ... that's where my mail will go, the new directory under my Maildir. That's how it shows up as new mail. If I put it in the cur directory in my Maildir, the mail would never show up as new, it would show up as already read (but we don't want that). Once you read a mail in the new directory, it moves it over to the cur directory. That's how the system keeps track of which mails are new and which ones are the 'cur'rent ones in your inbox. That's also why each subfolder has its own new,cur, and tmp directories.&lt;br /&gt;&lt;br /&gt;Procmail is smart enough to put new mail into the "new" subdirectory for whatever Maildir folder you want it to put mail in. If you are using an IMAP server like dovecot that builds indexes, you have to omit "new/" and just leave the trailing slash (as in the script), as otherwise procmail doesn't use standard Maildir filenames, and dovecot will constantly be rebuilding a corrupted index file.&lt;br /&gt;&lt;br /&gt;The big spamkiller is the 0fw | spamassassin line. Users of versions of spamassassin prior to 3.0 may want to add the e -a switch, which enables autowhitelisting (enabled by default in 3.0+). When you reply to people, after a while, they get put in the whitelist, and then they won't be judged so harshly the next time Spamassassin checks mail from them. If you're like me, you have some friends, that even with an autowhitelist, will score 20 or higher on the spamassassin score.&lt;br /&gt;&lt;br /&gt;The next line puts it in the new subdirectory of my spam directory. It will then show up as new spam in our mail reader, already filed for inspection. As you guessed it, once you read the spam, it will get moved to the cur folder. I could send it directly to the .Trash folder, but I prefer to keep it seperate, and this way you can scan it everyonce in a while and catch the nifty HTML email your friends from hotmail send you. Confused? Just use the example (http://www.spamassassin.org/dist/procmailrc.example) from the Spamassassin website. You can direct the possible spam to dev/null, but this is not recommended, if you get a false positive then you'll lose that mail, that is why we created the .spam folder.&lt;br /&gt;&lt;br /&gt;Next, we need to create a .forward file to get the email to go to procmail.&lt;br /&gt;&lt;br /&gt;[user@mail ~]$ cat .forward&lt;br /&gt;|/usr/bin/procmail&lt;br /&gt;&lt;br /&gt;Notice that all the file does is send your incoming email to procmail. Procmail then accesses your .procmailrc file, and through it, delivers your email to the Maildir/ after running spamassasin. Without the .forward file your email will be directly delivered to your /Maildir and will avoid spamassassin entirely.&lt;br /&gt;&lt;br /&gt;Spamassassin does a great job by default, but let's say you want to tailor it more. Create a .spamassassin directory in your home directory (mkdir .spamassassin). In there, create a user_prefs file using your favorite text editor. In time, the autowhitelister will put your whitelist in this directory too.&lt;br /&gt;&lt;br /&gt;[user@mail ~/.spamassassin]$ cat user_prefs&lt;br /&gt;# custom rules for spamassassin&lt;br /&gt;score RAZOR_CHECK 4.0&lt;br /&gt;score REMOVE_SUBJ 4.0&lt;br /&gt;score SUBJ_REMOVE 4.0&lt;br /&gt;&lt;br /&gt;score REPLY_REMOVE_SUBJECT 4.0&lt;br /&gt;score REMOVE_IN_QUOTES 4.0&lt;br /&gt;score HTML_WITH_BGCOLOR 4.0&lt;br /&gt;score REALLY_UNSAFE_JAVASCRIPT 4.0&lt;br /&gt;score CHARSET_FARAWAY_BODY 4.0&lt;br /&gt;score NO_MX_FOR_FROM 4.0&lt;br /&gt;&lt;br /&gt;score CTYPE_JUST_HTML 4.0&lt;br /&gt;score WEB_BUGS 4.0&lt;br /&gt;score SUBJ_ALL_CAPS 4.0&lt;br /&gt;score LINES_OF_YELLING 4.0&lt;br /&gt;score FOR_FREE 4.0&lt;br /&gt;&lt;br /&gt;From this file, we are overriding the default rules in Spamassassin with our own custom scores. We did this because I thought the default values for these rules were too low, because who gets valid email with web bugs? So we raised the scores of these rules up. Spamassassin still keeps the default score of 5 as the definition of a spam, so these rules won't declare a mail a spam by themselves, but if they're using one of these techniques, then they're probably using other ones as well they will score higher and be tagged as spam. Refer to the Spamassassin rules list (http://www.spamassassin.org/tests.html) to find the complete list of rules.&lt;br /&gt;&lt;br /&gt;Remember that these custom rules are in the user accounts, so if you don't want a certain account to use them, don't create a user_prefs for them. If they don't want any spam filtering whatsoever, then don't create a .procmailrc for them, Postfix will work just fine, because it was working before you even got to this step, right?&lt;br /&gt;[edit]&lt;br /&gt;SpamAssassin: Automagic teaching&lt;br /&gt;&lt;br /&gt;SpamAssassin works well as a spam filter, but it works much better when it uses Bayesian filtering as opposed to depending on its ruleset, simply because of the adaptable nature of Bayesian filtering. You may be familiar with mail clients such as Thunderbird that use Bayesian filtering that you have to 'teach' your email habits too. This requires marking lots of spam as such, and unmarking lots of email labeled as spam to ham. The same thing is required with SpamAssassin, to get it to have enough data to be able to use its Bayesian component. Of course, who wants to sit at the command line, telling SpamAssassin when it was right, and when it was wrong? So, we use a simple script and crontab and some client side manipulation to automate the process.&lt;br /&gt;[edit]&lt;br /&gt;One spamassassin autolearning setup&lt;br /&gt;&lt;br /&gt;In my (glenn) setup, I have spamassassin learn from my Inbox and Junk mailboxes, as I keep them nicely cleaned up and properly sorted. I don't want to deal with an overflowing Junk mailbox, but I also don't want spam cleared so quickly that I miss false positives. So, I run sa-learn every Thursday and Sunday night, and clean out spam older than 31 days at that point. I use the following learning script:&lt;br /&gt;&lt;br /&gt;glenn@vasp:~$ cat learn.sh&lt;br /&gt;#!/bin/bash&lt;br /&gt;/usr/bin/sa-learn --spam ~/Maildir/.Junk/cur&lt;br /&gt;/usr/bin/sa-learn --ham ~/Maildir/cur&lt;br /&gt;&lt;br /&gt;I omit /new as that's email I haven't had a chance to properly file in case of false positives/negatives. Then, I use the following script to clean up old spam:&lt;br /&gt;&lt;br /&gt;glenn@vasp:~$ cat cleanup-junk.sh&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;# Removes all files from ~/Maildir/.Junk/cur that are older than&lt;br /&gt;# 31 days ago&lt;br /&gt;&lt;br /&gt;find ~/Maildir/.Junk/cur -mtime +30 -exec rm -f {} \;&lt;br /&gt;&lt;br /&gt;I simply placed these in my crontab:&lt;br /&gt;&lt;br /&gt;glenn@vasp:~$ crontab -l&lt;br /&gt;# min hr dom month dow cmd&lt;br /&gt;# Teach spamassassin about spam&lt;br /&gt;* 4 * * 4,7 /home/glenn/learn.sh&lt;br /&gt;&lt;br /&gt;# Clean up spam directory&lt;br /&gt;* 5 * * 4,7 /home/glenn/cleanup-junk.sh&lt;br /&gt;&lt;br /&gt;This works nicely for me, keeping spamassassin smart and preventing me from missing important emails.&lt;br /&gt;[edit]&lt;br /&gt;An Alternative Autolearning Setup&lt;br /&gt;&lt;br /&gt;In my .procmailrc, I tell procmail to move mail marked as spam by Spamassassin to my $Maildir/.Trash/. This is important, because the way I am setting this up, anything that is sent to the Junk folder is deleted every 4 hours. For this reason, you should probably disable automatic moving of spam around by your email client. Or, setup two junk folders, junk_manual, which is stuff you've personally approved as spam, and junk_auto, which is mail moved by your mail client's junk mail filter and that you should probably check over before moving over to junk_manual for reading by SpamAssassin and removal from your system.&lt;br /&gt;&lt;br /&gt;It is important to tell SpamAssassin not only what is spam, but what is ham, or legitimate email. I am running this script in my root's crontab, so I specify which home directory to go to. I don't really see why you couldn't run this as your normal user, but since SpamAssassin is run as root when called by procmail (at least, I think it is), I figure it is best to do the same here. My learning script first tells spamassassin that any read or unread junk mail is spam. I then have it hit my inbox and a number of other oft used folders on my system to tell it what is ham. It may be wise to leave out your inbox, as you may not have a chance to move spam that gets through, leading SA to believe that spam is ham, which is, of course, a no-no. This is the same reason I do not have SA read my Trash folder, which sometimes has legit email in it (though I do keep 99% of my email, so it's not a huge concern.)&lt;br /&gt;&lt;br /&gt;[user@mail ~]$ cat ~/learn.sh&lt;br /&gt;#!/bin/bash&lt;br /&gt;/usr/bin/sa-learn --spam /home/user/Maildir/.Junk/new&lt;br /&gt;/usr/bin/sa-learn --spam /home/user/Maildir/.Junk/cur&lt;br /&gt;/usr/bin/sa-learn --ham /home/user/Maildir/new&lt;br /&gt;/usr/bin/sa-learn --ham /home/user/Maildir/cur&lt;br /&gt;rm /home/user/Maildir/.Junk/new/*&lt;br /&gt;rm /home/user/Maildir/.Junk/cur/*&lt;br /&gt;&lt;br /&gt;We then want to run that script every 4 hours, or however often you wish to have it run.&lt;br /&gt;&lt;br /&gt;[user@mail ~]$ crontab -l&lt;br /&gt;SHELL=/bin/sh&lt;br /&gt;PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin&lt;br /&gt;MAILTO=""&lt;br /&gt;# m h dom mon dow command&lt;br /&gt;0 */4 * * * /home/user/bin/learn.sh&lt;br /&gt;&lt;br /&gt;And now, SpamAssassin can learn from its mistakes as you simply 'delete' (move to the Junk folder) your spam clientside.&lt;br /&gt;[edit]&lt;br /&gt;Performance issues with training the bayesian filter&lt;br /&gt;&lt;br /&gt;I (tm) used to use a script like those above on my linode (http://www.linode.com), but for whatever reason, the sa-learn process would suck up a lot of memory and essentially bring the linode to its knees. Without having completed the learning process. So, instead of throwing whole directories at sa-learn, I give it each mail, one at a time.&lt;br /&gt;&lt;br /&gt;So now, my learnspam script looks like:&lt;br /&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;## Process high scoring spam in the .Spam folder and anything leftover in .Junk&lt;br /&gt;#set -x&lt;br /&gt;# feed to the bayesian learner&lt;br /&gt;echo "Processing Junk maildir..."&lt;br /&gt;spams=`find ~/Maildir/.Junk/cur ~/Maildir/.Junk/new/ -type f -mtime +7`&lt;br /&gt;for spam in $spams&lt;br /&gt;       do sa-learn --spam --showdots --no-sync $spam&lt;br /&gt;done&lt;br /&gt;rm -f $spams&lt;br /&gt;echo "Processing Spam maildir..."&lt;br /&gt;spams=`find ~/Maildir/.Spam/cur ~/Maildir/.Spam/new/ -type f -mtime +3`&lt;br /&gt;for spam in $spams&lt;br /&gt;       do sa-learn --spam --showdots --no-sync $spam&lt;br /&gt;done&lt;br /&gt;sleep 1&lt;br /&gt;rm -f $spams&lt;br /&gt;&lt;br /&gt;And my learnham script is:&lt;br /&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;## Process ham&lt;br /&gt;if [ $# -lt 1 ]; then&lt;br /&gt;       echo "Usage: $0 &lt;age&gt;"&lt;br /&gt;       exit 3&lt;br /&gt;fi&lt;br /&gt;#set -x&lt;br /&gt;# feed to the bayesian learner&lt;br /&gt;for allmail in `find ~/Maildir -name cur -type d -ctime -$1 | egrep -v  '(Trash|Junk|Spam)' | xargs -n 50 -idir find dir -type f -ctime -$1`&lt;br /&gt;       do for mail in $allmail&lt;br /&gt;               do echo $mail; sa-learn --ham --showdots --no-sync $mail&lt;br /&gt;       done&lt;br /&gt;done&lt;br /&gt;sleep 1&lt;br /&gt;for allmail in `find ~/Maildir -name new -type d -ctime -$1 | egrep -v  '(Trash|Junk|Spam)' | xargs -n 50 -idir find dir -type f -ctime -$1`&lt;br /&gt;       do for mail in $allmail&lt;br /&gt;               do echo $mail; sa-learn --ham --showdots --no-sync $mail&lt;br /&gt;       done&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;This may be helpful to anyone else who wants to run SA with bayesian learning on something with little memory like a linode.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-112047431839040326?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/112047431839040326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=112047431839040326' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/112047431839040326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/112047431839040326'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/07/using-spamassassin-and-procmail-to.html' title='Using Spamassassin and procmail to filter spam'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-111916968353759224</id><published>2005-06-19T01:19:00.000-07:00</published><updated>2005-06-19T01:28:03.556-07:00</updated><title type='text'>Start installing other firmware on my Linksys router...</title><content type='html'>I am starting to use "Firmware Version: v3.03.6 - HyperWRT 2.1b1" for my wireless router.&lt;br /&gt;&lt;br /&gt;now, I have telnet to it.&lt;br /&gt;&lt;br /&gt;========== dmesg output===============&lt;br /&gt;CPU revision is: 00029007&lt;br /&gt;Primary instruction cache 8kb, linesize 16 bytes (2 ways)&lt;br /&gt;Primary data cache 4kb, linesize 16 bytes (2 ways)&lt;br /&gt;Linux version 2.4.20 (root@localhost) (gcc version 3.2.3 with Broadcom modifications) #1 Fri Feb 18 18:25:54 CET 2005&lt;br /&gt;Determined physical RAM map:&lt;br /&gt; memory: 01000000 @ 00000000 (usable)&lt;br /&gt;On node 0 totalpages: 4096&lt;br /&gt;zone(0): 4096 pages.&lt;br /&gt;zone(1): 0 pages.&lt;br /&gt;zone(2): 0 pages.&lt;br /&gt;Kernel command line: root=/dev/mtdblock2 noinitrd console=ttyS0,115200&lt;br /&gt;CPU: BCM4712 rev 1 at 200 MHz&lt;br /&gt;Calibrating delay loop... 199.47 BogoMIPS&lt;br /&gt;Memory: 14444k/16384k available (1333k kernel code, 1940k reserved, 108k data, 64k init, 0k highmem)&lt;br /&gt;Dentry cache hash table entries: 2048 (order: 2, 16384 bytes)&lt;br /&gt;Inode cache hash table entries: 1024 (order: 1, 8192 bytes)&lt;br /&gt;Mount-cache hash table entries: 512 (order: 0, 4096 bytes)&lt;br /&gt;Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)&lt;br /&gt;Page-cache hash table entries: 4096 (order: 2, 16384 bytes)&lt;br /&gt;Checking for 'wait' instruction...  unavailable.&lt;br /&gt;POSIX conformance testing by UNIFIX&lt;br /&gt;PCI: Disabled&lt;br /&gt;PCI: Fixing up bus 0&lt;br /&gt;Linux NET4.0 for Linux 2.4&lt;br /&gt;Based upon Swansea University Computer Society NET3.039&lt;br /&gt;Initializing RT netlink socket&lt;br /&gt;Starting kswapd&lt;br /&gt;devfs: v1.12c (20020818) Richard Gooch (rgooch@atnf.csiro.au)&lt;br /&gt;devfs: boot_options: 0x1&lt;br /&gt;pty: 256 Unix98 ptys configured&lt;br /&gt;Serial driver version 5.05c (2001-07-08) with MANY_PORTS SHARE_IRQ SERIAL_PCI enabled&lt;br /&gt;ttyS00 at 0xb8000300 (irq = 3) is a 16550A&lt;br /&gt;ttyS01 at 0xb8000400 (irq = 0) is a 16550A&lt;br /&gt;HDLC line discipline: version $Revision: 1.1.1.4 $, maxframe=4096&lt;br /&gt;N_HDLC line discipline registered.&lt;br /&gt;PPP generic driver version 2.4.2&lt;br /&gt;Physically mapped flash: Found an alias at 0x400000 for the chip at 0x0&lt;br /&gt;Physically mapped flash: Found an alias at 0x800000 for the chip at 0x0&lt;br /&gt;Physically mapped flash: Found an alias at 0xc00000 for the chip at 0x0&lt;br /&gt;Physically mapped flash: Found an alias at 0x1000000 for the chip at 0x0&lt;br /&gt;Physically mapped flash: Found an alias at 0x1400000 for the chip at 0x0&lt;br /&gt;Physically mapped flash: Found an alias at 0x1800000 for the chip at 0x0&lt;br /&gt;Physically mapped flash: Found an alias at 0x1c00000 for the chip at 0x0&lt;br /&gt;number of CFI chips: 1&lt;br /&gt;0: offset=0x0,size=0x2000,blocks=8&lt;br /&gt;1: offset=0x10000,size=0x10000,blocks=63&lt;br /&gt;Flash device: 0x400000 at 0x1c000000&lt;br /&gt;Physically mapped flash: cramfs filesystem found at block 910&lt;br /&gt;Creating 4 MTD partitions on "Physically mapped flash":&lt;br /&gt;0x00000000-0x00040000 : "pmon"&lt;br /&gt;0x00040000-0x003f0000 : "linux"&lt;br /&gt;0x000e3918-0x003f0000 : "rootfs"&lt;br /&gt;mtd: partition "rootfs" doesn't start on an erase block boundary -- force read-only&lt;br /&gt;0x003f0000-0x00400000 : "nvram"&lt;br /&gt;sflash: found no supported devices&lt;br /&gt;NET4: Linux TCP/IP 1.0 for NET4.0&lt;br /&gt;IP Protocols: ICMP, UDP, TCP, IGMP&lt;br /&gt;IP: routing cache hash table of 512 buckets, 4Kbytes&lt;br /&gt;TCP: Hash tables configured (established 1024 bind 2048)&lt;br /&gt;Linux IP multicast router 0.06 plus PIM-SM&lt;br /&gt;ip_conntrack version 2.1 (128 buckets, 1024 max) - 344 bytes per conntrack&lt;br /&gt;ip_conntrack_pptp version 1.9 loaded&lt;br /&gt;ip_nat_pptp version 1.5 loaded&lt;br /&gt;ip_tables: (C) 2000-2002 Netfilter core team&lt;br /&gt;ipt_time loading&lt;br /&gt;NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.&lt;br /&gt;NET4: Ethernet Bridge 008 for NET4.0&lt;br /&gt;802.1Q VLAN Support v1.7 Ben Greear &lt;greearb@candelatech.com&gt;&lt;br /&gt;All bugs added by David S. Miller &lt;davem@redhat.com&gt;&lt;br /&gt;VFS: Mounted root (cramfs filesystem) readonly.&lt;br /&gt;Mounted devfs on /dev&lt;br /&gt;Freeing unused kernel memory: 64k freed&lt;br /&gt;5325E   phy=0&lt;br /&gt;5325E   VLAN programming for BCM5325E-MDIO I/F switch&lt;br /&gt;1:(0x00)         value=0x8000&lt;br /&gt;2:(0x00)         value=0x8000&lt;br /&gt;1:(0x13)         value=0x0000&lt;br /&gt;2:(0x13)         value=0x0002&lt;br /&gt;1:(0x00)         value=0x8000&lt;br /&gt;2:(0x00)         value=0x8000&lt;br /&gt;1:(0x13)         value=0x0002&lt;br /&gt;2:(0x13)         value=0x0006&lt;br /&gt;1:(0x00)         value=0x8000&lt;br /&gt;2:(0x00)         value=0x8000&lt;br /&gt;1:(0x13)         value=0x0006&lt;br /&gt;2:(0x13)         value=0x000e&lt;br /&gt;1:(0x00)         value=0x8000&lt;br /&gt;2:(0x00)         value=0x8000&lt;br /&gt;1:(0x13)         value=0x000e&lt;br /&gt;2:(0x13)         value=0x001e&lt;br /&gt;1:(0x00)         value=0x8000&lt;br /&gt;2:(0x00)         value=0x0000&lt;br /&gt;eth0: Broadcom BCM47xx 10/100 Mbps Ethernet Controller 3.60.13.0&lt;br /&gt;eth1: Broadcom BCM4320 802.11 Wireless Controller 3.60.13.0&lt;br /&gt;flag=[get_flash] offset=[0] string=[&lt;null&gt;]&lt;br /&gt;Intel 28F320C3 2Mx16 BotB&lt;br /&gt;Set flash_type=Intel 28F320C3 2Mx16 BotB&lt;br /&gt;exit&lt;br /&gt;Algorithmics/MIPS FPU Emulator v1.5&lt;br /&gt;vlan0: add 01:00:5e:00:00:01 mcast address to master interface&lt;br /&gt;vlan0: dev_set_promiscuity(master, 1)&lt;br /&gt;device eth0 entered promiscuous mode&lt;br /&gt;device vlan0 entered promiscuous mode&lt;br /&gt;device eth1 entered promiscuous mode&lt;br /&gt;br0: port 2(eth1) entering learning state&lt;br /&gt;br0: port 1(vlan0) entering learning state&lt;br /&gt;br0: port 2(eth1) entering forwarding state&lt;br /&gt;br0: topology change detected, propagating&lt;br /&gt;br0: port 1(vlan0) entering forwarding state&lt;br /&gt;br0: topology change detected, propagating&lt;br /&gt;flag=[get_eou_key_index] offset=[0] string=[&lt;null&gt;]&lt;br /&gt;eou_key_init()&lt;br /&gt;location = [1]&lt;br /&gt;Available eou key index is 1&lt;br /&gt;exit&lt;br /&gt;vlan1: Setting MAC address to xxxxxxxxxxxxxxx.&lt;br /&gt;nvram_commit(): init&lt;br /&gt;nvram_commit(): end&lt;br /&gt;nvram_commit(): init&lt;br /&gt;nvram_commit(): end&lt;br /&gt;br0: port 2(eth1) entering disabled state&lt;br /&gt;br0: port 1(vlan0) entering disabled state&lt;br /&gt;vlan0: del 01:00:5e:00:00:01 mcast address from master interface&lt;br /&gt;vlan0: del 01:00:5e:00:00:01 mcast address from vlan interface&lt;br /&gt;br0: port 1(vlan0) entering disabled state&lt;br /&gt;device vlan0 left promiscuous mode&lt;br /&gt;br0: port 2(eth1) entering disabled state&lt;br /&gt;device eth1 left promiscuous mode&lt;br /&gt;vlan0: dev_set_promiscuity(master, -1)&lt;br /&gt;device eth0 left promiscuous mode&lt;br /&gt;vlan0: add 01:00:5e:00:00:01 mcast address to master interface&lt;br /&gt;vlan0: dev_set_promiscuity(master, 1)&lt;br /&gt;device eth0 entered promiscuous mode&lt;br /&gt;device vlan0 entered promiscuous mode&lt;br /&gt;device eth1 entered promiscuous mode&lt;br /&gt;br0: port 2(eth1) entering learning state&lt;br /&gt;br0: port 1(vlan0) entering learning state&lt;br /&gt;br0: port 2(eth1) entering forwarding state&lt;br /&gt;br0: topology change detected, propagating&lt;br /&gt;br0: port 1(vlan0) entering forwarding state&lt;br /&gt;br0: topology change detected, propagating&lt;br /&gt;flag=[get_eou_key_index] offset=[0] string=[&lt;null&gt;]&lt;br /&gt;eou_key_init()&lt;br /&gt;location = [1]&lt;br /&gt;Available eou key index is 1&lt;br /&gt;exit&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-111916968353759224?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/111916968353759224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=111916968353759224' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111916968353759224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111916968353759224'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/06/start-installing-other-firmware-on-my.html' title='Start installing other firmware on my Linksys router...'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-111864456163181302</id><published>2005-06-12T23:36:00.000-07:00</published><updated>2005-06-12T23:36:01.640-07:00</updated><title type='text'>Flavio’s TechnoTalk � Blog Archive � Performance analysis on Linux</title><content type='html'>&lt;a href="http://geminis.dyndns.org/wordpress/index.php/2005/06/05/performance-analysis-on-linux/"&gt;Flavio’s Performance analysis on Linux&lt;/a&gt;: "Performance analysis on Linux"&lt;br /&gt;&lt;br /&gt;This article gives an overview of performance analysis on Linux.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-111864456163181302?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/111864456163181302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=111864456163181302' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111864456163181302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111864456163181302'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/06/flavios-technotalk-blog-archive.html' title='Flavio’s TechnoTalk � Blog Archive � Performance analysis on Linux'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-111856280246598065</id><published>2005-06-12T00:47:00.000-07:00</published><updated>2005-06-12T00:53:22.470-07:00</updated><title type='text'>Wireless USB adapter...</title><content type='html'>After doing some research, the following USB adapter seems to be working in Linux:&lt;br /&gt;&lt;br /&gt;Buffalo      WLI-U2-KG54-AI   HK$ 270&lt;br /&gt;Surecom   EP-9001-G               HK$ 210 [RT2500 chipset]&lt;br /&gt;Dlink         DWL-G122               HK$ 220 [RT2500 chipset]&lt;br /&gt;Zyxel        G220                         HK$ 239&lt;br /&gt;&lt;br /&gt;EP-9001-GP $328&lt;br /&gt;DWL-G132  $349&lt;br /&gt;&lt;br /&gt;I have forgotten the formula for converting mW to dBm, learnt from wireless communication course.&lt;br /&gt;I found a website which provides quite good tools to do the calculation:&lt;br /&gt;&lt;a href="http://flakey.info/wirelesstools/#freespaceloss"&gt;Wireless Javascript Toolkit&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Need to compare the output power and antenna gain...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-111856280246598065?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/111856280246598065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=111856280246598065' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111856280246598065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111856280246598065'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/06/wireless-usb-adapter.html' title='Wireless USB adapter...'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-111815726857197178</id><published>2005-06-07T08:14:00.000-07:00</published><updated>2005-06-07T08:14:28.576-07:00</updated><title type='text'>slower</title><content type='html'>常用的数据库连接写法和下载地址(转载)&lt;br /&gt;&lt;br /&gt;   在调试Spring+hibernate中,后来发现好像Sqlserver的驱动有问题,又听说jtds是非常好的替代品,就在网上照jtds的下载,发现了这篇文章,转载如下(http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=123&amp;threadID=20222&amp;messageID=116981):&lt;br /&gt;&lt;br /&gt;1. MySQL(http://www.mysql.com)mm.mysql-2.0.2-bin.jar&lt;br /&gt;Class.forName( "org.gjt.mm.mysql.Driver" );&lt;br /&gt;cn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", sUsr, sPwd );&lt;br /&gt;&lt;br /&gt;2. PostgreSQL(http://www.de.postgresql.org)pgjdbc2.jar&lt;br /&gt;Class.forName( "org.postgresql.Driver" );&lt;br /&gt;cn = DriverManager.getConnection( "jdbc:postgresql://MyDbComputerNameOrIP/myDatabaseName", sUsr, sPwd );&lt;br /&gt;&lt;br /&gt;3. Oracle(http://www.oracle.com/ip/deploy/database/oracle9i/)classes12.zip&lt;br /&gt;Class.forName( "oracle.jdbc.driver.OracleDriver" );&lt;br /&gt;cn = DriverManager.getConnection( "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );&lt;br /&gt;&lt;br /&gt;4. Sybase(http://jtds.sourceforge.net)jconn2.jar&lt;br /&gt;Class.forName( "com.sybase.jdbc2.jdbc.SybDriver" );&lt;br /&gt;cn = DriverManager.getConnection( "jdbc:sybase:Tds:MyDbComputerNameOrIP:2638", sUsr, sPwd );&lt;br /&gt;//(Default-Username/Password: "dba"/"sql")&lt;br /&gt;&lt;br /&gt;5. Microsoft SQLServer(http://jtds.sourceforge.net)&lt;br /&gt;Class.forName( "net.sourceforge.jtds.jdbc.Driver" );&lt;br /&gt;cn = DriverManager.getConnection( "jdbc:jtds:sqlserver://MyDbComputerNameOrIP:1433/master", sUsr, sPwd );&lt;br /&gt;&lt;br /&gt;6. Microsoft SQLServer(http://www.microsoft.com)&lt;br /&gt;Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver" );&lt;br /&gt;cn = DriverManager.getConnection( "jdbc:microsoft:sqlserver://MyDbComputerNameOrIP:1433;databaseName=master", sUsr, sPwd );&lt;br /&gt;&lt;br /&gt;7. ODBC&lt;br /&gt;Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );&lt;br /&gt;Connection cn = DriverManager.getConnection( "jdbc:odbc:" + sDsn, sUsr, sPwd );&lt;br /&gt;&lt;br /&gt;8.DB2(新添加)&lt;br /&gt;Class.forName("com.ibm.db2.jdbc.net.DB2Driver");&lt;br /&gt;String url="jdbc:db2://192.9.200.108:6789/SAMPLE"&lt;br /&gt;cn = DriverManager.getConnection( url, sUsr, sPwd );&lt;br /&gt;&lt;br /&gt;9.Microsoft SQL Server series (6.5, 7.x and 2000) and Sybase 10&lt;br /&gt;&lt;br /&gt;JDBC Name: jTDS&lt;br /&gt;URL: http://jtds.sourceforge.net/&lt;br /&gt;Version: 0.5.1&lt;br /&gt;Download URL: http://sourceforge.net/project/showfiles.php?group_id=33291&lt;br /&gt;&lt;br /&gt;语法:&lt;br /&gt;Class.forName("net.sourceforge.jtds.jdbc.Driver ");&lt;br /&gt;Connection con = DriverManager.getConnection("jdbc:jtds:sqlserver://host:port/database","user","password");&lt;br /&gt;or&lt;br /&gt;Connection con = DriverManager.getConnection("jdbc:jtds:sybase://host:port/database","user","password");&lt;br /&gt;&lt;br /&gt;10.Postgresql&lt;br /&gt;JDBC Name: PostgreSQL JDBC&lt;br /&gt;URL: http://jdbc.postgresql.org/&lt;br /&gt;Version: 7.3.3 build 110&lt;br /&gt;Download URL: http://jdbc.postgresql.org/download.html&lt;br /&gt;语法:&lt;br /&gt;Class.forName("org.postgresql.Driver");&lt;br /&gt;Connection con=DriverManager.getConnection("jdbc:postgresql://host:port/database","user","password");&lt;br /&gt;&lt;br /&gt;11.IBM AS400主机在用的JDBC语法&lt;br /&gt;有装V4R4以上版本的Client Access Express&lt;br /&gt;可以在C:\Program Files\IBM\Client Access\jt400\lib&lt;br /&gt;找到 driver 档案 jt400.zip，并更改扩展名成为 jt400.jar&lt;br /&gt;语法:&lt;br /&gt;java.sql.DriverManager.registerDriver (new com.ibm.as400.access.AS400JDBCDriver ());&lt;br /&gt;Class.forName("com.ibm.as400.access.AS400JDBCConnection");&lt;br /&gt;con = DriverManager.getConnection("jdbc:as400://IP","user","password");&lt;br /&gt;&lt;br /&gt;12.informix&lt;br /&gt;Class.forName("com.informix.jdbc.IfxDriver").newInstance();&lt;br /&gt;String url =&lt;br /&gt;"jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver;&lt;br /&gt;user=testuser;password=testpassword";&lt;br /&gt;Lib：jdbcdrv.zip&lt;br&gt;&lt;br&gt;Class.forName( "com.sybase.jdbc.SybDriver" )&lt;br /&gt;url="jdbc:sybase:Tds:127.0.0.1:2638/asademo";&lt;br /&gt;SybConnection connection= (SybConnection)DriverManager.getConnection(url,"dba","sql");&lt;br /&gt;&lt;br /&gt;13.SAP DB&lt;br /&gt;Class.forName ("com.sap.dbtech.jdbc.DriverSapDB");&lt;br /&gt;java.sql.Connection connection = java.sql.DriverManager.getConnection ( "jdbc:sapdb://" + host + "/" + database_name,user_name, password)&lt;br /&gt;&lt;br /&gt;14.InterBase&lt;br /&gt;String url = "jdbc:interbase://localhost/e:/testbed/database/employee.gdb";&lt;br /&gt;Class.forName("interbase.interclient.Driver");&lt;br /&gt;//Driver d = new interbase.interclient.Driver (); /* this will also work if you do not want the line above */&lt;br /&gt;Connection conn = DriverManager.getConnection( url, "sysdba", "masterkey" );&lt;br /&gt;&lt;br /&gt;15.HSqlDB&lt;br /&gt;url:     http://hsqldb.sourceforge.net/&lt;br /&gt;driver:  org.hsqldb.jdbcDriver&lt;br /&gt;连接方式有4种，分别为：&lt;br /&gt;con-str（内存）: jdbc:hsqldb.&lt;br /&gt;con-str（本地）: jdbc:hsqldb:/path/to/the/db/dir&lt;br /&gt;con-str（http）: jdbc:hsqldb:http://dbsrv&lt;br /&gt;con-str（hsql）: jdbc:hsqldb:hsql://dbsrv&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-111815726857197178?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/111815726857197178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=111815726857197178' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111815726857197178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111815726857197178'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/06/slower.html' title='slower'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-111614827259135889</id><published>2005-05-15T02:11:00.000-07:00</published><updated>2005-05-15T02:11:12.600-07:00</updated><title type='text'>XPlanner - Javascript memory leaks</title><content type='html'>&lt;a href="http://xplanner.codehaus.org/Javascript memory leaks"&gt;XPlanner - Javascript memory leaks&lt;/a&gt;: "Javascript memory leaks"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-111614827259135889?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/111614827259135889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=111614827259135889' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111614827259135889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111614827259135889'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/05/xplanner-javascript-memory-leaks.html' title='XPlanner - Javascript memory leaks'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-111522124107606186</id><published>2005-05-04T08:39:00.000-07:00</published><updated>2005-05-04T08:40:41.090-07:00</updated><title type='text'>Quality Open Source for Windows</title><content type='html'>For reasons you cannot live without Windows, you can try out some excellent open source tools.&lt;br /&gt;&lt;br /&gt;Get a look at &lt;A href="http://www.theopencd.org/"&gt;TheOpenCD.org&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-111522124107606186?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/111522124107606186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=111522124107606186' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111522124107606186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111522124107606186'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/05/quality-open-source-for-windows.html' title='Quality Open Source for Windows'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-111444355057235568</id><published>2005-04-25T08:38:00.000-07:00</published><updated>2005-04-25T08:39:10.573-07:00</updated><title type='text'>uClinux for Linux Programmers</title><content type='html'>&lt;a href="http://www.linuxjournal.com/node/7221/print"&gt; uClinux for Linux Programmers&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-111444355057235568?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/111444355057235568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=111444355057235568' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111444355057235568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111444355057235568'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/04/uclinux-for-linux-programmers.html' title='uClinux for Linux Programmers'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-111444078725575794</id><published>2005-04-25T07:52:00.000-07:00</published><updated>2005-04-25T08:42:43.576-07:00</updated><title type='text'>Java memory leak reason...</title><content type='html'>Memory leak in Java:&lt;br /&gt;The Object is reachable but it is not live. Meaning the object has reached the end of its lifecycle and now GC should be able to reclaim this object but some erroneous references prevents it to get garbage collected. Most of the time, a single lingering reference can have massive memory impact.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jasigch.princeton.edu:9000/display/UPC/uPortal2+Memory+Leak+Issues+and+Fixes.?focusedCommentId=5850"&gt;Leak&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-111444078725575794?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/111444078725575794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=111444078725575794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111444078725575794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111444078725575794'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/04/java-memory-leak-reason_25.html' title='Java memory leak reason...'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-111362255084179637</id><published>2005-04-15T20:35:00.000-07:00</published><updated>2005-04-15T20:35:50.840-07:00</updated><title type='text'>redhat.com | Taking advantage of SELinux in Red Hat Enterprise Linux</title><content type='html'>&lt;a href="http://www.redhat.com/magazine/006apr05/features/selinux/"&gt;redhat.com | Taking advantage of SELinux in Red Hat Enterprise Linux&lt;/a&gt;: "Taking advantage of SELinux&lt;br /&gt;in Red Hat Enterprise Linux.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-111362255084179637?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/111362255084179637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=111362255084179637' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111362255084179637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111362255084179637'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/04/redhatcom-taking-advantage-of-selinux.html' title='redhat.com | Taking advantage of SELinux in Red Hat Enterprise Linux'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-111285592768439182</id><published>2005-04-06T23:37:00.000-07:00</published><updated>2005-04-06T23:38:47.686-07:00</updated><title type='text'>"Should I buy ECC or non-ECC RAM?"</title><content type='html'>Q: Should I buy ECC or non-ECC RAM?&lt;br /&gt;A:&lt;br /&gt;ubiquityman wrote:&lt;br /&gt;TO ECC OR NOT TO ECC, THAT IS THE QUESTION&lt;br /&gt;&lt;br /&gt;It was published in 1998 (EE Times) that a approximately 1 bit error occurs in 256MB of ram every month. http://www.corsairdirect.com/ecc.html&lt;br /&gt;&lt;br /&gt;RAM has increased in speed significantly since then, but manufacturing processes have also improved. It's hard to say what the current error rate is but let's assume that it's about the same.&lt;br /&gt;&lt;br /&gt;So for those with 1G of memory, that's approximately 1 bit error every week.&lt;br /&gt;&lt;br /&gt;It doesn't matter if you reboot every hour, as long as you run your computer 24h/day, the rate at which a bit error will occur is approximately once a week (if you have 1G of RAM). (If you run your computer less frequently, then obviously, the rate at which bit errors occurs will also be less.)&lt;br /&gt;&lt;br /&gt;Also, the nature of memory is that although bit errors occur randomly to some extent, there is a higher probabilty that errors will reoccur at the same location, in weaker bits. We consider a memory bit as digital, but the actual silicon landscape is such that not all bits are created identical or equal. Some are "more susceptible" to soft errors.&lt;br /&gt;&lt;br /&gt;So, if you have a "weak bit" in a frequently used place, you just have bad luck. Your machine might crash unexpectidly more often than others. Any programmer can tell you that an incorrect bit is unpredictable. It could be benign, but it cause also be catastrophic in terms of data.&lt;br /&gt;&lt;br /&gt;Now, if you do reboot frequently, that reduces the probability that the bit error will cause a negative effect because the bit error lives in your system for less time. It also reduces the compounding of errors which again would have increasing potential to cause data loss.&lt;br /&gt;&lt;br /&gt;Like I've said before. If you play games and that's all you do. I probably would not pay the 12%-25% premium for ECC.&lt;br /&gt;&lt;br /&gt;However, if you leave your machine on most of the time, overclock, stress your machine in other ways, or use it for something "serious" other than gaming, I would recommend ECC memory. For approximately the cost of eating out one night, I can have the peace of mind of ECC.&lt;br /&gt;&lt;br /&gt;I put ECC in all my home machines except for my laptop and PDA. At today's prices, ECC is a bargain.&lt;br /&gt;&lt;br /&gt;The luckier you feel, the less you need ECC. In the words of Dirty Harry "Do you feel, Lucky!?"&lt;br /&gt;&lt;br /&gt;ECC PERFORMANCE&lt;br /&gt;&lt;br /&gt;I checked the Intel website and they do say that there is some performance loss with ECC enabled.&lt;br /&gt;&lt;br /&gt;I've also read elsewhere that unless a memory error is detected, there is no performance loss with modern chipsets. (I would suggest that the intel information is the correct one.)&lt;br /&gt;&lt;br /&gt;However, I personally have ran benchmarks on my PII-450 w/ i440BX chipset to test the performance of ECC memory.&lt;br /&gt;&lt;br /&gt;My benchmarks show that my machine benchmarks faster in memory with ECC enabled.&lt;br /&gt;&lt;br /&gt;This person here had similar results:&lt;br /&gt;&lt;br /&gt;http://www.personal.psu.edu/faculty/l/a/lae2/fx83dinteg/fx83dinteg.htm&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-111285592768439182?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/111285592768439182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=111285592768439182' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111285592768439182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111285592768439182'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/04/should-i-buy-ecc-or-non-ecc-ram.html' title='&quot;Should I buy ECC or non-ECC RAM?&quot;'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-111279970844413985</id><published>2005-04-06T08:01:00.000-07:00</published><updated>2005-04-06T08:01:48.443-07:00</updated><title type='text'>Ajax using XMLHttpRequest and Struts</title><content type='html'>&lt;a href="http://www.omnytex.com/articles/xhrstruts/"&gt;Ajax using XMLHttpRequest and Struts&lt;/a&gt;: "Ajax using XMLHttpRequest and Struts"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-111279970844413985?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/111279970844413985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=111279970844413985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111279970844413985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111279970844413985'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/04/ajax-using-xmlhttprequest-and-struts.html' title='Ajax using XMLHttpRequest and Struts'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-111137083633550565</id><published>2005-03-20T18:07:00.000-08:00</published><updated>2005-03-20T18:07:16.336-08:00</updated><title type='text'>Windows NT 2000 ME 9x and XP Registry Tweaks</title><content type='html'>Hide computer in network neighbourhood&lt;br /&gt;&lt;br /&gt;(Windows 98/Me/2000/XP)&lt;br /&gt;&lt;br /&gt;This tweak will hide your computer from network neighbourhood.&lt;br /&gt;&lt;br /&gt;         Open your registry and find the key:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanServer\Parameters&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;Create a new DWORD value, name it to Hidden and set the value to 1. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-111137083633550565?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/111137083633550565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=111137083633550565' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111137083633550565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111137083633550565'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/03/windows-nt-2000-me-9x-and-xp-registry.html' title='Windows NT 2000 ME 9x and XP Registry Tweaks'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-111095694022862972</id><published>2005-03-15T23:07:00.000-08:00</published><updated>2005-03-15T23:26:35.410-08:00</updated><title type='text'>Turning off AutoComplete for TextBoxes in IE and FireFox</title><content type='html'>Turning off AutoComplete for TextBoxes in IE and FireFox&lt;br /&gt;&lt;br /&gt;This is one a lot of people know, but it's worth covering again because it's easily forgotten as it's a small detail. Since we do eFinance sites, we often don't want folks' UserNames collected and stored in AutoComplete, especially when the site is browsed on a public machine.&lt;br /&gt;&lt;br /&gt;    &amp;lt;form id="formSignOn" autocomplete="off" method="post" runat="server"&amp;gt;&lt;br /&gt;&lt;br /&gt;Note that autocomplete="false" doesn't work. However, autocomplete="off" works in both IE and FireFox.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-111095694022862972?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/111095694022862972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=111095694022862972' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111095694022862972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111095694022862972'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/03/turning-off-autocomplete-for-textboxes.html' title='Turning off AutoComplete for TextBoxes in IE and FireFox'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-111069953688819035</id><published>2005-03-12T23:38:00.000-08:00</published><updated>2005-03-12T23:38:56.886-08:00</updated><title type='text'>Oracle Database 10g release 1 (10.1.0.2) installation on Fedora core 3 (FC3)</title><content type='html'>&lt;a href="http://staff.in2.hr/denis/oracle/10g1install_fedora3_en.html"&gt;Oracle Database 10g release 1 (10.1.0.2) installation on Fedora core 3 (FC3)&lt;/a&gt;: "Oracle Database 10g release 1 (10.1.0.2) installation on Fedora core 3 (FC3)"&lt;br /&gt;&lt;br /&gt;Today, I installed Oracle 10.1.0.3 on my Linux box running Fedora core 3.  Well, I am trying to do some prototype on it.  As working on prototype is free.  I can try it out.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-111069953688819035?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/111069953688819035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=111069953688819035' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111069953688819035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111069953688819035'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/03/oracle-database-10g-release-1-10102.html' title='Oracle Database 10g release 1 (10.1.0.2) installation on Fedora core 3 (FC3)'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-111033614946291598</id><published>2005-03-08T18:42:00.000-08:00</published><updated>2005-03-08T18:42:29.463-08:00</updated><title type='text'>摩托學園討論區 :: 觀看文章 - java sdk 5.0 字型安裝</title><content type='html'>&lt;a href="http://moto.debian.org.tw/viewtopic.php?t=4914"&gt;摩托學園討論區 :: 觀看文章 - java sdk 5.0 字型安裝&lt;/a&gt;: "java sdk 5.0 字型安裝"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-111033614946291598?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/111033614946291598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=111033614946291598' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111033614946291598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111033614946291598'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/03/java-sdk-50.html' title='摩托學園討論區 :: 觀看文章 - java sdk 5.0 字型安裝'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-111033490654304984</id><published>2005-03-08T18:20:00.000-08:00</published><updated>2005-03-08T18:21:46.550-08:00</updated><title type='text'>Java simplified chinese information...</title><content type='html'>source: http://www.cn-java.com/target/news.php?news_id=941&lt;br /&gt;&lt;br /&gt;JSP/Servlet 中的汉字编码问题  阅读次数30086&lt;br /&gt;&lt;br /&gt;出处 (IBM DW)大砍刀     &lt;br /&gt;&lt;br /&gt;. 问题的起源&lt;br /&gt;&lt;br /&gt;每个国家（或区域）都规定了计算机信息交换用的字符编码集，如美国的扩展 ASCII码, 中国的 GB2312-80，日本的 JIS 等，作为该国家/区域内信息处理的基础，有着统一编码的重要作用。字符编码集按长度分为 SBCS（单字节字符集），DBCS（双字节字符集）两大类。早期的软件（尤其是操作系统），为了解决本地字符信息的计算机处理，出现了各种本地化版本（L10N），为了区分，引进了 LANG, Codepage 等概念。但是由于各个本地字符集代码范围重叠，相互间信息交换困难；软件各个本地化版本独立维护成本较高。因此有必要将本地化工作中的共性抽取出来，作一致处理，将特别的本地化处理内容降低到最少。这也就是所谓的国际化（I18N）。各种语言信息被进一步规范为 Locale 信息。处理的底层字符集变成了几乎包含了所有字形的 Unicode。&lt;br /&gt;&lt;br /&gt;现在大部分具有国际化特征的软件核心字符处理都是以 Unicode 为基础的，在软件运行时根据当时的 Locale/Lang/Codepage 设置确定相应的本地字符编码设置，并依此处理本地字符。在处理过程中需要实现 Unicode 和本地字符集的相互转换，甚或以 Unicode 为中间的两个不同本地字符集的相互转换。这种方式在网络环境下被进一步延伸，任何网络两端的字符信息也需要根据字符集的设置转换成可接受的内容。&lt;br /&gt;&lt;br /&gt;Java 语言内部是用 Unicode 表示字符的，遵守 Unicode V2.0。Java 程序无论是从/往文件系统以字符流读/写文件，还是往 URL 连接写 HTML 信息，或从 URL 连接读取参数值，都会有字符编码的转换。这样做虽然增加了编程的复杂度，容易引起混淆，但却是符合国际化的思想的。&lt;br /&gt;&lt;br /&gt;从理论上来说，这些根据字符集设置而进行的字符转换不应该产生太多问题。而事实是由于应用程序的实际运行环境不同，Unicode 和各个本地字符集的补充、完善，以及系统或应用程序实现的不规范，转码时出现的问题时时困扰着程序员和用户。&lt;br /&gt;&lt;br /&gt;2. GB2312-80，GBK，GB18030-2000 汉字字符集及 Encoding&lt;br /&gt;&lt;br /&gt;其实解决 JAVA 程序中的汉字编码问题的方法往往很简单，但理解其背后的原因，定位问题，还需要了解现有的汉字编码和编码转换。&lt;br /&gt;&lt;br /&gt;GB2312-80 是在国内计算机汉字信息技术发展初始阶段制定的，其中包含了大部分常用的一、二级汉字，和 9 区的符号。该字符集是几乎所有的中文系统和国际化的软件都支持的中文字符集，这也是最基本的中文字符集。其编码范围是高位0xa1－0xfe，低位也是 0xa1-0xfe；汉字从 0xb0a1 开始，结束于 0xf7fe；&lt;br /&gt;&lt;br /&gt;GBK 是 GB2312-80 的扩展，是向上兼容的。它包含了 20902 个汉字，其编码范围是 0x8140-0xfefe，剔除高位 0x80 的字位。其所有字符都可以一对一映射到 Unicode 2.0，也就是说 JAVA 实际上提供了 GBK 字符集的支持。这是现阶段 Windows 和其它一些中文操作系统的缺省字符集，但并不是所有的国际化软件都支持该字符集，感觉是他们并不完全知道 GBK 是怎么回事。值得注意的是它不是国家标准，而只是规范。随着 GB18030-2000国标的发布，它将在不久的将来完成它的历史使命。&lt;br /&gt;&lt;br /&gt;GB18030-2000(GBK2K) 在 GBK 的基础上进一步扩展了汉字，增加了藏、蒙等少数民族的字形。GBK2K 从根本上解决了字位不够，字形不足的问题。它有几个特点，&lt;br /&gt;&lt;br /&gt;它并没有确定所有的字形，只是规定了编码范围，留待以后扩充。&lt;br /&gt;编码是变长的，其二字节部分与 GBK 兼容；四字节部分是扩充的字形、字位，其编码范围是首字节 0x81-0xfe、二字节0x30-0x39、三字节 0x81-0xfe、四字节0x30-0x39。&lt;br /&gt;它的推广是分阶段的，首先要求实现的是能够完全映射到 Unicode 3.0 标准的所有字形。&lt;br /&gt;它是国家标准，是强制性的。&lt;br /&gt;现在还没有任何一个操作系统或软件实现了 GBK2K 的支持，这是现阶段和将来汉化的工作内容。&lt;br /&gt;Unicode 的介绍......就免了吧。&lt;br /&gt;&lt;br /&gt;JAVA 支持的encoding中与中文编程相关的有：(有几个在JDK文档中未列出) ASCII 7-bit, 同 ascii7&lt;br /&gt;ISO8859-1 8-bit, 同 8859_1,ISO-8859-1,ISO_8859-1,latin1...&lt;br /&gt;GB2312-80 同gb2312,gb2312-1980,EUC_CN,euccn,1381,Cp1381, 1383, Cp1383, ISO2022CN,ISO2022CN_GB......&lt;br /&gt;GBK (注意大小写),同MS936&lt;br /&gt;UTF8 UTF-8&lt;br /&gt;GB18030 (现在只有IBM JDK1.3.?有支持), 同Cp1392,1392&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;JAVA 语言采用Unicode处理字符. 但从另一个角度来说，在java程序中也可以采用非Unicode的转码，重要的是保证程序入口和出口的汉字信息不失真。如完全采用ISO-8859-1 来处理汉字也能达到正确的结果。网络上流行的许多解决方法，都属于这种类型。为了不致引起混淆，本文不对这种方法作讨论。&lt;br /&gt;&lt;br /&gt;3. 中文转码时'?'、乱码的由来&lt;br /&gt;&lt;br /&gt;两个方向转换都有可能得到错误的结果：&lt;br /&gt;&lt;br /&gt;Unicode--&gt;Byte, 如果目标代码集不存在对应的代码，则得到的结果是0x3f.&lt;br /&gt;如：&lt;br /&gt;"\u00d6\u00ec\u00e9\u0046\u00bb\u00f9".getBytes("GBK") 的结果是 "?ìéF?ù", Hex 值是3fa8aca8a6463fa8b4.&lt;br /&gt;仔细看一下上面的结果，你会发现\u00ec被转换为0xa8ac, \u00e9被转换为\xa8a6... 它的实际有效位变长了！这是因为GB2312符号区中的一些符号被映射到一些公共的符号编码，由于这些符号出现在ISO-8859-1或其它一些SBCS字符集中，故它们在 Unicode中编码比较靠前，有一些其有效位只有8位，和汉字的编码重叠(其实这种映射只是编码的映射，在显示时仔细不是一样的。Unicode 中的符号是单字节宽，汉字中的符号是双字节宽) . 在Unicode\u00a0--\u00ff 之间这样的符号有20个。了解这个特征非常重要！由此就不难理解为什么JAVA编程中，汉字编码的错误结果中常常会出现一些乱码(其实是符号字符), 而不全是'?'字符, 就比如上面的例子。&lt;br /&gt;&lt;br /&gt;Byte--&gt;Unicode, 如果Byte标识的字符在源代码集不存在，则得到的结果是0xfffd.&lt;br /&gt;如：&lt;br /&gt;Byte ba[] = {(byte)0x81,(byte)0x40,(byte)0xb0,(byte)0xa1}; new String(ba,"gb2312");&lt;br /&gt;结果是"?啊", hex 值是"\ufffd\u554a". 0x8140 是GBK字符，按GB2312转换表没有对应的值，取\ufffd. (请注意：在显示该uniCode时，因为没有对应的本地字符，所以也适用上一种情况，显示为一个"?".)&lt;br /&gt;&lt;br /&gt;实际编程中，JSP/Servlet 程序得到错误的汉字信息，往往是这两个过程的叠加，有时甚至是两个过程叠加后反复作用的结果.&lt;br /&gt;&lt;br /&gt;4. JSP/Servlet 汉字编码问题及在 WAS 中的解决办法&lt;br /&gt;&lt;br /&gt;4.1 常见的 encoding 问题的现象&lt;br /&gt;网上常出现的 JSP/Servlet encoding 问题一般都表现在 browser 或应用程序端，如:&lt;br /&gt;浏览器中看到的 Jsp/Servlet 页面中的汉字怎么都成了 ’?’ ?&lt;br /&gt;浏览器中看到的 Servlet 页面中的汉字怎么都成了乱码？&lt;br /&gt;JAVA 应用程序界面中的汉字怎么都成了方块？&lt;br /&gt;Jsp/Servlet 页面无法显示 GBK 汉字。&lt;br /&gt;JSP 页面中内嵌在&lt;%...%&gt;,&lt;%=...%&gt;等Tag包含的 JAVA code 中的中文成了乱码，但页面的其它汉字是对的。&lt;br /&gt;Jsp/Servlet 不能接收 form 提交的汉字。&lt;br /&gt;JSP/Servlet 数据库读写无法获得正确的内容。&lt;br /&gt;隐藏在这些问题后面的是各种错误的字符转换和处理（除第3个外，是因为 Java font 设置错误引起的）。解决类似的字符 encoding 问题，需要了解 Jsp/Servlet 的运行过程，检查可能出现问题的各个点。&lt;br /&gt;&lt;br /&gt;4.2 JSP/Servlet web 编程时的 encoding 问题&lt;br /&gt;运行于Java 应用服务器的 JSP/Servlet 为 Browser 提供 HTML 内容，其过程如下图所示：&lt;br /&gt;其中有字符编码转换的地方有:&lt;br /&gt;&lt;br /&gt;JSP 编译。Java 应用服务器将根据 JVM 的 file.encoding 值读取 JSP 源文件，编译生成 JAVA 源文件，再根据 file.encoding 值写回文件系统。如果当前系统语言支持 GBK，那么这时候不会出现 encoding 问题。如果是英文的系统，如 LANG 是 en_US 的 Linux, AIX 或 Solaris，则要将 JVM 的 file.encoding 值置成 GBK 。系统语言如果是 GB2312，则根据需要，确定要不要设置 file.encoding，将 file.encoding 设为 GBK 可以解决潜在的 GBK 字符乱码问题&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Java 需要被编译为 .class 才能在 JVM 中执行，这个过程存在与a.同样的 file.encoding 问题。从这里开始 servlet 和 jsp 的运行就类似了，只不过 Servlet 的编译不是自动进行的。对于JSP程序, 对产生的JAVA 中间文件的编译是自动进行的(在程序中直接调用sun.tools.javac.Main类). 因此如果在这一步出现问题的话, 也要检查encoding和OS的语言环境，或者将内嵌在JSP JAVA Code 中的静态汉字转为 Unicode, 要么静态文本输出不要放在 JAVA code 中。 对于Servlet, javac 编译时手工指定-encoding 参数就可以了。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Servlet 需要将 HTML 页面内容转换为 browser 可接受的 encoding 内容发送出去。依赖于各 JAVA App Server 的实现方式，有的将查询 Browser 的 accept-charset 和 accept-language 参数或以其它猜的方式确定 encoding 值，有的则不管。因此采用固定encoding 也许是最好的解决方法。对于中文网页，可在 JSP 或 Servlet 中设置 contentType="text/html; charset=GB2312"；如果页面中有GBK字符，则设置为contentType="text/html; charset=GBK"，由于IE 和 Netscape对GBK的支持程度不一样，作这种设置时需要测试一下。&lt;br /&gt;因为16位 JAVA char在网络传送时高8位会被丢弃，也为了确保Servlet页面中的汉字（包括内嵌的和servlet运行过程中得到的）是期望的内码，可以用 PrintWriter out=res.getWriter() 取代 ServletOutputStream out=res.getOutputStream(). PrinterWriter 将根据contentType中指定的charset作转换 (ContentType需在此之前指定！); 也可以用OutputStreamWriter封装 ServletOutputStream 类并用write(String)输出汉字字符串。&lt;br /&gt;对于 JSP，JAVA Application Server 应当能够确保在这个阶段将嵌入的汉字正确传送出去。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;这是解释 URL 字符 encoding 问题。如果通过 get/post 方式从 browser 返回的参数值中包含汉字信息， servlet 将无法得到正确的值。SUN的 J2SDK 中，HttpUtils.parseName 在解析参数时根本没有考虑 browser 的语言设置，而是将得到的值按 byte 方式解析。这是网上讨论得最多的 encoding 问题。因为这是设计缺陷，只能以 bin 方式重新解析得到的字符串；或者以 hack HttpUtils 类的方式解决。参考文章 2 均有介绍，不过最好将其中的中文 encoding GB2312、 CP1381 都改为 GBK，否则遇到 GBK 汉字时，还是会有问题。&lt;br /&gt;Servlet API 2.3 提供一个新的函数 HttpServeletRequest.setCharacterEncoding 用于在调用 request.getParameter(“param_name”) 前指定应用程序希望的 encoding，这将有助于彻底解决这个问题。&lt;br /&gt;4.3 IBM Websphere Application Server 中的解决方法&lt;br /&gt;&lt;br /&gt;WebSphere Application Server 对标准的 Servlet API 2.x 作了扩展，提供较好的多语言支持。运行在中文的操作系统中，可以不作任何设置就可以很好地处理汉字。下面的说明只是对WAS是运行在英文的系统中，或者需要有GBK支持时有效。&lt;br /&gt;&lt;br /&gt;上述c,d情况，WAS 都要查询 Browser 的语言设置，在缺省状况下， zh, zh-cn 等均被映射为 JAVA encoding CP1381（注意： CP1381 只是等同于 GB2312 的一个 codepage，没有 GBK 支持）。这样做我想是因为无法确认 Browser 运行的操作系统是支持GB2312, 还是 GBK，所以取其小。但是实际的应用系统还是要求页面中出现 GBK 汉字，最著名的是朱总理名字中的“镕"(rong2 ，0xe946，\u9555)，所以有时还是需要将 Encoding/Charset 指定为 GBK。当然 WAS 中变更缺省的 encoding 没有上面说的那么麻烦，针对 a,b，参考文章 5，在 Application Server 的命令行参数中指定 -Dfile.encoding=GBK 即可； 针对 d，在 Application Server 的命令行参数中指定-Ddefault.client.encoding=GBK。如果指定了-Ddefault.client.encoding= GBK，那么c情况下可以不再指定charset。&lt;br /&gt;&lt;br /&gt;上面列出的问题中还有一个关于Tag&lt;%...%&gt;,&lt;%=...%&gt;中的 JAVA 代码里包含的静态文本未能正确显示的问题，在WAS中的解决方法是除了设置正确的file.encoding, 还需要以相同方法设置-Duser.language=zh -Duser.region=CN。这与JAVA locale的设置有关。&lt;br /&gt;&lt;br /&gt;4.4 数据库读写时的 encoding 问题&lt;br /&gt;&lt;br /&gt;JSP/Servlet 编程中经常出现 encoding 问题的另一个地方是读写数据库中的数据。&lt;br /&gt;&lt;br /&gt;流行的关系数据库系统都支持数据库 encoding，也就是说在创建数据库时可以指定它自己的字符集设置，数据库的数据以指定的编码形式存储。当应用程序访问数据时，在入口和出口处都会有 encoding 转换。 对于中文数据，数据库字符编码的设置应当保证数据的完整性. GB2312，GBK，UTF-8 等都是可选的数据库 encoding；也可以选择 ISO8859-1 (8-bit)，那么应用程序在写数据之前须将 16Bit 的一个汉字或 Unicode 拆分成两个 8-bit 的字符，读数据之后则需将两个字节合并起来，同时还要判别其中的 SBCS 字符。没有充分利用数据库 encoding 的作用，反而增加了编程的复杂度，ISO8859-1不是推荐的数据库 encoding。JSP/Servlet编程时，可以先用数据库管理系统提供的管理功能检查其中的中文数据是否正确。&lt;br /&gt;&lt;br /&gt;然后应当注意的是读出来的数据的 encoding，JAVA 程序中一般得到的是 Unicode。写数据时则相反。&lt;br /&gt;&lt;br /&gt;4.5 定位问题时常用的技巧&lt;br /&gt;&lt;br /&gt;定位中文encoding问题通常采用最笨的也是最有效的办法——在你认为有嫌疑的程序处理后打印字符串的内码。通过打印字符串的内码，你可以发现什么时候中文字符被转换成Unicode，什么时候Unicode被转回中文内码，什么时候一个中文字成了两个 Unicode 字符，什么时候中文字符串被转成了一串问号，什么时候中文字符串的高位被截掉了……&lt;br /&gt;&lt;br /&gt;取用合适的样本字符串也有助于区分问题的类型。如：”aa啊aa丂aa” 等中英相间、GB、GBK特征字符均有的字符串。一般来说，英文字符无论怎么转换或处理，都不会失真（如果遇到了，可以尝试着增加连续的英文字母长度）。&lt;br /&gt;&lt;br /&gt;5. 结束语&lt;br /&gt;&lt;br /&gt;其实 JSP/Servlet 的中文encoding 并没有想像的那么复杂，虽然定位和解决问题没有定规，各种运行环境也各不尽然，但后面的原理是一样的。了解字符集的知识是解决字符问题的基础。不过，随着中文字符集的变化，不仅仅是 java 编程，中文信息处理中的问题还是会存在一段时间的。&lt;br /&gt;&lt;br /&gt;6. 参考文章&lt;br /&gt;&lt;br /&gt;Character Problem Review&lt;br /&gt;Java 编程技术中汉字问题的分析及解决&lt;br /&gt;GB18030&lt;br /&gt;Setting language encoding in web applications: Websphere applications Server&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-111033490654304984?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/111033490654304984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=111033490654304984' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111033490654304984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111033490654304984'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/03/java-simplified-chinese-information.html' title='Java simplified chinese information...'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-111016006142500631</id><published>2005-03-06T17:47:00.000-08:00</published><updated>2005-03-06T17:47:41.426-08:00</updated><title type='text'>Zones, Message Queues and preliminary setup</title><content type='html'>&lt;a href="http://blogs.sun.com/roller/page/fintanr/20050130#zones_message_queues_and_preliminary"&gt;fintanr's weblog&lt;/a&gt;: "Zones, Message Queues and preliminary setup on a benchmark "&lt;br /&gt;&lt;br /&gt;This page describes Solaris Zone and Sonic MQ.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-111016006142500631?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/111016006142500631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=111016006142500631' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111016006142500631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111016006142500631'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/03/zones-message-queues-and-preliminary.html' title='Zones, Message Queues and preliminary setup'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-111015999942394731</id><published>2005-03-06T17:46:00.000-08:00</published><updated>2005-03-06T17:46:39.423-08:00</updated><title type='text'>Get in the Zone</title><content type='html'>&lt;a href="http://www.blastwave.org/docs/Solaris-10-b51/DMC-0002/dmc-0002.html"&gt;Get in the Zone&lt;/a&gt;: "Get in the Zone with Solaris 10"&lt;br /&gt;&lt;br /&gt;I think it is something like User Mode Linux, which allows you to boot multiple Linux (Solaris for Zone) in a single machine.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-111015999942394731?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/111015999942394731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=111015999942394731' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111015999942394731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/111015999942394731'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/03/get-in-zone.html' title='Get in the Zone'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-110955437382852033</id><published>2005-02-27T17:32:00.000-08:00</published><updated>2005-02-27T17:57:24.376-08:00</updated><title type='text'>Internet Access via Bluetooth on Linux</title><content type='html'>About a month ago, I went to Sham Siu Po and found that there was a Bluetooth adaptor which cost $1xx.  So, what I came up was:&lt;br /&gt;can I use it to build a wireless network?&lt;br /&gt;&lt;br /&gt;Most people use 802.11[abg], but it seems you require to buy an adaptor for each computer in order to have wireless access, and one router for the network too. So, the total cost is much higher than using bluetooth way.&lt;br /&gt;&lt;br /&gt;Bluetooth seems to be one common connectivity for home appliances.  Imagine you can connect to a TV set and control it remotely while you are working your word processing software. :)&lt;br /&gt;&lt;br /&gt;P.S.&lt;br /&gt;The drawbacks are:&lt;br /&gt;- low link speed (only 721kbps for USB 1.1 Bluetooth 1.1)&lt;br /&gt;- might be less than 10 Bluetooth devices&lt;br /&gt;- [is it high transmitting power at the Antenna?]&lt;br /&gt;&lt;br /&gt;This link inspires me to write this blog. :)&lt;br /&gt;http://www.osnews.com/story.php?news_id=9834&lt;br /&gt;&lt;br /&gt;for windows&lt;br /&gt;http://www.whizoo.com/bt_setup/&lt;br /&gt;&lt;a href="http://www.metacon.ca/bcs/view.php?page=bluetooth"&gt;Palm Quick Answers -- Internet Access via Bluetooth on Linux&lt;/a&gt;: "Internet Access via Bluetooth on Linux"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-110955437382852033?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/110955437382852033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=110955437382852033' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110955437382852033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110955437382852033'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/02/internet-access-via-bluetooth-on-linux.html' title='Internet Access via Bluetooth on Linux'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-110915329714593511</id><published>2005-02-23T02:08:00.000-08:00</published><updated>2005-02-23T02:08:17.146-08:00</updated><title type='text'>Tomcat 5 Chinese Encoding problem...</title><content type='html'>&lt;a href="http://www.javaworld.com.tw/jute/post/view?bid=9&amp;amp;id=44042&amp;amp;sty=3&amp;amp;age=0&amp;amp;tpg=1&amp;amp;ppg=1"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;實際運用 Tomcat 5.0.19，我們了解在不修改 Tomcat 原始碼的狀況下，使用者透過 Form submit 的資料將一律以 ISO8859-1 處理，程式設計師必須自行將字串將轉換為 Big5(繁體中文) or GB2312/GBK(簡體中文)，我們在應用程式中，對所有的 request.getParameter("xx"); 作了 toBig5String() 的處理，理論上，所有的中文問題應該不會出現才對，結果，還是發現某些狀況下，中文還是變成亂碼！&lt;br /&gt;&lt;br /&gt;經過分析整理，我們發現問題出在 QueryString 的解析，以前在 Tomcat 4.x 時代，無論 SUBMIT 時採用 GET or POST，Tomcat server 對 parameters 的處理都採用相同的編碼，但在 Tomcat 5.x 版，不知何故，卻將 QueryString 的解析獨立出來，目前確認，Form 的 Method 採用 GET 及直接將參數寫在 URL 上的中文，上傳到 Tomcat 時，無論如何轉碼，都會變成亂碼，那怕你事先作過 URLEncode 也一樣。&lt;br /&gt;&lt;br /&gt;網站上，有人針對這個問題，建議將所有中文改採用 base64 編碼，到了 server 上，程式將自行土 base64 decode 回來，確保中文不會發生問題。這樣作法當然可以解決這個問題，但是所有網頁變成限定要採用 POST，且程式設計師要隨時分清楚，那個參數是採用 GET 上傳，那個參數是採用 POST 上傳，然後再針對不同的方式採用不同的解析，這樣的程式一點兒移植性都沒有，更別提跨平台、跨國際語言了。&lt;br /&gt;&lt;br /&gt;研究 Tomcat 的文件及原始碼，我們找到了問題所在及解決的方法，只有按著以下的作法，才能使 Form submit 的資料完全按著 ISO8859-1 的編碼，當然，若是全照著 Tomcat 的文件說明去作，肯定還是不行，你還是得加上這個參數到 server.xml 中才行。&lt;br /&gt;&lt;br /&gt;解決方案&lt;br /&gt;&lt;br /&gt;請先研究 $TOMCAT_HOME/webapps/tomcat-docs/config/http.html 這個說明檔，擷錄重點如下：&lt;br /&gt;URIEncoding：This specifies the character encoding used to decode the URI bytes, after %xx decoding the URL. If not specified, ISO-8859-1 will be used.&lt;br /&gt;&lt;br /&gt;useBodyEncodingForURI：This specifies if the encoding specified in contentType should be used for URI query parameters, instead of using the URIEncoding. This setting is present for compatibility with Tomcat 4.1.x, where the encoding specified in the contentType, or explicitely set using Request.setCharacterEncoding method was also used for the parameters from the URL. The default value is false.&lt;br /&gt;&lt;br /&gt;上述二個 Tomcat 參數，是設定在 server.xml 中的 http &lt;Connector /&gt; 區塊，要解決 QueryString 中文變成亂碼的問題，你必須至少設定這二個參數其中之一。&lt;br /&gt;URIEncoding 請設定為 URIEncoding="ISO-8859-1" 指定為 "ISO-8859-1" 編碼，讓 QueryString 的字元編碼與 post body 相同。&lt;br /&gt;useBodyEncodingForURI 這是用來相容 Tomcat 4.x 版的，設定的值是 "true" or "false"，意思是指 "要不要讓 QueryString 與 POST BODY 採用相同的字元編碼 ?"，若是設成 true，那也可達到 "ISO-8859-1" 編碼的需求。&lt;br /&gt;建議，採用 URIEncoding 的設定，畢竟 useBodyEncodingForURI 的作法是為了相容 Tomcat 4.X。不過若照原文的說明，理論上這二個參數都不設，Tomcat 也該採用 "ISO-8859-1" 的編碼，那為什麼還是會有問題呢 ? 我們由 Tomcat Source Code 來看就清楚了。&lt;br /&gt;&lt;br /&gt;// 這一段碼是 Tomcat 用來解 QueryString 的程式，&lt;br /&gt;// 在 org.apache.tomcat.util.http.Parameters 這個 class 裡。&lt;br /&gt;private String urlDecode(ByteChunk bc, String enc)&lt;br /&gt;  throws IOException {&lt;br /&gt;  if( urlDec==null ) {&lt;br /&gt;     urlDec=new UDecoder(); &lt;br /&gt;  }&lt;br /&gt;  urlDec.convert(bc);&lt;br /&gt;  String result = null;&lt;br /&gt;  if (enc != null) {&lt;br /&gt;    bc.setEncoding(enc);&lt;br /&gt;    result = bc.toString();&lt;br /&gt;  } &lt;br /&gt;  else {&lt;br /&gt;    CharChunk cc = tmpNameC;&lt;br /&gt;    cc.allocate(bc.getLength(), -1);&lt;br /&gt;    // Default encoding: fast conversion&lt;br /&gt;    byte[] bbuf = bc.getBuffer();&lt;br /&gt;    char[] cbuf = cc.getBuffer();&lt;br /&gt;    int start = bc.getStart();&lt;br /&gt;    for (int i = 0; i &lt; bc.getLength(); i++) {&lt;br /&gt;      cbuf[i] = (char) (bbuf[i + start] &amp; 0xff);&lt;br /&gt;    }&lt;br /&gt;    cc.setChars(cbuf, 0, bc.getLength());&lt;br /&gt;    result = cc.toString();&lt;br /&gt;    cc.recycle();&lt;br /&gt;  }&lt;br /&gt;  return result;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;請特別注意紅色區塊，當 Tomcat 發現 QueryString 並沒有設定 encode 時，並非像文件中所說預設採用 ISO-8859-1 的編碼，而是用一段 fast conversion 來處理，才會造成中文問題，所以，還是必須在 Server.xml 中，加上 URLEncoding 的參數設定才行哦。&lt;br /&gt;&lt;br /&gt;Connector 的設定範例：&lt;br /&gt;&lt;br /&gt;&lt;Connector&lt;br /&gt;debug="0"&lt;br /&gt;acceptCount="100"&lt;br /&gt;connectionTimeout="20000"&lt;br /&gt;disableUploadTimeout="true"&lt;br /&gt;port="80"&lt;br /&gt;redirectPort="8443"&lt;br /&gt;enableLookups="false"&lt;br /&gt;minSpareThreads="25"&lt;br /&gt;maxSpareThreads="75"&lt;br /&gt;maxThreads="150"&lt;br /&gt;maxPostSize="0"&lt;br /&gt;URIEncoding="ISO-8859-1"&lt;br /&gt;&gt;&lt;br /&gt;&lt;/Connector&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/10321167-110915329714593511?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/110915329714593511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=110915329714593511' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110915329714593511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110915329714593511'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/02/tomcat-5-chinese-encoding-problem.html' title='Tomcat 5 Chinese Encoding problem...'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-110897309136698415</id><published>2005-02-21T00:04:00.000-08:00</published><updated>2005-02-21T00:04:51.366-08:00</updated><title type='text'>Solaris Ethernet Drivers for ADMtek &amp; Macronix based chips</title><content type='html'>&lt;a href="http://sol-enet.sourceforge.net/"&gt;Solaris Ethernet Drivers - Main&lt;/a&gt;: "Solaris Ethernet Drivers"&lt;br /&gt;&lt;br /&gt;Found the Solaris 10 x86 is not detecting my NIC. So, this URL might be helpful.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-110897309136698415?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/110897309136698415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=110897309136698415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110897309136698415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110897309136698415'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/02/solaris-ethernet-drivers-for-admtek.html' title='Solaris Ethernet Drivers for ADMtek &amp; Macronix based chips'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-110865277216384897</id><published>2005-02-17T07:06:00.000-08:00</published><updated>2005-02-17T07:06:12.163-08:00</updated><title type='text'>SCO Group is delisted from NASDAQ!</title><content type='html'>"You have the day!" I would say to SCO.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://lwn.net/"&gt;LWN: Welcome to LWN.net&lt;/a&gt;: "SCO Group to be delisted&lt;br /&gt;[Commerce] Posted Feb 17, 2005 14:19 UTC (Thu) by corbet&lt;br /&gt;&lt;br /&gt;The SCO Group has put out a press release informing the world that it is being kicked out of the NASDAQ market for failure to comply with the reporting requirements. SCO is appealing the decision. 'The Company has been unable to file its Form 10-K for the fiscal year ended October 31, 2004 because it continues to examine certain matters related to the issuance of shares of the Company's common stock pursuant to its equity compensation plans. The Company is working to resolve these matters as soon as possible and expects to file its Form 10-K upon completion of its analysis.'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-110865277216384897?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/110865277216384897/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=110865277216384897' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110865277216384897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110865277216384897'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/02/sco-group-is-delisted-from-nasdaq.html' title='SCO Group is delisted from NASDAQ!'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-110852876537789511</id><published>2005-02-15T20:39:00.000-08:00</published><updated>2005-02-15T20:39:25.376-08:00</updated><title type='text'>Java Forums - Can I serialize Message objects?</title><content type='html'>&lt;a href="http://forum.java.sun.com/thread.jspa?threadID=187312&amp;amp;messageID=874188"&gt;Java Forums - Can I serialize Message objects?&lt;/a&gt;: "Re: Can I serialize Message objects?&lt;br /&gt;Author: agnesjuhasz 		Apr 8, 2002 2:30 AM (reply 4 of 4) 	&lt;br /&gt;Hi Avanish,&lt;br /&gt;&lt;br /&gt;I could resolve the serialization by this way&lt;br /&gt;&lt;br /&gt;// on the client side&lt;br /&gt;MimeMessage mimemessage = new MimeMessage((javax.mail.Session)null);&lt;br /&gt;// do what you need&lt;br /&gt;...&lt;br /&gt;// put the content of mimemessage into encoded String what is Serializable&lt;br /&gt;ByteArrayOutputStream baos = new ByteArrayOutputStream();&lt;br /&gt;message.writeTo(baos);&lt;br /&gt;byte[] bytearray = baos.toByteArray();&lt;br /&gt;Base64Encoder encoder = new Base64Encoder();&lt;br /&gt;String base64encodedmessage = encoder.encode(bytearray);&lt;br /&gt;&lt;br /&gt;// On the server side&lt;br /&gt;// decode the received string&lt;br /&gt;Base64Decoder decoder = new Base64Decoder();&lt;br /&gt;byte[] bytearray = decoder.decodeBuffer(base64encodedmessage );&lt;br /&gt;ByteArrayInputStream bais = new ByteArrayInputStream(bytearray);&lt;br /&gt;&lt;br /&gt;mailprops.setProperty('mail.from',sender);&lt;br /&gt;Session session = Session.getInstance(mailprops,null);&lt;br /&gt;session.setDebug(debug);&lt;br /&gt;&lt;br /&gt;MimeMessage mimemessage = new MimeMessage(session,bais);&lt;br /&gt;&lt;br /&gt;Hope this helps.&lt;br /&gt;Agnes"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-110852876537789511?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/110852876537789511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=110852876537789511' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110852876537789511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110852876537789511'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/02/java-forums-can-i-serialize-message.html' title='Java Forums - Can I serialize Message objects?'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-110782977932970916</id><published>2005-02-07T18:27:00.000-08:00</published><updated>2005-02-07T18:29:39.330-08:00</updated><title type='text'>Inserting some text to TextArea in Internet Explorer...</title><content type='html'>// input is the TextArea object&lt;br /&gt;input.focus();&lt;br /&gt;var oSel=document.selection;&lt;br /&gt;if (oSel &amp;&amp; oSel.createRange){&lt;br /&gt;  oSel.createRange().duplicate().text = insText;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;for Gecko base:&lt;br /&gt;  var len = input.selectionEnd;&lt;br /&gt;  input.value = input.value.substr( 0, len ) + insText + input.value.substr(len);&lt;br /&gt;  input.setSelectionRange(len+insText.length,len+insText.length);&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-110782977932970916?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/110782977932970916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=110782977932970916' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110782977932970916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110782977932970916'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/02/inserting-some-text-to-textarea-in.html' title='Inserting some text to TextArea in Internet Explorer...'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-110762561314977639</id><published>2005-02-05T09:42:00.000-08:00</published><updated>2005-02-05T09:46:53.150-08:00</updated><title type='text'>howto use "update-alternatives"...</title><content type='html'>update-alternatives --verbose --install /usr/bin/java java /usr/local/jdk/bin/java 500 --slave /usr/share/man/man1/java.1 java.1 /usr/local/jdk/man/man1/java.1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;this: add java &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-110762561314977639?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/110762561314977639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=110762561314977639' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110762561314977639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110762561314977639'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/02/howto-use-update-alternatives.html' title='howto use &quot;update-alternatives&quot;...'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-110759309256936614</id><published>2005-02-05T00:44:00.000-08:00</published><updated>2005-02-05T00:44:52.570-08:00</updated><title type='text'>Spam Laws</title><content type='html'>Here is some information about the Spam laws in the world.  So far, Hong Kong has no such regulations.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.spamlaws.com/"&gt;Spam Laws&lt;/a&gt;: "Spam Laws"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-110759309256936614?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/110759309256936614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=110759309256936614' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110759309256936614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110759309256936614'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/02/spam-laws.html' title='Spam Laws'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-110757522303609842</id><published>2005-02-04T19:47:00.000-08:00</published><updated>2005-02-04T19:47:03.036-08:00</updated><title type='text'>Java Forums - Why no font.properties.zh_HK?</title><content type='html'>Here is a follow up about the HK font stuff in jdk 1.4&lt;br /&gt;&lt;a href="http://forum.java.sun.com/thread.jspa?tstart=30&amp;amp;forumID=16&amp;amp;threadID=540488#%2038;trange=15"&gt;Java Forums - Why no font.properties.zh_HK?&lt;/a&gt;: "Java Forums - Why no font.properties.zh_HK?"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-110757522303609842?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/110757522303609842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=110757522303609842' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110757522303609842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110757522303609842'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/02/java-forums-why-no-fontpropertieszhhk.html' title='Java Forums - Why no font.properties.zh_HK?'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-110757504225774873</id><published>2005-02-04T19:44:00.000-08:00</published><updated>2005-02-04T19:44:02.256-08:00</updated><title type='text'>Java Forums - 1999 or 2001 version of HKSCS</title><content type='html'>I am finding some information on the conversion of Hong Kong Character set in Java.  I tried to import a csv file with String in Big5 encoding.  I found that some of the character cannot be &lt;br /&gt;converted.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forum.java.sun.com/thread.jspa?threadID=545451&amp;amp;messageID=2654855"&gt;Java Forums - 1999 or 2001 version of HKSCS&lt;/a&gt;: "Java Forums - 1999 or 2001 version of HKSCS"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-110757504225774873?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/110757504225774873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=110757504225774873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110757504225774873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110757504225774873'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/02/java-forums-1999-or-2001-version-of.html' title='Java Forums - 1999 or 2001 version of HKSCS'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-110757269683570934</id><published>2005-02-04T19:03:00.000-08:00</published><updated>2005-02-04T19:04:56.836-08:00</updated><title type='text'>Just a simple idea....</title><content type='html'>- Just think to write a classifier to classify the gender of a given chinese name.&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/10321167-110757269683570934?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/110757269683570934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=110757269683570934' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110757269683570934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110757269683570934'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/02/just-simple-idea.html' title='Just a simple idea....'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-110749770950504262</id><published>2005-02-03T22:15:00.000-08:00</published><updated>2005-02-03T22:15:09.506-08:00</updated><title type='text'>Linux: TCP Random Initial Sequence Numbers</title><content type='html'>&lt;a href="http://kerneltrap.org/node/4654"&gt;Linux: TCP Random Initial Sequence Numbers&lt;/a&gt;: "Linux: TCP Random Initial Sequence Numbers"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The following are copied from kerneltrap (the above source). THe article is quite well written and explains the implementation issue of TCP Sequence number in LINUX.&lt;br /&gt;&lt;quote&gt;&lt;br /&gt;rom: linux AT horizon.com&lt;br /&gt;Subject: Re: [PATCH] OpenBSD Networking-related randomization port&lt;br /&gt;Date: 29 Jan 2005 07:24:29 -0000&lt;br /&gt;&lt;br /&gt;&gt; It adds support for advanced networking-related randomization, in&lt;br /&gt;&gt; concrete it adds support for TCP ISNs randomization&lt;br /&gt;&lt;br /&gt;Er... did you read the existing Linux TCP ISN generation code?&lt;br /&gt;Which is quite thoroughly randomized already?&lt;br /&gt;&lt;br /&gt;I'm not sure how the OpenBSD code is better in any way. (Notice that it&lt;br /&gt;uses the same "half_md4_transform" as Linux; you just added another copy.)&lt;br /&gt;Is there a design note on how the design was chosen?&lt;br /&gt;&lt;br /&gt;I don't wish to be *too* discouraging to someone who's *trying* to help,&lt;br /&gt;but could you *please* check a little more carefully in future to&lt;br /&gt;make sire it's actually an improvement?&lt;br /&gt;&lt;br /&gt;I fear there's some ignorance of what the TCP ISN does, why it's chosen&lt;br /&gt;the way it is, and what the current Linux algorithm is designed to do.&lt;br /&gt;So here's a summary of what's going on. But even as a summary, it's&lt;br /&gt;pretty long...&lt;br /&gt;&lt;br /&gt;First, a little background on the selection of the TCP ISN...&lt;br /&gt;&lt;br /&gt;TCP is designed to work in an environment where packets are delayed.&lt;br /&gt;If a packet is delayed enough, TCP will retransmit it. If one of&lt;br /&gt;the copies floats around the Internet for long enough and then arrives&lt;br /&gt;long after it is expected, this is a "delayed duplicate".&lt;br /&gt;&lt;br /&gt;TCP connections are between (host, port, host port) quadruples, and&lt;br /&gt;packets that don't match some "current connection" in all four fields&lt;br /&gt;will have no effect on the current connection. This is why systems try&lt;br /&gt;to avoid re-using source port numbers when making connections to&lt;br /&gt;well-known destination ports.&lt;br /&gt;&lt;br /&gt;However, sometimes the source port number is explicitly specified and&lt;br /&gt;must be reused. The problem then arises, how do we avoid having any&lt;br /&gt;possible delayed packets from the previous use of this address pair show&lt;br /&gt;up during the current connection and confuse the heck out of things by&lt;br /&gt;acknowledging data that was never received, or shutting down a connection&lt;br /&gt;that's supposed to stay open, or something like that?&lt;br /&gt;&lt;br /&gt;First of all, protocols assume a maximum packet lifetime in the Internet.&lt;br /&gt;The "Maximum Segment Lifetime" was originally specified as 120 seconds,&lt;br /&gt;but many implementations optimize this to 60 or 30 seconds. The longest&lt;br /&gt;time that a response can be delayed is 2*MSL - one delay for the packet&lt;br /&gt;eliciting the response, and another for the response.&lt;br /&gt;&lt;br /&gt;In truth, there are few really-hard guarantees on how long a packet can&lt;br /&gt;be delayed. IP does have a TTL field, and a requirement that a packet's&lt;br /&gt;TTL field be decremented for each hop between routers *or each second of&lt;br /&gt;delay within a router*, but that latter portion isn't widely implemented.&lt;br /&gt;Still, it is an identified design goal, and is pretty reliable in&lt;br /&gt;practice.&lt;br /&gt;&lt;br /&gt;The solution is twofold: First, refuse to accept packets whose&lt;br /&gt;acks aren't in the current transmission window. That is, if the&lt;br /&gt;last ack I got was for byte 1000, and I have sent 1100 bytes&lt;br /&gt;(numbers 0 through 1099), then if the incoming packet's ack isn't&lt;br /&gt;somewhere between 1000 and 1100, it's not relevant. If it's&lt;br /&gt;950, it might be an old ack from the current connection (which&lt;br /&gt;doesn't include anything interesting), but in any case it can be&lt;br /&gt;safely ignored, and should be.&lt;br /&gt;&lt;br /&gt;The only remaining issue is, how to choose the first sequence number&lt;br /&gt;to use in a connection, the Initial Sequence Number (ISN)?&lt;br /&gt;&lt;br /&gt;If you start every connection at zero, then you have the risk that&lt;br /&gt;packets from an old connection between the same endpoints will&lt;br /&gt;show up at a bad time, with in-range sequence numbers, and confuse&lt;br /&gt;the current connection.&lt;br /&gt;&lt;br /&gt;So what you do is, start at a sequence number higher than the&lt;br /&gt;last one used in the old connection. Then there can't be any&lt;br /&gt;confusion. But this requires remembering the last sequence number&lt;br /&gt;used on every connection ever. And there are at least 2^48 addresses&lt;br /&gt;allowed to connect to each port on the local machine. At 4 bytes&lt;br /&gt;per sequence number, that's a Petabyte of storage...&lt;br /&gt;&lt;br /&gt;Well, first of all, after 2*MSL, you can forget about it and use&lt;br /&gt;whatever sequence number you like, because you know that there won't&lt;br /&gt;be any old packets floating around to crash the party.&lt;br /&gt;&lt;br /&gt;But still, it can be quite a burden on a busy web server. And you might&lt;br /&gt;crash and lose all your notes. Do you want to have to wait 2*MSL before&lt;br /&gt;rebooting?&lt;br /&gt;&lt;br /&gt;So the TCP designers (I'm now on page 27 of RFC 793, if you want to follow&lt;br /&gt;along) specified a time of day based ISN. If you use a clock to generate&lt;br /&gt;an ISN which counts up faster than your network connection can send&lt;br /&gt;data (and thus crank up its sequence numbers), you can be sure that your&lt;br /&gt;ISN is always higher than the last one used by an old connection without&lt;br /&gt;having to remember it explicitly.&lt;br /&gt;&lt;br /&gt;RFC 793 specifies a 250,000 bytes/second counting rate. Most&lt;br /&gt;implementations since Ethernet used a 1,000,000 byte/second counting&lt;br /&gt;rate, which matches the capabilities of 10base5 and 10base2 quite well,&lt;br /&gt;and is easy to get from the gettimeofday() call.&lt;br /&gt;&lt;br /&gt;Note that there are two risks with this. First, if the connection actually&lt;br /&gt;manages to go faster than the ISN clock, the next connection's ISN will&lt;br /&gt;be in the middle of the space the earlier connection used. Fortunately,&lt;br /&gt;the kind of links where significant routing delay appear are generally&lt;br /&gt;slower ones where 1 Mbyte/sec is a not too unreasonable limit. Your&lt;br /&gt;gigabit LAN isn't going to be delaying packets by seconds.&lt;br /&gt;&lt;br /&gt;The second is that a connection will be made and do nothing for 4294&lt;br /&gt;seconds until the ISN clock is about to wrap around and then start&lt;br /&gt;doing packets "ahead of" the ISN clock. If it then closes the connection&lt;br /&gt;and a new one opens, once again you have sequence number overlap.&lt;br /&gt;&lt;br /&gt;If you read old networking papers, there were a bunch of proposals for&lt;br /&gt;occasional sequence number renegotiation to solve this problem, but in the&lt;br /&gt;end people decided to not worry about it, and it hasn't been a problem&lt;br /&gt;in practice.&lt;br /&gt;&lt;br /&gt;Anyway... fast forward out of the peace and love decade and welcome to&lt;br /&gt;the modern Internet, with people *trying* to mess up TCP connections.&lt;br /&gt;This kind of attack from within was, unfortunately, not one of the&lt;br /&gt;scenarios that the initial Internet designers considered, and it's&lt;br /&gt;been a bit of a problem since.&lt;br /&gt;&lt;br /&gt;All this careful worry about packets left over from an old connection&lt;br /&gt;randomly showing up and messing things up, when we have people *creating*&lt;br /&gt;packets deliberately crafted to mess things up! A whole separate problem.&lt;br /&gt;In particular, using the simple timer-based algorithm, I can connect to&lt;br /&gt;a server, look at the ISN it offers me, and know that thats the same&lt;br /&gt;ISN it's offering to other people connecting at the same time. So I&lt;br /&gt;can create packets with a forged source address and approximately-valid&lt;br /&gt;sequence numbers and bombard the connection with them, cutting off that&lt;br /&gt;server's connection to some third party. Even if I can't see any of&lt;br /&gt;the traffic on the connection.&lt;br /&gt;&lt;br /&gt;So people sat down and did some thinking. How to deal with this?&lt;br /&gt;Harder yet, how to deal with this without redesigning TCP from scratch?&lt;br /&gt;&lt;br /&gt;Well, if a person wants to mess up their *own* connections, we can't&lt;br /&gt;stop them. The fundamental problem is that an attacker A can figure&lt;br /&gt;out the sequence numbers that machines B and C are using to talk to&lt;br /&gt;each other. So we'd like to make the sequence numbers for every&lt;br /&gt;connection unique and not related to the sequence numbers used on any&lt;br /&gt;other connections. So A can talk to B and A can talk to C and still not&lt;br /&gt;be able to figure out the sequence numbers that B and C are using between&lt;br /&gt;themselves.&lt;br /&gt;&lt;br /&gt;Fortunately, it is entirely possible to combine this with the clock-based&lt;br /&gt;algorithm and get the best of both worlds! All we need is a random offset,&lt;br /&gt;unique for every (address, port, address, port) quadruple, to add to&lt;br /&gt;the clock value, and we have all of the clock-based guarantees preserved&lt;br /&gt;within every pair of endpoints, but unrelated endpoints have their ISNs&lt;br /&gt;at some unpredictable offset relative to each other.&lt;br /&gt;&lt;br /&gt;And for generating such a random offset, we can use cryptography.&lt;br /&gt;Keep a single secret key, and hash together the endpoint addresses,&lt;br /&gt;and you can generate a random 32-bit ISN offset. Add that to the&lt;br /&gt;current time, and everything is golden. A can connect to B and&lt;br /&gt;see and ISN, but would need to do some serious cryptanalysis to&lt;br /&gt;figure out what ISN B is using to talk to C.&lt;br /&gt;&lt;br /&gt;Linux actually adds one refinement. For speed, it uses a very&lt;br /&gt;stripped-down cryptographic hash function. To guard against that&lt;br /&gt;being broken, it generates a new secret every 5 minutes. So an&lt;br /&gt;attacker only has 5 minutes to break it.&lt;br /&gt;&lt;br /&gt;The cryptographic offset is divided into 2 parts. The high 8 bits are&lt;br /&gt;a sequence number, incremented every time the secret is regenerated.&lt;br /&gt;The low 24 bits are produced by the hash. So 5 minutes after booting,&lt;br /&gt;the secret offset changes from 0x00yyyyyy to 0x01zzzzzz. This is at&lt;br /&gt;least +1, and at most +0x1ffffff. On average, the count is going up&lt;br /&gt;by 2^24 = 16 million every 300 seconds. Which just adds a bit to the&lt;br /&gt;basic "1 million per second" ISN timer.&lt;br /&gt;&lt;br /&gt;The cost is that the per-connection part of the ISN offset is limited&lt;br /&gt;to 24 and not 32 bits, but a cryptanalytic attack is pretty much&lt;br /&gt;precluded by the every-5-minutes thing. The rekey time and the number of&lt;br /&gt;really-unpredictable bits have to add up to not wrapping the ISN space&lt;br /&gt;too fast. (Although the 24 bits could be increased to 28 bits without&lt;br /&gt;quite doubling the ISN counting speed. Or 27 bits if you want plenty&lt;br /&gt;of margin. Could I suggest that as an improvement?)&lt;br /&gt;&lt;br /&gt;--- drivers/char/random.c 2004-12-04 09:24:19.000000000 +0000&lt;br /&gt;+++ drivers/char/random.c 2005-01-29 07:20:37.000000000 +0000&lt;br /&gt;@@ -2183,26 +2183,26 @@&lt;br /&gt;#define REKEY_INTERVAL (300*HZ)&lt;br /&gt;/*&lt;br /&gt;* Bit layout of the tcp sequence numbers (before adding current time):&lt;br /&gt;- * bit 24-31: increased after every key exchange&lt;br /&gt;- * bit 0-23: hash(source,dest)&lt;br /&gt;+ * bit 27-31: increased after every key exchange&lt;br /&gt;+ * bit 0-26: hash(source,dest)&lt;br /&gt;*&lt;br /&gt;* The implementation is similar to the algorithm described&lt;br /&gt;* in the Appendix of RFC 1185, except that&lt;br /&gt;* - it uses a 1 MHz clock instead of a 250 kHz clock&lt;br /&gt;* - it performs a rekey every 5 minutes, which is equivalent&lt;br /&gt;- * to a (source,dest) tulple dependent forward jump of the&lt;br /&gt;+ * to a (source,dest) tuple dependent forward jump of the&lt;br /&gt;* clock by 0..2^(HASH_BITS+1)&lt;br /&gt;*&lt;br /&gt;- * Thus the average ISN wraparound time is 68 minutes instead of&lt;br /&gt;- * 4.55 hours.&lt;br /&gt;+ * Thus the average ISN wraparound time is 49 minutes instead of&lt;br /&gt;+ * 4.77 hours.&lt;br /&gt;*&lt;br /&gt;* SMP cleanup and lock avoidance with poor man's RCU.&lt;br /&gt;* Manfred Spraul [email blocked]&lt;br /&gt;*&lt;br /&gt;*/&lt;br /&gt;-#define COUNT_BITS 8&lt;br /&gt;+#define COUNT_BITS 5&lt;br /&gt;#define COUNT_MASK ( (1&lt;&lt;COUNT_BITS)-1)&lt;br /&gt;-#define HASH_BITS 24&lt;br /&gt;+#define HASH_BITS 27&lt;br /&gt;#define HASH_MASK ( (1&lt;&lt;HASH_BITS)-1 )&lt;br /&gt;&lt;br /&gt;static struct keydata {&lt;br /&gt;&lt;br /&gt;Anyway, in comparison, the algorithm in your patch (and presumably&lt;br /&gt;OpenBSD, although I haven't personally compared it) uses a clock&lt;br /&gt;offset generated fresh for each connection. There's a global counter&lt;br /&gt;(tcp_rndiss_cnt; I notice you don't have any SMP locking on it) which&lt;br /&gt;is incremented every time an ISN is needed. It's rekeyed periodically,&lt;br /&gt;and the high bit (tcp_rndiss_msb) of the delta is used like the COUNT_BITS&lt;br /&gt;in the Linux algorithm.&lt;br /&gt;&lt;br /&gt;The ISN is generated as the high sequence bit, then 15 bits of encrypted&lt;br /&gt;count (with some homebrew cipher I don't recognize), then a constant&lt;br /&gt;zero bit (am I reading that right), then the 15 low-order bits are&lt;br /&gt;purely random.&lt;br /&gt;&lt;br /&gt;It's a slightly different algorithm, but it does a very similar function.&lt;br /&gt;The main downsides are that the sequence number can easily go backwards&lt;br /&gt;(there's no guarantee that consecutive calls will return increasing&lt;br /&gt;numbers since tcp_rndiss_encrypt scrambles the high 15 bits), and&lt;br /&gt;that it's not SMP-safe. Two processors could read and use the same&lt;br /&gt;tcp_rndiss_cnt value at the same time, or (more likely) both call&lt;br /&gt;tcp_rndiss_init at the same time and end up toggling tcp_rndiss_msb twice,&lt;br /&gt;thereby destroying the no-rollback property it's trying to achieve.&lt;br /&gt;&lt;br /&gt;Oh, and the single sequence bit in the offsets means that the&lt;br /&gt;TCP ISN will wrap around very fast. Every 10 minutes, or every&lt;br /&gt;60000 TCP connections, whichever comes first.&lt;br /&gt;&lt;br /&gt;Regarding the first issue, it's possible that the OpenBSD network stack&lt;br /&gt;takes care to remember all connections for 2*MSL and continues the&lt;br /&gt;sequence number if the endpoints are reused, thereby avoiding a call to&lt;br /&gt;ip_randomisn entirely.&lt;br /&gt;&lt;br /&gt;But the second deserves some attention. The Linux code takes some care&lt;br /&gt;to avoid having to lock anything in the common case. The global count&lt;br /&gt;makes that difficult.&lt;br /&gt;&lt;/quote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-110749770950504262?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/110749770950504262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=110749770950504262' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110749770950504262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110749770950504262'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/02/linux-tcp-random-initial-sequence.html' title='Linux: TCP Random Initial Sequence Numbers'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-110741465821465027</id><published>2005-02-02T23:10:00.000-08:00</published><updated>2005-02-02T23:10:58.213-08:00</updated><title type='text'>[Debian] Linux Journal: compiling javahl for subclipse</title><content type='html'>&lt;a href="http://ibao.hopto.org/blog/debian/archives/2004/12/compiling_javah_1.html"&gt;[Debian] Linux Journal: compiling javahl for subclipse&lt;/a&gt;: "$ apt-get install libtool autoconf g   libapr0-dev libneon24-dev $ tar zxvf subversion-1.1.1.tar.gz $ cd subversion-1.1.1 $./autogen.sh $ export JAVA_HOME=/usr/lib/j2se/1.4/ $ ./configure --enable-javahl --with-jdk=$JAVA_HOME --with-jikes=$JAVA_HOME/bin/javac $ make $ mkdir subversion/bindings/java/javahl/classes # have problems finding DirEntry.class otherwise $ make javahl $ make install-javahl "&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-110741465821465027?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/110741465821465027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=110741465821465027' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110741465821465027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110741465821465027'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/02/debian-linux-journal-compiling-javahl.html' title='[Debian] Linux Journal: compiling javahl for subclipse'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-110739961157474537</id><published>2005-02-02T19:00:00.000-08:00</published><updated>2005-02-02T19:00:11.573-08:00</updated><title type='text'>Web: Page Containing Non-Secure Item?</title><content type='html'>&lt;a href="http://scott.yang.id.au/2003/02/page-containing-non-secure-item/"&gt;Page Containing Non-Secure Item?&lt;/a&gt;: "Page Containing Non-Secure Item"&lt;br /&gt;&lt;br /&gt;If you find some warning of secure / non-secure stuff, please see this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-110739961157474537?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/110739961157474537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=110739961157474537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110739961157474537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110739961157474537'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/02/web-page-containing-non-secure-item.html' title='Web: Page Containing Non-Secure Item?'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-110732684972964382</id><published>2005-02-01T22:47:00.000-08:00</published><updated>2005-02-01T22:47:29.730-08:00</updated><title type='text'>"Difference between Workflow and Rule engines"</title><content type='html'>&lt;a href="http://www.javaworld.com.tw/blog/archives/jakarta99/000455.html"&gt;&lt;/a&gt;: "Difference between Workflow and Rule engines&lt;br /&gt;&lt;br /&gt;There are some blurry lines here. My quick answer is:&lt;br /&gt;&lt;br /&gt;Workflow - typically a flow of information and actions associated with people. This term became popular 15-20 years ago with things like expense report approvals, or imaging systems that would route things like credit card receipts and problems to different people to take action on rather than sending paper around with a sign-off sheet on top.&lt;br /&gt;&lt;br /&gt;BPM - Business Process Management. This term became popular over the past 5-10 years and typically refers to a combination of people and system oriented processes. So say someone approves an expense report, but then it kicks off a series of actions in several systems like payroll and general ledger.&lt;br /&gt;&lt;br /&gt;BPM Engine - keeps track of the state of various items as they pass thru a graph of tasks and actions. Think of drawing a typical flow chart where the BPM engine keeps track of each items flowing thru the flow chart. Go to http://www.jbpm.org for some good overview docs and pointers.&lt;br /&gt;&lt;br /&gt;Rules Engine - allows for complex set of rules to be applied to a complex set of data to make decisions. From the http://www.drools.org web site: 'Rule Engines and expert systems are a great way to collect complex decision-making logic and work with data sets too large for humans to effectively use. Rule engines can make decisions based on hundreds of thousands of facts, quickly, reliably and repeatedly.'"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-110732684972964382?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/110732684972964382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=110732684972964382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110732684972964382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110732684972964382'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/02/difference-between-workflow-and-rule.html' title='&quot;Difference between Workflow and Rule engines&quot;'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-110661989723124122</id><published>2005-01-24T18:24:00.000-08:00</published><updated>2005-01-24T18:24:57.233-08:00</updated><title type='text'>Perl regular expressions</title><content type='html'>&lt;a href="http://www.perldoc.com/perl5.6/pod/perlre.html#Regular-Expressions"&gt; Perl regular expressions&lt;/a&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/10321167-110661989723124122?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/110661989723124122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=110661989723124122' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110661989723124122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110661989723124122'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/01/perl-regular-expressions.html' title='Perl regular expressions'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-110661942809146200</id><published>2005-01-24T18:17:00.000-08:00</published><updated>2005-01-24T18:17:08.090-08:00</updated><title type='text'>Perl Regular Expression Matching is NP-Hard</title><content type='html'>&lt;a href="http://perl.plover.com/NPC/"&gt;Perl Regular Expression Matching is NP-Hard&lt;/a&gt;: "regex matching is NP-hard when regexes are allowed to have backreferences"&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-110661942809146200?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/110661942809146200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=110661942809146200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110661942809146200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110661942809146200'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/01/perl-regular-expression-matching-is-np.html' title='Perl Regular Expression Matching is NP-Hard'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-10321167.post-110638891905177513</id><published>2005-01-22T02:13:00.000-08:00</published><updated>2005-01-22T02:15:19.050-08:00</updated><title type='text'>dv1004ap XF86Config-4</title><content type='html'>This is the first article for making the Linux work in my notebook. &lt;a href="http://www.dbg400.net/dv1066ea.html"&gt;Reference&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/etc/X11/XF86Config-4 - These are the changes from Ubuntu generated default. Generally I've just added a few lines, but a few were changed. You can also view the full XF86Config-4.&lt;br /&gt;&lt;br /&gt;Section "Device"&lt;br /&gt;        Option          "XaaNoOffscreenPixmaps"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Monitor"&lt;br /&gt;        Modeline        "1280x768" 80.14 1280 1344 1480 1680 768 769 772 795&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Screen"&lt;br /&gt;        DefaultDepth    16&lt;br /&gt;        SubSection "Display"&lt;br /&gt;                Depth           16&lt;br /&gt;                Modes           "1280x768" "1024x768" "800x600" "640x480"&lt;br /&gt;        EndSubSection&lt;br /&gt;        SubSection "Display"&lt;br /&gt;                Depth           24   &lt;br /&gt;	        Modes           "1280x768" "1024x768" "800x600" "640x480"&lt;br /&gt;        EndSubSection&lt;br /&gt;EndSection&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10321167-110638891905177513?l=standbytux.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://standbytux.blogspot.com/feeds/110638891905177513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=10321167&amp;postID=110638891905177513' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110638891905177513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/10321167/posts/default/110638891905177513'/><link rel='alternate' type='text/html' href='http://standbytux.blogspot.com/2005/01/dv1004ap-xf86config-4.html' title='dv1004ap XF86Config-4'/><author><name>Stephen</name><uri>http://www.blogger.com/profile/11906928435370299536</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://photos1.blogger.com/blogger/7223/485/320/Lonely%20Raccoon.0.jpg'/></author><thr:total>3</thr:total></entry></feed>
