2013年4月16日火曜日

E430 バッテリー充電しない病

そんな"病気"があるのかは定かではありませんが、ThinkPad Edge E430でバッテリーの充電が34%で止まるというおかしな現象が起こっていました。

最初は、ACアダプタの接触不良か何かで充電が止まっただけなのかな?と思ったのですが、確認してみると、確かにACアダプタは繋がっていて、タスクトレイの電源(バッテリー)表示もACアダプタのマークがついています。しかし、バッテリーメータは34%のままで何時間たっても増えも減りもしないし、"充電していません"の表示も出ていました。
普段からシャットダウンせずに、スリープだけで放置して、使いたいときにいつでも使えるようにしているので、バッテリーの充電頻度は週に2~3回くらいですが、そのせいでバッテリー自体がもうへたってきたのかと思いました。が、それにしてもいきなり満充電が34%になるのは酷すぎます。

一度試しに、十分に放電してから再充電してみることにしました。バッテリー駆動して、残り0%(!)の表示になるまで使ってからシャットダウン、その後電源を切ったまま充電を3時間ほどしてみました。すると、今度は99%まで充電できていました。その状態では、たぶん最後のトリクル充電に入っていたのだと思います。

いったい、何だったのでしょうか?
LenovoのHPで検索すると、BIOSのバージョンが上がっており、バッテリー関係と思われる修正がありました。「充電できない」というものではありませんでしたが、「充電時のエラー(?)が通知されない」というような問題があったようなので、何らかの期待をしてアップデート(2.07→2.51)しておくことにしました。これで、再発しなければよいのですが・・・。

2013年3月23日土曜日

ドライブ名とディスクの対応関係を調べる方法

以前から少し気になっていたことを調べてみました。またすぐに忘れそうなので、記録として残しておきます。
おおざっぱには次のようになります。


  1. ディスクの一覧を取得して、それぞれのディスクに対して、そのディスクの下に繋がっているボリューム名一覧を得ます。
  2. 個々のボリューム名と、それに対応する物理デバイスオブジェクト名(SPDRP_PHYSICAL_DEVICE_OBJECT_NAME)の対応関係を調べます。
  3. その一方で、個々のドライブレター(A~Z)とそれに対応する物理デバイスオブジェクト名の対応関係を調べます。
これで、ドライブレター<-->物理デバイスオブジェクト名<-->ボリューム名<-->ディスクまで繋がりました。もちろん、ボリューム名<-->ディスクの関係は一対一とは限りません。

具体的には次のようなAPIを使いました。
  1. SetupDiGetClassDevs()にGUID_DEVINTERFACE_DISKを渡して物理ディスクの一覧を得て、SetupDiEnumDeviceInfo()で個々のディスクに対して、そのディスクのDEVINSTをCM_Get_Device_ID_List()関数にCM_GETIDLIST_FILTER_REMOVALRELATIONSフラグ付きで渡すと、そのディスクの下にあるボリューム名の一覧が得られます。
  2. SetupDiGetClassDevs()にGUID_DEVINTERFACE_VOLUMEを渡してボリュームの一覧を得て、SetupDiEnumDeviceInfo()で個々のボリュームに対して、そのボリュームのSP_DEVINFO_DATAをSetupDiGetDeviceRegistryProperty()関数にSPDRP_PHYSICAL_DEVICE_OBJECT_NAMEフラグ付きで渡すと、物理デバイスオブジェクト名が得られます。
  3. A~Zまでのドライブレターに対して、QueryDosDevice()を実行することで、物理デバイスオブジェクト名が得られます。

「物理デバイスオブジェクト名」という名称は正しくないのかもしれませんが、上の1~3の説明の中で同じものであることを示すために便宜的にそう呼ぶことにしています。

またまたCPUファンが回らない現象が・・・

またこの現象が発生しました。
今度はWindows 8 Proで、前回この現象を確認したときからLenovo PM Deviceドライバを1.66.0.21→1.66.0.22にアップデートしていたのですが、そのアップデートではやはり改善されなかったようです(ドライバのリリースノートにも、それらしいことは書かれていなかった)。
そして、今回は休止状態からの復帰時でした。その後の再現性はありませんから、たまたまそのタイミングで起きたようで、休止状態からの復帰で起きるというわけでもないようです(以前はスリープからの復帰時だった)。

