2011年12月31日

iPhone 4S 預購心得

每年的 iPhone 預購,已經成為我工作上最重要的大事(就這兩年的經驗來說,也是必定出包的大事Orz),過程中累積了一些經驗,上週更是有機會請設計/維運另一個知名訂票系統的同事來分享心得,整理如下。

  1. 系統架構愈簡單,request 經過的節點愈少,就更好調整相關參數,當發生異常時也比較容易掌握是哪裡出了問題,系統效能也會更好。
  2. 當預購開始時,瞬間湧入的超大流量不管準備多少實體設備都不夠應付(畢竟預算&機房空間有限),因此在request經過的各節點設定限流是必要的手段,包括 Firewall, Switch, AP/DB Server 之間的流量限制。但是最佳的參數為何,需要在相同的系統環境(軟硬體規格)下持續進行調整才能得到。
  3. 承上,叢集系統若為異質平台組成,或者硬體規格有明顯差異者,管理起來會很麻煩,最好能針對每一台設備去調整限流的參數,才能得到最大的 throughput。若要降低管理/調校的成本,最好能用相同的硬體規格/平台,否則就要有很強大的軟體架構(網路層/AP層),能夠自動根據每一台機器去設定相關參數,才能讓每一台設備都發揮最大的效能。
  4. IDP/IPS/Firewall等資安設備的參數調校是很大的學問,在平日沒有承載足夠流量下所做的設定,面對瞬間/持續超高流量時不一定能運作的很好,甚至可能會造成反效果,因為誤判而將正常流量給block掉,處理起來非常頭痛(可能要臨時把相關policy disable,甚至改接網路線將流量bypass這些資安設備)。
  5. 減少系統內紀錄的log對於效能會有所幫助(還可以避免因磁碟存取異常造成整個系統效能下降的問題),但要考量萬一產生客訴,需要調閱資料的時候能否取得足夠的資料,原則上log還是要能免則免,非得要紀錄的話寫到另一個獨立的 DB 效能會比寫到 file system 好。
大概就這樣啦,2012會是忙碌的一年,年中有倫敦奧運,第三季可能就會有 iPhone5 預購啦,希望可以順利度過!

2011年回顧

又到了一年一度的這個時候了

今年坎尼比較專心在研究所課業上,所以發文量很明顯下降了,看到去年寫的回顧文內容說,要給更多優質內容就不禁汗顏 (汗)

坎尼這一整年有三分之一的日子去參加了某創業比賽,但嚴格說起來應該就只是創業過程體驗比賽,雖然花了不少時間,但仍收獲良好,未來有機會再跟各位分享

接著要分享的是本學期所修的一門課,這門課的內容在談資訊系統怎麼幫助企業達成目標,其實上課的時候坎尼有些感觸:

  • 很多公司在推資訊系統時,只是跟進其他同業,並未想過組織目標為何,所以系統買了或是開發了就放在那邊沒用…
  • 工程師並未全盤了解組織策略為何,這樣開發出來的系統肯定無法符合需求,到頭來就只是在使用者端不斷地來回,修改需求。
    (是說為什麼不用 prototype 開發方法?)
  • 不符合工作目標的系統,上線日就等於系統的死亡日
  • 現在出去的大學生/研究生連Code都不會Code了…更別提了解策略並規劃資訊系統。

總覺得老師也是鄉民來著,很酸 XD

今天是今年的最後一天了,也總算在本月看到 Nokia 和 Microsoft 合作的 Lumia 系列手機在台灣上市,希望這是智慧型手機 OS 即將三分天下的預兆!

[SQL SERVER] SQL SERVER 無法使用帳號登入之原因

坎尼和同學們最近要為論文寫資訊系統
剛好以 SQL Server 2008 R2 當資料庫系統
沒想到同學們沒用過,所以發生了不少設定上問題
所以把初心者在使用 SSMSE 時,無法登入的可能原因整理成一篇


I. 伺服器安全性設定

S 同學照著網路上的範例建立好資料庫
沒想到寫好一個程式之後,怎樣都無法用帳號登入
但用 Windows 整合驗證是正常的

坎尼檢查了一下才發現,S同學忘了修改伺服器驗證屬性
SL01 如上圖把伺服器驗證改為SQL Server及Windows驗證模式即可

II. 帳號安全性

C同學已修改過上述屬性,但仍是有帳號無法登入之問題
檢查之後才發現同學在帳號屬性中,選了強制執行密碼逾期
所以寫程式去連接時,會有帳號密碼已逾期之例外發生
無奈現在年輕人都不怎麼靜下心來看錯誤訊息寫什麼

坎尼修改該帳號登入屬性之後程式就可以跑了,可喜可賀
SL02

III. 小結

最近在幫同學們處理這些問題,發現並不是工具不好用
反而是使用者常常會忽略工具所提供的訊息
  • 看到警告視窗→確定
  • 不管內容寫什麼,點 同意 就對了
不知道是不是現在人接觸太多資訊科技
已經被一些好用的應用程式慣壞了?

但反過來想,程式設計師在設計這些訊息的時候
是不是也該想想使用者會有什麼樣的反應發生呢?

2011年11月16日

如何將各種不同短網址服務(URL Shortening Services)產生的短網址還原

