Wednesday, September 19, 2007

funP no iframe userscript

其實我不太在意自己的網站被 funP 給"快看",但 funP 的"快看"真的影響到我使用的流程了。

我雖然沒在用 funP,但我會訂閱他的熱門書籤。幾個書籤網站輸出的 feed,del.icio.us 最單純,就是單純給標題,點選後直接連至其原始網頁。而另一個書籤網站黑米,其輸出的 feed 有標題還有一些引述內容,還有連至黑米對該書籤的展示頁,點選標題會連至原始網頁,算是最方便的呈現方式。而 funP 的做法是最麻煩的,其輸出的 feed 強制使用者必需連至 funP 對該書籤的展示頁,而無法直接連至我想看到的內容,而連至 funP 後,也強制使用他的 "快看" 功能 (最近多加了一個開啟至新視窗的功能,但多開一個視窗也是很糟糕的做法),但使用 "快看" 對於我使用網站的習慣的確有很大的影響。

或許對於喜歡 funP,習慣使用 funP 的人,快看是很方便的功能,但對不是 funP 註冊使用者而言,進入快看會影響要後續收入 funP 以外書籤網站的動作 (因為會收錄到 funP 的快看頁網址,而我想這不是大多數人想要的行為)。雖然快看頁上面有個原始網頁的連結,但一來這又會多一次網頁跳轉,二來如果一開始沒有點選上方的原始網頁連結離開快看,而繼續在快看頁點選網站的其他連結,則不論是瀏覽器本身的地址欄或是上方的原始網頁連結都不會隨之改變,而當在快看頁中多次跳轉後想要收錄書籤時,就會沒有直覺的方法知道此時的原始網址,點上方的原始網址會跳至一開始進入快看時的網頁。這真的是違反使用習慣的行為。

funP 本身還有許多屬於他的創意,"快看"這種引起這麼多爭議的功能,我實在不覺得是值得他堅持並成為自己的特色。或許一個折衷的方式就是註冊使用者可以選擇並預設使用快看的功能,對一般未註冊使用者或許預設不使用,或是讓使用者可以關閉後記錄在 cookie,之後就可以不使用快看功能了。

回到標題,單純 client 的東西用 greasemonkey 可以做任何想做的事情。所以一個 funP no iframe userscript 對我而言真是好物,可以直接按這裡安裝(當然你要有安裝 greasemonkey),給對 funP 有相同困擾的人。

隨便一題,最近發現 ie 也可以使用 greasemonkey 的功能,叫 Turnabout (記得要裝 advanced 版,才能自行加入 script),幾乎可以直接用 greasemonkey 的 userscript,而上述的那個 userscript 也可以在 ie 上使用,真是好物,找時間來多研究一下再來介紹。

Monday, September 17, 2007

flickr gmap show 近況

好久沒有提到之前寫的工具 flickr gmap show (fgs) 的進度了,以前找到我 blog 的人幾乎都是衝著 java 而來的,而現在變成都是衝著 flickr 而來的。

基本上現在的 fgs 已經和剛開始時差很多了,一開始我的目標是弄個工具可以讓人內嵌在網頁中使用,而現在的 fgs 已經有了 gadget 版本 (也就是可以嵌在 iGoogle 中使用),mapplet 版 (內嵌在 google map 使用),greasemokey 版 (配合 greasemokey 直接在 flickr 內使用,目標是取代 flickr 內 yahoo!Map 的功能),這幾個版本雖然外表看起來差不多,但其實實作方式是差很多的,所以要維護這幾個版本並不容易,而目前我的做法是以 greasemonkey 版本為主 (因為覺得這個最好用)。至於一開始的目標,也就是內嵌在一般網頁中使用的用法,其實也有一些使用,有興趣的話可以參考這個討論串,或是這個這個例子,簡單的說就是用 iframe 做內嵌,指定 photoset id,也可以指定 GPX track 的 url ,就可以用 fgs style + GPS track 的方式來顯示在網頁中。

