2008年12月24日 星期三

linux 2.6 的 ACL

其實我不確定這是否是2.6才有的功能,不過2.4時沒有用過
由於開發環境不是我架設的,我又不知道學弟有設ACL,搞半天一直沒法ssh進去開發機………

ACL的設法:
vim etc/hosts.allow
sshd: 192.168.10.55, 192.168.10.41, 192.168.10.118: allow
在sshd:後面加入你要allow的ip即可

另外好像要合hosts.deny使用
vim etc/hosts.deny
sshd: all: deny

學弟把所有都deny,這樣就造成了除了allow的ip之外,其他的ip都沒法ssh進去

存檔後,service network restart即可

.

一個奇怪的bug:linux沒法login

最近改了2.6的skbuff.c,由於我code寫錯了,造成skb會永遠要不到,且會產生memory leakage
而bug的結果就是,沒法login(就是輸入對的密碼後,linux會一直跟你說密碼錯誤,看起來就像密碼被改掉一樣),即使是使用console

這個結果跟bug不太好關聯,你很難從沒法login察覺到是由"要不到skb"會是"memory leakage"造成的

一開始我還覺得奇怪,為什麼其他的kernel都可以login,就是我改過的這個kernel沒法login………

我把這個bug紀綠下來,以茲紀念

.

假髮與語言真實性的關係

2008年的12月,邱毅的假髮在鏡頭前被扯了下來,證實了一直以來的謠言:邱毅帶假髮

我想邱毅說的沒錯,大庭廣眾下被扯下假髮,就跟當眾被脫下衣服一樣難堪

我看到綠委召開記者會說:邱毅的頭髮是假的,所以他爆的料也都是假的

這中間的邏輯,顯然我不能理解,也許這並不屬於科學的範疇,我想,或許神學或哲學能夠解釋這個邏輯吧

依照綠委的話,其邏輯應該是這樣:若一個人身上有某樣事物是假的,那麼他說的話的真實性就要打折扣

如果這個邏輯成立,那麼我們可以這樣理解:
如果一個人帶眼鏡,那麼顯然他的視力是假的,所以他說的話的真實性要打折扣
如果一個人有染髮,那麼顯然他的髮色是假的,所以他說的話的真實性要打折扣
如果一個人有貼假指甲,那麼顯然他的指甲是假的,所以他說的話的真實性要打折扣
其他的,依此類推………


好吧,我承認我知道他們的目的只是想召開記者會上電視增加曝光率,不讓大家忘記這些人
所以這一陣子在電視上看到的新聞都是這些人
我只是受不了他們的顛倒是非,指黑為白

鄉民說的對,跟小白認真你就輸了
對不起,我認真了

.

2008年11月19日 星期三

修改輸入法順序的好工具:IMETool

我在很多地方有很多電腦,這些電腦上都會裝三個以上的輸入法
而奇怪的是,這些電腦上的切換輸入法的順序都不一樣,切換的按鈕也不盡相同
不知道為什麼會產生這種問題,而且winxp也沒地方可以設定,比如說,我有一台Toshiba的M30,不管怎麼設定,就是沒辦法用ctrl + space在中/英文輸入之間切換,我也不知道為什麼
這個問題困擾我很久………

直到有一天我受不了,問google

嗯,在試用後,我想我找到解答了,那就是IMETool

細節就不講了
總而言之,他就是一個修改輸入法順序的工具程式,不用安裝,免費

cisco 2950 mirro port設定

這幾天為了做實驗,要把電腦教室的流量mirror出來,無奈,系計中的技師太龜毛,不讓我們用機房,我們只好自己從實驗室找出兩台cisco 2950在教室出口端把流量mirro出來

從沒碰過cisco的東西,然而老師有令,實驗還是要做,只好一步一腳印的將cisco的mirro port的設定方法試出來

首先,一定要有cisco專用的console線,然後,cisco console的bouad rate是8192

連上後,要執行en進入supervisor mode才能設定,輸入en後會要你輸入密碼,敲入密碼後後就進入supervisor mode了,此時,提示符號會從>變成#

cisco的指令輸入有點像linux的bash,輸入前幾個字後,按tab會幫你補完,另外,好像常用的指令都會有縮寫,如en就是enable的縮寫,f0/1,就是fast ethernet 1的縮寫(f0/1的意義是別人告訴我的),有縮寫的打縮寫也可以用

另外,由於指令都很長,若不知道接下來該打什麼,可以按?
他會將下一個指令的選項都列出來
如,monitor後面不知要接什麼,則可以打monitor ?
它就會列出monitor後可能的選項,而我們就可以從其中挑出session,接著再打monitor session ?
它又會列出monitor session後可以用的選項

一開始可以打show running-config,看看這台switch的設定

接著,若我們想要把port 1的流量從port 24 mirro出來,我們要這樣輸入
config t
monitor session 1 source int f0/1
monitor session 1 destination int f0/24
輸入完要記得按ctrl+z存檔

要看有沒有輸入成功,可以輸入show running-config看狀態

最後,要記得write memory,這樣即使swith斷電設定也會保留

聰明的同學看到設定應可以舉一反三,若要mirro的port不只一個呢?假設我們現在也要將port 2 mirror到port 24呢?(也就是說,port 1和port 2的流量都mirror到port 24)
在前面的設定下,再加一個設定
config t
monitor session 1 source int f0/2
ctrz z

看running-config,你會看到source port變成[1-2],也就是說port 1到port 2的流量會被mirror出來


以下是推理
在2950下,若你輸入monitor session ?
可以看到只有1和2可以選,也就是說,2950只能mirro兩種不同的流量
也就是說我們可以同時做到將port 1~11 mirror到port 12 (session 1),port 13~23 mirror到port 24 (session 2)
但是卻無法有第三個session

man的用法

我是個linux使用的苦手,但還好我有個linux很行的學弟……為免我忘記,就順手記下吧

man是個好東西,可以用來查bash的指令,也可以查function的prototype和用法

但是問題是,若你要查的指令同時存在bash和stdio.h中,會發生什麼事?
答案是,會找到bash

比如說,rename同時在bash和stdio中都有,若你想找的是stdio.h中的用法,可是輸入man rename,卻只會出現bash的用法,怎辦?

答案是:man 2 renmae

學弟跟我說,man有九個section,man後面加個數字就是指定section,而不加的話,就會以第一個找到的為主

那麼,若第一個找到的不是你想要的,怎辦?

學弟跟我說,猜

man 2 rename 到 man 9 rename,總會有一個是你想要的……

另外,man應該是manual的縮寫,絕對不是學長所說因為linux是男生寫的關係

2008年11月5日 星期三

docx轉doc

自從office 2007推出後,身邊也漸漸的有人用
但是office 2007的副檔名為.docx,而非原來的doc

於是,就看到這些人,寄出來的附件就要附兩個檔案,一個是doc,一個是docx……
(我說,何必呢,用回office 2003不就好了 = =)

但是,偶爾也會遇到這些轉過的doc打不開的情形

昨天奉命幫老婆大人解決這個問題,發現微軟有出一個FileFormatConverters.exe,用來將docx轉為doc,有27.5mb,不小

檔名聽起來是轉檔用的,實際上
裝完後,重新開機,舊版的word就可以打開docx了

不過效果不甚理想………還是有些圖會消失

最後解決的方法是,用同事的電腦打開docx,再轉成pdf

在找solution的過程中,發現有人在推廣別裝office 2007
帶頭升級 Office 2007? 別當害群之馬
個人覺得蠻有道理的
每次看到同事同一個檔案要附件兩個(doc和docx),都會想到黃易在翻雲覆雨中人物的對話:這又是何苦來由呢?

2008年10月31日 星期五

修改linux網卡的設定

.

對linux使用實在是不熟,請容許我做個小筆記

ifconfig的script的位置在/etc/sysconfig/network-scripts下
想要對其設定做永久的變更,直接去改script即可

