{ Linux }

  • 在 Console 底下簡單的 Yaml syntax check Script

    | /

    介紹

    在編寫 yaml 檔時,如果沒有使用任何的 IDE, 或是想 automation 作檢查,勢必需要在 CLI 可以檢查的方法。Yaml 檔發生錯誤是很擾人的,尤其是一個yaml 檔可能上百行,要找一個空白空錯沒有什麼好方法。最近就遇到因為前一版 commit 設定檔的人沒有檢查語法,設定檔裡面少了一個空白,結果造成 indent 就不對,接著程式沒寫好就直接停止執行的問題。但後來想想,應該要有一些方便的 tool 在編寫 yaml 檔結束後,作一些簡單的檢查,來減少浪費大家人力來追問題。

    實作方法

    • 安裝 ruby
    • 安裝 awesome_print 的 gem 檔

      # sudo gem install awesome_print

    • 執行 ruby 指令

      $ ruby -e “require ‘yaml’; require ‘awesome_print’; y=YAML.load_file(‘/tmp/example.yaml’); ap y”

    在 MAC 下只要安裝一個 gem 檔,然後用內建的 ruby 指令馬上就可以看出來了,而且畫面還非常的漂亮。

    DEMO

    我們以 wikipedia 上的 yaml 範例檔為例:

    --- receipt: Oz-Ware Purchase Invoice date: 2012-08-06 customer: given: Dorothy family: Gale items: - part_no: A4786 descrip: Water Bucket (Filled) price: 1.47 quantity: 4 - part_no: E1628 descrip: High Heeled “Ruby” Slippers size: 8 price: 100.27 quantity: 1 bill-to: &id001 street: | 123 Tornado Alley Suite 16 city: East Centerville state: FL ship-to: *id001 specialDelivery: > Follow the Yellow Brick Road to the Emerald City. Pay no attention to the man behind the curtain.

    Result: 如果一切順利的話,可以看到下面的結果,除了可以驗證內容打的對不對之外,還可以看結構是否正確。 yaml parse result 如果結構有錯,或是語法有錯,他會顯示錯誤的行數,這樣就比較好 Debug 了。 parse error

    結論

    如果有 vim 的 plugin or sublime 的 plugin 在即時編寫時,就可以直接列出語法有問題的地方應該會更好更直覺。不過現在這個方法比較適合在 CI commit build 預先作檢查,減少錯誤的程式上到 production 。

    參考

    [1] http://stackoverflow.com/questions/3971822/yaml-syntax-validator [2] http://stackoverflow.com/questions/17289399/how-do-i-pretty-print-a-hash-to-a-rails-view [3] https://github.com/michaeldv/awesome_print

  • Asus WL-500W 改機實錄

    /

    在幾個月前,買了 Asus WL-500W 這台 ip 分享器,看上的是他可以改機,與他支援 802.11N draft 的 protocol ,而且如果正式板出來的話,聽說還可以寄回去換主式板哦。雖然改機可能會破壞保固,但是可以自由的惡搞,這才是最令人爽快的。以下的內容就是 Asus WL-500W 的改機的方式。當然也是我自已作記錄的方式,避免之後忘記怎麼處理。

    具備的知識與能力:

    • 最好有基本的 Linux 的管理與操作知識
    • 對於網路要有基本的了解
    • 不怕死的精神

    刷機步驟:

    • 參考 OpenWRT for wl 500w 這篇文章,裡面其實已經說的滿詳細的。
    • 準備刷機的 Firmware ,我是使用 brcm-2.4/openvpn 這一板的(下載位置),因為我也想順便玩玩 openvpn 的功能。當然我也有不怕死的精神,所以我下載的是 snapshots 的板本。
    • 準備 tftp server 讓 wl-500w 可以更新他的 Firmware 。參考文件:Installing OpenWrt via TFTP
    • 我是使用 atftp 來作為我的 tftp server ,在 debian 下只要使用下列指令即可安裝:
    1
    # apt-get install atftp
    • 安裝完後,照著上述說明完成架設 tftp server ,並且把 wl-500w 重開後,他就會自動下載更新。
    • 刷機的這段時間,不要拔掉電源,否則會有不可預期的錯誤發生。
    • 刷機完成後,如果想用 web 管理的話,可以進入http://192.168.1.1/作管理,一開始會請你設定 root 密碼。
    • 除了使用 web 管理之外, ssh root@192.168.1.1 也可以登入管理主機。
    • 有需要安裝什麼功能,可以利過 system/package 或是 opkg 來安裝。

    Tips:

    • 如果要讓外部的人連上 ssh 除了可以在 web 介面設定之外,也可以在 /etc/config/firewall 下新增下列設定:

      1
      2
      3
      4
      5
      6
      7
      config 'rule' 'ssh'
      option 'src' 'wan'
      option 'proto' 'tcp'
      option 'srci_ip' ''
      option 'dest_ip' ''
      option 'dest_port' '22'
      option 'target' 'ACCEPT'
    • 啟用 usb 隨身儲存裝置,可參考 UsbStorageHowto 來實作,可 ssh 進去後,使用下列指令:

      1
      2
      3
      4
      #opkg update
      #opkg install
      #opkg install kmod-fs-vfat
      #opkg kmod-usb-core kmod-usb-ohci kmod-usb-storage kmod-usb2

      或是利用 web 界面中的 package 選項裡安裝 kmod-fs-vfat, kmod-usb-core,kmod-usb-ohci,kmod-usb-storage,kmod-usb2 。接著利用 fdisk -l 與 mount 指令,就可以把隨身裝置掛載上去了。

    最後,歡迎加入惡搞世界。

    Doxazosin

  • PowerPint 轉 flash 格式

    /

    之前在網路上有看到一個服務–「SlideShare」,是 share powerpoint 的,他會顯示如 youtube 的畫面,可以直接點選下一頁,顯示下一頁的 powerpoint 。這種服務如果放在 lab 上,各個同學可以很輕鬆的分享自已的 powerpoint ,並且不需要作下載的動作。我是覺得還滿方便的。

    不過平常的 lab meeting 所作出來的 powerpoint 可能會有版權的疑慮,有許多的圖型都懶的註明出處,因為只是單純的上台報告而已,所以也沒辦法上傳到 SlideShare 上。而在 google 尋找到的方案通常都是需要錢的,或是只能應用在 Windows 平台上,這並不符合我的需求。

    不過我在 sourceforge 上尋找到一個專案,他是利用 openoffice 可以直接將檔案格式的轉為其他格式來達成差不多的功能。不過當然沒有 SlideShare 上的美觀,不過也是免強可以達到類似的功能。

    專案名稱:PyODConverter
    說明:

    其實使用方法很簡單,就是把 openoffice 給驅動起來,接著再用該指令即可將 openoffice 可以讀取的格式,轉換成你想要的格式。這些格式不單單只有 swf 也包括 pdf/csv 之類的,只要是 Openoffice 可以讀,可以匯出的格式,就可以產生。

    步驟:

    • 找到 openoffice 路徑後,使用下列指令啟動。

      bash# soffice” -accept=”socket,port=8100;urp;”

    • 接著使用它所提供的 script ,即可轉檔。

      bash# ./DocumentConverter.py test.ppt test.swf

    TIPS:

    • 因為啟動 Openoffice 需要 Xwindow ,如果不想安裝 Xwindow 的話,可以使用 xvfb 來模擬 xwindow 。

    不過老實說還有一些缺點,並不是所有的 powerpoint 的動畫,或是效果都可以轉的,但是基本上不是太複雜的功能,應該都可以展現出來。

  • 在 debian 下安裝 webcam

    /

    Debian 真是太方便了,如果你使用官方的 kernel ,那只要下一個指令就可以安裝好 web cam 了。

    apt-get install gspca-modules-xxxx

    xxx 是 的你 kernel 板本,接著 web cam 的驅動程式就灌好了。

    如果你不是使用官方板本的話,就要抓 gspca-source 來自行編譯了。

    如果要測試的話, 可以使用 gnome-meeting/kopete/amsn 這幾類的產品都可以使用 webcam 的功能。

    底下有幾個參考網址可以參考:

  • 再次回頭試用 Amsn!

    /

    前幾天自從我昇級了我 Windows 下的 Msn 軟體後,我在 Linux 下就常常被板本不符的理由被 Msn Server 給踢了出去。在我最常用的 kopete 無法使用之後,我只好再將塵封已久的 gaim 再拿出來用。不過在試用了一下 gaim 後,發現功能極為缺乏,想要用的功能都沒出現,像離線訊息之類的新功能。最後再回頭研究 amsn 了。

    之前發表過「[desktop] Linux 下的 MSN 軟體 - Amsn」這篇文章,在二年沒用的情況下,再回頭使用該軟體,還真的有令人驚驗不已的感覺。除了之前就有支援的視訊之外,目前還支援了語音對話、不透過 Server 傳檔模式、 nudge 、和離線訊息,而更完整的是,連 msn space 的最近更新的功能都放上去了。

    目前搭配最佳板本的 tcl/tk 是 8.5a3 之後的板本,不過因為 8.5 是發展板,所以大部份的 Linux 並沒有納入,需要自行編譯。「Linux系统下使用aMsn(MSN)详解」這篇文章有完整教導如何編譯 tcl/tk 的方法。

    下面有一張 screenshot ,我有另外抓了幾張 amsn 的 screenshot 在我的相簿裡,大家可以參考看看。 Amsn Screenshot

    感謝小黃同學協助測試,並且將某張照片協助加上馬賽克。

  • ftp proxy 軟體介紹

    /

    之前有個特殊需求,某個地方的 ftp 站台只能提供 port 模式,可是很多使用者目前都是從 NAT 後連至 ftp 的情況,而從 NAT 後就必需要使用 passive 模式。可是該站台又只能提供 port 模式,怎麼辦?只好在中間架了一個 ftp proxy 來讓使用者可以直接上線。

    ftp.proxy - FTP Proxy Server ftp.proxy is an application level gateway for FTP. It sits between a client and a server forwarding command and data streams supporting a subset of the file transfer protocol as described in RFC 959.

    這個軟體提供application level 的 gateway 所以他可以把 port 模式轉至 passive 模式,這樣在防火牆後面也可以連上該 ftp 了。

    在 debian 下安裝很方便,就直接使用 apt-get install ftp-proxy 就安裝完成,接著修改一下設定檔就可完成。

    設定檔的位置在 /etc/proxy-suite/ftp-proxy.conf 裡,其中比較重要的幾個部份解說如下:

    # 遠端位置 DestinationAddress twkang.net # 遠端網址 DestinationPort 4002 # 遠端傳輸模式,其中有 active/passive/client ,所代表的意思為:主動/被動/和 client 連接模式 DestinationTransferMode active # 提供的網路 port Port 4002 # 提供的服務總類有 standalone/inetd 模式,在 debian 下用 standalone 即可 ServerType standalone

    如果只要使用 ftp-proxy 當然使用 redir 也是可以的,只不過目前的狀態比較特殊,server 跟 client 端之間所能提供的模式不同,否則的話, redir 可以提供相同的模式,並且提供 proxy 的功能。

    架設以後,現在某些人也可以從 firewall 後面直接連到該主機,並且可以使用上、下載的功能了。

  • gcin 的入力娘?

    /

    平常用無蝦米輸入法的我,是很少打注音文的,不過最近在 gcin 更新後,他多了一個功能:提醒你不要打注音文的入力娘。

    gcin 的入力娘

    不覺得旁邊跑出來提醒的入力娘很可愛嗎?剛查了一下,原來這個圖是「北部高中職制服識別圈管制部」裡反注音文的標誌。也許用了 gcin 就會因此而不容易打注音文了(那個國中、國小生會用 gcin 的呢?)

    其實我是很討厭注音文的一個人,因為我不想看到一段文字要解碼二次,好好的中文不打而打注音文,並沒有比較可愛啊,只會顯示知識的不足和懶惰而已。我覺得中國文字之美不只於其音義不同,而是其字的方正和帶來無限的意思。

    當然注音文這個議題已經講到快爛了,我也不在多說了,只是純分享這個可愛的入力娘呢。

  • 在 linux下使用雙螢幕

    /

    我在 Windows 下可以利用 intel 915 顯示卡的驅動程式就可以用很簡單的方法使用雙螢幕,其實它就是模擬 2048*768 的螢幕讓你分成二個螢幕顯示。你可以在主螢幕上寫程式,副螢幕上列出或顯示要參考的文件,使用是非常方便。而 linux 下的 xorg 也可以實作這樣的功能。

    你必需照下面的範例修改 /etc/X11/xorg.conf 檔案,請記得修改前請備份你的 xorg.conf ,避免日後如果 xwindow 開不起來,還有辦法救回來。設定檔中必需要設定的就是,設定二張顯卡但是它是指到同一個 device,二台顯示器,和二個顯示元件,並且設定其擺放的位置(左邊還右邊),可以讓你決定滑鼠是往左還是往右移動就會到下一個螢幕。

    範例如下: [code linenum=”no” download=”xorg.conf.example”] Section “Device” Identifier “Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller” Driver “i810” BusID “PCI:0:2:0” Option “MonitorLayout” “CRT,LFP” Screen 0 EndSection Section “Device” # 第二個顯示卡的名字,修改後,後面利用到些螢幕的名字都要一樣 Identifier “Intel-CRT” Driver “i810” BusID “PCI:0:2:0” Option “MonitorLayout” “CRT,LFP” Screen 1 EndSection Section “Monitor” Identifier “Generic Monitor” Option “DPMS” EndSection # 第二個螢幕 Section “Monitor” Identifier “CRT” Option “DPMS” EndSection Section “Screen” Identifier “Default Screen” Device “Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller” Monitor “Generic Monitor” DefaultDepth 24 SubSection “Display” Depth 24 Modes “1024x768” “800x600” “640x480” EndSubSection EndSection # 第二個螢幕設定 Section “Screen” Identifier “External Screen” Device “Intel-CRT” Monitor “CRT” DefaultDepth 24 SubSection “Display” Depth 24 Modes “1024x768” EndSubSection EndSection Section “ServerLayout” Identifier “Default Layout” # 有幾個螢幕就寫幾個 Screen “Default Screen” Screen “External Screen” RightOf “Default Screen” InputDevice “Generic Keyboard” InputDevice “Configured Mouse” InputDevice “Synaptics Touchpad” EndSection Section “DRI” Mode 0666 EndSection # 開啟多螢幕功能 Section “ServerFlags” Option “Xinerama” “true” EndSection [/code]

    不過我還是希望我的二個螢幕各有不同的桌面和工具列,就像虛擬桌面一樣。這樣我按 alt+tab 時,就不會跳到另一個桌面,不過我目前不會設定,只好現在將就點。

  • 利用指令抓出影片檔裡的某畫面當 screenshot

    /

    為什麼要這樣作?其實是因為如果你寫在 php 裡或是想要一次取大量的 screenshot 的話,哪用指令模式是比較方便的,以下提出三種方法來作抓圖的工作。不過只有方法二或是方法三是比較可以實行的方法,方法一其實只是一種模擬輸入的方法。

    另外有些相簿軟體遇到動畫檔,所顯示出來的只是一個代表動畫檔的圖示,如果利用這些方法,可以讓他先顯示一個預覽圖示在縮圖上。

    方法一: 使用 mplayer 配合 bash 的指令,延遲幾秒後,自動按下抓圖鍵。這個方法的缺點為,不能自行命名抓下來的圖檔檔名,但是只要是 mplayer 能放的檔,都能使用這個方法。 [code] $ (sleep 1;printf s)|mplayer -vf screenshot CCF17-1.rmvb -vo null //sleep 秒數;輸出抓圖指令|mplayer -vf screenshot videofile -vo 不輸出畫面 [/code]

    方法二: 利用 ffmpeg 作抓圖的動作。這個轉檔程式有些目前比較新的 codec 並沒有支援,如 wmv9 和 rmvb ,所以如果沒有用到這幾個 codec 的話,可以使用這個方法。 [code] $ ffmpeg -i Fedex.wmv -s 320x240 -vframes 1 -ss 6 -f mjpeg output.jpg // ffmpeg -i inputfile -s 轉出來的圖檔長寬 -vframes 1 -ss 位移秒數 -f mjpeg output.jpg [/code]

    方法三: 一樣是利用 mplayer 不過需要經過二個步驟,並且無法自定檔名。不過可以支援同樣 mplayer 支援的檔案格式,並且不用考慮任何的 bash 和 delay 的問題。 [code] $ mencoder -ss 0 -endpos 0.001 -ovc copy -nosound inputfile.avi -o tmp.avi // 先抓出位移 0 中的 0.001 秒的動畫,並且輸出到 tmp.avi 上 $ mplayer -nosound -vo jpeg tmp.avi // 把圖轉成 jpeg $ rm tmp.avi // 移掉暫存用的檔 [/code]

    從以上三種方法來看,方法三是最好的方法,支援的各種格式,又不會有任何的處理上的暇疵,到時把他寫成 script 就可以很方便的使用了。

  • Apache Server Benchmark 測試

    /

    要作 apache server benchmark 不用到處尋找其他的軟體,事實上 apache 就有內建了,這個指令就是 ab 。

    debian user 請使用 apt-get 安裝 apache2-utils 套件。

    使用方法為:

    1
    # ab -c 每個ip連線數 -n 總共多少ip 網址 # ab -c 5 -n 1000 http://127.0.0.1

    對 apache server 要求 1000 個連線,每個連線對 apache 有五個 request ,這意思是像瀏覽一般網頁的行為一樣,會抓取圖檔和網頁的部份,而抓一個網頁差不多需要五個 request 。接著稍等一段時間,結果就會出來了。

    靜態網頁:

    1
    Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 0.8 1 4 Processing: 1 2 4.2 2 113 Waiting: 0 1 4.1 1 111 Total: 3 4 4.1 4 115

    動態頁面,以我的 blog 來作測試。

    1
    Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 5.9 0 103 Processing: 2491 3237 270.4 3148 4373 Waiting: 2351 3132 261.2 3055 4285 Total: 2491 3238 270.9 3148 4373

    我們可以看到以單純的 html 檔, apache 回應超快,即時我使用的只有 p3-800 的 cpu ,但每個請求大概只要 0.03 秒至 0.1 秒左右,但是我抓取我的 blog 首頁,就差不多會多個十倍以上的速度了。這樣發現 lyceum 當作 blog 的首頁只有慘而已,看來要想一些辦法來加速了。

    之前看到一篇文章,如果要加速 apache 的回應速度除了使用 mmcache 之外,把靜態和動態網頁分開不同的 apache 執行,並利用 proxy 指向不同的 apache ,這也是不錯的方法。