hit counter for blogger

黑暗執行緒

 黑暗執行緒搬新家囉!! http://www.darkthread.net

2/27/2006

讓我們再創台灣的資安奇蹟。啊~~~ 福氣啦!!


同事Pass給我一個台灣某銀行WebATM的安裝設明網頁,裡面有段嚇人的設定說明:

我想連許多網頁開發者都不是很清楚這個設定的影響吧! 所謂標示為不安全,並不是元件設計有瑕疵或是摻有惡意程式碼,而是指基於功能需要,元件提供了一些可被Script呼叫的函數,而可能讓Script做出某些影響系統安全的動作。舉例來說,某顆ActiveX元件提供一個函數ReadFile(ByVal FilePath),可讀取呼叫者指定的檔案,並以字串傳回檔案內容。若呼叫的Script傳入C:\WINDOWS\system32\...之類的檔案路徑,則意味著網頁有可能透過ActiveX元件窺伺客戶端的重要系統檔案。針對這類函數,開發者(呃... 只限有良心的專業開發者吧!)可以在開發元件時,加註類似"函數可能會被用來為非作歹"的警語,提醒使用者提高警覺。
前述WebATM的說明,要求使用者對信任的網站停用此警語,雖然使用者擅將不安全網站加入加入信任網站清單的機率不高,但每關閉一項警示功能,就象徵著風險上升,就資安的角度來看,網站在未說明風險的情況下,指示使用者進行具有風險的操作,算是有瑕疵的。(若發生在美國,應可以告到網站經營者傾家蕩產吧!)
寫這篇Blog的同時,為了謹慎起見,我親自連上該銀行的WebATM,由官方網站的連結連不到前述的畫面,安裝說明的網頁改了,心想: 嗯,還好還好,知錯能改,善莫大焉。
此時,向下瞄了幾行,卻讓我驚駭莫名,冷汗直冒: "控制台-->網際網路選項-->安全性-->自定層級,有關Active X項目請全部啟用"
sn ...o

我寧可相信這是某個廠商為了少接幾通客服電話想出來的"插銷伊去西"絕技,反之,若說這是某位網路銀行Developer嘔心瀝血認真想出的"解決方案"!!! 啊~~~ 福氣啦!!

2/26/2006

驚人的八連拍!! 歡迎挑戰~~~



大部分的時間,搞怪的女兒不喜歡拍照,只要一看到鏡頭,不是用手遮臉,就是把頭別過去。
但在很少數的情況下(依據我目前蒐集到的Log,尚未能推論出構成此現象的Pattern),她會絞盡腦汁,擺出各式姿勢(都不會重覆),讓你拍個過癮。
大年初二,在外面餐廳吃飯,我說要幫她拍照,這位"名模"忽然一時興起,讓我完成了八連拍。各位爸爸媽媽們,快點訓練一下你們家的寶貝,歡迎來挑戰!!

2/25/2006

女兒也是微軟幫? =_=



週四去聽了場微軟的研討會,隨堂問卷的贈品是個"又醜又怪"的.NET布偶,在會場巧遇的兩個舊同事也深有同感,但我還是隨手帶了回家,結果老婆看到的感想竟是"還不錯呀! 挺可愛的",今天我的女兒更上一層樓,從來沒玩過洋娃娃的她,居然幫它取了名字,叫做"小布丁"(雖然我無法理解為什麼黑嘛嘛的手型怪物會跟布丁有關),而且晚上還替它舖了床,蓋了被,準備和小布丁一起睡覺。
看到我在拍她的小布丁,她馬上要求要合照,驚訝到下巴脫臼的我在按下快門之際,開始懷疑,莫非中微軟的毒也會遺傳??

2/24/2006

Atlas -- Javascript老鳥的雞肋?