今回もまだ寒い季節で、CPUファンが回ってなくてもCPU温度は75℃~80℃くらいで安定していたので、すぐにはシャットダウンせずにしばらく様子を見ていました。
PowerShellを起動して、Get-WmiObjectコマンドレットあたりをつかえば、WMI経由でFANの関係のステータスが見られるのかな?と思っていろいろ試してみましたが、Win32_FANクラスは何も返してくれませんでした。可能であれば、FANの設定(ActiveCoolingプロパティ)とかをいじって、どうなるか様子を見たかったのですが・・・。

結局、問題はまだ解決しないままです。

2013年3月18日月曜日

[備忘録]Windows8でi-simが動かない件

Windows 8をインストールしたThinkPad Edge E430にFPGAの開発環境を入れる必要が出てきたので、XilinxのISE WebPacket 14.4をインストールしてみました。余談ですが、ISEはバージョンアップごとに肥大しますね。14.4では、15.5GByteもSSDを占有していました。

ISEをインストールした理由はISimを使ってシミュレーションをしたかったからです。が、ISimのコンパイラであるfuseが何故かエラーを出すので、調べてみたところ回避方法がありましたので、また忘れてしまわないように残しておこうと思います(要は、海外の掲示板にあった情報の受け売りなのですが、英語だとなかなか見つけにくいので・・・)

(エラー表示)
ERROR:Simulator:861 - Failed to link the design

(回避策)
ISEをインストールしたときに入るcollect2を使わないようにリネームする

具体的には、C:\Xilinx\14.4\ISE_DS\ISE\gnu\MinGW\5.0.0\nt\libexec\gcc\mingw32\3.4.2\にインストールされているcollect2.exeを適当な名前(collect2_.exeとか)にリネームしておきます。

fuseは、collect2が必要だから呼び出すものだと思うんですが、なぜかリネームして呼び出せないようにするとコンパイルが通ります。とりあえず、これでISimが起動して、波形の確認ができるようになったのでヨシとします。

P.S.持論「PCなんてダマシダマシ使うもの」



2013年3月8日金曜日

[備忘録]USBデバイスの検索方法on Windows

Windows上でUSBデバイスを列挙したり、特定のUSBデバイスを探したりするのは非常に面倒です。というか、Windows上でデバイスを管理するの使われる用語がいろいろあって理解しずらいうえに、紛らわしいもので多いです。例えば、
  • device information set
  • device information element
  • device node (devnode)
  • device instance (DEVINST)
  • device instance ID
  • device interface
  • device interface path
とか…。他にもありそうですが、自分でもちゃんと理解しているかどうかは怪しいです。更に、SDKで定義されている構造体の種類とか含めると頭はバクハツ寸前です。

今回も、例のごとく学習能力が低い私のことですから過去の経験を思い出せずに、四苦八苦してWEBで調べまくって分かったことを備忘録として残しておきたいと思います。
WEBにはサンプルコードがいろいろ上がっていて非常に助かったのですが、結局コピペしてしまうと「何を」「どうやって」いるのかが把握できないままになってしまいますので、要点のみを残しておきます。

  1. USBデバイスの一覧を得るには

    SetupDiGetClassDevs()APIにGUID_DEVICEINTERFACE_USB_DEVICEを渡して呼び出す。もし自作ドライバなどで自前のデバイスインターフェースGUIDが定義されているなら、それを渡せば自分のUSBデバイスだけの一覧が得られる。

  2. USBデバイスにアクセスするためのデバイスインターフェースパスを得るには

    SetupDiGetInterfaceDeivceDetail()APIを呼び出す。

  3. USBデバイスがつながっているHUBのデバイスインターフェースパスを得るには

    SetupDiEnumDeviceInfo()APIで、デバイス一覧から一つのデバイスを取り出す。得られたdevice instanceをCM_Get_Parent()APIに渡して、親デバイスであるHUBデバイスのdevice instanceを得る。
    CM_Get_Device_ID()APIでHUBデバイスのdevice IDを得て、更にそれをCM_Get_Device_Interface_List()APIに渡すことで、HUBのデバイスインターフェースパスが得られる。
    これをCreateFile()APIに渡せばHUBデバイスを開くことができる。

  4. あるUSBデバイスが親であるHUBの何番目のポートに繋がっているかを知るには

    SetupDiEnumDeviceInfo()APIで特定のデバイスを取り出した後、それをSetupDiGetDeviceRegistryProperty()APIに渡す。このとき取り出すプロパティ値としてSPDRP_ADDRESSを指定すると、返される値はHUB中ののポート番号となっているようです。
    (どこにもそういう情報は見つけられませんでしたが、実験した限りではそういうことになっているようです)

  5. USBデバイスのデバイスディスクリプタを得るには

    上の3で得られた親HUBデバイスのデバイスインターフェースパスでHUBをCreateFileしたのち、そのデバイスにIOCTL_USB_GET_NODE_CONNECTION_INFORMATIONリクエストを投げます。このとき、4で得たポート番号を使います。
    このリクエストで渡したUSB_NODE_CONNECTION_INFORMATION構造体にはデバイスディスクリプタの内容が書き込まれて返されます。

