1. 一個一萬多的簡報器... Orz..

    看到我 MSN 的 nickname 寫這句 “一個一萬多的簡報器… Orz..” 一定會想, 那個潘那花這個錢… 哈哈, 其實是我無意間發現這個軟體: Salling Clicker for Windows 3.5… 那什麼東西要一萬多? 當然是我的 Dopod c720w

    之前一直很羨幕 Sony Ericsson 的使用者, 它們的藍芽手機總有一堆有趣的應用, 像是有人做出用手機搖控的藍芽搖控車之類的, 另外也有軟體可以讓手機透過藍芽當作無線鍵盤+滑鼠. 這個當然不大可能取代真的滑鼠, 不過拿來當簡報器倒是挺好用的, 反正手機一定會隨手帶著, 用慣 ThinkPad 的我也不會隨身再帶隻 mouse, 多方便…

    無奈我用的都是 Windows Mobile 的手機, 無緣… 直到前兩天發現這套軟體, 抓下來試用之後發現, 真是太棒了.. :D, 它就是讓你透過藍芽 (也包括 WiFi), 來當電腦的搖控器. 可以搖控 iTune / Media Player / Power Point.

    Salling Clicker Interface

    它所謂的 “搖控” 不是只有鍵盤對應, 幫你按按鈕而以. 比較炫的是它會把一些相關資訊傳回手機, 顯示在手機的畫面上… 我對 iTune / Media Player 是沒啥興趣, 所以我只介紹 PowerPoint 的部份… 這張圖是官方網站提供的, 實際上的操作畫面就是長這樣. 除了最基本的上一頁下一頁控制之外, 它也會把每頁 SLIDE 的縮圖, 標題, 還有內文傳到手機上. 舉個 use case:

    1. 開始演講, 打開手機跟電腦連線, 打開 Power Point 準備簡報…
    2. 手機輸入預計簡報時間, 開始倒數
    3. 畫面會顯示目前的投影片相關資訊
    4. 講到一半忘了準備好的橋段, 按一下 Notes 可以偷看 Power Point 的備忘稿
    5. 簡報順利講完, 到了 Q&A 時間, 有人問前面的問題
    6. 剛好有準備好的投影片, 按一下 “Select Slides…”, 畫面列出所有的投影片標題, 選好直接跳到你要的那一頁
    7. 演講順利結束, 按一下 “Shutdown PC”, notebook 自動關機. 電腦收到包包很帥的走出會場..

    其實這個使用案例很常見, 有作過簡報的大概都經歷過, 不過標紅字的部份, 大部份的人應該都是直接拿 MOUSE 在電腦上面操作吧… 熟電腦的人可能會用雙營幕, 在自己看的畫面上顯示這些資訊, 不過這樣就失掉用簡報器的目的了, 得待在電腦前面..

    其它的 iTune / Media Player 搖控就沒那麼神奇了, 也是一樣把曲目還有專輯唱片的封面傳到手機上, 讓你可以自己控制要放那一首… 目前播放的進度列也會顯示出來, 不過我比較少聽, 就用不大到…

    這個軟體對 Windows Mobile 的使用者算是一大福音吧? 因為真的很少看到這類的軟體有 WM5 版的… 分享一下這個資訊, 需要的去買一套吧 [H], 很值得, 如果不想買的話就… 努力找找… 哈哈

    2007/05/19 Tips 技術隨筆 敗家 有的沒的

  2. Canon PowerShot S5 IS 出來了

    無意間逛了逛 Canon 網站,才發現 S5 IS 的消息 [:D]

    規格跟前一代 S3 IS 比起來沒差多少,除了相素從 600M 跳到 800M 之外,其它都差不多,除了 S5 終於多了熱靴… [:D]

    之前 S3 就是因為不能裝閃光燈害我猶豫了半天 (龜毛篇: G7, S2),現在看到有了真心動,不曉得一台要價多少… 加上前陣子有人研究出 S3 如何解開封印,能夠直接存 RAW File,還不用重刷軔體,聽起來真是不錯,等一陣子看看 S5 能不能依樣畫葫蘆… 可以的話就太讚了 [Y]

    不過最近花錢花的兇,省一點好了 :~ 反正都龜了那麼久…

    2007/05/10 敗家 有的沒的

  3. 偷偷升級到 CS2007 ..

    好像沒啥人發現的樣子, 哈哈, 本站兩個禮拜前升級到 CS2007 了, 升級完面版馬上就調成舊的, 外觀看起來一模一樣…

    功能當然有差, 不過我就不提了, 請直接到官方網站看就好. 升級很簡單, DB upgrade + File upgrade 就好了. 比較麻煩的是我自己客製過的 theme 跟 control ..

    CS2007 的樣版系統, 從當年的 1.0 到 2.x 都一樣, 用了一堆動態載入 UserControl 的方式, 把版面配置的部份留在 User Control 的 TAG, 而後端的 data / logic 則是寫在 code. 因此要改它的樣版, 得花一番功夫瞭解它的作法.. 到了 CS2007, 總算改用 ASP.NET 2.0 標準作法了, 每套樣版就是一個 master page + config 而以 (theme.master, theme.config), 以 BLOG 來說, 每個頁面就很單純是一個 .aspx, 改起來方便多了, 不需要花什麼大腦就找的到要改那裡…

    另一個 User Control, 舊的 API 有些都不能用了, 趁著這次改版我就直接把這幾個 User Control 改寫一次了. 以前都要寫 DLL 也是很麻煩, 這次一起改成 .ascx + .cs 就丟著了, deployment 方便嘛…

    至於 CS2007 的新功能, 還沒很仔細的研究, 至少現在平台 ready 了 :D

    2007/05/05 .NET Community Server 技術隨筆 有的沒的

  4. Fiddler 跟 TFS 相衝的問題解決 - II

    «續上篇»

    計劃好之後, 我打算的流程是這樣:

    1. Fiddler 存下目前的 Proxy Config
    2. Fiddler 把 WinINET 的 Proxy 改為 127.0.0.1:8888
    3. 在 OnAttach 裡加上自定的 Script, 就抄 (2) 的 CODE 改一改再把我要的值加上去

    作法想好後, 連放 CODE 的地方都弄好了. Fiddler 直接用現成的 .net language 當成 script 使用, 就是直接修改 CustomRules.js 這個檔案. 裡面已經定義好 Method: OnAttach( ), 會在 Fiddler 開始 Capture Traffic 後被呼叫, 看來我要做的事 (3) 只要放在裡面就好, (1) 及 (2) 是 Fiddler 自己本來就會做的部份.

    而 Fiddler 不再 Capture Traffic 時, 我什麼都不必作, 因為 Fiddler 預設的動作就是把 (1) 存下來的東西再填回 IE 的 Proxy 設定…

    其實這方法還可以解決附帶的幾個問題, 像我在家用 VPN, 或是在公司用無線網路, Fiddler 也常常失效, 因為它預設都只改 [區域連線] 的 Proxy 設定… 不過 IE 又很貼心的讓每個 network adapter 都可以有自己的 proxy settings, 你只要不是用預設的 NIC 就沒救了. 雖然手動把你用的網路連線 proxy 改為 127.0.0.1:8888 就可以動, 不過每次都改也是很煩人…

    好, 有足夠的誘因了, 開始動手…

    A 計劃:

    開始用 Reflector 追 Fiddler 的程式, Bingo… 主程式是 Fiddler.frmViewer, 我要的東西就藏在 oProxy 這個 static field 裡. 看了 oProxy 的型別是 Fiddler.Proxy, 繼續追下去… My God…. 截到宣告如下:

    internal WinINETProxyInfo piPrior;
    private WinINETProxyInfo piThis;
    

    piPrior 放的是存起來的設定, piThis 則是被 Fiddler 填入的設定, 沒救, private field… 連用 reflection 的機會都沒有, 只好放棄, 想第二條路…

    B 計劃:

    碰到鐵板, 繼續鑽別條路. 我先自己開個 console application 做簡單的測試, 先把 Fiddler.exe 改成 Fiddler.dll, 然後設定 project 參考這個 .dll, 依照 Fiddler 主程式的用法測了一下這段 code:

    static void Main(string[] args)
    {
        WinINETProxyInfo proxy = new WinINETProxyInfo();
        proxy.GetFromWinINET(null);
        proxy.sHostsThatBypass = "*.chicken-house.net;*.hinet.net;";
        proxy.SetToWinINET(null);
        return;
    }
    

    哇哈哈, 真的有效, Run 過之後開控制台的 Internet Options 裡的 PROXY 設定, 真的被改過來了, 心想太好了, 這段 code 貼到 CustomRule.js 就一切搞定…

    對, 這麼順利的話就不會分兩篇了, 誰曉得貼上去後 Fiddler 就給我唉這段 message:

    Fiddler script error

    按了 [確定] 後就變這樣:

    Fiddler script compilation error

    真是嘖嘖嘖… 大概猜的出問題在那, 這種外掛的 script 多半動態 Load Script, 動態 compile, 同時會載入到另一個獨立的 AppDomain, 看起來在 script 可用的範圍內, 是存取不到 Fiddler.WinINETProxyInfo 這個類別…

    AppDomain 真是讓人恨的牙癢癢的, 不過它還真是個很棒的設計. 在 .net 的世界, AppDomain 可以在不降低效能的前題下, 達到如傳統 OS Process 的安全隔離層級, 而且又有 thread 的快速 share data 方式… 可以說有 process 的好處, 又無 process 的負耽.

    講那麼多幹嘛? 問題還是無解… 不過有了上面 console application 試驗後, 至少讓我證明這條路是可行的, 只不過 script 得再繞一條路試看看…

    C 計劃:

    我的目的只是要在 CustomRule.js 的 OnAttach 裡執行那四行 code 而以, 只好脫褲子放屁了, 四行可以搞定的事多花幾行來寫, 把之前搭配 Attribute 寫 Library 學到的那套 Reflection 搬出來用, 原本的這四行 code:

    WinINETProxyInfo proxy = new WinINETProxyInfo();
    proxy.GetFromWinINET(null);
    proxy.sHostsThatBypass = "*.chicken-house.net;*.hinet.net;";
    proxy.SetToWinINET(null);
    

    改寫為:

    System.Reflection.Assembly fiddler = System.Reflection.Assembly.LoadFrom(@"Fiddler.exe");
    
    object proxy = fiddler.CreateInstance("Fiddler.WinINETProxyInfo");
    Type proxyType = fiddler.GetType("Fiddler.WinINETProxyInfo");
    
    proxyType.GetMethod("GetFromWinINET").Invoke(proxy, new object[] { null as string });
    proxyType.GetProperty("sHostsThatBypass").SetValue(proxy, "http://ld-fsweb.learningdigital.com:8080;", null);
    proxyType.GetMethod("SetToWinINET").Invoke(proxy, new object[] { null as string });
    

    很好, 繞了一大圈, 結果還是不行… [:@], 結果跟 B 計劃一樣, 我就不貼了…

    D 計劃:

    好, 最後一招了, 別轉台… 實在是受不了了, 最沒品的那招拿出來用… 把 B 計劃寫的 Console App 拿來用, 東西都寫好丟在 Fiddler 的目錄, 檔名叫 myproxycfg.exe, 然後在 CustomRules.js 裡呼叫它…

    System.Diagnostics.Process.Start("myproxycfg.exe");
    

    嗯, Fiddler 啟用 Capture Traffic 後, 果然就 OK 了, 這招都出了還不行就沒辦法了.. 吊個 .exe 在那邊看了實在很礙眼, 不過眼不見為淨啦, 可以 work 就好…

    IE Proxy 的設定真的如我所料, Fiddler 啟動後就改掉了, Fiddler 停掉後就一切揮復原狀, [Y][Y][Y], 以後不用為了 TFS 要 Get Latest Version 還得去關 Fiddler ….

    果然懶才是資訊科技進步的原動力啊, 哈哈.., 謝謝收看.

    2007/04/24 .NET Tips 技術隨筆

  5. Fiddler 跟 TFS 相衝的問題解決 - I

    Fiddler, 應該不用我多介紹了, 一套很好用的 Http Debugging Tool. 它的原理是把自己當成 Proxy, 讓所有的 Http 流量都經過它再轉出去, 讓你能看到你的程式到底跟網站講了那些話, 尤其是新興的 AJAX 更需要這種 Tools, 因為一堆東西是你按右鍵 + view source 所看不到的…

    不過以上不是重點, 重點是我常常搭配 visual studio 2005 一起使用, 每當 Fiddler 開啟, 我再使用 vs2005 的 TFS 相關功能時, vs2005 跟 TFS 中間的 http connection 就被欄下來不動了.

    TFS connection blocked

    Fiddler Log:

    Fiddler HTTP 401 error

    HTTP 401, 看起來就像是 vs2005 傳出去的身份驗證機制沒有成功的通過 Fiddler 傳到 server, 導至 server 回應 401 回報沒有權限… vs2005 回的 ERROR MESSAGE 則是看起來跟這件事一點關聯都沒有…

    正規的解法應該是想辦法讓 vs2005 的驗證能過 Fiddler Proxy … 不過太懶了, 我發現只要開 Fiddler 等它自動改完 IE Proxy Settings 後再把 TFS 網址加到 bypass host list 後就一切正常了, 所以腦筋就動到怎麼讓 Fidder 自動調整的 Proxy Settings 能自動把 TFS 網址加到忽略清單內. 我打算的流程是這樣:

    1. Fiddler 存下目前的 Proxy Config
    2. Fiddler 把 WinINET 的 Proxy 改為 127.0.0.1:8888
    3. 在 OnAttach 裡加上自定的 Script, 就抄 (2) 的 CODE 改一改再把我要的值加上去

    想的很好, 就開始動工了, 不過開始動工才發現, 原來一路上困難重重… -_-

    « 下期待續 »

    2007/04/23 .NET Tips 技術隨筆