那就這麼作吧!
// 首先當然是關掉你要測的那個程式, 別忘了先把重要資料存檔
# killall -9 firefox-bin
// 呼叫 sync 把重要資料寫入硬碟
# sync
// 然後清掉 buffer/cache
# echo 3 > /proc/sys/vm/drop_caches
// 重新啟動(Enjoy the waiting :P )!
$ firefox
那就這麼作吧!
// 首先當然是關掉你要測的那個程式, 別忘了先把重要資料存檔
# killall -9 firefox-bin
// 呼叫 sync 把重要資料寫入硬碟
# sync
// 然後清掉 buffer/cache
# echo 3 > /proc/sys/vm/drop_caches
// 重新啟動(Enjoy the waiting :P )!
$ firefox
奇怪,怎麼都沒人想到呢?
先前提到說,適當的將檔案系統壓縮,可以提高磁碟的存取效率 - 尤其是 CPU 速度與 IO 速度差很多的時候。雖然沒有完整的數據顯示到底快多少,不過 RANMA K 兄有初步的測試過不壓縮與壓縮時的寫入、讀取速度。況且還有個良好的副作用 - 同樣大的硬碟空間裡,可以裝的東西更多了,而且完全不會變重!
根據用屁股思考就可以領悟的常識,我們知道:
所以,希望有一種檔案系統的,會根據檔案的狀態來選擇性的壓縮檔案,大概像這樣:
當然,這個檔案系統要有現代檔案系統該有的功能,例如:
如果有相關的資料或論文,還請不吝留個言... 多謝!
過年嘛,總是要掃除一下。雖然我沒有想要打掃的意思,但是還是把櫃子裡的東西拿出來,東翻翻西翻翻以後再放回去,假裝有整理過些什麼。
翻一翻,找到了國小五年級的作文簿!真感謝我媽沒把他當資源垃圾拿去回收,讓我看到我以前有多麼無厘頭。下面還只是其中一篇(其實我懶得打字,而且其他幾篇寫的還蠻丟臉的 |||>_<b)...
冬天
今天是冬天。(啊!說錯台詞!?現場直播!不能改了。繼續編下去吧!)那一顆松是在搖。對,他在姚。它是咖啡色的,葉子也是。很醜。對!很... 什麼?很醜?你... 算了。我有一個故事,我們來分享一下:
在一個大雪紛飛的冬天,在那個森林裡...。「那個」森林是什麼東東?就是「這個」森林!有一對父子,在打獵。嗯!廁所在哪裡。廁所?你說「廁所」做什麼?你「嗯!」不是要「便」魔術嗎?你不必管!繼續說!經過一天,也打不到東西,卻在森林中迷路了。在那時,他們看到一間小屋,就近去了。這時,他們因為很累,就睡了下來。到了半夜,兒子看到了一個「石膏色」的女人,從們旁邊的牆中飛了進來。向他爸爸吹了一口氣。他爸爸的血液就結冰了!雪女說:「我不要你的命。但是你把今天的事情說出去,你也是我牙下的客人。」說完,就走了。這個小男孩長大以後,在十二月十二日的晚上十二點十二分十二秒,遇到了一個名叫「小雪」的女孩。這個小男孩就和這女孩結婚了。在洞房的那一天,那個小男孩說:「我...,」那小雪的眼睛為之一亮!「就是『怪歐吉桑』!」結果,在外面的爸爸靈魂跌了一跤「掉」進來,這場戲再也演不下去了。
完!
現在看看,發現...
PS. 『怪歐吉桑』是志村大爆笑裡,由志村健飾演的那個怪叔叔。
最近獨孤木前輩弄了個 Diggirl.Net 出來,服務的內容... 恩... 連過去玩一圈就知道了。於是,就搞得一些相簿的主人不開心了!
其實,我也認為任何資料只要放到網路上(應該說,資料公開以後),就不能再做什麼進一步的禁止行為了。因為網路本身是一種類似「群播(broadcast)」的機制,放出去的東西就是放出去了,沒什麼好限制的。就好像你想到台北車站前面大喊「我腦殘啊!」,卻又不想讓任何人聽到,是不可能的事情一樣。所以,圖片如果不想流出去,就好好收在自己的硬碟裡吧!
Okay... 以上是前言,接下來進入我實際想到的東西。
也許,在某些時候,你會希望能在相簿上分享某些圖片,卻又只想給指定的某些人看到。其實有很多 PKI 早已行之有年,也在很多關鍵應用上扮演重要的角色。所以,應該也可以應用到這個狀況上來!
讓我們拿 Alice 跟 Bob 來當例子,他們是我眾多虛擬朋友中的兩位:
Alice 想傳一些裸照給 Bob,可是又怕被別人看。因為有幾萬張照片要傳,用 email 又太花時間了。於是,她決定選用由 Palatis Inc. 所開發的圖片加密函式庫!
首先,他使用程式提供的兩套軟體,產生適當的 keypair,並使用該 keypair 將資料加密:
- 使用函式庫提供的 keygen 產生 keypair (pubkey, prikey)
- 將自己的裸照 (naked*.{jpg,png,gif,bmp,tiff, ... }) 經程式轉為 bitmap (naked*.bmp),並使用 pubkey 加密以後,轉回 png 一類非破壞性壓縮的圖檔 (naked*_secured.png)。於是,轉出來的東西用其他圖形函式庫看起來,就像是白胡椒鹽撒在黑胡椒鹽(... 總之就是胡椒鹽)上一樣。
再來,將這些胡椒鹽照片傳送到適合大量下載的網路空間(如網頁、相簿、ftp、bt)上。
使用另外的管道(如 email)將 prikey 送給 Bob,並祈求 Bob 不會把她的裸照洩漏出去。當然,該 email 會用其他軟體(如 GnuPG)加密。(或簽章,否則 Bob 可能也不知道收到的是否真的是 Alice 的裸照。)
Bob 本來去 Alice 的相簿看到的只是一堆胡椒鹽的裸照,但是當他拿到 Alice 送來的 prikey 以後,世界頓時亮了起來!
- Bob 把 Alice 給他的 prikey 放到函式庫搜尋 key 的資料夾(如 /home/bob/.libsecreatpic/received_keys/)底下。
- 然後用他心愛的網頁瀏覽器(順便廣告一下 Firefox!)開啟 Alice 的相簿。
Yeah~胡椒鹽都不見了,取而代之的,是 Alice 性感火辣(?)的曲線!
至於實做細節的部份,因為沒空,所以以後再想 *flee*。
之前提到我們學校某教授在個人網頁上弄了這個東西,今天又因緣際會的去到了他的網站。耶~他把那篇文章拿掉了耶!
可是... 直接輸入 http://seafood.csie.cyut.edu.tw/seafood/HSIEN.htm 的話,還是連的到說... 因為看起來的跟之前一樣,所以就不重複貼了。
恩... 這就是所謂的「眼不見為淨」嗎?
赫然發現我的 Linux 還在用舊的 ATA Subsystem,而使用 SCSI Layer 的 libATA 已經出來很久了!
所以,今天來升級!
因為我是個懶得作 initrd 的懶人,所以底下的支援都編進核心。如果您要編譯成模組,則必須自己想辦法作 initrd。
Device Drivers --->
SCSI device support --->
<*> SCSI disk support
Serial ATA (prod) and Parallel ATA (experimental) drivers --->
<*> ATA device support
// 這邊請選與您 IDE 晶片對應的驅動程式
<*> ATI PATA support (Experimental)
<*> Generic ATA support
然後去 /boog/grub/grug.conf 與 /etc/fstab 或其他設定檔中,把用到 hdXY 的地方統統改成 sdXY 就可以了!
不知道用新的 ATA Layer,會不會有感覺得到 performance boost?
sdparm 的使用方法徵求中!
/***********************************
大肥警告!
Big Fat Warning!
這篇文章裡提到的技術可能讓您的資料爆炸,請斟酌使用!
The techniques introduced in this article may blow your data, use them at your own risk!
***********************************/
最近總覺得硬碟很慢... 應該說,作一些需要磁碟 I/O 的動作的時候,感覺硬碟一直嘎啦嘎啦的上氣不接下氣。所以有了這樣的想法:
既然如此,何不適當的要求 CPU 作多一點計算,減少磁碟 I/O 呢?於是就想到要壓縮檔案系統。
可是... 要怎麼壓縮呢?可以從兩個地方著手:
我的想法是,我是要來增進磁碟效能的,所以不應該搞一大堆間接層來拖慢系統速度,所以 cloop 那種東西就根本不考慮了。後來又想從 Block Device Level 來做的,可是 dm-crypt 與 cryptsetup-luks 非常悲慘,還真的只能作 CRYPTographic,沒辦法做 COMPRESSion。我嘗試用 cryptsetup -c lzf luksFormat 來建立 lzf compressed block device,可是殘念的失敗了 XD~
於是,只好讓 Filesystem 來壓啦!可是 jffs2 的間接更多,必須先有個 loopfile map 到 mtd(Memory Technology Device)上,再 mount mtdblock 來用。處理起來速度比沒壓縮的 ext3 還慢,所以... 還是算了吧!而 ext2compr 這個東西實在太老了,只有在 google 搜尋的時候隱約發現他的蹤跡,可是真的想要找 howto 的時候卻什麼也找不到。所以... 這個也算了吧 = =
最後的救星是 Reiser4 的 Cryptcompress plugin,也是要 patch kernel source,也要升級 reiser4progs。
安裝的方法比想像中簡單的多。首先,你需要一個支援 Reiser4 與 cryptcomress 的 kernel,再來就是支援 cryptcompress 的 {mkfs,fsck,debugfs,measurefs}.reiser4。讓我們從 kernel 開始:
// 如果您已經有裝 app-portage/layman,可以省略這個步驟:
# emerge app-portage/layman
// 如果您已經有加入該 custom-kernels overlay,可以省略這個步驟:
# layman -a custom-kernels
// 最後,這是支援 reiser4 與 cryptcompress 的 kernel:
# emerge sys-kernel/beyond-sources
然後,在 make *config 的時候,把 reiser4 support 打開(廢話!),編譯您的新 kernel,然後用它開機。
再來是 userspace tools - 新版的 reiser4progs。這個我沒有找到任何 overlay 裡面有(其實它也還沒有正式 release),所以先貼在這吧!
# Copyright 1999-2006 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-fs/reiser4progs/reiser4progs-1.0.5.ebuild,v 1.5 2006/08/20 21:23:43 vapier Exp $
inherit toolchain-funcs
MY_P=${PN}-${PV/_p/-}
DESCRIPTION="reiser4progs: mkfs, fsck, etc..."
HOMEPAGE="http://www.namesys.com/v4/v4.html"
#SRC_URI="ftp://ftp.namesys.com/pub/reiser4progs/${MY_P}.tar.gz"
SRC_URI="ftp://ftp.namesys.com/pub/tmp/cryptcompress/2.6.19-rc4-mm1/${MY_P}.tar.gz"
LICENSE="GPL-2"
SLOT="0"
#KEYWORDS="amd64 ppc ppc64 -sparc x86"
KEYWORDS="~amd64"
IUSE="static debug readline"
DEPEND=">=sys-libs/libaal-1.0.5
readline? ( sys-libs/readline )"
S=${WORKDIR}/${MY_P}
src_unpack() {
unpack ${A}
cd "${S}"
# bundled libtool sucks, so rebuild autotools #74817
aclocal && libtoolize -c -f && autoconf && automake || die "autotools failed"
cat <<-EOF > run-ldconfig
#!/bin/sh
true
EOF
}
src_compile() {
econf \
$(use_enable static full-static) \
$(use_enable static mkfs-static) \
$(use_enable static fsck-static) \
$(use_enable static debugfs-static) \
$(use_enable static measurefs-static) \
$(use_enable static cpfs-static) \
$(use_enable static resizefs-static) \
$(use_enable debug) \
$(use_with readline) \
--enable-libminimal \
--sbindir=/sbin \
|| die "configure failed"
emake || die "make failed"
}
src_install() {
make DESTDIR="${D}" install || die
dodoc AUTHORS BUGS CREDITS ChangeLog NEWS README THANKS TODO
#resizefs binary doesnt exist in this release
rm -f "${D}"/usr/share/man/man8/resizefs*
# move shared libs to /
dodir /$(get_libdir)
mv "${D}"/usr/$(get_libdir)/lib*.so* "${D}"/$(get_libdir)/ || die
gen_usr_ldscript libreiser4-minimal.so libreiser4.so librepair.so
}
把這個檔案放到 /usr/local/portage/sys-fs/reiser4progs/reiser4progs-1.0.6.ebuild,然後...
# cd /usr/local/portage/sys-fs/reiser4progs
# ebuild reiser4progs-1.0.6.ebuild digest
# emerge reiser4progs -va
編完以後,就可以來作新的分割區了!別忘了將各參數改成您的設定。
// 先將檔案備份起來
# cd /
# tar cp /path/to/mounted_dir > /path/to/backup_file.tar
// 卸載檔案系統
# umount /dev/hdXY
// 建立檔案系統(使用 lzo 壓縮演算法)
# mkfs.reiser4 -o create=ccreg40 /dev/hdXY
// 建立檔案系統(使用 gzip 壓縮演算法,較耗費 CPU)
# mkfs.reiser4 -o create=ccreg40,compress=gzip1 /dev/hdXY
// 掛載檔案系統
# mount /dev/hdXY
// 還原備份檔
# cd /
# tar xf /path/to/backup_file.tar
# sync
在 umount 之前可以先 df 紀錄用掉的空間,跟改用 cryptcompress 以後比較看看。我的狀況是 855M 變成 524M,省了 331M 的空間。
webSnarp 2.0 是個提供網頁預覽圖服務的網站,詳情請上該網站去了解... 底下有提供一些小玩具,可以在網頁上加上一些特殊功能,讓滑鼠經過連結的時候跳出該連結的預覽圖。
但是我試圖將它套用在 Blogger 上的時候,若是想在以前的文章上也套用該功能,就必須去修改之前的所有文章。想當然我沒那麼勤勞,所以就把其中 Link Preview V2 提供的 JavaScript 改了一下,放在這裡,有需要的人可以去下載來用。
不過有一點需要注意,因為是寫來套用在 Blogger Beta 上的舊文章的,所以我讓他掃描所有的網址,並依照一定的規則排除要跳出預覽圖的網址。詳情請見 websnapr.js 內的「excludeDomains」與「excludeExtensions」兩個變數。
這是適合 Blogger beta 的版本,請不要套用在其他地方。安裝的步驟如下:
<style media='screen' type='text/css'>@import "[您的網頁空間]/websnapr.css";</style>
<script src='[您的網頁空間]/websnapr.js' type='text/javascript'/>
去 COSCUP 2006 晃了一圈回來,感覺功力增進了不少!不同於那個偽.OSS 社群,本次的議程採雙軌制,一邊以技術議程為主,另一邊則是從 User && Promotor 的角度切入。會外還附點心、午餐、跟晚餐,最重要的是「這些統統都是免費的」!!!話雖如此,由於這次的主辦單位透露經費還是赤字,所以我丟了 TWD$100 進捐款箱...(是... 我知道很少... 我知道我吃了很多點心、喝了很多飲料、還拿了兩個便當......)
想當然爾,我聽的當然全都是技術議程啦!(程式設計之神來演講,去聽什麼 Open Source 數位生活還是Open Source 最佳實踐的,實在太浪費了!)我聽的是「中文輸入工作坊」、「羽量級桌面」、與「Web-Oriented Architecture」三項,議題內容就不再贅述,只提一下自己覺得有趣的東西好了~
首先一開始介紹的輸入法技術,真是救了我一條命 @@ 我的畢業專題是 OSS 的手寫輸入法(目前有一點點 code 可以從 svn checkout),而今天的議程有提到許多數學模型與相關演算法,給了我個大方向!其中提到目前中文分詞技術的進展,講了許多技術性的議題,非常有意思。
接下來的羽量級桌面,jserv 與 pcman 發表了一堆好玩的東西,包括如何從根本的設計上改善桌面效能,還有 FreeDesktop.org 這個邪惡組織公佈的黑心標準是有多可惡怎樣讓效能好不起來。
然後是 Web-Oriented Architecture,介紹了目前很紅(比 Britney Spears 還要紅上好幾倍)的 Web 2.0。先前有在構思一個線上翻譯網站,其技術實現的部份,就很想朝 Web 2.0 與 AJAX 的方向走。而為了縮短開發時間,應該會使用某些既有的 Framework,如 Ruby on Rails、CakePHP 等。雖然目前已經申請了專案網頁,但是目前還沒有開始動手作。想想,應該也是時候開始了,就在期中考週有空的時候 來作吧!
另外... 必須對 jserv 的筆記型電腦表達哀悼之意,它被 PingYeh 踢到地上以後,就不會開機了...
總覺得,來這裡聽一天演講,學到的東西比去學校聽黃國安、陳金鈴、劉啟東、陳宏達這些爛教授上課 自己在家猛 k 文件 得到的東西多的多!
今天上通識課(中國經籍與說話藝術)的時候,老師跟我們講了個愛因斯坦的故事...
大家都知道愛因斯坦小時候是個不討老師喜愛的學生吧?有一次上勞作課的時候,老師要求每個同學作一張小板凳當作業。當愛因斯坦交出他所作的板凳給老師的時候,老師對他說:「我想,在這個世界上,大概找不出比這張板凳更爛的作品了。」
但是「不,」愛因斯坦說道,「老師你錯了!」。接著,他從旁邊拿出另外兩張板凳,「這張是我第一次做的,這張是第二次做的。」
說完這個故事,老師要求我們在一張紙上寫下一句話的啟發,並交上來當成一次課堂成績。於是我寫下了...
- 當老師的不要太機車。
就交過去了......
哎呀... 真糟糕... 不知道會不會被當 = =
我們學校圖書館有個立意甚好的服務,叫做「線上圖書薦購系統」。可是這個立意甚好的服務,被這個兩光的網頁設計公司(好啦,我不知道這個是外包給外面的廠商,還是「外包」給我們學校資管系的...)一搞,變得亂七八糟...
怎麼說是亂七八糟呢?因為...
我只是百無聊之中想看一下 ARM(The Annotated C++ Reference Manual),所以想說去圖書館找找,卻找不到這本書,想讓他們下次買個幾本放著生菇。不能推薦實在不方便,於是寫了封信給圖書館...(個人資料部份消音)
Subject: 圖書薦購系統能不能不要使用 VBScript 作驗證? 辛勞的圖書館採編組工作人員您們好, 能不能不要用 VBScript 作用戶端資料驗證?因為敝人並非使用微軟作業系統,沒有 Internet Explorer。如果有需要,我可以寫好有相同功能的 JavaScript 讓您替換就好。 因為此 VBScript 驗證碼的緣故,造成敝人在推薦書籍時的不便,所以懇請您們換用其他方法。 諸多感謝!
**同學,您好! 先謝謝你的來信建議! 圖書薦購系統開發之初,由於上線時間急迫,確實僅能以大多數用者作業環境為優先考量,以求立竿見影之效。在本館戮力於提供更便利、多元、精緻的服務過程中,"人力" 問題則是我們經常感到捉襟見肘之處;若你真願意義務性提供協助,我們則熱誠的歡迎,一起來嘗試並努力,以期能縮短過程、增進時效。 後續就有請你主動與本館資訊組**小姐聯繫 (分機:****, mail address : *****@cyut.edu.tw)。 謝謝您!! 圖書館採編組 敬上
基本上,我實在看不出什麼原因會導致上線時間急迫就必須採用 ASP+VBScript。說實在 Server 端用什麼系統跟 Client 端一點關係也沒有,反正 Server 就那麼一台(一群?),關起門來愛怎麼搞都沒差。不過丟出來給 Client 的東西,難道不值得多考慮一下嗎?還是因為「上線時間急迫,所以省去評估的時間,直接下去 Coding」?
我一直以為,「網路服務」應該要以「能服務越多客戶越好」為目標。採取開放規格開發出來的東西,總是能比較簡單的符合各式客戶的需求。無論如何,支援 JavaScript 的瀏覽器再怎樣也比支援 VBScript 的多吧?
好啦,可能廠商要賺錢,賣 MS 的東西賺比較多,所以最後搞出來這個亂七八糟的系統吧 = =
最近迷上 template meta-programming,所以百無聊之中(相對於百忙之中...)寫了個入門等級的小程式。類似功能的程式應該很多程式設計師還沒出茅廬的時候就都寫過了吧!
為什麼說是測試「編譯器」的功力呢?因為這個程式用到了一些高階的 template 功能,並不是所有 compiler 都支援。如果您手上的編譯器是 VC6 的話,請去 Program Files 底下把它拖曳進資源桶,然後改用 dev-c++(它使用 GCC 3.4.2)。使用 GCC 4.1.1(我是用這個編譯、測試的)是完全沒有問題的 :)
本來想稍微講解,可是想想又覺得沒什麼好說的,畢竟只是無聊的小作業 = = 如果有什麼問題,歡迎留言、MSN、Email、電話討論。以下附上程式碼!
/*
* Meta-programming Infrastructure
*/
struct NullType { };
template <typename Head, typename Tail>
struct Typelist { };
/**
* meta-(data structure) to store "X x Y = Z"
*/
template <unsigned int X, unsigned int Y>
struct ChartNode
{
enum { first = X, second = Y, product = X * Y };
};
/**
* Chart Maker...
*
* @param X, Y: current X and Y
* @param XN, YN: max X and Y
*/
template <unsigned int X, unsigned int Y, unsigned int XN, unsigned int YN>
struct makeChart
{
typedef Typelist< ChartNode<X, Y>, typename makeChart<X+1, Y, XN, YN>::Result > Result;
};
template <unsigned int Y, unsigned int XN, unsigned int YN>
struct makeChart<XN, Y, XN, YN>
{
typedef Typelist< ChartNode<XN, Y>,
Typelist< NullType, typename makeChart<1, Y+1, XN, YN>::Result > > Result;
};
template <unsigned int XN, unsigned int YN>
struct makeChart<XN, YN, XN, YN>
{
typedef Typelist< ChartNode<XN, YN>, NullType > Result;
};
/**
* Algorithm to write a ChartNodeList to an Ostream
*/
template <typename TList>
struct toOstream;
template <typename X, typename XS>
struct toOstream< Typelist<X, XS> > : toOstream< XS >
{
template <typename OST, typename DELIM>
OST & operator() (OST & dest, DELIM delim1, DELIM delim2)
{
dest << X::first << "x" << X::second << "=" << X::product << delim1;
return toOstream<XS>::operator()(dest, delim1, delim2);
}
};
template <typename XS>
struct toOstream< Typelist<NullType, XS> > : toOstream< XS >
{
template <typename OST, typename DELIM>
OST & operator() (OST & dest, DELIM delim1, DELIM delim2)
{
dest << delim2;
return toOstream<XS>::operator()(dest, delim1, delim2);
}
};
template <>
struct toOstream<NullType>
{
template <typename OST, typename DELIM>
OST & operator() (OST & dest, DELIM, DELIM delim2)
{
dest << delim2;
return dest;
}
};
/*
* Main Program...
*/
#include <iostream>
#include <iterator>
using namespace std;
int main()
{
enum { x = 9, y = 9 };
cout << "make a Chart from [(1x1=1) .. (" << x << "x" << y << "=" << x*y << ")]:" << endl;
typedef makeChart<1, 1, x, y>::Result ChartList;
toOstream<ChartList> generator;
generator(cout, ", ", "\n");
return 0;
}
整個演算法包裝成一系列的 template objects,最後再丟給 toOstream<> 這個唯一有被具現化的 template object,其他程式碼全部都在編譯時期被展開了!帶入 x = 9, y = 9 的結果:
$ ./ninenine
make a Chart from [(1x1=1) .. (9x9=81)]:
1x1=1, 2x1=2, 3x1=3, 4x1=4, 5x1=5, 6x1=6, 7x1=7, 8x1=8, 9x1=9,
1x2=2, 2x2=4, 3x2=6, 4x2=8, 5x2=10, 6x2=12, 7x2=14, 8x2=16, 9x2=18,
1x3=3, 2x3=6, 3x3=9, 4x3=12, 5x3=15, 6x3=18, 7x3=21, 8x3=24, 9x3=27,
1x4=4, 2x4=8, 3x4=12, 4x4=16, 5x4=20, 6x4=24, 7x4=28, 8x4=32, 9x4=36,
1x5=5, 2x5=10, 3x5=15, 4x5=20, 5x5=25, 6x5=30, 7x5=35, 8x5=40, 9x5=45,
1x6=6, 2x6=12, 3x6=18, 4x6=24, 5x6=30, 6x6=36, 7x6=42, 8x6=48, 9x6=54,
1x7=7, 2x7=14, 3x7=21, 4x7=28, 5x7=35, 6x7=42, 7x7=49, 8x7=56, 9x7=63,
1x8=8, 2x8=16, 3x8=24, 4x8=32, 5x8=40, 6x8=48, 7x8=56, 8x8=64, 9x8=72,
1x9=9, 2x9=18, 3x9=27, 4x9=36, 5x9=45, 6x9=54, 7x9=63, 8x9=72, 9x9=81,
令人驚豔的囉唆... @@
之前提到過,使用 Quantum-Optimized CPU 的 Super Notebook,一台只要 $18,500!
規格好像有點變化...
不知道什麼時候開始出貨...
不,你錯了!我並不是要介紹什麼類似 AltaVista - Babel Fish Translation 的線上翻譯網站,而只是在這裡貼上一點個人想法與計畫。我可能會在不久以後的將來動手實做軟體的部份,不過資料可能就得靠大家幫忙一起輸入。
想做的東西,是可以讓有意幫忙翻譯 Linux 軟體的使用者直接在線上翻譯軟體的介面網站。這個網站跟一般認領軟體的 .pot、回家翻譯好、再上傳給翻譯協調者的作法不一樣,而是讓你直接在網站上翻譯軟體!作法有點類似 WindizUpdate 的翻譯方法,他隨機列出網頁上的一句英文讓使用者翻譯,收集了許多使用者的回饋以後,由演算法決定最適當的翻譯。
我想做的東西也有點類似這樣!也許您今天閒的發慌,想作些本地化(Localization)的工作。於是,來到了這個線上翻譯網站。或是,您是專程為了翻譯某個軟體,或是發現某個軟體的翻譯有不完全、翻譯錯誤的部份想要幫忙修改。首先您可能會看到個這樣的畫面...
歡迎您的到來,在這裡您可以讓世界更美好云云...
- 我想翻譯特定軟體
經由搜尋、清單... 等功能,直接進入該軟體的翻譯區。- 沒有特定的目標
由系統隨機選取需要翻譯的軟體,讓使用者翻譯。
選定了想翻譯的軟體(隨便舉一個簡單的範例,例如 gcalctool 好了!),網頁上會列出目前翻譯的狀態與累計的翻譯。您可以直接選擇使用已經有的翻譯,也可以加入新的翻譯。若是不想翻譯,可以在前面的核取方塊設定。
全選 原文 翻譯 ...... Set numeric base to binary (base 2)
...... Set display type to engineering format
......
翻好之後,使用者就暫時沒事了,輪到翻譯協調者啦!翻譯協調者可以從下載系統產生的 .po,將它回饋給更上游的軟體設計團隊。
此篇文章只描述 Use Case,系統內部的資料格式、介面呈現等還需要另外設計,如何從上游取得需要翻譯的資料也必須另外考慮(是直接從 cvs/svn/git checkout、還是由翻譯協調者手動輸入、還是有其他作法?),如何與上游協調更是想都沒想到。不過... 算是先起個頭!
這似乎是一篇很老的文章,個人覺得(從文學的角度分析)寫的很好,情節緊湊並押韻、也用了許多修辭學的技巧。原作者不可考,不過似乎一開始是貼在巴哈 Kuso 版。Google 搜尋只找到兩個來源,為避免他就這樣銷聲匿跡,還是轉貼一下!
國中生老趙,穿著制服... 白上衣藍短褲。在他家到學校這段路的中間點有一間廟,每天老趙就從家裡出發,走過台北吵雜的街道,目送穿著淺黃制服的女高中生上公車,經過那座不知名不曉得拜什麼神的廟,買過校門口的美而美早餐後到達學校。
某天,老趙下午放學,美而美已經不賣早餐了。老趙有感時光之匆匆啊!想要在年輕的臉龐之上,試圖流露出成熟深沉的笑容。
「哎唷喂呀!」難道是這個年紀不適合這樣的表情,突然一陣腹痛如絞、冷汗直流。國中生老趙此時若是回到學校上廁所,難保不在同學與可愛的宜靜面前丟了顏面。只好,他只好忍著痛往前走,同學們一一從後頭超車。漸漸的,老趙落後了,回家的路好遙遠、好漫長!
這時,中間點的那座廟出現了!此時,老趙感覺到腹痛如絞、冷汗直流。重要的是呼之欲出的那陣軟黃已經蠢蠢欲動,頗有千軍萬馬之勢。不曉得是急中生智還是學校老師有教,國中生老趙想「廟裡有廁所!」不管了!什麼都不管了!老趙忍住,忍住那些不該此時此地出現的東西,加速向前... 走去!來不及看看廟裡供奉的什麼神,來不及向香火舖示意,來不及心存敬意,直奔廟後的廁所。
廁所有兩間,老趙打開一間,裡面有前人的遺跡。想必是遺跡的威力太過強大,老趙開門才剛剛看見,幾欲被那遺跡的味道之強大的威力震倒,震倒前管理直腸的那幾條肌肉還突然鬆開了一下!好樣兒的老趙,不虧是強者。在那東西將出未出之際,猛然一蹲,在感受到地心引力的招喚之前,再次縮緊那幾條肌肉,就這麼硬生生的由外而內接住了那坨,呼之欲出的、萬頭鑽洞的、有如猛虎出閘的東西。這下來不及高興,老趙心想禁不起再一次了。好樣兒的老趙拿的起放的下,馬上關上門,拉開隔壁那間!
..............................
拉不動?再試,還是拉不動。莫非......?
老趙敲門...
「叩?」
「叩!」
「叩叩??」
「叩叩!!」
「叩叩叩!?!?」
「五郎啦!但基勒啦!」
說時遲,來不及,還來不及但基勒!老趙放了個屁,一切,一切都白費了。從肛門、從內褲、由大腿內側到小腿、到白襪、到過年買的球鞋,就這樣緩緩流到廟後的水泥地上。塵歸塵,土歸土,化作春泥(?)更護花。
國中生老趙呆了,就這麼杵在那兒,就這麼杵著。右手還在不死心的敲著門,但是目光已經沒有焦距。嘴巴微張,腦中閃過一幕幕畫面,同時不斷蒐詢他十幾年有記憶以來的所有經驗法則,想要試圖解決此時此刻的問題。
沒有用,人腦當機,剩下的是機械式的敲門。張開的嘴,還有遲遲找不到焦距的眼。一切都好安靜... 霎時,門開了!
「嘎哩共五郎,哩洗謀聽丟洗喔 ?」
「......」
「............. 哩挫賽喔?」
出來的那人,說完就走了...
老趙不走!他不能走!不能只是走!突然,他放棄一切的跑回家,不顧一切的向前跑去,不管在身後飛揚的是塵土還是什麼,不顧一切的朝家裡跑去。在空中,彷彿看見由大腿內側到小腿間,在空中的一絲絲黃色的線... 飛揚,如老趙十來歲的青春,那麼自由、那麼奔放!但是就在那條線就在剛落地那一剎那,卻是一記記忘記聲響的雨點。無奈、委屈、還有濃的化不開的... 愁緒。
「這就是青春嗎?」
才回到家的老趙,來開門後吃驚又憤怒的母親,在門口就把老趙給脫個精光,把全身的衣褲都丟到垃圾桶裡,試圖忘記這一切。可是,母親卻忘了,那個站在門口,仍在當機狀態下的老趙。夕陽西下,倦鳥歸巢時,仍有一隻年輕的雛鳥,一面映著夕陽,一面無聲的把影子扔在門上。
老趙傻傻的站在屋前,公車剛過,黃制服的女孩才下公車。出現在她眼前的,便是這一幕。蒼白而略顯孱弱的少年,孤獨又悲傷的站在迎接她回家的夕陽下。還有,不管是女孩還是老趙這一生的不能忘記的,那股濃的化不開的... 稠 Shit...
................................
這次的「2006 自由軟體傑出應用推廣選拔大賽」似乎有點... 呃~不說了,因為已經被罵得很慘了。
只是這次的灌票,讓我想起在我國中(還是高中)的時候(超過五年以前)曾經發生的一件趣事...
Orz 分隔線 Orz 分隔線 Orz 分隔線 Orz 分隔線 Orz 分隔線 Orz
某音樂製作公司(因為年代久遠,我已經忘記是哪個公司了...)在網站上舉辦了票選活動,票選的內容大致如下:
今年暑假,您最希望我們能邀請哪位國外藝人來台灣?
(實際要邀請哪些藝人我忘記了,票數也是胡謅的,不過很確定是暑假!)
- 阿豆仔藝人甲 - 123 票
- 阿豆仔藝人乙 - 234 票
- 阿豆仔藝人丙 - 456 票
- 阿豆仔藝人丁 - 345 票
我的某個同學非常喜歡... ㄟ... 當作是目前得票最少的藝人甲好了,於是就 IM 我,叫我幫他投票。
舉手之勞嘛!當然就幫他投一下啦!
結果左鍵點點點的,發現他可以重複投票,於是我就用 php 寫了個灌票的小程式。當時還很得意的跟同學拍胸脯保證,有了我的灌票程式,藝人甲一定有機會高票當選!
好啦~放著電腦出去看電視... 過一陣子回來...
今年暑假,您最希望我們能邀請哪位國外藝人來台灣?
- 阿豆仔藝人甲 - 56789 票
- 阿豆仔藝人乙 - XXX 票
- 阿豆仔藝人丙 - 67890 票
- 阿豆仔藝人丁 - XXX 票
「吶尼!?怎麼藝人丙的票也增加的那麼恐怖?難不成有人也跟我一樣在灌票嗎!?」奇怪,把灌票程式先關掉看看。
今年暑假,您最希望我們能邀請哪位國外藝人來台灣?
- 阿豆仔藝人甲 - 56890 票
- 阿豆仔藝人乙 - XXX 票
- 阿豆仔藝人丙 - 67912 票
- 阿豆仔藝人丁 - XXX 票
「... 怎麼我灌他也灌,我不灌他就不灌了?」不相信,再把灌票開起來...
今年暑假,您最希望我們能邀請哪位國外藝人來台灣?
- 阿豆仔藝人甲 - 123456 票
- 阿豆仔藝人乙 - XXX 票
- 阿豆仔藝人丙 - 134567 票
- 阿豆仔藝人丁 - XXX 票
後來,我發現不管怎樣,藝人丙的得票一定比藝人甲多出 10%。聰明的您一定知道是怎麼一回事了吧?
「繼續灌吧」,我這麼想著「反正等下吃完晚飯回來,網站的人應該就會發現了吧。」結果果然如我所料,吃完飯再回來,那個投票的活動就從此消失了。
Orz 分隔線 Orz 分隔線 Orz 分隔線 Orz 分隔線 Orz 分隔線 Orz
沒有任何影射任何其他活動的意思,只是突然想起這件很久以前的往事...
上星期六因為我媽的關係,我參加了「九五暫行綱要新課程配套暨九十八學年度大學指考加考公民與社會座談會」(好長的名字 =.=+)。會中有許多家長、老師、教育部的官員、記者等人到場,學生倒是沒幾個。根據他們討論的認知,大家對考試的概念似乎還停留在「讓學生背書,記比較多的人贏!」。我反而有不同的看法。
我們都知道,科舉這種制度,是唐朝就流傳下來,已經用了幾千年的東西。在唐宋那時候,可謂「熟讀唐詩三百首,不會作詩也會吟」。所以要求學生背東背西,反正以前有的東西全部背下來就是了!到了今天,社會也用這種制度分辨「有出息的好學生」與「沒出息的壞學生」。但是大家都忽略了一點 -「唐詩三百首」到頭來也就那麼「三百首」。在二十一世紀的今天,每個月出版的報章雜誌加起來,恐怕都超過過去幾千年那些唐詩、宋詞、元曲、小說... 哩哩叩叩阿里不達加起來要多。這麼龐大的資訊,要叫學生全部記起來,到了考試測試你記得百分之幾,實在是很無聊也很不公平的作法。
現在是資訊爆炸的時代,任何人在隨時隨地都可能產生新資訊。而傳佈資訊與儲存資料的媒體也夠發達,能有效將資料存下來,並在需要的時候在幾乎任何地方存取。這時候,只顧著讓人類重複其他一些非人類科技產品就能達到的功能,實在很無聊也無意義。就像最近在讀者文摘(註)上看到一個新竹縣新埔鎮的白痴,背了包括學校、郵局、戶政事務所、自來水廠、監理所、電信局等各機構電話一樣(居然還有更白痴的送匾額給他,真是瘋了!金氏世界紀錄如果有「白痴」這項,他們一定是第一名!)。
我認為目前的教育,不應只侷限於「從一大堆資料中,挑一些符合各階段(國小、國中、高中、大學)學習過程的資訊出來,編成課本教學生,然後考他們記得多少」這樣的辦法,而是應該教導學生「如何從一大堆資料中,挑出需要的東西」,也就是「資訊檢索」的方法,適當建立團隊合作分工協調的概念,並且不要再考選擇題了!
考試當然還是評斷學生學習成果的標準,只是考試的辦法應該有所改變:
這裡針對以上辦法說明:
以上概念還在草稿階段,可能還有很多弊端,不過應該不會有什麼「絕對無法修正的重大缺陷」。我覺得可行度應該有 70% 以上,只是可能那些八股的老人家不能接受。所以,若你不能接受,不是我的辦法不好,而是因為你太八股,瞭解了嗎?
註、讀者文摘二零零六年六月,第十一頁「活人電話簿」
新聞一則:「CPRO 資傳網--接軌國際標準 台灣OSS慢半拍」
同樣,全文引用:
接軌國際標準 台灣OSS慢半拍
面臨執行單位未定、預算有限,人才無著落窘境。
2006-5-29/ 侯俊宇/ 撰文
在今年的 Linux 台灣計畫(Linux Taiwan Project)中,四大工作重心之一為「一項共通標準規範」,希冀建立Linux台灣的文件維護機制,以及示範應用系統測試驗證規範,以求奠定自由軟體未來產業的發展基礎。為求不落於國際社群以外,民間業者也提出與國際標準組織的接軌的聲浪,然而,儘管政策要求,卻面臨實際執行單位未定、預算有限,人才亦無著落的窘境,業者搖頭說,「要談參與國際標準組織,台灣還是慢半拍。」
在此次Linux Taiwan計畫中,分別列出一項共通標準規範、二個技術研發中心、三類重點應用領域,及四組示範應用服務體系等四項計畫重心,而列在首位的就是「一項共通標準」,其他亦有相關規劃在「國際社群能量」上,針對國際標準組織訂定兩岸中文共通平台規格,加強國際標準宇社群接軌的技術交流。然而,儘管口號喊的響,實際的作為卻不被業界人士所認同。
「先看預算就好了,位居未來台灣開原碼軟體( OSS ) 基礎核心的平台標準,一年只有新台幣1,000萬,要怎麼做事?」相關人士指出,儘管多次政策指導台灣OSS應走向與國際接軌、或是從既有硬體優勢發展出更多加值產品與服務,才能帶來商機,不過在基礎平台未能獲得共識之前,業者間仍然各行其是。誰也不服誰的情況,就是未來面臨產品的互不相容,或是需要額外的整合工夫。
再看執行單位,每天汲汲營營在開創商機的開原碼民間業者,早已透露出對創立標準興趣缺缺的態勢。而Linux促進會等組織,也透露出希望由政府單位擬定,主導標準走向的意願。然而,相關人士透露,儘管今年Linux Taiwan計畫明定與國際標準接軌為計畫成果之一,卻未見到實際的執行單位接手。
「如果單以標準議題來看,似乎應該是中央標準局的業務範圍,但是如果從研發角度來看,中研院與國科會似乎能夠扮演的更好,而事實上,若是資策會能夠培養更多人才,態度更為中立,也不失為可以加強與國際自由軟體社群連結的一大組織。」
不過,業者也說,儘管可以運作的組織不少,實際上已經開始動作的卻仍闕如,「目前為止,我們並未看到台灣OSS社群與國際組織的接洽,不管是官方或是非官方的接觸都不頻繁,也是我們最為憂心的地方。」
Linux促進會副會長劉龍龍這麼說,「我們一直試圖尋找,『台灣OSS社群為國際社群做了什麼?』的答案,不過可惜的是我們尚未見到。」劉龍龍說,在缺乏積極接洽,彼此連結又有限的情況之下,台灣OSS與國際間的接軌仍屬緩慢。
稍早時在Linux Taiwan計畫中,提及一項共通標準規範分別在共通規範及文件維護機制上投入700萬元,示範應用系統測試驗證機制投入300萬元;而國際社群能量上,也希望參與如OSDL、LSB、OASIS與ODF Alliance等相關組織,亦預期加強兩岸中文共通平台規格的建立,預計經費亦約1,000萬元。
而在缺乏雙方互動的前提之下,國內OSS業者要談產品的連結、平台標準的建立,都有一定難度。究竟OSS在台灣是能夠乘勢而起或是難以抬頭,仍看主事者的智慧。
胡說八道些「台灣 OSS 社群都沒做事」就想跟政府要錢?一千兩百萬還不如分給真的有在 contribute 的 developer.
為避免某些官員連 Google 都懶得上,放兩句話就有人幫他整理好資料可以拿去交報告,所以在這裡不列出有參與國際專案,並有貢獻的 contributers。