jQuery 似乎已經逐漸變為 javascript library 的顯學了,fgs 雖然有用 jQuery,但目前並沒有充分的利用,而且試了一下,用 jQuery 1.2 會爛掉 -_-,所以這些問題解決一下,把程式整理一下,再看看能不能再更新版本吧。

Tuesday, September 11, 2007

C++ 是個糟糕的語言

標題殺人法 :)

前幾天,在 gmane.comp.version-control.git 上暴發了一串有關 C++ vs. C 的爭議,詳細的前因後果可以看下面幾篇文章,簡單的說明就是有個叫 Dmitry Kakurin 的傢伙用力的批評 Linus Torvalds 所開發的 Git 居然是用純 C 寫的,而不是用 C++ 寫的,而引發了 Linus Torvalds 更用力的反擊,Linus Torvalds 說 C++ 是個糟糕的語言,會導致非常糟糕的設計。

Linux之父炮轰C++:糟糕程序员的垃圾语言
Linux之父话糙理不糙
C 的回归
用C设计,用C++编码

先不談 C 和 C++ 的優劣,讓人覺得有點悻悻然的是,C++ 果然是退流行了啊,這麼火爆的話題居然沒看到國內有多少的討論,雖然本身是個吵到爛,會讓人討厭的話題,但這麼大牌的人物,用這麼明確的說法攻擊 C++,光是吵架就應該吵翻天了吧。“全世界都在學 Java/Ruby/Python/PHP/Ajax/JavaScript ... 話”,現在好像一堆人只學過 Java 沒學過 C++ 的,那個學程式就是學 C/C++ 的時代真的是過去了。

不過 C++ 的沒落不是沒有原因的。C++ 的複雜度真是夠瞧的,連語言設計者都說他不期待哪個人可以完全了解 C++,在這種複雜度之下,居然稱不上是個夠現代化的語言。C++ 沒有垃圾回收,沒有執行緒支援,沒有二進位模組標準,甚至在標準化這麼久了之後,仍然沒有一個編譯器可以完全符合標準(當然,上面這些有些不是不能也,是不為也)。但 C++ 也是個最豐富的語言,可以完全用程序導向來寫程式,可以用基本的物件來編程,可以用物件導向來編程,甚至導入 template 後,居然一堆人在用類似 functional programming 的形式來編程,尤其是 template,用到一些奇技淫巧時,根本就是在考驗大家的智慧。在 C++ 是主流語言的時代時,大家沒有選擇,高手以鑽研細節為樂,庸手以避開陷阱為苦。當 Java 出現後,大家知道不用考慮得太多也可以寫出程式,當語言沒什麼值得探究後,就轉移到較高層次的爭論,像是設計模式,敏捷編程等。所以大概經過了一代人不需要知道什麼是指標,不需要考慮 memory leakage,字串可以直接相加,像是執行緒,網路等都是隨手可用。有人也對這個趨勢提出質疑,但大勢是無可逆轉的,能改變的只有 C++ 自己。在即將推出的最新標準 (C++0x) 中,加入像是 Concept, 垃圾回收等機制,但更多簡潔漂亮,特定功能的語言不斷推出,C++ 的前景真是不看好啊。有關 C++0x 可以看這幾篇文章。嗯,又更加豐富了 :)

