harry’s memorandum

おれおれメモ

Win32OLEでインストール済みソフトウェア一覧を取得してみたよ

リーマンは時折無駄としか思えない人力作業を強制させられるときがあります。インベントリを人力で調べるなんて拷問ですよ。
ささっとvbsを書いて終わりのつもりだったのですが妙に遅い...半端ではない遅さ。

hostname = "remote_host"
set locator = CreateObject("WbemScripting.SWbemLocator")
Set wmi = locator.ConnectServer(hostname, "ROOT\cimv2", "user", "password")
Set items = wmi.ExecQuery("Select * from Win32_Product",,48)

For Each item in items
    Wscript.Echo "Caption: " & item.Caption
    Wscript.Echo "Version: " & item.Version
Next

どうやら win32_productクラスがよくないようです。「win32_product slow」とググるとワンサカ出てきます。MSI経由で情報を取得するため、超がつくほど遅いようです。

インストール済みアプリケーションの情報取得はレジストリ経由の方が速そう。ただx86とx64のアプリケーションは別のレジストリで管理しているので注意が必要です。

require 'win32ole'
require 'socket'

module REG
  arch = ENV["PROCESSOR_ARCHITECTURE"] == "AMD64" ? x64 : "x86"
  
  UNINSTALLS = 
    if arch == "x64"
      [
        "SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\uninstall",
        "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\uninstall",
      ]
    else
      [
        "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\uninstall",
      ]
    end

  HKEY_CLASSES_ROOT   = 0x80000000
  HKCR                = 0x80000000
  HKEY_CURRENT_USER   = 0x80000001
  HKCU                = 0x80000001
  HKEY_LOCAL_MACHINE  = 0x80000002
  HKLM                = 0x80000002
  HKEY_USERS          = 0x80000003
  HKEY_CURRENT_CONFIG = 0x80000005
  HKEY_DYN_DATA       = 0x80000006
end

include REG

# File activesupport/lib/active_support/core_ext/hash/keys.rb
class Hash
  def symbolize_keys!
    keys.each do |key|
      self[(key.to_sym rescue key) || key] = delete(key)
    end
    self
  end
end

class Software
  def initialize(hostname = ".", opt = {})
    wmi = conn_server(hostname, opt)
    @reg = wmi.Get("StdRegProv")
  end

  def conn_server(hostname, opt)
    locator = WIN32OLE.new("WbemScripting.SWbemLocator")
    if Socket.gethostname == hostname || "." == hostname
      locator.ConnectServer("." ,"root\\default")
    else
      locator.ConnectServer(hostname ,"root\\default", opt[:user], opt[:pass])
    end
  end
  
  def each_subkey
    in_param = @reg.Methods_("EnumKey").InParameters.SpawnInstance_()
    in_param.hDefKey = REG::HKLM
    REG::UNINSTALLS.each {|key|
      in_param.sSubKeyName = key
      out_param = @reg.ExecMethod_("EnumKey", in_param)
      out_param.sNames.each {|subkey|
        yield  key + "\\" + subkey
      }
    }
  end

  def each_products
    in_param = @reg.Methods_("GetStringValue").InParameters.SpawnInstance_()
    in_param.hDefKey = REG::HKLM
    self.each_subkey {|key|
      product = {}
      in_param.sSubKeyName = key
      %w(DisplayVersion DisplayName).each {|label|
        in_param.sValueName = label
        out_param = @reg.ExecMethod_("GetStringValue",in_param)
        product[label] = out_param.sValue.to_s 
      }
      yield product.symbolize_keys! 
    }
  end
end

こういうのはWin32OLEで書くほうが楽しいです。こんなかんじで実行すればOK.

so = Software.new
so.each_products {|h|
 next if h[:DisplayName].empty?
 p h
}

暑すぎるのでLinuxで使えるパワフルなシステムモニタツールを並べてみた

今年は本当に暑いです。こんなに暑いとキーボードを叩く気分にならんですよ。コンソールで叩くやつだけを挙げておきます。

top

みんな大好きtopコマンド。
f:id:dharry:20130723024405j:plain

htop

みんな超好きhtopコマンド。
f:id:dharry:20130723024404j:plain

atop

個人的にあまり使うことがないatopコマンド。
f:id:dharry:20130723024406j:plain

nmon

AIXのtopasっぽくてあまり好きじゃないnmonコマンド。
f:id:dharry:20130723024407j:plain

slmon

ああ、あったね。slmonコマンド。
f:id:dharry:20130723024409j:plain

dstat

便利!dstatコマンド。
f:id:dharry:20130723024408j:plain

xentop

番外っぽいけど、Xenに付いているtopコマンド。たまに使う。
f:id:dharry:20130723030030j:plain

esxtop

これも番外っぽいやつ。esxiに付いているtopコマンド。おうちのesxiは消してしまったのでキャプチャ取れね。

月額380円の Wi2(ワイツー) 300を使ってみた

