常常在看一些文章, 但share給朋友始終不是很方便, 大部分的軟體都會做透過e-mail share的功能, 但現在其實用Social network會比用e-mail來的頻繁(e-mail應該快恐龍化了吧), 如果先點share到e-mail再把link copy下來貼其實也很不方便, 後來找到Reeder和FLUD這兩個軟體, 前者是收費的, 後者目前還是免費

先來說Reeder這套付費的軟體, 介面相當的簡單直覺, 但這並不表示它的功能不好, 可以同步Google reader而且還蠻好操作的

最重要的是Share功能, 它提供相當多, 按下按鈕後就可以出現一個Panel裡面有很多支援的服務

對我來說有Twitter, Facebook就很足夠了, 可惜沒支援Plurk, 不過國外沒那麼流行Plurk倒是情有可原, 不過這麼多也很容易眼花撩亂, 所幸在設定裡面其實是可以開關每個服務的

Reeder還算不錯用, 價錢還算OK, 只是缺點是雖然支援Google reader但我有些跟的站, 內容似乎會抓不下來, 這是一大敗筆

再來說到FLUD, 它最大的好處是不用錢, 介面也新穎, 可惜的就是不支援Google Reader (不過iPad版居然是支援的, 不知道為啥iPhone版沒有)

這樣的介面自從Flipboard, Pulse流行後, 好像蠻多人採用的, 好處是可以直接看圖略過, 看到圖就沒興趣的就略過不看, 這樣感覺上還是蠻有效率的, 一樣可以share到Twitter, Facebook, 不過不支援Google Reader還有不是很穩定是致命傷, 希望在iPhone上很快就可以支援Google Reader

目前我會比較推薦Reeder (iPhone上), iPad上我就會推薦FLUD了(Pulse我是覺得很雜亂)

晚上快速翻了一變 memcached , 想了一些想法, 趁還沒忘之前先寫下來再去睡好了

memcahced的設計概念說實在的簡單到不行, 說簡單不是說他不好或是沒什麼, 反而這麼一個簡單的設計, 幫助真的會不小

memcached簡單說了就是一個分散式key-value based data cache, 資料是分散放在很多台電腦的RAM裡面, 因為是key-value based, 所以說起來就是一個大的hash table, 並不需要複雜的query, 只需要O(1)就可以取得資料, 而且資料就在RAM中, 可以是相當的快

我們都知道一個事實: “IO costs”, 如果每次都需要從database query資料, 那所花的時間, 包含SQL處理的時間, 以及IO的時間會是相當長的, 這點不管是Web application或是在mobile上(尤其現在SQLite被大量使用)都通用

因此使用RAM來cache query result as long as possible會是tuning這類的performance的其中一步, 這觀念應該是很多人都想的到

不過這樣得pattern可能得考慮的:

  1. 怎樣把一個常用且複雜的query對應到一個key-value pair
  2. cache的存續時間
  3. How to efficiently invalidate or update cache after data set changed

或許在Android的ContentProvider中可以引入memory caching的機制來減少IO的量

有關Style sheet的用法參考前篇

Three20的document跟Android比起來不遑多讓, 實在也少的可憐, 當然啦, 這樣也有另一種樂趣, 就是上網找跟追code囉!

剛嫌我的code在Launcher View上面的字型實在太醜, 很想把它改掉, 第一個想到的當然是Style sheet, 但遍尋TTStyleSheet, TTDefaultStyleSheet的document, 找不到類似的東西

後來在TTLauncherButton.m發現這一行:

[self setStylesWithSelector:@“launcherButton:”];

難不成就是"launcherButton"?

所以就試著在style sheet的class中加入:

- (TTStyle*)launcherButton:(UIControlState)state { 

UIColor *color = RGBCOLOR(30, 30, 30);

return [TTTextStyle styleWithFont:[UIFont systemFontOfSize:12

color: color

minimumFontSize:12 shadowColor:nil 

shadowOffset:CGSizeZero next:nil];

直覺想說是字型, 所以用了TTTextStyle, 不過這樣的code下場是….圖不見了!!

由於剛剛是在TTLauncherButton發現的, TTLauncherButton繼承自TTButton, 所以看了一下TTButton, label的字型是TTTextStyle沒錯, 而圖是TTPartStyle, 所以兩者都要給, 缺一不可, 而以TTButton.m的這行code來看:

TTPartStyle* imageStyle = [style styleForPart:@“image”];

圖的名字是"image"

(TTPartStyle *)  styleWithName:style:next:

TTPartStyle的constructor除了name以外還需要style和next, TTStyle是個linked list, 所以沒有下一個style, next就指定成nil就好, 但style這參數卻不可, 試過給nil, 圖還是不見, 所以還是得繼續找怎回事

這時侯只好到Three20Style裡把TTDefaultStyleSheet.m的source挖出來看囉….(一挖出來發現, 我一開始就看這隻就好了嘛… = =“)

看了一下TTDefaultStyleSheet的launcherButton是這樣寫的:

- (TTStyle*)launcherButton:(UIControlState)state {

  return

    [TTPartStyle styleWithName:@"image” style:TTSTYLESTATE(launcherButtonImage:, state) next:

    [TTTextStyle styleWithFont:[UIFont boldSystemFontOfSize:11] color:RGBCOLOR(180, 180, 180)

                 minimumFontSize:11 shadowColor:nil

                 shadowOffset:CGSizeZero next:nil]];

}

Ok, 看來整段只要照抄再改就好, 所以上面那段就改成這樣:

return [TTTextStyle styleWithFont:[UIFont boldSystemFontOfSize:12

color: color

  minimumFontSize:12 shadowColor:nil 

shadowOffset:CGSizeZero next:[TTPartStyle styleWithName:@“image” 

  style:TTSTYLESTATE(launcherButtonImage:, state) next:nil]];

 

 (跟TTDefaultStyleSheet.m裡面那段有點小不同是, 一來是我是直接接在剛剛那段Text style後面, 二來只是驗證一下順序有沒差, 不過當然是沒關係的)

今天帶小遠到交大看寰宇家庭安排的表演(這次演的還真的很無聊, 上次在桃園的比較好看)

好幾年沒回交大了, 雖說看起來好像沒啥變化, 但似乎是太久沒回去了, 總是有一種既熟悉又陌生的感覺

順手到竹湖拍了幾張照, 看著湖中的動物似乎無憂無慮, 還真的是好羨慕

P1010648

早上看到這篇文章, 興起了寫這篇的念頭, 雖然說自己也應該大約十多年沒玩BBS了

現在在台灣所說的BBS跟早期流行的BBS其實是不同的, 早期流行的BBS是撥接式的, 還記得我在高中的時候, 因為看到國小同學在玩, 也去買了台modem玩起了撥接的BBS, 早期由於Internet尚未興起, 因此訊息的交換就是透過這種方式, 一般的使用者利用數據機撥接到BBS站台下載訊息回來, 然後利用像是藍波快信(Blue wave)這類的軟體離線閱讀和回覆, 然後下次撥接的時候在把內容上傳, 除了討論區外, 還可以分享檔案, 而BBS站台的主持人通常會申請的一到多線電話讓人撥接進來, 利用半夜的時間與其他站台交換信件跟資料, 以現在的觀點來看雖然是很落伍, 不過當時其實還蠻多人玩的不亦樂乎的

現在台灣流行的BBS像是PTT, 並不是這種形式, 而是一種架構於Internet上的telnet型態的BBS, 在台灣, 早期也是在學術網路(TANET)上崛起, 這一點跟Facebook的起源有點像

記得大一剛搬進宿舍時, 我也把電腦跟Modem帶了去, 學長一看到我有Modem就很高興的問: “學弟, 你也玩BBS呀? 要不要玩學校的BBS”, 那時候我認識的BBS也只有舊式的BBS, 並非telnet型態的BBS, 但由於此時並沒所謂的宿網, 要連接到TANET上也是要透過撥接的, 所以玩telnet型態的BBS也是得需要有台modem (當時我擁有的是一台19200 bps的modem) , 也就這樣, 我就栽進了這個BBS的世界, 我還記得我的第一個ID是DOTT是以一個當時蠻喜歡的電腦遊戲: Manioc Mansion: Day of the tentacle命名, 後來又改名叫bCat (babycat)

後來學長kaoc架設了系上第一個BBS, 我因為有興趣, 也就跟著一起維護, 後來也就接下了所謂的sysop的職務, 當時的時間幾乎都奉獻給BBS, 不是在上面打屁聊天, 就是想盡辦法改進它的程式, 增加新功能, 一路上從Phoenix BBS, Firebird BBS, Secret lover BBS, 玩到Maple BBS(以上都是BBS版本) , 還試著去做出Web BBS(當時用C + CGI + NCSA Httpd), 一直到被二一 :P , 我資料結構的觀念可以說是BBS程式教我的, 不是後來念資訊系才懂的.. :P

講了堆廢話, 不過那不是我要說的重點

可能有人會認為, 如果台灣之前出現像是Facebook這東西, 那就會是PTT

這是無可否認的, Facebook上出現過的東西, 在以前BBS上其實都已經出現/實現過了, BBS不只是一堆討論區的集合而已, 如果要討論區, 當時已經有俗稱news的usenet, 而且其實跨站的BBS文章的交換基本上也是透過usenet去實現的

除了討論區之外, Facebook上現有的功能, 像是chat (BBS上的talk, 一對一), ping, 在BBS上也老早就有, social games, 很早在BBS上也流行過QK麻將, 還有像是個版, 也可以看成像是另一種型態的personal “wall”, 此外還有些現在看似先進, 但其實BBS以前都已經流行過了, 比如說public/private chat room (Facebook一直到Group發表後才有類似的功能), 還有一些Facebook並沒有的東西, 像是看板等等…

用過Facebook group的人可能會發現, 使用者也可以透過e-mail來發表文章到Group wall上面去, 這種mail post的方式, 其實也是已經在BBS上出現快有20年了, 並不是很新鮮的idea

近幾年, Facebook等新型態的Social network 服務改變了很多人與人之間互動及溝通的方式, 但很多這些東西, 其實很早點時候在台灣的學術網路上就已經很盛行了, BBS可以說是一個早期Social network典型的代表, 雖然以telnet的方式來連接, 在現在的觀點看來或許已經不合時宜, 但很多觀念, 還是可以值得去吸取, 並且拿來應用在現在新型態的Social network服務上的…