說了這麼多,但其實複雜度不是 Linus Torvalds 反對 C++ 的理由。就說嘛,這種有名的大咖怎麼會說 "C++ 太難了不好用" 這種漏氣話呢。Linus Torvalds 是說 C++ 是個帶有"心理(mental)包袱"的語言,而這會導致設計上的問題。“語言決定思想”這件事引出了各種不同的語言設計,不同的語言影響了編程者的心態,C 會如此根本的影響編程,是因為 C 的風格就是如此貼近機器,幾乎是各種機器上都有的編程語言,語言本身也十分容易掌握,語言中提供的一切都是十分明確而不含糊。不過 C 提供給設計方面的工具就相對少得多了,大致上都是以函式為主體,通常較大規模的程式可能會發展出一套 macro 的用法,算是補強設計機制的手段吧。為什麼 C 語言相對來說貧乏的設計機制反而會被(某些人)認為是比 C++ 的功能繁花似錦更有設計上的優勢呢?我的看法是,用 C++ 的人習慣把抽象化的層次提得太高了,這通常反應著除了核心的功能外,大家也常把 C++ 拿來當應用程式開發用,而用 C++ 堆砌起高聳的抽象化大樓。當開始在編程時一切都很順手,你面對要解決的問題,在心中架構起自己的抽象化。但當需求改變,或是當另一個人在面對你的程式時,就可能是有另一套抽象化,或是你原本的抽象化已被抽象滲漏法則給摧毀,此時要去變動原本的設計就談何容易了。當然這也代表著原本的設計不夠周詳,但一個完整且可塑性高的設計十分困難,而且一開始就採用如此設定反而有過度設計之嫌,所以 C++ 變成不斷的堆倒和重建的過程。至於在 C 中因為比較缺少抽象化機制,反而會傾向於用較平實的形式的設計,對於熟悉的人而且反而是比較能快速上手且經得起變化的。

不過啊,這真的是有底氣的人才能達到的境界,我這種庸才,既無法把 C 用得出神入化,也追不上 C++ 華麗的步伐,可能像 Java 這種的才敢說比較熟悉吧 :)

Friday, September 7, 2007

Google Spreadsheets importHtml

Google Reader 最近一次更新讓許多人驚豔,這次加入的 search 真是千呼萬喚始出來,而且 Google 也是一推出就讓人滿意,速度快而且完整。Google Reader 的設計會讓人不知不覺就加了太多的 feeds 進去(我是設定成只顯示有新的 feeds 和只顯示新的 items),這樣的設計會讓人順手就加新的 feeds 而不自覺(已經 360+ 了),深深感覺排山倒海的資訊真的太多了,不知道是該習慣這種情況還是會有新的方法來減輕這種情況(之前看到有人提出 item 評分機制,算是個還不太成功的嘗試吧)。Google Reader 這次的更新讓我們只要記得曾經看過,加上幾個關鍵字,就可以找出之前匆匆掃過的東西,所以這種 Reader 的工具果然是要加上 search 才算完整。

不過有個 Google Spreadsheets 的更新到是比較少人提到,但對我而言卻是重要的更新。我總覺得我玩東西總是玩到偏門上去,玩 flickr 結果也沒什麼新照片放上去,都是在寫程式結合 Google Map,玩股票結果沒學到什麼技術,都在玩用程式來看股票。最近看到幾篇用 excel 的抓取外部資料功能來自動抓 Yahoo 的最新股價資料,其實這個方法我大概一年多前就在用了,不過因為一定要裝 MS Office 而且後來 Google 推出了 Google Spreadsheets,所以我就把我原本維護的股票資料放到 Google doc 上了。不過 Google Spreadsheets 當時少了自動更新股價(台灣)的功能,所以只能一一去手動更新股價(我有做了一些設定,所以沒有想像中麻煩),這點 EditGrid (一家香港公司) 就有專門更新股價的功能,不過 EditGrid 實在太慢了,而且我手中的股票一直也都蠻少的,所以就一直用手動更新的方式。

令人高興的,Google Spreadsheets 終於推出了 importXML, importData, importHtml, GoogleReader 幾個用來抓取外部資料的函式,對我而言最重要的就是 importHtml,終於可以自動的抓到外部網頁的資料,也就可以去 Yahoo 等網頁抓最新的股價了。加上了這個功能,我對 Google Spreadsheets 就幾乎沒有什麼抱怨了。可以到這裡試試這個功能 (當然裡面的資料是假的囉…)



Reference: Google Spreadsheets Lets You Import Online Data
What functions can I use to pull in external data?