最近遇到一個需求,要用程式將大量的短網址還原為原始的完整網址,以便進一步對這些網址作分析,在 .NET 中可以很容易的完成這個功能。

首先要先擬出個大概的流程,也就是利用程式送出 HTTP GET request,然後針對收到的 HTTP response 去解析完整的網址為何。

有了大概的概念之後,大概 Google 一下就會找到這篇 MSDN 參考資料:How to: Send Data Using the WebRequest Class. 從裡面可以知道,WebRequest 和 WebResponse 會是最重要的兩個 class。

重點程式如下:

一:以短網址作為參數,建立一個新的 WebRequest 物件,並設定要使用 HTTP GET:
WebRequest request = WebRequest.Create("http://goo.gl/UjDtF");
request.Method = "GET";

二:若你的環境需要透過 proxy 才可以連外,則加入以下這行:
request.Proxy = WebProxy.GetDefaultProxy();

三:發出 request,並解析收到的 response,原始的網址就是 response 的 ResponseUri.AbsoluteUri:
WebResponse response = request.GetResponse();
string originalURL = response.ResponseUri.AbsoluteUri;

就這麼簡單,完整的範例程式碼請參考RestoreShortURL.zip

2011年8月2日

MIS 必備技能:製作光碟映像檔(.iso files)

前陣子被問到如何在沒有光碟機的 NB 上播放 DVD 光碟(或者是如何安裝軟體),這才發現連唸資訊相關科系的學生也有很多人不懂如何製作光碟映像檔。

除了在沒有光碟機時必須要使用到映像檔以外,使用映像檔也可以避免光碟片因經常使用而損壞,所以現在我拿到如 WebCam 的 driver 之類的光碟片,就會把光碟片做成映像檔,之後都用映像檔安裝/移除軟體,光碟就封存備用了(或者直接拿去回收)。

未來光碟機的使用可能會越來越少,因為影音檔案/軟體安裝檔都可以從網路上取得,online video streaming 也已經到達 HD 高畫質的地步,光碟機這種速度慢又很吵的設備就越來越無用武之地了(大概只會剩下高階的藍光光碟機)。

從 Apple 的產品策略可看出 Apple 認為未來光碟機將會消失,例如:
至於未來市場發展是否會如 Apple 的定位,大家就拭目以待囉。

其實只要直接 Google「製作映像檔」就可以找到一堆軟體介紹以及圖文並茂的使用說明,例如:
我就不狗尾續貂啦。

我自己是習慣用 ImgBurn + VirtualCloneDrive (因為當初 Win7 在 beta 的時候包括酒精之類的一大堆軟體都無法掛載映像檔,用久就習慣這個組合了),用了很久都沒啥問題,如果有需要的人可以試試看。

2011年7月19日

設定 sudo 時要記得禁止一般權限使用者執行 sudo sudo

在設定一般權限使用者可用 sudo 執行何種指令時,有以下兩種作法 (參考鳥哥的文章):

  • 白名單:明確列出使用者可以執行哪些指令,如:
    Cmnd_Alias USERADM = /bin/more, /bin/cat
    user     ALL=USERADM
    使用者只能以 sudo 執行 more 和 cat 指令。
  • 黑名單:明確列出使用者不可執行哪些指令,如:
    Cmnd_Alias NSU = /bin/su
    
    user     ALL=ALL, !NSU
    使用者不可以 sudo 執行 su 指令,其他指令都可以。
sudo sudo 問題只會發生在使用黑名單時,因為除了黑名單中所列的指令,其他指令都可以執行,而 OS 中的指令很多,有時候會發生漏擋的現象,而造成意想不到的結果。

上禮拜中無意發現,原本的黑名單中只有禁止 su 和 visudo 等指令,沒有禁止 sudo 指令,因此若執行「sudo passwd root」會出現「Sorry, user xxx is not allowed to execute '/usr/bin/passwd root' as root on server.」的訊息,這跟預料中的一樣,顯示黑名單有正確發揮作用。

但是若執行「sudo sudo passwd root」(因為當時眼殘,沒注意到已經打了一次 sudo,就重複了),則可以成功變更 root 密碼!因此若要使用黑名單,除了禁止 su、visudo、passwd root、userdel root 等等指令以外,還要記得禁止 sudo 指令,才不會留下漏洞!

由此可知,使用白名單是比較安全的作法,畢竟使用者可以執行哪些指令都清楚的寫在設定檔中,一目了然,就不會有忘記禁止哪些指令的問題了。

2012-04-13更新:
目前使用的黑名單如下:

Cmnd_Alias NSUREAD = /bin/su,/usr/bin/sudo,/usr/sbin/visudo,/usr/bin/passwd root,/usr/sbin/userdel,/sbin/sysctl -w *

比較特別的是最後加上去的「/sbin/sysctl -w *」,主要是禁止一般 user 以 sudo 的方式變更任何系統參數 (例如 net.ipv4.tcp_keepalive_time ),但若只設定「/sbin/sysctl -w」,沒有加上「*」的話,還是可以變更成功 (因為 -w 之後要加上參數的 key=value,例如 /sbin/sysctl -w net.ipv4.tvp_keepalive_time=300),只是不能執行「sudo /sbin/syscrl -w」(不帶任何參數) 而已,但這樣是沒有意義的,因為 -w 後面必定要接欲變更的參數。因此要加上「*」才能禁止一般 user 透過 sudo /sbin/stsctl -w 變更「任何」系統參數。

