在CentOS下透過命令列抓取網頁畫面

使用此程式是  CutyCapt
http://cutycapt.sourceforge.net/

他是用Qt的WebKit實做的,所以伺服器尚要裝Qt包含WebKit的開發函式庫~

可以用yum裝 ,在這環境上我用rpm自己裝..
從這個repo http://dl.atrpms.net/el5-i386/atrpms/testing/ 抓三個相關的rpm
安裝順序是,有分成 32位元 跟64位元,最好依照作業系統版本安裝,

(x32)

http://dl.atrpms.net/el5-i386/atrpms/testing/qt44-4.4.3-10_4.el5.i386.rpm
http://dl.atrpms.net/el5-i386/atrpms/testing/qt44-x11-4.4.3-10_4.el5.i386.rpm
http://dl.atrpms.net/el5-i386/atrpms/testing/qt44-devel-4.4.3-10_4.el5.i386.rpm

(x64)
wget http://dl.atrpms.net/el5-x86_64/atrpms/testing/qt44-4.4.3-10_4.el5.x86_64.rpm
wget http://dl.atrpms.net/el5-x86_64/atrpms/testing/qt44-x11-4.4.3-10_4.el5.x86_64.rpm
wget http://dl.atrpms.net/el5-x86_64/atrpms/testing/qt44-devel-4.4.3-10_4.el5.x86_64.rpm
其實中途還有裝了兩個libXi..去pboon找到的..不知道做什麼的..

ftp://ftp.pbone.net/mirror/ftp.centos.org/5.5/os/x86_64/CentOS/libXi-1.0.1-4.el5_4.i386.rpm
ftp://ftp.pbone.net/mirror/ftp.centos.org/5.5/os/x86_64/CentOS/libXi-devel-1.0.1-4.el5_4.i386.rpm
ftp://ftp.pbone.net/mirror/ftp.centos.org/5.5/os/i386/CentOS/libXinerama-devel-1.0.1-2.1.i386.rpm

裝好以後把CutyCapt解壓縮 進資料夾執行 qmake

如果沒設路徑 qmake會裝在 /usr/lib/qt44/bin/qmake

然後make 就會有執行檔了,由於這裡是命令列的環境所以需要程式模擬視窗介面執行這隻程式CutyCapt有寫..只是我不知道去哪抓 xvfb-run 的 rpm pboon 所以 google 到

xvfb-run 直接抓下來解壓縮放到系統上就能用了-_-

如果沒裝 xorg-x11-server-Xvfb 可能也會不行…就 yum install xorg-x11-server-Xvfb 裝一下囉

然後就..可以用了

xvfb-run –server-args="-screen 0, 1024x768x24" CutyCapt –url=目標網址 –out=檔案名稱.png
指定了模擬出來的解析度大小跟網址與檔案名稱其他參數可以參考下面

—————————————————————————–
Usage: CutyCapt –url=http://www.example.org/ –out=localfile.png
—————————————————————————–
–help                         Print this help page and exit
–url=<url>                    The URL to capture (http:…|file:…|…)
–out=<path>                   The target file (.png|pdf|ps|svg|jpeg|…)
–out-format=<f>               Like extension in –out, overrides heuristic
–min-width=<int>              Minimal width for the image (default: 800)
–max-wait=<ms>                Don’t wait more than (default: 90000, inf: 0)
–delay=<ms>                   After successful load, wait (default: 0)
–user-styles=<url>            Location of user style sheet, if any
–header=<name>:<value>        request header; repeatable; some can’t be set
–method=<get|post|put>        Specifies the request method (default: get)
–body-string=<string>         Unencoded request body (default: none)
–body-base64=<base64>         Base64-encoded request body (default: none)
–app-name=<name>              appName used in User-Agent; default is none
–app-version=<version>        appVers used in User-Agent; default is none
–user-agent=<string>          Override the User-Agent header Qt would set
–javascript=<on|off>          JavaScript execution (default: on)
–java=<on|off>                Java execution (default: unknown)
–plugins=<on|off>             Plugin execution (default: unknown)
–private-browsing=<on|off>    Private browsing (default: unknown)
–auto-load-images=<on|off>    Automatic image loading (default: on)
–js-can-open-windows=<on|off> Script can open windows? (default: unknown)
–js-can-access-clipboard=<on|off> Script clipboard privs (default: unknown)
—————————————————————————–
<f> is svg,ps,pdf,itext,html,rtree,png,jpeg,mng,tiff,gif,bmp,ppm,xbm,xpm
—————————————————————————–