Docomo-Wifiが使えるエリアはまだまだ少なくて正直イライラしています。JR駅前のカフェで駅よりの席に座ると駅のWifiがギリギリつながり「ラッキー!」「すぐ切れやがる」という生活はもううんざりしてきたので、月額380円で使いたい放題の Wi2 を申し込みました。
今だとビックカメラ特典でなんと2ヶ月は無料だそうです。でもたかが760円ぐらい、馬券の買い目1点より少ないので、どうったことはないですけど。
http://www.biccamera.com/bicbic/jsp/w/service/wi2/index.jsp


まずは、近所の電源が使えるサンマルクカフェに行って、ベトナムコーヒーのLを頼んで、電源の席を確保して使ってみました。

f:id:dharry:20130707193734p:plain
http://www.musen-lan.com/speed/

380円にしては十分な速度だと思います。Wi2の自動接続サービスにLinuxがないのが悲しいですが、そこは手打ちか適当なスクリプトでも書いて対応したいと思います。

XenServer6.2で俺的にはほぼ完璧になった

ついに Xenserver 6.2 がリリースです。
http://www.xenserver.org/
http://sourceforge.jp/magazine/13/06/28/151500



XenServer6.2がOSSになったことが理由なのか知りませんが、有償の機能だったHA(High Availability)やDMC(Dynamic Memory Control) も普通に使えるっぽいです。VMwareHyper-Vではメモリバルーニングやダイナミックメモリは無償版でも普通に使えいたけどXenServerの無償版ライセンスでは使えなかったので、非常に嬉しいです。

私がXenServerを押している理由は、vCenterやSystemCenterのようなものを導入しなくても、ホストのどれか1つが統合管理(Control Domain)してくれるので、別途サーバを用意する必要がないというところです。無償で統合管理の機能があるので、VMテンプレートやライブマイグレーションも普通に使えます。だいたいはXenServerで事足りるのですが、メモリ管理だけは他の仮想化製品(無償版)と比べて若干の機能不足を感じていましたが、XenServer6.2でやっと無償でDMCが使えるので、これでほぼ完璧になりましたよ!!

無償版だと使えなかったDMCのタブの内容。
f:id:dharry:20130629133156p:plain

DMCはメモリの下限と上限を設定するだけ。
f:id:dharry:20130629133205p:plain

やったね!

Google Reader カウントダウン

f:id:dharry:20130521210705p:plain

ログインしてこの画面がでるとやっぱり悲しくなる。Googleリーダーってヘビーユーザーがたくさんいたと思うけど、そういう結果になるとGoogle依存な人も離れてしまうんではなかろうかと。

GoogleノートブックiGoogleなど、なんども痛い目をみた。だから僕はGoogleドライブやGoogle+は使わない。

情熱プログラマーを読んで

毎年、ゴールデンウイークに実家へ帰省すると、ゲーセンレトロゲームとラーメンの毎日になっちゃうので、今年こそはスタイリッシュにコメダ珈琲で読書をしようと考えていました。読んだのは「情熱プログラマー」です。

f:id:dharry:20130505172414j:plain

感想

この本では自分自身を製品と考え4つの側面から話を説明していました。

  • 市場を選ぶ
  • 製品に投資する
  • 実行に移す
  • 製品を売り込む

みんな当たり前のことだね。でもやっぱりこれを行うのは難しい。どんなに理にかなっていても、人間は弱いからやっぱり難しい。

愛せ、さもなくば捨てよ

(中略)...
有り余るほどの教育を受けながら期待はずれな働きしかできない同僚と、僕との違い。それは情熱だ。熱中できるかどうか。
彼らには自分がなぜIT分野にいるか自覚がなかった。彼らはコンピュータプログラミングをやっていれば良い給料がもらえそうだとか、親に勧められたからとか、大学でそれ以外の専攻科目を思いつかなかったっていう理由で進路を決めたんだろう。それが彼らのパフォーマンスにあらわれていたんだ。


うん、仕事はパッションだ。
休み明けはパッション3割増にする。



情熱プログラマー ソフトウェア開発者の幸せな生き方

情熱プログラマー ソフトウェア開発者の幸せな生き方

NTT-X に DELL PowerEdge T320 登場


PowerEdge T320 : Front Bezel - YouTube

NTT-X に DELL PowerEdge T320 がついに登場しましたね。22,980円のようです。
http://nttxstore.jp/_II_DE14232807


スペックシートをみると、HDDのスロット8つ、メモリバンクも6つ。まったくもって素晴らしい。
http://www.dell.com/downloads/global/products/pedge/t320_spec_sheet.pdf

Processors Intel® Xeon® processor E5-2400 product family
Intel Xeon processor E5-1410
Intel Pentium® processor 1400 product family
Memory1 Up to 192GB (6 DIMM slots): 2GB/4GB/8GB/16GB/32GB DDR3 up to 1600MT/s
Embedded NIC Broadcom® 5720 Dual Port 1Gb LOM


CPUは Pentium 1400 Series というやつですがよく知りません。"メモリがたくさん搭載できるけどGPUはないCeleron G550" というイメージでいます。
http://ark.intel.com/ja/compare/67415,53418
f:id:dharry:20130504112755j:plain