總網頁瀏覽量

咕狗大神

2012年8月18日 星期六

Regular Expression

摘錄 wikipedia 正規(常規)表示式: http://zh.wikipedia.org/wiki/Regular_Expression

最近剛好要用到文字的 parsing ,所以複習一下,也順便作個筆記,以免再度失憶。

幾個比較常用的如下:


符號 意義 範例
. 任意字元 regex =@"^thank."; regex.match("thank u"); regex.match("thankx");
? 出現零次或一次 regex =@"^thankx?"; regex.match("thank u"); regex.match("thankx");
* 重複出現任意次數(含不出現) regex =@"^thankx*"; regex.match("thank u"); regex.match("thankxxxxxx");
+ 至少重複出現一次 regex =@"^thankx+"; regex.match("thankx"); regex.match("thankx");
{n} 必須重複出現n次 regex =@"^thankx{3}"; regex.match("thankxxx");
{n,} 至少重複出現n次 regex =@"^thankx{3,}"; regex.match("thankxxx"); regex.match("thankxxxxxx");
{n,m} 至少重複出現n次,但不超過m次 regex =@"^thankx{3, 5}"; regex.match("thankxxx"); regex.match("thankxxxxx");
[^...] 中括弧裡面的字元以外 regex =@"^th[^iou]nk"; regex.match("thank"); regex.match("thenk");
其他的有用到再寫。

2012年7月10日 星期二

布施

親愛的老天爺,請您賜給我一顆寬容的心,讓我可以看到事情的光明面;賜給我布施的能力,讓我可以幫助所有願意接受幫助的人;賜給我笑容滿面的每一天,讓我可以感染我身邊所有的人;感恩~

2012年5月23日 星期三

人生奇景六:舉辦與辦理,兩小時

『舉辦』跟『辦理』這兩個詞有什麼不同嗎?

在這兩年的工作裡,我最常遇到的狀況,就是組長招集所有組員開會,討論投影片的標題,該用『舉辦』還是『辦理』,光是這兩個詞就會用掉兩個小時。

諸如此類的還有很多,像是:『發展』跟『開發』、『推動』跟『推廣』等

每當開會為了討論這些名詞,我都忍不住想要破口大罵

依我看,這個單位不是什麼產業推動,而是心靈推動、心靈改革,經歷過這些事情以後,還有什麼事情會讓我生氣呢?舉辦&辦理,so what!

下一站,衝啊

今天我終於離開了現在的單位,正式的離職生效,再也不用去管那些虛假吹牛拍馬屁的規劃,再也不用忍受組長莫名其妙的幻想,再也不用吃下無窮無盡隨手丟棄的大便,我真是開心啊~

來這個單位兩年,感覺就好像在當兵,每個人都是長官,每個長官的話都要聽,每個長官隨口亂講的都是命令,每個命令都是任務。

我還記得我來面試的那天,我的主任跟我說,產業推動是需要熱情的,不是為了賺錢,而是要讓整個產業都賺錢。但是我來這裡,卻發現根本不是這麼一回事,哪裡有產業熱情呢?都是為了民間收入而揮霍人力,用很便宜的國防役員工,去幫業界客制化軟體,然後吹噓自己做的有多好,結果得到的都是負面評價。

來這裡最大的成就與收穫,就是參加國際數位出版論壇,共同參與制定了 epub 3.0 的國際標準。但是很可笑的是,這樣的成就,在工業局以及單位主管的眼裡,竟然是不屑一顧、一文不值的。

如果我們國家的資訊,需要如此依賴這個單位,那我真的認為沒救了。當然,我認為主導資訊發展的工業局,應該要負最大的責任。

無論如何,這一切都結束了,我唯一要做的,就是儘快回憶起我塵封已久的技術能量,拼命的往前衝~

這兩年,就當作我身為一個技術研發工程師,留職停薪義務幫忙資訊產業進行數位出版的推動吧。

掰掰囉,這帖令我難以忍受的膏藥。

人生奇景五:比公家機關還要官僚

說到離職,我想天底下大概沒有哪個單位比我這間還複雜吧,而最讓我印象深刻的,是我離職的交接程序單,為了一個簽名,等了差不多兩天。

