Elasticsearchって聞くんだけど、なんだろう??

と思ってたわけです。とりあえず動かしてみるとか、勉強会行ってみるとかしたんだけど、どーにも分からん。そのうち、どーやらJSONというものが関係してるらしいと知って、JSONについて調べてみたら・・・・・あ、あっさり理解できた。

ちうわけで、簡単にまとめてみる。

まずは、よく見かける説明を

Elasticsearchはオブジェクト指向型データベースで、検索に特化したものであある

ポイントは、オブジェクト指向型データベースってところなんですね。で、データベースじゃなくて、オブジェクト指向型のドキュメントというのがあって、XMLとかJSONとかymlとかがあるわけですね。

つまり、オブジェクト型ドキュメントがわかれば、そのオブジェクト指向型ドキュメントを溜め込んでくれるデータベースがオブジェクト指向型データベースとなる。

オブジェクト指向型ドキュメント、というか、JSONって?そこまで分かればググろうや。 じゃなくて、まぁそれが肝なんですが、よーするに箇条書き文章と思えば良いわけですね。ただし、見出し付き箇条書き。

  • バイナリィポット:処女作。喫茶店と仮想現実空間が舞台。なっちゃんかわいい
  • プリンセスホリデー:第二作。ファンタジー世界が舞台。シルフィーかわいい 月は東に日は西に:第三作。学園もの。ちひろちゃん最高
  • 夜明け前より瑠璃色な:第四作。学園もの。麻衣ちゃんかわいい
  • FORTUNE ARTERIAL:第五作。学園もの。白ちゃんかわいい
  • 穢翼のユースティア:第六作。ファンタジー世界。リシアかわいい
  • 大図書館の羊飼い:第七作。学園もの。佳奈すけー
  • 千の波濤、桃花染の皇姫:第八作。和風ファンタジー。古杜音もふー

とまぁ、こんな箇条書きはよくあるのではないかと。 この箇条書き文章をJSONで表記するとこうなる。

[{

"タイトル" : "バイナリィポット" ,

"舞台" : "喫茶店と仮想現実" ,

"お気に入り" : "諏訪 奈津子"

} , {

"タイトル" : "プリンセスホリデー" ,

"舞台" : "ファンタジー世界" ,

"お気に入り" : "シルフィー・クラウド"

} , {

"タイトル" : "月は東に日は西に" ,

"舞台" : "学園" ,

"お気に入り" : "橘 ちひろ"

} , {

"タイトル" : "夜明け前より瑠璃色な" ,

"舞台" : "学園" ,

"お気に入り" : "朝霧 麻衣"

} , {

"タイトル" : "FORTUNE ARTERIAL" ,

"舞台" : "学園" ,

"お気に入り" : "東儀 白"

} , {

"タイトル" : "穢翼のユースティア" ,

"舞台" : "ファンタジー世界" ,

"お気に入り" : "リシア・ド・ノーヴァス・ユーリィ"

} , {

"タイトル" : "大図書館の羊飼い" ,

"舞台" : "学園" ,

"お気に入り" : "鈴木 佳奈"

} , {

"タイトル" : "千の波涛 桃花染の皇姫" ,

"舞台" : "和風ファンタジー世界" ,

"お気に入り" : "椎葉 古杜音"

}]

構造化されたテキストはこういう風に、文章を意味で区切ってその意味ごとにテキストを入れるということ。

で、Elasticsearch にデータを入れるときは、「 {"タイトル" : "月は東に日は西に" , "舞台" : "学園" , "お気に入り" : "橘 ちひろ"} 」 を1件のデータとして登録するわけです。7件のデータを登録できるわけですね。

そしてそして、検索に特化したものが Elasticsearch なんですから、検索しなければ意味がありません。「 {"舞台" , "ファンタジー"} 」として Query を発行しましょう。すると、プリホリ、ユースティア、千桃の3本が検索結果として帰ってくるのです。ポイントは、千桃も結果として帰ってくること。データは「和風ファンタジー」となっていても、部分マッチで「ファンタジー」で検索されてくるわけです。

