發文作者:dieabsorb | 八月 8, 2011

HTTP Basic Authentication Logout 的方法

因為某些需求, 用了 HTTP Basic Auth 作為認證的方法 (偷懶..)
但在需要 Logout 的時候遇到了點小問題..

document.execCommand(‘ClearAuthenticationCache’) 只能在 IE 系列使用, google 找了一下, 最後這樣解決
(有用 jQuery)

if ( $.browser.msie ) {
  document.execCommand('ClearAuthenticationCache')
} else {
  $.ajax({
    url: "logout",
    username: "logout",
    password: "logout",
    error: function() {
      window.location = 'http://o.x.logout.page';
    }
  });
}

其實就是丟一個 ajax request 出去假裝換了帳號密碼, 收到 401 之後導到其他頁面,
測了 IE, Firefox, Chrome, 看來沒什麼問題 :p

發文作者:dieabsorb | 四月 5, 2011

SNMP 小記

最近 SNMP 的需求很大 >///<, 也學了不少東西, 該來筆記一下..

* get, get-next, get-bulk

以前在學校幾乎是 snmpwalk 一個指令搞定, 沒真的搞清楚在幹麼, 其實在 snmp v1 只有 get, get-next 兩種 request, snmpwalk 是透過不斷地丟出 get-next request 來要求下一個 oid, 實際上當你拉 get-next 1.2.3 的時候, 會丟回下一個有值的 oid(有點廢話 XD), 所以有可能是 1.2.3.1 或是 1.2.4, 都有可能, 所以 protocol 層並不會管你要拉的 1.2.3 而很溫馨的停在 1.2.3.*, application 會自己處理, 另外一個 get-next 要注意的是他會傳 *下一個* 值(又來了廢話 XD) 所以其實如果你想要拿就是某個 1.2.3.5566 的值, snmpwalk 的作法其實長這樣

1 22:27:41.951538 IP nms.host.14633 > snmp.agent.snmp:  C=test123 GetNextRequest(33)  25.4.2.1.5.77836    
2 22:27:41.952936 IP snmp.agent.snmp > nms.host.14633:  C=test123 GetResponse(32)  25.4.2.1.6.0=2    
3 22:27:41.953039 IP nms.host.14633 > snmp.agent.snmp:  C=test123 GetRequest(33)  25.4.2.1.5.77836    
4 22:27:41.953308 IP snmp.agent.snmp > nms.host.14633:  C=test123 GetResponse(45)  25.4.2.1.5.77836=[|snmp]

