2015/11/14

Managed Native Wifiライブラリ

WLAN Profile Viewerのモデルのコア部分を追加修正してライブラリとして公開しました。
名前のManagedとNativeが矛盾しているような感じもしますが、Native WifiというWin32 APIのマネージドラッパーという性格上、これが一番ストレートな気がしたので。

同種のものは既にManaged Wifiがありますが、これが大枠だけ提供するのに対して、このManaged Native Wifiはすぐ使えるメソッドを提供しています。非同期処理になるものについてはTAPでasync/awaitベースのメソッドも用意しています。

一応、ほぼ同じことはNetshでも可能ですが、反応がやはり遅いのと、処理の結果を非同期に受け取ることができないので(例えば、無線LANに接続するようリクエストはできても、接続できたか否かの結果は直接受け取れない)、使い勝手は劣ります。

1. 機能


現在の機能は以下のようなものです。

・利用可能なネットワーク、BSSネットワークの一覧取得。
・無線LANを(自動走査を待たずに)すぐ走査させる。
・無線プロファイルの一覧取得、追加、削除、順番の変更。
・無線LANへの接続、切断。

アプリのサブ機能でちょっと無線LANを利用したい、というぐらいのカジュアルな用途なら大体カバーできるんじゃないかと思います。というか、自分が昔ほしかった。

ただし、無線プロファイルの追加はプロファイルを構成するXMLを条件に合わせて自分で組み立てないといけないので、実は簡単ではないです。

2. 使用例


例として、現在利用可能な無線LANの中に、それに対応した無線プロファイルが存在していれば、そのうち最も信号状態のよい無線LANに接続するものです。

NativeWifiクラスのEnumerateAvailableNetworksメソッドは利用可能な無線LANの情報を収めたAvailableNetworkPackオブジェクトを列挙します。このProfileNameプロパティに、その無線LANに対応した無線プロファイルが存在していればそのプロファイル名が入っています。

まずこのProfileNameの有無でフィルターした後、同じくSignalQualityプロパティに信号状態が0-100の範囲で入っているので(大きいほどよい)、これの逆順で並び替え、最大のものを取得します。

これが取得できているかチェックした後、ConnectNetworkAsyncメソッドで非同期に接続を試みます。引数はAvailableNetworkPackオブジェクトから無線インターフェイスのID、プロファイル名、BSSの種別をそれぞれ渡します。最後はタイムアウト時間で、ここでは10秒を指定しています。この時間までに接続できればTrue、できなければFalseが戻り値として返ります。実際のところ、信号状態がよければ瞬時に繋がります。

こんな感じでさほど複雑ではないですが、WLAN Profile Viewerの中にもNativeWifiクラスの使用例があるので参考にしてください。

3. 課題

  • エラー処理: Native Wifiで起こり得るエラーについてMSDNでは網羅されてないので、実際どんなエラーが起きてどう処理すればいいのか、まだ煮詰まってません。

  • 取得する情報: Native Wifiで取得できる情報は多岐に渡るので、現在はその一部を拾い出している状態です。ここは使用シナリオに応じて検討の要あり。

  • Wi-Fi Direct: Windows 8以降、Native WifiにWi-Fi Direct関係の関数が追加されていますが、そもそもデスクトップアプリからのWi-Fi Directの使用方法がよく分かってないので、手つかずの状態。

2015/10/05

ThinkPad X230のパームレスト

ThinkPad X230のパームレストの互換性について。

1. 修理上がり


先日、X230をLCD関係の修理に出したら、キーボードとパームレストにも問題が見つかったとのことで、一緒に交換されて帰ってきたのは有り難いのだけど……。
ThinkPad X230: Palmrest

一見どこもおかしいところはないように見えて、自分でも「何か違う気がするけど、まあいいか」と思ってやり過ごしたのだけど、X230を持っている人なら気付くかもしれない。

そう、これパームレスト(キーボードから手前の筐体)がX220用のものになっている。X230のものはキーボードに向かって下がる部分が直線的に折れた平面になっているが、これはなだらかな曲面になっている。

そのくせこれだけ見ると特別おかしくは見えないのは、元々X230が機構的にはX220のキーボードを変更したマイナーチェンジモデルだから。細かく見れば、クリックボタンの横になる部分に、X220のクリックボタンにある曲線のラインにつながる微かな曲線が入っているが、ぱっと見には分からない。

で、そうと分かった後も、機能的には問題ないし、「これはこれで面白いから、このままでいいか」と思っていた。初めのうちは。

そのうちキーボードの右端手前と左端手前が妙にぺこぺこ上下に動くことに気付いて、キーボードを取り付け直したり、果ては両面テープで留めたりしたりして、これはどうもおかしいと思い始めて分解写真を見比べているうちに気付いた。X230とX220のパームレストには互換性があるように見えて、そうではないことを。

2. パームレストの違い


結局、本来のX230用のパームレストを送ってもらって自分で交換することにしたので、そのときに比較してみた。上がX220用で、下がX230用。
ThinkPad X230: Palmrest Comparison

注目すべきはキーボードとパームレストの境目になる部分にある穴で、(角の部分を除いて)左からキーボードの爪が嵌まる穴、キーボードにかかった液体の排水口、爪の穴、クリックボタン部分を挟んで、爪の穴、排水口、爪の穴がある(爪の穴は計4箇所)。この構成と位置は同じだが、よく見ると穴の大きさが違う。
Thinkpad X230: Palmrest Comparison