ちうわけで、Elasticserach とか、MongoDB とかを知りたければ、JOSNを知れ(XMLでもいい)

GPD WINなるパソコンはご存知だろう。

こやつのバッテリが妊娠した・・・・予兆はあったんですよ、2ヶ月くらい前、バッテリのもちがものすごく悪くなって、満充電の状態から30分程度で放電しきってしまうという。その後、なぜかバッテリのもちは回復して1,2時間は持つようになったものの、今度はなーんか裏蓋が膨らんできた。

ちうわけで、開けてみた。

DSCN6457.JPG

わかりにくいですけど、膨らんでます。手前に盛り上がってるんですよね。

なわけで、こりゃ交換しかない!

探してみたら、赤札天国で取り扱いがあるんですよ。一度売り切れになってたんですが、再入荷したっぽいです。ただ、赤札天国って大丈夫なんかなぁ、なんか中国っぽいなぁ・・・・と思いつつ、ポチ。問題なく届きました。

で、妊娠したバッテリと、新品バッテリを比較して見ましょう。

DSCN6459.JPGDSCN6458.JPGバッテリーは両面テープで貼り付けてあるので、マイナスドライバーでこじったため、傷がついてます。失敗すると、火吹くかも

ちうわけで、交換して無事復活した模様

DELL PowerVault TL4000

| コメント(0) | トラックバック(0)

バックアップと言えばテープ!

ん?いまどき、バックアップはHDDだろうって?いやまぁ、そうなんですけどね。HDD が十分すぎるほど安くなったんで、もはやバックアップはHDDでいいだろ?って、その通りですよ。

だけどね、なんかテープバックアップって、ロマンやん。というわけで、LTOでバックアップします。

とーぜん、LTOなんて業務用機しかないわけで、めっさ高い!しかも、SCSI だ、SAS だと高いインターフェースしかない!いちおーUSBでつながるのもあるにはあるものの、最新モデルでヤフオクなんぞには出てない。

と、そんな中で、ふと思いついたのが iSCSI 。そーだ、iSCSI ならIP 到達性さえあれば接続できる。つまり、仮想マシンから使える。さらに、ネットワークだから、遠隔にも置ける。よーし、iSCIS で行こう!と。

で、探してみたところ、DELL PowerVault TL2000/TL4000 が iSCSI に対応してる

DSCN6422.JPGちうわけで、ヤフオクにてお買い上げ。写真の TL4000 と、TL2000 の2台セットで9800円。もちろん、ジャンク!届いた品物を確認したところ、TL4000 は Fan Erro 、TL2000 は Robotics Error が出てます。さーて、どうしたものか。

まずは、装置のリアを確認。

DSCN6425.JPGケーブリングしてますが、TL4000 のリア面です。なお、後述してますが、右の上から2段目のスロットに拡張モジュールを追加してます。ここで確認したいのが、真ん中にあるファンがついたユニットが二個あること。こいつを引っこ抜いてみると、

DSCN6435.JPGこのモジュールが LTO テープドライブそのものなんですね。TL4000 の場合、このドライブが2個入ってます。あとは、

DSCN6433.JPG電源装置も2個。冗長電源になってます。

そして、TL2000 は、このドライブモジュールと電源モジュールが一個づつしかついてない仕様なわけです。

でまぁ、ジャンク品のエラーに話が戻るわけですが、TL4000 は Fan Error なわけです。筐体を見渡しても、Fan はドライブモジュールについてるやつと 電源についてるやつ。もしかして、ドライブモジュールのファンが死んでるだけ??というわけで、TL2000 からドライブモジュールを引っこ抜いて、TL4000 にさしてみたら、おお!エラーが消えた。

というわけで、TL2000 と TL4000 をニコイチして、動く TL4000 ができちゃいました。

じゃあ、使ってみましょう。

