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.

半瓶醋的 C++ 教學(第六章):開源流萬世一系不敗經典 Hello World 實作

基本上到目前為止好像都在閒聊(汗),還是讓我們進入實際操作吧,在這邊我們寫一支編程界的經典 Hello World 出來。

Hello World 本質上是一支連玩具都稱不上的程式,但透過寫作,她可以讓我們了解編程的最基本流程,並確認環境設定無誤。我記得自己剛開始編程的時候對環境的設定反而比較苦手,不知道什麼部分該用什麼,不然就是知道該用什麼卻必須一直辜狗;相較之下,語法的部分一開始超簡單,看看書沒兩下就懂了,所以在這邊,如同第零章所述,我想補的是一般書籍的不足,語法部分就請大家在第一章的推薦書籍之中自修一下。

首先在第四章我們提過了編程環境的選擇,當中我推薦用開源環境來編程,所以在這邊我介紹的是開源流的編程方式,M$ 流的也不難,基本上就是想辦法搞到一片 VC(到底有多少人用正版的?科科),打上 Hello World 再按某個鈕就好了,非常簡單,兩者的差異大致上就像自排車手排車一樣。自排車好開,但要充份享受駕馭極速機器的快感唯有手排,沒有人開藍寶基尼在開自排的吧?

OK,咱們開始吧。

Tags: , , , , , , ,

. 14 Oct 08 | C++ | Comments (0)

Ubuntu 下 rmvb 沒聲音

有時候播 rmvb 會沒聲音,不需要灌 plugin,只要調一下參數就可以。編輯 ~/.xine/catalog.cache,找到 [/usr/lib/xine/plugins/1.1.4/xineplug_decode_real_audio.so] 這段,將 decoder_priority 調高為 10 即可:

[/usr/lib/xine/plugins/1.1.4/xineplug_decode_real_audio.so]
size=11300
mtime=1171041406
type=131
api=15
id=realadec
version=10104
supported_types=52494336 52559872 52756480
decoder_priority=10

參考資料:
argh no sound in rmvb @ Ubuntu Forums

Tags: , , ,

. 11 Oct 08 | Ubuntu | Comments (0)

Linux Find

  1. recursively 殺掉同樣副檔名的檔案(以 jpg 為例)
    find -name “*.jpg” -exec rm {} \;


    -exec
    找到以後對這些檔案執行的指令
    {}
    會被代換作檔名
    \;
    表 -exec 指令結束,為特殊字元,故需 back slash

  2. recursively 殺掉除某副檔名以外的檔案(以 c, cpp, h 為例)
    find ! -regex ‘.*\.\(c\|h\|cpp\) -exec rm {} \;


    !
    表反向選擇

有點小複雜但是相當強大。身為一位巫師應該經常將自動化放在心裡。而這點正是 Linux 優越的地方。附上連結一枚:
Using the find command

Tags: ,

. 21 Sep 08 | Linux | Comments (2)

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)

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)

rsync 用於遠端上傳與備份

雖然應該不少人知道,rsync 可以用在遠端工作站等等之上(那個 r 本來就是 remote 的意思),不過還是要推廣一下,不管跟 crontab 搭配作備份,或是拿來上傳下載東西都滿好用的。若要用於遠端站台,指令形如下式:

rsync -av –delete -e ssh Test/rsync/ a_user@a_workstation.csie.ntu.edu.tw:~/Test/rsync

站台後接冒號,與 scp 等相同,但與 svn 不同,我自己有時候會不小心忘掉。比較一下,svn 的 remote version 長這樣:

svn co svn+ssh://a_user@a_workstation.csie.ntu.edu.tw/svn/libmatting

-a 這參數似乎是個定番,查 man 查不出個所以然,寫得有些籠統…–delete 的意思是說如果有什麼檔案在 target 有卻沒出現在 source 中的就殺掉,如此可以作到呆呆拖拉法所作不到的真正的完全同步。算是 command line 環境優雅又強大的一個實例。

Tags: , , ,

. 19 Jun 08 | Linux | Comments (0)

Command Line Pizza Ordering Program

在 digg 上看到的,還滿有趣,放上來分享一下。

有 .deb 檔嗎?有的話還滿想裝一下的。 XD

Tags: , , ,

. 14 Jun 08 | Geek | Comments (0)

在 Vim 環境下去掉惱人的 ^M

如果檔案來源是 Windows 系 OS

用 Vim 去開的時候常常會在行尾看到 ^M 之類的惱人符號

要把他砍掉就下這個指令就可以了
:%s/^M$//g
(雖然通常我是 ggVG 先全選,再按冒號就會自動套用在這全選的部分了)

要注意的是 ^M 的輸入方式是 ctrl + v、ctrl 未放開時再按 m(這狀況下小寫即可)
而不是鍵盤上那個 ^(carrot)

參考資料:
Vim Online: Tip #26: Getting rid of ^M - mixing dos and unix

Tags: ,

. 09 Jun 08 | Vim | Comments (0)

Video to Images

因為研究上的需要,所以想要把影片的各個 frame 拆解為 image。

在 Linux 上這項工作意外的簡單,不需要額外安裝些什麼,MPlayer 本身就可以作這件事了,指令形如下式:

mplayer -vo jpeg -nosound Andreas.avi

Tags: , ,

. 09 Jun 08 | Linux | Comment (1)