2013年10月4日金曜日

【解決】PowerShellでInternetExplorerを操作するときにエラーが発生

メイン開発機で作っていたスクリプトをほとんど素のWindows7機にもっていって動作確認した時のこと。

InternetExplorerを操作する箇所で下記エラーが発生

"getElementById" のオーバーロードで、引数の数が "1" であるものが見つかりません。

該当コード部分は
$doc = $ie.document
$username_el = $doc.getElementByID("username")

まったくもって意味不明
オブジェクトがないということか?
とも思ったけど document自体はCOMコンポーネントのオブジェクトとして認識されている。

いろいろ、調査。
で、下記可能性が見つかった

1.InetrnetExplorerのセキュリティ設定が悪いんじゃないか。
   セキュリティの保護モードをオフにしろ、という記述(海外のサイト)
  →これはほぼ嘘だと思う。自分のメイン機では”オン”で動いている。
   サイトによってエラーが出たり出なかったり、という時は疑ってもよいのかもしれないが。

2.IEのバージョンによりアクセス方法が違う。
  IE9だとエラーが出るので、下記ページのようにしろ、とある。
  おいらのはIE10なんですけど、と思いながら試してみる。

  http://cezne.tumblr.com/post/23228713564/ie9-powershell

  これでも動くことは動く。
  これが大変くせもの。これで確かにいけるのだけれどページ遷移すると”忘れる”
  ので最初のアクセスしか有効でない。実質”使えない”
  かつ使うすべてのメソッドをこれでアクセスするなんて考えただけで寒気が…

 
 

ここでなんとなく思う。
オブジェクトはそこにいる。
決して情報を取れていないということではなくアクセス方法がわからないだけ。

頭の中になぜか”アセンブリ”という言葉は浮かぶ。

アセンブリの一覧はこのページのようにして取れる。

 [Appdomain]::CurrentDomain.GetAssemblies() | %{$_.GetName().Name}

これでメイン機と動いていないマシンで差をとった。

メイン機にあって、動いていないマシンにないエントリが見つかった

Microsoft.mshtml

うーん、それっぽい。

(あとの追調査でわかったことだが、navigateで有効なサイトにアクセスして documentプロパティに
アクセスしたときに初めて読み込まれるようだ。)

なんか来た。

あとはmshtmlを探せばよいっぽい。
が、探すファイルはMicrosoft.mshtml.dllであって、mshtml.dllではないようだ。
確かに動かないマシンにはないようだ。

メイン機には開発ツールをてんこ盛りにしているのでどれをインストールした時に入ったのかとかさっぱり。
ファイルを一つ持っていけばよかったのかもしれないがなんとなく”ちゃんと”インストールしてみることにする。
(依存関係とかがあってあとで悩むのもいやだし)

ネットの情報ではMicrosoft .NET Framework 2.0 SDK に入っているらしい。
あと、Global Assemblyっていうやつに読み込まないといけないらしいとの情報も。

でSDKを入れた。
インストール後、検索するとやつは、

C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll

に居た。

ここでPowerShellを立ち上げてテストしてみたけどだめ。

で、直接読み込んでみた。

[System.Reflection.Assembly]::LoadFrom("C:\Program Files (x86)\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll")

なんかメッセージが出て読み込めた。

上記チェックをやった。 やったー動いた!
これをやればなんとかなる!

後日談

 動くようになったマシンを再起動したら上記で読み込まなくてもdocumentプロパティをアクセスした時点で自動的に読み込まれるようになった。(ログオフでもよかったのかもしれないが分からない)

GACというところ(c:\windows\assembly)に登録されるとマシン全体で使えるようだ。
ここには上記.net SDKのインストーラが登録してくれるみたい。
(ここはフォルダに見えているけどメタファーとしてそうなっているだけで実質は違うらしい)

もしGACにあるアセンブリを読み込むには
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.mshtml")
でよいらしい。

かなりネットをさまよったがなんとか一日で解決できた。
しかしみんなどうやって解決してるんだ?

2013年9月5日木曜日

MySQLの設定、my.cnfの在処について

どうも気になるので。

MySQLの設定ファイル、my.cnfだけれど自分のためだけの設定の場合は
自分のホームディレクトリに .my.cnf (頭のピリオド忘れないこと)という名前で老い低おけばよい。

/etc におくときはどうしても必要な場合のみにすること。

2013年5月17日金曜日

Windows7のXP Modeで統合機能のフォルダ共有機能が働かない

いろいろ調べてみるが、全てダメ。

Windows7を再インストールして、保存していたxpモード用のファイルを戻し
XPモードは立ち上がるのにフォルダ共有機能が働かない。

クリップボードとかそれ以外のものは統合機能が働いているっぽいのに。

下記ページで以下のような記述を見つけた

http://mikasaphp.net/win7vpc.html

引用はじまり--

仮想 PC から直接メインPC ドライブを参考にできるようになる等、メイン PC と共有できます。

  統合機能が有効にならない?又はインストール出来ない時 by Windows 7 SP1 32bit