目的は、iSCSI で LTO を使うこと。なので、Ethernet でつなぐわけです。さっきのリア面の写真をみてください。右下に Ethernet のポートがあるのが見えると思います。ふむふむ。これにつなげばいいんだな・・・・と思ってあれこれいじってみたんですが、ここで落とし穴。

DELL  の TL4000 のページには、「ドライブコントローラ:SAS、FS、iSCSI」と書いてあるので、この右下の Ethernet で iSCSI が使えるんだろーなーって思っちゃうんですが、このポートは、筐体マネジメント GUI 専用で iSCSI のインターフェースじゃありません。リンク速度も 10/100M しかありません。

というわけで、必要になるのがこのモジュールとケーブル。

DSCN6442.JPGさきほどのリア面の右下にささってた管理モジュールボードと比較すると、仰々しさが違います。

DSCN6446.JPGこの左側のボードが、TL2000/TL4000 専用の SAS-iSCSI Bridge モジュールです。ヤフオクで一個だけ 10000 円で出てたので、即落札しましたが、他に出品されてるのは見たことがありません。

ちなみに、LTO ドライブモジュールの背面にあるのは、

DSCN6443.JPGこんな SAS コネクターだけなので、Bridge モジュールが手に入らないと、SAS でしか使えない代物になってしまいます。

ところで SAS って SCSI みたいにディジーチェーンで繋ぐことができるものじゃないんです??Bridge ボードには SAS コネクターが一個しかない。ドライブには2個ある。じゃあ、ディジーチェーンできるよね?と SAS ケーブルをもう一本買ってつないでみたんですが、認識しませんでした。はて?わからん・・・

FreeBSDとLinuxでNFS

| コメント(0) | トラックバック(0)

FreeBSD と Linux の NFS は鬼門とか言われるらしいんですが、つながざるを得ない場合もあるんですよ。しかもこんな環境

NFS-CIFS.png

Linux ベースのアプライアンスで、データ領域を必要とするような場合ですね。うちでは foltia なんですけどね。

用件別にまとめると、

  • NFS サーバ: FreeBSD / NFS クライアント:Linux
  • CIFS サーバ:Linux / CIFS クライアント:Windows

って、わざわざ書かなくても、CIFS クライアントは Windows で当たり前なんですが。

で、まぁ厄介なのが NFS まわりの話。

FreeBSD 同士の NFS であれば、NFS サーバで

nfs_server_enable="YES"
mountd_enable="YES"

これだけ設定すりゃ、NFS マウントできるわけです。なんとなれば、mountd_enable さえなくても大丈夫。

ところが、NFS クライアントが Linux になると、

nfs_server_enable="YES"
nfsuserd_enable="YES"
rpcbind_enable="YES"
mountd_enable="YES"

これだけ設定しないと、マウントが失敗するわけです。RPC周りの動作が異なるらしく、RPC関連のサーバをちゃんと動くようにしないといけないらしい。あと、Daemon 動かすだけじゃなく、通信を許可する設定も。

/etc/hosts.allow

rpcbind : A.B.C.0/255.255.255.0 : allow

あとは、NFSv4 を有効にするとダメで、NFSv3 にすることが必須

とまぁ、NFS サーバとなる FreeBSD でこれだけ設定すれば、Linux から NFS マウントはできるようになるんです。


ところが、この Linux サーバ上で Samba を動かして、NFS マウントした領域を CIFS でアクセスしようとすると、これがまたコケる。

どうすりゃいいか、さらに FreeBSD の設定を追加します。

nfs_reserved_port_only="YES"
rpc_lockd_enable="YES"
rpc_statd_enable="YES"

これで CIFS からアクセスが可能にはなるんです。が、ファイルアクセスがすごく遅い。スループットが出ないという意味ではなく、ファイルコピーなどの操作を行っても「コピーの準備をしています」で数分待たされて、ようやくコピーが始まるわけです。

おそらくは CIFS アクセスで必須なロック関連がタイムアウトするのを待っちゃうんじゃないかなぁと。キャプって調べてみたところ、NFS クライアントから NFS サーバに対して UDP 111  (SunRPC) 通信をしようとしてるんだけど、これが遮断されてました。

