regsvr32.exe

いつも忘れてしまうのでメモっておく。

SysWOW64 は x64 上で x86 をエミュレートするための仕組み。
SysWOW64\○○.exe は x86 エミュレータ用バイナリ。

なので、C:\Windows\System32\regsvr32.exe を実行してダイアログが表示されている状態でプロセスモニタを見れば x64 の regsvr32.exe が上がっているのが確認できるし、
C:\Windows\SysWOW64\regsvr32.exe を実行してダイアログが表示されている状態でプロセスモニタを見れば x86 の regsvr32.exe が上がっているのが確認できる。

自宅のサーバー用PCとメインマシンを入れ替え

節電すると関電から QUO カードがもらえるらしいので、自作PC 2号 | hadacchi blog で書いた消費電力の小さい PC をメインマシンとして使うことにした。
こいつ、ROM ドライブがないのでインストールから早速困る。
diskpartを使ってWindows Vista/7のインストールUSBメモリを作る - @IT に従い、インストールディスク から iso を吸い出してインストール。
DVD-ROM からインストールする場合と異なり、自動的に再起動した後もインストールメモリが再度実行されるので注意。
またこのマシン、以前のインストールで USB キーボードを認識しなかった反省を踏まえ、今回は最初から PS/2 キーボードでインストール。
サーバー用に BIOS から殺していた USB 3.0 やグラフィック系の機能を復活させるのを忘れて、ドライバを当てるデバイスが見付からないという事象にも悩んだ。

だいたい、こんなもんか。
これで CPU の電力だけで言えば、カタログ上で 1/4 程度になるはず。
ワットチェッカー欲しい…

Windows Update (KB2686509) 適用失敗

KB2686509の適用失敗についてのメモ。多分罠は2つ - 新・日々録 by TRASH BOX@Eel

scancode map の方にひっかかった。
scancode map を一時的に消して、アップデート後に再度設定すればOK。
scancode map を消した後にログオフとかシャットダウンの必要はなく、そのままアップデートをかければOK。

CAPS LOCK とか、いい加減なくして欲しい… と思っていたら、会社の人が使っていて大変驚いた。
使う人いるんだなぁ。

RAID上にWin7をインストール

追記4
調子が悪すぎるので、1TB HDD に戻した。だめだこりゃ。

追記3
ログオフ時のBSOD:
妻がログオフしたら再発.
ブルースクリーン情報が残っていなかったので,原因不明.
スリープ後のブルースクリーン:調査中.

追記2
ログオフ時のフリーズは,実は追記の内容でも解決しなかった.
USB2.0で読み込んでいたHDDをUSB3.0にしてからは,再発していないことを追加で報告する.
また,当初目論んでいたスリープ後のブルースクリーンについては,きっちり再発しているので,合わせて報告する.
orz

追記
ログオフ時のフリーズは,Microsoft Security Essentials のリアルタイム保護の項目で,
「コンピューターのファイルおよびプログラムの動作を監視する」の下を「受信ファイルのみを監視する」へと変更し,
更に「動作の監視を有効にする」のチェックボックスを外すことで,今のところ出なくなった.
web にあった,ウィルス対策ソフトを切ったら直った,と同じ結果になりそうなことを,報告しておく.

Win 7 では,1TB 以上の大容量 HDD をシステムディスクとして運用すると,スリープからの復帰時に BSoD … いわゆるブルースクリーンに見舞われる.
我が家では Hotfix を当てても解決しなかったので,容量の小さい HDD を用意することにした.
しかし,この TB 時代にそんな容量の小さい 3.5" HDD など持ち合わせているわけもなく,手元にあるのは 2TB 3.5",1TB 3.5",250GB 2.5" × 2 の 4台のみ.(全て Western Digital)
で,仕方がないので,250GB 2.5" × 2 を RAID で 1つにまとめて,500GB HDD として運用することにした.

