VMWare與Virtual PC的硬碟減肥法

前陣子看到一本雜誌提到,最近許多企業關注的兩個技術:虛擬化與SOA,

其中的虛擬化指的就是使用虛擬機器來減少設備、管理的成本,而其中我較常聽到的就是VMWareVirtual PC了~

我用VMWare比較多,Virtual PC也是一年前第一次使用,當時因為做教材的關係,花在這上面不少時間,

就發現明明虛擬機器系統中的硬碟就只有幾G,外面實體確是2~3倍,甚至越用越大,這時我才發現不對,於是找半天,總算看到有文章談到了這部份的解決方法。

網路上來找的到很多人談到其他方式,但實際上最正統有用的就只有以下的方法~

VMWare

關於VMWare的硬碟減肥請先參考Vmware磁盤減肥方法

其中的要點如下

  • 打開VMWare,並啟動作業系統
  • 先確定你的虛擬機器的作業系統有沒有裝VMWare Tools(如果還沒裝,相信你應該是新手,請在選單選VM→Install VMWare Tools...)
  • 將系統裡的垃圾文件清理乾淨,然後關閉系統
  • 選擇你的虛擬機器選項下的〞Virtual Machine Settings〞,在跳出視窗的〞Hardware〞,選擇要處理的硬碟(Hard Disk),再點右邊的〞Defragment〞進行碎片整理
  • 碎片整理完成後啟動作業系統
  • 進入系統後點右下角的VMWare Tools圖標會彈出對話框
  • 選點「shrink」
  • 選擇要處理的硬碟,然後就選是,讓它開始處理,中間跳出視窗也選確定,直到它說完成,就可以關閉虛擬的OS

處理會花點時間,不過這樣過後就會減去多餘的部份

Virtual PC

關於Virtual PC的硬碟減肥請先參考如何有效的壓縮虛擬磁盤

其中的要點如下

  • 打開Virtual PC,並啟動作業系統
  • 將系統裡的垃圾文件清理乾淨,並進行磁碟重組
  • 點選Virtual PC選單的CD→Capture ISO Image
  • 選擇Virtual PC安裝路徑下(預設在C:\Program Files\Microsoft Virtual PC)的Virtual Machine Additions子目錄下的Virtual Disk Precompactor.iso
  • 如果沒有自動開啟光碟內容,可到光碟機內選擇開啟precompact.exe
  • 選擇是,開始處理
  • 完成後關閉虛擬的OS,選擇"File"→"Virtual Disk Wizard"
  • 在歡迎話面選Next,然後選"Edit an existing virtual disk", 選Next
  • 然後選擇要處理的硬碟檔案位置
  • 選擇"Compact it"選Next
  • 這時可選擇覆蓋原本的硬碟還是存成新檔
  • 選Next,開始處理

PS.對虛擬硬碟進行壓縮過程中需要保證具有足夠的暫存硬碟空間(大約為兩倍虛擬硬碟文件的大小),否則可能會因為暫存空間不足導致壓縮失敗

總結

這兩個虛擬機器各有千秋,不過就我所知學術界還是用VMWare的人比較多,雖然它要錢,不過支援的環境比較多,但效能或操作性上其實差異不大

我個人最多同時在一台電腦跑兩個虛擬機器就顯得有些吃力了

建議如果你的開發過程常會搞爛作業系統的人,一定要試試這樣的東西,不過前提是你最好有個強力的電腦

相關連結

VS2005(.Net)非同步呼叫Web Services

.Net Framework 2.0所提供的開發環境中,提供了簡單的方式讓你用非同步的方法呼叫Web Services

它使用MothodName後方加上Async名稱的函式當做呼叫方法,然後另外寫一個函式處理呼叫的回傳值

我想背後原理應該不脫離使用執行序(Thread)來達到這樣的功能。

參考資料中有微軟的範例,但它的做法如果用在連續呼叫的話可能會有些問題,而且沒有C#的範例,

所以我稍做修改成我需要的版本

開發環境

  • Microsoft Visual Studio 2005 (.Net Framework 2.0)
  • 專案類型:Windows 應用程式
  • 已有一個簡單的Web Service,該Service中有個函式: Function hello(ByVal name As String) As String
  • 我將Web Service加到名為wsServer的Web參考中
  • 我在畫面中用一個多行的TextBox叫resultOut來顯示呼叫與回應的資訊

