データセンターは自作して所有する時代だそうです。

コンテナデータセンターを自作した方がいらっしゃり、大騒ぎになっていたりするわけですが、これにより、データセンターは自作し、所有する時代に入ろうとしています。

それにしても、この方のデータセンター作成記、工事してコンテナ置いたところでご本人の記事が途絶えちゃってるんですが、どこか別のサイトで公開されてるんでしょうか・・・?

さてまぁ、私が自宅にサーバをおいてかれこれ20年。世の中、ご家庭にサーバがあって当たり前の時代になったわけですが!

DSCN0741.JPG.jpegうちの場合、物置部屋となってる部屋の一画に、ルミナスメタルラックに載せてます。

自宅にサーバを置くと、あれこれ問題があるわけです。

  • ファンの音がうるさい
  • ケーブルとかに足ひっかけそう
  • 空調をかけたいけど、部屋全体を冷やすのはもったいない
  • 2018年夏、冷房なしで稼動しつづけるサーバは見ててかわいそう

そりゃまぁ、データセンターが必要でしょうとも。

というわけで、時代の流れにのっとり、データセンターを自作してみようと思うわけです。

まずはコンセプトを定めましょう

!!自宅の敷地内に、目標予算50万!!

先のSyuhei氏は不動産競売を使ったとかで、おおよそ500万円でできたとか。一般に市販のコンテナデータセンターを設置すると5000万から1億なので、氏は10分の1で実現したようですね。同じことをやってもしょうがないので、さらに10分の1、目標予算は50万で。

あと、電気だ回線だは今あるものを使いたい。よって、自宅敷地内というのが条件。幸いにもこっちは某近畿の田舎にある農家。土地はある・・・・はず。

どこに設置しよう?

じゃあ、どこに設置するか。最初に思いついたのがここ。DSCN0709.JPG.jpeg自宅のベランダ。普段使ってないし、広い空間もあるのでここに決めたぁ。と思ってたんですが、2018年の台風21号、ちょっと奥さんみました?あの台風??

アカン。こんな二階のベランダに置いたら台風に耐えられん。

ちうわけで、別候補DSCN0711.JPG.jpeg自宅裏の余ってる土地。おおよそ2m、5m四方の空間。隣の家が迫ってるので日当たりもよくなく、植物育てるわけにもいかない、あまってた土地。ここにしよう。

建物はどうする?

コンテナデータセンターは、海上輸送コンテナを使うからこそ、コンテナデータセンターなわけですが、コンテナって、安ければ1個1万円くらいで買えたりするんですが、輸送費だけで100万くらいかかるとか。そんな高いのはイヤン。ちうわけで、プレハブ物置を使います。100人のってもだいじょーぶ なイナバ物置です。さて注文、DSCN0705.JPG.jpegうをを、でかい。この写真に写ってるのは、外枠とかの材料だけで、このほかにドアだとか、内装用の断熱材だとかで、この写真の1.5倍くらいの物資です。

さーて、これを組み立てきれるのか??

なお、タイトルですが、Twitterで、イナバ物置つかってデータセンターつくろう。って話題にしたら、こんなツィートが飛んできたので、そのまんま使わせてもらいました。

光ケーブルを自作する

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

Ethernetケーブルといえば当然ながら自作するもので、ふつーはRJ-45コネクターとカシメ機を常備しているものかと思うのですが、Ethernetって光もあるんですよね。

あれ?光ケーブルの自作って・・・・・・?ってお話です。

建物間を結ぶ光ケーブルが必要になったんですが、長い光ケーブルって高いんですよね。なもんで、ヤフオクをごそごそ。

R0011739.JPG電線とかに張ってある屋外用のケーブルでございます。これと同じものが3個で1万とかなんで、とりあえずポチ。

さて、ケーブルだけ手に入れたはいいものの、コネクタをつけるのが厄介なのです。

まずは工具

R0011764.JPGそんな何度も使うようなもんでもないので、安く上げたいなぁと。というわけで、安い加工工具をポチ。あと、ファイバーケーブルにはケーブル補強にやたら強い繊維を使った補強材が入ってるので専用のはさみが必要だったりするのです。(あ、写真にはさみいれるの忘れた)

