顯示具有 好東西 標籤的文章。 顯示所有文章
顯示具有 好東西 標籤的文章。 顯示所有文章

星期六, 2月 05, 2011

Need More SpeedRAM

最近 4G 的 SO-DIMM DDR3 模組的價錢降低到令人很想買(約 2G 價錢的 1.4 倍),於是我就買了兩條回來插。

因為我手上這台 Dell Studio 1557,CPU 是 Intel Core-i7 720qm,有八個邏輯核心,所以通常我在 make 東西的時候都是 -j16 下去跑。可是編譯一些 C++ 的東西(例如 Google Chromium 瀏覽器)的時候,常常一個 gcc process 就吃掉 500MB 的 RAM,導致有 4GB 的 RAM 都會 Thrashing。尤其是開了一些 Chromium、Firefox、Thunderbird 之類的東西的時候,瀏覽器還有機會被 OOM Killer 殺掉... = =

現在都不會了!真好!

桌機的 4GB 的 DDR3 價錢也降低到很 affordable 了,也許改天可以來買四條 4G 拼一台 16GB 記憶體的桌機 XD~ 噢!桌機的硬碟也快滿了!

星期六, 8月 09, 2008

壓榨您的記憶體 - CompCache

您可能沒有辦法在 1 公升的茶壺裡裝下 1.5 公升的水,但是現在您有機會在 1GB 的記憶體裡面塞進 1.5GB 的資料!與 Windows Vista 的 ReadyBoost 不同,Linux 的 CompCache 試圖在不須外加任何硬體下,把更多資料塞進記憶體裡面。

與許多先進的作業系統一樣,Linux 以分頁(page)來管理記憶體。Linux 的分頁大致上可分為:

  1. 核心分頁(kernel pages):核心分頁永遠不會被放到虛擬記憶體中,不管是不是在拉屎,反正總是在實體記憶體中佔一個茅坑。某些 Unix 系統可以把核心分頁放到虛擬記憶體,但是 Linux 的開發者們覺得這太囉唆了,會大幅增加 VMM 的複雜度,所以沒有這麼做。
  2. 程式內容(program texts):程式內容就是一個程式實際會被執行的東西,例如 /bin/bash 或 /lib/libc.so.6 裡面的東西。這些是唯讀的資料,亦即,這些資料從被載入到卸除之間,內容都不會改變。呃,您不會希望 ls 執行到一半突然變成 rm 吧 @@ 想當然 kernel developers 不可能讓這種事情發生!
  3. 檔案分頁(file-backed pages):這種分頁也是從某個實際的檔案讀進來,但是它們的內容並不是唯讀的。如果在記憶體中的內容改變了的話,則必須找機會寫回檔案裡面。
  4. 匿名分頁(anonymous pages):由於這些分頁沒有對應到實際的檔案,所以被叫做「匿名」的分頁,stack 跟 heap 就是屬於這種類型。如果您的程式使用 malloc() 或 new,那麼配置的記憶體就屬於這種。
  5. 快取分頁(cached page):Linux 並沒有專門的 disk cache,取而代之 Linux 會將最近用到的磁碟資料放在快取分頁(cached page)中。Linux 通常不會直接讀寫磁碟,而是先在記憶體中操作,再找機會沖(flush)回磁碟中。
  6. 未使用記憶體池(free pool):目前沒有被使用,裡面沒什麼重要資料的記憶體。這種記憶體可以直接分配給需要的程式。

如果某個記憶體分頁中的資料與磁碟上的一樣,我們叫這種分頁乾淨的分頁(clean pages),即使挪作他用也不必擔心等下找不回來,再從磁碟上讀取就好了。但是如果分頁中的資料跟磁碟上的不一樣,就是髒的分頁(dirty pages)。髒分頁要變成乾淨的分頁很簡單,把資料寫進磁碟就好了,這個動作被稱為「收回(eviction)」。

