highlight.js

星期四, 2月 16, 2012

IE 歷史悠久的捉迷藏臭蟲 (Peek-a-boo bug)

同事之前實作了一個網頁 AP, 可是在 IE 上會發生文字隱形的狀況, 但是字仍然是存在, 只是看不到, 如果在 IE8 上可以用滑鼠選取該段文字, 或是把隱形的那一段捲到顯示區域外, 再捲回來就可以看到了, 可是如果是 IE9, 上面的方法都無效, 但如果按 Alt 顯示功能表或是按 F12 顯示開發者工具列, 就顯示出來了, 但在隱藏功能表或是開發者工具列, 文字就又隱形。

追查了之後才發現, 這應該是 IE 中歷史已經非常悠久的捉迷藏臭蟲 (Peek-a-boo bug), 詳細的解說可以參考 IE6 Peekaboo Bug 這篇文章, 基本上就是 IE 解譯 CSS 的問題, 而解決方案可以參考 Fixing invisible or disappearing text and double margins in Internet Explorer 這篇文章, 簡而言之, 就是在會消失的文字所屬的 div 加上這樣的 CSS style:

{ height: 0.01%; }

不過爬文的過程中, 明明有人說 IE7 已經搞定這個 bug 了, 顯然 IE 果然很複雜, 這麼多年了, 我還可以在 IE9 上遇到這樣的問題!



星期五, 2月 10, 2012

node.js 的 ServerResponse 回應 binary data 的問題

這兩天在測試時一直被一個問題困擾, 我是用 node.js 寫一個簡單的 HTTP Server 接收 GET request, 這個 server 會把傳入的 GET 參數 (都是表示整數的字串) 轉成整數後加總傳回, 一開始都用文字的方式傳回, 測試也都正常, 可是因為我的 client 要處理字串有點麻煩, 所以當我嘗試把加總值改成用 binary data 傳回一個 16 位元的整數值時, client 這邊一直收不到答案, 經過一番測試, 發現 node.js 這邊會把 HTTP respnse header 與 binary data 分開成兩次傳回, client 這邊沒有考慮到這個問, 於是就收不到答案了。

後來直接看了一下 node.js 裡頭 http.js 原始碼, 發現果然如果使用 ServerResponse.end() 或是 ServerResponse.Write() 送出回應時, 如果 header 尚未送出, 而要回應的資料是字串的話, 就會直接將 header 與回應內容串在一起後送出, 但若是回應的是 binary data, 就會將 header 與 binary data 分開送, 事實上, 只要傳送的資料的編碼不同, 就會分開傳送。

如果您也使用 node.js 的話, 希望這個經驗能夠避免一些問題。

命令提示字元 (DOS Prompt) 下的小技巧

天啊, 我居然今天才發現, 原來在 DOS prompt 下, 可以使用 tab 鍵直接幫你輸入檔案名稱或是目錄名稱, 這在輸入指令或是參數時超好用, 尤其時檔案名稱若是包含有空白字元、或是檔名有夠長的時候, 簡直就是救星!

舉例來說, 如果我在某個資料夾下有兩個檔案, 分別是 test.js 與 testone.js, 當我在 DOS Prompt 下按 tab 鍵, 就會出現 test.js, 再按一次則會出現 testong.js, 如此輪流。如果你先鍵入 t, 再按 tab 鍵, 那麼就會出現以 t 開頭的第一個檔案名稱, 更棒的是, 如果檔案名稱包含有空白字元, 也會幫你加上 "" 括起來, 省去自己鍵入檔名的麻煩。

星期三, 2月 08, 2012

Android Screen Cast 軟體--可將 Android 裝置畫面顯示在 PC 桌面上的軟體

最近因為同事有需求要再簡報時直接在 PC 上秀出 Android 手機的畫面, 因此找了一下, 試過之後以 Android Screen Cast 表現最佳, 其他試過的軟體雖然也都可以運作, 但因為 fps 太低, 所以 PC 上看到的畫面都是斷斷續續的, 不像是連續操作的動作。這類軟體運最方式大都類似, 具有以下特點:
  1. 都需要事先裝好 Android SDK (當然, 一定得先裝好 JDK)
  2. 都需要使用 ADB, 所以也要事先裝好所使用手機的 ADB driver
  3. 都是使用 Java 撰寫, 所以只要 Android SDK 可用的平台, 也都可以使用
  4. 手機要設定『設定/應用程式/開發/USB除錯』
如果執行後出現以下錯誤訊息:

點選『詳細』鈕後, 若錯誤原因是『Timeout getting device list』:

請直接使用 SDK 中的 ADB 工具程式執行 "adb devices" 指令連接你的 Android 裝置:

應該就可以執行了, 像是以下這個畫面就可以看到 Android 的照相畫面:


目前這個軟體的 fps 大約可到每秒 5 張畫面, 因此在 PC 上看起來雖然還是有些頓, 但已經比我試過的其他軟體每秒才 1 張畫面好多了。

星期二, 1月 31, 2012

Appcelerator Titanium 的 Java 設定

Appcelerator Titanium 是個很吸引人的開發工具, 不過在試驗的過程中, 每當要建置專案時, 總是說需要 JDK 1.6 版, 可是我明明安裝的就是 1.6.20, 試過設定 JAVA_HOME 環境變數還是有問題, 最後看了這個討論串「ERROR] Error locating JDK: set $JAVA_HOME or put javac and jarsigner on your $PATH」後, 改為將 JDK 的 Bin 資料夾設定到 PATH 環境變數中, 果然就搞定了, 特別記下來, 免得以後在別的機器上要測試時又遇到!

星期三, 11月 30, 2011

免費的 JavaScript 檔案存放空間:Free Javascript Hosting

因為想把 JavaScript library 放在網路上, 以便能在 blogger 的網誌上使用, 順手找了一下, 果然有免費的 JavaScript 檔案存放空間, 而且上載程序超簡單, 只要填入 email 就可以上載, 之後就可以在任一網頁中引用了, 真不賴!

Free Javascript Hosting

星期四, 11月 24, 2011

修改 .NET 程式的版本

由於工作的關係, 常會用 C# 寫點小工具給同事使用, 修改多次後, 版本就亂了, 同事也很難分辨手上的程式到底是哪一個版本?還好, 在 application version (major and minor) c# winform 這一個問答中找到, 原來只要開啟專案中 Properties 下的 AssemblyInfo.cs 檔案, 即可修改版本編號了, 真是學藝不精。

補充:感謝網友提醒, 其實應該是在「專案/屬性/應用程式/組件資訊」這裡改會更方便才對!