先丟個 get-next, 發現回傳的 base 已經跳過我們要的部份, 重新下一個 get 來把原本的值拿回來. get, get-next 其實很好, 也可以在 PDU 裡面塞很多個 oid 一次跟 snmp agent 要求值, 但是這樣對想要拿一整個 table 的時候 (像是想要查某個 switch 上的 mac table) 很沒效率,  尤其是遇到大型 router 的時候 , 上面的 agent 很趣味, 時常心情好要回不回的 (而且越貴的 router 反而越不喜歡回 :-( ), 所以減少 snmp request 會讓我們的 code 節省很多時間. 在 v2 加入了新的 get-bulk, 其實 get-bulk 也很好懂, Wiki 上就寫了 『Optimized version of GetNextRequest』, 丟一個 get-bulk request, agent 會盡量塞值到 response 裡面, 之後就跟 get-next 一樣, NMS 有需要就在自己丟下一個 get-bulk 出去.

* Perl <-> SNMP

Net::SNMP 當然是用 Perl 抓 SNMP 的最好選擇 !

Net::SNMP 基本上滿完整的, 只是用起來實在是有點麻煩,  而且因為我被 snmpwalk 養壞了 XD, 所以剛開始寫的時候覺得 get_bulk_request(), get_next_request(), 會幫我東西都處理好, 實在是太天真的阿~~

剛剛其實就有提到 application 必須自己處理你想要哪些 oid, agent 只會乖乖的把下一個 oid 丟給你, 所以 Net::SNMP 的 example 中使用 non-blocking get-bulk 的 callback function 就有這段

1      while (@names) {
2         $next = shift @names;
3         if (!oid_base_match($OID_ifTable, $next)) {
4            return; # Table is done.
5         }
6         $table->{$next} = $list->{$next};
7      }

根據回傳的一堆 oid, 跟我們想要的 baseoid 做比較, 如果是我們要得 oid, 可能後面還有值, 要一直拿到我們要得 base 結束為止, 這個例子也就是麻煩在這, 其實你常常會想要 1.2.3, 1.4.6, 1.7.8 三個 oid 開頭的值一次拉, 所以你本來就可以這樣下..

1   my $result = $session->get_bulk_request(
2      -varbindlist    => \@oids,
3      -callback       => [ \&table_callback, \%table ],
4      -maxrepetitions => 10,
5   );

但是 callback 就不能像上面這樣寫了, 要改成大概像這樣..

 1  my @nextoids = ();
 2  while (@names) {
 3      $next = shift @names;
 4      for (my $i=0; $i < $#oids; $i++ ) {
 5          if (oid_base_match($oids[$i], $next)) {
 6              $nextoids[$i] = $next;
 7          }
 8      }
 9      $table->{$next} = $list->{$next};
10  }

然後在根據 @nextoids 有沒有 element 來知道是不是每個 oid 都抓完了.

不過老實說這樣實在是很麻煩, 後來找到 Net::SNMP::Util 感覺更好用, 直接把 oid 丟給他, 就會幫你處理好, 而且還可以把難看的 oid 取個 alias, 回傳的 $result  hash reference 就根據你的 alias access, example 像這樣

%oids  = (
        'ifType'  =>   '1.3.6.1.2.1.2.2.1.3',
        'ifXData'  => [ '1.3.6.1.2.1.31.1.1.1.1',   # ifName
                       '1.3.6.1.2.1.31.1.1.1.15' ], # ifHighSpeed
        'someMib' =>   '1.3.6.1.4.1.99999.12.3'
);
foreach $host ( @hosts ){
    foreach $index ( sort keys %{$result->{$host}{ifType}} ){
        printf "$host - $index - type:%d - %s (%d kbps)\n",
            $result->{$host}{ifType}{$index},
            $result->{$host}{ifXData}[0]{$index},   # ifName
            $result->{$host}{ifXData}[1]{$index};   # ifHighSpeed
    }
}

不過改用 Net::SNMP::Util 之後還是有幾個小問題自己會犯錯:

1. 用 non-blocking mode 的時候自己要記得加 -maxrepetition 的參數, 這部份有文字敘述, 但是範例居然沒有寫, 如果傻傻的 copy 範例會發現抓不到東西…

2. get-bulk/get-next 抓某個特定 oid (不是一整個 oid table) 會抓不到值. 就是正常行為, 其實你下 get-next 是拿到下一個 oid, 所以這時候要改用 get (在 Net::SNMP::Util 裡是 snmpget(), snmpparaget() ) 才行.

3. example 有點 typo XD

除此之外, 實在是滿好用的, code 可以精簡很多,  看 FreeBSD ports 還沒有, 我也順便丟了 pr 一下.

發文作者:dieabsorb | 十二月 30, 2009

FreeBSD 8, dangerously dedicated disk ..

前言:

這兩天快被機器搞瘋了 :(

其實應該說是很懶, 本來的事情, 論文(在哪邊?), 系計中, 助教, 就忙不完了..

上次一顆 500G 重開之後不見, 我就當作是硬碟葛了, 一起買的同一顆已經 RMA 又回來了 XD

反正運氣很不錯得, 某次 reboot 之後再起不能, 只好搬出來修, 然後硬碟就給我一顆顆抓不到, 最後發現是 Power 老了推不動了, 所以先拆了一顆下來..

進入主題:

大家都說 FreeBSD 7 -> 8 ZFS 不會炸之後很高興的我就衝了 8

然後果然, reboot 之後當然是再起不能, 很歡樂的是, ZFS 整組好好, 但是 UFS 不見了 XD

ad6 整個 label 不見, 超~爽~ㄉ~

查了一下發現是 這個 問題..

應該是因為之前懶惰用 sysinstall 切 partition/label ..

結果重標, 如果本來有一些 label (like ad6s1a, ad6s1d ooxx)

升上 8 之後只看到 (ad6, ad6a) 這種怪東西..

可以用 dd 把第二個 sector 洗掉, 應該就可以把 MBR 多寫進去的東西清掉, 然後抓到正確的 BSD label

# dd if=/dev/zero of=/dev/ad6 seek=1 count=1

更多詳情還可以參考 這邊

發文作者:dieabsorb | 二月 24, 2009

Jenny McCarthy

常常不知道要寫什麼, 想寫個技術文也想寫詳細一點, 就很難生出東西, 之前有些幹勦的文章也是寫到一半不好意思 publish 出來, 不如以後多放點美女圖好了 XD

因為一直覺得這篇很賞心悅目阿..

所以這次 topic 的真相就是

這次因為 Chuck S2E13 中出現了她, 一整個就很眼熟, 果然是之前 Two And A Half Men 中的 Courtney, 我自己覺得他在 Two And A Half Men 中比較性感

發文作者:dieabsorb | 九月 10, 2008

FreeBSD 與 X31 小紅點

大概兩天前想到應該把 trackpoint 的 wheel 設起來用, 本來覺得這是很簡單的事情 (實際上也很簡單 :p) ..

沒想到我居然搞了整整一天 -_- ..

其實只要照著 ThinkWiki 上面, 設定

Section 『InputDevice』
Identifier 『Mouse0″
Driver 『mouse』
Option 『Protocol』 『Auto』
Option 『Device』 『/dev/psm0″
Option 『Buttons』 『7″
Option 『Emulate3Buttons』 『on』
Option 『Emulate3TimeOut』 『50″
Option 『EmulateWheel』 『on』
Option 『EmulateWheelTimeOut』 『200″
Option 『EmulateWheelButton』 『2″
Option 『YAxisMapping』 『4 5″
Option 『XAxisMapping』 『6 7″
Option 『ZAxisMapping』 『4 5″
EndSection

就可以很正常的使用, 中鍵的 paste, wheel up/down left/right 都很正常..

但是因為我先跑了 moused .. 所以佔住 /dev/psm0, 之前 X 直接吃 /dev/sysmouse, 但是 sysmouse 似乎吃不到那些 wheel 的設定 … 我的青春阿∼∼

發文作者:dieabsorb | 九月 6, 2008

FreeBSD on IBM X31

其實自己一直有想要把工作環境換到 FreeBSD 的衝動, 只是因為常常會有打 game 的需求, 這次正好有台 X31 可以玩, 就把它裝了起來, 這兩天回家正好家裡 NB 不知硬碟還是 OS 掛點(正在用 hdd regenerator 掃..), 有空就來寫個筆記好了 :)

Basic Installation

這個也沒什麼好寫的, 這次裝 FreeBSD 7.0-RELEASE, 現在 FreeBSD 對 ThinkPad 的支援已經非常之好 XD, 之前有這個 『Device Bay』 的當機問題, 不過上次灌的時候我就關了, 這次也沒遇到.

References

這次參考的兩個不錯的網頁, 雖然說資料有點舊, 但是也滿好用的 :)