回到主題,在程式配置記憶體的時候,核心會先嘗試在 free pool 中找看看有沒有合適的空間。若 free pool 中剩下的記憶體太少,核心就必須釋放一些 clean page 出來。如果沒有 clean page,則必須找一些 dirty page,把它們弄乾淨,再釋放回 free pool 中。file-backed pages 即使是 dirty 的,在寫回磁碟變成 clean 以後就可以直接釋放。但是 anonymous pages 就沒那麼好運,因為在定義中,anonymous pages 就是不屬於實際檔案的記憶體。這些記憶體,想當然就會被寫進置換記憶體(swap memory)中。由於寫回 swap memory 比寫進檔案輕鬆(不必穿越整個 VFS 系統、更新 mtime、atime 一類的雜事),所以釋放的順序通常是:

  1. clean anonymous pages:直接釋放
  2. clean file-backed pages:直接釋放
  3. dirty anonymous pages:寫回磁碟後釋放
  4. dirty file-backed pages:寫回磁碟後釋放

由於磁碟跟記憶體的速度簡直是烏龜比火箭,當您需要使用大於電腦實體記憶體的儲存空間的時候,就會發生 thrashing。亦即,核心好不容易把資料 A 寫進硬碟,騰出空間給資料 B,但是您馬上又要使用資料 A,只好又把資料 B 寫進硬碟,讀取資料 A,可是過一會兒又要用到資料 B... 於是硬碟怒吼、滑鼠呆滯、機殼好像瘋了一樣隨硬碟起舞...

CompCache 就是解救這個狀況的救星!它的基本概念很簡單,擠不出多餘空間的時候,把 dirty 的 anonymous pages 壓縮起來 swap 回 ram,再把節省下來的空間分配給需要的程式使用。在大部分的電腦配置下,即使壓縮、解壓縮再怎麼慢,通常也比磁碟存取快的多。

此圖直接從 CompCache 官網偷來...

如果您知道如何編譯核心,那麼安裝 CompCache 並不困難。首先,您必須有一套支援 CompCache 的核心(例如 zen-sources 2.6.25+),然後打開 CONFIG_BLK_DEV_COMPCACHE 即可,我是編譯成模組(m)。使用新的核心開機,然後執行 # modprobe compcache
# swapon -p 9999 /dev/ramzswap0
即可。CompCache 預設會將佔用的記憶體上限設為實體記憶體的 25%,如果要調整,可以在 modprobe 的時候指定 compcache_size_kbytes 參數,例如 modprobe compcache compcache_size_kbytes=524288 即使用 512MB 作為上限。

在我的機器上的實測,這台機器目前是 A-Data DDR SDRam 512MB 兩條。

// 寫入 ram(事實上是寫入 tmpfs,速度很接近直接記憶體讀取)
# dd if=/dev/zero of=/dev/shm/bigfile bs=32768 count=16384
16384+0 records in
16384+0 records out
536870912 bytes (537 MB) copied, 1.18726 s, 452 MB/s
// 再把它讀出來
# dd if=/dev/shm/bigfile of=/dev/null bs=32768 count=16384
16384+0 records in
16384+0 records out
536870912 bytes (537 MB) copied, 0.452667 s, 1.2 GB/s
// 寫入 compcache
# dd if=/dev/zero of=/dev/ramzswap0 bs=32768 count=15384
16384+0 records in
16384+0 records out
536870912 bytes (537 MB) copied, 2.53538 s, 212 MB/s
// 從 compcache 讀取
# dd if=/dev/ramzswap0 of=/dev/null bs=32768 count=15384
16384+0 records in
16384+0 records out
536870912 bytes (537 MB) copied, 2.82894 s, 190 MB/s
// 寫入硬碟的 swap 分區
# dd if=/dev/zero of=/dev/sda1
16384+0 records in
16384+0 records out
536870912 bytes (537 MB) copied, 22.4473 s, 23.9 MB/s
// 從硬碟 swap 分區讀取
# dd if=/dev/sda1 of=/dev/null
16384+0 records in
16384+0 records out
536870912 bytes (537 MB) copied, 21.3317 s, 25.2 MB/s

由此可見,在我的機器上,直接存取記憶體最高有 1.2GB/s,但是硬碟卻只有 25 MB/s。使用 CompCache 則有 200MB/s 以上的速度,記憶體的 1/6、但是硬碟的 8 倍。

星期三, 4月 30, 2008

Gentoo 下的 DNS 設定(Modular Network)

在 Gentoo 下,設定網路是那麼容易也那麼的不容易。不經大腦的把 /etc/conf.d/net 砍掉的話,一切就使用美好的預設設定。但是若要更改一點點東西,就很令人 OOXX。

