Home Contact Sitemap

Team Programming Dragon.編程龍

Programming Art、C++、Python、Django、LinuxDev、HCI、Graphics、Web2.0。讓我們成為編程界的朝田龍太郎吧。

Beauty is Our Business

A Birthday Salute to Computer Scientist Edsger W. Dijkstra.

Python Wretch Grabber

上次寫了一個 wget 的 wretch 抓圖程式。這次改用 python 寫,可以輕鬆作到跨平台。因為 code snippet indentation 作得不是很好,所以用 code2html 轉了放到自己站上,為便於討論及參考我加上了行號。要用的話請服用 .py 檔

支援兩種用法,若只給一個 argument 表 user,此狀況下將抓下該 user 所有相本;或者給兩個 argument 分別表 user 及 album,只抓該指定相本:

python wretch_grabber.py user_name
python wretch_grabber.py user_name album_id

code 裡面玩了一些 trick,基本上是根據我讀無名 html 碼所得到的一些假設。如果之後無名網頁源碼有改(雖然機率不大,我看他們很久沒改了 XD),這份 code 可能也需要小修一下,尤其是在 regular expression 的部分。關於這些 trick 也可以參照井民全先生所寫的文件

又,如果要在 Windows 下運行,os.system 的部分要改成 Windows 底下的指令。應該很 trivial,我沒在用 Windows 所以就不改了。懶得改的話,手邊有系上或實驗室工作站可用的話,丟上去跑也很不錯,學網速度超快的,就算是相本很多的帳號,全抓下來實測不超過 1 min。

Tags: , ,

. 31 Aug 08 | Python | Comments (4)

Matlab Work with Beryl

Matlab 跟 Beryl 底下工作時會有兩個問題:
1) 只能從 command line 底下叫出來,而不能用 Alt + F2
2) 這比較嚴重…叫出來會一片灰,只有左下角 start 部分很完美…

如果你的 Ubuntu 版本不是 7.04 的話,似乎可以在 start up shell 最前面(#!/bin/bash 的下一行)加兩行環境變數的更動就可以,因為這原則上是 Java 的 bug:

export AWT_TOOLKIT=MToolkit
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: , , ,

. 29 Aug 08 | Matlab, Ubuntu | Comments (0)

Matlab R2008a on Ubuntu 7.04

Matlab R2008a 裝在 Ubuntu 7.04(也許其他的 version 也有問題,但我的是這個組合)會有一個小問題。首先你照著官方小手冊這樣下他不會鳥你:

sudo /media/cdrom/install

我的方法是這樣,先切成 root,再用 sh 去接:

sudo su
sh /media/cdrom/install

這樣小 window 就會跑出來了,可是會碰到這樣的 error message:

An error status was returned by the program ‘xsetup’,
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 再跑一次就可以搞定了。

cp -r /media/cdrom/ /home/jutirain/temp/
chmod -R 777 /home/jutirain/temp/cdrom
sh /home/jutirain/temp/cdrom/install

參考連結:
Help installing MATLAB @ Ubuntu Forums

Tags: ,

. 29 Aug 08 | Ubuntu | Comments (0)

Images to Video

之前有寫過把影片拆成一串 image 的方法,這邊則是反過來,把一串 image 兜成一段影片。

一樣是用 mplayer 系列,以下例子是把目前資料夾中的所有 jpg 都壓起來:

mencoder mf://*.jpg -mf type=jpeg -ovc lavc -oac lavc -o output.avi

注意的是可以用方便不已的 regular expression,所以假設要合第 200 ~ 299 個 frame 可以這樣下指令(假設資料夾下圖檔名如 mplayer 之拆解所預設補至八位數字如 00000001.jpg):

mencoder mf://000002*.jpg -mf type=jpeg -ovc lavc -oac lavc -o output.avi

如果檔名長得比較麻煩,也可以先用 shell script 或 scripting language 自動的寫出一個檔案 list.txt,每行指定一個檔案,然後下:

mencoder mf://@list.txt -mf type=jpeg -ovc lavc -oac lavc -o output.avi

參考連結:
Encoding from multiple input image files

Tags: , , ,

. 28 Aug 08 | Linux | Comments (0)

半瓶醋的 C++ 教學(第四章):編程環境的選擇

之前在第三章曾經提到,越接近數學的內力不容易隨時間而改變,但作為外功的程式或系統工具則會,那麼,我們該如何儘量讓自己的外功能夠歷久恒新呢?

很直覺的,當然就是選用較不會過時的工具。而工具要能夠在變化萬千的編程界中不被時間所淘汰,固然本身素質要好,另外,我認為最重要的其中一個環節就是,開放。雖然這應該很直覺,不過還是稍加解釋一下好了…

如果今天某工具某 framework 是知名大廠所提倡的,或許在這大廠能夠予以支援的狀況下是還滿不錯用的,但是天有不測風雲啊,再怎麼大的公司總也有收攤的一天…就算沒有收攤好了,也許是公司的政策改變了,要改推另一個工具,那麼這時候無論是開發者的使用順手度,還是市場的接受度(你知道,麻瓜常常都是看哪個廣告多就用哪個,但我們巫師要有巫師的衿持),都難免急轉直下。因為他不開放,沒人搞得懂裡面在幹嘛,所以不會有社群的力量,同理,你也搞不懂,就算你再強想自己硬幹也沒辦法,除非重新寫一個。

甚至不要說收攤或是什麼行銷政策了,光講某M社的 IDE,常常出一個新的版本舊的版本的 code 就不能用了,這種愚蠢的事情我真想不透為什麼有人能夠接受…

Tags: , , , , ,

. 27 Aug 08 | C++, Linux | Comments (2)

Notes on cvQueryFrame

用 cvQueryFrame 要特別注意,連續 call 的話會一直往後面的 frame 跑,而且之前用 pointer 指的話,也會跟著往後跑,用 code 來說明的話:

frame1 = cvQueryFrame() ; // point to the first frame
frame2 = cvQueryFrame() ; // point to the second frame
 

frame1 原本是指向第一個 frame,但又 call 了一次後會跟 frame2 一起指向第二個 frame,若再 call 一次:

frame3 = cvQueryFrame() ; // point to the third frame
 

則 frame[1-3] 都會指向第三個 frame。

所以碰到像 optical flow 之類需要兩個連續 frame 的時候,第二次 call cvQueryFrame 之前,要先用另外一份空間把第一個 frame 備份起來。我正在玩的這份 sample code 是這樣用的:

allocateOnDemand( &frame1_1C, frame_size, IPL_DEPTH_8U, 1 ); // a self-defined routine for memory allocation, mainly cvCreateImage
cvConvertImage(frame, frame1_1C, 0); // convert to the OpenCV preferred format
 

Tags: , ,

. 21 Aug 08 | OpenCV | Comments (0)

用 wget 抓無名單一相簿

雖說也有幹圖王之類的可以用,不過我個人感覺那實在是肥大了點。加上好玩,就用 wget 試了一下。

無名的 page source 寫得相當簡單。首先從中找到類似以下這行的 html code。

src=’http://f7.wretch.yimg.com/jolin/6/1509316192.jpg

就可以得到 server_id, user_id, album_id, photo_id(應該明顯到不需要寫出來吧 :))