然後出來的圖片就是亂碼的=_=

在隨便裝個中文字體就可以了..
放到 /usr/share/fonts/chinese/TrueType 裡面
or Windows上的ttf ttc好像都可以..
例如..全字庫
http://www.cns11643.gov.tw/AIDB/file.do?path=download%2F%E5%AD%97%E5%9E%8B%E4%B8%8B%E8%BC%89%601q%60%E5%85%A8%E5%AD%97%E5%BA%AB%E6%AD%A3%E5%AE%8B%E9%AB%94%2Fname%2FTW-Sung-95_1_2.ttf

另外一套類似性質的程式
http://khtml2png.sourceforge.net/index.php?page=download
參考資料..
http://befun.520net.to/lover/ea/2009/10/04/php-linux
http://blog.jangmt.com/2009/10/cutycapt.html

svn 批次處理 與 sed 批次修改

  在程式設計提高生產力那本書上看到的,很「提高生產力」的方法..

在svn裡面要加入所有變更的檔案時,如果直接用 svn add * 來做很容易不小心加到一些svn的暫存檔或者不需要得檔案,通常都會用svn st 來觀察有哪些尚未處理一個一個加。

svn st 會列出所有檔案的狀態例如
? add.php
? remove.php
M edit .php
A haha.tpl

然後就要一個一個看著?的檔案把他加入..實在很麻煩,書上就提到透過bash shell的管線命令快速又正確的把檔案加入:

svn st | grep ^? | sed s/?// | xargs svn add

svn st 先列出所有檔案 丟給管線 grep篩選開頭是問號的列數
再管線丟給 sed 正規處理的程式 s代表取代 s/目標正規/取代值/
在這裡把?去掉了,再丟給xargs 他幫助不支援管線的程式,把輸入整理成參數的模式丟給svn add裡面,實際最後執行的就是:

svn add add.php remove.php

實在是很方便,在其他情況,例如還原(revert)所有的變更都可以透過這種方式來做。

也順便學到了sed的強大,有時候很多隻程式都複製來複製去(不好的作法),當發生問題時要全部一隻一隻去改就很麻煩,sed 除了可以做修改以外還有刪除增加取代都可以,所以可以批次修改所有重複的程式,真的能夠提昇不少的生產力呢!

質疑權威-憤怒的猴子

今天在珍饈吃飯時在 程式設計師提升生產力秘笈 質疑權威章節裡面看到一個有趣的小故事…

說有科學家做實驗,把一群猴子關在一個房間裡面,放了一個樓梯並在樓梯上方放了一串香蕉,當開始觀察後,聰明的猴子們花了一點時間在房間內找到梯子,並學會爬梯子上去拿香蕉,但當猴子爬上去拿香蕉時,科學家就在房間內放出大量的冰水,科學家馬上得到一群憤怒的猴子。在接下來的時間,猴子們很快的學會不能接近梯子。
接著科學家換掉房間內的一隻猴子,剛進入的猴子很快的找到梯子並打算爬上去吃香蕉,但馬上被其他猴子阻止,並大打一頓,吃了苦頭的猴子之後也不敢前往梯子了…
之後科學家一個一個把猴子慢慢換光,之後再也沒有猴子敢接近梯子了…

沒有照原文打上,但是原文描述的更有趣一些,看到這裡可能還不知道在做什麼,作者在這是在提他工作中發生的一件有趣的事。