そして、取り付けるコネクタ

R0011749.JPGどれが使えるかなぁと、いろいろ買ってみたんですが、まず必要なのが左上の仮設用コネクタ。これが便利。本来はケーブルの方端にSCコネクタを仮付けして、もう一端に正式なコネクタをつけるためのものなんですが、お手軽さゆえに、この仮設コネクタだけで最終形態にしちゃうのも手かなと。ただし、1個2000円もするのでお高いです。

んで、仮設じゃなくて正式なコネクターとしてつけるのが右のSANWAのコネクター。こっちだと、1個あたり500円程度なので、運用系はこっちにしたいところ。

あと、左下のコネクタ、これは使いこなせなかったので、省略。


さて、それじゃコネクタ加工をはじめましょ。まず、光ファイバはガラスなんで非常にもろい。なにかのはずみにケーブル引っ張ったりすると、あっさりと折れたり切れたりするので、ケーブル端を固定することを考えましょう。

R0011915.JPGこんな感じで木の板に固定。ただ、これをやってもやっぱり失敗して折ったりするので、ケーブル外皮は長めに剥いておいた方がいいです。

次にケーブルの被服剥き。

R0011917.JPG工具に入ってる、黄色い取っ手のストリッパーで剥きます。

ここで注意。このストリップはストリッパーを強く握って、ケーブルの先端までしっかりと剥き切ること。

R0011740.JPG光ファイバーを剥いたところをよーーっく見ると、被服が2重になってるのがわかります。剥いた根元付近に、芯線と同じような透明被服があるのが見え・・・ますか?この透明被服をしっかりと剥いておかないと、ケーブル加工に失敗します。

次はケーブルの先端加工。これが光ファイバー加工の肝中の肝です。これをちゃんとやっておかないと絶対にリンクしません。

使うのは工具写真に写ってる真ん中の先端加工専用の工具。単体でも売ってるみたいです。これにストリップしたケーブルを設置する。

R0011757.JPGやや右よりの丸いのがカッターの刃。で、その左右両方に黒いスポンジ(?)があるんですが、ケーブルの先端が必ず右のスポンジに乗るように設置します。右のスポンジまで届いてない状態でカッターを動かしてもケーブルは切れません。あと、ケーブルストリップの際の透明被服が刃の部分に残ってると、やっぱりケーブルは切れません。

R0011758.JPGこんな風に刃のところでケーブルが切れていれば成功です。

R0011923.JPG仮設用コネクタをつけてみましょう。丸いボタンを押しながら慎重にケーブルを差し込んでいきます。

R0011930.JPGそのうち、コネクターの先端からケーブルが出てくるので、出てきたらケーブルの先端とコネクタの先端が一致するところまで引き戻します。(この写真は先端からケーブルが出た状態。ここから引き戻す)

ここまで来たら、ケーブルに光が通せるはず。

R0011931.JPG片方のケーブルができたら、SFPに接続してリンク状態を見ながら加工したほうが楽です。

R0011932.JPGSC-FCの変換パッチケーブルを準備しておくのを忘れないように。

もう一方をSANWAのコネクタにつけます。

R0011936.JPGこの写真は、もう一方の仮設用コネクターもSANWAコネクタに付け替えたあとですね。

SANWAコネクタをつけるときは、ケーブルとコネクタを接着剤でくっつけます。

R0011938.JPG接着剤を爪楊枝にとって、ケーブルに塗りつけながらケーブルをコネクタに差し込んでいきます。

私が使った接着剤は、安定の SuperX

R0011937.JPG最後にリンクがちゃんとあがることを確認しましょう。

R0011934.JPGこのチェックは光ケーブルをループバックさせて、同じSFPのRXとTXを直結してます。とーーーーぜんですが、運用中のスイッチでやらないこと。ループしちゃいます。

端末とかをつないでなければ、スイッチにパケットが入らないので、ループさせても問題ありません。

さぁ、光ネットワークを運用しませう。

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 から叩きたい方も、サンプルにどーぞ