用這樣的方法找到該相簿第一張與最後一張的 photo_id,寫出類似以下 shell script,執行,就搞定啦。

for ((i=photo_id_start; i<=photo_id_end; i++))
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: , , ,

. 20 Aug 08 | Network | Comment (1)

MPlayer 下使用字幕

用 mplayer 使用中文字幕似乎不是一件太簡便的事情。參考了 Free BSD Chinese HOWTO,但在我的 Ubuntu 7.04 上似乎不 work。
以下指令均不能使用(假設字型放在該路徑、字幕編碼為 utf8):

mplayer -font /font/big5-kai/bkai00mp16/font.desc -sub 1.srt -utf8 1.mkv
mplayer -font /font/big5-kai/bkai00mp16/font.desc -sub 1.srt -unicode 1.mkv

所以只好去抓英文字幕來用…

mplayer 1.mkv -sub 1.eng.srt

很簡單就可以使用

加 subfont 之類的參數可以改動字型大小等等

mplayer 1.mkv -sub 1.eng.srt -subfont-text-scale 3

或是寫在 ~/.mplayer/config 之中也可以

Tags: , , ,

. 11 Aug 08 | Linux | Comments (0)

半瓶醋的 C++ 教學(第三章):程序員的內力與外功

很多人都曾經提出過這樣的比喻:程序員的功力之中,大致上可以分為內力以及外功。

Tags: ,

. 10 Jul 08 | C++ | Comment (1)

SVN 遠端協同作業

最近剛好有同學在問,隨手記一下,如果要將 code 上傳遠端工作站,與隊友協同作業時大概要怎麼做。首先要先登入遠端工作站,在上面開啟這個 project:

ssh batman@workstation
svnadmin create /home/batman/svn/paper_with_robin

再回到本機端 project 之下,將其 import 到遠端:

cd /home/batman/my_paper
svn import . svn+ssh://batman@workstation:/home/batman/svn/paper_with_robin

這樣 robin 就可以用以下指令 下載一份並與你協同作業了。

svn co svn+ssh://robin@workstation:/home/batman/svn/paper_with_robin

Tags: , ,

. 09 Jul 08 | Research | Comments (0)