特に3と4は今回発見した新しい方法でした。

2013年3月6日水曜日

LogicoolのK230を購入

職場でもThinkPad Edge E430がメインPCになりつつあるので、これまでメインとして使ってきたデスクトップと切り替えて使うために、USB切替器とLogicoolのワイヤレスキーボードK230を買ってみました。
本当はUSB切替器だけ買うつもりだったのですが、ちょっとついでに見てみたらワイヤレスキーボードが本当に安くなっているので、つい衝動的に買ってしまいました。Logicoolはワイヤレスマウスで非常に満足しているので、キーボードも特に迷うことなく、「これでええやん!」的に・・・。

Amazonで注文して翌日には届きました。開けてみて驚いたのは、小さい!そして軽いということ。なるほど、これだったら1500円そこそこで売っているのも理解できる。とにかく机の上がすぐに散らかってしまうので、このくらい小さいキーボードはまさに求めていたもの。意外な収穫だと思いました。

キーボードのタッチは悪くないです。カタカタ安っぽい音はしないし、打鍵はちょっと重い気がしますがしっとりしているとも言えます。ファンクションキーは普通の大きさにしてほしかったけど、押しにくいということはないです。ネット上ではいろいろ言われているENTERキーもさほど押しにくくはないけれど、いまいちなのでやはり右SHIFTキーが小さいこと、それからENTERの横の鍵カッコ[と]キーが小さくされていること(C++でソフトを書く人間としては[と]キーは頻繁に使う)、それからカーソルキーが小さすぎること、この3点がNGなところだと思います。

それと、個人的意見ですけど、テンキーは要らないです。このテンキー部分にフルキーボードと同じサイズのカーソルキーとHOME&ENDキー、PgUp/PgDnキーがあると最高によかったんですけどね。そういうキーボードを探すとテンキー付のフルキーボードになってしまうんですよね・・・。

と、いいつつ探してみるとショックなことを発見。K230ではなくて、K270というワイヤレスのフルキーボードがあるじゃないですか!しかも、K230より安いorz。
とはいえ、K230のコンパクトさは捨てがたい。これまで何台ものノートPCを渡り歩いてきて、その都度ちょっとずつ違うキーボードに戸惑いつつも慣れで乗り切ってきたのだから、K230も慣れてくるでしょうか。
せっかく買ったので、もうちょっと使い込んでみようかと思います。

2013年1月23日水曜日

Lenovo自動スクロールユーティリティのハンドルリーク

先日から気になっていたことがあります。

Windows8のタスクマネージャを見ていると、使用中のハンドル数が半端なく多かったです。多かったときはハンドル総数が70万を超えていることがありましたが、当初は特に気にしていませんでした。64bit OSだしそれくらハンドルを使っても問題ないだろうし、実際特にメモリ不足やリソース不足といったエラーが出ているわけでもありませんでした。

しかし、よくよく見てみると、ハンドル数は徐々に増えていることに気づきました。スリープを常用しているのでまともなシャットダウンor再起動は月に1~2回くらいで、連続使用時間が伸びるとともにハンドル数も増えているようでした。

何かのアプリorサービスがリソースリークしているのだろうとは思いましたが、特に問題は出ておらず、再起動のタイミングなどでリセットされるので、まあいいと思って使っておりましたが、ちょっと気になって調べてみました。