話說當天,我把資料都跑完了,打個電話問主任的秘書(你沒看錯,我這個單位,主任就有秘書可以用),問他方不方便去找主任簽名。秘書就說不方便,要簽名就把單子放他那邊,他會統一給主任簽名,我心想也好,省得跟主任打照面。

結果一大早拿過去,等到下午四點還沒消息,我就跑去問秘書,秘書就說主任很忙,整天都在開會,簽好了會叫我。就這樣,那天直到下班我都沒拿到簽名。

隔天早上,秘書通知我去拿單,我以為簽好了,結果發現沒簽。秘書說,主任要求我組長也要簽名,他才願意簽。這有點龜毛ㄟ,按照規定,所內的流程要組長跟主任簽名,會內的流程只要主任跟所長的簽名,加上我組長出國,我根本拿不到他簽名。我問秘書,請組長代理人可不可以,秘書說不行,一定要組長本人。我說組長回國,我都已經離職好幾天了,這樣我無法往下跑程序,會影響到我離職。秘書說要離職就離職阿,流程不會找同仁事後跑完就好了。馬的~這真的不是人話,哪有人離職日當天無法跑完行程,還要找人事後才跑?

回到座位我超級沮喪,找人去跟秘書溝通,秘書堅持就是要我組長簽名,誰代簽都不行。我實在很火大,覺得這太過分了,我幾乎打算去找勞委會申訴。後來我去問所長秘書,所長秘書打電話過去跟對方盧了一陣子,對方才鬆口說找組長代理人簽名也可以。

當然,這次又等了大半天,直到下午三點左右才簽完。

結束了這兩年,我忽然覺得跟當兵很像,每天都作一些自己以為對國家社會有貢獻的事情,結果事後才發現,政府跟主管根本不在乎產業發展,只在乎有沒有亮點可以上報上新聞,就這樣數饅頭過日子,一不小心,日子也很接近退伍/離職了。

2012年5月21日 星期一

人生奇景四:跑不完的離職流程

我從來沒想過,一個離職的流程會需要跑滿一整個月,這大概只有我這份神奇的工作單位才辦得到吧!

從我利用電子簽章送出我的離職簽呈開始,隔天我的直屬主管就簽過了,然後等了一個禮拜,怎麼沒有進一步消息呢?我開始到處打聽,才知道原來我的上上級主管要先跟我約談過,才會簽章。好吧!那就安排一下時間吧,結果這一安排,又過了好幾天。

我上上級主管問我,怎麼剛來就要走,來滿一年沒有。我心想,你連我來多久都不知道,那還約談什麼呢?然後硬撐問了一些問題,撐滿五分鐘,才算約談結束。

約談結束我的簽呈還是繼續停留在他身上,我開始到處打聽,反正就是他很忙啦~請假啦~沒進辦公室啦~有的沒的一大堆理由,這時候離簽出辭呈已經超過兩週了。

最後直到簽出滿半個月的時候,我那位連我來多久都不知道的上上級主管才簽過。這中間又發生一件插曲,我們組被調換中心,所以之前那位上上級主管簽的不算數,要新的上上級主管簽名才算數,哇哩勒,又拖了我好幾天,然後才送到所長手上。

總之用了三週,電子流程才跑完。還沒結束喔~電子流程跑完才能開始跑紙本流程,然後一個一個的業務負責人蓋章,蓋完以後,咦~怎麼又是上上級主管以及所長,天阿~又得重新等他們兩位老人家有空閒,這時候已經是最後三天了。

等所長簽完,不好意思,我們還有更高層的單位,所以還得帶著這一大堆的簽章跟文件,親自跑一趟本部,才能完全跑完。算一算,最順利的狀況,就是我離職當天可以跑完所有的程序,也就是31天整。

我一天也沒有浪費的狀態下,用了31天才跑完所有流程,這樣的單位,真的是匪夷所思阿~

2012年5月1日 星期二

文明(Civilization by Niall Ferguson)

最近比較有空了,買了一些書來看。這本「文明」是我在逛何嘉仁書局時,無意間看到的,引起我興趣的是這個醒目的大標「決定人類走向的六大殺手級Apps」,所以就順手買來看。