雖然目前暫時只有針對 sysctl 指令做這樣的限制,但其他需要參數的指令,以及參數內容可能會任意變化的指令,用「*」去擋就對啦!

2011年7月14日

Openfind 2011 Solution Day 筆記

上週四(7/7)去參加 Openfind 2011 Solution Day,活動辦的還不錯。昨天收到行銷寄來的 mail,說是完整的 session 投影片和錄影可以到他們家網站線上觀看,分為影片欣賞簡報下載

我覺得最精采的是第二個 session:CEH (白帽駭客) OpenBlue 雲端入侵-郵件攻擊與密碼竊取,在現場講師直接用 VM demo 受害人打開惡意的電子郵件,點了惡意的 URL 或者圖片以後,電腦就被植入後門,此時攻擊者便可為所欲為,包括鍵盤側錄、即時螢幕擷取、web cam 擷取等等。現場看到 demo 真的非常 high 阿!

以下列出一些心得:
  • 由於 GPGPU 愈來愈盛行,加上 CPU 的運算能力仍在持續提高,現在長度在 16 位以下的密碼都不夠安全,很容易被暴力破解。參考:T客邦-iPhone 密碼被公開、GPU 極速破解密碼,教你建立高強度密碼。(看來近期內要趕快研究一下怎樣用 LastPass 或者 KeePass Password Safe 之類的解決方案了,重點是要支援 SmartPhone 阿!在 SmartPhone 上面要輸入複雜密碼實在太困難了。)
  • 社交工程電子郵件攻擊非常難擋,郵件內容看來完全沒有異狀,被植入後門之後電腦也完全不覺的有任何異常,真的是無聲無息。另一點是,印象中 demo 的時候受害的 pc 都是 Win XP,如果可以的話應該盡量避免使用這款全世界最危險的 OS
  • web cam 平常關閉是沒用的,一旦被入侵,攻擊者可以直接由遠端下指令啟動 web cam,因此除了把網路線拔掉,從此只用電腦玩單機遊戲這種超激進的作法以外,最好的作法就是 web cam 沒有用的時候要用厚的黑紙貼起來,這樣才不會被偷拍,而且使用 web cam 的時候要衣著整齊。當然如果愛用 web cam 玩一些很刺激的視訊的人就只好自求多福了。家中有女性的人一定要特別注意這一點。
    2011-07-15:毛哥在 buzz 的回應提醒我,web cam 應該分為外接式和內建的兩種。外接式的web cam沒有使用就應該拔掉,內建的 web cam 沒用的時候最好要貼起來。
  • 2011-07-15:現在很多駭客會把病毒/木馬放到 Dropbox,因為 Dropbox 不會對用戶上傳的檔案進行掃毒。因此除了 email 中的 MS Office 附件 (e.g., .doc, .ppt, 圖檔) 可能很毒以外,在 Dropbox 上公開 share 出來的檔案也可能很毒。我覺得以後這些檔案最好都用 Google Docs 來打開會比較保險,畢竟每個 tab 都是跑在一個 sandbox 裡面,萬一真的開到有毒、又沒有被防毒軟體偵測到的檔案也比較不會造成系統被感染。
再來是第三個 session:導入零負擔,個資防護及訊息保全大揭密,也不錯。講師講的很流利,對個資法也蠻熟的,等到法令正式頒佈實施以後對於軟體廠商來講會產生很多商機,所有公司都應該及早全面檢視相關的議題,這種東西突然要趕工是做不完也做不好的。

以上是今年參加 Openfind Solution Day 的簡單心得,希望明年有機會再去參加 :D

2011年4月26日

隨機將雲端/分散式系統中的 processes/services 刪除,以測試系統的容錯能力 - Netflix & Chaos Monkey

上禮拜四 (4/21) 在 InfoQ 看到一個大新聞:Major Outage on Amazons EC2 US-East Datacenter - Many Sites Affected,災情相當慘重,不少最近以 Amazon 的 IaaS solution 為基礎的新興熱門網站都掛了 (e.g., Foursquare, Quora, Heroku),最後拖了整整3天才完全修復。

接下來的幾天 Amazon 當然是全力搶修,在週末將服務修復後,網路上陸續出現很多評論 & 分析的文章。昨天早上看到 Phil Wainewright 寫的 Seven lessons to learn from Amazon's outage,其中讓我最 shock 的就是第六點「Understanding the trade-offs help you frame what to ask」中所說,Netflix 內部寫了一個叫做 Chaos Monkey 的 daemon,它的作用就是隨機的將 Netflix 系統中的各個 processes/service 刪除,看看系統的存活能力是否有達到當初的設計!因此在這次的大災難中 Netflix 的系統仍可正常運作,在眾多倒地不起的網站中顯得一枝獨秀!
(原文請參考 ReadWriteWeb: Chaos Monkey: How Netflix Uses Random Failure to Ensure Success)