すると、リソースを大量に使っているのは、virtscrl.exeというプロセスでした。調べてみると、これはLenovoの「自動スクロールユーティリティ」というものらしいです。

名前から勝手に想像していたのは、「タッチパッドでスクロールさせるとき、アクティブな(最前面の)ウィンドウをスクロールするのでなく、カーソルの真下の(アクティブではないかも知れない)ウィンドウをスクロールする」ようにしてくれるものだろうと思っていましたが、いま改めて調べ見るとそうではないようです。このユーティリティの機能は、
  • ウィンドウが画面からはみ出しているときに、そのウィンドウを使おうとマウスカーソルを近づけたり、アクティブにすると、ウィンドウが画面内に入るように自動的に調整される
というものでした。

はっきり言って、要りません!ましてや、何のためのハンドルかは分かりませんが、ハンドルを無駄にリークしているようなアプリ/サービスは御免です。

というわけで、アンインストールしました。いまはハンドル数40000程度で落ち着いています。

2013年1月8日火曜日

ThinkPad Edgeに新型が

ThinkPad Edge E430/E530に、いよいよ新型(E431/E531)が出るようですね。

(→情報ソース

まあ、PCなんて次々新しいものが出て、古い機種は陳腐化していくのは常ですから仕方ないのですが、今回はどうやら14インチタイプのE431にもHD+液晶(1600x900)が選択できるようになるというのは意外でした。いま使っているこのE430をHD+化してプチ優越感に浸っていたところなので、ちょっと残念です。高解像度モデルは、T/Xシリーズなどの高級モデルだけに搭載するという販売戦略なのかなと思っていたものですから・・・。

でも、まあ発売は5月でまだ少し先ですし、詳しいスペックは分かりませんが最も安いモデルで$539ということですから、円高の間にi7-3612QM搭載機が6万円そこそこで買えて、そしていま現在使えているという事実はありますので、それはそれでよかった(と思いたい)です。

2013年1月1日火曜日

ムラーノの燃費

昨年2012年の1年間を通した燃費を記録しておきます。初代ムラーノの前期型350XV(PZ50)です。


  • 年間走行距離 45337.4km
  • 消費した燃料 3892.82L
  • 平均燃費 11.65km/L
でした。
季節変動を示すために月別の燃費をグラフ化してみたのですが、運転の仕方によって結構ギザギザになるのであまり参考にならないと思い省きました。ただ、全体としての傾向(冬は燃費が下がり、夏は多少高め)というものは見られるような気がします。

この初代ムラーノ前期型は発売から8年以上経過しますから、もう中古でも欲しい人は少ないかも知れませんが、購入検討時の参考になればと思います。

2012年12月20日木曜日

Raspberry Pi まだ来ない

先月29日に注文したRaspberry Piがまだ来ないです。もうすぐ3週間になるというのに・・・。

当初は注文が殺到して(というか生産体制が不十分で?)何か月も待った人もいるそうですが、現在は順次生産されていてそんなにかからないと思っていたのですが。
こちらのサイトによると、どうもRSオンラインからの購入は納期がかかるとのことで、そういう意味では失敗したかなーという気もします。せめて年内でも12月中旬くらいには届くことを期待していましたから。

今さらですが、RSオンラインのFAQページにこういう表が出ていることに気が付きました。


これによると、私の注文番号は1010212xxxですから、今月の17日~23日のうちに出荷ということでしょうか。「出荷」とは言っても、たぶん英国からということでしょうから更に+1週間は覚悟しておかなくてはいけません。年内到着はかなりキビシイようです。
年末年始はそれなりに忙しいので、どちらにしても年が明けひと段落した来年1月中旬以降にならないと手が付けられそうにないです。残念・・・。


(2012/12/25追記)

昨日(12/24)に突然到着しました。

RSオンラインの「Raspberry Piに関するFAQ」によると、


Q - 配送状況を確認することはできますか?
A - 弊社からの出荷が完了した時点で、通知メールが届きますのでそちらのリンクよりご確認いただけます。RSオンラインから配送状況のご確認はできません。



とのことですが、出荷完了メールは結局来ませんでした。あまり当てにならないようです。注文から1か月以内には届きましたので、生産状況としてはまあまあ良くなっているようです。


とりあえず、SDカードにRaspbianのイメージを書いて電源を入れると、無事にブートしました。お楽しみはこれからです。