這六大殺手級應用軟體分別為:

  1. 競爭(Competition)
  2. 科學(Science)
  3. 財產權(Property)
  4. 西方醫學(Medicine)
  5. 消費文化(Consumerism)
  6. 工作倫理(Work)
說真的,整本書嚴格講起來是一部西方文明發展史,有點硬,但是看得我血脈賁張。

作者提到西方文明可以凌駕好幾個世紀,主要因為競爭,這點我完全贊同。在中國的歷史上(不好意思,從小就學中國歷史,只能拿這個舉例),文明進展最快最發達的兩個時代,分別是春秋戰國,以及後漢三國。前者是思想的諸子百家奔放時代,儒、法、墨、道、商、農、兵、醫、方士...etc,令人目不暇給;而後者是科技(特別是軍事)的發達到了鼎盛時期,各種兵器、大型攻城車、投石器、連努等的發明運用,各種兵法的實際演練,各種陰陽謀略的運作等,可以說整個中國的文明幾乎在這一千年之中達到鼎盛。這一切都是拜競爭所賜。

而科學呢?說真的,中國老愛說甚麼都是他們發明的,仔細想一想,大多數的科學發明,時間點其實也是在春秋戰國一直到漢朝末年。宋朝當然也是一個重要的科技與醫學發達的朝代,但是我個人認為,宋朝是少數發明,多數應用,像是印刷術的發明,加速了古代典籍的重製,才導致宋朝的中醫再度復興。

作者提到中國沒落的原因,我非常的認同。而作者也直言中國很可能會是二十一世紀,取代西方文明的一個重要的新文明。這點與小時候念到的「二十一世紀必定是中國人的世紀」有呼應到。不過作者是有實際數據跟歷史推論了,不像小時候是唬爛的。

講難聽一點,我覺得東方文明的沒落,就在於漢朝董仲舒的獨尊儒術,罷黜百家。我覺得儒家不是不好,而是太沒力道,加上後世的理學派亂搞,把儒家變得有點像一個宗教,給一大堆的教條,才會讓東方文明沒落的。

總之,這是一本好書,我很喜歡。

2012年4月27日 星期五

人生奇景三:甚麼東西都可以包成 App

在這份工作裡面,我真的看到很多不知道該崇拜還是該嘆氣的事情。例如這個「可以把任何東西都轉成Apps的加工廠」就是一個例子。

說真的,自從前年年底,某位本單位的平行單位的主任,向工業局長官報告市場趨勢,說了「只要把LCD用黑白呈現,就跟電子紙一樣,所以電子紙已死,iPad才是未來的趨勢」,從此台灣政府就變成 Apple 免費的廣宣以及 Apps 全世界最廉價的卻最努力的推動者。

我看我還是少講一點,否則大家都會猜到我講的是哪間公司的哪個部門了。

2012年4月26日 星期四

Ubuntu 12.04 LTS 終於釋出

12.04 LTS 的釋出,也代表我這份工作兩年了

明天有空要來好好的玩一玩,聽說有不少抱怨,相信也有很多改善

2012年4月24日 星期二

人生奇景之二:全世界第六顆排版引擎

大家都知道,世界上有五顆排版引擎,分別是 Webkit(Safari & chrome), Gecko(Firefox), Opera, Adobe, 以及 Trident(IE),那麼第六顆是甚麼呢?

話說我人生第二份工作,來報到不久,為了要去 IDPF 把直排推進去當標準,所以大量的 trace Webkit source code。本單位某子單位聽到了,就來找我,希望我幫他們找出 Webkit 運作的原理。菜就罪該萬死阿,這個道理我懂,所以就拼命地找資料看 source code,整理了一份投影片做報告。

結果報告完,子單位人員說沒感覺,然後說給我一個簡單的題目,怎麼樣畫表格(<tb>, <tr>, ...)。我問說要做什麼,他們說要用在排版引擎上面,我心裡立刻起了很崇高的敬意。根據我 trace Webkit source code ,我發現排版引擎的難度真的超高,沒想到我竟然來到這麼一個技術超強的單位,自己在開發排版引擎,這可得好好學習啦。