C#

  //CallMyWSAsync用來New起Web service的實體,指定處理回應的函式,然後呼叫Web Service
 private void CallMyWSAsync(string value)
 {
  //New起Web service的實體
  wsServer.WebService ws = new wsServer.WebService();
  //指定處理回應的函式
  ws.helloCompleted += new wsServer.helloCompletedEventHandler(getCompletedHandler);
  //resultOut來顯示呼叫的資訊
  string o = "ID=" + ws.GetHashCode() + " Start, value=" + value;
  o = DateTime.Now.ToString() + "\r\n" + o;
  resultOut.Text = o + "\r\n" + resultOut.Text;
  resultOut.Text = "\r\n" + resultOut.Text;
  //呼叫Web Service
  ws.helloAsync(value);

 }

 //getCompletedHandler用來處理回應
 private void getCompletedHandler(object sender, wsServer.helloCompletedEventArgs e)
 {
  string o;
  if (e.Error == null)
  {
   o = "ID=" + sender.GetHashCode() + " Done, Result: " + e.Result; //e.Result可取得回應的物件
  }
  else
  {
   o = e.Error.Message;
  }
  //resultOut來顯示回應的資訊
   o = DateTime.Now.ToString() + "\r\n" + o;
  resultOut.Text = o + "\r\n" + resultOut.Text;
  resultOut.Text = "\r\n" + resultOut.Text;
 } 

VB


   'CallMyWSAsync用來New起Web service的實體,指定處理回應的函式,然後呼叫Web Service
   Sub CallMyWSAsync(ByVal value As String)
       'New起Web service的實體
       Dim ws As New wsServer.WebService
       '指定處理回應的函式
       AddHandler ws.helloCompleted, AddressOf getCompletedHandler
       'resultOut來顯示呼叫的資訊
       Dim o As String = "ID=" + ws.GetHashCode() + " Start, value=" + value
       o = DateTime.Now.ToString() + vbCrLf + o
       resultOut.Text = o + vbCrLf + resultOut.Text
       resultOut.Text = vbCrLf + resultOut.Text
       '呼叫Web Service
       ws.helloAsync(value)

   End Sub
   'getCompletedHandler用來處理回應
   Private Sub getCompletedHandler(ByVal sender As Object, ByVal e As wsServer.helloCompletedEventArgs)
       Dim o As String
       If e.Error Is Nothing Then
           o = "ID=" + sender.GetHashCode() + " Done, Result: " + e.Result 'e.Result可取得回應的物件
           o = DateTime.Now.ToString() + vbCrLf + o
           resultOut.Text = o + vbCrLf + resultOut.Text
           resultOut.Text = vbCrLf + resultOut.Text
       Else
           o = e.Error.Message
       End If
       'resultOut來顯示回應的資訊
       o = DateTime.Now.ToString() + vbCrLf + o
       resultOut.Text = o + vbCrLf + resultOut.Text
       resultOut.Text = vbCrLf + resultOut.Text
   End Sub

後言

這是我第一次寫C#的程式,因為我想順便體驗C#開發起來有何不同,

我在查資料時,還有看到ASP.Net的網頁也可以設為Async,不過會有什麼結果我沒試過,下回有空再寫寫札記吧

參考資料

透過網路讓鍵盤滑鼠在電腦間游走(W2XW與Synergy)

今天在網路上看到有人問(一鼠事二君)他在網路上看到一個影片,看到能夠用一組滑鼠鍵盤在兩台電腦(Windows與Mac)之間游移,如同使用雙螢幕一般。

一鼠事二君下面的回應,還有剛好我學弟玩到的,分別找到兩個軟體(W2XWSynergy),介紹給大家

差異

先說差異,讓大家挑選要先玩哪個(由於我在Windows下試,所以就我使用的感覺而言)

首先就安裝而言,在Synergy需要安裝,而W2XW只要解壓縮就能執行

就設定,Synergy設定步驟較多,也比較麻煩,而W2XW只要設定一兩個東西,就能啟動了

就功能而言,Synergy功能較多,可以設定較多台電腦(按它的設定法,你可以讓電腦把你圍起來操作應該不成問題),而W2XW則比較陽春,但我想一般人用到這樣就夠了

穩定度而言,我沒有詳細測過,但我學弟用W2XW的反應是有些不穩,有Bug

W2XW的設定雖然好設定,不過我懷疑它的安全性,好像很容易讓另一個人控制你的電腦,所以沒在用電腦時建議關掉他

總結而言,如果你第一次完,可以先試W2XW,如果不能用或不滿意穩定度,再試試Synergy

