拿起荒廢超過半年的 Chrasis,想藉由更換核心演算法來改進辨識率。
本來想以筆劃的角度向量來比對,寫下去之後發現要比對的資料哭爸多,跑起來跟烏龜一樣。
所以我這個週末做的事情有一半是白做了 = =
目前想到的辦法是使用 2-pass 的 matching,先由一個正確率低但是速度快的演算法來作 1st-pass,再丟給這隻烏龜作 2nd-pass。
拿起荒廢超過半年的 Chrasis,想藉由更換核心演算法來改進辨識率。
本來想以筆劃的角度向量來比對,寫下去之後發現要比對的資料哭爸多,跑起來跟烏龜一樣。
所以我這個週末做的事情有一半是白做了 = =
目前想到的辦法是使用 2-pass 的 matching,先由一個正確率低但是速度快的演算法來作 1st-pass,再丟給這隻烏龜作 2nd-pass。
從純 User 的角度來看,比起 VMWare,VirtualBox 的好處是,不必載入一堆有的沒有的核心模組(只有一個 vboxdrv),而且少了一堆 init script。付出的代價是... 某些方面的設定多了一些,不過這些設定並不複雜,只是麻煩些罷了。
如果您也跟我一樣不想讓 VirtualBox 用內部的 NAT,而是透過 Host Interface 直接上網,可以這麼作。首先假設網路拓樸長這樣:
config_eth0="null" # eth0 設為 null,並且把其他跟 eth0 有關的設定都拿掉
bridge_br0="eth0" # 讓 bridge 由 eth0 組成
config_br0=( "192.168.1.254/24" ) # 改成您的 IP
#config_br0=( "dhcp" ) # 如果您要讓這台機器走 dhcp
brctl_br0=(
"setfd 0"
"sethello 0"
"stp off"
)
routes_br0=( 'default via 192.168.1.1' ) # 如果用 dhcp,請註解掉。
fallback_br0=( "apipa" ) # 可有可無...
...
link_ppp0="br0" # 如果有 adsl 撥接,請改成透過 br0。
...
$ sudo ln -s /etc/init.d/net.{lo,br0}
%vboxusers ALL=(ALL) NOPASSWD: /usr/bin/VBoxAddIF, /usr/bin/VBoxDeleteIF
#!/bin/bash
IF="${1}"
ACTION="${2}"
BRIDGE="br0"
case "${ACTION}" in
up)
sudo VBoxAddIF "${IF}" "${LOGNAME}" "${BRIDGE}" > /dev/null 2>&1
;;
down)
sudo VBoxDeleteIF "${IF}" > /dev/null 2>&1
;;
esac
echo "${IF}"
電腦病毒無孔不入 國際太空站也無法倖免
28 Aug 2008
NASA 的科學家今天忙得焦頭爛額,因為國際太空站上一台筆記型電腦被病毒入侵。基於安全的顧慮,NASA拒絕透露入侵太空站的病毒來歷及路徑。不過一個專門報導太空新知和新聞的網站透露,那個撈過界、上了太空的病毒,可能是透過磁碟,入侵太空站的電腦。它是視窗系統大約一年前出現的一隻病毒,設計者的目的是要盜取線上遊戲的資訊,那些被鎖定的線上遊戲有一部份只有中文版,包括征途、煌易及洛汗。
在被病毒入侵之後,國際太空站上的電腦,已經裝了新的防毒軟體。
不是反微軟,而是他潛在的危險性比其他作業系統高太多了。不管是漏洞的數量、修理的速度、病毒的量... 等,都比其他系統來的糟糕。
不知道 NASA 有沒有順手把那台電腦升級成 Windows Vista?
我媽是幫人家作美容的,所以時常需要儲存大量的膚質檢測的照片、化妝過程的影片、資料、與一些課程的錄音。可想而之,這些都是動輒數百 MB、甚至數 GB 大傢伙。而她那台 120GB 硬碟的 ASUS A8Je(這台機器又大又重又沒有比較快,在我看來一無可取,還有一些哩哩叩叩的問題,不過那些又是另一個故事了!)根本放不下這麼多東西。
再來就是我妹的 Acer TravelMate3000,有點古早的機器,只有 512MB 的 RAM。配上一顆 4200rpm 的 60G 硬碟,跑起來跟烏龜有的拼。玩 ANNO 1503 都氣喘吁吁,所以決定幫她升級個 RAM。
總之呢,就殺去光華買了以下東西...
硬碟拿回家當然是先 benchmark 一下。用 h2benchw 跑了 read test,速度很神奇的從頭到尾都在 34.5 ~ 35.5 MB/s 之間晃盪,看來這顆硬碟的速度超過 USB 的極限,沒辦法更快了... 跑完以後我就懶得跑 write test 了,因為 1TB/35MBps = 460min,我懶得再等他跑一遍 = =
RAM 的部份,A8Je 這個爛東西,BIOS 不支援 memory remapping(已經更新到最新版了),所以只能讀到 2944MB。是的,意思是說有 500 元的 RAM 沒有用到。但是至少雙通道沒問題,就將就用吧!該死的 A8Je。
剩下 1GB x 2 就塞給我妹電腦(什麼?你問我幹嘛不按槓下來?其實我也很想啊~可是我的是 DDR 不能插 QQ)。可是根據我妹的證詞指出,升級 RAM 以後機器變熱了!?奇怪,難道 1GB 模組比 256MB 模組熱嗎?
藍牙滑鼠很不錯,羅技新的雷射光學鼠,在什麼鬼地方用都感應的到。只是 BlueZ 3.36 的 Service Framework 怪怪的,bluez-gnome 也怪怪的,所以加起來就有時候連的上有時候連不上。如果您使用 bluez-gnome 或 kdebluetooth 卻沒有辦法連上藍牙鼠,又試過一般步驟(`hcitool cc <bdaddr>' 一類的)也不會動,可以試試以下的步驟...
先用以下的 python script 試試看...
import dbus
bus = dbus.SystemBus()
# service activation
bmgr = dbus.Interface(bus.get_object('org.bluez', '/org/bluez'), 'org.bluez.Manager')
bus_id = bmgr.ActivateService('input')
imgr = dbus.Interface(bus.get_object(bus_id, '/org/bluez/input'), 'org.bluez.input.Manager')
# devices
devices = imgr.ListDevices()
for path in devices:
idev = dbus.Interface(bus.get_object(bus_id, path), 'org.bluez.input.Device')
if idev.IsConnected():
print 'Path: ' + path + ' [connected]'
else:
print 'Path: ' + path + ' [not connected]'
print ' bdaddr: ' + idev.GetAddress()
print ' Name: ' + idev.GetName() + ' [' + str(idev.GetVendorId()) + ':' + str(idev.GetProductId()) + ']'
# try connect unconnected devices
if not idev.IsConnected():
print 'trying to connect...'
idev.Connect()
如果還是不行,再跑這個 python script,別忘了把 "XX:XX:XX:XX:XX:XX" 換成您的 bdaddr:
import dbus
bus = dbus.SystemBus()
# service activation
bmgr = dbus.Interface(bus.get_object('org.bluez', '/org/bluez'), 'org.bluez.Manager')
bus_id = bmgr.ActivateService('input')
imgr = dbus.Interface(bus.get_object(bus_id, '/org/bluez/input'), 'org.bluez.input.Manager')
# create and connect to device
path = imgr.CreateDevice('XX:XX:XX:XX:XX:XX')
idev = dbus.Interface(bus.get_object(bus_id, path), 'org.bluez.input.Device')
idev.Connect()
如果還是不行...... 就沒轍啦!把 /etc/init.d/dbus 跟 /etc/init.d/bluetooth 都 restart 一次再試試看!
您可能沒有辦法在 1 公升的茶壺裡裝下 1.5 公升的水,但是現在您有機會在 1GB 的記憶體裡面塞進 1.5GB 的資料!與 Windows Vista 的 ReadyBoost 不同,Linux 的 CompCache 試圖在不須外加任何硬體下,把更多資料塞進記憶體裡面。
與許多先進的作業系統一樣,Linux 以分頁(page)來管理記憶體。Linux 的分頁大致上可分為:
如果某個記憶體分頁中的資料與磁碟上的一樣,我們叫這種分頁乾淨的分頁(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 一類的雜事),所以釋放的順序通常是:
由於磁碟跟記憶體的速度簡直是烏龜比火箭,當您需要使用大於電腦實體記憶體的儲存空間的時候,就會發生 thrashing。亦即,核心好不容易把資料 A 寫進硬碟,騰出空間給資料 B,但是您馬上又要使用資料 A,只好又把資料 B 寫進硬碟,讀取資料 A,可是過一會兒又要用到資料 B... 於是硬碟怒吼、滑鼠呆滯、機殼好像瘋了一樣隨硬碟起舞...
CompCache 就是解救這個狀況的救星!它的基本概念很簡單,擠不出多餘空間的時候,把 dirty 的 anonymous pages 壓縮起來 swap 回 ram,再把節省下來的空間分配給需要的程式使用。在大部分的電腦配置下,即使壓縮、解壓縮再怎麼慢,通常也比磁碟存取快的多。
如果您知道如何編譯核心,那麼安裝 CompCache 並不困難。首先,您必須有一套支援 CompCache 的核心(例如 zen-sources 2.6.25+),然後打開 CONFIG_BLK_DEV_COMPCACHE 即可,我是編譯成模組(m)。使用新的核心開機,然後執行
# modprobe compcache
即可。CompCache 預設會將佔用的記憶體上限設為實體記憶體的 25%,如果要調整,可以在 modprobe 的時候指定 compcache_size_kbytes 參數,例如 modprobe compcache compcache_size_kbytes=524288 即使用 512MB 作為上限。
# swapon -p 9999 /dev/ramzswap0
在我的機器上的實測,這台機器目前是 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 倍。
一開始是像美食節目那樣,跑去一家專門賣生魚片的餐廳吃東西(生魚片餐廳當然吃生魚片)。那個廚師切切切,準備準備準備很久,終於要上菜。他先拿了一塊魚,切的好小好小... 每個魚片大概只有指甲蓋那麼大... 放在一個很和風的小碟子裡。再配上非常超級多的芥末,大概有一整碗牛丼那麼大,再灑上一些醬油... 吃的時候把魚生拿去沾醬,掉進去就整個找不到了... = = 一邊吃還要一邊聽廚師濠洨說為什麼要把魚生切這麼小,是為了方便品嚐,能吃到魚的鮮美芸芸,整個就是吃得很不過癮...
接著就說要去一家極簡風的生魚片餐廳,而且店長從山下引入山泉水,可以一邊聽水聲一邊吃飯,要坐火車去,結果就跑上火車。火車坐一坐就有像是料理東西軍在介紹日本各地有名的店那樣,旁邊有人指著窗外說「就是那家!在那裡!在那裡!」,可是經過我們要去的店以後,火車快飛火車快飛穿過高山飛過小溪~,等了好久才到下一站...
下火車要坐回來的時候,就變成搭乘公車。車上的人不少,都是穿掉嘎戴斗笠的老頭子跟包頭巾老太婆,大部分的人都拿著大包小包的東西,不知道為什麼我媽跟我妹也跑出來跟我一起搭(而且也拿著大包小包)。因為剛才實在是過了好久,所以我一邊搭一邊抱怨「為什麼我們要來這種鳥不拉屎的深山吃生魚片?」。終於快要下車的時候,我們一按下車鈴,整車的人都站起來...... 全車都要下是怎樣!?可是沒辦法,站起來拿東西準備下車。耶?前面椅子上掛著的包包,好像是我媽咪不小心留下來的耶?「媽咪!媽咪!這兩包東西是我們的嗎?」叫了兩三次,我媽都不理我,我就想說算了,走去前面準備下車。可是我親愛的妹妹怎麼不見了呢?原來她聽到我的聲音,跑去拿那兩包東西。我們三個終於下車以後,我媽就罵我妹「你怎麼那麼慢?大家都在等你下車。」沒想到我妹居然說...
「我在想這兩包東西那一包比較不重要,是不是要把它們丟掉一包。」XD~
今天的新聞「上網查央圖藏書 網頁落伍」。
其中
最近心情不是很好,主要的原因是大學要延畢... 為了振奮精神,決定添購新的電腦設備。嗯?你說「為什麼心情不好要買新電腦」嗎?哎唷,就像有人心情不好去飆車,有的人去大吃大喝,添購新電腦應該是不傷身體(嗯... 傷荷包 XD~)、健康、又可以刺激經濟發展的方法... 再說,目前桌機也舊的該換了,不但效能已經不敷使用,耗電量也較高,每瓦效能就更難看了...
前桌機:
- CPU:AMD AthlonXP (Barton) 2600+ @ 1933Mhz
- Ram:DDR-333 256MB x 1、DDR-400 512MB x 1(total 768MB)
- MB:Gigabyte 7VT600P-RZ
- GPU:GeForce 7300GT 256MB
- Storage:Seagate Barracuda 7200.10 320GB x 2
- PWS:EQUAL ISO-400D (300W)
- OS:Gentoo Linux 2007.0
- CPU:AMD AthlonXP 1800+ @ 1150Mhz(因為板子不支援 133Mhz 的 FSB,只好跑 100Mhz)
- Ram:256MB PC-133 SDRam x 3
- MB:Gigabyte GA-7ZX
- GPU:GeForce FX 5200 128MB
- Storage:Seagate Barracuda 7200.8 200GB
- NIC:Realtek RTL8139B
- PWS:Delta GPS-300AB-100E (300W)
- OS:Ubuntu 8.04
比較快的那台桌機,編譯 glibc 要花一個多小時,根據 AthlonXP 的 TDP 68.3w 來計算,68.3w * 1.25hr = 85.375w-hr,如果 glibc 改版個 12 次,我就要排放 0.638kg 的 CO2,而這些還不包括 MB、RAM 等週邊消耗的電。
比較慢的那台機器雖然比較少編譯東西,但是設備老舊到我不知道該拿他來幹什麼(因為幹什麼都慢...),所以除了偶爾玩玩 Chromium BSU、開 Firefox 上上網以外,大部分時間只是浪費能源...
而且兩台都是超過五年的機器,當時的設備比較不注重能源管理,所以都沒有省電功能,搞得我不開冷氣電費還要兩千多塊...
今桌機:
- CPU:AMD Phenom X4 9550 @ 1.1Ghz ~ 2.2Ghz
- Ram:Transcend DDR2-800 2GB x 4
- MB:ASUS M3A
- GPU:GeForce 8500GT 256MB
- Storage:Seagate Barracuda 7200.10 320GB x 2(原來的)
- PWS:Seasonic SS-380GB (380W)
- OS:Gentoo Linux 2007.0
- CPU:AMD Athlon64 X2 4600+ @ 1.0Ghz ~ 2.4Ghz
- Ram:Transcend DDR2-800 1GB x 2
- MB:Gigabyte GA-M56S-S3
- GPU:GeForce 8400GS 512MB
- Storage:Seagate Barracuda 7200.10 320GB x 2(用舊的)
- PWS:EQUAL ISO-400D (300W)(用舊的)
- OS:Hack1nt0sh(預定)
Phenom 的 TDP 有 89w,Idle 時的 power consumption 約 21w,但是現在 glibc 十四分鐘可以編完,換算起來是 89w x 0.25hr + 21w x 1.0hr = 43.25w-hr,大約省了一半左右的碳,而 DDR2 也比 DDR 省約 50% 的電,新 Power 也號稱有 85% 以上的能源轉換效率。
而且換了新電腦,現在從開機到進入圖形介面,大約只要 30~40 秒,若再配合一些加速開機的 tuning,應該可以降低到 20 秒以內。這讓我想要再弄一台更省電的機器養動物,最好是插個像手機充電器那樣的變壓器就可以跑,桌機不用時就可以關機了。
再加上筆電(後來被我升級成 1GB RAM)的話,共有...
話說 GeForce 8400GS 這張卡跑起 3D 真的不怎麼樣... 如果預算充足,多花個 500~1000 買到 8600GT,Quake4 engine 可以多跑 4 倍的 FPS。8400GS:8500GT:8600GT 效能約 1:2:4,但是價格是 1:1.3:1.9。
如果您使用 nVidia 的顯示卡與官方驅動程式,dmesg 中又一直出現這個訊息的話,表示您忘記載入 cpufreq 驅動程式了。可是... 為什麼明明就是顯示卡的 module,可是卻使用 cpufreq 的東西咧?
真是令人不解!
無論如何,只要載入 cpufreq 的 module,dmesg 中就不會再一直出這個訊息了。
// 我的是 powernow-k8,請自己改成適當的 driver: # modprobe powernow-k8
想要從敝系畢業的話,必須先考過系上的程式能力檢定。雖然他有提供練習用伺服器,但是用起來很囉唆,要裝一堆軟體、設定 IP 等等有的沒的。
為了讓拙荊方便練習,上學期中我就抽空寫了個功能目標類似的小網站給她,還有其他程檢沒過的同學們玩。不過... 到最後來玩的都是過的,沒過的都懶得玩 = =
Anyway,這門零學分不上課的必修課可是系上唯一有開暑修的課,意思是說這些沒過的傢伙暑假又得再考一次。於是我想把上學期寫的這個東西拿出來整理一下,看看有沒有可以改進的地方...
想進化的第一個門檻就是,之前寫的時候時間有點趕,整個程式以 procedural 為主,完全沒有考慮到安全性、擴充性、與維護等等議題。首先把 Program 與 Presentation 分開,就需要用到一個 template engine。但是 php 的 template engine 都是 Smarty 一類的大傢伙,我實在不想也懶得把他抓進來放到我這只有兩三個檔案的小專案裡面。於是,這個東西就誕生了!
<?php
// 設定 Template 檔案所在目錄
define('_STUPIDITY_TEMPLATE_DIR_', '/home/username/public_html/project_name/stupidity');
class Stupidity
{
function assign($key, $value)
{
$this->_assigned[$key] = $value;
}
function get($key)
{
return $this->_assigned[$key];
}
function say($key)
{
echo $this->_assigned[$key];
}
function render()
{
global $stupidity;
include_once(_STUPIDITY_TEMPLATE_DIR_ . '/' .
$this->template_filename);
}
}
$stupidity = new Stupidity();
?>
用起來也很簡單,在程式的部份先 include stupidity.php,設定 template filename,assign 資料以後,再 render 就行了:
====== index.php ======
<?php
include('stupidity.php');
$stupidity->template_filename = 'index.stupid';
$stupidity->assign('author', 'Palatis');
$stupidity->render();
?>
====== stupidity/index.stupid ======
<html>
<head>
<title>I N D E X</title>
</head>
<body>
<h1>I N D E X</h1>
<p>Copyright 2008 by <?php $stupidity->say('author'); ?>.>/p<
</body>
</html>
BSD License!不過我沒有對它作過任何測試,如果爆掉的話就... 好自為之喔!
BTW... 這個檢定系統 Google 會想買嗎?XD~
DoS 是 Denial of Service 的縮寫,翻譯成中文就是「阻斷服務攻擊」。這個種類的攻擊,應該大部分的未成年人都遭受過:
你半夜偷偷上網,結果老媽進來把電源拔掉。應該是最常發生也最常見的 DoS。
至於 DDoS 則是 Distributed Denial of Service,即「分散式阻斷服務攻擊」:
你半夜偷偷上網,結果老爸老媽姑姑嬸嬸叔叔伯伯一起進來,一個抓住你的手、一個抓你腳、一個擋住你眼睛、一個拔掉你電源線、一個拔掉網路線。這樣就是 DDoS。
昨天(2008/05/03)早上做了個夢,如果拍成電影應該可以算是恐怖片一類的,但是起來以後並沒有被嚇到的感覺,只是覺得震驚。
我夢到我媽在開車(一直都是那台香檳色的 Toyota Camery),我坐在後座右邊的位置。總覺得車上還有另外一個人,可是記不清楚了,有可能是我妹,第三個人坐在哪裡也記不清楚了。
我媽開著車子走在一條雙向六線道的路上,路很寬,中間有安全島,有點像高速公路,可是兩邊有四層的房子跟店家,安全島也沒有高速公路那麼高。路上車子很多,前後車距只有約不到一個車身,而且三條線都有車,我媽的車以不慢的車速開在快車道上。
突然間,從右前方的車子前面衝出一個五、六歲穿白色 T-Shirt、深藍色短褲的小男孩(應該是男孩,他留著普通的旁分短髮),我媽就緊急煞車,然後把車撞向安全島。但是還是閃避不及,後輪輾過那個小男孩的頭。
車子停下來以後,我們趕緊下車查看,我叫車上的第三個人打電話報警,我自己則是一邊找那個小男孩在哪裡,一邊叫救護車。只記得那個小男孩從脖子以上都沒有東西,身上的白色 T-Shirt 從領口到胸口沾滿血跡,轎車的後輪也有一道血痕,地上有模糊的血肉,不過車子本身似乎並沒有什麼事。
從右手邊的車縫中,又跑出來一些(兩三個吧!)看似男孩家屬的人出來五子哭墓,並斥責我媽要她負責。不過我媽的立場是,她認為已經做了她該做的事(緊急煞車並且把車撞向安全島),而小孩的家長也沒把小孩看好,讓她跑來快車道,所以家屬要負大部分的責任,所以在兩邊快要打起來的狀況下跟對方理論。
不過奇怪的是,本來我媽在開車的時候是現在(五十歲)的樣子,可是在下了車跟對方理論的時候,卻變成我小的時候的媽媽(三十幾歲)的樣子了。而且我覺得我也不是現在的我,而是三、四年前的我。
我在看到小孩衝出來的時候,並沒有什麼太緊張的感覺,只是很平靜的想「耶?怎麼會有小朋友衝出來?」,下車之後要打電話吆喝車上的第三人的時候,也不是因為緊張而大聲吆喝,而是因為緊急所以聲音比平常急。
最後,夢就在我媽跟對方家屬理論、有點生氣的述說自己已經煞車、打方向盤云云後結束了。
耗時兩年,做得不怎麼樣的畢業專題 - Chrasis,終於在昨天展完。剩下的只有把程式碼燒進光碟(應該燒成 Blue-ray Disk,充分浪費儲存空間!),跟成果報告書一起塞進圖書館陰暗角落的書櫃中。
$ du chrasis/ -hs
35924 chrasis/
程式碼有 36MB 呢!真是佩服我自己,花了兩年居然只能寫這麼點東西,都不知道在混什麼... = =
不過我在展的時候... 好像都沒有被老師ㄉㄧㄤ到咧?據說別組被ㄉㄧㄤ的很慘...
--- Orz 分隔線 Orz 分隔線 Orz 分隔線 Orz 分隔線 ---
據說有更屌的... 某組別的同學在評分老師(下稱 TeacherQ)質詢的時候,該組的指導老師(下稱 TeacherM,同時也是敝系主任)剛好在旁邊。結果 TeacherQ 問的問題全都是 TeacherM 在回答。哇咧!?這是怎樣?那我找指導老師來顧攤就好了嘛,絕對問不倒的!
還有就是,這次專題展系上每組僅提供一台電腦,而且這台電腦是於 90 年 11 月 22 日以 $50000 採購,使用年限四年的機器。意思是說,這個東西已經過了線性折舊期,可以拿去報銷了。那我如果不小心把它弄壞的話,只要賠 $0 囉?
另外,因為我們的展覽有分兩個梯次,下一組展覽的同學把我們借的設備也拿去用了(奇怪,我們需要三台電腦要自己出兩台,他們只要出一台就好,是怎麼回事?)。可是因為專題需要,我把那台電腦灌成 Ubuntu 了耶!!!
--- Orz 分隔線 Orz 分隔線 Orz 分隔線 Orz 分隔線 ---
還有一件想起來的時候已經來不及的事情... 本來想說要利用專題展的時候偷偷蒐集 stroke data 的,可是展覽結束我居然忘記把他們複製出來 = = 白忙一場了...
在 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
好久沒寫 blog 了,再不更新不知道會不會被 Blogger 刪帳號...
專題展正在展,現在稍微比較閒一點。人肚子餓就想找東西吃,吃飽了就想東想西。最近就想到個奇怪的東西...
這個奇怪的... 恩... 姑且稱為產品好了。我想在衣服背後用 e-ink 之類的東西印一個 display,配合 wlan 或其他定位技術,可以用來指向某個特定的位置。例如去參加某活動(COSCUP/OSDC/CWT...?)的時候,通常都要東找西找某個設施,如會場或廁所。於是讓工作人員穿上這樣的衣服,直接有個箭頭指向會場或週邊的重要設施,參加的來賓看到就知道要往哪裡走了。甚至可以配合顯示還有多遠這樣... (謎之聲:幹嘛不放個告示牌就好了?我:唔......)或是可以讓講者攜帶定位裝置,這樣要找某位講者,可以讓大家衣服上的箭頭都指向那個講者。可能還有其他應用,暫時沒想到。不過基本上是電子墨水跟無線網路的 mash-up。
這種衣服還有個好處,可以上網下載花紋... 例如我今天要穿紅色的花紋,就上網下載以後顯示在衣服上。如果我突然想要其他顏色,就去下載些其他圖案,就像換桌布那樣。於是你要開正式會議的時候,就讓它變成什麼都沒有的白襯衫,開完會換個圖案馬上就可以去夜店,多好!像 jserv 這種人(剛好想起前幾個禮拜拜讀他這篇文章,並無冒犯之意...)就得救了!