Chaos Monkey 的運作方式對於資深的前輩們可能不是什麼新的觀念 (e.g., Monkey Lives),但是對我來說真的是蠻大的衝擊。在傳統的維運架構中,為了要測試系統的容錯能力,不管是 active/backup 的 Web/DB/AP Server、 NIC binding 要測試 failover/failback,redundant power supply,都必須事先擬定演練計畫,詳列所有操作步驟的 SOP (如何製造 failover 的狀態,如何確認是否 failback,若操作失敗要如何 rollback 等等),所有相關人員從業務單位的 PM、開發單位到維護單位都如臨大敵,演練當天(有時候還必須要挑凌晨的時段)戰戰兢兢的按表操課。也因此這類的測試頂多一季到半年做一次,而且這還是所有元件都 tightly-coupled、所有環境都在完全掌握中的系統,還不是環境無法 100% 完全掌握的分散式系統呢!

相較之下,Chaos Monkey 的作法則是在 Production 系統中常駐一個 daemon (相當於 Windows 中的 Service),不定時的將系統中的重要 process/services 刪除!例如有個神經病忽然發作登入系統把 Oracle 的 process 通通 kill 掉!

這時候系統應該如何反應?能否在短時間內偵測到 Oracle fail,趕快在其他地方 (e.g., 另一個 Region / Availability Zone 中) 另起爐灶 (e.g., 啟動 backup Oracle server)? 在備援機制接手之前,或者此問題無法在短時間內解決時,如何做到 graceful degradation (例如 Netflix 的 recommendation 系統掛了,無法顯示推薦影片,就改為顯示目前最熱門的影片)?這些就是當初建置 Chaos Monkey 這套機制希望可以自動測試的,看看系統反應是否如設計的一樣達到很高的容錯能力。

分散式系統在設計的時候當然會考量到上述的各種情況,系統中的元件會做好適當的切割,設法避免一個元件 fail 以後拖垮整個服務。在高水準的團隊中會採用 Test-Driven Development (TDD) 的方式來開發,透過 Continuous Integration (CI) 來每天驗證系統是否符合設計。但是自動測試有其極限,許多時候更需要透過 mock object 或者 stub 來模擬其他元件的反應,並無法 100% 保證系統實際執行時會符合預期,而 Chaos Monkey 則是直接把 Production 系統中正在運作的元件給砍掉,如此才能在真實環境中真正去驗證系統的容錯能力,並且發掘設計時沒想到的問題。

要讓 Chaos Monkey 這套機制順利運作,除了技術上的挑戰之外,也要整個組織文化的配合,如果這隻猴子剛好挑在半夜的時候發瘋,真的把系統搞掛了,相關的人就沒辦法安穩的睡個好覺了,而且對於營收以及公司商譽的衝擊也是很大的風險,因此若是想要在已經成熟的系統或者傳統的大公司導入這套機制,想必會遇到重重阻礙。Starup 就比較沒有這種包袱,若能在一開始建立系統的時候就建置並執行如 Chaos Monkey 的機制,未來這個系統的體質一定會非常的強健。

最後就 quote Netflix Tech Blog 中的一句話作結吧:

The best way to avoid failure is to fail constantly.