ifcfg-eth0為eth的cfg file,內容大致如下
DEVICE=eth0
HWADDR=00:1a:64:21:d3:11
ONBOOT=yes
NETMASK=255.255.255.0
IPADDR=192.168.1.2
GATEWAY=192.168.1.1
TYPE=Ethernet
若安裝時沒有設IP,預設則為IPPROTO=DHCP,並且會少一些設定,將該行設定拿掉後,補上相關設定,存檔後,執行service network restart,網卡就會有IP了

順帶一提,linux的開機script是rc.d
我一直不知道這是什麼的縮寫,也就一直記不住script的名字.....
學弟說,那是run command的縮寫,從此我就記住了…

.

Make linux kernel

make kernel網路上很多文章在講
這一篇,是做為我的筆記,方便我找尋

一直寫linux kernel的code,但是很少make kernel
最近拿到一份修改過的skbuff.c,除了看作者是怎麼改code之外,免不了要評估效能,於是,就要將改過的skbuff.c替換原本skbuff.c,make出一份新的kernel

將code替換後
在kernel source tree下

1.make menuconif
選擇要編進kernel的module,看是直接編入,或是以module型式存在
由於我們是做transparent network device,因此,我們的kernel很乾淨,除了必要的driver不必要的東西都被拔掉
2.make clean
3.make
4.make bzImage
5.make install