排水口はほぼ同じ大きさだが、爪の穴は上のX220用は縦幅が広いのに対して、下のX230用は縦幅が狭い。

このこと自体はX230が出た当初から言われていて、X230にX220以前のキーボードを装着しようとしたときの物理的障害になっている。
X220以前のキーボードは金属板の縁が上に立ち上がった浅いバスタブ状になっていて(排水口に面した部分だけ開いている)、爪部分も同じなので高さがある。これに対してX230のキーボードはバスタブを止めたので、金属板がそのまま真っ直ぐ爪になっている。
Thinkpad X230: Keyboard
ThinkPad X230: Keyboard

したがって、X230用のパームレストの爪の穴は縦幅の狭い穴でよく、これにX220以前のキーボードの爪を嵌めるには穴を上に削って大きくする必要がある(あえてその方法を選ぶなら)。逆に、X220用のパームレストの爪の穴にはX230のキーボードの爪はそのまま余裕で通る。

それ以上深く意識してなかったが、そこが実は落とし穴で、キーボードの固定ネジは中央部の2箇所しかないので、左右の端は爪だけで固定される形になっている。キーボードを取り付けるときは初めに奥に差し込んで奥側の金属板をキーボードベゼルに引っ掛けた後、手前に引いて手前側の爪をパームレストに嵌める構造になっている。このとき奥側に引っ掛けた部分でキーボードがわずかに反るテンションが掛かっているので、手前側の爪もぴったり嵌まっていれば強固に固定されるが、ここに遊びがあると手前側が浮き気味になって、タイピング時にぺこぺこ動いてしまう。

したがって、もしX230にX220のパームレストを流用する必要が出たときは、キーボードをきっちり固定するためには爪の穴を小さくする工作が必要、という話なのだが、この情報がいつか誰かの役に立つことがあるのかどうか。

3. おまけ


キーボードの爪がバスタブ状でなくなったことで液体が爪の穴から浸入しやすくなったのでは、と思うかもしれないが、そこは抜かりなかった。パームレストを裏から見ると、
Thinkpad X230: Palmrest Comparison

上のX220用では爪の穴がそのまま抜けているのに対して、下のX230用では爪の穴の奥がシールで閉囲されていて、液体がそのまま中に入らないようになっている。

とはいえ、この排水機構自体、とくに密閉されているわけでもなく隙間も多いので、気休め程度ではあるけど。

2015/09/24

ReadyNASのファン交換

ReadyNAS Ultra 2のファンを初めて掃除して以来、時々掃除してきたが、ついに掃除しても軸音がするようになったのでファン交換を決意した。

1. 失敗のファン


Ultra 2の購入時にファンがうるさかったときのために交換用ファンも買っていたが、元のファンが十分静かだったためにお蔵入りになっていた。この出番がついに来た、というわけで、それに交換すれば終わりの予定だった。

そのファンはオウルテック扱いの山洋電気製SF9-F1で、静音的には鉄板のものだったが……一応温度を見ているとCPU温度がUltra 2では未踏の80度を超え(RAIDar Protocolによる上限は80度)、冷却力不足が露呈した。さすがに回転数が800RPM固定では無理があったらしい。「こんなこともあろうかと……」が実は保険になってなかったという。

仕方ないので、直径9cmで回転数可変のファンということでENERMAXのPWMのUCTB9Pを買ってきたが、これが完全な外れ。たぶん不良個体だと思うが、軸音が元からひどくて話にならない。初ENERMAXだったのだが、不幸な出会いだった。

2. 元のファン


気を取り直して元のファンを改めてチェックすると、このDeltaのAFB0912HHは日本国内の一般の取り扱いはないらしい。ならばと大体同じ筐体の312のファンを見てみると、同じ型番のものだった。
ReadyNAS Ultra 2 and 312: Fans

左がUltra 2のもの、右が312のもので、型番は全く同じ。312本体のコネクタも当然Ultra 2と同じ3ピンのもの。
ReadyNAS 312: Fan Connector Pin

調べてみると4ベイのモデルも同じファンらしいので、ReadyNASの2ベイと4ベイのシリーズでずっと使っているものっぽい。312のファンもこれまでのところ良好なので、これが手に入れば話は早いのだが、サブタイプが複数あって該当するものが分からないし、送料もそれなりにかかる。

3. Noctuaのファン


他に探すとして、3ピンということは4ピンのPWMと違って電圧で回転数を制御していることになる。SF9-F1で回転数が固定だったのは電圧にかかわらず回転が一定になるようにできているのだと思う。そういう場合を除けば選択肢は広い。

一方、静音的には通常時800RPM程度がターゲットなので、ほとんどが定格で1000RPM台半ばのファンのスペックを見たところで参考にはならず、結局は勘になる。回転数の変わる範囲内で、軸音(直接の風切り音以外の音)が出る回転数があるかは実際に回してみないと分からないし。

ということで、一応回転数可変という点を考慮して、NoctuaのNF-B9 redux(非PWM)を購入。回転数変更用の抵抗など付属品を省いたモデルだが、不要なので。

左下が元のDelta、右下が山洋電気、左上がENERMAX、右上がNoctua。
ReadyNAS Ultra2: Replacement Fans

ファンの羽、コアの支柱ともバラエティに富んでいるが、通常時無音を目指すレベルの静音ではあまり関係なかったりする。

NF-B9の結果は当たりで、通常時は十分静かだし、回転数が上がっても気が付くような軸音は発しない。ファンを探す旅も3つ目で終わった。願わくば、次に交換が必要になったときにも市場に存在していることを。