一時統合機能を XP Mode 上でアンインストールし、
[ C:\WINDOWS\system32\drivers\wdf01000.sys ] の [ wdf01000.sys] ファイルを [ wdf01000.sys.old ] とリネームしてから
バーチャル PC のツールより統合機能をインストールしなおします。

 この情報はマイクロソフトフォーラムより取得したもでありマイクロソフトの文献ではありません。


--引用おわり

これは64bitでも有効だった。

2013年4月11日木曜日

Thinkpad i1124 + CentOS + WLI-CB-G54 で無線LAN

ethernetを持たないthinkpad i1124を無線LANにつなぐ件。

USB LANアダプタで有線LANにつないでいたんだけど簡易コネクタ?のせいで
ちょっと触っただけで接触不良、接続が切れてしまう。

ハードオフでPCMCIAカードでコネクタ内蔵のカードを買ってきたんだけどどうもうまくいかない。

手持ちの無線LANカードWLI-CB-54があることに気づき、挿してみた。

■まずlspciで認識できているかを調べた

# lspci
~~ 略 ~~
01:00.0 Network controller: Broadcom Corporation BCM4306 802.11b/g Wireless LAN Controller (rev 03)

Broadcom BCM4306として認識されているようだ。

■firmwareの入手

なんやら、firmwareが必要とのことだ。
Windows用のドライバから抜き出すプログラムを使って準備するらしい。
が、ここで問題。 抜き出すプログラムが対応しているWindows用のドライバに相性がある。
適当に入手したやつだとだめだった。

先人のHPにあったものをありがたく頂戴する。

bcm43xx-fwcutter-006.tar.bz2がfirmwareを抜き出すプログラム。makeが必要。
bcmwl5.sysがwindows用のドライバ。

そのページにあるようにbcm43xx-fwcutterで抜き出された*.fwを/lib/firmwareへ移す

# ./bcm43xx-fwcutter bcmwl5.sys 
# mv *.fw /lib/firmware/ 

■ wpa_supplicantの設定

使っているCentOSには入ってた。
デーモンになっていて接続の面倒を見てくれるみたい。

1./etc/sysconfig/wpa_supplicant 下記のようにした。 OTHER_ARGSに -u を設定するとだめだった。 また自分の環境では eth1 として認識されていたためそのように設定した
# Use the flag "-i" before each of your interfaces, like so:
#  INTERFACES="-i eth1 -i wlan0"
# INTERFACES="-i wlan0"
INTERFACES="-i eth1"

# Use the flag "-D" before each driver, like so:
#  DRIVERS="-D wext"
#DRIVERS="-D wext"

# Other arguments
#   -u   Enable the D-Bus interface (required for use with NetworkManager)
#   -f   Log to /var/log/wpa_supplicant.log
#OTHER_ARGS="-w -u -f /var/log/wpa_supplicant.log"
OTHER_ARGS="-w -f /var/log/wpa_supplicant.log"

2. /etc/wpa_supplicant/wpa_supplicant.conf 下記のようにした。CCMPとはAESのことを指すらしい。 ググったものでは ap_scanや、scan_ssidが設定されていたが自分の環境で指定するとだめだった。

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=wheel
#ap_scan=0
#network={
#       ssid="any"
#       key_mgmt=NONE
#}

network={
        ssid="STARFLEET"
#       scan_ssid=1
        key_mgmt=WPA-PSK
        proto=WPA WPA2
        pairwise=CCMP TKIP
        group=CCMP TKIP
        psk=パスフレーズ
}

またパスフレーズは下記コマンドで得られる。上記のひな形みたいな感じの出力が得られる。 パスワードも出力してくれるがセキュリティのため上記ファイルには転記しないこと。(パスワードそのものは”必要ない”)

# wpa_passphrase YOUR_SSID YOUR_PASSWORD
network={
        ssid="YOUR_SSID"
        #psk="YOUR_PASSWORD"
        psk=計算してくれたパスフレーズ
}

3.デーモンの設定。 自分のやつはwpa_supplicantがデフォルトで動いてなかったのでchkconfigで設定

# chkconfig wpa_supplicant on          

■ネットワークの設定 ここは普通に。 eth1として認識されているので ifcfg-eth1 に設定。ここらへんはあなたの環境に合わせて。
/etc/sysconfig/network-scripts/ifcfg-eth1 の内容

# MELCO BUFFALO WLI-CB-G54
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
NETWORK=192.168.1.0
NETMASK=255.255.255.0
GATEWAY=YOUR.GATEWAY.ADDRESS.DAYO
IPADDR=YOUR.IP.ADDRESS.DAYO
HWADDR=aa:bb:cc:dd:ee:ff

でインターフェース起動
# ifup eth1

またはネットワーク再起動
# service network restart

■LANカードを挿し直す。
たぶん、大丈夫。
さらに念のため再起動して上記の設定が反映されていることを確認。

2013年4月4日木曜日

HP Elitebook 8760Wのアップグレード(後編)

前回からの続き。

motherboardを換装して立ち上げたらNumLockとCapsLockキーのLEDが3回点滅を繰り返す件。

調べてみた。
HPのホームページの真ん中ぐらいの表。

