2011/05/23

皐月2.仮想化タイプと住居

仮想化によるアーキテクチャには主に3つ種類があります。
今回は、住居にたとえてみましょう。

まずはタイプ2VMM
タイプ2VMMは、仮想OSなどでは使われず、JAVAランタイムなどのアプリケーションでよく使われます。
イメージとしては、家主のみハードウェアを使い、住居人は仲介人によって、その人の環境にあった居住が与えられますが、直にハードウェアを扱うことはできません。
なお、JAVA仮想マシンや、.NETFrameworkの共通言語ランタイムなどがここでいう仲介人にあたります。

次にハイブリッドVMM

これは、不動産屋さん経由で指定のハードウェアを住居人にも扱えるようなイメージ。
とはいえ、不動産屋さんは間取りの割りあてとかはしてくれるものの、ハードウェアの管理は基本 大家さん主体。
住居人がもっとハードウェア使いたいッと言ってきたとしても、不動産屋さんは、いちいち大家さんにお伺いをたてないといけないため、住居人にとってはハードウェアを扱うには若干レスポンスが悪い。
また、不動産屋さんは誰でも使えるようにハードウェアで使うコンセントや蛇口などは大家さんと違った汎用性のある一般的なものに変換して各住居人に提供しています。
大家さんがあとから不動産屋さんと契約して(インストールして)住居人を入れることができるため、お手軽だけれども上述したようにレスポンスに難はあるのがポイントです。
ハイブリッドVMMにあてはまるのはVirtualPC2007,VMwareWorkstation,VirtualBoxなどがあげられます。


ちなみにWindows2008Serverで扱える Hyper-Vは、ハイパーバイザベースの仮想化テクノロジであり、タイプ1VMMによるアーキテクチャです。
次回は引き続き住居を例にして、タイプ1VMMと、さらにそこから分類されるモノリシック型とマイクロカーネル型について説明できればよいなと思います。

2011/05/18

皐月1.仮想化はカップラーメン

仮想環境に触れる機会が増えてきたので、自分なりに解釈したことを絵化していきたいと思います。
ちがう場合は指摘していただければありがたいです。


さて、コンピュータにおける仮想化とはそもそもどういうことなのでしょうか。
Wikipediaには以下のように書いてありました。
仮想化(英: Virtualization)とは、コンピュータにおいてリソースの抽象化を指す用語である。「リソースの物理的特性を、そのリソースと相互作用するシステム/アプリケーション/エンドユーザーから隠蔽する技法。単一の物理リソース(サーバ、OS、アプリケーション、補助記憶装置など)を複数の論理リソースに見せかけたり、複数の物理リソース(複数の補助記憶装置群やサーバ群)を単一の論理リソースに見せかけたりできる」という実用的定義がある[1]。また、単一の物理リソースを何らかの特性の異なる単一の論理リソースに見せかけることもできる。

わかるような、わからないような・・
リソースの抽象化とはどういうことでしょう?
抽象化とは何か、またまたWikipediaで見てみます。
抽象化(ちゅうしょうか)とは、思考における手法のひとつで、対象から注目すべき要素を重点的に抜き出して他は無視する方法である。抽象化において無視することについては捨象するという。従って、抽象と捨象は盾の両面といえる。

つまり、コンピュータのリソースを対象から注目すべき要素を重点的に抜き出して他は無視する方法を仮想化という。。
うーん、なんとなくわかるけれど利点が見えづらい。

というわけで、少し現実世界にあるもの一例にとってみます。
例としてあげるのは・・ ラーメンです。



僕はラーメンが好きです。
特に北海道に行った時に 有名ラーメン店「すみれ」で食べた味噌ラーメンは濃厚でとっても美味しかったー。
さてさて、このすみれの味噌ラーメンはもちろん北海道の「すみれ」に行かないと食べることは出来ません。また、北海道に行ったとしてもうどん屋や別のラーメン店に入ってしまうと 当然すみれのラーメンなんか出てこないです。
つまり、すみれのラーメンを食べるためには、
北海道の - 札幌にある - すみれに行って - 味噌ラーメンを注文し、 - ラーメンを食べる
という段階を踏む必要があります。