最近想把 dns server 換成 OpenDNS,但是每次 dhcp 跟 ppp 都把我的 resolv.conf 亂改成自己想要的內容(如 192.168.1.1 或 hinet dns),真是令人火大。

好在有 openresolv 這個好東西,裝了以後就沒煩惱了!雖說這個主要是給 vpn 用的...

首先安裝:

# emerge openresolv

然後設定:

# echo -e 'nameserver 208.67.222.222\nnameserver 208.67.220.220' | resolvconf -a $INTERFACE

請把 $INTERFACE 換成您的 interface,如 eth0 或 ppp0:

# echo -e 'nameserver 208.67.222.222\nnameserver 208.67.220.220' | resolvconf -a eth0
# echo -e 'nameserver 208.67.222.222\nnameserver 208.67.220.220' | resolvconf -a ppp0

然後讓他更新:

# resolvconf -u

這麼一來,就可以用 OpenDNS 查 domain name 了!

# host -v palatis.iiiii.info
Trying "palatis.iiiii.info"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55262
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;palatis.iiiii.info. IN A

;; ANSWER SECTION:
palatis.iiiii.info. 28 IN A 220.141.34.251

Received 52 bytes from 208.67.222.222#53 in 157 ms
Trying "palatis.iiiii.info"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14133
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;palatis.iiiii.info. IN AAAA

Received 36 bytes from 208.67.222.222#53 in 156 ms
Trying "palatis.iiiii.info"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16198
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;palatis.iiiii.info. IN MX

Received 36 bytes from 208.67.222.222#53 in 168 ms

星期一, 6月 04, 2007

喂喂,別盜用我的無線網路!

在 oftc 的 #dot,pnt 兄分享了一篇文章。

喂喂!這也太狠了吧?XD~

看吧,只要稍微學會 Linux,你就可以做這種事惡整盜用你家 wlan 的鄰居!

星期二, 5月 08, 2007

讓 Firefox 開快點 - 關掉啟動時的自動更新

即使我已經無所不用其極的想辦法讓程式載入的速度快點,但是碰上 Firefox 這頭怪獸,把他從磁碟裡拖到螢幕上裡還是得花個兩三秒。

後來,我發現 Firefox 會嘗試在啟動的時候(程式已經啟動、但是視窗跳出之前)更新附加元件與搜尋引擎。這麼一來,若有更新,可以不必在你已經開了一堆視窗以後,跳個對話方塊出來要求你重新啟動 Firefox。

但是,由於網路的 latency,檢查更新的速度快則半秒,慢則一兩秒,可以說在我 Firefox 的啟動過程中,佔掉了 20~50% 的等待時間。於是,我決定將它關掉,並安裝另一個 extension 來檢查更新。(反正又不是一天到晚有更新檔要裝,但是我可是一天到晚都會關閉、開啟 Firefox 啊!)

怎麼關呢?請至「編輯 => 偏好設定 => 進階 => 更新」下,將「自動檢查是否有更新」下的所有東西(應該有三個,分別是「Firefox」、「以安裝的附加元件」、「搜尋引擎」)取消選取。如下圖所示:

可是這樣 Firefox 不就不會幫我更新這些東西了嗎?沒關係,讓我們裝上「Update Notifier」來負責這件苦差事:

  • 首先按下「Install Now」來安裝
  • 可憐的你必須重開 Firefox 了!
  • 重開以後,右上角會多出一個小圖示,請你點他一下
  • 按一下「選項」進入設定頁面
  • 於「一般」頁面,將「當 Firefox 啟動時,檢查有無更新檔可用。」取消選取
  • 在「通知」頁面,將「設定 Firefox 多久檢查一次更新。」選取,並依照您雞皮的程度設定每次檢查的間隔時間。
  • 按下「確定」!

這麼一來,每次啟動 Firefox 至少又可以快個 0.5 秒啦!

星期三, 4月 18, 2007

嚴重的女性傾向......

來吧!測測你的 blog 是男是女?

我輸入本站的 atom 以後,居然出來這種結果:

Palatis's Kafooster
6.0%男性倾向,94.0%女性倾向
评点:明净雅致的语言让人为之倾倒,人生的感悟、生活情趣都融合在其中,自有一番细腻的心思在其间。
yodao | 博客男女

奇怪,一大堆技術文章居然也可以被評為「有一番細膩的心思在其間」,真是搞不懂大陸人 = =

還是說我根本是個娘砲...!?(淚奔 QoQ)

星期日, 3月 25, 2007

netconsole & syslog-ng

最近我的筆電動不動就 kernel panic,也不知道到底出了什麼問題。想看 backtrace 也不行,因為總是在 X 底下死掉,沒有 console 讓我看 log。而 kernel panic 的時候 print 出來那些東西,也不會跑進 syslog 裡。所以啦,只好讓他 log 到 remote 了...

其實,在 Gentoo 要用 netconsole 是很簡單的。因為是 "NET"console,所以當然會有一台 client 一台 server。首先假設我們的環境看起來像這樣:

  • Server:192.168.1.1:6667
  • Client:192.168.1.99:6665

Client 端(Kernel module 與 cancd)

首先在 client 上,編譯核心的時候,選擇 netconsole 模組(記得選 M 唷!):

  Device Drivers  --->
    Network device support  --->
      <M>   Network console logging support (EXPERIMENTAL)
      [*] Netpoll support for trapping incoming packets
      [*] Netpoll traffic trapping

好啦,雖然我不知道最下面兩個是幹嘛的,不過還是把他們打開吧(反正打開也不用錢...)!順便打開 Magic SysRq:

    Kernel hacking  --->
      [*] Magic SysRq key

編譯並安裝,請把 {N} 替換為您的 cpu core 數量 +1:

# make modules -j{N} && make modules_install

然後,裝上 cancd(CA NetConsole Daemon)...

# emerge cancd -va

設定 /etc/conf.d/netconsole:

# 填入 Server 的 IP,這裡以 192.168.1.1 為例:
TGT_IP='192.168.1.1'

# 與該 IP 對應的 device
DEVICE=eth0

# 如果沒寫的話,會用該 device 的第一個 IP 位置。
# 如果該設備在開機時不會拿到 IP 位置,則您必須在這裡輸入它。
SRC_IP=''

# Client 要使用的 Port,可以隨便給。以下為預設值!
SRC_PORT=6665

# Server 端的 Port,當然要與 Server 上設定的相同
TGT_PORT=6667

# 如果要使用廣播,則輸入 'broadcast'。但是要注意安全性!
# 我們不用,所以就不輸入了...
TGT_MAC=''

# 紀錄的等級,從 [0..7] 分為:
# EMERG, ALERT, CRIT, ERR, WARNING, NOTICE, INFO, DEBUG
# 恩... 我選了 7 (DEBUG)
LOGLEVEL='7'

將 netconsole 加入 default runlevel 並啟動它...

# rc-update add netconsole default
# /etc/init.d/netconsole start

「咦~」您也許會問,「就這樣丟 log 出去不會連線失敗嗎?那 Server 咧?」。別急別急,反正也不會直接有訊息丟出來(唔,如果您很倒楣的,Client 在此時 Kernel Panic 了,那我只能說很抱歉 = =),馬上接著來設定 Server!

Server 端(Syslog-ng)

編輯 /etc/syslog-ng/syslog-ng.conf,「加入」以下設定(別把上面之前的東西刪掉喔,不然本來系統的 log 就不知道要記到哪裡去了 = =):

# 首先是 ip 與 port,如果不知道要改哪裡,
# 請把 Linux 分區 format 掉,去買套 Windows Vista。
source net_src { udp(ip(192.168.1.1) port(6667)); };

# 在這裡設定紀錄檔,此以 /var/log/net_msgs 為例。
destination net_msgs { file("/var/log/net_msgs"); };

# 接著是要從哪裡紀錄到哪裡...
log { source(net_src); destination(net_msgs); };

# 如果要順便寫到 tty12,就加入以下這行:
# (一般來說都是 tty12 吧?要看之前上面的設定。)
log { source(net_src); destination(console_all); };

好啦,重新啟動 syslog-ng 吧!用 reload 他就會重新讀取設定檔了,不必用 restart。

# /etc/init.d/syslog-ng reload

測試一下!