http://www.cs.cmu.edu/~dpelleg/X31_freebsd.html

http://labyrinth.blog.iwrock.net/post/2/57

Kernel and Modules

現在 FreeBSD Generic Kernel 大約 9MB, 所以把一些有的沒的, 或是可以用 module 的功能刪掉, 做一個 3M 的 Kernel 出來, 然後把 loader.conf 加上這些

# wlan
if_ipw_load=』YES』
wlan_load=』YES』
firmware_load=』YES』
ipw_bss_load=』YES』
ipw_ibss_load=』YES』
ipw_monitor_load=』YES』
wlan_scan_sta_load=』YES』
wlan_scan_ap_load=』YES』
wlan_wep_load=』YES』
wlan_ccmp_load=』YES』
wlan_tkip_load=』YES』
wlan_xauth_load=』YES』
legal.intel_ipw.license_ack=1
# lan
if_fxp_load=』YES』
# sound driver
snd_ich_load=』YES』
# ibm
acpi_ibm_load=』YES』
# linux emulation for flash
linux_enable=』YES』
linprocfs_enable=』YES』

Network

我的 Wireless NIC 是 Intel PRO/Wireless 2100, FreeBSD-7 已經 merge 進 base system ipw(4), 一開始我還很笨的再找 ipwcontrol 找不到 XD, 照著 handbook 就把 Wireless 設起來, 非常好用 :p, 還發現新竹住的地方有免錢無線網路可以用, 真是好高興阿 (Y). 一般的 AP 只需要:

# ifconfig ipw0 up scan

# ifconfig ipw0 ssid blah

# dhclient ipw0

不過如果需要認証的話, 可能就需要用到 wpa_supllicant(8) 這個 tool, 我家的 FON 設定是用 TKIP + Pre-shared Key, 所以這樣:

# wpa_supplicant -i ipw0 -c /etc/wpa_supplicant.conf &
network={
ssid=』Private-WLAN』
scan_ssid=』1″
psk=』blah~』
}

就可以輕鬆上網啦 :p

Window-Manager