我就白目的問:「請問一下,你們怎麼去 parsing DOM tree?」回答我的是該子單位老大:「我們不用 DOM,DOM太慢了,我們用另外一個,ㄟ~忽然想不起來了,你應該知道吧~就那個啊」指著我。

我有點懷疑的問說:「是 SAX 嗎?」「對對,就是 SAX,SAX比較快」

這下子我真的摸不著腦袋了,SAX要怎麼繪製出版面呢?SAX也沒有比DOM快啊?難道,難道,難道他們只是替代某些標籤而已嗎?

「請教一下,排版引擎已經做到甚麼程度了?」我依然白目地詢問。「可以吃 <audio> 跟 <video> 了,還有基本的排版如 <p>, <b>, <a>, ...」這麼厲害,已經可以做到 html5 的影音了耶,可是我還是想不通ㄟ。

「那再請教一下,怎麼去做 <audio> 的播放?」我傻傻地繼續問。「就呼叫 API 啊」不屑的回答。「然後呢?」我還是很笨。「丟給 Webview 作呈現啊」有點不耐煩了。

挖靠~原來如此。太了不起了,這個全世界的第六顆排版引擎,原來是 preprocessor,所以 <audio> & <video> 還有 SAX 就豁然開朗了。用 SAX 去把這兩個標籤掃出來,然後用 <obj> 的方式改寫成 html4,再丟給 Webview ( Webkit 的 android 版)就好了。

我的程度真的是差太遠了

人生奇景一:比 EPUB3 還棒的格式

在我的人生當中,有幸遇到了這樣的一份工作,看到了一些以前看不到的事情。現在我離職了,我想應該把一些有趣的事情寫下來,以免我老了忘記了,因為這是世界奇景。

奇景之一,就是本單位的某個子單位,宣稱發明了比 EPUB 3 還棒的格式。怎麼做呢?就是先開一個目錄,然後把內容檔案放在目錄之中,當然那些圖片、聲音、影像可以另外開子目錄,但是內容本身的 html 檔案,必須放在這個目錄中,檔名用 001.html, 002.html, ... 依序排下去。

所以呢,只要打開某個目錄的 001.html,下一頁就是 002.html, 依此類推

為什麼說比 EPUB 3 還棒呢?因為「 EPUB 3 制定的那麼複雜,根本實做不出來,這樣的格式,甚麼機器都讀的到」

神奇嗎?還有很多這類的故事喔,只要心情不好,我就來爆料。

每個奇景都是造就我離職的一根稻草。

2012年4月19日 星期四

qt 4.8.1 播放 mp4

以下是我一個很佩服的高手 leo 的步驟, po 出來跟大家分享:

1. Download "qt-everywhere-opensource-src-4.8.1.zip" from official website.
2. Unzip it and then enter the installation location, e.g. C:\Qt\4.8.1
3. Type "configure -opensource -debug-and-release", "nmake"

PS. What if there's a error happened in this file, "DefaultLocalizationStrategy.cpp",
   just go to the error line (line 327) and fix it by modifying the capital character error from " to \".
   (This error will just happen in a XP system.)

4. Add this value inside the user variable of environment variables, QTDIR, which its value is "C:\Qt\4.8.1",
  and then append this value into system variable, Path, value is "C:\Qt\4.8.1\bin".
5. Download "qt-mobility-opensource-src-1.2.0.zip" from official website.
6. Unzip it and then enter the installation location, e.g. C:\QtMobility\qt-mobility-opensource-src-1.2.0
7. Type "configure -prefix C:\QtMobility -modules sensors" and then "nmake", "nmake install"
8. Type "configure -prefix C:\QtMobility -modules multimedia" and then "nmake", "nmake install"
9. Copy the files "QtMultimediaKit1.dll" and "QtSensors1.dll" just were made by step 7 & 8,
  into this location "C:\Qt\4.8.1\qt-everywhere-opensource-src-4.8.1\demos\browser\release".
10. run browser.exe and throw a html file containing <video> tag of html5 to it. It should play it successfully,
   by the way, you should be able to see a play/pause button, the seeking bar and audio volume control button, that is
   because your qtwebkit can recognize the video tag finanlly.