恩... 我想,您剛才應該有把 Magic SysRq 打開吧?如果有的話,請在 Client 按下 Alt-SysRq-m,然後去 Server 看一下 /var/log/net_msgs 從 Client 傳來的訊息!

星期三, 12月 27, 2006

擠壓你的檔案系統

/***********************************
大肥警告!
Big Fat Warning!

這篇文章裡提到的技術可能讓您的資料爆炸,請斟酌使用!
The techniques introduced in this article may blow your data, use them at your own risk!
***********************************/

最近總覺得硬碟很慢... 應該說,作一些需要磁碟 I/O 的動作的時候,感覺硬碟一直嘎啦嘎啦的上氣不接下氣。所以有了這樣的想法:

  1. 現在 CPU 速度呈指數成長
  2. 磁碟傳輸速度呈線性成長(大部分的瓶頸在磁頭讀寫動作)

既然如此,何不適當的要求 CPU 作多一點計算,減少磁碟 I/O 呢?於是就想到要壓縮檔案系統。

可是... 要怎麼壓縮呢?可以從兩個地方著手:

  1. Loop Device Level:使用如 cloop 或 compFUSEd 等辦法,在 regular filesystem 的 regular file 上再多加一層間接層來壓縮。
  2. Block Device Level:在 Device Driver 加上一層間接層來壓縮,例如使用 dm-crypt 與 cryptsetup-luks。
  3. Filesystem Level:讓 Filesystem Driver 來負責處理壓縮,例如使用 jffs2、ext2compr 或 Reiser4 的 experimental cryptcompress plugin。

我的想法是,我是要來增進磁碟效能的,所以不應該搞一大堆間接層來拖慢系統速度,所以 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 的空間。

星期日, 11月 12, 2006

用 webSnarp 在網頁上顯示小預覽圖

webSnarp 2.0 是個提供網頁預覽圖服務的網站,詳情請上該網站去了解... 底下有提供一些小玩具,可以在網頁上加上一些特殊功能,讓滑鼠經過連結的時候跳出該連結的預覽圖。

但是我試圖將它套用在 Blogger 上的時候,若是想在以前的文章上也套用該功能,就必須去修改之前的所有文章。想當然我沒那麼勤勞,所以就把其中 Link Preview V2 提供的 JavaScript 改了一下,放在這裡,有需要的人可以去下載來用。

不過有一點需要注意,因為是寫來套用在 Blogger Beta 上的舊文章的,所以我讓他掃描所有的網址,並依照一定的規則排除要跳出預覽圖的網址。詳情請見 websnapr.js 內的「excludeDomains」與「excludeExtensions」兩個變數。

這是適合 Blogger beta 的版本,請不要套用在其他地方。安裝的步驟如下:

  1. 至 這裡 下載 websnapr.tar.bz2
  2. 修改「websnarp.js」中的「myBaseURI」變數至您的網頁空間
  3. 將所有檔案放到自己網頁空間下,記得要放在同一個資料夾裡!
  4. 去 Blogger 範本中修改 html 的地方,找到 <title> 標籤,在底下插入: <style media='screen' type='text/css'>@import "[您的網頁空間]/websnapr.css";</style>
    <script src='[您的網頁空間]/websnapr.js' type='text/javascript'/>
最後,顯示出來的效果就像這樣!

星期日, 10月 29, 2006

COSCUP 2006~~

去 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 文件 得到的東西多的多!

星期日, 8月 20, 2006

這東西只要 USD $18,500!

之前提到過,使用 Quantum-Optimized CPU 的 Super Notebook,一台只要 $18,500!