在make install後,/etc/grub.conf會被修改
由於我們的device沒用到ramdisk
因此,還要修改/etc/grub.conf
1.開機的partition指向hda3
root = /dev/hda3
2.將ramdisk mark掉(前面加#)
#initrd /initrdXXXXX.img

如此,kernel已被替換
重開機即可

2008年10月27日 星期一

使用了鋼筆一段時間的心得

在入手許多鋼筆,寫了一陣子後,有一些心得
以下是純粹是個人想法



帶給我最愉悅的書寫感受的是白金的3776
白金的3776有許多系列,個人覺得C/P值最高的當推3776鋼尖,也就是日本白金編號PTB-5000B的鋼筆
原廠連結


此圖從原廠連結

白金的鋼筆型號就是其日幣定價(未稅),也就是說,這隻筆的日幣定價為5250
這隻台幣1000出頭就買得到,即可享受3776的書寫感受,價格也不致負擔太大
個人覺得3776鋼尖的神奇之處是,鋼尖可以做出很好的彈性,3776的鋼尖具備了一般K金尖的彈性,這是我覺得很神的地方,也許是因為筆尖的型狀所致

至於3776往上還有更高的等級,包括高級的筆桿,14K金尖等,這就看個人的喜好了

並不推薦台製3776(及編號PB-700,此時的白金台灣的筆是用台幣定價,也就是定價700),因為同樣是鋼尖,日製的沒比台製的貴多少,然而,台製的確較容易出問題,也許是台製的3776年紀較大了........
我已經遇過兩隻會漏墨的台製3776了
而且,台製3776只有中字尖可選,不像日製3776,從超太到超極細都有(但台灣店家不一定全部的筆尖都有進)

由於白金的筆尖徧細,因此3776的中字尖,個人覺得粗細剛好,不會太粗


C/P值最高的鋼筆是白金Preppy
這隻筆討論極多,我只能說,他以極低的成本結構,傳達給你不打折的鋼筆書寫的經驗
若要入門鋼筆的朋友,我會推薦這隻,建議可以用這隻寫一陣子,再往上攻
透明的筆桿帶點流行,有五種顏色的墨水和筆身可以選,缺點是筆桿的貼紙會掉,也就是說,用久了,筆會變成全透明(其實我個人覺得全透明的筆身反而是優點……)
即使手上有了許多高價鋼筆,偶而拿出preepy出來寫還是會為其筆尖的流利感到驚豔

有人說要寫漢字,找白金牌早期的老筆品質較好
其實我覺得,現在可以不必刻意找白金早期的老筆,直接買preppy就對了
畢竟我手上也特意的去找了白金早期的老筆,我只能說,以我的感覺,若同樣是鋼尖(早期的老筆運氣好可以挑到14K金尖,甚至18K金尖),那買Preppy就可以了,不用找


寫樂現在的筆尖不像過去那麼細
相信有逛過筆閣的,也會看過對寫樂早期F-4筆尖的推祟
沒錯,寫樂F-4筆尖我手上有很多隻,確實是極細極流利

但是若你以為寫樂現在生產的筆也像過去那麼細的話,那就錯了
在有了F-4後,是人都會好奇,於是我也買了寫樂現在生產的筆,分別是
Sailor Profit Slim (14K金尖)
Sailor Profit (21K金尖)
雖然筆劃粗細跟墨水有關,但我只能說,在同樣墨水下,寫樂現在的筆尖真的徧粗,而且現在的筆出墨量徧大(也許這是寫樂的筆滑順的主要理由?)
我兩隻都買F尖(筆尖側面會刻H-F)
但是我真的覺得,寫起來,真的沒有日系F尖該有的粗細

2008年7月30日 星期三

關於PCI的probing

.

PCI已經是一個被廣泛使用的bus了,很多的硬體都是PCI介面的,當然,現在更流行的是USB介面,如果我們要撰寫PCI bus上的硬體的driver,第一個要面對的問題是,怎麼確定我們的硬體是否存在PCI bus,以及如何去存取它

之前在看比較傳統的OS的driver,在PCI階段就遇到pci probing和configuration的問題,然而現在雖然linux都幫我們做掉了(是的,pci的部份linux都處理掉了,不需自己probe and get configuration,linux傳給你的struct pci_dev中已經有了它幫我們probe好的informatin),不過因為有看過,還是把它記下來吧

PCI的spec目前到2.2,可以抓下來參考,很多pci存取的細節都被定義在PCI的spec中

我著重在PCI的存取部份的介紹,所以若有看不懂的地方,那就必需去查詢PCI的spec了,PCI有define 64 bit的extension,但是在這裡我們只討論32bit的pci

PCI有自己的space,這個space一般稱為pci configuration space,這個space的address是32bit,每個PCI device佔有一塊固定大小64 dwords(256 byte)的空間,而在每個PCI device自己的空間中,其前面16 dwords(64 byte)的欄位都是一樣的,而存取這16個dwords的位址,其實就等於存取PCI device上對應的16個register,PCI device的資訊都存在這些register中

PCI的configuration register layout如下圖所示:



那麼我們就會面臨到兩個問題:
1.如何存取PCI configuration space?
2.每個device的位址為何? 不知道device的位址,我們就沒法存取

要存取PCI有兩種方式,一是透過IO port,另外一個是在得到memory mapped後的address後,就可以直接存取記憶體位址,利用memory mapped access了
但是在還沒獲得memory mapped的address之前,初始我們還是必需透過IO port存取
IO port的存取是間接存取,其必需透過c語言的in和out指令,讀取的時候,將我們要訪問的PCI configuration space中的address寫入(也就是in)0x0cf8這個port,然後就可以從port 0x0c00讀出(也就是out)結果,這種利用IO port的讀取我們先將其命名為IO port read

而在讀出BAR (base address register)這個register中的值後,我們就知道這個PCI device的configuration space被mapping到記憶體空間的哪裡,於是就可以像存取記憶體一樣去存取PCI device了


在知道如何存取PCI configuration space後,接下來的問題是,我們要如何從PCI configuration space中找到我們driver要support的device?

首先,PCI spec中提供了兩種configuration transaction,分別為Type 0和Type 1,Type 0和Type 1的差別可以看spec,而我們主要用到的是Type 1 configuration transaction

Type1 configuration時,其address layout如下圖所示:

所以我們要怎麼利用configuration transaction找出電腦上插了哪些PCI device,是否有我們driver support的PCI device?
很簡單,我們不可能知道該卡的bus number和device number,所以我們只能probe,也就是一個個掃過去,換句話說,就是數學上的窮舉
從bus number = 1 ~ 16 (一般電腦上通常只有一個bus),device number = 1 ~ 32,一個一個利用IO port read去讀出每個device空間上的第一組register,也就是PCI device的Vendor ID和Device ID

若該位址不存在PCI device,則IO port read讀出的值為0xffffffff
反之,該位址存在PCI device,則由於IO port read讀出的值包含Vendor ID和Device ID,如Intel的Vendor ID為0x8086,藉由比會Vendor ID、Device ID、Revision ID等值,很輕易的就能比對出probe到的這個PCI device是否為我們driver想要support的對像了
然後,讀出其BAR register的值,我們就能很輕易的存取該PCI device了

而在舊的OS中(如MS-DOS或pso中),這個動作要我們自己來做,而在linux中,很幸運的,linux都幫你做好了,於是你就可以將心力放在自己的driver上

.

白金牌鋼筆的奇怪現象

不得不說,白金(platinum)的鋼筆都很優秀,即使是在低價的鋼筆上也有一定的表現

到目前用過一些白金的鋼筆發現白金的鋼筆在較細的筆尖上有的會有一個奇怪的現象,那就是剛使用時會覺得很刮紙,然後會覺得天啊,怎會這樣難用………
然而再繼續堅持下去,大約在快寫完一管墨水時,會覺得豁然開朗,突然就不刮紙了,變好寫了目前手上有三隻筆都經歷過這個現象,分別是

日製3776 極細(EF)鋼尖日製3776
超極細(UEF)鋼尖
很久的白金18K WG(這隻是從台南同鄉筆閣網友cleanerdie兄讓給我的)

很神奇的,就在某一天起來,打開筆時,就突然覺得變好寫了

另外,由於UEF太細了,即使相對來說變滑順了,但還是稍微有點刮紙,不過我覺得這是天生的物理限制,避不了的,畢竟壓力等於力量/面積,而摩擦力又和壓力成正比,而筆尖越細,和紙的接觸面積就越小……以3776 UEF這麼細的筆尖來看,我覺得它的表現仍可以稱得上滑順

2008年7月18日 星期五

Kad的心得

前言
Kad是Kademlia的縮寫,Kad是一個廣泛被實做的DHT protocol,目前最流行的BT和eMule都實做了Kad
DHT的目的就是為了實現沒有server的目標(decentralized),更準確的說就是人人都是server,人人都是 client

理論上,p2p在實做Kad後,可以在沒有tracker (BT)或是server (eMule)的情況下,搜尋檔案或是找到抓同一個檔案的peer,在知道哪些peer在抓同一個檔案後,就可以開始p2p了,eMule和BT都是用udp實做Kad

Kad使用了xor (exclusive or)的方法去計算距離,需要注意的是,如果把Kad network視為overlay network,那麼Kad計算的是ovlay network上邏輯上的距離,而非真的實體距離

在暸解Kad之前,必需先暸解何為DHT(在BitTorrent的main line中,他只有DHT這個選項而沒有Kad這個選項,儘管他是Kad實作DHT)



我所理解的DHT
DHT是Distributed Hash Table的縮寫,在我的理解中,Table是一個2-column table,每一筆entry就是 pair,而DHT的行為大概接近如下,有檔案的檔腦將他的檔案hash之後得到key,而自己的電腦的IP就是value,再依照"特定的方法"指到一臺電腦將 pair存到他的電腦上,所有有同樣檔的人都會依照"特定的方法"找到"同一臺"電腦將 pair存到他的電腦上,而想要抓該檔案的人在有key的情況下,就可以找到"同一臺"電腦得到所有的 pair,由於value就是IP,因此他就知道哪些IP有這個檔案了,也就可以開始P2P了

在這個過程中,hash的value稱為key是因為,所有人只要有key就能找到同一臺電腦
在這我們稱該臺被找到的電腦為"負責人",所有有同一個檔案的人都可以得到同一把key,然後全都可以告訢該負責人"他們都有這個檔案",而所有要抓檔案的人只要有key都可以找到負責人問出"哪些人有這個檔案",所有key是關鍵,而key又是經由hash得到的,而對DHT而言,"如何依照特定的方法找到負責人"才是研究的人要關心的,Kad就是這樣的一個方法,而Kad的前輩chord,也是一個方法



我所理解的chord
Kad和chord很像,暸解了chord,你就知道Kad怎運作
在chord中,每一個node的IP就是本身的ID,chord把一個object(object可以為實體的檔案,如歌、電影、文件之類的,也可以為任何邏輯上的物件)投影(就是hash,但是我認為hash的邏輯上的意義就是投影)到和4Byte(32bit)IP相同的空間

我們令投影的結果,也就是hash value為key,而value就是有這個object的node的IP,所有的P2P中server負責的任務不過就是讓所以query的人知道有這個檔案的IP是哪些,於是他就可以跟這些IP交換這個檔案,而DHT就是把這個工均攤到所有人身上,換句話說,在將object hash得到key,而有這個object的電腦的IP的value,於是我們就會有一對 pair,在DHT中,擁有該檔案的人或正在抓該檔案的人將 store 到某個被找到的"負責人"身上

假設所有的IP都存在於chord network中(這裡不考慮private IP的3段range),那麼最理想的狀況是,所有的key都找得到人負責,而且是1-to-1 mapping(別忘了,key落在IP的space,而每個IP都存在),所以這時的狀況就很簡單,誰的IP等於該key,那麼誰就是該key的負責人

遺憾的是,這種事不會發生,大部份的情況下,擁有該key的IP的node都不存在,那麼怎麼辦?參考下圖,我們將32bit的space想像是一個有方向性的圓,而且是單方向性(uni-directional)的圓,IP過了(2^32-1)會wrap around回0,於是可以存在一個很簡單的邏輯,那就是若不存在IP == key的node,那麼就從key往下搜尋(也就是IP++,incremental),直到遇到的第一個活著的node,那麼他就是負責人,依照這個邏輯,publish和query都可以輕易的找到同一個負責人,大概就如下圖所示的方法

大致流程可以這樣想像
假設,有三臺電腦分別為a, b, c,他們都有一條歌叫hero.mp3,假設hero.mp3的hash value為x,也就是說hero.mp3的key = x,於是在a, b, c進入chord network時,他們必需做publish這個動作
publish指的就是告訴別人你有什麼檔案,也就是說,如果你有10個檔案要分享,那麼你必需將這三個檔案publish出去,將10個檔案的 pair儲存在對應的負責人身上

於是a, b, c會而用key x找到一個負責人y,然後a, b, c會將 pair,也就是 儲存到負責人y的table中
現在有一臺腦z想要抓hero.mp3這首歌,而z也算出hero.mp3的key = x,於是z利用x找到負責人y,y再將table中的3個entry傳回,於是z就知道a, b, c都有這首歌,也就可以跟他們抓了



Kademlia
Kadd的paper只有6頁,很短 ,paper的全名為Kademlia: A Peer-to-peer Information System Based on the XOR Metric

Kad的想法很簡單,就是找出利XOR計算出任二點在Kad network上邏輯的距離,有了這個距離後,一個key就讓距離該key最近的K個node負責,同理,query時也是同時query距離該key最近的K個node,k是一個系統參數

Kad的paper中,他把NodeID和Key的space定為160bit,並且強調你可以認為Kad中的node是用類似random的方式產生,實際上,每個人實做或多或少都會修改,比如eMule的Kad就是使用128bit的space實做,而非paper中的160bit

有了NodeID後,Kad利用對NodeID和key使用xor計算出距離,這是xor的特性能夠保證結果唯一,xor具備以下特徵
若令d(a, b) = a xor b,則
d(a, a) = 0
對任意b!=a,則d(a, b) = d(b, a) != 0
且xor也有類似三角形兩邊之合大於第三邊的特質
d(a, b) + d(b, c) > d(a, c)

所以在Kad中,每個進入Kad network的人都會有一個160bit的NodeID,而每個object經過hash也會得到一個160bit的key
然後每一個node和key的距離就等於 distance between node and key = d(NodeID, key),也就是NodeID xor key
然後,有檔案的人就把 pari存到距離key最近的k個node即可,也就是說找出k個和key distance最小的node,而要query的人就先找到離key最近的k個node,然後發出k個query,任何一個query有結果就可以p2p了,這樣可以達到parallel的效果以加速
整個Kad就像下圖所示





eMule的實做
eMule的Kad實做採用udp(BT也是),不同的是eMule是採用128bit(16Byte)的space,為什麼?
因為
1.eMule的NodeID剛好就是16Byte
2.eMule本來就是使用MD5來辨認file,而非檔名,而MD5 value剛好也是16Byte
於是一切就水到渠成,接下來Kad的實做就跟Kad的paper一樣了

但是由於eMule是對file content做MD5得到MD5 hash value(也就是key),這樣會有個問題,沒有該檔案或是完整檔案的人沒法算出MD5,沒有key,就不能找到負責人,也就無法抓檔,這一點,除了透過論譠的ed2k連結來解決之外(eMule的ed2k連結中包合了檔名,檔案大小,以及MD5等欄位),還有另一種解法,也就是keyword search

簡單的說,keyword search要用Kad找兩次,第一次利用keyword找出要抓的檔案的MD5 hash,第二次才是找出哪些人有檔案

舉例來說,如果有一臺電腦a有一首歌the power of love.mp3,它的MD5為x,那麼他必需publish兩次,一次是file hash的publish,也就是的publish,另一次則是將file hash關聯到keyword

以the power of love中,關鍵字(keyword)有兩個,也就是power和love,假設power和love一樣做hash(看高興用什麼就用什麼,也可以padding再MD5)得到兩個key,分別為y和z,那麼a就必需將file hash關聯到keyword的 pair publish到離y和z的k個node上,只不過publish的value為(file name, file hash),所以a會將

於是今天我們想要抓the power of love這首歌,我們輸入the power of love給程式搜尋,程式判斷出keyword為power和love,同時算出key為y和z,做Kad query,離y和z最近的k臺電腦會傳回所有data,也就是file name和file hash的組合,程式再進行比對哪一組pair的file name等於the power of love,找到後就得到the power of love的file hash,有了file hash後於是就進入正常的kad流程了

keyword search中value必需包合file name是因為一個關鍵字會關聯到太多file name,所以必需再加入file name做篩選,比如說,power關鍵字可能還關聯到power supply,power point,power planet等相關檔名,而這些都會以power做關鍵字,所以value中才必需加入file name以做進一步的篩選

Kad的優缺點如下:
優點:
可平行處理
快速,paper 中證明只需要 (logn 取上高斯) + c 次就可找到,其中c是一個小的常數
缺點:
至少要認識一個Kad node才能進入Kad network,而該node就擔任bootstrap的角色
不平均的loading,雖然是達到把server的effort分散的效果,可是不保證loading是平均,舉例來說,若有人的NodeID剛好在某個熱門檔案的k個最近node的範圍內,那他的loading肯定會比某些只負責小檔案的node大很多

這是我present的ppt

2008年7月15日 星期二

關於"enable_irq unbalanced from"的錯誤訊息

在寫網卡的driver時需要用到enable_irq和disable_irq這兩個funtion

不過會遇到類似
enable_irq(12) unbalanced from c083f544
之類的message

查了一下發現是disable_irq和enable_irq的呼叫順序沒有正確配對所致
參考http://lists.freebsd.org/pipermail/aic7xxx/2000-March/003064.html

這個訊息是無害的,若有一個driver在沒任何device使用該irq時呼叫disable irq, 而且其已經是disabled的,於是該disable_irq就會被kernel給忽略
所以當我們call enable_irq時core kernel code就會認為其是unblanced的,但其實它不是(unblanced)

kernel panic時自動reboot

我是linux使用上很新的新手,雖然我正在寫linux的driver,不過寫程式本來就和os的使用熟練與否不需要正相關

還好我有一個對linux很熟的學弟,可以隨叫隨問

最近在寫網卡的driver,因為driver是在kernel space,所以只要任何一個地方寫錯就會造成kernel panic,於是開發平臺就要開開關關………

而每一次開機就要好久,除了因為linux本身開機就久之外,還因為我不是正常關機………

學弟教了我一個方法讓linux在kernel panic時自動重開

可以去設定/proc/sys/kernel/panic的值,預設是0,也就是不自動重開,若將其值設成3,如
echo 3 /proc/sys/kernel/panic
則機器會在kernel panic 3 秒後自動重開

但是學弟說此方法每次重開機都要重寫一次,於是又教了我一個永久設定該值的方法
去修改/etc/sysctl.conf,在最下面新增一行kernel.panic = 3
於是每次重開機後/proc/sys/kernel/panic的值都是3

從此以後,kernel panic後重開機的速度快了不少

另外,由於linux tty放久了會自動logout,即使用console login也是一樣,此時沒法判斷是kernel panic後自動重開,還是放久了自動logout,學弟又教了一招
uptime
會顯示開機後運行多久時間,格式是 時:分,也就是說,若顯示01:09,表示開機後到現在已經經過了1小時又9分鍾,這樣就可以判斷中間是否有發生過kernel panic了

2008年5月22日 星期四

Coolstreaming: Design, Theory, and Practice.ppt

這是李波在2005 infocom提出的coolstreaming system在加強後再撰寫的journal paper
這篇paper被刊登在2007 12月的IEEE Transaction on Multimedia
李波現在是香港科技大學的教授

他在2005提出的的coolstreaming是第一篇提出在p2p streaming system上使用data driven概念的paper,由於是第一篇,在這之後很多人都follow他的研究,講到topology,資工的人其實第一時間都會想到tree的架搆,但是tree根本就不適合用在p2p streaming,而data driven則打開了tree的桎梏,這種無序的topology就被命名為swarm,data driven說穿了不神奇,畢竟file based的p2p software如BT/eMule之類的就是data driven

現在的這篇journal paper則改進許多

他將peer定義成3種層次的關係,依序為member、partner、parent/child
一個client會收到固定大小的peer list並將其存到名單中,member是名單中的peer但沒有建TCP交換availability information,而partner就是有建TCP交換availability information的member,然後parent/child就是從partner中挑出來的,有真的傳出/收進sreaming data的peer了,所以顯然的,parent/child包含於partner,而partner又包含於member

他也觀察到原先pool based(BT like)的scheme無論是latency還是overhead都有點太大,latency會變長很直覺,而overhead則是per block的transmission都會有control message的overhead,畢竟每一個block都是要靠程式去拉回來的

可是若是改回push不就又變回tree的topology了嗎?於是他將stream分解成multiple substreams,分解的部份有點像是switch fabric的TDMA或是邏輯閘的Multiplexer,而接受的動作比較像是switch fabric的TDMA或是邏輯閘的DeMultiplexer

之後的一切改變都跟這個有關係了,於是一個stream就被分解成幾個substream,於是一個peer就變成他只需要決定跟哪一個peer要哪一個substream,而非要哪一個block,顯然的,第一,運算變簡單了,第二,control message變少了

他先將stream拆成固定大小的block,每個block都給個sequence number,由於是採用TCP,保證收到的block的順序是inorder的,所以顯然的,一個peer只需要告訴別人他substream的最新block的sequence number即可,於是有幾條substream,就只需要傳幾個sequence number,而用sequence number也比較好運算

他說他將本來的pure pull改進成hybrid pull and push scheme,我的理解是
一個peer (child)決定跟某個peer (parent)要哪個substream的動作是pull,因為是由要的人去跟人家拉回來的
而之後,被要的peer (parent)就一直將child要的substream主動送給他,這裡就是push了,這個部份就跟以前要一個block一個block去要差很多了

另外,他將選擇parent的權利留給child,所以一個parent從不obsolete一個child,而是由child來決定是否要obsolete一個parent
他引進了兩個threshold用來判斷是要obsolete一個parent,而這兩個threshold任何一個被違反那麼child就會決定obsolete他的parent,這兩個threshold分別是Ts和Tp
我的感覺是
Ts就是用來判斷child自己收到的substream的速度是否一致,所以Ts就是在child自己的substream之間比較
Tp就是用來判斷child的某個parnet是否落後其他partner太多的,所以Tp就是parent與自己的所有partner比較
在網路中最難判斷的就是一個peer的上傳頻寬是否足夠,他現在導入了這個機制雖然算出的是相對的結果,不過我覺得這個結果就夠用了,因為,網路的環境太過複雜,頻寬從來就不是固定值,所以不能夠被算出來,這種機制很適合實做的p2p streaming system參考

於是這個機制就可以讓這個p2p system變成self organized system,而self organized又是決定p2p system的scale的關鍵,因為self organized 就可以decentralized,而decentralized後p2p的scale才能變大

整個paper到這裡就差不多了,剩下的就是他證明他這樣設計的p2p overlay會是converge to stable
老實說這一段最關鍵的那個公式我看不懂,他說We can model peer adaptation by a continuous time branching process,很遺憾的,我不知道什麼是continuous time branching process,於是我就沒法理解為什麼他可以直接跳出那個結果,不過這並不防礙這是一篇優秀的實做的系統的paper的事實

後面的部份就是看圖說故事了,沒什麼

這篇paper值得一看

這是我present的ppt

百樂parallel pen

在看到牧師的LAMY與金豬一文後,首次得知了有此東西,下面是這隻筆的原廠原結
百樂原廠連結

剛好大舅子要從日本回來投票,就寫信請他帶一隻回來玩玩,我原本屬意2.4mm的,無奈太晚寫信,大舅子只找得到1.5mm的,要調貨需要一段時間,所以最後拿到的是1.5mm的
順便請大舅子帶一盒橘色的卡水回來,從帶回來的卡水紙盒顏色看,此筆銷路顯然不太好

帶回來的盒子裡有筆身一隻,黑色、紅色卡水各一管,吸墨器一隻,清潔片一塊,說明書一張

為什麼叫平行筆(parallel pen)?
我猜是因為它的筆尖是由兩片平行的鋼板夾起來的,所以才叫平行筆

這隻是平尖筆,可以用來寫西洋書法,附的書明書也有教你如何用這隻筆寫西洋書法,不過我本身買來是打算將它當做瑩光筆用


筆盒,紅黑卡水、吸墨器、清潔片 點圖放大
全部一覽點圖放大
筆尖正面 點圖放大
筆尖側面點圖放大
筆全身照,筆蓋是用轉的 點圖放大
說明書點圖放大
說明書:清潔片用法點圖放大
說明書:教你怎用此筆寫出漂亮字點圖放大
試寫點圖放大

白金的14k wg和白金的一般筆尖

在剛開始買鋼筆的時候,由於就是要買來寫的
所以剛開始都買白金牌的鋼筆

白金牌的鋼筆的筆尖型號通常都刻在筆尖正面
不過我有一次遇到例外,有一次買了一隻,發現筆身刻有14-wg,而筆尖沒有
後來拍照的時候才發現自己耍了寶,原來手上欲隻14k-wg的筆的筆尖型號是刻在筆尖側面,若沒注意看還真的看不出來

另外,白金的筆尖通常會刻上粗細,但是我發現有一些白金的平價筆並沒有刻上粗細,經由筆閣的ben兄回答後,才知道若是沒刻上粗細,還是細字尖,因為白金的筆尖基本上設定為細字


筆桿刻有14K-WG字樣
筆尖的側邊有14K-WG的字樣

白金牌 PB-600

PB-600長得很像小一號的3776
筆桿是鑄鐵仿皮紋

鋼尖鍍金,筆觸偏硬,雖然筆尖長得很像3776,但是寫起來和3776完全不同,也和白金平價sigma系列的筆尖有所不同

單張紙上試寫的結果是:
雖然筆尖的形狀和3776很像,但寫感完全不一樣,這隻筆的筆尖非常的硬,完全沒有3776尖的應有彈性
同樣是鋼尖,類似的形狀,但3776的鋼尖較軟,很有彈性,3776的鋼尖可以做出K金尖的彈性是比較神奇的地方,可能跟其獨特的形狀有關
而PB-600雖然有著類似的形狀,也是鋼尖,但寫起來卻是硬的,不像3776那樣有彈性,總體來說滑順好寫

稍後在筆記本上寫字,發現寫感完全不同了,雖然還是硬,但是好寫多了
至此得到一個結論,這種硬筆尖是吃軟不吃,在桌子上墊白紙寫,硬筆尖和硬桌子當然是硬碰硬,但是硬筆尖在軟墊上寫就會好多了

將之前買的比b5稍大的軟性滑鼠墊反過來墊在下面,發現寫感改善很多

看來以後試寫筆,還是要用筆記本比較準


PB-600和3776筆尖近照,如何,很像吧,除了沒有3776的花紋和字外點圖放大
PB-600和3776合照點圖放大
標準姿勢點圖放大

2008年5月16日 星期五

鋼筆墨水的PH值

之前想要混合墨水(ink recipe)
由於酸鹼中和會產生沉澱物,有沉澱物就會阻塞鋼筆,在不知道鋼筆墨水的ph值下,隨意的混合墨水實在有點怕怕
在網上找了一下資料,找到一個網頁有列出鋼筆的ph值(ph level)
http://www.marcuslink.com/pens/ink/ink-and-ph-levels.htm

還記得ph的定義嗎?參考wiki的定義
簡單的說,ph就是液體中氫離子的濃度以莫爾為單位,倒數後再取log10,得出來的值就是ph值
由於是取log10,所以ph值每差1氫離子濃度就差10倍
ph<7就是酸性,>7就是鹼性
ph越低代表液體中氫離子的濃度越高

大概翻譯一下文章好了

酸和鹼的程度

墨水的酸性程度如何?這好像是在各個討論區一直被提起的話題,它重要嗎?
一方面我被告知它不是那麼重要的一個議題,墨水間的相容性和用在特定墨水的染料才是比較重要的議題。

Gregory Clark在1996在Pen World發表了一篇文章給出了一堆墨水的ph值,一個低ph值的讀數表示酸性的相關程度,而高ph值的讀數表示鹼性的程度。一些品牌和顏色被列在兩個不同的讀數中,這是因為Gregory結論出兩種ph等級(指酸、鹼)都在他的測試和筆廠的報告中被發現。

在之前已經被報導出來的關於墨水的ph值的讀數包含:

1.7: Omas Blue-Black, Omas Royal Blue, Visconti, Lapis Blue
2.2: Montblanc Blue-Black, Montblanc Bordeaux, Pelikan Blue-Black, Visconti Turquoise
2.6: Caron d'Ache Imagine in Blue Sky
2.7: Pelikan 4001 Blue, Visconti Permanent Blue-Black, Pelikan 4001 Turquoise, Quink Washable Blue, Waterman Purple
2.8: Caran d'Ache Escape in Caribbean Sea
3.0: Montblanc Emerald Green, Quink Permanent Black, Waterman Blue-Black, Waterman Blue
4.0: Sheaffer Brown, Emerald Green, Peacock Blue
5.5: Caran d'Ache Dream in Blue Night
5.6: Caran d'Ache Protect in Storm
6.1: Caron d'Ache Travel in Grand Canyon
6.3: Parker Penman Emerald
6.5: Omas Sepia
6.6: Parker Penman Ebony
6.8: Herbin Green, Omas Vespucci Red, Parker Penman Mocha, Parker Penman Sapphire
7.0: Waterman Havana
7.2: Omas Permanent Black
7.5: Parker Penman Ruby; Pelikan Brilliant Green
7.8: Visconti Black
7.9: Rotring black, Waterman red, Caran d'Ache Explain in Carbon
8.2: Pelikan brilliant red, turquoise, violet
9.0: Sheaffer jet black

Noodler ink已經在發揚他們的墨水,在他們的產品中是基本的基礎,是一種中性墨水(ph neutral ink)。注一、注二


Noodler的網站包含了一篇對於墨水的ph值和影響加上金屬的酸蝕程度相當廣泛的報導,還有圖片。

Noodler認為不是墨水的染料危險,而是ph值,鋼筆使用者在考慮購買墨水時需要更注意這點,用在彩色墨水上的染料在決定顏色的飽和度以及其將會如何褪色或不褪色是重要的。

Noodler的文章暗示ph值在1.5和4之間的墨水容易酸蝕。

迷惑了?以一個參考點來說,純水的ph值為7。在購買墨水時考慮一些因素,也就是說不要偏執在ph值上。比如說,Gregory Clark在他對墨水的評論中記錄了5.4到8.1的範圍在他對鋼筆墨水的看法中是合理的,而Noodler的ink強調說他們的墨水是ph中性的,ph值的範圍在6.2到7.9間。

我不是一個科學家,但我的暸解是ph值測量出酸性或鹼性,ph小於7時就是酸性,而ph大於7就是鹼性。7這個評分標準用來判斷是否中性,即純水在25°C時的ph值。

所有的這些表示了什麼?大多數現代的墨水用在鋼筆上是安全的,有活塞或是真空上墨的筆容易遭受一些墨水的污染,這對有吸墨器的筆來說較不重要,但墨水確實流過筆尖,而且對一些半透明的筆帽來而,它將不會花很久的時間就秀出墨水的污染。

使用你的墨水並享受彩色,如果你將有一段時間不用筆,將墨水排出並用清水沖洗你的筆。

注一:Noodler的網站宣稱所有Nooder的墨水是中性的,介於6.2到7.9之間,平均是7.0。
All Noodler’s inks are pH neutral (pH Range 6.2 - 7.9). Average pH = 7.0

注二:不過Noodler已經有一罐鹼性墨水了,baystate Blue
參考鋼筆眾議院「預購」恐怖的 Baystate Blue討論串

超簡單筆盒DIY

一直都想幫鋼筆找個好家

隨著買的鋼筆越來越多,鋼筆如何收納變成一個問題

其實小華兄分享的筆盒DIY非常棒,可是實在太花時間,一直以來都有心而無力
然後又遍尋不著文具店展示鋼筆的那種筆盤、筆盒(後來才知道原來那是非賣品)
如果能夠買到現成的當然是最好的,如果有人知道哪買得到還請不吝告知,畢竟筆商也不可能自己開模做,一定也是找廠商做或買

不過在找不到筆盤之前鋼筆還是需要有個家
終於,小弟在學校前面的十元商店找到適合的外殼
特色是透明的,可堆疊,大小適中(225*155*57mm,像小華兄的寬度就設169mm,兩者差了1.4cm)
缺點是高度有點太高,有點佔空間,畢竟筆需要的高度沒那麼高,剩下的空間都浪費,若是要將鋼筆擺防潮箱,防潮箱的空間一下就被佔滿
盒子的牌子是keyway,我記得這牌子在大賣場常見,這個盒子剛用google找了一下,網路上也有得買,所以我想這盒子應不會太難找

外盒找到了,內裡怎麼辦?
我是隨便拿一張A4紙折一折就擺上去了,所以可以看見圖中有些折都癱下來了
當初若是拿好一點或是厚一點的紙效果會更好
不管如何,保護效果還是有的

當然還可以再有變化,這也是小弟將來要做的事
就是用這當外殼,裡面用小華兄的方式做內襯
透明的,又可堆疊,堆疊起來收納的視覺效果應不錯

不管如何,若是找得到這盒子的話,做好筆盒的時間是很短的

Keyway的中祕書萬用盒點圖放大
size點圖放大
筆盒做好的樣子點圖放大
筆盒底層的紙 點圖放大
近照點圖放大

2008年5月15日 星期四

14種藍色墨水顏色的顏色樣本

本文章同步發表於筆閣

和上次雄獅簽字筆墨水和一般鋼筆墨水的比較一樣的實驗方式
不過這次實驗的主題為藍色,因為發願要找到滿意的藍色墨水,所以不知不覺買了很多藍色墨水,也就順便的做了這次實驗,希望能夠造福想要買藍墨水的板友

前面文字很多,沒有耐心的板有可以直接拉到下面看圖

以我自己而言,我的首選是Aurora藍,顏色滿意,褪色速度慢
次要選擇就很多了,白金藍黑、寫樂藍、百樂藍、Waterman Florida blue、Lamy blue都不錯

總共有14種藍墨水,全部都是瓶裝墨水,其中11罐純藍,3罐藍黑,而有兩罐noodler的藍是學長贊助的(做完實驗還是要還滴)
最後兩個(第16和第17個)多的顏色是混合的墨水,分別是 (1/4百利金紫色 + 3/4 Waterman佛羅里達藍)以及 (1/4 Waterman紫色 + 3/4 Waterman佛羅里達藍),這樣配出來的艷藍大家可以和Aurora的藍比較一下顏色是不是很像
另外Nooder的恆河藍顏色很特別,個人覺其是帶有銀色和灰色色調的藍色
這次實驗中百利金的皇家藍和派克藍比較吃虧,因為其褪色速度太快,而又太早寫了,所以等到掃瞄的時候顏色都已經變得有點淡了
另外,百利金藍黑雖然是昨天才寫上去,可是其實現在已經看得出來其帶有綠色的色調了,跟其他人的藍黑顏色完全不同,等再過個幾個禮拜掃上來,就會發現其會變成綠色了

顏色樣本中,20080505寫上去的英雄#61純藍其實是英雄#62藍黑,因為兩罐墨水的紙盒裝反了,等到寫完才發現,在後面還有重新補上英雄#61純藍及英雄#62藍黑
顏色順序如下:

百利金皇家藍
Lamy藍
Waterman佛羅里達藍
百樂藍
派克藍(Washable Blue)
英雄#62藍黑(但是圖中寫純藍)
寫樂藍
雄獅簽字筆藍
英雄#61純藍(真的純藍)
Aurora藍
英雄#62藍黑(真的藍黑)
NOODLER's 恆河藍
NOODLER's 熱蘭遮城藍
白金藍黑
派克藍黑
1/4百利金紫色 + 3/4 Waterman佛羅里達藍
/4 Waterman紫色 + 3/4 Waterman佛羅里達藍

墨水實驗的方法如下,

1.筆的選擇:我挑了3776中字鋼尖(PB-700),由於同一墨水在不同的筆上會表現出不同的顏色,因此必須盡量挑大家都有
的筆,考量了手上有的筆,我還是挑了3776中字尖,一個是大家有3776的機率較大,另一個是3776中尖我有兩隻,可以一次做兩次實驗,加快做實驗的速度,筆雖然是台製,但是筆尖卻是日製,另外由於不知道在哪一篇文章看到用棉花棒沾墨寫最可以表現出墨水的顏水,因此每一種墨水最後面的部份是用棉花棒沾墨寫的

2.紙的選擇:我挑了手上最好的紙,日製Maruman ART Spiral B5活頁紙(紙上還印有鋼筆尖,看來還真是鋼筆專用紙),較好的紙的缺點是無法判斷流動性,看不出毛邊,不過本次實驗的重點在顏色,其它就不重要了

3.墨水的選擇:總共有14種藍墨水,全部都是瓶裝墨水,其中11罐純藍,3罐藍黑

4.所有墨水一律沾墨水寫,寫完洗乾淨後,放在有乾燥劑的密封盒加速乾燥,確保筆尖在下次使用時是乾的,不會影響墨水顏色表現,不過這樣一次至少要等兩天才能再做下次實驗

5.時間的問題無法避免,因為我只有三隻筆,一次只能寫三種墨水,這樣對會在褪色速度極快的墨水有點吃虧,可是我也無解,除非我有足夠多的筆,目前只能在寫下墨水前加上日期,讓各位看倌自行判斷,了不起就是再過一段時間(不能晒太陽)後再scan一次

6.遵從狗爺的經驗,用實驗室的多功能事務機掃描,而不是用像機拍照,本來想再加一張色票以避色不同人螢幕的色差,不過上Y拍發現色票非常貴,還是算了

7.字非常醜,請將焦點放在顏色上


14罐墨水的合照,桌子很亂請忽略… 點圖放大
墨水顏色 點圖放大
1號和2號瓶,兩罐用來混合墨水的瓶子 點圖放大


20080529新增
又到了兩個禮拜了,再掃上來讓大家看看

從圖的結果來看,最下面的四行顏色都有褪色的痕跡,特別是棉花棒塗過的部份更明顯
比較訝異的是白金的藍黑竟然也會褪色,可能是因為白金的藍黑顏色較暗,所以我平常沒看到吧
最下面的兩行由於都有摻3/4的Florida藍,又是最新鮮的(第一張圖是在寫完第二天就掃瞄)

我自己是覺得藍色墨水在初期褪色速度就快,但是在過了一段時間後,褪色速度就會變得很慢
比如說第一行的皇家藍,由於其在第一張掃瞄時已經經過了兩個禮拜,第二張已經經過了四個禮拜,可是在第一張掃瞄時顏色就已經褪到差不多了,所以第二張和第一張的顏色差不多
由於在另一篇雄獅墨水中也有皇家藍,其中剛好紀綠了墨水寫完隔兩天,隔兩個禮拜加兩天,隔四個禮拜加兩天,可以看出第二張皇家藍相對於第一張有褪色,但是第三張相對於第二張的皇家藍就沒差

我是想,既然墨水會褪到一定的程度,那麼如果我增加墨水的濃度,那麼是否可以增加最後褪完色的顏色濃度?
比如說,我將皇家藍蒸發一半,那麼濃度理論上會提升為兩倍,那麼是否可以使墨水最後褪完色的顏色鮮艷(飽滿?)一倍?
這是個有趣的問題

過一段時間後會將所有原始圖檔pack起來提供下載以避免壓縮過程造成的破壞
不過我的原始圖檔是jpeg,不是爆米花兄說的tif檔
一是我根本不知道這兩者的差異在哪,改用tif是否會得到更好的效果?
二是我一開始就已經掃成Jpeg,中間再改掃成Tif也怪怪的,所以我選擇從一而終
點圖放大

2008年5月10日 星期六

Windows清理助手

雖然裝了防火牆還有360安全衛士,但是電腦還是免不了被入侵
前陣子懷疑自己中了奇怪的東西後用360安全衛士一掃,果然被裝了奇怪的東西
但是尷尬的是,360安全衛士雖然掃得到但是清不了………
在搜尋解決方案的過程中發現了這套軟體:Windows清理助手
英文名稱是arswp,是Anti-Rogue sweep的縮寫
一試之下,果然清掉了
360安全衛士是套綠色軟體,不用安裝,清除和掃瞄效果不錯,可以和360安全衛士一起用

下面是Windows清理助手的官方網址,此軟體更新很頻繁,還請上官網下載最新版
http://www.arswp.com/

懷疑自己中木馬了嗎?還請試試Windows清理助手

2008年4月30日 星期三

雄獅簽字筆墨水和一般鋼筆墨水的比較

此篇文章於筆閣同步表

在筆閣看過956對雄獅簽字筆的研究後(http://pg.biolab123.com/viewtopic.php?t=2212)

就三種顏色都買來試試看,一瓶20元,樂趣不錯,試完後心得如下:
1.雄獅的墨水顏色都很艷,且較亮(請看圖片)
2.雄獅的墨水流動性都很高,寫在不好的紙上暈染性跟台灣藍差不多,目前還在想有無方法改善
2.a:這禮拜要去天水路,看有添加劑可以改善
2.b:幫它蒸發一些水,看會不會讓它變得更濃稠,降低流動性
3.目前對鋼筆的傷害未知,不知道其配方有無加抗蝕劑,這禮拜要去天水路買試紙,試看看其酸鹼性
4.目前肯定抗UV,太陽曬也不會褪色,但是不防水

個人覺得雄獅簽字筆墨水是可以買來玩玩看的墨水,顏色很亮,不過在還未能證明對鋼筆的傷害前,請裝在低價鋼筆上
個人目前用在白金的preppy和pak-250上

墨水實驗的方法如下,

1.筆的選擇:我挑了3776中字鋼尖(PB-700),由於同一墨水在不同的筆上會表現出不同的顏色,因此必須盡量挑大家都有
的筆,考量了手上有的筆,我還是挑了3776中字尖,一個是大家有3776的機率較大,另一個是3776中尖我有兩隻,可以一次做兩次實驗,加快做實驗的速度,筆雖然是台製,但是筆尖卻是日製,另外由於不知道在哪一篇文章看到用棉花棒沾墨寫最可以表現出墨水的顏水,因此每一種墨水最後面的部份是用棉花棒沾墨寫的

2.紙的選擇:我挑了手上最好的紙,日製Maruman ART Spiral B5活頁紙(紙上還印有鋼筆尖,看來還真是鋼筆專用紙),較好的紙的缺點是無法判斷流動性,看不出毛邊,不過本次實驗的重點在顏色,其它就不重要了

3.墨水的選擇:藍色我挑了3款台灣最容易買到的墨水,Pelikan royal blue,Waterman Florida blue,Lamy Blue(not blackblue),黑色我挑了英雄碳墨,沒別的原因,因為黑色很容易挑,不像藍色的墨水這麼難找,而且我也沒別的黑,不過可從圖看出顯然英雄的碳墨比較黑,紅色我就只有waterman 紅

4.所有墨水一律沾墨水寫,寫完洗乾淨後,放在有乾燥劑的密封盒加速乾燥,確保筆尖在下次使用時是乾的,不會影響墨水顏色表現,不過這樣一次至少要等兩天才能再做下次實驗

5.時間的問題無法避免,因為我只有兩隻筆,一次只能寫兩種墨水,這樣對會在褪色速度極快的墨水有點吃虧,可是我也無解,除非我有足夠多的筆,目前只能在寫下墨水前加上日期,讓各位看倌自行判斷,了不起就是再過一段時間(不能晒太陽)後再scan一次

6.遵從狗爺的經驗,用實驗室的多功能事務機掃描,而不是用像機拍照,本來想再加一張色票以避色不同人螢幕的色差,不過上Y拍發現色票非常貴,還是算了

7.字非常醜,請將焦點放在顏色上

由於發願要找到最喜歡的藍色,所以買了很多的藍色(純藍,不是藍黑)墨水
下一期會是用同樣方法做實驗,但全是藍色,除了白金,因為白金只有藍黑,沒有純藍
不過做實驗的時間會加快一些,因為這次筆聚從章大哥那再入手一隻PB-700(後來想到,應該買兩隻的 ),所以一次可以試三種墨水了

實驗結果點圖放大

20080515新增
過了兩個禮拜再掃一次圖,可以看出來百利金皇家藍和Lamy藍都褪了一點顏色,而雄獅藍和佛羅里達藍都沒褪色點圖放大



20080529新增
又到了兩個禮拜了(共四個禮拜了)
再掃上來讓大家看看
過一段時間後會將所有原始圖檔pack起來提供下載以避免壓縮過程造成的破壞
不過我的原始圖檔是jpeg,不是爆米花兄說的tif檔
一是我根本不知道這兩者的差異在哪,改用tif是否會得到更好的效果?
二是我一開始就已經掃成Jpeg,中間再改掃成Tif也怪怪的,所以我選擇從一而終點圖放大

2008年4月29日 星期二

永生幸福300

永生是大陸的一家鋼筆廠,這是永生出的幸福300,有附一個小吊牌,上書Lucky,應為幸福的意思
這隻筆為在筆閣團購時購買
筆尖為14k,壓囊上水,鋼桿
拿到手時包裝很完整

有以下特點
1.筆尖是硬的
2.有點粗,約m尖
3.筆蓋不太好蓋上
4.握位有細紋

由於筆尖較粗,銥點較圓,所以正寫除了滑順之外,還有點鋼珠筆的感覺
若是反過來寫,一樣的滑順,但是筆劃變細,這種粗細寫中文就還可以


鋼筆盒子點圖放大

打開盒子點圖放大

有附說明書點圖放大

小鑰匙圈正面點圖放大

小鑰匙圈反面,有14K字樣點圖放大

全身照點圖放大

標準姿勢,筆尖刻有幸福14K,握位有細紋 點圖放大

分解點圖放大

2008年4月24日 星期四

360安全衛士開機亂碼的解決方案

360安全衛士是大陸出的一套免費的安全套件,有點類似spybot,個人試用的心得是,它捉得到大陸的一些木馬,反之spypot能捉得到外國,所以我想是國情的關係吧,大陸的網頁很毒,在你常上大陸的網頁的前提下,用360安全衛士會比較安全,總而言之,它和spybot各有千秋,不過在針對大陸較新的,或是大陸獨有的木馬及惡劾軟件的偵測能力上會比較強

官方網址:http://www.360.cn/

以下節錄官方的說明
360安全衛士是國內最受歡迎免費安全軟件,它擁有查殺流行木馬、清理惡評及系統插件,管理應用軟件,卡巴斯基殺毒,系統實時保護,修復系統漏洞等數個強勁功能,同時還提供系統全面診斷,彈出插件免疫,清理使用痕跡以及系統還原等特定輔助功能,並且提供對系統的全面診斷報告,方便用戶及時定位問題所在,真正為每一位用戶提供全方位系統安全保護。

個人最欣賞的是他的瀏覽器的插件(plugin)是採用網友評價系統,也就是說由網友投票來決定一個plugin的好壞,而非特定公司(像個人常用的Alibabar就總是被spybot認為是木馬……無法理解),而除了網友評分之外,他也把討論區的一些討論的標題節錄出來,也就是說,當你點下一個插件,它會把關於這個插件的information節錄出來
當一個惡意插件無法被360安全衛士移除時,你可以看別人的討論找移除的方法
當一個插件,你不知道它的用途是什麼時,你可以看大家對他的評價,以及相關討論來暸解它
可以說,集合眾人的力量來解決問題,在這個時代,這是一個比較聰明的方法,而它所要做的只是把資訊送到你面前

點圖放大

那麼它到底有什麼缺點?

有的,那就是它只有簡體中文體,沒有英文版,更別說繁體中文版了
安裝過程中可以用applocale解決,所以安裝過程不會有亂碼
而最大的問題是由於他會在開機後常註在系統中,所以重開機後,它會出現在你的系統列中,但此時去點它出來的畫面就會是亂碼

而我們要解決的問題就是在開機時使用applocale來啟動它,而非讓它自己啟動,自樣360安全衛士開機就不會亂碼
所以這裏我們需要的是piaip修改過的applocale(參考我之前寫過的文章),否則,你會被煩死

使用regedit到[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]下
你會看到360Safetray這個entry的值為:
C:\Program Files\360safe\safemon\360ray.exe /start

雙擊它,將值改成
C:\WINDOWS\AppPatch\AppLoc.exe "C:\Program Files\360safe\safemon\360Tray.exe" "/start" "/L0804"

之後重開機後,360安全衛士就不會亂碼囉

A Simple Model for Analyzing P2P Streaming Protocols.

這篇paper是由香港中文大學的(Dah Ming Chiu)邱達民和他的學生發表在ICNP 2007上

paper的名稱就是
A Simple Model for Analyzing P2P Streaming Protocols

這篇paper的重點就是先算出一個model來evalute p2p streaming protocol的chunk selection strategy的performance
而model既然已經算出來了,於是就可以在上面代換不同的chunk selection strategy去評估不同的strategy的performance,然後做比較
當然,他還有設計自己的strategy,不過就是把兩種strategy混合而已,所以他的strategy就叫mixed

model是以buffer的觀點去看,最後算出不同buffer位置的probabiliy distribution
當然,model的過程中做了很多跟現行p2p streaming protocol不合理的假設,也就是說,其假說的東西在真實的環境是不可行的,不過如果不這樣假設,他就算不出來了,所以標題也說了,A Simple Model
然後他提出兩種model,一個是discrete的model,另一個是continuous的model,最後再跑一個simulation去比較

他說就他所知,他是第一個提出model來evaluate p2p streaming protocol的performance的paper,就我所知,好像也是這樣
因為p2p中peer一定是heterogeneous,而paper如果假設是homogeneous,那就不合理,可是若不假設成homogeneous,那又算不出來

paper中到discrete的model之前,都很合理,值得參考,從continuos model開始,就有點奇怪了,最詭異的是將discrete的model轉成continuos model的方法
continuos model那一段真的很難看,我自己是懷疑他有寫錯,不過也有可能是我數學功力太弱,沒法理解他的算法

model完之後就是看圖說故事了,這就沒什麼好說的

這是我present的ppt

2008年3月27日 星期四

關於"An Alliance Based Peering Scheme for P2P Live Media Streaming"的報告

這篇paper是發表在2007 IEEE TRANSACTIONS ON MULTIMEDIA的paper
其key idea很好玩,雖然只有simulation,沒有implementation,也不知道可不可行,可是idea非常新就是了
P2P中最討厭的就是leecher(指只下載不上傳的行為者),理論上,這篇paper的idea似乎可以剋制這種人
其key idea比較像是電影中,四個人各持有1/4的藏寶圖,若想要找到寶藏,則每個人都要貢獻出自己手上的那一份,否則就找不到寶藏

在論文中,p2p是由一個一個的alliance組成的,一個peer可以參與很多個alliance

而他的中心思想就是,將一個單位的data均分後,將均分後更小的單位的資料給在alliance中的其他人各發一份出去,之後他就不再發出去,其他人由餘只有一個等份,且原先傳給他的人不再上傳,想要獲得完整的一單位,就必須跟其他人交換,這就達到了強迫上傳的目的

舉例來說,若一個alliance(命名為X)由5個人組成,分別是a、b、c、d、e,假設a從別的alliance收到一單位的data,這他所參與的這個alliance X的其他人還沒有這份data,所以他必須在alliance X中散佈,因為alliance有4個其他人沒有(扣掉他自己),於是他將此單位的data均分成4單位,再將此4單位對bcde各散佈一份,於是bcde都各只得1/4,想要全部就要跟其他人交換,為什麼說交換?因為你有的別人的一定沒有,反之亦然,所以在你將1/4給別人時,你同時也會希望別人將他那1/4給你

那萬一有人不給怎麼辦?

第一:這個人常犯的話,最後就會被踢出這個alliance,再找出其他人來遞補他的位址
第二:由於所有alliance的人數一樣,所以每個單位切成的小單位都一樣,若有人不給,大家都會缺他的那一塊,但由於每個人都可以參加好幾個alliance,所以還是有機會從別的地方得到缺的那一小塊,他再和其他人交換即可

這是我用來present的ppt

2008年1月31日 星期四

關於"Packet Classification on Multiple Fields"的報告

在網路的應用上常需要對封包分類,為封包分類的目的有很多,通常目的是為了有不同的service
為封包分類之所以不能快的原因是因為你想要用多少欄位來分類,你就必需查多少次的表(table lookup),而查表除了用硬體的TCAM能達到O(1)的時間外,用軟體的速度最快也只是O(log n)

在封包的分類上通常是時間和空間的tradeoff,理論上,只要你的記憶體夠大,那麼你可以在一次memory access之後就得到分類結果,完全不需要考慮演算法這種東西,比如說,若要分類的packet header 欄位寬度總合為120bit,那麼你可以建一張2^120大小的表格,然後填入規則,然後在packet到達後,直接用120bit的欄位當index去在取表格,從查表結果就可以知道這個packet該分成哪一類,該採取什麼動作

一般來說,速度快的演算法秏記憶體大,秏記憶體小的演算法速度慢,那麼是不是存在一種演算法可以達到平衡?即,速度讓人滿意,而秏的記憶體空間也可以讓人接受

我想,Packet Classification on Multiple Fields應是可以讓人接受的solution,
Packet Classification on Multiple Fields是sigcomm99的paper,距今快有十年了,paper本身寫得不是那麼容昜讓人看懂(坦白說,我覺得他演算法的psudo code那裡有地方寫錯),不過Idea很好,Idea 簡單講就是利用分類規則之間的相似性,將相同結果的規則算做一類

就結果來看,他可以在使用120bit寬度資料做分類時,只需要9次的記憶體存取(memory access)以及3次的計算就可以完成分類了,速度算很快了,畢竟,查表(table lookup)跟記憶體存取(memory access)這120bit的資料分別是src ip(32), dst ip(32), L4 proto & flags, L4 src port(16), L4 dst port(16), ToS(8)

這篇paper也不是沒缺點,缺點就是
建表的時間無法預測
建表時用到的暫在記憶體大小無法預測
建完表的表格大小也無法預測

不過這些缺點對你來講不甚重要的話,例如,規則不常更動(即不常建表),device的其它功能記憶體需求沒有那麼緊(即,有足夠的記憶體空間留給演算法建表),那麼這篇paper的Idea就很有價值

這是我用來present的power point file