這次也是因為聽說 KDE4(.1) 進了 FreeBSD ports, 所以想來看看, 高中第一次使用 X 的 WM 就是 KDE, 當時覺得滿好用的, 裝下去什麼都有了, 對於濛懂的我真是一大方便, 後來大一 SA 時, 因為 RAM 不足(好像是 P3-800 128M) 實在是受不了, 裝過上課教的 Afterstep & gnome, 就開始使用 Gnome 系列, 中間也曾經接受 Qlife 大大的推荐 xfce, 兩個感覺的很不錯, 好看好設速度也快, anyway, 這次挑戰 KDE4, 因為沒有看到 binary package, 只好自己用 ports compile(每個人開頭都說:』幹嘛不用 binary package』 XD, 好像某 CSCC 大大在旁邊說: 『你就等個兩天兩夜吧』), 最後實在等太久了, 所以只先把 kde4-base 裝起來, 整個感覺很不錯, 沒有想像中 delay, 設定也非常簡單, 把 chinese/ 下面的 ttf 需要的都裝一裝之後, 幾乎不大用設定就可以有很好用的環境 :) (剛剛才發現忘了裝可以 screenshot 的軟體, 裝好之後再丟幾張出來 :p )

Misc

留一些這次主要遇到的問題,

UTF-8 terminal

我 follow yzlin 學長的腳步目前都使用 UTF-8 環境, 所以這次需要找個 UTF-8 Terminal 來用, 之前最喜歡用的 Eterm, 似乎對 UTF-8 有點 bug, mencoding 也沒有 UTF-8 選項, 所以裝了 rxvt-unicode 來用, 一切非常正常.

Flash

想在 FreeBSD 上面用 flash 實在是痛阿 0rz.. 因為 Adobe 不願意出 FreeBSD version 的 flash, 所以現在只能用 linux emulation or gnash 來代替, 而且還是會有問題, 現在使用 linux-flashplugin7, 是可以看 youtube 了, 不過我想看的 MLB 的 gameday 不能正常 work, 算是一點遺珠之憾吧 :q

Games

有 DosBox & Wine 可以玩很多東西了 XD, 有 screenshot 軟體之後再補一張仙劍上來 XD

* Update: 補圖 :p

發文作者:dieabsorb | 八月 17, 2008

The Big Bang Theory

太糟糕了, 居然這麼晚才發現還沒寫 The Big Bang Theory 的感想 XD

大家都知道 2007 是 American soap 糟糕的一年, 因為 WGA 編劇罷工的關係, 許多連戲劇都停擺, 更糟糕的是, 後來有許多自行了斷的例子, 其中我個人認為最經典的就是 Heroes, 因為 yzlin 學長的推薦而開始看, 這也是一部可以讓我連續看 10 集的好東西(一集可是有整整 4x minutes 阿!), 06′ Season1 造成轟動, NBC 另外一部得 Emmy 的喜劇 30 Rock 也有惡搞它( Save the cheerleader, save the world! ), 到了 07′ Season2 一開始劇情還有許多不錯的伏筆想法, 到後來一瞬間爛掉, 就是因為罷工, 另一部大作 Prison Break 也一樣, 當初 05′ Season1 像神一般的 Micheal Scofield, 在 07′ Season3 … (雖然 06′ Season2 已經有些批評聲音). 當然拿這些劇情為主線的 soap 跟不需要大劇情的 The Big Bang Theory 比較實在是不公平, The Big Bang Theory 實在是 07′ 的清流阿~ (Y), (另一部我覺得 07′ 收的不錯的劇情劇 Chuck 下次在寫吧 :p)
The Big Bang Theory 敘述四位在 stanford 的教授(應該沒記錯吧 :p), 遇到個一個正妹 Penny 發展出的一些劇情.
Leonard Hofstadter 是一個物理教授, 自從對面搬來的正妹 Penny 之後一直想要有進一步的發展 XD, 但是想當然爾, 宅宅怎麼可能輕易把到正妹呢 XD
Sheldon Cooper 應該算是裡面個性最突出的, 他是一個從 5th grade 跳級到大學, 之後拿了 master*1, phD*2 的真強者!生活的重心就是研究 String Theory 還有任何宅宅會做的事情, 個性有點扭曲, 生長背景感覺完全沒有社會化過程 XD
Howard Wolowitz 也在 stanford 工作, 應該是航太機械方面的 professor/engineer 應該算是一個比較沒有羞恥心, 也比較 fasion 的阿宅吧, 對於女性非常飢渴 :p
Rajnesh Koothrappali 是一個很可愛的印度人, 無法在正常狀況下開口與女性交談.
Penny 是新搬到對面的正妹, 在 Cheese Cake Factory 當服務生, 跟四個人交上了朋友.
劇中許多宅宅的梗, 然後又有許多物理數學知識, 感覺不小心還可以學到一些東西, 非常推薦的一部 Comedy. (Y)
發文作者:dieabsorb | 八月 16, 2008