在程式設計中,programing style是一件重要的事情,例如變數命名中的駱駝峰與底線,例如:getString(),get_string()
這件事在我寫了兩年程式以後才開始慢慢發現,當我開始考慮這件事時曾經煩惱了一段時間,思考著該採用什麼風格?有什麼取捨點?各有什麼好處?,閱讀了幾本相關的書籍以後,慢慢有一些領悟,當時的理解是認為style只是一種在team work時對整個程式的一種統一的感受,閱讀的書名已經忘了,當初找到跟style最有關的書,就直接拿閱讀了,後來看完才發現 style 以外在思考的其實是一種語意的清晰,最終期待的目的其實是一種自我解釋的語言,在不寫任何註釋的情況下,能夠讓程式本身的命名與編排方式可以表達自身所代表的含意。
在沒有注意的情況下,剛開始入門撰寫程式時,根本不會考慮到這一塊,但到理解了以後,撰寫程式耗費了很多時間在思考變數的命名與編排統一風格的程式,主要除了相信書上所說明的以外,也相信著閱讀(修改)程式比撰寫的次數還多,所以希望在團隊合作中,可以寫出讓別人也能夠輕鬆理解與維護的程式。

回到憤怒的猴子…作者當時發生了一件趣事,就是撰寫測試的程式時,需要較具描述力的函式名稱,testUpdateMyNameAndAssertCheck 例如此,但是當使用Java統一的programing style駱駝峰時當單字過多時,閱讀會變得有些困難,他馬上想到改成採用底線表示 test_Update_my_name_and_assert_check ,並認為較清晰,但馬上引起他團隊部份程式設計師的反感,說為什麼你要破壞風格?
雖也得到一部分人認可,但是他是首席程式設計師可以決定,書中舉出上面故事,主要想要表達說,雖平常做的每件事情都有他的意義,但是請隨時檢視自己所作的每件事情,有沒有忘記了初衷,當初也到底是為了什麼才建立風格的呢?

其實也認為自己時常太被動的吸收接收到的觀念,而沒有仔細檢視是否適用與身旁的情況,而一昧的接受流傳已久的觀念。

他在另外一章也有提到,在物件導向開始時的第一本巨著(small talk),值得去閱讀,從程序式轉物件的第一本巨著,雖已經過了很久了,但是閱讀後更能知道當時時代背景所發生轉變有多大的意義,雖與質疑權威有一點相反意,但我認為也跟這裡所要表達的有點類似呢!

2010 3 14 補充
今天突然想到在日常生活中比較長發生類似這件比喻的實例,在PTT上不能打注音文是從許久以前開始許多板的板規明定禁止,目的是不希望用這種不標準的敘述方式來降低文章閱讀性,進而達到抑止注音文在網路上的流行(副作用),後來或許許多人故意在鬧,刻意打了一些注音文邊緣的東西,造成版規越訂越嚴格,說什麼情況可以什麼情況不行,甚至懶得管就整個禁止,到後來變成鄉民運動..看到就會罵,甚至只是「一」不小心打成注音的「ㄧ」這種不算造成瀏覽困難的小事,然後推文就會開始指責說怎麼可以打注音文,然後發文的人也不曉得為什麼要被指正,但也被迫改正並且道歉…並且越演越烈…最近似乎有較好轉的現象,但是讓我想到這些被指正的人…是否知道為什麼不能爬上樓梯呢?

網路安全與微波爐

今天第一次上網路安全的課,老師是陳毓璋

上課內容還蠻有趣的,有講一些時事,跟一些生活知識等等~

剛提到一點感覺很重要…關於微波爐的知識,

  微波爐前的鐵網,用於隔離微波,在他任教的學校有學生在宿舍內將之拆除,並於微波爐前面等待,造成內臟都熟了…超可怕的

另外一個是在微波爐內煮泡麵,除了不能用鐵碗外,將油包都倒入碗中,造成水中的壓力都被油封,無法釋放熱能,在最後拿出泡麵時的搖晃造成油封破裂,整碗麵彈出臉上,造成嚴重灼傷…