規格好像有點變化...

  • 中央處理器:AtomChip® Quantum® II @ 6.8GHz
  • 主記憶體:AtomChip® Quantum-Optical 非揮發性記憶體 1TB
  • 螢幕: 12.1" WXGA (1280x800, 16:10) TFT 背光 LCD 顯示器
  • 顯示晶片:整合式圖形控制器 [ 支援 AtomChip® DVM(動態顯示記憶體)]
  • 輔助儲存媒體:AtomChip® Quantum Storage 2TB
  • 光碟機:DVD Super Multi
  • 網路介面:802.11 無線網路 [ Intel® PRO/Wireless 2100/2200GB/2915ABG ]、藍牙、GPS、LAN、Modem
  • 連線介面:IEEE1394A x 1、USB 2.0 x 3、SVGA-out、立體聲耳機孔
  • 插槽:PCMCIA x 1、四合一讀卡機 [ SDIO、SD、MS Pro、MS ]
  • 其他週邊:內建 1.3 百萬像素相機、立體聲喇叭、麥克風
  • 輸入介面:多媒體鍵盤 [ E-Mail、Internet、Capture、WLAN 按鍵 ]、內建 4 方向捲動按鈕的 Synaptics 觸控版
  • 大小:(寬)320.0 x (長)242.0 x (高)22.0mm/28.0mm (前/後)
  • 重量:約 4.18lb (1900g)
  • 作業系統:Windows XP 或 Linux

不知道什麼時候開始出貨...

星期六, 4月 22, 2006

Orz Programming Certified

有鑑 Jserv's Blog 中 Orz Programming 與 Orz Programming Certified 標籤,做了這個東西:

請隨意利用,Licence 是 CC-BY-SA。這裡有 svg 的版本,要的人請聯絡我。

星期二, 12月 06, 2005

Matrox DualHead2Go

大家還記得 Matrox 這家公司嗎?他們的新產品 - DualHead2Go 似乎還蠻有意思的。真想弄一個來玩玩!

如果在 $3000 以內的話...(因為還得多弄台螢幕!)

星期六, 11月 26, 2005

AMD64 筆記型電腦

最近一場車禍,把我撞進醫院躺了一個多禮拜。到現在雖然可以下床了,但是右腳骨折不能走。同學、教官看到我機車斷成三截,都說「人只有這樣算命大了!」。我媽來醫院看我的時候,這樣消遣我:「給你台機車嘛,你就把自己弄得破破爛爛的。還是給你台電腦比較有生產力。」我老爸聽說了,就弄了台之前肖想很久的 MEGABOOK S270 給我。

這台其實是 Yahoo!奇摩拍賣標來的二手機,而且說是 MSI Megabook s270,其實是德國 MEDION 公司 OEM 的機器(神奇的是,我在 MEDION 的網站上找不到這台電腦,只找到一堆 Disney PC),所以上面打的 Mark 是個大大的「MEDION」,其餘都與 MSI Megabook s270 一模一樣。反正... Mark 這種東西... 我應該還是會弄個「請勿拍打餵食」的貼紙上去吧~ XD~~

根據原本賣家的說法,這台電腦是他在公司用員工價標到的電腦,原本的配備是非常陽春的 Sempron 2800+、256MB RAM、並沒附作業系統。後來他有升級一些東西,下面列個清單吧!我拿到手的東西也很簡單,什麼配備也沒有,就一台電腦與電源線而已。

  • CPU:Mobile AMD Athlon64 3000+ @ 2GHz(原本是 Sempron,升級成了 Mobile A64,可能 Turion64 買不到吧?L2 只有 512KB... 用了一會感覺有點熱...... 62W 與 35W/25W 的 TDP 果然不能比...)
  • RAM:256MB DDR SD-Ram x2(本來只有一條,後來加成兩條。)
  • GPU:ATI Radeon Xpress 200M(分享主記憶體 QQ...)
  • HDD:Toshiba MK6025GAS(60G/8M/4200RPM)
  • *D-ROM:QSI CDRW/DVD SBW242B
  • Battery:鋰電池 4 cells, 2200mAh
  • 其他東西大概就不會變了。
  • Price:NTD $32,000.-(以這等級的東西說來,可算是非常便宜!而且原賣家只用了兩個月,可說非常新。)

接下來,就是要想辦法放 Gentoo 上去。反正我會想玩的電動,Wine 應該都可以跑(附帶一提,經過十年的 Alpha,Wine 終於 Beta 囉!)。目前正在想辦法把 Gentoo AMD64 Minimum CD 用這台內建的燒錄機燒成光碟(Windows 真不好用...),祝我好運吧!

星期四, 10月 20, 2005

禍不單行的 shift...

這台 Acer TravelMate 360 鍵盤上,左邊的 Shift 鍵掉了下來...

完了... 我很依賴那個 Shift 的... 怎麼辦......??

台中沒有相機,照片稍後補上。