2/23聽了一場MS關於Atlas Framework的介紹,它算是MS面對AJAX熱潮所交出的成績單。有鑑於AJAX已成為當代Web設計的顯學,搞網站的人不可不知,這裡做個簡短的摘要:
(呃… 講師的投影片與教材還沒Release出來,所以我引用的文獻以Internet上的Resource為主,當然裡面也摻差了不少個人的見解,大家姑且看之)

AJAX(Asynchronous JavaScript and XML)是什麼?
它其實不是什麼新的發明,而泛指運用Javascript、XML、HTML DOM等這些老技術,大幅減少網頁Postbask(指User在網頁上按按點點->Browser送出Request->ASP/ASPX等在伺服器端即時運算->傳回HTML->重新顯示網頁的過程)發生,大幅提高User的互動感受,縮小與Web Page與Window Form在互動親和度上的差距。

說來好笑,從ASP.NET推出了Web Control的概念,強調寫Web Page跟寫Window Form愈來愈像,在Button上點兩下就可帶出Click事件開始寫Code。看似方便,但這種Server Side Event都得付出大量Postback的代價。於是我們不時看到ASPX程式師”輕輕鬆鬆”地寫出了地址輸入UI,使用時卻發現,每次下拉換個縣巿,IE卻得閃一下(頻寬不足或網頁複雜時可不只閃一下,是暈過去一陣子),然後第二個下拉選單才會Show出該縣巿的鄉鎮巿區清單…