さて、これを仮想化・抽象化しようとすると・・。
「対象から注目すべき要素を重点的に抜き出して他は無視する方法」が抽象化ということなので、ここで注目すべき要素とは何か。そう、「すみれのラーメンを食べること」ですね。
別に北海道の札幌のすみれのお店に行かなくても、すみれのラーメンを食べることができれば良いのです。つまり、どういうことかというと・・。


カップラーメン化です。
仮想化=カップラーメン化

はい、これでわざわざ北海道にいかなくてもすみれのラーメンをすぐ食べることができるようになりました。つまり、「地理的(物理的)制約などは無視して、すみれにあるラーメンを重点的に抜き出した」ということでしょうか。
コンピュータの仮想化もいわゆる、カップラーメン化。
対象となる部分は、OSであったりアプリケーションであったり多岐にわたるけれども、要は重要なリソース部を抜き出して、それ以外の依存度を減らすこと。
JAVAやFLASHはプラグインを入れさえすれば、WindowsやMac、スマートフォンでも同じようにアプリケーションは動くし(アプリケーションの仮想化)、GoogleAppなどのクラウドはハードウェアごとまるまるカップラーメン化して、ネットさえつながれば非力なマシンですら同じようにサービスを受けることができるようになっています。


今現在 仮想化といえば、OSの仮想化を指すことが多いですけれど、
カップラーメンとして考えてみれば おのずとメリット・デメリットがみえてくるのではないでしょうか。

2011/03/27

東京電力電力供給状況APIを使ってPowerShellからデータ出力

久々の投稿です。しばらくPowerShellを扱ってなかったので、リハビリ。

関東では現在計画停電が行われていますが、
有志にて東京電力の電力使用状況APIを公開している方がいます。

東京電力の電気使用状況 API
http://denki.cuppat.net/