11. What if it can't be played, maybe your pc hasn't been installed the correct codec well,
   check your pc whether your pc has been installed the correct codec or not, maybe you can
   go the website "http://www.free-codecs.com/" to download a suitable codec for directshow to play.

2012年4月15日 星期日

好像....過關了

面談兩次,感覺應該是很有希望才是。

2012年4月3日 星期二

QT 4.8.1 出來了

等了很久,Qt 4.8.1 總算出來了,第一個要測試的,就是到底有沒有把 audio 跟 video 給改回來。

結果...無言

2012年3月30日 星期五

OSX 4.3.1 + cmake 2.8.7 + Lion

xcode-select -switch /Applications/Xcode.app/Contents/Developer 


cmake -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++


cmake -DCMAKE_OSX_SYSROOT:PATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.6.sdk/ 


CMAKE_OSX_ARCHITECTURES = x86_64


ps. Lion 只有支援 64 位元程式碼,所以如果加上 i386 就會錯誤,謹記謹記

2012年3月9日 星期五

現在的工作心態~無窮迴圈

投入心血->被當垃圾->沮喪->想走了->看開一點->投入心血->被當垃圾->沮喪->想走了->看開一點...

唉~將帥無能,累死三軍。古人誠不欺我!

下一份工作應該還是回去寫程式算了,雖然寫程式沒有前途,至少我有興趣跟熱忱,像現在這樣不死不活的,真的很難受。

我現在都開始在寫小說度日了,如果拖太久還沒離開,應該是小說寫得很順利吧。

Qt4.8 少了 QtMultimediaKit

2012.03.15
經過測試,答案是:不行

最近有人問我關於 Qt 4.8 當中的 QtWebKit 2.2 無法支援 <audio> 以及 <video> 這兩個標籤的解法。說真的,我自己覺得很丟臉,在這份工作當中,我慢慢地失去了身為技術人該有的尊嚴,逐漸被那些虛無飄渺,巫山小路用的亮點跟癌遞兒所淹沒。這個問題早在去年底我就碰觸了,但是當時無解,我也就沒有繼續追下去。直到這次被問起,才喚起我一絲絲的愧疚與回憶。

當然,我唯一能做的就是找 Google ,很幸運的,這個問題已經有人找出答案了,就是 Qt4.8 捨棄(Deprecate)了 Phonon  模組,改用 QtMultimediaKit 這個模組,來處理 QtWebkit 2.2 所需要的影音處理。但是詭異的是,Qt 4.8 當中竟然沒有包含這個模組,這真是見鬼了,那這個模組跑到哪裡去了呢?原來這個模組放在 Qt-Mobility 裡面,可能因為跟 Qt 4.8 尚未整合完畢,所以還沒有來得及放進去。

所以看起來大家的想法也都一樣,先從 Qt-Mobility 裏頭把 QtMultimediaKit 給 compile 出來。之後重新 compile Qt 4.8 但是要記得使用 -no-webkit 這個參數。最後,把 QtWebKit 2.2 原始碼抓下來,用我們 compile 出來的客製版 Qt4.8 來 compile QtWebkit 2.2,這樣產生出來的 qtwebkit4.dll(so) 就應該重新支援 <audio> 以及 <video> 了。

有空才來 try,不過以目前本組的慘狀,我想大概時間還是得被組長揮霍在巫山的小路上吧。

我真的很想仰天大罵:『eo4』

2012年3月5日 星期一

完全不知道應該做什麼

今年的計畫開始之後,我們這組就一直被高層質疑。說起來很奇怪,這些高層就是當初在計畫上面簽名的同一批人,但是現在帶頭回來質疑的,依然是這批人。

這第二份工作,從我剛來時的熱情投入,到現在我根本是把工作純粹當工作看,還不到兩年。這間公司其實很奇怪,該做的都不做,打著產業推動的名號,其實做的都是口號,喔~應該說「亮點」。當你想要實在的做一個有用的技術或服務的時候,高層就問你,這麼做的急迫性是什麼,政府買單了嗎?對公司的好處是什麼?廠商有誰會去營運?