當然,User肯定不會喜歡這種”爽到你,甘苦到我”的UI風格,體驗過Google Maps(http://maps.google.com),Google Suggest(http://www.google.com/webhp?complete=1&hl=en )後,可怕的流暢性與互動感,直逼Window Form程式,絕對會讓大量引用Postback的傳統網頁設計頓時失色。[參考文件1]

要實作AJAX,選擇不只一種,例如: [參考文件2]


  1. 完全手工自己打造 AJAX:缺點是對大多數人而言太困難也太耗時,同時對 AJAX 知識也非常欠缺。
  2. 使用 Callback 方式:缺點是只支援 ASP.NET 2.0,且功能仍不夠完整。
  3. 使用現成的 AJAX Library:但 Library 畢竟只是 Library,和 Framework 比起來稍微遜色了點,但優點是可免費取得,同時適用 ASP.NET 1.0 與 2.0,不失為一個好途徑。
  4. 微軟 Atlas Framework:優點是定位在 Framework 層級,初步的規劃與設計 Scope 較為完整,同時兼顧與考量 Client 端與 Server 端,遺憾是只支援 ASP.NET 2.0。

由這些選項,可以清楚看出Atlas的定位,它是專屬於ASP.NET 2.0的解決方案。

我將今天看到Atlas的一些特色做了整理:
  1. 對Javascript做了強化,可以模仿命名空間、繼承、介面、類別、抽象/虛擬方法、列舉等,使其更接近C#。(但畢竟只是模仿,語法細節上有些出入,加上目前無法做到Intellisense自動帶出Property、Method的效果,與寫C#的感覺還是有一大段差距)
  2. Atlas可以簡單做到的效果:
    * Drag and Drop (連Label、TextBox等Web Control也可以)
    * Tooltip (Mouse停在上面時Show Message)
    * Auto-Completion (類似Google Suggest的自動完成效果)
    * Mouseover時觸發動作
    * 建立Web Service的Proxy, 用AsmxName.Method的就等同於呼叫了Web Service的特定Method,簡化許多
    * Data-Bining,例如: 某個Textbox內容Bind到Span
    * 跨瀏覽器,IE、Mozilla、Firefox等主流Browser均適用
    * Validators(跟ASP.NET的Validator一樣)
    * Timer(不過跟setTimeout、setInterval差不多,沒太大吸引力)
  3. 可以使用純XML語法夾在HTML Source中,就可做出不少基本功能,不用寫半行程式。但是XML Tag的做法雖然比較簡潔,在邏輯概念的傳達上,似乎不如Coding有系統。所幸Developer可以自由選擇用Coding的或是寫XML Tag,除非IDE有方便設定工具輔助,我想我還是會選擇寫Code吧!
    以下是一個用下拉選單改變DIV Style的範例:

    HTML Element:
    <div id=”panel” /><select
    id=”colorPicker”>…</select>


    Coding:
    var g_panel,g_colorPicker;
    function pageLoad() {
      g_panel=new Web.UI.Control($(‘panel’));
    //==>document.getElementById(“panel”)
      g_panel.initialize();
      g_panel.set_cssClass(‘normal’);
      g_colorPicker=new Web.UI.Select($(‘colorPicker’));
      g_colorPicker.initialize();
      g_selColor.seletionChanged.add(onSelectColor);
    }
    function onSelectColor(sender, args) { //==>連Event都仿得挺像的
      g_panel.set_cssClass(g_colorPicker.get_selectedValue());
    }


    如果用Tag的寫法(效果與以上Code完全相同)
    <components>
    <control targetElement=”panel” cssClass=”normal”>
    <bindings><binding id=”setCss” dataContext=”colorPicker”
    dataPath=”selectedValue” property=”cssClass” /></bindings>
    </control>
    <select targetElement=”colorSelect”>
    <selectionChanged><invokeMethod target=”setCss” method=”evaluateln”
    /></selectionChanged>
    </select>
    </components>


結論:
Atlas對Javascript下的功夫,讓它與C#或.NET中的語法相似度更高,而且的確將不少複雜的程序給封裝起來,頗有Do More With Less的味道,但是要留意:
  1. 如果你不是用ASP.NET 2.0, 呃… Sorry
  2. Atlas把複雜的東西簡化了… 但是用的是自己發明的一套做法;Atlas特意仿效C#,讓使用者能沿用一致的Coding經驗,但仍存在不可忽視的差別。學習曲線不可小覷!
  3. 承襲上點,如果你已經很熟稔傳統Javascript Coding,甚至已經為AJAX學過或寫過一些共用的js,要不要重新學一套將會是”to be or not to be”級的艱難抉擇。

2/19/2006

從高砂紀念碑事件談起



烏來的高砂紀念公園因濃厚的日本色彩及歌頌日本軍國思想,在引發社會議論後,已落得縣府"限期拆除"的下場。我這也才搞清楚什麼是"高砂義勇隊",看來這又是根源於Do the thing right .vs. Do the right thing的相對論。
在日本殖民時代,日本在霧社事件中吃足了苦頭,自此對台灣原住民刮目相看。到了太平洋戰爭期間,日軍再次陷入熱帶島嶼山林戰的泥沼,便利用教育洗腦的手法,鼔動了一批批的原住民青年,爭先恐後地自願投入戰爭,為日本天皇效命。而高砂義勇隊的表現則讓日本人欽佩不已(至今仍有不少日本人對高砂義勇軍心存敬佩與感激),忠誠度高、適應性強、體格強健,又能在物資不足的狀況下野地求生,甚至還實踐了犠牲小我、完成大我的精神。以"軍人"的衡量標準來看,這絕對可稱得上是"典範",無庸置疑,They really did the thing right!
但問題出在,中、日是敵對的,日本是壓搾台灣人民的殖民統治者,身為台灣人卻傻傻地為日本人效命若此,以民族主義觀點來看,實在愚不可及,激進一點的人甚至大可硬安上個"漢"奸走狗的罪名,They really did the wrong thing.
許多事有其複雜的歷史背景、文化情境,強用自己的價值觀去衝量似乎有失客觀。想像高砂勇士們就像從罰球線起跳,在空中挺腰,右手以完美的弧線將球灌進"我方的"籃框,有人看到的是媲美喬丹的絕妙身手,有人則在意白白送了對手兩分...
那我的觀點呢? 由於Do the right thing中的right一詞常涉及主觀的價值觀與判斷,不易用科學方式量測與驗證,下回有要討論Do the thing right的議題時,我再多多發言好了。
PS: 照片載自蕃薯藤新聞網http://news.yam.com/udn/politics/200602/20060217220736.html

2/04/2006

冷眼看亞力山大的中毒事件


過年期間,除了阿扁總統拿國統會跟兩岸局勢當成過年"西巴啦"娛樂兩下的新聞外,最受矚目莫過亞力山大的一氧化碳中毒事件了。這的確是件公共安全領域的議題,不過不例外的,每當這類事件發生時,新聞媒體紛紛揮舞手中麥克風或筆桿權充魔法棒,化身正義使者,高喊"我要代替月亮懲罰你~~",最終目的不外乎為趁勢拉抬一下收視率。
而在強大的輿論壓力下,第二波效應出現了,主管機關也開始用"最高道德標準"來重新檢視當事者,彷彿找出來的碴愈多,當事者的過失愈大,相較於主管單位的用心查核,一來一往,責任歸屬立見分曉。
於是,亞力山大沒裝一氧化碳偵測器(法規沒強制規定要裝,但出人命了,業者沒裝當然就叫沒良心)、鍋爐沒有合格的專職操作人員(這部分似乎法律上也有模糊空間,但出人命了,當然也是業者枉顧消費者的安全)、鍋爐安裝在頂樓違章建物中(好像比裝在地下室好些,但是違章耶,黑心業者為了賺錢,不惜違法,呸!)、安全通道堆了雜物(這好像是這次安檢最普遍的缺失,不過,前陣子屈臣士因樓梯堆雜物導致孕婦摔傷,主管機關的結論是無法可管)...
倒不是同情亞力山大,平心而論,有哪個廠商/業者經得起這番顯微鏡級的檢視。如果巿場上的競爭者在安全上都只做八分,花大成本做足十分的人並不會被感激,而是在反應成本之餘被唾罵"為什麼會費貴到靠北",最後在商場上驕傲地倒下。這是人性吧! 幸好我從沒打算當老板,這個難以拿捏的問題就留給別人傷腦筋囉。

2/03/2006

Trouble Two, God Damn Three, and ...


兒子已經越過一歲半,努力向兩歲邁進中。開始牙牙學語,也能搖搖晃晃地跑來跑去,正是親朋好友們口中"最好玩"的時候... 好景不長,不過沒幾個月光景,他的身高抽長個幾公分,加上學會踮腳尖、搬東西墊腳、爬沙發/椅子、開抽屜櫃子,家中安全無虞的地方快速消失中。往往一個轉身,就驚見一地的OK繃或滿地的吸管,原來只消看過你拿一次,他就學會把所有動作一氣喝成。同時,這小子開始學會運用聲帶後,也一併了解了"會吵的小孩比較會有糖吃"的道理,於是,面對想拿拿不到的,父母不讓玩的東西,一律用稚嫰的小嗓子飆幾個高音,往往就能如願... 可憐的爸媽雖恨得牙癢癢的(其實手更癢),但想起他乖乖坐在懷裡、或在床上睡得香甜的模樣,不免又心軟起來...
四歲的女兒則是另一個階段,俐牙利齒(雖然兩顆門牙蛀到剩半截)加上叛逆到不行的性格,常常在家中要上演"台灣霹靂火"的劇情:
"你快點乖乖坐好吃飯,不然等一下不准出去玩!"
"哼!小氣鬼。我沒辦法吃那麼快,我一定要出去玩!"
"車子你又沒在騎,給弟弟騎一下。"
"我不要,弟弟會弄壞我的東西!"
... 氣到握拳之際,總又會想到這小妮子不時會肉麻地說: "把拔,你好厲害哦~~" "媽咪,我喜歡你~~" ...
想起一個長輩的名言:
小孩的"難搞"分為多個階段,由二歲的Trouble Two揭開序幕,再來會進入God Damn Three,努力撐過三歲的撞牆期,然後苦盡甘來嗎??
不!! 細細品嚐Fucking Four吧!!