これを利用して二日分の電力データをPowerShellにて出力してみます。
Function Get-Data {
    Param($date)
    if ($WebClient -eq $null) {
        $Global:WebClient=new-object System.Net.WebClient
    }
    $results=$webClient.DownloadString("http://denki.cuppat.net/data/$($date).json")
    $Results -match """hours"":\[(?<hour>.*)].*""capability""\:(?<cap>.*)," > $null
    $matches
}

Function Check-Data {
    Param($getdata)

    $Ltime = $getdata.hour -split ","
    $cap=$getdata.cap
    write-host キャパシティ $cap

    0..$(($Ltime.length)-1)|% {

        $p=$ltime[$_]/$cap

        if ($p -ge 0.95) {
            $colorname="red"
        }elseif ($p -ge 0.90) {
           $colorname="darkyellow"
        }else {
            $colorname="black"
        }
       

        $a="{0:00}時:電力{1} {2:00}% {3}{4}|" -F $_,$ltime[$_],$($p*100),$("#"*$($p*50)),$(" "*(50-$($p*50)))
        write-host $a -ForegroundColor $colorname
        }
}

$tdata=Get-Data($(get-date -uformat "%Y%m%d"))
$ydata=Get-Data($(get-date -uformat "%Y%m%d")-1)

check-data($ydata)
check-data($tdata)

実行した結果はこちら。
90%以上の利用率で黄色、95%以上で赤字で出力します。

こうみると、やはり夕方は電力量が上がってますね。
僕も引き続き、節電していきたいと思います。

2010/12/20

PowerShellでTwitter


ということでPowerShellを使って Twitterチェックスクリプトを作っているのだけど
自分のやりたい挙動の八割はできたー。
こうやってTwitterを眺めているとなかなか面白い。
少しずつ作成した箇所を紹介できればいいなぁと思います。

とりあえず、こちら。
Twitter API の仕様書 日本語訳
http://watcher.moe-nifty.com/memo/docs/twitterAPI.txt

あと、TwitterAPI searchについてはこちらも参考になりました。

Twitter Search API の使い方
http://www.ibm.com/developerworks/jp/xml/library/x-twitsrchapi/

なにはともあれ、Twitter Search APIを使って情報をとってみる。
Function Get-TwitterSearch {

 Param($searchTerm)

 if ($WebClient -eq $null) {
  $Global:WebClient=new-object System.Net.WebClient
 }

 $results=[xml]($webClient.DownloadString("http://search.twitter.com/search.atom?lang=ja&q=$SearchTerm"))
 $Searchitems=$results.feed.entry

 $SearchItems
}

Get-TwitterSearch関数をつくって、引数に検索する文字を入れることで、
Twitter情報をxml形式でひっぱって返してくれます。

検索の仕様だとかは上記の参考リンクを参照してもらうとして・・。
データをとれればしめたもの。あとはいくらでもPowerShellで編集できちゃいます。
とりあえず、名前と時間、つぶやきを取得したいのであればこんな感じ。
PowerShellをつぶやいた人をとってみました。

$tdata= Get-TwitterSearch PowerShell
$tdata | %{ write-host $_.author.name "--" $([datetime]$_.published); write-host $_.title; write-host }


あとはこれを応用すれば 
好きなキーワードをストリーミングでずっと流し続けることができると。
任意のユーザーに対しても検索できるので、その紹介はまた機会あらば。

2010/11/15

ログの書き込みがあったら知らせるスクリプト

前回の続き。
http://win-enikki.blogspot.com/2010/11/usbpowershell.html

前回はUSBメモリ使用者にログオフ時にメッセージ出力するスクリプトを紹介しました。
今回は、出力ログを監視することで監視者に知らせるスクリプトを紹介します。
とりあえず、スクリプト例を以下に表示します。
$writeDir="\\buso-pcv\test"
$writeTxt="usblog.txt"
$tmpColor= @("Red", "Blue", "Green", "Magenta", "DarkCyan")

[Void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")

$i = 0 #終了フラグ
$cl = 0 #カラーバリエーション
$watcher = New-Object System.IO.FileSystemWatcher              # FileSystemWatcherの作成
$watcher.Path = $writeDir                                      # 監視対象のフォルダ指定
$watcher.Filter = $writeTxt                                        # フィルター
$watcher.NotifyFilter = [System.IO.NotifyFilters]::LastWrite 

$NotifyIcon = New-Object System.Windows.Forms.NotifyIcon
$powerShellExe = "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"
$icon = [System.Drawing.Icon]::ExtractAssociatedIcon($powerShellExe)
$notifyIcon.Icon = $icon
$notifyIcon.Visible = $true

Write-Host "チェック開始します。"

while ($i -ge 0)
{
    $result = $watcher.WaitForChanged([System.IO.WatcherChangeTypes]::ALL)
    $tmpVar = $(Get-Content "$writeDir\$writeTxt")[-1] -split ","
    
    Write-Host ""
    Write-Host "#########################################"
    Write-host "【コンピュータ】"  $tmpVar[0] -ForegroundColor $tmpColor[$cl]
    Write-host "【ユーザー】"  $tmpVar[1] -ForegroundColor $tmpColor[$cl]
    Write-host "【ログオフ時刻】"  $tmpVar[2] -ForegroundColor $tmpColor[$cl]
    Write-Host "#########################################"
    
    $notifyIcon.ShowBalloonTip("1", "USBチェック", "USBメモリがささっているユーザーがいます", "Info")

    $cl+=1
    if ($cl -eq $tmpColor.length) {
        $cl=0
    }
}

ここでのポイントはFileSystemWatcher クラスです。
FileSystemWatcher クラス
http://msdn.microsoft.com/ja-jp/library/system.io.filesystemwatcher%28VS.80%29.aspx

監視ログを対象に、書き込みが発生したらログの最終行を出力させる。
また、ログは変更した場合分かりやすいようtmpColorにある配列順に文字色を代えるようにしています。
ついでに、NotifyIconクラスを使用してバルーン表示もさせています。
NotifyIconクラス
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.notifyicon%28VS.80%29.aspx

以上の結果でこのように表示されます。
出力ごとに色が変わり、バルーンも出力



















このスクリプトは、今回だけでなく他でもログに書き込みがあった場合の監視ができるので、
色々汎用性が高いかなーとおもってます。
いかがでしょうかー。