﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-天堂的另一角-随笔分类-软件介绍</title><link>http://www.cnitblog.com/addone/category/2163.html</link><description>天堂魷魚的原创技术博客。所謂兼容並包，無奇不有。</description><language>zh-cn</language><lastBuildDate>Mon, 27 Feb 2012 00:31:16 GMT</lastBuildDate><pubDate>Mon, 27 Feb 2012 00:31:16 GMT</pubDate><ttl>60</ttl><item><title>Enjoy: Mac下的JoyToKey</title><link>http://www.cnitblog.com/addone/archive/2012/02/26/77800.html</link><dc:creator>Addone</dc:creator><author>Addone</author><pubDate>Sun, 26 Feb 2012 13:56:00 GMT</pubDate><guid>http://www.cnitblog.com/addone/archive/2012/02/26/77800.html</guid><wfw:comment>http://www.cnitblog.com/addone/comments/77800.html</wfw:comment><comments>http://www.cnitblog.com/addone/archive/2012/02/26/77800.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/addone/comments/commentRss/77800.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/addone/services/trackbacks/77800.html</trackback:ping><description><![CDATA[<p>不少人希望能用手柄来玩一些本身不支持手柄的游戏，在Windows下，他们有JoyToKey，可以用来把手柄的按钮映射为键盘按键事件，十分方便。</p><p>在Mac下，他们有<a href="http://www.carvware.com/gamepadcompanion.html" target="_blank">Gamepad Companion</a>。不仅支持键盘映射，还能把手柄映射到鼠标上，功能和界面都很不错。</p><p>问题是，那玩意儿是要钱的，而且相当地不便宜。所幸，我找到了这个：<a href="http://abstractable.net/enjoy/" target="_blank">Enjoy</a>。</p><p>界面很简单，不过操作也很简单。大体上，只要接上手柄，按下要设定的按钮，再按下对应的键盘按键，一个映射就建立起来了。</p><p>这个软件还支持把设置保存起来，这样玩游戏的时候只要切换成对应的设置就行了，还是相当方便的。我用来玩Mac下的&#8220;都市赛车6&#8221;，没有任何问题。</p><p>最大的好处是，Enjoy是免费的，还是开源的。唯一的问题是，界面目前只有英文。</p><p>由于1.0版在Lion下无法使用，我已经修正了该问题并反馈给作者，大家直接过去下载新版1.0.1就行了。因为是英文网页，我就不厚道地把<a href="http://abstractable.net/enjoy/enjoy.zip" target="_blank">下载链接</a>放上了，可以直接下载。为支持原作者，建议顺便过去看看，至少那边还有截图的说。</p><p>目前该软件处在冬眠状态，作为游戏爱好者的我对此深感痛心，尤其是在面对App Store上那个价格奇贵的GC时。我在考虑接手Enjoy的开发和汉化并且放到sf或者gg上，不过目前比较忙，还不敢动手。如果有希望参与这个项目的朋友，欢迎与我联系。直接给我发邮件或者留言都行。</p><p>当然，也许需要先给它起个更像样的名字。</p><img src ="http://www.cnitblog.com/addone/aggbug/77800.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/addone/" target="_blank">Addone</a> 2012-02-26 21:56 <a href="http://www.cnitblog.com/addone/archive/2012/02/26/77800.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>［游戏评测］英雄传说3 白发魔女（PSP）</title><link>http://www.cnitblog.com/addone/archive/2010/07/30/67790.html</link><dc:creator>Addone</dc:creator><author>Addone</author><pubDate>Fri, 30 Jul 2010 09:22:00 GMT</pubDate><guid>http://www.cnitblog.com/addone/archive/2010/07/30/67790.html</guid><wfw:comment>http://www.cnitblog.com/addone/comments/67790.html</wfw:comment><comments>http://www.cnitblog.com/addone/archive/2010/07/30/67790.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/addone/comments/commentRss/67790.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/addone/services/trackbacks/67790.html</trackback:ping><description><![CDATA[<h3>概述</h3>
<p>本作是日本Falcom公司最早於1994年發行的一款角色扮演遊戲，後來被移植到多個平台，是英雄傳說系列的第三部，和之後的朱紅的淚，海之檻歌，合稱為卡卡布三部曲，號稱「史詩級RPG」。我玩到的是其和BANDAI（萬岱）在2004年發行的PSP版本。通關時間跨度：3年。</p>
<p><a target="_blank"  href="http://www.jp.playstation.com/software/title/uljs00004.html"><img alt="" src="http://www.jp.playstation.com/software/title/8tnu01000000kfpz-img/8tnu01000000kfs0.jpg"></a><br></p>
<h3>畫面 (8)</h3>
<p>大概因為是移植作的關係，遊戲的畫面並沒有能夠充分利用PSP的機能；但本作畫面勝在繼承了英雄傳說系列精緻畫風的傳統，無論是建築、植物、洞窟，無論是廚具、書架、桌椅、柵欄、還是碎石，都描繪得非常精細，簡直是令人感動。特效方面則利用PSP的機能增強了陽光和水面、沙灘的表現力，在沙灘上到處亂跑留下自己的腳印的感覺實在是不錯。戰鬥方面的刻畫比較中規中矩，除了男主角使用召喚魔法時的特效外，並沒有什麼出彩之處。給8分是對畫師的誠意致敬。</p>
<h3>音樂 (8)</h3>
<p>本作的音樂堪稱優秀，OP「時の向かい側（時間的對立面）」的大氣和ED「空の果てへ（奔向天空的盡頭）」的優美無可挑剔，而且遊戲中的其他曲目也無一不是精品：無論是悲傷的、輕快的、詼諧的、激昂的，無一不入耳，而且都能和故事的發展配合得絲絲入扣。相信許多人在霍路庫(Horuku)的小酒館聽到那首隱藏曲目時，都會不由得由衷讚嘆吧。這些音樂是如此精美和令人感動，以至於成為了整個作品不可或缺的部分──感人的故事絕對需要感人的音樂。</p>
<p>然而，可惜的是，曲目的數量實在太少了，戰鬥場面的曲子就一首，城鎮的音樂也是來來回回的那一首，就連野外的音樂也沒什麼可換的。曲子雖然好聽，可是不斷反反覆覆的聽同一首，實在是令人有些氣悶。因此，扣掉了1分。</p>
<h3>劇情 (10)</h3>
<p>作為Falcom的一貫以劇情為主打的英雄傳說系列作品，本作的表現堪稱完美。光看看那張地圖就能夠明白這個遊戲的野心：構造一個宏大而完整的世界觀；而且本作相當出色的完成了這個任務。單以劇情而論，本作不會輸給任何一個以劇情著稱的冒險類AVG遊戲。</p>
<p>整個故事由9章構成，以兩個年輕人追隨20年前「白髮魔女」的足跡的「巡禮」之旅為主線，在兩人的冒險中，娓娓講述了這個世界的歷史和白髮魔女的故事。通過四處打聽消息、買雜誌、逛圖書館，這個世界的種種如同拼圖一般漸漸在玩家的腦海中成形，而在各個「夏路」（神廟）中所看到的情景，則像是揮之不去的陰影，讓玩家滿腦子問號。隨著冒險的進行，各種謎團也一一得到了解明；但遊戲卻總能在關鍵時刻讓你轉折那麼一下子，讓你驚呼：啊，怎麼會是這樣？而白髮魔女的故事真相，則要到全作通關後才能看到。相信這時許多人更會大吃一驚：原來如此啊！這時你才會意識到，其實本作真正的主人公，正是這位在整個遊戲過程中都見不到、卻又無處都可以感覺到的白髮少女。劇終時杜盧賽路(Durzel)的信中所講述的故事則更為整個故事平添了一份甜蜜之感：原來白髮魔女一直都和我們在一起啊。</p>
<p>這款遊戲開創了以劇情聞名的「卡卡布三部曲」，除了故事刻畫的功力，其寓意也是非常深刻。整個遊戲中沒有一般遊戲常見的尖銳的正反對立，你可以發現身為盜賊的庫茨(Goes)和夏拉(Shirla)的可愛之處；你會發現那些BOSS們也沒那麼十惡不赦；你會驚訝於英雄一般的劍士杜盧賽路竟也有著不堪的經歷；你會發現原來最終BOSS伊莎貝爾王妃(Isabelle)竟有著如此酸楚的過去。而最終，你會發現，反派們其實並不是反派，事實正如王妃所說：「這個世界上的人們都有罪。」反派們所作的事情，和所謂的「正派」其實並無不同。真正的正面人物只有一個──白髮魔女，她既是「叛徒」，又是「魔女」，可最終卻以自己的犧牲換來了兩個世界的得救──她已經是「神」一般的存在，只有她才是真正的英雄。「魔女」這一用在標題中的醒目稱呼，其實正是對所謂「正派」的無情反諷。遊戲以白髮魔女的形象所突出的，是一個完全不同於以往常規的「英雄」形象。正如最後拉布（曾經的屠龍魔法師）所說的一般：這並不是那個憑藉一把劍或是某件神器除掉惡魔然後開疆拓土就能稱為英雄的時代。真正的英雄，是生活在平常人當中，能夠傾聽弱者們的聲音的人。</p>
<h3>系統 (7)</h3>
<p>遊戲主要由逛街和打架兩部分組成。逛街還是很有意思的，可以輕鬆買到各種武器道具，還可以欣賞無關主線的種種分支小故事。戰鬥系統為了因應PSP的操作方式，作了不少更改，在即時性方面不如原作。但戰鬥難度和數量上還是比較合理的，你不需要忍受「踩地雷」的痛苦，而且達到一定級別後，低級怪看到你還會「望風而逃」。這是從「空之軌跡」中「借」來的系統，很有意思。</p>
<p>可惜的是，戰鬥過程相對比較乏味，一個區域裡基本上就是一種戰鬥模式，很有催眠效果。在遊戲後期，尤其是在路得城(Roudo)的迷宮中，戰鬥簡直令人抓狂。雖然迷宮本身不是太複雜，但是層出不窮的怪物以及那點可憐的經驗值，不由得讓人懷疑開發商是不是想單純以此來增加遊戲時間。</p>
<h3>綜合 (8.3)</h3>
<p>這款遊戲無疑是經典之作。雖然在畫面、音樂，尤其是系統上都有不足，但完美的劇情，深邃的思想，和精緻的畫面、優美的音樂相得益彰。瑕不掩瑜，這樣一款比以往的RPG更具深度和內涵的遊戲，在「勇者鬥惡龍 (Dragon Quest)」和「最終幻想 (Final Fantasy)」等大作之林中，開闢了屬於自己的新天地，更開創了一個以深厚劇情為主打的新系列。如此出色的作品，完全稱得上「史詩級的RPG遊戲」。</p><img src ="http://www.cnitblog.com/addone/aggbug/67790.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/addone/" target="_blank">Addone</a> 2010-07-30 17:22 <a href="http://www.cnitblog.com/addone/archive/2010/07/30/67790.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2010南非世界杯赛程表(OpenOffice版)</title><link>http://www.cnitblog.com/addone/archive/2010/06/13/66675.html</link><dc:creator>Addone</dc:creator><author>Addone</author><pubDate>Sun, 13 Jun 2010 05:36:00 GMT</pubDate><guid>http://www.cnitblog.com/addone/archive/2010/06/13/66675.html</guid><wfw:comment>http://www.cnitblog.com/addone/comments/66675.html</wfw:comment><comments>http://www.cnitblog.com/addone/archive/2010/06/13/66675.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/addone/comments/commentRss/66675.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/addone/services/trackbacks/66675.html</trackback:ping><description><![CDATA[
网上可以轻松找到Excel版本的，而且OOo也可以打开，不过还是有些小问题。为了方便使用OpenOffice的&#8220;广大&#8221;群众，特放出一个OpenOffice格式(.ods)的赛程表，对于Linux或苹果Mac OS的用户来说也许有些帮助。<br><br>其实这个东西没什么技术含量，仅为方便而作。赛果已更新完毕。<br><a target="_blank" href="http://www.cnitblog.com/Files/addone/2010_World_Cup.zip"><br>下载地址</a><br><br><img src ="http://www.cnitblog.com/addone/aggbug/66675.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/addone/" target="_blank">Addone</a> 2010-06-13 13:36 <a href="http://www.cnitblog.com/addone/archive/2010/06/13/66675.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>蘋果系統Mac OS X + 電子書閱讀器？</title><link>http://www.cnitblog.com/addone/archive/2010/04/21/65513.html</link><dc:creator>Addone</dc:creator><author>Addone</author><pubDate>Wed, 21 Apr 2010 14:58:00 GMT</pubDate><guid>http://www.cnitblog.com/addone/archive/2010/04/21/65513.html</guid><wfw:comment>http://www.cnitblog.com/addone/comments/65513.html</wfw:comment><comments>http://www.cnitblog.com/addone/archive/2010/04/21/65513.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/addone/comments/commentRss/65513.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/addone/services/trackbacks/65513.html</trackback:ping><description><![CDATA[近日入手了一台的電子書閱讀器，無奈這款東東的固件設計極其弱智，於是我遇到了廣大電子書用戶經常碰到的各種問題，例如PDF、漫畫的閱讀。<br><br>在Windows系統下，要解決這類問題就需要下載各種工具軟件，但是在蘋果的Mac OS X下是很難找到這些軟件的。難道說蘋果的用戶就杯具了嗎？<br>否！這些軟件在Mac下幾乎找不到，那是因為Mac系統裡自帶的工具就已經有了這些功能。<br><br>
<h3>PDF切邊</h3>
因為閱讀器的屏幕只有6寸，因此大多數的PDF在閱讀器上看起來都比較小。如果閱讀器本身沒有提供PDF的切邊或縮放功能，就需要把頁面周圍的白邊切掉，這樣處理過後的PDF在6寸的顯示器上看起來效果還是不錯的。<br>在Mac下進行PDF切邊根本不需要額外的軟件，系統自帶的萬能查看軟件&#8220;預覽&#8221;（Preview）就有這個功能。<br><br>首先用&#8220;預覽&#8221;打開要處理的PDF文件，點擊工具欄的&#8220;選擇&#8221;按鈕，用鼠標在拖出要保留的范圍，如圖所示。<br><img alt="" src="http://www.cnitblog.com/images/cnitblog_com/addone/ereader/crop1.png"><br>讓右邊的工具條顯示縮略圖。在右邊的工具條下方按鈕中選擇&#8220;縮略圖&#8221;即可。<br><img alt="" src="http://www.cnitblog.com/images/cnitblog_com/addone/ereader/sidebar1.png"><br><br>點擊縮略圖會跳轉到相應頁面，這樣可以檢查一下之前選定的范圍大小是不是也合適其他頁面，不合適的話可以隨時用鼠標調整原先拉出來的那個框。<br><img alt="" src="http://www.cnitblog.com/images/cnitblog_com/addone/ereader/crop2.png" width="406" height="536"><br><br>調整完成後，在右邊的縮略圖欄裡按⌘（Command）+A鍵，可以選定全部頁面。<br><img alt="" src="http://www.cnitblog.com/images/cnitblog_com/addone/ereader/sidebar2.png"><br><br>在菜單中選擇"工具"&gt;"剪裁"或者按⌘（Command）+K鍵，即可完成剪裁。將該文檔保存或另存即可。<br><img alt="" src="http://www.cnitblog.com/images/cnitblog_com/addone/ereader/crop3.png"><br>
<h3>做PDF漫畫書</h3>
嘛，我的閱讀器比較弱智，竟然不支持打包後的漫畫。每次看著那一堆圖片文件我就生氣。解決方法是把解壓後的漫畫圖片轉成PDF格式，這樣一般的閱讀器看起來都沒有問題。<br><br>Windows下需要使用PDF生成軟件配合進行轉換，而由於Mac自身對PDF的支持非常好，直接用Automator建立如下工作流就可以輕松完成這個任務。<br><img alt="" src="http://www.cnitblog.com/images/cnitblog_com/addone/ereader/workflow.png"><br><br>其中圖片縮放可以根據情況自行調整或干脆去掉，不過要注意，PDF會比原來的圖片文件大很多。完成後把這個工作流用"文件"&gt;"儲存為插件"保存為Finder的插件即可。<br>如果你懶的話，直接<a target="_blank" href="http://www.cnitblog.com/Files/addone/Make%20Comic%20PDF.zip">下載我做好的工作流</a>並保存到目錄~/Library（資源庫）/Workflows/Applications/Finder中即可。<br><br>調用時，在Finder中選中要處理的所有圖片文件，然後點擊鼠標右鍵，選擇"更多"&gt;"Automator"&gt;"Make Comic PDF"（或其他你自己起的名字），稍等片刻後PDF就會出現在桌面上了。<br><img alt="" src="http://www.cnitblog.com/images/cnitblog_com/addone/ereader/comicbook.png"><br><br>這樣，只需要系統自帶的工具就已經能完成這些在Windows下頗令人頭痛的任務了。<br><br>可惜，Mac雖然很強大，不過我的閱讀器實在太弱智了，竟然連書簽關機後都不能保存。只能等待新版固件了，我淚。。。<br><br><br><br>   <img src ="http://www.cnitblog.com/addone/aggbug/65513.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/addone/" target="_blank">Addone</a> 2010-04-21 22:58 <a href="http://www.cnitblog.com/addone/archive/2010/04/21/65513.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Mac下製作CD專輯的PDF手冊的簡單腳本</title><link>http://www.cnitblog.com/addone/archive/2009/11/22/62764.html</link><dc:creator>Addone</dc:creator><author>Addone</author><pubDate>Sun, 22 Nov 2009 12:34:00 GMT</pubDate><guid>http://www.cnitblog.com/addone/archive/2009/11/22/62764.html</guid><wfw:comment>http://www.cnitblog.com/addone/comments/62764.html</wfw:comment><comments>http://www.cnitblog.com/addone/archive/2009/11/22/62764.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/addone/comments/commentRss/62764.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/addone/services/trackbacks/62764.html</trackback:ping><description><![CDATA[本文的英文版在：<a target="_blank" href="http://addlone.blogspot.com/2009/11/making-pdf-booklet-from-images-mac-os-x.html">幻想園</a><br>English version available at: <a target="_blank" href="http://addlone.blogspot.com/2009/11/making-pdf-booklet-from-images-mac-os-x.html">Garden of Imagination</a><br>以上中國大陸訪問需要穿牆。。。<br><br>iTunes有一個很不錯的功能，就是能導入pdf文件並作為CD專輯的一部分。這就解決了許多數字音樂收藏者的煩惱，過去總是因為收專輯時缺少了真正CD裡的那些包含簡介、彩圖、歌詞的小冊子，現在這些也能夠和mp3等音樂文件一起收藏了。<br><br>問題是現在網上流傳的各種MP3或無損的數字專輯，通常都是直接提供掃描下來的手冊圖片。這樣下回來的專輯裡就是一堆jpg、png之類的圖片文件，如果要放進iTunes中，就需要手動把每張圖片都轉為pdf，然後再合併起來，實在是很麻煩。<br><br>幸而Mac為我們提供了Automator這個強大的工具。什麼？你沒聽說過？沒關係，只要你是使用Mac OS X的話，把以下文件下載後解壓縮到你用戶目錄下的<font color="#0000ff">Library/Workflows/Applications/Finder/</font>目錄下即可。使用時，在文件管理器中選中那堆圖片，點右鍵，在菜單中選擇「更多」&gt;「Automator」&gt;「Make Booklet」即可。然後你就會發現桌面上多了一個PDF文件，把它拖到iTunes裡，並加上專輯名，它就會和同專輯的音樂文件排在一起了。<br><br><a target="_blank" href="http://www.wuala.com/addone/public/software/Make%20Booklet.zip">下載文件</a><br>若以上網址被牆，請使用這個地址：<a target="_blank" href="http://dl.dropbox.com/u/1738383/macware/Make%20Booklet.zip">又一個下載文件</a><br>如果以上都被和諧了。。。那你可以選擇穿牆或是參考下面的手工方法。。。<br><br>轉換出來的PDF小冊子效果如圖：<br><img alt="" src="http://www.cnitblog.com/images/cnitblog_com/addone/booklet_mac.png" width="800" height="380"><br><br>如果你熟悉Automator的話，也可以手工創建如下的工作流，然後保存為Finder的插件，效果也是一樣的：<br><img src="http://lh4.ggpht.com/_70JovzHBzDc/SwBhKTEGpBI/AAAAAAAAAFA/ADnlUgfGx9o/%5BUNSET%5D.png?imgmax=800"><br><br>這個方法是修改自Jerry Stratton在<a target="_blank" href="http://www.hoboes.com/Mimsy/hacks/combining-multiple-pdf/">這裡</a>提出的辦法，讓我們一起來鼓掌感謝他吧！   <img src ="http://www.cnitblog.com/addone/aggbug/62764.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/addone/" target="_blank">Addone</a> 2009-11-22 20:34 <a href="http://www.cnitblog.com/addone/archive/2009/11/22/62764.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个简单的钟</title><link>http://www.cnitblog.com/addone/archive/2009/10/16/61971.html</link><dc:creator>Addone</dc:creator><author>Addone</author><pubDate>Fri, 16 Oct 2009 13:19:00 GMT</pubDate><guid>http://www.cnitblog.com/addone/archive/2009/10/16/61971.html</guid><wfw:comment>http://www.cnitblog.com/addone/comments/61971.html</wfw:comment><comments>http://www.cnitblog.com/addone/archive/2009/10/16/61971.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/addone/comments/commentRss/61971.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/addone/services/trackbacks/61971.html</trackback:ping><description><![CDATA[用PyQT4写的时钟，真的很简单。。。特性如下：<br>
<ol>
    <li>置顶显示，所有桌面显示；</li>
    <li>支持KClock皮肤，自带若干；</li>
    <li>鼠标滚轮调节透明度；</li>
    <li>背景图（未完成）。</li>