W2XW使用

  • 分別下載軟體到兩台電腦(我下載時的網址是:http://www.h7.dion.ne.jp/~umiumi/w2xw17a.zip),
  • 然後解開來,連接控制的鍵盤滑鼠的主電腦執行"w2xwM.exe"
  • 被控制的電腦執行"W2xwS.exe"
  • 主電腦程式會開啟一個設定視窗,設定如下
    • Switching(hot key)代表在控制時想切掉控制,讓鍵盤回到原電腦的按鈕(程式沒反應時使用),預設是Shift+Alt+Q
    • Switching(mouse)代表被控制的電腦在哪,像我放在右邊,IP是192.168.1.2,就勾Right,並填上IP
    • ClipboardShared代表剪貼簿共用,這樣就能複製文字到令一台電腦了
    • 還有兩個選項我沒試過
  • 完成後,你就可能把滑鼠從主電腦滑到令一台電腦了

Synergy使用

  • 下載安裝檔(我下載時的網址是:http://sourceforge.net/...)
  • 分別在兩台電腦安裝,要知道兩台電腦的名稱,預設是電腦名稱(例如我的主電腦是ALPC被控制電腦是ALNB)
  • 連接控制的鍵盤滑鼠的主電腦ALPC的設定

    • 選擇Share this computer's keyboard and mouse (server)
    • 點選Configure,設定電腦與電腦的關係
      • Screens中,點+,加入兩台電腦的名稱ALPC與ALNB,其他是預設就可
      • Links中,點+,加入兩台電腦的關係,我的ALPC在ALNB左邊的話,要加入2項,加法如下

        • 0 to 100% of the right of ALPC goes to 0 to 100% of ALNB:表示在ALPC中,滑到最右邊就會跑到ALNB
        • 0 to 100% of the left of ALNB goes to 0 to 100% of ALPC:表示在ALNB中,滑到最左邊就會跑到ALPC
    • 點選Hot Keys,設定一個可以讓鍵盤回到原電腦的按鈕
      • Hot Keys,點+,輸入Shift+Alt+Q
      • Actions,點+,選Switch to Screen,然後選主電腦ALPC
    • 點Start,啟動服務
  • 被控制電腦ALNB的設定

    • Use another computer's shared keyboard and mouse (client)
    • 然後輸入另一台電腦的名稱ALPC
    • 你可以用Test測試一下連不連的到
    • 選Start起動
  • 完成後,你就可能把滑鼠從主電腦滑到令一台電腦了

結論

強烈建議重視安全的人使用Synergy,反正麻煩一下而已,但說真的,W2XW比較有小巧易用的感覺

我還滿喜歡這樣的功能的,所以才會寫這篇,如果有問題或建議再跟我說吧~

參考資料

.Net的Web Service移除Soap1.2描述

雖然Web Services號稱讓不同語言開發的環境都能互相呼叫對方的功能,但還是會有些問題存在,我之前就遇過使用IBM的開發工具要呼叫我用.Net產生的Web services,結果無法解譯WSDL的問題~

原因應該是因為.Net的Web services產生了許多的描述,其中同時包含Soap1.1與Soap1.2,而有些工具無法處理這樣的內容

解決方法就是移掉Soap 1.2的描述,當然,不是叫你把WSDL用編輯器修改...那我就不用寫這篇了~

開發環境

Microsoft Visual Studio 2005

方法

動作其實很簡單,在你的Web專案最外層會有一個web.config,裡面描述了許多web專案的設定,

將以下內容加入configuration區塊下的system.web區塊

如,

<configuration> ... <system.web>

...

<webServices> <protocols> <remove name="HttpSoap12"/> </protocols> </webServices>

...

</system.web> </configuration>

然後,你就會發現產生的WSDL只剩Soap1.1的描述了,簡單吧

參考資料

用 Psiphon 突破網站封鎖

有個來自對岸的聲音問我,他們那裡沒辦法連到一些特定的網站,例如維基百科...等網站

所以我那天看到這個軟體就當場跟對岸的聲音試了一下

PS.除了自己架,網路上也有些網站提供類似服務,請參考最後的相關連結,如果大家有類似的東西也請回應給我

軟體簡介

簡單來說,就是在一個可以存取特定網站的電腦,執行這個軟體,他會架起一個網頁伺服器,讓想上網站的人登入後,可以將特定網站的內容再交給登入的人。

使用方法

  • 安裝軟體後,啟動程式,他會先測試預設的https網站要用的port:443是否被使用中(如果有架網頁伺服器就可能會在使用中)
  • 點選Setup可以設定使用的Port,不過被封鎖的電腦通常也只有公用的port能存取,所以建議還是盡量使用443
  • 點選add,設定帳號密碼以供使用者登入,使用者可以透過網站自己修改密碼
  • 要進入網站的網址可以在Setup中複製,如https://127.0.0.1:443/login/
  • 點選Start,則視窗名稱會顯示狀態為ON,表示服務已啟動
  • 使用者進到網站登入後,可以看到網站顯示了一個可以輸入網址的對話框,在那輸入你想去的網站就行了

參考資料

這裡是關於技術的手札~

也歡迎大家到

倫與貓的足跡



到噗浪來

關心一下我唷!
by 倫
 
Copyright 2009 倫倫3號Beta-Log All rights reserved.
Blogger Templates created by Deluxe Templates
Wordpress Theme by EZwpthemes