1. 沒網路...

    好不容易等到周末, 結果一回家就沒電話沒網路... 還以為沒繳錢... 打去中華電信問才知道今晚施工, 要到明早才好... :@

    沒事做只好貼一貼來抱怨一下 :@

    2006/11/11 有的沒的

  2. CSS 擋右鍵

    先講在前面, 我是很不喜歡這種無聊的網站... 擋右鍵幹嘛? 也許站長真的覺的他的內容很了不起大家都想偷... 不過右鍵按下去一堆功能, 又不是每個人點右鍵都是要偷內容... 被當小偷看待的感覺真的挺不爽.. 真的要看, fillder 開下去什麼都看的到..

    好, 牢騷發完了 (H), 今天不是要講這個.. 因為工作的關係, 開發的系統是處理企業內部的 web content, 免不了有這種檔右鍵的需求, 這種 code 大家或多或少都寫過, 不過都寫的很煩吧...

    "什麼!!! 每一頁都要檔?"

    "每一頁都加 code 要加到什麼時後..."

    接到這種需求大概都想扁人吧, 咳咳... 我就是因為懶所以想到一招省事的... 先來看一下這個網頁, 看看大家追不追的到右鍵是怎麼擋的...

    test html page (full source)

    看出來為什麼右鍵被停用了嗎? 沒有 script tag, 也沒有 include 啥鬼東西, 開這個 page 的 link 也沒動啥手腳... 開 page 時 ie 也沒要求下載啥奇怪的軟體...

    不過, 右鍵的確是被 disable 了, 秘密就在這段 css ..

    body { behavior:url('context-menu-blocker.htc'); }

    這是 Microsoft 在 IE5 之後就引進的 DHTML Behaviors. CSS 是為了樣式而設計出來的, 目的就是希望一組網頁只要有共通的樣式, 就不用每一頁去調字型顏色等等... 只要透過 CSS 就可以把整個網站的每一頁, 在特定 tag 套用特定的樣式...

    "只能套用外觀嗎? 如果程式也可以這樣撒出去就好了"

    沒錯, behavior 就是這個目的, 把你想怎樣 "改造" 這個 tag 的 script 寫在 .htc 裡, 再用 css 把它綁到 tag 上, 一切就完成了.

    這個例子的 htc 只有去攔捷 oncontextmenu 事件, 攔下來後只有做取消事件的動作而以. 藉著 css 就可以把這功能套用到 page 上了... 當然, 你的網站有 css 的話, 這個功能馬上就套用到你所有的網頁了.

    這些技巧果然說穿了就不值錢... 咳咳, 不過 HTC 還有很多其它更讚的應用, 因為它很精巧的把 code 跟 tag binding 處理的很好, 很可惜這技術好像不大登的上抬面, 用過的人似乎不多, IE5.0 推出後, IE5.5 對 htc 有些改進, 之後就沒有啥新的進展了..

    不知道 IE7 對 htc 有啥改進? 有空再來試試了 :D

    2006/11/11 HTML/CSS 技術隨筆

  3. 小紅點缺料? Lenovo Sucks...

    難道 thinkpad 換東家之後真的要走下坡了嘛... 小紅點缺料? ouch ...

    從我之前的 X23, 到現在的 X31, 總共五年有了吧, 這倒是第一次碰到要索取還缺料的... 雖然小紅點的定價並不便宜, 不過也不用這樣吧, 東西小又不佔空間, 放了也不會壞, 全系列 ThinkPad 都通用的小紅點, 應該是很好控制庫存才對, 會用到缺料, 那真是 costdown 過頭了吧? 不然就是 lenovo 覺的三個月索取一次太便宜 user 了, 就用缺料來控制 user 消耗速度? hmmm...

    也許只是真的 "剛好" 缺料而以, 我也不差晚一陣子拿到小紅點, 只不過單純不爽發發牢騷... 下一台 notebook 還要不要買 ThinkPad 真的該好好考慮了, 購買動機好像真的只剩 keyboard ... :~~

    2006/11/04 有的沒的

  4. Canon Digital Camera 記憶卡歸檔工具 - RAW Support Update

    每次貼新東西, 小熊子都會來支持一下... 這次寫的記憶卡歸檔工具, 既然他抱怨了一下不支援 RAW file, 那當然要來找一下 solution.. 哈哈..

    順手找了一下, 發現資源真少, 追到最後只有一些 open source 的 project 提供 Canon 的 Raw File Access, 另外 Canon 也有自己的一套 Digital Camera SDK ( free, C++ only ), 要寫信去要, 不過不用收費就是.. 其它都是不成熟的 project, 看起來都不是很可靠 :S

    咳, c++ 已經好幾年沒碰了, 拿來唬唬還可以, 真的要動手就算了... 結果剛好讓我找到一條線索... Microsoft 提供一個簡單的 viewer, 可以直接看各家的 RAW file, 名字落落長: Microsoft RAW Image Thumbnailer and Viewer for Windows XP ...

    印相中這個工具可以看 canon crw, 而且安裝的系統需求是要裝 .net framework..

    "該不會有現成的 .net assembly 可以讀 canon raw file 的內部資訊吧?"

    試了一下, 隨便找個看的順眼的 dll 反組譯一下, 老天真是照顧我啊, 中獎!! 哇哈哈... 原本 DigitalCameraFiler.exe 的程式架構其實早就想好要怎麼改了, 只是之前一直找不到適當的 lib..

    找到的 assembly 用法很簡單, 只要先裝好 Microsoft RAW Image Thumbnailer and Viewer for Windows XP, 就可以在安裝目錄找到這個 assembly dll: RawManager.Interop.dll

    使用的方式也很簡單 (感謝 Microsoft 工程師的 coding style 都很一致... ), 隨便試一下就試出來了:

     

       22     CRawViewerClass raw = new CRawViewerClass();

       23     raw.Load(@"c:\CRW_1234.crw");

       24     Console.WriteLine("Camera Model: {0}", raw.CameraModel);

     

    這 Interop assembly 寫的還真不錯... 看起來真正做事的仍然是 Canon Digital Camera SDK... 不過現在我也可以用 C# 很簡單的叫來用, 哈哈, 感覺真爽...

    不過還沒挖到可以 edit raw 的 API, 感覺遜了一點, 但是小熊子都說了...

    chicken: 不過抓的東西很有限 :S, 也還沒辦法自動轉正
    Michael (小熊子): raw 不需要轉正說
    Michael (小熊子): raw 只要知道啥米時間拍的應該就 OK

    所以這部份就再說了 [H]... 哈哈...

    更新過的檔案下載: [DigitalCameraFilerSetup.msi]
    使用前請先安裝: Microsoft RAW Image Thumbnailer and Viewer for Windows XP

    2006/11/04 .NET 技術隨筆 有的沒的

  5. Canon Digital Camera 相機獨享 - 記憶卡歸檔工具

    用數位相機的人或多或少都有這困擾吧? 不用底片錢, 也不用洗出來, 相機拿起來就是拼命拍... 拍完後, 不要說後製作了, 光是把相片檔案歸檔就有點麻煩...

     

    "我久久才 copy 一次照片, 要照日期分目錄真麻煩"

    "video 檔歸檔也麻煩"

    "直拍的照片要轉 90' 得一張一張看.."

    "兩台相機檔名重覆... " <--- 這個大概只有我會碰到吧, 我家的相機都是 canon ...

    "...."

     

    這些問題, 其實都有很好的工具可以解決, Google 的那套 Picasa 就很棒, 不然 Adobe 的 Album, AcdSee 也都有 solution ...

    不過我就是不想裝一些五四三的啊... 看照片我都只用 windows xp 內建的 image viewer, 我只缺一個很簡單的工具, 把記憶卡的照片檔案自動搬到我要的目錄就好... 可以的話我甚至不要 windows 介面的, 可以用命令列執行的更棒... (我果然是老人.. :~~~~)

    最後是自己寫一個來用... 過去是寫簡單的批次檔就搞定, 也用了兩年了, 成效很好, 我就直接把內容貼出來, 有需要的人可以拿去用...

     

    set DATETEXT=%DATE:~0,4%-%DATE:~5,2%%DATE:~8,2%
    if not "%2"=="" set DATETEXT=%2

    set TRGDIR="c:\Photos\%DATETEXT% [%1]\"
    md %TRGDIR%

    @echo "處理 F:\DCIM 的照片..."
    @ for /R F:\DCIM %%f in (*.jpg) do @echo 移動照片中... %%f && @move /-Y %%f %TRGDIR% > nul
    @ for /R F:\DCIM %%f in (*.crw) do @echo 移動照片中... %%f && @move /-Y %%f %TRGDIR% > nul
    @ for /R F:\DCIM %%f in (*.avi) do @echo 移動影片中... %%f && @move /-Y %%f "c:\videos\input [dc-avi]\%DATETEXT% [%1 #%%~nf].avi" > nul
    @ for /R F:\DCIM %%f in (*.thm) do @echo 刪除影片縮圖... %%f && @del /f /q %%f > nul

     

    批次檔的方式已經可以解決這些問題:

    1. 依日期命名, 像這樣的格式:
      c:\photos\2006-0101 [去公園]\IMG_9999.jpg
    2. 因為我有另外處理 video file 的動作, 因此 avi 檔會另外分開放, 格式為:
      c:\videos\2006-0101 [去公園 #MVI_9999].avi
    3. 只要執行這指令, 檔案就都歸好了:
      copypic.cmd 去公園
      或是自己指定日期...
      copypic.cmd 去公園 2006-0101

    不過用起來還是有一點小缺點:

    1. 日期判定不精確, 因為只寫批次檔的話, 我找不到方法把檔案日期切一段出來... 因此歸檔的檔名只能用 copy 時的日期來算... 常常白天拍, 晚上過十二點哄完小孩才來 copy, 日期就差一天
    2. 因為 (1), 累積了好幾天的照片只能混在一起, 分不開
    3. 沒辦法以相機名稱命名, 兩台相機照出來的檔名常打架
    4. 要自動轉正

    像是要讀取 EXIF 的部份, 要光靠批次檔真的是太勉強了... 本來想寫個小工具搭配批次檔用, 不過發現花的工夫跟本差不多... 就直接寫了一個小工具 [DigitalCameraFiler.exe], 取代掉上面的批次檔了..

    需要的人可以下載去用, 不過喜歡用命令列的人應該不多吧... 哈哈... 用法很簡單... 請先確定你的電腦有安裝 Microsoft .Net Framework 2.0... 安裝設定的方式:

    1. 編輯設定檔: DigitalCameraFiler.exe.config

          1 <?xml version="1.0" encoding="utf-8" ?>

          2 <configuration>

          3  <appSettings>

          4   <add key="default.title" value="未定標題"/>

          5   <add key="video.targetPattern"

          6    value="c:\video\{0:yyyy-MMdd} [{1} #{4}].avi" />

          7   <add key="general.targetPattern"

          8    value="c:\photos\{0:yyyy-MMdd} [{1}]\{3}" />

          9   <add key="photo.targetPattern"

         10    value="c:\photos\{0:yyyy-MMdd} [{1}]\{2} #{3}" />

         11   <add key="arguments"

         12    value="LastWriteTime,Title,Model,Name,
      FileNameWithoutExtension
      "/>

         13  </appSettings>

         14 </configuration>

      default.title: 預設的主題, 執行時沒給 title 的話就用這個代替
      video.targetPattern: 放 *.avi 檔的位置, 其中 {0} {1} .. 會用最後面的 arguments 依序代替
      general.targetPattern: 放 *.crw 檔的位置
      photo.targetPattern: 放 *.jpg 檔的位置
    2. 執行時, 打開 DOS Prompt, 切到目錄下, 執行:
      DigitalCameraFilter.exe F:\ 公園外拍
      其中, F:\ 是指你記憶卡的路逕, "公園外拍" 是主題

    photo 為例, 最後檔案會被歸到:

    c:\photos\2006-1102 [公園外拍]\Canon PowerShot G2 #IMG_1234.jpg

    大概就是這樣, 自己寫來用的, 覺的好用的話就鼓勵一下吧 :D

    下載程式

    2006/11/03 .NET 技術隨筆 有的沒的