</ol>
效果看截图。<br><img alt="" src="http://www.cnitblog.com/images/cnitblog_com/addone/AClock0-2.png" width="235" height="224"><br><br>目前放出的只是一个早期测试版本，只实现了部分比较简单的功能。开发动机主要是Linux下常见的桌面时钟不能方便的置顶和调节透明度。下一版会争取实现Mac下的SimpleFloatingClock的类似功能，即完全使用单个png文件定制皮肤。<br>代码和可执行程序都放在压缩包中。Mint 7 下测试通过。<br><a target="_blank" href="http://www.cnitblog.com/Files/addone/AClock.zip">点此下载</a><br><br>使用方法：<br>运行run即可执行；<br>换肤在右键菜单里选skin，注意不要选以jpg结尾的，那个是bug（汗。。。）；<br>右键菜单退出；<br>在钟面上用鼠标滚轮可以调节透明度。<br><br> <img src ="http://www.cnitblog.com/addone/aggbug/61971.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/addone/" target="_blank">Addone</a> 2009-10-16 21:19 <a href="http://www.cnitblog.com/addone/archive/2009/10/16/61971.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BOINC项目Enigma介绍</title><link>http://www.cnitblog.com/addone/archive/2009/08/29/61070.html</link><dc:creator>Addone</dc:creator><author>Addone</author><pubDate>Sat, 29 Aug 2009 00:40:00 GMT</pubDate><guid>http://www.cnitblog.com/addone/archive/2009/08/29/61070.html</guid><wfw:comment>http://www.cnitblog.com/addone/comments/61070.html</wfw:comment><comments>http://www.cnitblog.com/addone/archive/2009/08/29/61070.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/addone/comments/commentRss/61070.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/addone/services/trackbacks/61070.html</trackback:ping><description><![CDATA[近日在Mac下重新上了<a target="_blank" href="http://boinc.berkeley.edu/">BOINC</a>，不过目的不再是SETI，而是跟课程相关的一个相当有意思的项目：Enigma。<br><br>所谓的Enigma，指的是二战时期德军的一种加密解密技术，即恩尼格玛密码机。详细介绍请参考维基百科（如被封请自行学习穿墙技术）：<br><a target="_blank" href="http://en.wikipedia.org/wiki/Enigma_machine">http://en.wikipedia.org/wiki/Enigma_machine</a><br><a target="_blank" href="http://zh.wikipedia.org/wiki/%E6%81%A9%E5%B0%BC%E6%A0%BC%E7%8E%9B%E5%AF%86%E7%A0%81%E6%9C%BA">http://zh.wikipedia.org/wiki/恩尼格玛密码机</a><br><br><img alt="" src="http://upload.wikimedia.org/wikipedia/commons/a/ae/Enigma.jpg"><br>（图片来源：<a target="_blank" href="http://en.wikipedia.org/wiki/File:Enigma.jpg">维基媒体</a>，看不到请翻墙）<br><br>这个密码机实在是加密解密史上的传奇之作，它由德国工程师Arthur Scherbius（亚瑟&#183;谢尔比乌斯）于1918年发明，并于1920年正式投入商业应用。它的强大之处在于，即使你知道它的结构和工作原理，而且能够截获到一些明文和密文，甚至能够得到一台样机（正如波兰早期的工作那样），你仍然无法破解已被加密的信息！其中构思之诡异精巧简直到达了匪夷所思的地步，这绝对是天才的作品！<br><br>然而，世界上没有打不开的锁，Enigma最终还是被破解了，而破解的过程也同样堪称解密史上的巅峰之作，其中涌现出许多闪闪发光的天才人物，包括后来计算机架构的奠基人Alan Turing（阿兰&#183;图灵），他是英国破解小组的核心成员。他研制出来的解密机Bombe（图灵炸弹），极大的提高了解密的效率，详细介绍请参考：<a target="_blank" href="http://en.wikipedia.org/wiki/Bombe">http://en.wikipedia.org/wiki/Bombe</a>。<br><br>Enigma被成功破解的事实，在后来被评价为：为盟军在西欧战场的胜利提前了整整两年。然而，事情到这里并没有结束。的确，到了今天，人们已经非常了解Enigma的加密解密原理，也已经可以很轻松通过软件或硬件方式来模拟它，但并不是所有的Enigma密文都已经被破解了。直到21世纪，仍然有3份截获于二战时期的德军电报无法破解。这三份电报均由Enigma M4（即4转子Enigma机）进行加密，于1942年在北大西洋被盟军截获，并由Ralph Erskine（拉尔夫&#183;厄尔斯金）提交给Cryptologia杂志社。于是，2006年，一小群人发起了一个名为&#8220;<a target="_blank" href="http://www.bytereef.org/m4_project.html">M4</a>&#8221;的项目，企图依靠分布式计算的威力，强行破解这三份&#8220;解密史上的耻辱&#8221;。中文版地址是：<a target="_blank" href="http://www.equn.com/m4/m4_project.html">http://www.equn.com/m4/m4_project.html</a>。<br><br>因为仅有密文，M4采取了暴力破解+爬山优化算法。一开始的进展还算顺利，2006年2月，也就是项目正式开始的一个月之后，第一份电报被破解。而不到一个月之后，第二份电报也告破。两份电报的内容均已被核实，M4项目组的成员在档案馆的德军潜艇U263及U264的日志中查到了相应的文本。第一份电报是一份发自U264的遇敌报告，而第二份则是发自U263的动向报告。破解结果可以在他们网站上查到：<br><a target="_blank" href="http://www.bytereef.org/m4-project-first-break.html">http://www.bytereef.org/m4-project-first-break.html</a><br><a target="_blank" href="http://www.bytereef.org/m4-project-second-break.html">http://www.bytereef.org/m4-project-second-break.html</a><br><br>看起来形势还不错。但事实证明，他们的估计太过于乐观了。2007年，M4加入BOINC项目，命名为Enigma@Home。而直到今天，总计算量已经耗费了超过2233年以上的CPU时间（相对于AMD速龙Athlon 1400处理器），来自大半个世纪前的第3份电报的内容仍然是一个谜。<br><br>这是一场传奇般的&#8220;没有硝烟的战争&#8221;。值得一提的是，其中出现的许多天才人物都在年纪轻轻的时候就已经崭露头角，如Enigma的设计者亚瑟，不到25岁就获得了德国汉诺威技术学院的工程学博士学位；为Enigma破解奠定基础的&#8220;波兰三杰&#8221;，在成功地大量破译Enigma信息时，年龄最大的也只有30岁左右；英国的Enigma破解专家图灵，于26岁获得英国普林斯顿大学博士学位，同年提出Enigma的解密机&#8220;炸弹&#8221;的构想。而当他初次提出现代计算机的架构——图灵机时，图灵只有24岁，还只是一名在校大学生。<br><br>提到这些，我真正想要说明的是，这些大学生们在那个时代起到的作用之巨大。然而今天，让我们回顾中国遍地的大学和大学生们、教授们、院士们，假如同样的时代来临，他们之中有多少人能够发挥像样的作用呢？战争不只是拼肉盾，发展不只是靠口号，人生也不只是狂赚钱。可惜，在整个社会都越发浮躁的今天，&#8220;科学技术是第一生产力&#8221;的言犹在耳，奈何国家的教育经费支出仍然没有达到GDP的2%（日本、以色列等国均在30%以上）。<br><br>废话说完了，谢谢阅读。想参加&#8220;M4&#8221;的，请打开你的BOINC，添加项目Enigma@Home：<br><a target="_blank" href="http://www.enigmaathome.net/">http://www.enigmaathome.net/</a><br><br><br> <img src ="http://www.cnitblog.com/addone/aggbug/61070.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/addone/" target="_blank">Addone</a> 2009-08-29 08:40 <a href="http://www.cnitblog.com/addone/archive/2009/08/29/61070.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获取歌曲封面的Amarok脚本 - AGetCover</title><link>http://www.cnitblog.com/addone/archive/2008/01/22/39200.html</link><dc:creator>Addone</dc:creator><author>Addone</author><pubDate>Tue, 22 Jan 2008 13:40:00 GMT</pubDate><guid>http://www.cnitblog.com/addone/archive/2008/01/22/39200.html</guid><wfw:comment>http://www.cnitblog.com/addone/comments/39200.html</wfw:comment><comments>http://www.cnitblog.com/addone/archive/2008/01/22/39200.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cnitblog.com/addone/comments/commentRss/39200.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/addone/services/trackbacks/39200.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: AGetCover是Amarok的一个通用脚本，主要针对Amarok自身的封面功能的缺点开发。<br><br>&nbsp;&nbsp;<a href='http://www.cnitblog.com/addone/archive/2008/01/22/39200.html'>阅读全文</a><img src ="http://www.cnitblog.com/addone/aggbug/39200.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/addone/" target="_blank">Addone</a> 2008-01-22 21:40 <a href="http://www.cnitblog.com/addone/archive/2008/01/22/39200.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用FluidSynth在Linux下聆听MIDI音乐</title><link>http://www.cnitblog.com/addone/archive/2006/10/18/18094.html</link><dc:creator>Addone</dc:creator><author>Addone</author><pubDate>Wed, 18 Oct 2006 13:17:00 GMT</pubDate><guid>http://www.cnitblog.com/addone/archive/2006/10/18/18094.html</guid><wfw:comment>http://www.cnitblog.com/addone/comments/18094.html</wfw:comment><comments>http://www.cnitblog.com/addone/archive/2006/10/18/18094.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/addone/comments/commentRss/18094.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/addone/services/trackbacks/18094.html</trackback:ping><description><![CDATA[对于Windows用户来说，听midi从来不是什么问题，几乎所有主流的媒体播放器都可以直接支持midi文件的读取和合成。那是因为windows自
带了midi合成器的缘故，虽然效果不怎么样（很多人甚至因此而以为midi音乐的效果也就是这样了&#8230;&#8230;），但至少能听。而且XP中所自带的Roland
合成器的效果也还听得过去。<br>在Linux下，想听midi就没那么方便了，因为缺乏midi的相关知识，很多人甚至都不知道自己需要的是什么，到底是合成器？还是播放器？又或者是midi编辑软件？<br><br>首先大家需要知道的是，midi文件中所包含的内容相当于乐谱，我们首先需要使用播放器将文件的内容读出和解析，再传给合成器/采样器，后者将这些内容通过合成或采样转换为声音信号，再通过底层的音频接口输出到音频输出设备。<br>尽管Linux系统几乎都没有自带midi合成器/采样器，但是在Linux下要播放midi音乐其实也不难，因为在Linux下不仅同样有着许多专业级的midi合成器软件，也有两个著名的大众级软件：Timidity和FluidSynth。<br>Timidity
通常指的是Timidity++，是一个相当出色且易用的合成器/采样器/播放器，还具有几种不错的播放界面以及简单的配置文件。由于它甚至已经自带了一
个比较简陋的音色库，安装好后就已经可以直接播放了。相关的配置方法在网上已经有很多，随便google一下就可以找到一大把，这里就不再详述了。<br>FluidSynth从名字就可以看出，这是一个单纯的合成器/采样器，我们还需要另外安装播放器来播放midi音乐。虽然不如timidity那么简单，但是fluidsynth在资源占用上要比timidity要少，即使是低配置的机器也不容易出现卡的情况。<br><hr size="2" width="100%"><br>首先，我使用的ubuntu linux上默认并没有加载序列器模块（用lsmod命令查看），这样几乎所有的midi相关程序都是无法正常运行的。可以使用以下命令手动加载：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">sudo&nbsp;modprobe&nbsp;snd</span><span style="color: #000000;">-</span><span style="color: #000000;">seq</span><span style="color: #000000;">-</span><span style="color: #000000;">oss</span></div>
<br>需要每次启动自动加载的话，只需修改文件/etc/modules，在其中加入snd_seq_oss一行即可。<br><br>现在，我们需要安装FluidSynth及其GUI配置前端QSynth了。安装完成后，启动qsynth即出现以下界面。<br><img src="http://www.cnitblog.com/images/cnitblog_com/addone/software_midi/qsynth1.png" alt="qsynth1.png" width="789" border="0" height="226"><br><br>如图所示，左边的按钮是引擎控制按钮，右边的则是功能选择按钮。左边的旋钮是主音量增益，中间的旋钮控制回响音效，右边的旋钮控制混响音效。<br><br>由于fluidsynth并没有自带音色库（Soundfont），我们需要另外下载。目前比较常用的有国内的&#8220;短歌行&#8221;62M音色库和Fluid R2或R3版音色库。后者适合内存容量比较大的机器使用。<br>将下载回来的文件解压后（可能需要额外的音色库解压软件）得到sf2格式的音色库文件，放在不含中文名字的路径下。<br>现
在需要用qsynth来配置引擎及加载音色库了。点击左下角的[setup...]按钮，MIDI标签页中，确保勾选了Enable Midi
Input并选择了合适的驱动（一般alsa-seq即可），否则后面会找不到midi输入接口。在Audio标签页中，根据个人情况选择音频驱动即可，
推荐使用jack，用alsa也是可以的。<br><img src="http://www.cnitblog.com/images/cnitblog_com/addone/software_midi/qsynth2.png" alt="qsynth2.png" width="566" border="0" height="435"><br><br>在Soundfonts中，点击[open...]来加载sf2音色库文件。<br>最后，点击[OK]并确认重启Fluidsynth即可。<br><img src="http://www.cnitblog.com/images/cnitblog_com/addone/software_midi/qsynth3.png" alt="qsynth3.png" width="566" border="0" height="435"><br><br>如果一切正常，各个旋钮都可以进入可用状态，这时我们的合成器/采样器和音色库就配置完成了。下面来安装播放器吧，我使用KDE，这里就选用kmid吧。<br>安装好kmid后，在主菜单中选择[设置]-&gt;[MIDI设置]，在midi设备中选择带有"Fluid"的那一项，确定。<br><img src="http://www.cnitblog.com/images/cnitblog_com/addone/software_midi/kmid.png" alt="kmid.png" width="686" border="0" height="515"><br><br>现
在试着打开一个midi文件，播放看看&#8230;&#8230;哈哈，有声音了。嗯，qsynth的界面似乎有点烦人，那么点击面板上的[Options...]按钮打开设置
面板，勾选Enable system tray
icon一项，确定。然后再关闭消息窗口，关闭主窗口。现在，qsynth只呆在右下角的系统托盘上了。在播放音乐的时候，这个图标还会根据节奏闪烁噢！<br><img src="http://www.cnitblog.com/images/cnitblog_com/addone/software_midi/qsynth4.png" alt="qsynth4.png" width="494" border="0" height="319"><br><br>如何？很简单吧？<br><br>不过很遗憾，这种解决方案目前还存在一些小问题，使用时应该注意以下几点：<br>首先，在我的ubuntu上，播放midi经常导致系统死锁，原因暂时不明；<br>其
次，选择fluidsynth对alsa输出时，可能会造成cpu占用率一直100%的现象，这是fluidsynth的一个bug，解决方法是：1.使
用Jack输出；2.在Setup-&gt;Audio标签页中，把Audio Device一项填上hw:0，不过这样就听不到其他程序的声音了&#8230;&#8230;<br><hr size="2" width="100%"><br>
<h3>参考链接</h3>
<a target="" class="" title="" href="http://slack.linuxsir.org/main/?q=node/159">使用Timidity++播放midi音乐 </a><br><br><br>
<h3>音色库下载</h3>
<a target="" class="" title="" href="http://www.audio100.com/">短歌行音乐音频网</a><br><a target="" class="" title="" href="http://www.sf2midi.com/">SF2MIDI.COM（需要注册）</a><br><br><br> <img src ="http://www.cnitblog.com/addone/aggbug/18094.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/addone/" target="_blank">Addone</a> 2006-10-18 21:17 <a href="http://www.cnitblog.com/addone/archive/2006/10/18/18094.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最近开始ArgoUML的简体中文翻译工作</title><link>http://www.cnitblog.com/addone/archive/2006/09/09/16573.html</link><dc:creator>Addone</dc:creator><author>Addone</author><pubDate>Sat, 09 Sep 2006 03:39:00 GMT</pubDate><guid>http://www.cnitblog.com/addone/archive/2006/09/09/16573.html</guid><wfw:comment>http://www.cnitblog.com/addone/comments/16573.html</wfw:comment><comments>http://www.cnitblog.com/addone/archive/2006/09/09/16573.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.cnitblog.com/addone/comments/commentRss/16573.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/addone/services/trackbacks/16573.html</trackback:ping><description><![CDATA[我现在已经是ArgoUML的简体中文本地化项目的开发人员啦～<br>ArgoUML是一个十分优秀的用Java写成的开源的UML建模工具，支持UML 1.4中所有的标准UML图。我在Linux下一般就是用这个。<br><br><img src="http://argouml.tigris.org/images/welcome_screenshot_0_16_1.gif"><br><br>ArgoUML的功能相当不错，画图也十分简便，可惜一直没有中文版，直到0.22版才终于出现了一个十分不完整的繁体中文版。我的目标是在0.23.2之前基本完成简体中文的翻译工作。<br>由于ArgoUML的本地化文件使用的是iso-8859-1编码，因此中文字符只能以unicode的代码写入文件。为了提高效率，我用PyQT写了一个十分简单的工具，用来将utf8格式的字符串转为unicode代码。<br><br><img src="http://www.cnitblog.com/images/cnitblog_com/addone/unicode2ascii.png" alt="unicode2ascii.png" width="608" border="0" height="477"><br><br>有兴趣的朋友可以去访问一下ArgoUML的简体中文本地化项目的网址，在那里可以订阅邮件列表。<br><br><br>
<h3>链接</h3>
<a target="_blank" class="" title="" href="http://argouml.tigris.org/">ArgoUML主页</a><br><a target="_blank" class="" title="" href="http://argouml-i18n-zh.tigris.org/">ArgoUML中文本地化项目（ArgoUML-i18n-zh）主页</a><br><a target="_blank" class="" title="" href="http://argouml-zh-cn.tigris.org/">ArgoUML简体中文本地化项目（ArgoUML-zh-CN）主页</a><br> <img src ="http://www.cnitblog.com/addone/aggbug/16573.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/addone/" target="_blank">Addone</a> 2006-09-09 11:39 <a href="http://www.cnitblog.com/addone/archive/2006/09/09/16573.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>程序员的游戏</title><link>http://www.cnitblog.com/addone/archive/2006/09/02/16280.html</link><dc:creator>Addone</dc:creator><author>Addone</author><pubDate>Fri, 01 Sep 2006 17:41:00 GMT</pubDate><guid>http://www.cnitblog.com/addone/archive/2006/09/02/16280.html</guid><wfw:comment>http://www.cnitblog.com/addone/comments/16280.html</wfw:comment><comments>http://www.cnitblog.com/addone/archive/2006/09/02/16280.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/addone/comments/commentRss/16280.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/addone/services/trackbacks/16280.html</trackback:ping><description><![CDATA[本文的目的在于介绍一类特殊的游戏：编程游戏。<br>这类游戏和大多数战略游戏一样，都提供了一个平台，各种不同的虚拟角色在其中进行角斗士般的竞技比赛。和传
统游戏不同的是，玩家并不能直接操纵这些角色，而是通过编程的方式来创建角色，并将其加载到对战平台中，然后观看它们之间的精彩战斗。 <br>
无疑，这种游戏相当适合编程学习或者竞赛，正因如此，我将它们称为：程序员的游戏。下面将简要介绍三个非常有特色的编程游戏。
<br>
<h3>
1. RoboCode（机器坦克仿真战斗）
</h3>
<br><strong>图1 RoboCode IDE（图片来自IBM eveloperworks）</strong><br><img src="http://www-128.ibm.com/developerworks/cn/java/j-robocode/fig1.gif" border="0"><br><br>
RoboCode无疑是这类游戏中最有影响力和代表性的。Robocode是一个很容易使用的机器人战斗仿真器，可以在所有支持Java2的平台上运行。
开发者们可以创建自己的机器人，把它放到这个平台上，同其他开发者们创建的机器人对手在这个平面上进行战斗。由于在创建机器人的过程中需要加入用户自己独
特的策略代码，因此在战场中你会见到以进攻为重点的机器人，同时也会有以防守为重点的机器人。玩家通过每一次的战斗经历,来了解对手机器人的长处,在不改
变机器人自身特点的情况下，去吸收对手机器人的长处来不断的完善自己的机器人,才能使自己的机器人在战场中立于不败之地。可以说Robocode的诞生为
智能系统的研究提供了一个很好的理论联系实际的实验平台。 <br>
每个Robocode参加者都要利用Java语言元素来创建自己的机器人。Robocode里有一些预先做好的机器人对手让你入门，但一旦您已经不再需要它们了，就可以把您自己创建的机器人加入到正在世界范围内形成的某个联盟里去和世界最强手对阵。
<br>
由于RoboCode本身采用Java开发，因此也是跨平台的，在Windows、Linux、Mac OS上都可以运行。
<br><br><strong>图2 RoboCode在我的Linux系统上运行</strong><br><img src="http://addone.bokee.com/inc/robocode1.png" border="0"><br><br>
RoboCode的中文资料相对来说还是比较丰富的。以前还有个RoboCode中华联盟，不过很可惜，现在似乎已经关闭了。大部分的中文资料都可以在IBM的网站中找到。
<br>
<h3>
2. DroidBattles （战机模拟格斗）
</h3>
DroidBattles在国内的流行程度远不及RoboCode，这可能跟它迟迟没有推出Windows版本有关。不过，这无疑是一款相当有特色的编程游戏。DroidBattles将战斗蔓延到了太空，角色也变成了形态各异的太空战机。
<br>
DroidBattles同样提供了一个完整的IDE环境，非常便于编程和比赛。
<br><br><strong>图3 DroidBattles的IDE环境</strong><br><img src="http://addone.bokee.com/inc/droidbattles1.png" border="0"><br><br>
和RoboCode不同，DroidBattles中的飞机配件要多得多，有CPU、引擎、转向装置、护盾等，当然还有各种各样的武器，每种配件都有5种
级别，根据配件的种类和级别不同，其价格也有很大区别。由于比赛有着战机价格的限制，过于昂贵的战机将无法进入默认的比赛。因此，在编程之前，确定战机的
类型并为其精心选配零件就相当重要了。 <br>
战机的程序需要使用一种汇编语言编制。程序是和所安装的配件直接相关的，程序可以通过战机装配的扫描仪、传感器获取战场信息，然后将指令输出到相应控制或
武器配件。尽管使用的是汇编语言，但由于使用了配件机制，因此战机的程序其实并不难编写。战机的配置和编译环境都在同一个界面中完成。 <br><br><strong>图4 DroidBattles的战机装配开发界面</strong><br><img src="http://addone.bokee.com/inc/droidbattles2.png" border="0"><br><br>
DroidBattles目前支持Linux、Windows两种平台。不过Windows版本仍然处于alpha测试阶段。
<br>
DroidBattles的资料及示例战机可以在官网找到。而且IDE中也自带了详尽的教程。
<br><br><strong>图5 DroidBattles的战斗场面</strong><br><img src="http://addone.bokee.com/inc/droidbattles4.png" border="0"><br><img src="http://addone.bokee.com/inc/droidbattles3.png" border="0"><br><br>
<h3>
3. CoreWar （磁芯大战）
</h3>
和其简单的界面相反，CoreWar有着相当悠久的历史，其最初是于1959在贝尔实验室诞生的，甚至计算机病毒的诞生也和这款游戏有关。磁芯大战运行在
当时被称为Mars是一种简单的计算机上，它有固定的8000个内存单元，和约10来个指令。然后整个大战程序就是由这些指令完成。这款游戏在国外很流
行，其知名度和地位也是非常高的。每年除了会举办各种大小赛事之外，还会组织周年纪念聚会。 <br><br><strong>图6 CoreWar的经典界面</strong><br><img src="http://www.koth.org/pics/pmars.jpg" border="0"><br><br>
CoreWar的战场是一个虚拟机。玩家需要运用许多高深的算法知识编写出自己的&#8220;战士&#8221;。和计算机病毒相似，战士们在虚拟机中或攻击敌人，或占据更多
&#8220;领地&#8221;（内存空间），或守护自己的&#8220;领地&#8221;。比赛以所占领土多少和存活能力强弱决定胜负。这其实就是病毒的雏形（当然似乎某些方面比病毒还厉害），每个
程序为了在内存中保留自己，就必须不断地复制自己，传播自己，同时可以修复被其他程序攻击的部分，当然还进行着破坏。 <br>
CoreWar支持两种类汇编语言：CoreWar和RedCode。每种语言编写的战士都只能和同类的战士交战。由于相对来说比较专业一些，CoreWar&#8220;战士&#8221;的编写难度要比前两款游戏要大不少。
<br><br><strong>图7 众多的&#8220;战士&#8221;</strong><br><img src="http://addone.bokee.com/inc/corwars1.png" border="0"><br><br>
或许是由于其悠久的历史，CoreWar支持的平台也相当多，从Amiga、早期的Macintosh、DOS，到Windows、Linux、Mac OS X都支持。另外，还有Java版本jMars可供下载。
<br>
另外，CoreWar有着相当丰富的赛事（称为Hill），包括世界顶级赛事KOTH（King of The Hill）以及许多世界级锦标赛。 在官网和百科全书上，玩家可以找到各种教程及示例程序。
<br><br><strong>图8 CoreWar的交战场面</strong><br><img src="http://addone.bokee.com/inc/corwars2.png" border="0"><br><img src="http://addone.bokee.com/inc/corwars3.png" border="0"><br><br>
以上介绍的3款游戏都是相当有特色的经典编程游戏，有兴趣的编程初学者或者有经验的编程高手不妨试试。<br><br>
<h3>
参考链接：
</h3>
<a href="http://robocode.sourceforge.net/">RoboCode官方网站</a><br><a href="http://robowiki.net/cgi-bin/robowiki">RoboCode百科全书（Wiki；比赛）</a><br><a href="http://robocoderepository.com/">RoboCode基地（机器人下载；教学；论坛；新闻）</a><br><a href="http://www-128.ibm.com/developerworks/cn/java/j-robocode/">文章：《IBM developerWorks：重锤痛击 Robocode！》</a><br><a href="http://www-128.ibm.com/developerworks/search/searchResults.jsp?searchType=1&amp;langEncoding=UTF8&amp;pageLang=zh&amp;displaySearchScope=javaZ&amp;searchSite=dWChina&amp;lastUserQuery1=%E9%AB%98%E6%89%8B%E7%9A%84%E7%A7%98%E8%AF%80&amp;lastUserQuery2=&amp;lastUserQuery3=&amp;lastUserQuery4=&amp;query=robocode&amp;searchScope=javaZ&amp;x=0&amp;y=0">RoboCode中文资料（IBMdw中国）</a><br><a href="http://www.bluefire.nu/droidbattles/">DroidBattles官方网站</a><br><a href="http://www.bluefire.nu/droidbattles/bots-light-01-06-11.tar.gz">DroidBattles示例战机下载</a><br><a href="http://koth.org/">CoreWar官方网站</a><br><a href="http://www.corewar.info/">CoreWar百科全书（丰富的CoreWar信息、教程及链接）</a><br><a href="http://jan.ucc.nau.edu/%7Ens46/corewar/cwhof.htm">CoreWar名人堂（这些都是世界一流的计算科学家）</a><br><a href="http://www.yixia.net/textinfo.aspx?itemid=9463&amp;cellid=13&amp;thingid=1&amp;noxml=1">有关计算机病毒和CoreWar的一些相关介绍</a><br><a href="http://dev.csdn.net/article/13/13699.shtm">文章：《CSDN：我的第一本磁芯大战书(My First Corewar Book) 第一章》</a><br><a href="http://dev.csdn.net/article/13/13667.shtm">文章：《CSDN：磁芯大战(Core War)的语言Redcode教程》</a><br> <img src ="http://www.cnitblog.com/addone/aggbug/16280.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/addone/" target="_blank">Addone</a> 2006-09-02 01:41 <a href="http://www.cnitblog.com/addone/archive/2006/09/02/16280.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Pyqt在Linux下开发GUI桌面应用</title><link>http://www.cnitblog.com/addone/archive/2006/04/01/8469.html</link><dc:creator>Addone</dc:creator><author>Addone</author><pubDate>Sat, 01 Apr 2006 07:27:00 GMT</pubDate><guid>http://www.cnitblog.com/addone/archive/2006/04/01/8469.html</guid><wfw:comment>http://www.cnitblog.com/addone/comments/8469.html</wfw:comment><comments>http://www.cnitblog.com/addone/archive/2006/04/01/8469.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/addone/comments/commentRss/8469.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/addone/services/trackbacks/8469.html</trackback:ping><description><![CDATA[要在Linux下开发具有图形界面的桌面应用程序，我们有许多选择。当然，除了语言方面的考虑外，我们更多的是考虑窗口部件工具箱（以前称为控件库或组件库）的选择，这将在很大程度上影响我们的开发效率。<br><br>如果考虑到跨平台应用，选择Java的Swing可能非常合适。但是目前的swing尽管很强大也很灵活，我们始终还是会觉得有些不顺手：例如默认的界面不好看也不像本地程序，第三方皮肤又不好找；开发周期相对较长；执行速度相对慢些等等。<br>除了java之外，在Windows下，我们一般可以在MFC（VC）和VCL（Delphi）中作选择（当然还有别的）；在Linux下，我们可以选择QT或GTK。<br><br>QT具有相当不错的架构以及先进的事件处理机制，文档也很齐全，当然还少不了一个功能不错的可视化窗体设计器QtDesigner。著名的桌面环境KDE就是使用qt库进行开发的。<br><a target="_blank" class="" title="" href="http://www.trolltech.com/images/screenshots/qt_designer_windows.png"><img src="http://www.cnitblog.com/images/cnitblog_com/addone/2300/r_qt_designer_windows.png" alt="r_qt_designer_windows.png" width="589" height="480" border="0"></a><br>GTK的架构也不错，不过界面相对而言没有qt的那么炫目。gtk当然也有自己的可视化窗体设计器glade。另一个著名的桌面环境gnome就是使用gtk库进行开发的。另外，gtk也获得了广泛的商业支持。<br><a target="_blank" class="" title="" href="http://glade.gnome.org/graphics/screenshot1.png"><img src="http://www.cnitblog.com/images/cnitblog_com/addone/2300/r_glade1.png" alt="r_glade1.png" width="600" height="480" border="0"></a><br><br>就我个人而言，我更喜欢qt，桌面环境也更喜欢kde，因为界面确实很漂亮，看着养眼；执行效率也很不错。更重要的是，使用qt进行rad快速开发似乎更为方便。<br>可惜在linux下使用c++开发程序并非易事，至少你得先熟悉gnu版本的c/c++库才行。我虽然很希望能使用qt做出漂亮的gui桌面应用，但是面对c++本身的复杂以及完全陌生的函数库，我望而却步。<br>这时，我发现了python。这是一种很简单的脚本语言，其语言特性本身就十分简单易用。更惊人的是，这种语言还可以绑定到多种部件工具箱，包括GTK、QT、MFC、Swing等！而Pyqt就是python和qt部件库的结合。简单易用的python配合强大方便的qtdesigner，我找到了当年在windows下使用vb编程的感觉。<br><br>为了使用pyqt进行编程，首先是安装和配置系统环境。我的环境如下：Kubuntu Linux breezy（5.10）；python 2.4；qt 3.3；pyqt 3.14；KDE 3.5。<br>当然，这样还不够。我们当然可以使用记事本kate来编写代码，但是一款好用的IDE将能够使我们的开发工作事半功倍。我们可以选择KDevelop或者Eric。<br>KDevelop是KDE下老牌的IDE了，支持N多种语言的开发，其中也包括python，还自带了pyqt的示例程序。<br>不过，我还是选择了Eric。Eric是KDE下的python集成开发环境，本身就是用pyqt开发的（由此可以看出pyqt的强大&#8230;&#8230;）。eric同样集成了版本管理系统、项目管理、重构等功能。和kdevelop相比，eric中的源代码分类功能更方便，py脚本、qt窗体、语言包等文件是分类管理的。除了任务窗格外，eric还集成了一个python的shell控制台窗格，显得更加适合开发pyqt程序。<br><a target="_blank" class="" title="eric" href="http://www.cnitblog.com/images/cnitblog_com/addone/2300/o_eric.png"><img src="http://www.cnitblog.com/images/cnitblog_com/addone/2300/r_eric.png" alt="r_eric.png" width="640" height="448" border="0"></a><br>
<h3>一个简单的示例</h3>
下面实验一下，使用Eric 3.7来开发一个简单的Helloworld程序。<br>我们将要使用qtdesigner设计一个窗体，上面放置一个按钮和一个label，点击按钮时显示Hello World，再次点击时则隐藏。<br><br>首先我们需要建立一个新工程。<br>打开Eric后，选择Project-&gt;New，然后是填写工程信息。在Project Name栏中填写工程名称，Prog. Language选择Python，UI Type选择QT，Project Directory中选择工程的目录，其他的几项可填可不填，点击&lt;确定&gt;即可。<br><img src="http://www.cnitblog.com/images/cnitblog_com/addone/2300/o_eric1.png" alt="o_eric1.png" width="489" height="536" border="0"><br><br>接下来Eric会询问新工程要使用什么版本控制系统，这里我们还没用到版本控制，就选&lt;无&gt;吧。<br><img src="http://www.cnitblog.com/WebResource.axd?d=pLXXeGbWF7eXU8SMs2-GFZvUWY2JNH05dFx5YzJhGUYAYJAFEaTEq36NAhTPy7_KekvzDFwt8wvQWdByvJIGWdEq6x2KpKD80&amp;t=632780334337343750" width="1" height="1"><br><img src="http://www.cnitblog.com/images/cnitblog_com/addone/2300/o_eric2.png" alt="o_eric2.png" width="334" height="191" border="0"><br><br>现在要新建一个窗体。在左边的工程浏览器切换到窗体标签页，在右键菜单中选择&lt;New Form&gt;。<br><img src="http://www.cnitblog.com/images/cnitblog_com/addone/2300/o_eric3.png" alt="o_eric3.png" width="286" height="269" border="0"><br><br>Eric会询问新窗体的类型，简单起见，我们选择&lt;Dialog&gt;，点击&lt;确定&gt;后输入新窗体的文件名HelloDialog并点击&lt;保存&gt;。<br><br>这时Eric会启动窗体设计器QTDesigner（我系统上用KDevDesigner代替了）并打开新窗体。<br>QtDesigner的使用相当简单，相信用过delphi或者vb的朋友都不会陌生。这里就不详述其用法了。<br>在窗体上加入一个PushButton和一个TextLabel，各部件属性设置如下：<br>
<table border="1">
    <tbody>
        <tr>
            <td>部件</td>
            <td>属性</td>
            <td valign="top">值<br></td>
        </tr>
        <tr>
            <td valign="top">Form<br></td>
            <td valign="top">name<br></td>
            <td valign="top">helloForm<br></td>
        </tr>
        <tr>
            <td valign="top"><br></td>
            <td valign="top">caption<br></td>
            <td valign="top">Pyqt示例<br></td>
        </tr>
        <tr>
            <td valign="top">TextLabel<br></td>
            <td valign="top">name<br></td>
            <td valign="top">helloText<br></td>
        </tr>
        <tr>
            <td valign="top"><br></td>
            <td valign="top">text<br></td>
            <td valign="top">Hello, world!<br></td>
        </tr>
        <tr>
            <td valign="top">PushButton<br></td>
            <td valign="top">name<br></td>
            <td valign="top">showHelloButton<br></td>
        </tr>
        <tr>
            <td valign="top"><br></td>
            <td valign="top">text<br></td>
            <td valign="top">打个招呼(&amp;H)<br></td>
        </tr>
    </tbody>