回憶 ..

1986 – 2008, 沒想到我已經活了這麼久了 XD

今天跟國中同學, 龜公, anatole, 竣翔, 老黎, 聚了一下, 雖然沒有特別感觸良多, 不過生出滿多想法的 :)

到底友誼的建立是怎麼開始還有延續的呢 ? 老實說很多人你不知道為什麼會跟他變成朋友, 你也不知道為什麼沒有跟他聯絡, 有時候你其實很討厭一些人, 但是時間久了之後又發現你跟他變成朋友, 真是太神奇了..

還記得小學五年級的戴老師說了一句讓我很震驚的話, 她說我很快就會發現我其實沒有朋友, 果然一畢業我就發現沒有一個人是我會想要聊天的, 當然應該也沒有人想鳥我吧 :p .., 當時主要應該是我的個性問題, 不知道到了現在, 這情況有沒有好一點 ? :)

國中之後算是認識了很多很棒的同學吧, 不知道為什麼, 兔子, 胖胖, 蛇還有好多人都沒聯絡了, 還好 anatole, 龜公一直有找到人 :D ..

我想同年齡中比較能感覺家人一直不再身邊的人可能比較少, 雖然說很多人覺得這樣很爽, 實際上會遇到很多問題, 當你作惡夢驚醒發現整個家裏沒人的時候, 當你要作人生重大決定可是沒有你覺得可以依靠的人願意跟你坐下聊得時候, 其實是滿糟糕的事情的..

(( 寫到一半發現, 我真的不是適合丟 blog 來抒發情緒的人, a. 我國文程度真的很爛, b. 我表達能力也很爛, 每一段想說的東西可能都不一樣, c. 實際上每一段都沒辦法真的寫出我的想法, 不自覺的就會發現哪邊寫了可能不好, 哪邊寫了會不會得罪人 .. 而且我又是個敞不開心胸的人..))

之後應該還會有更多相處的問題, 不知道怎麼解決勒..

發文作者:dieabsorb | 八月 7, 2008

Postfix policy service

最近 CSCC 想要上一個 policy service 來增加 block spam 的效率, 所以請 yjkuo 學長寫了一個 script, 昨天實際測才發現, 實際流量非常大, 用 Unix domain socket 跑的 script 會出現半死不活一直 timeout 的情況, process 一直增加, 把 memory 也吃光了, 昨天晚上 debug 不成, 決定用 TCP socket 的方式來改一個版本, 今天參考 postgrey 有樣學樣的刻了一個出來, 目前測試似乎沒什麼問題, 今天感覺過的很充實很快樂 XD

其實整個架構與想法(by chwong)跟程式部份其實都不會特別難, 但是我滿喜歡做這種東西的感覺(昨天想到要改程式反而有點高興 :p), 我喜歡寫這種可以讓大家可以活的高興一點的程式 :)

發文作者:dieabsorb | 三月 29, 2008

Two And A Half Men

前一陣子美國編劇公會的大罷工實在太傷了.. 讓我有很久一段時間沒有東西可以看(結果看了很多日本的動畫 0rz..)

前兩個禮拜 How I Met Your Mother & The Big Bang Theory 復撥之後讓我注意到另外一個 CBS 也在播的 Two And A Half Men, 看了幾集之後發現還不錯耶 :p

是一對兄弟還有弟弟的小孩的生活故事, 基本上笑點不算特別, 大概就是一般 American Soap 會出現的東西, 節奏也不會說太快, 可是會滿想讓人一直看下去的 :)

已經出到 Season 5, 這應該可以 cover 一段時間了 XD (而且 HIMYM, TBBT, South Park 也都繼續再出)

裡面很有趣的是, 每一集的 title 似乎都是會出現在裡面的一句話, 讓我學到不少好玩的 phrases :p

p.s. 裡面出現的 Lisa (Denise Richards)也有再 Friends 裡面演 Ross & Monica 的 cousin, 真好認, 一看就看出來了, 很漂亮的一個女生 :)

較舊的文章 »

分類

Follow

Get every new post delivered to your Inbox.