遮断してるのは、Linux の iptables。そりゃまぁ、RPC なんて古代のプロトコル、怖いからって止めますわな・・・・

とはいえ、何とかしないと使い物にならないわけで、しかもLAN内のサーバなんだし・・・・

chkconfig iptables off

またもや、Thinkpadの話です。どんなけThinkpad好きなんやねん、自分。まぁ、また分解修理する話なんですが。

今回は、Thinkpad8というマシンです。8インチタブレットです。以前にMiix 2 8というマシンについて書きましたけど、あのマシンとは比べるべくもありません。タッチパッドが効かなくなることはないです。スリープから復帰しなくなるなんてこともありません。Thinkpadを名乗るだけのことはあります。

とはいえ、モバイル機。どうしてもガタが来るんですね。イヤホンを刺しても、イヤホンから音が出ず、本体スピーカがなってしまうという問題がでました。まぁ接触不良でしょうよ、ってことで分解してみます。

タブレットなんで、シャーシは爪固定です。だけど、分かりにくいところに一本ネジが。DSCN0190.JPG0番ドライバーで回す小さいネジです。これを外して、爪をコジコジやると、裏蓋が外れるわけです。DSCN0186.JPG問題のオーディオ関連がここDSCN0185.JPGイヤホンジャックの基盤と両側にスピーカーがついてます。で、フラットケーブルがシステムボードへ延びてる。DSCN0184.JPG試しに、このコネクターを上から押してみると、

「かちっ」

あ・・・・・・

コネクターが緩んでたのね・・・・・

テープで止めてあるとはいえ、モバイル機。やはりテンションとかかかって外れるんでしょう。イヤホン刺したら、ちゃんとイヤホンから音が出るようになりました。

なお、このマシンの挙動を見てると、イヤホンを刺すと、ドライバーでイヤホン接続を検出して出力を切り替えるようです。昔ながらの、コネクター刺したら接点が浮いてスピーカーが切り離されるというのではなくて。なので、イヤホンが刺さった信号がシステムボードに届かないと、イヤホンに切り替わりません。

自家製アプコン

| コメント(0) | トラックバック(0)

通称アプコン、アップスキャンコンバーター。

DVD 時代の画像は SD、今はハイビジョン。まぁ単純に解像度が違います。そして、DVD 時代の作品には名作が多い!今が少ないかどうかは別にして・・・・

で、まぁ DVD で出てた作品がBDで出るものもぽつぽつ増えてきたんですが、自前でなんとかならんの?とおもってたら、やってらっしゃる方が!

よっし、私もやってみよ。ってことで試してみました。

元画像がこれ

img1236_org.jpgそして、これを拡大したのがこれ

img1236_up.jpgサムネイルだけでは良くわからんと思うので、拡大してみてみてください。ほんとうに綺麗に拡大されてます。神奈様の後ろに立ち上ってる雲のディテールを比べてみてください。もともと大きい画像があったのを縮小したんですよ。と言われて納得できる画質です。まぁ、そういうコンセプトで作られたソフトなんですけどね。

で、これを動画として再構築したのがこのサンプル

名作、京アニの AIR のエンディングの1シーン、羽を生やした神奈様が大空を飛んでいくシーンで、当時は度肝を抜かれるものすごい綺麗な映像でした。そのシーンをアップスキャンコンバートしたものです。皆さん、この作品は DVD 持ってますよね?見比べてみてください。

これを作るための大まかな流れとしてはこんな感じ

  1. 動画をフレームごとに静止画に分解する。このとき、インターレス解除を忘れずに
  2. waifu2x というツールを使って、全静止画を縦横2倍に拡大する
  3. 拡大した画像を MotionMPEG として動画に再構成する
  4. とりまわしが良いように、H264 でエンコードする

とまぁ、この辺の内容も先の unsuitan さんの日記と同じです。

何が違うか?

  • オンプレの FreeBSD でやった
  • waifu2x でノイズ除去をかけないようにした