3回点滅はメモリーエラーだとのこと。

※ここを調べるまでにあせって元のボードに戻して立ち上がることを確認してまた換装してを繰り返したのは秘密。

で冷静に考えた。
メモリーは背面のスロットに8Gx2を挿している。

1.メモリーの指す場所に問題がある
2.壊れたボードを掴まされた。
3.i5とこのボードの組み合わせはNG

今更2.,3.だったとしてもしょうがないので1.を試す。

前回のメンテナンスマニュアルによると、
1. まず背面スロットを埋めてからキーボード裏側メモリスロットにメモリを増やすこと
2. 各メモリスロットは1->2の順に指すこと

と書いてあった。
が、どっちが1か2かわからない。

背面スロットにメモリーを1枚だけ挿してみた。
状況変わらず。

そのメモリを背面スロットのもう一方に挿してみた。
立ち上がった!!

どうやら指す場所がキーらしい。

背面スロットに2枚指すことがNGっぽいので次にキーボード裏側メモリスロットに挿してみた。

キーボード裏側メモリスロットは上下にちょっとずれて2スロットあるので(写真がないのはごめんなさい)まず下側からさした。

NG。

次に上側にさした。
BINGO!!

立ち上がった。

ちゃんと8GBx2で認識している。

前回2540MはメモリーはMax16GBまでとしったかぶりに書いたが、今回Intelのホームページで知った。
このせいで?メモリースロットには使えない(ばかりか立ち上がらない)場所があるんだろう。

たぶん、i7で32GB対応しているやつに差し替えれば残りのスロットも使えるようになるのだろう。

まとめ。
i7対応motherboardにi5を挿すとメモリーを挿すスロットに注意が必要
→背面スロットに一枚、キーボード裏側スロットに一枚。

今後i7入手に努める。

※挿し直しを行った時、電源ボタンを押しても立ち上がらないことがあった(まじあせった)。
 CMOSバックアップバッテリーを抜いて、
 バッテリーを抜いて、
 電源ボタンを空押しして、
 バッテリーを元に戻して 復帰した!!

2013年4月3日水曜日

HP Elitebook 8760Wのアップグレード(前編)

HPのハイスペックノート,8760Wを入手した。オークションで。
憧れの?Quadroを積んだ奴。3000Mだけど。

家の中でどこでもそれなりの事ができるPCとして使うつもり。
i5積んでたのでi7に変えたいなぁ、と思っていたらすでに変えている人が。

とりあえず交換可能だ、と言うことはわかったのだけれどヒートシンクがi5モデルとi7モデルで違うらしい。

パーツリストはここにある。
※HPのホームページの設定地域をアメリカにしとかないと変なところに飛ばされる。

上記のリンク先の人はヒートシンクを手に入れたらしいけどHPでは日本向けにパーツを売ってない。
ebayを見たけど該当する部品の出品はなし。

で、ebayを見ていたらi7用のmotherboardが出品されているのを見つけた。
i5とi7でmotherboardが異なっていて、メモリスロットがi5用が2つに対してi7は4つ。

なんでわざわざ変えてるんだろう。

あとでわかったのだけれどi5(2540M)はメモリがmax 16GBにしか対応していないのに対し、i7(2860QM)は32GB。

まぁ、i7に載せ替えたいついでに4枚メモリが刺さったほうがいらない4GBのメモリを+αでつければメモリが増えてハッピーじゃないの?という貧乏根性。

で入札。というか即決だったんだけど。
一週間ほどして中国から到着。

気持ちを落ち着けてから分解、交換した。
分解の手順はこちら。

マニュアルにはディスプレイユニットも外せ、となっているけど外さなくても大丈夫。
(あとから気づいた)
上面パネルを外したところ。

ヒートシンクとかを外したところ。

が。
立ち上がらない。NumLockキーとCapsLockキーのLEDが3回点滅を繰り返したまま。

やっちまったかぁ~~~~~~~~~~~~~~~~~!?!?!?!

2013年3月10日日曜日

【その3】充放電状況の計測:GR-SAKURAを使った独立系太陽光発電コントローラについて

先回失敗した、バッテリーの充放電状況を計測する件について。
充放電を計測する、ということは電流の方向が正負どちらになっても計測出来る必要がある。

前回の失敗原因を明らかにしたい(このようなときのOPAMPの使い方を習得したい)ところだが
コントローラを前進するため、以下の解決策をとることにした。

そういう”キットを使う”ことにした。
ストロベリー・リナックス製のセンサ、”INA226 I2Cディジタル電流・電圧・電力計モジュール”を使うことにした。
http://strawberry-linux.com/catalog/items?code=12031

インテリジェントセンサのため、使いたいものをつなげば簡単に計測できる。
GR-SAKURAとはI2Cで接続することになる。
これは、36Vまで、かつ±20A以内の電圧および電流を計測することができる。
また電力も計算してくれる。

商品名の通り、INA226というTI製のチップを使っているのだけれどシャント抵抗は外付けのため、電流の計測のためにINA226にその抵抗値を教えてやらなければならない。

それはまた今度。