Python Wretch Grabber
上次寫了一個 wget 的 wretch 抓圖程式。這次改用 python 寫,可以輕鬆作到跨平台。因為 code snippet indentation 作得不是很好,所以用 code2html 轉了放到自己站上,為便於討論及參考我加上了行號。要用的話請服用 .py 檔。
支援兩種用法,若只給一個 argument 表 user,此狀況下將抓下該 user 所有相本;或者給兩個 argument 分別表 user 及 album,只抓該指定相本:
python wretch_grabber.py user_name album_id
code 裡面玩了一些 trick,基本上是根據我讀無名 html 碼所得到的一些假設。如果之後無名網頁源碼有改(雖然機率不大,我看他們很久沒改了 XD),這份 code 可能也需要小修一下,尤其是在 regular expression 的部分。關於這些 trick 也可以參照井民全先生所寫的文件。
又,如果要在 Windows 下運行,os.system 的部分要改成 Windows 底下的指令。應該很 trivial,我沒在用 Windows 所以就不改了。懶得改的話,手邊有系上或實驗室工作站可用的話,丟上去跑也很不錯,學網速度超快的,就算是相本很多的帳號,全抓下來實測不超過 1 min。
Matlab Work with Beryl
Matlab 跟 Beryl 底下工作時會有兩個問題:
1) 只能從 command line 底下叫出來,而不能用 Alt + F2
2) 這比較嚴重…叫出來會一片灰,只有左下角 start 部分很完美…
如果你的 Ubuntu 版本不是 7.04 的話,似乎可以在 start up shell 最前面(#!/bin/bash 的下一行)加兩行環境變數的更動就可以,因為這原則上是 Java 的 bug:
export MATLAB_JAVA=“/usr/lib/jvm/java-1.5.0-sun/jre/”
也有一說是加第二行就好,不加第一行。
如果是 7.04 的話(等我寫完論文就要來 upgrade 了…真麻煩 = =),就要用別的賤招:把 Beryl 關掉,開 Matlab,在 Matlab 開開的狀況下再把 Beryl 開起來就搞定了… = =
參考連結:
Feisty, MATLAB and Beryl… @ Ubuntu Forums
Tags: Beryl, Feisty, Matlab, Ubuntu
Matlab R2008a on Ubuntu 7.04
Matlab R2008a 裝在 Ubuntu 7.04(也許其他的 version 也有問題,但我的是這個組合)會有一個小問題。首先你照著官方小手冊這樣下他不會鳥你:
我的方法是這樣,先切成 root,再用 sh 去接:
sh /media/cdrom/install
這樣小 window 就會跑出來了,可是會碰到這樣的 error message:
the X Window System version of ‘install’. The following
messages were written to standard error:
/media/cdrom/update/install/main.sh: 168: /media/cdrom/update/bin/glnx86/xsetup: Permission denied
Attempt to fix the problem and try again. If X is not available
or ‘xsetup’ cannot be made to work then try the terminal
version of ‘install’ using the command:
install* -t or INSTALL* -t
——————————————————————-
Sorry! Setup aborted . . .
我的推測是很可能跟 mount cdrom 之後權限只有唯讀有關係,所以就把 cd 整個 copy 到硬碟,chmod 為 777 再跑一次就可以搞定了。
chmod -R 777 /home/jutirain/temp/cdrom
sh /home/jutirain/temp/cdrom/install
參考連結:
Help installing MATLAB @ Ubuntu Forums
Images to Video
之前有寫過把影片拆成一串 image 的方法,這邊則是反過來,把一串 image 兜成一段影片。
一樣是用 mplayer 系列,以下例子是把目前資料夾中的所有 jpg 都壓起來:
注意的是可以用方便不已的 regular expression,所以假設要合第 200 ~ 299 個 frame 可以這樣下指令(假設資料夾下圖檔名如 mplayer 之拆解所預設補至八位數字如 00000001.jpg):
如果檔名長得比較麻煩,也可以先用 shell script 或 scripting language 自動的寫出一個檔案 list.txt,每行指定一個檔案,然後下:
參考連結:
Encoding from multiple input image files
Tags: Linux, MEncoder, MPlayer, Video
半瓶醋的 C++ 教學(第四章):編程環境的選擇
之前在第三章曾經提到,越接近數學的內力不容易隨時間而改變,但作為外功的程式或系統工具則會,那麼,我們該如何儘量讓自己的外功能夠歷久恒新呢?
很直覺的,當然就是選用較不會過時的工具。而工具要能夠在變化萬千的編程界中不被時間所淘汰,固然本身素質要好,另外,我認為最重要的其中一個環節就是,開放。雖然這應該很直覺,不過還是稍加解釋一下好了…
如果今天某工具某 framework 是知名大廠所提倡的,或許在這大廠能夠予以支援的狀況下是還滿不錯用的,但是天有不測風雲啊,再怎麼大的公司總也有收攤的一天…就算沒有收攤好了,也許是公司的政策改變了,要改推另一個工具,那麼這時候無論是開發者的使用順手度,還是市場的接受度(你知道,麻瓜常常都是看哪個廣告多就用哪個,但我們巫師要有巫師的衿持),都難免急轉直下。因為他不開放,沒人搞得懂裡面在幹嘛,所以不會有社群的力量,同理,你也搞不懂,就算你再強想自己硬幹也沒辦法,除非重新寫一個。
甚至不要說收攤或是什麼行銷政策了,光講某M社的 IDE,常常出一個新的版本舊的版本的 code 就不能用了,這種愚蠢的事情我真想不透為什麼有人能夠接受…
Tags: C++, CommandLine, Linux, ProgrammingArt, Ubuntu, Vim
Notes on cvQueryFrame
用 cvQueryFrame 要特別注意,連續 call 的話會一直往後面的 frame 跑,而且之前用 pointer 指的話,也會跟著往後跑,用 code 來說明的話:
frame2 = cvQueryFrame() ; // point to the second frame
frame1 原本是指向第一個 frame,但又 call 了一次後會跟 frame2 一起指向第二個 frame,若再 call 一次:
則 frame[1-3] 都會指向第三個 frame。
所以碰到像 optical flow 之類需要兩個連續 frame 的時候,第二次 call cvQueryFrame 之前,要先用另外一份空間把第一個 frame 備份起來。我正在玩的這份 sample code 是這樣用的:
cvConvertImage(frame, frame1_1C, 0); // convert to the OpenCV preferred format
Tags: C++, OpenCV, Programming
用 wget 抓無名單一相簿
雖說也有幹圖王之類的可以用,不過我個人感覺那實在是肥大了點。加上好玩,就用 wget 試了一下。
無名的 page source 寫得相當簡單。首先從中找到類似以下這行的 html code。
就可以得到 server_id, user_id, album_id, photo_id(應該明顯到不需要寫出來吧 :))
用這樣的方法找到該相簿第一張與最後一張的 photo_id,寫出類似以下 shell script,執行,就搞定啦。
do
wget http://server_id/user_id/album_id/$i.jpg –referer=“http://www.wretch.cc”
done
基本上 pixnet 也差不多,可以自己試試看。
要注意的是從 photo_id_start 到 photo_id_end 不見得每個 url 都實際存在。但實際測試基本上都滿 OK 的,如果真的隔太遠自己手動調一下也行。我沒有很常抓圖,所以就一直沿用這本質上很暴力的方法,如果有比較好的方法歡迎討論討論。
Tags: Image, Network, Wget, Wretch
MPlayer 下使用字幕
用 mplayer 使用中文字幕似乎不是一件太簡便的事情。參考了 Free BSD Chinese HOWTO,但在我的 Ubuntu 7.04 上似乎不 work。
以下指令均不能使用(假設字型放在該路徑、字幕編碼為 utf8):
mplayer -font /font/big5-kai/bkai00mp16/font.desc -sub 1.srt -unicode 1.mkv
所以只好去抓英文字幕來用…
很簡單就可以使用
加 subfont 之類的參數可以改動字型大小等等
或是寫在 ~/.mplayer/config 之中也可以
Tags: Linux, MPlayer, Subtitle, Ubuntu
半瓶醋的 C++ 教學(第三章):程序員的內力與外功
很多人都曾經提出過這樣的比喻:程序員的功力之中,大致上可以分為內力以及外功。
Tags: C++, ProgrammingArt
SVN 遠端協同作業
最近剛好有同學在問,隨手記一下,如果要將 code 上傳遠端工作站,與隊友協同作業時大概要怎麼做。首先要先登入遠端工作站,在上面開啟這個 project:
svnadmin create /home/batman/svn/paper_with_robin
再回到本機端 project 之下,將其 import 到遠端:
svn import . svn+ssh://batman@workstation:/home/batman/svn/paper_with_robin
這樣 robin 就可以用以下指令 下載一份並與你協同作業了。