まず、FreeBSD でこれをやるには?
Ports から multimedia/ffmpeg と、graphics/waifu2x-converter-cpp をインストールします。
環境構築としてはこれだけ。

あとは、Shell でゴリゴリやります。

# mkdir jpg

# mkdir upconv

# ffmpeg -i AIR.mkv -acodec copy -map 0:1 AIR.ogg

# ffmpeg -i AIR.mkv -f ffmetadata AIR_meta.txt

# ffmpeg -i AIR.mkv -deinterlace -f image2 -qscale 0 jpg/img%05d.jpg

# cd jpg

# ls > ../list.txt

# cd ..

# foreach i ( `cat list.txt` )

foreach? waifu2x-converter-cpp -m scale -i jpg/$i -o upconv/$i

foreach? end

# ffmpeg -r 29.97 -i upconv/img%05d.jpg -i AIR.ogg -vcodec mjpeg -qscale 0 -acodec copy AIR_up.avi

# ffmpeg -i AIR_up.avi -i AIR_meta.txt -map_metadata 1 -codec copy AIR_up_meta.avi

# ffmepg -i AIR_up_meta.avi -vcodec libx254 -aspect 16:9 AIR_up.mkv

ffmpeg のオプションについては適宜ぐぐってください

ポイントとしては、

  • インターレス解除は必須
  • waifu2x のノイズ除去は必要に応じて
  • アスペクト比設定は忘れずに

インターレス解除はやらないと見てられません。これはこっち方面に手出したことある人なら説明不要でしょう。

ノイズ除去は要検討事項です。waifu2xのノイズ除去は、JPEG化の量子化ノイズを除去するためのものなので、DVDソースのような十分にビットレートが確保されたデータをJPEG化した場合、意味があるのかが微妙です。AIRの動画について言えば、ノイズ除去をかけると絵がぬっぺりします。セル時代のアニメだったら効果あるかもしれないですが、デジタル製作時代だとむしろ悪影響かもしれません。
処理対象としたい作品のOPだけとか、短い映像を取り出して作品ごとにノイズ除去レベルを決めたほうがいいんじゃないかなと思います。

最後にアスペクト比。もうDVD時代のことなんて、私もすっかり忘れててハマったんですが、DVD に 16:9 の動画を収録するときは、「4:3 で動画を収録して、再生時に適宜 16:9 で表示してね」という方式です。なので、DVD動画をそのままアプコンして動画化すると、縦長映像になってしまいます。
なので、動画コンテナに 16:9 ですよという情報を付加してコンテナファイルを完成させます。

Thinkpadのタッチパッド

| コメント(0) | トラックバック(0)

要らないものの代表と言っていい、Thinkpadのタッチパッド。

なんでThinkpad使うのか?と問われれば、もはやサポートもあてにならない、保守マニュアルもいつ消されるかわからない。Lenovoに堕ちてしまったThinkpadにとってのメリットって、トラックポイントくらいしかないわけですよ。なんでスライドパットなんかつけるの??

でだ、まぁ、市場的に付けざるをえないんでしょうな。そんなスライドパット、当然のように無効化して使うわけです。コントロールパネルの「マウス」の設定から無効化するわけですよ。

Mouse.png

あ、そうそう、「マウス」ダイアログに「トラックポイント」タブもしくは、「UltraNav」タブがないときは、いったんスライドパッドを有効化してやるとタブが現れるようです。Thikpad T42 を再セットアップしたときに遭遇した問題でした。

で、本題にもどって無効化の話

Lenovoのサイトを見ると、

休止/スリープモードからの起動、再開、またはWindowsに入ります。 タッチパッドは自動的に有効になります。上記の手順を繰り返して無効にします。

こんな記述が。
休止から復帰したら、タッチパッドを再有効化って、何かんがえてそんな設定にしたんだか。Thinkpad T60 の話です。

ちうわけで、もうBIOSからばっさりヤるしかない。