後記:昨天下午又在 Jeff Atwood 的 Coding Horror 看到一篇:Working with the Chaos Monkey (裡面有隻看起來很機車的猴子插圖),Jeff 提到他在一年多前就在 Netflix 的 Tech Blog 看到關於 Chaos Monkey 的說明 (5 Lessons We've Learned Using AWS),但後來太忙了就忘記寫心得 XD  在這篇文章的回應中,有人又提到 Monkey Lives 的故事,應該可以說是 automatic monkey teesting 的始祖吧,很值得一讀~

2011年4月1日

[ASP.NET] 在 Web 專案中進行排程工作

其實在很久之前坎尼就想研究這樣的東西了
概念大致上曉得,只是一直沒時間去實作出來
這幾天有些時間就去翻了一下資料,把它實作出來

坎尼在以前公司的做法有下列幾個:
  • 另外再寫一個 windows service 來執行
  • 用 Windows Form 寫成 AP,再用內建的工作排程來定期執行

    不多說,馬上進入正題

    I. 概念

    排程這個東西,就是指定好時間,時間一到程式就會自動執行
    在 ASP.NET 裡,坎尼主要是利用 System.Thread.Timer 來進行排程設定
    其他說明可詳見Bill叔所寫的 <三種時間人>
    接著在 Timer callback 事件中撰寫要系統做的事 (抓正妹圖之類的…)

    II.實作

    首先,新增一個 Web 專案 (似乎是廢話)
    在專案中新增一個 Global.asax
    wr_01 
    接著宣告一個全域的 Timer
    並在 Application_Start 中加入要進行 callback 的事件
    最後再設定 Timer 的週期,本範例中是以 5 秒當作一個循環 (50000毫秒)
    (第3個參數為 Timer 要在多少毫秒之後啟動事件wr_02
    範例中所做的事就只是把時間寫進一個文字檔
    (由於 sample 沒做好處理,很容易當掉 XD
    wr_03

    進行測試,在 Visual Studio 中按 F5 (讓虛擬伺服器啟動)

    注意,由於是另外開個 Thread
    所以在伺服器關掉之前都會持續進行 callback事件
    wr_04 
    測試結果,果然有成功的在 background 進行寫時間 log 的動作

    III. 小結

    本次的範例下載
    有興趣的人可以回去研究如何應用 :p

  • 2011年2月11日

    [NPOI] 輕鬆地將 GridView 匯出成試算表-修正版

    之前坎尼有發佈一版 Web User Control,讓 GridView 可以輕鬆匯出成 Excel
    (詳見 [NPOI] 輕鬆地將 GridView 匯出成試算表)

    後來有讀者發信來問:「為什麼他匯出的檔案標題列都是空白?」
    經一番追查之後發現,原來是 GridView 啟用了排序 (AllowSorting)
    HeaderText 會自動轉換成 LinkButton
    以至於原本抓取標題部分的程式碼只抓到空白文字

    於是坎尼稍做了一下修改,如下圖紅框所示
    ec_01 
    可以看到,不論標題是否可排序
    新版本的 Web User Control 仍可以抓取標題文字
    ec_02 
    ec_03 

    請有需求的讀者到 這邊 下載

    2011年2月10日

    在自行撰寫的 DNN Module 中使用 & 列印 Microsoft Chart Controls 的注意事項

    前陣子因緣際會的又摸了一下 DNN,根據官網上的 Basic DotNetNuke Module Development Video 教學影片的說明開始自行撰寫模組,並且在模組中用到 Microsoft Chart Controls 來呈現圖表。過程中陸續遇到一些問題,以下是解法。

    問題一:error: Invalid temp directory in chart handler configuration [c:\TempImageFiles\]

    這個問題挺好解的,因為錯誤訊息很明確,直接 Google 就可以找到解法,重點在於自己新增的 DNN Module 專案(位於 C:\inetpub\wwwroot\dotnetnuke\DesktopModules\[YourModule])下的 web.config 是找不到 Chart Handler 的設定的,必須要去找最上層的 DNN 站台的 web.config,位置是 C:\inetpub\wwwroot\dotnetnuke\web.config:


    找對 web.config 檔案以後,把多餘的「c:\TempImageFiles\」設定刪除,或者指定一個確實存在且有寫入權限的目錄即可。

    問題二:無法列印 Chart Control 圖表,列印時會看到表示圖檔不存在的紅色叉叉


    經過一番搜尋,最後在 StackOverflow 找到這篇文章,雖然該文作者說在 web.config 的 ChartImageHandler 設定中加上「deleteAfterServcing=false」對他們的專案偶爾也沒作用,但我試著加上這個設定之後,測試到目前為止每次都可以順利的把圖表列印出來!而從這個問題一直到現在都沒人回覆的狀況來看,大概只有極少數狀況在加上此設定以後仍然無法確保100% 正確的執行結果,因此有需要列印 Chart Control 的內容的話,加上這個設定就沒錯啦!(看起來就是叫系統不要把暫存圖檔立刻刪掉)


    以上就是最近在 DNN Module 中使用 Microsoft Chart Control 遇到的問題 & 解法,有了這次的經驗,下次開發就可以更順利啦!

    2011年2月5日

    IIS 7.5 設定網站的實體路徑執行身分 (Physical Path Credentials) 時,AD 帳密輸入錯誤不會跳出錯誤訊息

    去年底去恆逸上了一堂 SCVMM 的課(Microsoft Official Course 6331A: Deploying and Managing Microsoft System Center Virtual Machine Manager),在實作的過程中一切都很順利,但是在我要打開 SSRS 的報表網站來檢視報表時,卻一直跳出類似「網站無法存取」的錯誤,但是老師和課堂上其他同學的系統都很正常。

    接下來就是恐怖的 debug 時間,老師親自過來在我的機器上測試各種設定,從 IIS、SSRS、AD、VMM Admin Console 一路到 SCOM 都查遍了,甚至把 VMM Admin Console 和 SCOM 砍掉重裝,問題還是沒有解決。最後花了將近一個半小時,終於找出問題!原因就是在設定 IIS & SSRS 網站的時候,設定「實體路徑執行身分 (Physical Path Credentials)」時要輸入 AD 的帳密,此時如果帳密輸入錯誤,IIS 是不會跳出錯誤訊息的!!!

    「實體路徑執行身分 (Physical Path Credentials)」的位置在哪裡呢?以 IIS 7.5 為例:


    在每個網站的 Features View 裡面,右邊的控制面板中間可以看到「Advanced Settings」:


    點進去以後,可以看到「Physical Path Credentials」這個設定值:


    在接下來的設定畫面中,要把預設的「Application user (pass-through authentication)」改為「Specific user」,並在此處輸入 AD 的帳密:


    問題就是出在這一步!!

    在這裡雖然 Password 有 confirm 的機制,但是若連續兩次輸入錯誤(暈倒),IIS 就會接受這個錯誤的密碼,而後當網站實際上執行,以這組帳密去驗證時就會失敗,進而產生「網站無法存取」或者「存取被拒」之類的錯誤訊息了!

    雖然說密碼連續兩次輸入錯誤還蠻扯的,但是若是跟我一樣習慣盲打的人,有時候用到一支鍵位配置跟平常習慣的鍵位不一樣的鍵盤時,是可能會連續兩次輸入錯的一模一樣的字串的。特別是這個欄位是密碼欄位,在畫面上看不到實際輸入的內容,因此當系統顯然沒有真的嘗試用此組帳密進行驗證,只是單純用 confirm password 的方式驗證時,就會發生這次的狀況了!

    在這樣的狀況下,最好的作法就是設定完 AD 帳密以後,馬上試著打開網站看看能否正常運作,如果發現問題的話才有機會回頭檢查設定是否有誤。


    後記:

    雖然我只有用 IIS 7.5 來驗證,但是既然最新版的 IIS 都會有這問題,那麼舊版應該也是免不了的 ~

    2011年2月2日

    [無用小工具] 大樂透對獎程式

    好久沒寫這個系列了
    這次剛好台灣彩卷要開出100組的對獎號碼
    所以坎尼順手寫了個對獎小程式 (不然100組會對到眼花吧…)
    首先是 程式下載

    以下為使用說明:
    解壓之後會有三個檔案
    bl_00 
    Lottery.exe => 主執行檔
    l.xml => 預設的開獎號碼 (可用 notepad 打開修改)
    numbers.xml => 對獎號碼範例 (可用 notepad 打開修改)

    預設的開獎號碼 (l.xml)


    數字用空格分隔,記得特別號要放在最後一碼
    bl_05

    主程式畫面


    加入對獎號碼有三種方式
    1. 手輸 (用空格分隔)
    2. 用選的
    3. 載入 xml 檔
    圖中藍色框框則為對獎按鈕
    bl_01 
    手輸,記得用空格區隔數字
    bl_03
    用選的,選完六個號碼之後按下確定即會把選好的號碼回傳
    bl_02
    xml 檔格式,可開啟範例檔以同樣的方式進行修改
    一樣是用空格來分隔數字
    bl_04

    對獎


    確定載入自己的對獎號碼之後,即可進行對獎動作
    點下右下方的對獎按鈕,程式就會自動執行對獎
    並將結果顯示在號碼後方的狀態欄中 (如下圖)
    bl_06 
    以上為自得其樂的中頭彩示範

    不過現在台彩網站似乎流量爆了
    要得到開獎號碼可能要再等晚一點 XD

    如何升級 MacOS X 內建的 vim

    雖然說 MacOS X 內建的 vim 版本已經很新 (v7.2, 2008-08-09),但有些軟體會利用到最新版 vim 的功能 (v7.3, 2010-08-15),如T客邦介紹的:vmail (see Prerequisites),就一定要使用 vim v7.3 才能正確運作,那麼要如何升級 MacOS 中內建的 vim 呢?

    我一開始先找到了這個參考資料,直接下載最新版的 vim source code 來自己編譯 & 安裝,雖然步驟看來沒啥特別,但是後來沒有成功。又經過一番搜尋之後,我發現一個更簡單的作法,只要安裝 MacVim (a port of the text editor Vim to MacOS X,之後再開啟 terminal 修改 home 目錄下的 .profile 隱藏檔,加上以下兩行即可:

    alias vim=/Applications/MacVim.app/Contents/MacOS/Vim
    alias vi=vim

    簡單說就是把vim這個指令作為MacVim執行檔的alias就可以了。要確認此 alias 是否生效,要先登出再登入 OS,再於 terminal 執行 vim --version 來確認目前執行的是最新版 (v7.3) 的 vim。

    有些資料會寫說在 home 目錄下新增一個原本不存在的 .bash_profile 隱藏檔(跟一般 linux 一樣),而後在 .bash_profile 中加上那兩行就可以,但我測試以後發現 .bash_profile 沒有作用,在 Mac OS 中還是直接修改 home 目錄下原本就已經存在的 .profile 隱藏檔比較正確&有效。

    參考資料:

    2011年1月30日

    Joomla 1.6 安裝注意事項 (手動編譯 Apache HTTP Server & PHP on RHEL 5)

    在 2011-01-10 的時候 Joomla 推出了最新的 1.6 版,因此我也灌起來玩了一下,過程中發現由於 RHEL 5.3 (Tikanga) 內建的 PHP (5.1.6) 太老舊了,Joomla 1.6 的需求是 5.2.4 以上,因此必須要升級 PHP,也利用這個機會一併把內建的老舊 Apache HTTP Server (2.2.3) 升級 (最新版:2.2.17),以下就是升級過程中的注意事項。

    安裝的過程基本上很簡單,主要參考 PHP 官網上的 online documentation -> 在 View Online 的地方選 English -> Installation on Unix systems -> Apache 2.x on Unix systems 上的步驟照做即可,重點在於步驟 5「Now, configure and build PHP」,在這個 configure 範例中只有使用最基本的「--with-mysql」來加入 MySQL 的支援,但這樣對 Joomla 的安裝來說是不夠的。

    在 Joomla 的安裝過程中,會確認 PHP 有 Zlib compression 支援,否則 Joomla 會無法順利安裝。按照官網上的 configure 方式是不包含 Zlib compression 支援的,必須要在 configure 的 option 裡面加上「--with-zlib」才行,也就是:「./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql --with-zlib

    那麼萬一像我一樣在 configure & make install PHP 之後,開始安裝 Joomla 時才在 check system requirement 的時候發現 PHP 缺少 Zlib compression 支援的話要怎麼辦呢?沒關係,這時候就要靠上一次執行 configure 時自動產生的 config.nice 檔了,config.nice 檔案會記錄上一次執行 configure 所使用的 options,只要編輯這個檔案,以相同的格式加入「--with-zlib」這個 option,然後執行「./config.nice」,最後再重新 make、make install 來重新安裝 PHP 就可以囉(安裝到相同的目錄,把剛剛安裝的版本蓋掉即可)!

    加入「--with-zlib」的 config.nice 內容如下:


    以第二次根據 config.nice 產生的 Make file 來執行 make 的時候,只會重新編譯新增的部份,因此速度很快。有了 config.nice 千萬要好好利用,不要傻傻的重新執行 configure,這樣會浪費很多時間阿!

    基本上要注意的地方就只有這裡,其他的步驟都按照官網上的範例來做就可以了。Joomla 的安裝也很簡單,基本上就是先檢查執行環境是否符合最低需求,而後把 Joomla 網站複製到指定的目錄,最後產生 configuration.php 的內容就可以運作了。

    可惜的是目前 Fabrik 套件的最新版 - 2.0.3 還不支援 Joomla 1.6,一整個就是裝不上去阿,只好過一陣子再測試囉!

    另外順便補充IT黑傑克前陣子寫的 Joomla & Drupal 比較文:

    2011年1月7日

    [IE8] 應用 Developer Tool 進行網頁內容自動填寫

    又到了學期末,在忙不完的報告海之中
    學校的教務系統突然來了一封信,提醒坎尼快去把教學意見調查表填完
    填自己喜愛的課沒問題,但同樣的動作要做幾百次可是麻煩至極
    尤其是沒什麼收獲的課 
    於是坎尼就寫了一段 javascript 讓機器自動填答 Orz

    I. 找尋 Pattern

    這類型的作業最重要的就是找到可利用的 Pattern
    我們來看一下要填寫的 Form
    DTQ02
    可以看到,要填答的選項很明顯的是用 input radio 組成
    打開 IE8 的 DevTool (快速鍵為 F12)
    DTQ03
    果然沒錯,所以只要取出所有的 radio 物件
    再決定要填寫哪個 value 即可

    II. 撰寫 script

    上面得知了目前狀況,稍微來厘清一下步驟: (以非常同意為例)
    1. 取得 radio 物件
    2. 找出 value 為 1 的物件
    3. 選取
    由於要選取物件,這邊坎尼載入擁有有強大選擇器的 jQuery
    var script;
    script = document.createElement("script");
    script.setAttribute('language', 'javascript');
    script.setAttribute('type', 'text/javascript');
    script.setAttribute('src', 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js');
    var head = document.getElementsByTagName('head')[0];
    head.appendChild(script);
    // 1 非常同意 3 普通 5 非常不同意
    $("input:radio[value=1]").attr("checked","checked"); 
    接著打開 DevTool,把 Tab 切換至指令碼
    將上述程式碼輸入並執行
    DTQ01
    很快地,30幾個單選選項都自動填答完成
    接著只要改幾個自己覺得不滿意的選項即可...

    III. 小結

    其實從這邊就可以看出自動化的威力
    簡單的幾行程式就可以把整個 Form 填完

    (以下為抱怨)
    從上面的 sample 其實能夠得知網路問卷的信度有多差
    總覺得研究者該做的不是把問卷發一發等著回收就好
    要了解對象的 Deep insight 才是重點
    可惜坎尼看到的都是隨意做一做就放進論文的資料來源
    這樣的論文真的會對世界有幫助嗎?

    如何將外接硬碟格式化給 Mac 做 Time Machine 備份,同時又可繼續在 Windows/Linux 系統中使用

    從去年12月多開始,我開始使用 Mac mini 作為工作機(要遠端連到 Mac Pro / Xserve 的話必須使用 Mac 上特殊的專屬軟體)。這台機器出廠時所附的 OS 是 Mac OS 10.5 Leopard,我用了一陣子以後想要升級到最新版的 10.6 Snow Leopard (10.6.5),在升級前就順便熟悉一下 Mac 內建的系統備份機制-Time Machine,沒想到在把我的 2.5" 外接硬碟設定為 Time Machine 備份媒體時遇到一些小問題。

    在 Time Machine 的設定畫面中可以看到,若該 partition 的檔案系統不支援作為 Time Machine 的備份媒體(也就是非 Mac OS Extended (Journaled) 的檔案系統格式),就會出現「reformat required (incompatible filesystem)」的訊息(如「DATA」那個 partition):



    經過一番摸索,為了使用上的便利性,加上現在外接硬碟容量多半都很大用不完 (500/640G 起跳),因此我決定把這顆硬碟切成兩個 partition:一個使用 Mac OS Extended (Journaled) 檔案系統(for Time Machine),另一個使用 NTFS 檔案系統(for Windows/Linux),這樣比較不傷腦筋。

    (如果把整個磁碟格式化成 Mac OS Extended (Journaled),不管是 Windows/Linux 都無法寫入;若把整個磁碟格式化成 NTFS,又無法用來作為 Time Machine 的備份磁碟。)

    這個工作可以輕易的使用 MacOS 內建的 Disk Utility 完成,首先從 Applications -> Utilities 中執行 Disk Utility,接著右邊的幾個 tab 就是主要的功能,都很簡單易用,切到「Partition」後,因為懶惰的關係我就直接在 Volume Scheme 選了2 Partitions(就是把整個磁碟對切成兩半):


    分別命名以及設定 Format 以後,點選右下角的 Apply 就可以了。

    完成後的兩個 partition 格式如下 (在 MacOS 中看到的 partition 資訊):


    Windows 只能讀到 DATA 這個格式為 NTFS 的 partition:



    接下來回到 Time Machine 的設定畫面,在 Select Disk 的地方選擇剛剛格式化成 Mac OS Extended (Journaled) 的那個 partition 就可以了:



    至於 Mac 不支援 NTFS 寫入的問題,請教過 Mac 老手以後,發現有以下幾個解決方案:

    1. NTFS Mounter:可開啟MacOS內建的NTFS寫入功能(預設僅唯讀),這是免費軟體,缺點是必須手動掛載。我覺得用起來還蠻簡單的,目前使用上也沒什麼問題。

    2. Paragon NTFS for Mac® OS X 8.0:目前有特價 USD $19.95 (聽說原價是 USD $39.95),由於目前我還不想花錢買 Mac 的軟體所以沒測試,但既然是商業軟體,應該要有不錯的品質。

    3. 用 MacOSX 10.6.5 內建的 exFAT,可參考 http://www.macuknow.com/node/7302。要注意的是 exFAT 要在 MacOSX 10.6.5 才有內建支援,10.5.X 是無法掛載 exFAT partition 的。我自己測試的結果是,雖然在 Windows 7 中對磁碟格式化時可選擇 exFAT 格式,但由 Mac 格式化成 exFAT 的磁碟在 Windows 7 中也無法正確掛載,也就無法讀取磁碟中的檔案了。

    根據該老手的說法,Paragon NTFS for Mac 使用起來相當穩定。

    以上就是我第一次在 Mac 上設定 Time Machine 備份的心得,希望以後會有更多跟 Mac 有關的文章 :D

    2011年1月3日

    jpgraph 如何顯示中文

    前陣子處理 php 繪製圖表的問題,用到 jpgraph 這個有名的繪圖函式庫,一開始用的都很順,但是 jpgraph 預設是無法正確顯示中文的,必須調整一些設定。

    Google 「jpgraph 顯示中文」以後,發現前幾篇文章都很有用,我覺得設定步驟寫得最完整而且最正確的是「麥克筆記:JPGraph如何顯示中文」,而「網站製作學習誌:如何讓 JpGraph 顯示中文」的範例也很清楚易懂。

    上面兩篇文章都寫的非常清楚,我就不用多說啦,這篇就當作是個小小的筆記吧 :D

    參考資料:

    2011年1月1日

    回顧2010年

    又過了一年,這個 blog 也已經2歲半了

    今年也是發生許許多多的事
    像是 Tim 本來要去考研究所,結果卻變成坎尼在念研究所
    Tim 反倒是跑去某家園藝公司…

    技術方面,.NET 4.0 出了、Silverlight 4 也出了,要學的東西又更多了
    Sun Micro 被 Oracle 買下、Microsoft Courier 專案中止
    iPad 及各式各樣平板也在年底資訊展吵的火熱

    雲端技術百家爭鳴,Amazon Web Service 也可以免費試用

    Kinect 在 25 天賣了 250 萬台 (坎尼的同學也貢獻了一台)
    支援裸眼3D的N3DS也即將發售

    還有許許多多無法塞進此篇文章的資訊
    過了這麼豐富的一年,希望大家都有從中得到什麼

    今天是 2011/01/01
    坎尼除了把書念好之外,或許會開始研究一些比較新的技術
    希望未來的365天能夠提供更優質的部落格內容 :)

    在 Blogger 官方的分享按鈕中新增「推到噗浪」

    今天在 Inside 網站看到一篇「AddThis:快速建置整合分享按鈕,還送你免費分析」,本來想要試用看看 AddThis 服務,但是發現要先註冊帳號就就放棄了。

    Google 了一下「blogger 分享按鈕」,發現官方早在今年年中已經有內建分享按鈕了!有支援 Google Buzz, GMail, Facebook, Twitter 等,但是仔細看一下才發現本部落格的文章並沒有出現這些按鈕,後來找到「Blogger最新推出「New Share Buttons」分享按鈕,超有質感!」這篇文章,根據說明就可以順利的讓分享按鈕顯示出來啦!
    (由此可知 Blogger 有些內建的範本對分享按鈕的支援還沒更新,才會導致漏掉 share button 那個 div 的狀況)

    接下來的問題是 Blogger 官方內建的分享按鈕中不包括台灣 & 東南亞地區流行的噗浪 (Plurk),因此經過一番搜尋,又找到「新作法!換樣板也不失效 - Blogger 插入 Plurk 分享按鈕,跟官方按鈕無縫整合,並自訂按鈕順序」這篇文章,我跟作者的習慣一樣,能用官方的東西就盡量用官方的,以避免一些奇怪的小問題 (所以前陣子才會把blogger touch服務換成Blogger內建的行動版網頁服務)。

    照著文章中的說明實作之後,現在本格所有的文章最後都會出現分享按鈕啦!如下圖:


    以上是2011年第一天的新氣象,今年也要繼續努力阿!

    Google Spreadsheet 裡用規則運算式

    最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D