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.

    它所謂的 "搖控" 不是只有鍵盤對應, 幫你按按鈕而以. 比較炫的是它會把一些相關資訊傳回手機, 顯示在手機的畫面上... 我對 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. Ouch, 為什麼沒有 c720w ...

    Dopod 官方網站: http://www.dopodasia.com/global/tw/news/20070503_NR_Dopod_WM6_Upgrade_TW.html

    多普達提供Windows Mobile 6升級計畫: U1000、P800W、CHT9000與CHT9100免費升級

     

    很好很好, 沒有我這台 C720W 就算了, 但是同一台機器, 一模一樣, 為什麼國外的 T-Mobile 就提供升級到 WM6 啊啊啊啊...

    http://www.t-mobile.com/wmupgrade/

     

    雖然已經從XXX扛回這份升級程式了, 不過沒膽升級... 哈哈, 怕升級之後一些內建的軟體灌不回去, 升級後一定是沒保固了, 也沒有還原的軟體可以用, 如果升級升壞了不就欲哭無淚...

    有人聽過誰有膽量升級的消息嘛? 提供一下... :D, 不過 HTC / DOPOD 你也爭氣點, 都變一家人了, 快點提供 C720W 升級到 WM6 的 Rom Code 吧...

    2007/05/19 敗家 有的沒的

  3. Canon PowerShot S5 IS 出來了

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

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

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

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

    2007/05/10 敗家 有的沒的

  4. 偷偷升級到 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 技術隨筆 有的沒的

  5. 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.... 截到宣告如下:

       1:  internal WinINETProxyInfo piPrior;
    
       2:  private WinINETProxyInfo piThis;
    

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

     

    B 計劃:

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

       1:  static void Main(string[] args)
    
       2:  {
    
       3:      WinINETProxyInfo proxy = new WinINETProxyInfo();
    
       4:      proxy.GetFromWinINET(null);
    
       5:      proxy.sHostsThatBypass = "*.chicken-house.net;*.hinet.net;";
    
       6:      proxy.SetToWinINET(null);
    
       7:      return;
    
       8:  }
    

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

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

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

    真是嘖嘖嘖... 大概猜的出問題在那, 這種外掛的 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:

       1:  WinINETProxyInfo proxy = new WinINETProxyInfo();
    
       2:  proxy.GetFromWinINET(null);
    
       3:  proxy.sHostsThatBypass = "*.chicken-house.net;*.hinet.net;";
    
       4:  proxy.SetToWinINET(null);
    

    改寫為:

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

     

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

     

    D 計劃:

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

       1:  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 技術隨筆