DSCN0151.JPG.jpegDSCN0150.JPG.jpegBIOS画面に入って、[config]-[Keyboard/Mouse]-[Touch Pad]で無効化してやりましょう。

UPSバッテリーの寿命

| コメント(0) | トラックバック(0)

UPSを使ってると、必ず出会うのがバッテリ交換。

環境温度にもよるそうですが、UPSメーカによると3から5年程度で寿命を迎えるのが一般的だそうです。

でまぁ、うちのサーバ系でもUPSが稼働してるんですが、そのうち1台で1年半ほど前に警告がでて交換しました。まぁ、これで当分は大丈夫だろ・・・と思ってたんですが、またしても交換警告が。しかも今回は2台連続で。1台は稼働開始から3年ほどたったUPSなんで、まぁ妥当っちゃぁ妥当なんですが、もう一台が1年半前に交換したUPS。
えぇー?なんで・・・・?

ちうわけで、調べてみることにしました。

ぐぐってみると、バッテリー寿命は電池の内部抵抗を見てるとか。というわけで、こんな装置をつくってみました。

DSCN0153.JPG.jpeg

DSCN0154.JPG.jpeg

制御系にRaspberry PIを利用して、電池からの放電制御と電流・電圧測定を行います。
負荷は、バッテリーを直結しておおよそ1Aが流れるくらい、すなわち10Ωくらいの抵抗。で、この抵抗がめっちゃめちゃ発熱するので、金属板に熱伝導シールで貼り付けてあります。

これでどーするかというと、

  1. 負荷出力OFF状態で、バッテリの開放電圧を測定
  2. 負荷出力をONに遷移させて、バッテリの両端電圧と電流を測定
  3. 開放電圧と、ON時電圧・電流からバッテリの内部抵抗を計算
  4. 負荷出力をONにしたまま、一定時間おきに電圧・電流値を測定
  5. 電圧が11Vに達した時点で負荷出力をOFFし、時間を計測
  6. 記録した電流・電圧からAh値を計算

まぁ、やってることは、ぜーんぜん大したことなくて、手動でもできるんですが、Pythonスクリプトでやったら楽だなってことで、PI にやってもらいます。

でまぁ、測定結果はこんな感じ

Ah 内部抵抗
オムロン 新品バッテリ

6.15

0.124
UPS1号機から外したバッテリ 3.37 0.152
UPS1号機から2回目に外したバッテリ 6.68 0.138
UPS2号機から外したバッテリ 5.88 0.111
6年前にUPSから外したバッテリ 0.11 0.261

長期放置したバッテリは容量スカスカになってますが、交換で外したばかりのバッテリ、 全然劣化してるように見えないんですが・・・・・・?

内部抵抗も、新品と、交換したてバッテリ2個でほとんど変わらない。

数字じゃわかりにくいので、グラフにしてみよう。

Graph.jpg右下の3個の測定点の違いが判らない・・・・・新品より容量が大きいのもあれば、内部抵抗が小さいのもある。

これ、UPSのバッテリ診断を信用していいんか・・・・?


最後におまけ。

測定スクリプトも載せておきましょう

#coding: utf-8

import io
import sys
import smbus
import time
import locale
import psycopg2
import struct
import RPi.GPIO as GPIO

bus_number  = 1
args = sys.argv
i2c_addr = 0x47

interval = 5
lowlimit = 11.0

bus = smbus.SMBus(bus_number)

def writeReg(reg_addr , data):
        bus.write_word_data(i2c_addr , reg_addr , data)

class INA226:
        vol = 0
        amp = 0

        def __init__(self):
                writeReg(0x05 ,0x000a)
                time.sleep(1)

        def readData(self):
                val = bus.read_word_data(i2c_addr , 0x02)
                val = struct.unpack(">H" , struct.pack("<H" , val))[0]
                self.vol = val * 1.25 / 1000
                val = bus.read_word_data(i2c_addr , 0x04)
                val = struct.unpack(">h" , struct.pack("<H" , val))[0]
                amp = val
                self.amp = val / 1000.0
                #print "Voltage %0.3f (V)" % (vol)
                #print "Current %0.3f (A)" % (amp)