</table>
调整部件的位置和大小，如图所示。<br><img src="http://www.cnitblog.com/images/cnitblog_com/addone/2300/o_eric6.png" alt="o_eric6.png" width="249" height="116" border="0"><br><br>QT库中的事件处理使用的是信号/插槽(Signal/Slot)机制，现在我们需要准备自定义的事件处理插槽。<br>在主菜单选择Edit-&gt;Slots，点击&lt;New Function&gt;来新建一个插槽函数toggleHelloTextVisibility()。<br><img src="http://www.cnitblog.com/images/cnitblog_com/addone/2300/o_eric4.png" alt="o_eric4.png" width="608" height="405" border="0"><br><br>接着就要将按钮的点击信号连接到这个插槽上。在主菜单选择Edit-&gt;Connections，新建一个连接。<br>Sender选择showHelloButton，Signal选择clicked，Receiver选择helloForms，Slot就选择刚刚新建的插槽函数toggleHelloTextVisibility，点击&lt;确定&gt;即可。<br><img src="http://www.cnitblog.com/images/cnitblog_com/addone/2300/o_eric10.png" alt="o_eric10.png" width="565" height="292" border="0"><br><br>好了，窗体制作完成啦，现在按Ctrl+S保存吧。<br>现在回到Eric中，我们会看到新建的窗体HelloDialog.ui已经出现在窗体标签页中了。<br>要把窗体文件编译为一个python单元，我们需要使用pyuic命令。而当未来窗体文件发生改变时，eric可以自动运行pyuic命令来更新相应的python单元。因此，我们不能直接修改生成的python单元，而需要继承它。<br>在Eric中，这一切都很简单。首先选中这个窗体，在快捷菜单中选择Compile Form，Eric会自动编译窗体，并将生成的窗体单元加入到工程中。然后我们要继承它，在快捷菜单中选择Generate Subclass，输入子类名并确定。<br><img src="http://www.cnitblog.com/images/cnitblog_com/addone/2300/o_eric5.png" alt="o_eric5.png" width="358" height="143" border="0"><br><br>在新的子类单元中，找到插槽函数toggleHelloTextVisibility，修改如下：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;toggleHelloTextVisibility(self):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(self.helloText.isVisible()):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.helloText.hide()<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.helloText.show()</span></div>
<br>然后按Ctrl+S将子类保存到工程目录下，命名为HelloForm_Impl.py。<br>在工程浏览器中选择源代码（Sources）标签页，可以看到窗体单元HelloDialog.py已经在工程中了，但新的子类单元还不在其中，我们需要将其手动加入。<br>在工程浏览器的快捷菜单中选择&lt;Add source file&gt;，并选择刚才建立的子类单元HelloForm_Impl.py，确定即可。<br><img src="http://www.cnitblog.com/images/cnitblog_com/addone/2300/o_eric7.png" alt="o_eric7.png" width="399" height="175" border="0"><br><br>下面我们还需要一个启动单元作为工程的主单元。当然，直接把这些代码放在HelloForm_Impl.py中也是可以的，不过为了清晰起见，我们最好还是另外建立一个启动单元。<br>按Ctrl+N来建立一个新文件，在其中输入以下代码：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">#</span><span style="color: #008000;">!/usr/bin/env&nbsp;python</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;sys<br></span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;qt&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">from</span><span style="color: #000000;">&nbsp;HelloForm_Impl&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;HelloForm_Impl<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #0000ff;">def</span><span style="color: #000000;">&nbsp;main(args):<br>&nbsp;&nbsp;&nbsp;&nbsp;app</span><span style="color: #000000;">=</span><span style="color: #000000;">QApplication(args)<br>&nbsp;&nbsp;&nbsp;&nbsp;window</span><span style="color: #000000;">=</span><span style="color: #000000;">HelloForm_Impl()<br>&nbsp;&nbsp;&nbsp;&nbsp;window.show()<br>&nbsp;&nbsp;&nbsp;&nbsp;app.connect(app,SIGNAL(</span><span style="color: #800000;">"</span><span style="color: #800000;">lastWindowClosed()</span><span style="color: #800000;">"</span><span style="color: #000000;">),app,SLOT(</span><span style="color: #800000;">"</span><span style="color: #800000;">quit()</span><span style="color: #800000;">"</span><span style="color: #000000;">))<br>&nbsp;&nbsp;&nbsp;&nbsp;app.exec_loop()<br>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">__name__</span><span style="color: #000000;">==</span><span style="color: #800000;">"</span><span style="color: #800000;">__main__</span><span style="color: #800000;">"</span><span style="color: #000000;">:<br>&nbsp;&nbsp;&nbsp;&nbsp;main(sys.argv)<br></span></div>
<br>以上代码创建了一个QApplication对象，并将我们的HelloForm_Impl类作为其主窗体显示，当主窗体关闭时退出程序。<br>按Ctrl+S将新文件保存为SayHello.py，然后把它加入到工程中。<br>从主菜单中选择 Project-&gt;Properties 打开工程属性对话框，将其中的主单元（Main Script）一项改为SayHello.py。<br><img src="http://www.cnitblog.com/images/cnitblog_com/addone/2300/o_eric8.png" alt="o_eric8.png" width="475" height="33" border="0"><br><br>现在，按下Shift+F2来运行一下看看最终效果吧！点击按钮即可切换Label的显示状态。<br><img src="http://www.cnitblog.com/images/cnitblog_com/addone/2300/o_eric9.png" alt="o_eric9.png" width="249" height="126" border="0"><br><br>
<h3>小结</h3>
呵呵，怎么样，是不是很有VB的感觉呢？从这个简单的例子就可以看出，Pyqt用于RAD开发GUI桌面应用是相当不错的，至少比Java、C++都要简单得多。除了能够使用python本身的系统函数之外，我们还可以直接调用qt的各种类，也能借助qt的信号/插槽机制轻松实现事件处理。<br>另外，我们还可以借由pyqt开发原型程序，在正式版开发时可以很轻松的将其转换为C/C++程序。<br><br>不过，由于绑定了qt库，pyqt在跨平台运行时，就要求目标平台必须安装有qt运行库。这也就是和java相比的一个不足之处了。<br><br>
<h3>参考资料</h3>
<a target="_blank" class="" title="" href="http://python.cn/">中国Python社区</a><br><a target="_blank" class="" title="" href="http://glade.gnome.org/">GTK可视化窗体设计器Glade官方网站</a><br><a target="_blank" class="" title="" href="http://www.trolltech.cn/products/qt/index.html">QT官方网站</a><br><a target="_blank" class="" title="" href="http://www.die-offenbachs.de/detlev/eric3.html">Eric Python集成开发环境官方网站</a><br><br><a target="_blank" class="" title="" href="http://cn.diveintopython.org/">《Dive Into Python》简体中文版</a><br><a target="_blank" class="" title="" href="http://www.commandprompt.com/community/pyqt/">《GUI Programming with Python: QT Edition》：Pyqt编程指南</a><br><br><br> <img src ="http://www.cnitblog.com/addone/aggbug/8469.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/addone/" target="_blank">Addone</a> 2006-04-01 15:27 <a href="http://www.cnitblog.com/addone/archive/2006/04/01/8469.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用CVS及其图形化客户端进行文件版本控制的操作简介</title><link>http://www.cnitblog.com/addone/archive/2006/03/19/7787.html</link><dc:creator>Addone</dc:creator><author>Addone</author><pubDate>Sun, 19 Mar 2006 15:09:00 GMT</pubDate><guid>http://www.cnitblog.com/addone/archive/2006/03/19/7787.html</guid><wfw:comment>http://www.cnitblog.com/addone/comments/7787.html</wfw:comment><comments>http://www.cnitblog.com/addone/archive/2006/03/19/7787.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/addone/comments/commentRss/7787.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/addone/services/trackbacks/7787.html</trackback:ping><description><![CDATA[旧文章，写于2004年10月13日。<br><hr size="2" width="100%"><br>在过去的开发中，尽管借助了XP方法的一些思想，但在代码、文档的版本控制方面依然相当脆弱，需要花费相当的时间来手动进行版本管理。最近在一个项目开发中，受开源项目的启发，采用了CVS来进行版本管理。<br>
CVS即Concurrent Versions System，协同版本系统，用于对源码、文档等文件进行版本控制。不少著名的开源软件都是采用这个系统进行版本管理。其具有冲突控制、EMail通知、变更日志、版本恢复等诸多实用功能。CVS采用的是C/S结构，服务器端和客户端都有Windows版和Linux版。<br>
笔者采用了Linux系统作为CVS服务器，用Cervisia（KDevelop自带）作为Linux的客户端，用WinCVS（中文版）作为Windows客户端。<br><br><br>1.CVS服务器的配置<br>
获取：在Linux下可以通过访问<a href="https://www.cvshome.org/">https://www.cvshome.org</a>来下载CVS服务器端，也可以通过APT或者APT for RPM来下载并安装CVS。<br><br>
配置：首先必须启用XINETD服务，然后在XINETD的配置中启用cvspserver这个服务。启动参数：-f --allow-root=／PATH／TO/YOUR/CVSROOT pserver。--allow-root是CVS目录，该目录必须对于登录用户有读写权限，这样在客户端就可以用此帐号登录并读写此目录。其他配置全部按照默认即可。<br>
重启机器后（在SuSE下可以直接点［ON］来启动，不需重启）CVS服务器就已经被激活了。<br><img src="http://addone.blogchina.com/addone/inc/20041013014631555683.png"><br>
2.Cervisia的配置<br>
获取：如果已经安装了KDevelop3.1，那么Cervisia2.1就已经一起安装并集成到文件管理器中了，这时在Konqueror的工具栏中可以找到［Cervisia］按钮，当本地目录存在CVS数据时，点击此按钮即可转变为CVS视图。<br><br>
配置仓库：在菜单中选择［仓库］-&gt;［仓库］，点［添加］，在［仓库］中填入：pserver:/$user@$host:/$path，其中$user指要登录的用户名；$host指服务器的地址，用域名或IP均可；$path指cvsroot目录位置，应该与第一步指定的路径一致。点［确定］完成仓库创建。<br><br>
登录：选中刚才创建的仓库，点［登录］并输入密码，若输入正确，则系统会自动登录到CVS服务器上，并且将密码保存到当前用户的配置目录下，将来如果没有改动，就不再需要输入密码了，这点应该注意一下。<br><br>
打开CVS文件夹：所谓CVS文件夹，是指从CVS检出到本地的工作文件夹，其中的每个目录都会有一个CVS子目录，那是用于版本管理的。从菜单-&gt;［文件］-&gt;［打开沙箱］中选择一个CVS文件夹，则主视图中就会列出该文件夹中所有文件的版本状态。<br><br>
基本操作：建议打开文件状态的自动更新功能。方法：［设置］-&gt;［配置Cervisia］，然后如下图设置。<br><img src="http://addone.blogchina.com/addone/inc/20041013014543108749.png"><br>
根据文件的状态来选择各项操作，如果是［Up to date］，则说明已是最新版本；若是［需要更新］，则说明服务器的版本较新，需要用［更新］功能；若是［已更改］，说明本地文件版本较新，需要［提交］。<br><img src="http://addone.blogchina.com/addone/inc/2004101301455435688.png"><br>
3.WinCVS的配置<br>
与Cervisia大同小异，这里就不再赘述了。值得一提的是，配置里提到的HOME目录，指的就是用来保存WinCVS配置及CVS用户密码的目录，一般用［我的文档］即可。<br><br>
流程概述：<br>
首先由任一客户端建立工程，然后用［导入］功能导入到CVS仓库中。其他客户端用［检出］功能来检出仓库中的模块到本地的工作目录。<br><br>
任何用户修改了源代码后，用［添加］、［提交］或［删除］功能来进行源码修改。<br>
如果发生冲突（即同一版本号的文件有两个人提交，但是内容不同），则用［比较］及［解决冲突］功能来解决冲突。<br><img src="http://addone.blogchina.com/addone/inc/20041013014622835313.png"><br>
其他用户可以用［更新］功能来获取最新的源码，用［浏览日志］功能查看版本历史及图形。<br><img src="http://addone.blogchina.com/addone/inc/20041013014602490312.png"><br>
可以配置CVS的Trigger，以实现EMail的自动寄送。也可以通过配置CVS客户端为自动更新文件状态，这样即可及时知道源码的当前状况而不需首先使用［更新］。<br><br>
除了CVS之外，其他著名的版本控制系统还有微软的VSS（Visual Source Safe）和号称CVS接班者的SVN(SubVersion)等等。VSS在企业开发中也具有相当不错的效果，而SVN相比CVS则确实有了功能上的改进。有关这些版本控制系统的比较，可以参考<a href="http://better-scm.berlios.de/comparison/comparison.html"> 这里的文章 </a>。<br><br>
软件下载地址：<br>
CVS：<a href="https://ccvs.cvshome.org/">https://ccvs.cvshome.org/</a><br>
Cervisia：<a href="http://www.kde.org/apps/cervisia/">http://www.kde.org/apps/cervisia/</a><br>
WinCVS：<a href="http://www.8848software.com/wincvs/"> 中文版 </a><a href="http://publishblog.blogchina.com/control/blog/www.wincvs.org"> 英文原版 </a><br> <img src ="http://www.cnitblog.com/addone/aggbug/7787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/addone/" target="_blank">Addone</a> 2006-03-19 23:09 <a href="http://www.cnitblog.com/addone/archive/2006/03/19/7787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Sun JRE 1.5.0版的中文字体设置</title><link>http://www.cnitblog.com/addone/archive/2006/03/19/7786.html</link><dc:creator>Addone</dc:creator><author>Addone</author><pubDate>Sun, 19 Mar 2006 15:02:00 GMT</pubDate><guid>http://www.cnitblog.com/addone/archive/2006/03/19/7786.html</guid><wfw:comment>http://www.cnitblog.com/addone/comments/7786.html</wfw:comment><comments>http://www.cnitblog.com/addone/archive/2006/03/19/7786.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/addone/comments/commentRss/7786.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/addone/services/trackbacks/7786.html</trackback:ping><description><![CDATA[旧随笔，写于2004年10月29日。<br><hr size="2" width="100%"><br>Sun公司的JRE(JAVA运行库)1.5.0版采用的字体设置方案跟1.4.2版的相去甚远。如果设置不当，Java程序中的中文会表现为方格。<br>
本文给出了一般性的字体设置方法。<br><br>    首先介绍一下其字体配置文件的加载方案。其加载顺序为（JavaHome指JRE的根目录，下同）：<br>
JavaHome/lib/fontconfig.OS.Version.properties<br>
JavaHome/lib/fontconfig.OS.Version.bfc<br>
JavaHome/lib/fontconfig.OS.properties<br>
JavaHome/lib/fontconfig.OS.bfc<br>
JavaHome/lib/fontconfig.Version.properties<br>
JavaHome/lib/fontconfig.Version.bfc<br>
JavaHome/lib/fontconfig.properties<br>
JavaHome/lib/fontconfig.bfc<br>
其中，OS字段可以是：<br>
Windows： "98", "2000", "Me", "XP", "2003"。<br>
Solaris：空。<br>
Linux： "Sun", "RedHat", "Turbo", "SuSE"。<br>
而Version字段指该OS的版本号。<br><br>
在这些配置文件中，仅.properties文件是文本文件。其格式跟JRE1.4.2版的不同。文件分为几段，并在每段开始时标明。<br>
我们需要关注的仅有两段：Component Font Mappings和Search Sequences。<br>
前者指定字体，后者指定要使用的properties的搜索顺序。<br>
知道了这些，配置起来就简单了。<br><br>
首先，必须先把字体文件（这里用宋体Simsun.ttf）拷贝到JRE的字体目录JavaHome/lib/fonts下，然后编辑字体目录下的文件fonts.dir，把第一行的数字加1，然后在最后加一行，写上：<br>
simsun.ttf -SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br>
然后保存。<br><br>
然后，转到目录JavaHome/lib下，随便找一个.properties.src文件，用文本编辑器打开，并编辑如下：<br><br>
# @(#)linux.fontconfig.SuSE.properties    1.2 03/10/17<br>
#<br>
# Copyright 2003 Sun Microsystems, Inc. All rights reserved.<br>
#<br><br>
# Version<br><br>
version=1<br><br>
# Component Font Mappings<br><br>
serif.plain.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br>
serif.bold.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br>
serif.italic.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br>
serif.bolditalic.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br>
sansserif.plain.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br>
sansserif.bold.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br>
sansserif.italic.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br>
sansserif.bolditalic.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br>
monospaced.plain.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br>
monospaced.bold.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br>
monospaced.italic.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br>
monospaced.bolditalic.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br>
dialog.plain.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br>
dialog.bold.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br>
dialog.italic.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br>
dialog.bolditalic.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br>
dialoginput.plain.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br>
dialoginput.bold.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br>
dialoginput.italic.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br>
dialoginput.bolditalic.zh-1=-SungtiL GB-medium-r-normal--0-0-0-0-c-0-gb2312.1988-0<br><br>
# Search Sequences<br><br>
sequence.allfonts=zh-1<br><br>
# Exclusion Ranges<br><br>
# Font File Names<br><br>
然后按照上面所述的文件名格式保存在这个目录下。如Redhat系统的就保存为fontconfig.RedHat.properties，
WindowsXP的就保存为fontconfig.XP.properties，以此类推。<br><br>
现在，启动Java程序看看，漂亮的JRE1.5的中文界面是不是出来了？<br><br>
<h3>
参考资料<a href="http://blog.blogchina.com/upload/2004-10-29/20041029103119811400.gz" target="_blank"></a></h3>
<br>
Sun公司对JRE1.5.0版的中文字体设置的官方说明：<br><a href="http://java.sun.com/j2se/1.5.0/docs/guide/intl/fontconfig.html" target="_blank">http://java.sun.com/j2se/1.5.0/docs/guide/intl/fontconfig.html</a> <img src ="http://www.cnitblog.com/addone/aggbug/7786.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/addone/" target="_blank">Addone</a> 2006-03-19 23:02 <a href="http://www.cnitblog.com/addone/archive/2006/03/19/7786.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>