さて,Win XP の頃は でドライバを読み込ませていたわけだが,Win 7 ではパーティションを切る時にドライバを読み込ませる選択肢が出てくる.
私の PC では,DIR-2221-SRAIDE へ Win 7 を入れようとして,
ハマっていたのが win7 再インストでハマった at hadacchi blog という先の記事であった.
で,私の至った結論は,DIR-2221-SRAIDE にはうまく Win7 が入らない,というものだった.

HW-Raid で SATA HDD として見せてくれるので,ドライバもなしに入るかな~と思いきや,ロケールの選択とかユーザー名を入れるステップまで進んだところで
フリーズして進まなくなってしまった.
で,ドライバを入れようにも Win 7 版がうまく入らず,諦めた.

仕方がないので,2.5" HDD × 2 → 3.5" ドライブベイなるマウンタをそのうち買うことにして,とりあえずコードだけ接続して PC 内に放置(真似してはいけない)することに.
で,オンボード RAID で RAID 0 とした.
M/B は, ASUS M4A78T-E で,web では動作実績が報告されている.ドライバ CD はもちろんあったので,あっさり入れられた.
RAID 0 上にシステム導入は怖そうに思えるが,データはこれまで同様に全部外付け HDD へ切り出して,USB 3.0 で接続することを予定(I/F ボードと3.5" × 2 SATA HDD ケースを注文中)しているので,良しとする.

現在は,旧 HDD を外付け HDD 代わりに使っており,手持ちの外付け HDD ケース GW3.5AA-SUE がカスで,SATA2 の HDD を 1.5Gbps にデチューンしないと eSATA 接続では認識すらしてくれないという仕様のため,USB 2.0 で泣く泣く接続している.
RAID 0 に OS を乗っけたためか,USB 2.0 上のソフトウェアを常駐させているためか,複数ユーザがログオンしている状態からログオフすると,ログオフ中にハングするようになってしまった.
Web で検索するとそれなりに情報の出てくる症状ではあるが,解決策が具体的に示されていないので,もうしばらくかかりそうだ.

冒頭の追記にも記載したが,MS Security Essential の設定変更で回避できたもよう.

大人しく,500GB ほどの内蔵 HDD に Win7 を乗っけるべきかしら…

SSL でアクセスするページ(https) のエラー

Internet Explorer 9 で,「https://...」というURLにアクセスすると,「Internet Explorer ではこのページは表示できません」というメッセージが表示される場合がある.
色々と原因が考えられるが, Firefox など他のブラウザでアクセスできるのに IE でアクセスできない場合は,インターネットオプションに問題がある場合がある.

「インターネットオプション」>「詳細設定」のタブを選択して,
「TLS 1.1 の使用」
「TLS 1.2 の使用」
のチェックボックスを外すと,問題が解決することがある.
一方で,TLS 1.2 に対応したページが表示できなくなることもあった.

ということで,面倒ながらアクセスしたサイトでエラーが出る度に,オプションを変えてアクセス仕直すなどの試みが必要となるかも知れない.

CPU 稼動率 in Win7

リソースモニタ
リソースモニタ

AMD のプロセッサを使っており,CPU ダウンクロックの状況を見たかったので,公式ソフトの AMD Power Monitor を探したのだが,どうも公式サイトから消えているらしい.
なぜだろうと考えてみると… Cool'n'Quiet ドライバが Vista 以降の OS 向けに出ていないのと同じ理由ではないか…,つまり OS が標準で類似の機能を搭載しているんじゃないかと考え,
タスクマネージャのパフォーマンスタブを開いてみると,「リソースモニター」とかいうそれっぽいボタンがあった.
当たりでした.

プロセスのトコにある「最大周波数」が,100%の状態で CPU がフル稼動らしい.
ためしに, Pixia で 5000x5000 のキャンパスを開いてお絵描きしてみたら,あっという間に 100% になってしまった.
CPU 使用率が 50% ちょいで止まっていたのは, Dual core だからだろう.

なお,起動オプションを調べてみたら,これで動くらしい.
C:\Windows\System32\prefmon.exe /res
または
C:\Windows\SysWOW64\prefmon.exe /res

もっと省エネを本当に考えるなら,core 毎にクロックダウンできた方がよさそうだ.
って,別チップやん,それじゃぁ.

twitterのspammerのfollowが多い

級にspammerが来始めたので,なんか炎上してた人をフォローしたせいか,大手画像サイトとかをフォローしたせいだろうなぁ.
で,私のfollowerリストから更に他の人に飛び火すると悪いので(もう遅いかも知れんが…),一旦非公開アカウントにしました.
spammerの自己紹介や行動には,一目見て分かるほど特徴が沢山あるので,非公開にしているうちに,自動blockするスクリプトを作ることにした.
これまでの経験上,誰かが私をfollowするのは,頻度が高くても1人/週程度なので,1週間を目処に解決を目指そう.

前提

  • 今借りているレンタルサバ上でwebに溢れているサンプルコードを動かそうとすると,モジュールが足りない
  • pythonのモジュールは,同じディレクトリに置けば動かんこともないが,twitter関係の操作に必要なモジュールを1から入れようとすると,依存関係のため入れるべきモジュールが多い上,それぞれのimport文に対応するよう配置しないといけないので大変すぎる.
  • 自宅PCは最近は1~2回/週しか立ち上げないので,それではspammerのやりたい放題

つーことで,新たな常時起動しているサバを用意するか,コードをある程度自作する必要があることが分かった.
とか思考を全部書いていくと時間が足りないので結論だけ書く.
Google AppEngineでpythonコードを動かすか,標準モジュールだけでpythonコードを動かすかの両睨みができる方法を取ることにする.
具体的には,標準モジュールだけでTwitter APIを操作できるようにしながらも,GAEの開発環境は用意し呼出し部は2パターン作った.

で,cronを使うよりも,twitterでfollowされる度に飛んでくる通知メールをGMailで受け取って,それをトリガーに動作させてみたいと思い,GAEに挑戦することにした.
追記: GAEだもの,GMail くらい直接触れるでしょ,なんて思い込みがあったが,触れないことが分かった.オーノー

GAEについて

pythonしか試していないのでpythonのことを書く.
Google AppEngine より,登録してSDKを落とす.
Windows版はmsiファイル,Linux版はただのzipファイル.
Win版は,C:\Program Files (x86)\Google\google_appengineへインストールされる.Linux版は,unzipして展開するだけ.
python2.5.x でないと動かない.

$ python (PATH)dev_appserver.py demos/guestbook

と実行すれば,サンプルが動作する.

guestbookと同じように,app.yamlとそこから呼び出されるpyファイルを配置すればOK.
制限をかけたい場合は,app.yamlの制限したいscriptを定義しているscript行の下あたりに,login: required (Googleアカウントでログインしてないとダメ) とか, login: admin (GAEの該当プロジェクトの管理者権限がないとダメ) とか書く.
GAEへアップロードするには,

$ python appcfg.py update project_name

とかする.
アクセス先は GAE の dashboard の application settings にあるが,http://application_name.appspot.com とかだと思う.
サンプルみたいに wsgiref.handlers.CGIHandler().run(application) で呼び出してもいいが,デバッグしたい時は,from google.appengine.ext.webapp import utilとインポートしておいて,util.run_wsgi_app(application)とすると,ブラウザ上にデバッグメッセージが表示される.
どうせ開発環境では,dev_appserver.pyを呼び出している窓にも同じメッセージが表示されるけど.
詳しくは,ユーティリティ関数 - Google App Engine - Google Codeとかを参照のこと.
あと,simplejsonとか,ちょっと欲しいモジュールは入っていたりするけど,oauthtwitterとかニッチなのはない.
外部ファイルからクラスをインポートしたい時は,同じフォルダにpyファイルを置いてimportすれば,開発環境では動く.GAE上では試してないので不明.

twitterAPIについて

仕様がよく変わるので,公式の最新のもの(英語)Documentation | Twitter Developersの REST API を見た方が早い.
BASIC認証はもう使えないらしいので,OAuth認証を使う覚悟をする.
情報取得系はGETで叩き,情報更新系はPOSTで叩くRESTful I/F.
応答はJSONかXML.
アクセストークンの発行が死ぬほど面倒くさいので,頑張る.私は,やる夫と Python で学ぶ Twitter の OAuth - YoshioriのBlogを参考にした.
どうせReadもWriteもやりたくなるので,Read/Writeは少なくともつけておく.
QUERYをトークンをキーに符号化したものを署名としてHTTPヘッダへ埋め込み,肝心のQUERYは上記の通りGETかPOSTで投げるので,二重に必要なことを忘れない.

で,上に記載のやる夫と Python で学ぶ Twitter の OAuth - YoshioriのBlogのソースコードを改変して作ったのがこんなクラス → py_twit.py 更新しました → twit_oauth.py
無駄に書いてるimportとかはそのうち消します.
なお,screen_nameをuser_idとする場合,idは文字列で渡すこと.
また,statuses/updateは同じ発言を2回書くと403を返す,など応答については各々調べること.

あんま関係ないが,pythonのこと調べてると,大学時代の同級生がたいてい出てくるので,よくビビる.
今回の案件では,コードの美しさというよく分からん評価軸について語っていたので,反映しなかった.

Yahoo Messenger のメッセージウィンドウにメッセージが表示されない

-- 追記
やっぱし直らなかったので,Yahoo Messenger 9.5 を入れたら直った.
9.5はこちら→ Windows版メッセンジャー ヘルプ - お試し版Yahoo!メッセンジャー バージョン9.5について

--

最近,メッセージウィンドウに表示されるはずの文字が再描画されず,発言があったことを示す窓の点滅と音がすれど,窓は真っ白なままという現象があった.
窓サイズを変更すると,描画コマンドが走るためか,その時点で発言されている文字が表示される.

で,見付けた解決方法はこれ.
Windows版メッセンジャー ヘルプ - メッセージが表示されない

どうやら,IE9にした際に設定が変更されたらしい.

マイドキュメントとかをD:に移動する

  1. `username' という表記を,自分が使っているPCのユーザ名と置き換えて読むこと.
  2. 移動後,フォルダのセキュリティ (パーミッション) を再設定する必要がある.
    具体的には,一番上位のフォルダを右クリック→プロパティ→セキュリティ→詳細設定→アクセス許可の変更→追加→`username' を入力しEnter→フルコントロールにチェックを入れ,Enter (「これらの~にのみ適用する」はチェックしないこと)→Yesを2回選択

マイドキュメントの場合.
C:\Users\`username'\Documents を右クリック→プロパティ
場所,という名前のタブがあるはずなので,選択すると,フォルダパスを入力するボックスがあり,上記のC:から始まる文字列が入っているはず.
この部分を移動先のフォルダパスに書き換えて,適用ボタンを押せば良い.
あとは,ダイアログに従って選択すればOK

上記で簡単にできてしまうことが分かったので,もはや意味はないが,Windows 7でハードリンク,シンボリックリンク,ジャンクションを扱うための知識も調べたのでちょろっとメモ.

シンボリックリンクとジャンクションは,MKLINKコマンドを実行すれば,ヘルプが出る.
なぜか,hadacchiの環境では別ドライブのフォルダとの間にシンボリックリンクが貼れなかったため,ジャンクションで対応した.
ジャンクションは,フォルダにしか適用できない劣化シンボリックリンク,ということらしい… (参考:Windowsにおけるシンボリックリンクとジャンクション、そしてハードリンクを理解する « neetu )

ハードリンクは,同ドライブ内にしか適用できないらしく,hadacchiの目的に合致してなかったので,試してもいない.
fsutilを使うとできるらしいということだけ分かった.