def DBwrite():
        item = pg_con.cursor()
        item.execute("BEGIN;")
        SQL = "LOCK TABLE %s IN ACCESS EXCLUSIVE MODE;" % (table)
        item.execute(SQL)
        SQL  = "SELECT max(\"id\") FROM %s;" % (table)
        item.execute(SQL)
        itemRes = item.fetchone()
        newid = int(itemRes[0]) + 1
        SQL  = "INSERT INTO %s " % (table)
        SQL += "(\"id\" , \"date\" , \"sensor_id\" , \"voltage\" , \"current\") "
        SQL += "VALUES('%d' , now() , '%d' , " % (newid , sensor_id)
        SQL += "'%7.3f' , '%7.4f') ;" % (vol , amp)
        item.execute(SQL)
        item.execute("COMMIT;")


def setup():
        GPIO.setmode(GPIO.BCM)
        GPIO.setup(14 , GPIO.OUT)
        GPIO.output(14 , 0)
        ina226 = INA226()

setup()
ina226 = INA226()

def InterImp():
        ina226.readData()
        volOff = ina226.vol
        GPIO.output(14,1)
        time.sleep(0.1)
        ina226.readData()
        GPIO.output(14,0)
        vol = ina226.vol
        amp = ina226.amp
        imp = (volOff - vol) / amp
        print "Open Voltage %0.3f (V)" % volOff
        print "Inter impedance %0.3f (OHM)" % imp
        time.sleep(1)

def Discharge():
        past = 0
        print "\"time\",\"Voltage\",\"Cirrent\""
        GPIO.output(14,1)
        time.sleep(0.1)
        while(1):
                ina226.readData()
                vol = ina226.vol
                amp = ina226.amp
                print "%d,%0.3f,%0.3f" % (past , vol , amp)
                if(vol < lowlimit):
                        GPIO.output(14,0)
                        print "Discharge time %d (sec)" % past
                        return;
                time.sleep(interval)
                past += interval

if __name__ == '__main__':
        InterImp()
        Discharge()