在這麼一個充斥著各式各樣的「雲」的資訊時代,大家真正需要以及在乎的,是到底帶來什麼好處與效益。每間廠商都只想建機房,然後當包租公。偏偏這些機房,要水沒水、要電沒電,要洗個澡還要加租。那到底是在推動雲的發展,還是在阻礙呢?

說實話,我只知道螢幕有「亮點」就要去退貨。

2012年1月24日 星期二

Ubuntu 下搜尋需要安裝的 Library

apt-cache search 搜尋需要的 Library

2012年1月20日 星期五

更新 grub 開機選單

gksudo update-grub

2012年1月17日 星期二

編譯支援 audio & video 的 QtWebKit

需要幾個 lib =>
=== libxml2 ===
> wget ftp://xmlsoft.org/libxml2/libxml2-sources-2.7.8.tar.gz
> tar -xvzf libxml2-sources-2.7.8.tar.gz
> cd libxml2-2.7.8
> ./configure --prefix=/home/work/dist --without-python
> make
> make install

=== zlib ===
> wget http://www.zlib.net/zlib-1.2.5.tar.gz
> tar -xvzf zlib-1.2.3.tar.gz
> cd zlib-1.2.3.tar.gz
> ./configure --prefix=/home/work/dist
> make
> make install

=== glib ===


> apt-get install libffi-dev, gettext
> tar -xvjf glib2.0_2.30.1.tar.bz2
> cd glib2.0_2.30.1
>./configure --prefix=/home/work/dist CFLAGS="-I/home/work/dist/include -L/home/work/dist/lib" glib_cv_stack_grows=no glib_cv_uscore=no ac_cv_func_posix_getpwuid_r=yes ac_cv_func_posix_getgrgid_r=yes ac_cv_lib_rt_clock_gettime=no glib_cv_monotonic_clock=yes
> make
> make install  


=== gstreamer ===

  1. 下載(http://gstreamer.freedesktop.org/src/gstreamer/)gstreamer-0.10.35.tar.gz
> sudo apt-get install bison flex
> export PKG_CONFIG_PATH=/home/work/dist/lib/pkgconfig
> ./configure --prefix=/home/work/dist CFLAGS=-I/home/work/dist/include --disable-registry  --disable-gtk-doc ac_cv_func_register_printf_function=no --disable-tests --disable-valgrind --disable-debug --disable-gst-debug 
> make && make install  


== gst plugin base ===

  1. 下载(http://gstreamer.freedesktop.org/src/gst-plugins-base/)gst-plugins-base-0.10.35.tar.gz
> export PKG_CONFIG_PATH=/home/work/dist/lib/pkgconfig
> ./configure --prefix=/home/work/dist CFLAGS=-I/home/work/dist/include --disable-valgrind --disable-gnome_vfs --disable-alsa  --disable-pango --disable-theora --disable-examples
> make && make install  

=== qt ===

  1. 先裝 libX11-dev、libXext-dev、libXtst-dev、libqglviewer-dev、libmysql++-dev、g++ 開發工具包(sudo apt-get install ....)
  2. 修改 configure,加上"PKG_CONFIG_PATH=/home/work/dist/lib/pkgconfig"
  3. 記得在 configure 的眾多參數當中,加上 -force-pkg-config
  4. 在 qt-XXX-4.8.0/src/3party/webkit/Source/WebKit.pro 加上 LIBS += -L/home/work/dist/lib
  5. 大概建議用這樣的參數

> export PKG_CONFIG_PATH=/home/work/dist/lib/pkgconfig
> sudo ./configure -qt-libmng -qt-zlib -qt-libtiff -qt-sql-mysql -qt-libpng -qt-libjpeg -no-qt3support -webkit -force-pkg-config -opengl -prefix /opt/qt-4.8.0 -nomake examples -nomake demos -nomake docs

2012年1月11日 星期三

在 Mac 上build Qt

./configure -sdk /Developer/SDKs/MacOSX10.6.sdk -opensource -universal

2012年1月9日 星期一

很多東西不是用來賣的

賣而不賣、不賣是賣

舉個例子,如果 Google 當初設定的目標,是搜尋費用,那麼 Google 應該只能成為歷史名詞