PIからの接続は、このスクリプトからリバースエンジニアリングしてください(をひ

使ってるのは、スクリプトからもわかる通り、INA226のモジュールです。このモジュールをPI から叩きたい方も、サンプルにどーぞ

タバコ臭くて使い物にならんからと、溶剤で洗浄したThinkpad T60ですが、わりとマシにはなったものの、一回の洗浄では実用には足りないレベルにしかなんらんかったようで、まぁまだ臭い!!

というわけで、再洗浄してみました。

今度つかったのはこれ

DSCN0143.JPG.jpeg匂いだけで見れば、前回のスリーボンドのと同じ溶剤っぽい。だけど、こっちのが安い!つまり、こっちでいいんじゃないかな。

でまぁ、これ使って全体を再洗浄したわけですが、

DSCN0146.JPG.jpegDSCN0148.JPG.jpegやってもた。ディスプレイ面からも臭ってたので、画面も洗ったんだけど、液晶モジュールの内部に浸透してしまったらしい。白っぽくなってるところに、洗浄液が染み込んでしまった。

バラせるかな?と思って挑戦してみたんだけど、Thinkpad としてのカバーがはずせるだけで、液晶モジュールは分解不能。どーしたもんかなぁ・・・・・と思案しつつ、液晶パネルが行きてて他が死んでるマシンをヤフオクで探し中・・・・

ちうわけで、教訓
いくら電子機器が洗えるからといって、液晶パネルは洗ってはいけません。


洗浄から一週間後

DSCN0149.JPG.jpeg画面下よりにまだ白っぽいところが残ってるけど、けっこう抜けてきた。隙間から洗浄液が蒸発してくれるのかな。もう少し様子を見てみよう。

ヤフオクで Thinkpad T60 を買ったんです。無事に届いたんです。荷物としては・・・・開封してみてぐんにょり。ものすごいタバコの悪臭ががががが!!!

どんな環境で使ってたのかしらんけど、閉じた状態で室内においておくだけで、室内ならどこからでも悪臭が臭ってくるレベル。掃除するまでは隔離処置を取らざるを得ないような酷さでございました。
ヤフオクの説明にはタバコ臭のこと何も書いてなかったんで、出品者に文句いって「どちらでもない」評価をつけておきました。本当は「悪い」をつけたかったど、発送とかその辺は問題なかったし、悩ましいところ。

で、このままじゃ使い物にならん!ということで、掃除します。使ったのはこれ
あ、その前に、当たり前だけどいちおー書いておこう。ここに書いてある処置はとーぜんながら自己責任です。マネするのは結構ですが、壊れようがなにが起ころうが知りません。自己責任で参考にしてください。

DSCN0134.JPG.jpegスリーボンドの電子機器クリーナーなるスプレー。有機溶剤を霧状にして拭き付けることで洗浄するものです。エアーダスターはガスを噴出すけど、ガスじゃなくて液体のまま吹き付けるという感じ。有機溶剤を流すことで汚染物質を洗い流そうという代物です。

まずは、分解。はずせるかぎり、はずします。Thinkpadシリーズだったら、ハードウェア保守マニュアルを見ればバラせるはず・・・・・と思って探しにいったら、え?ない?!Thinkpad T60はLenovo時代の製品なんですが、IBMと違って、Lenovoになったら、保守マニュアルの公開すらやめやがったっぽい。ほんま、Lenovoになって、ろくなことないな・・・・

DSCN0133.JPG.jpegこのとき注意しないといけないのが、とーぜんバッテリーははずすことですが、忘れがちなのがバックアップ電池をはずすこと。

DSCN0139.JPG.jpegで、あとは可能な限りあちこちを、クリーナースプレーで洗い流します。特に重要なのがキーボード、CPU クーラー、パームレスト。キーボードは構造が複雑なので、ヤニだなんだがしみこみます。CPU ファンは強制的に風を送ってるので、タバコなんぞ吸われたら、まともに煙を通してしまい、ごってりと張り付きます。そして、キーボードとパームレスト、これは使う人の間近に来るわけで、喫煙者もおそらくここに煙を吹き付けていたことでしょう。ここをちゃんと掃除しておかないと、使ってるときに臭ってきて掃除した意味がなくなります。

あと、さっきも書いたとおり、クリーナースプレーは、あくまでも溶剤を霧状にして拭きつけるもの。つまり、洗浄液が部品に当たったあと、汚れを洗い流してもらう必要があるわけです。なので、部品を傾けて、吹き付けた洗浄液が流れ落ちるようにしましょう。

で、洗いおわったあとも要注意。

この洗浄スプレーは、石油系の有機溶剤なので、この物質には伝導性はありません(たぶん。計ってない)。あと、蒸発しやすいので、水とかに比べて洗ったあと、液体が速やかに蒸発します。だからこその電子機器洗浄剤なわけです。

でも、洗いあがったあとを良く見ると

DSCN0135.JPG.jpegDSCN0136.JPG.jpegなんか水滴っぽいのが残ってます。これ、結露なんでしょうね。スプレーで洗浄液を吹き付けるんですが、やっぱりスプレーだと冷えるわけで、結露を起こすわけですね。この程度だったら大丈夫な気はしますが、念のため2,3時間ほど自然乾燥しておきました。

結果、パソコンは問題なく起動しました。バックアップ電池を抜いたので、BIOSパラメータは当然飛びます。そして、問題の悪臭ですがずいぶんとマシになりました。やはり完全には取れないようです。CPU ファンの排気部分からはほとんど臭わなくなったので、基盤類はおおよそ綺麗になったようです。ただ、筐体のプラスチックに染み込んでるんでしょうね。

筐体は中性洗剤で、と思って台所洗剤を染み込ませた雑巾で拭いてみたんですが、基盤洗浄ほどの効果はないようです。自然に抜けていくのを待つしかないのかな