2013年11月24日日曜日

液晶ディスプレイを直してみた。

久々の修理ネタです。
某所より、ジャンク情報として、LG製ディスプレイ L206WTQ-BFが要りますか?との連絡を受けました。
症状:最近電源が入るまでに時間が掛かるようになり、しばらく放置すると電源が入っていたようですが、ついに放置しても電源が入らなくなりました。
そもそも、電源ボタンを押しても反応ないです。
はい。コンデンサ容量抜けの典型的症状です。
わざわざ車で持参して頂きました。
あ、例によって修理は自己責任で。
インバーター部は数百ボルトの電圧が掛かっています。
内容の正確性は保証しませんのであしからず。



確かに電源が入らないことを確認(笑)
まずは外装をバキバキひっぺがす。
どうしても傷物になってしまうのは仕方がない。
スイッチのところとか、構造的に弱そうなところにマイナスドライバーをねじ込んで、爪を一つ一つ外していく。
どうせ無傷で開けられないのと、爪の1つ2つ壊れても支障は無いので割と容赦しないw
(コストのせいだとは思うが、昔みたいにネジ止めにして欲しい!)

中央にあるシールドされた箱を外す。
っとなんと、ここで衝撃の事態が発生w
 なんと、シールドテープで止めてあるだけで、ネジ止めされていない!
おいおい・・・・
しかも、このテープ、一度はがすと著しく着きが悪くなる・・

裏側。
右側のデカイ基板が修理対象。
構造自体はオーソドックスというか、熟れたきたなぁというか。

電源基板兼冷陰極管インバータ。
いまどきの液晶はLEDバックライトなので、こんなゴツイ基板は見かけない。
設計がこなれてきてきているのか、部品点数は少ない。
基板自体の熱による変色の形跡もないので、高効率化が進んでいると思われる。

はい。
予想通りコンデンサのパンク。
左側のヒートシンクがインバーター側ダイオード、右側がロジックボード用ダイオード。
下がトランス。
っと発熱体に囲まれた上に一回路あたりケミコン2個とケチッてる。
色はニッケミぽいけど、そんな訳なくw怪しい台湾ブランド。

今回、都合よくコンデンサの在庫がなかったので、手元にある部品取り用ジャンクマザボから拝借。
まぁ、結局部品買い出しに行ったんですがね。
SW電源の平滑コンデンサは、低ESRのものが良いそうです。
といっても、地方では入手できるものが限られるので、とりあえず国産の105℃品をつかえばいいでしょう。
85℃品でも国産のものは品質がいいので問題ないらしいですが・・・

っとさくっと修理完了。
今回のは基板が焦げるほど発熱している形跡はなかったのですが、一応トランスとかダイオードとか熱が出そうな、ハンダクラックが起きそうな箇所は予防措置としてハンダをやり直しておきました。

おまけ
冷陰極管用のトランス。
ちょっと見ない独特の形状。
2つのトランスを結合したような感じ。
真ん中のコイルは電流センサー??

インバータ駆動用MOS-FET
昔はヒートシンクに付いたFETだったけど、今じゃぁICと見た目が変わらん。

SW電源部の制御ICはSTR-W6252というやつで、ほぼ1チップで構成できるやつらしい。
STRといえば、昔は厚膜ハイブリッドICで有名だったなぁ。

SW電源一次側の平滑コンデンサ。
PCの電源装置ならわかるが、液晶の電源で2個使っているのは初めて見た。

基板裏側。
集積化が進んでおり、インバータ制御回路がある程度で、部品点数は少ない。


2013年11月10日日曜日

oVirtを使ってみた

Ovirtについて、Wikiにまとめましたので、そちらもご参照ください。

この所クラウド基板調査をして正直辛い大変なのですが、OpenStackの構築に心が折れてしまい、諦めていたところ、oVirtというのを教えてもらったので、試してみました。
(っといっても知ったのはつい3日くらい前なんですがね)

oVirtって聞いた事ないし、ググってもあまり情報が出てこないので、少々不安だったのですが。

  • 日本語対応
  • メモリオーバーコミット対応
  • KVMベース
  • スケールアウトも出来そう
  • Webベース
  • インストールは比較的楽

っと感触は良さそうです。
ではさっそくデモ環境をセットアップしてみましょう。

前提条件
OS:CentOS6.4(64bit)またはFedora
CPU仮想支援のあるPC
最低1つのNIC
割と大きなHDD(40GByteもあればいいかな)
対象となるサーバのホスト名がDNSで名前解決(正引き、逆引き)出来ること。
(hostsに記載だけでは、逆引きが出来ないのでNG)
  1. CentOS6.4をインストール。
    1. お試しなのでディスク全体を使用。LVMで自動パテーションを切ってしまうと、/homeが別パテーションになるので注意。
    2. IPは固定(DHCPでもいいけど、後が楽なので)
  2. アップデート
    1. yum -y update
    2. yum -y upgrade
  3. リポジトリ登録
    1. yum localinstall http://ovirt.org/releases/ovirt-release-el.noarch.rpm
    2. yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
  4. リポジトリを修正
    1. vim /etc/yum.repos.d/el6-ovirt.repo
    2. baseurl=http://resources.ovirt.org/releases/stable/rpm/EL/$releaserver
      の行を以下に変更。
      baseurl=http://resources.ovirt.org/releases/stable/rpm/EL/6/
  5. oVirtエンジンをインストールします。
    1. yum install -y ovirt-engine
  6. デモ環境なので一台で済ませるため、AllinOneプラグインをインストールします。
    1. yum install -y ovirt-engine-setup-plugin-allinone
  7. セットアップを走らせます。
    1.  engine-setup

[root@test ~]# engine-setup
[ INFO  ] Stage: Initializing
[ INFO  ] Stage: Environment setup
          Configuration files: ['/etc/ovirt-engine-setup.conf.d/10-packaging-aio.conf', '/etc/ovirt-engine-setup.conf.d/10-packaging.conf']
          Log file: /var/log/ovirt-engine/setup/ovirt-engine-setup-20131109232823.log
          Version: otopi-1.1.2 (otopi-1.1.2-1.el6)
[WARNING] Cannot detect if hardware supports virtualization
[ INFO  ] Stage: Environment packages setup
[ INFO  ] Stage: Programs detection
[ INFO  ] Stage: Environment setup
[ INFO  ] Stage: Environment customization
          Configure VDSM on this host? (Yes, No) [No]: yes     <-----Yesと応答
          Local storage domain path [/var/lib/images]:         <-----そのままEnter
          Local storage domain name [local_storage]:           <-----そのままEnter
          --== PACKAGES ==--
[ INFO  ] Checking for product updates...
[ INFO  ] No product updates found
          --== NETWORK CONFIGURATION ==--
          Host fully qualified DNS name of this server [test.localdomain.localdomain]:                  <-----そのままEnter
          iptables was detected on your computer. Do you wish Setup to configure it? (yes, no) [yes]:no <-----noと応答(デモ環境なので)
          --== DATABASE CONFIGURATION ==--
          Where is the database located? (Local, Remote) [Local]:    <-----そのままEnter
          Setup can configure the local postgresql server automatically for the engine to run. This may conflict with existing applications.
          Would you like Setup to automatically configure postgresql, or prefer to perform that manually? (Automatic, Manual) [Automatic]:    <-----そのままEnter
          Using existing credentials
          --== OVIRT ENGINE CONFIGURATION ==--
          Engine admin password:    <-----Webログイン用パスワードを入力
          Confirm engine admin password:    <-----パスワードを入力
[WARNING] Password is weak: 辞書の単語に基づいています
          Use weak password? (Yes, No) [No]: yes    <-----yesと応答(デモ環境なので)
          Application mode (Both, Virt, Gluster) [Both]:    <-----そのままEnter
          Default storage type: (NFS, FC, ISCSI, POSIXFS) [NFS]:    <-----そのままEnter
          --== PKI CONFIGURATION ==--
          Organization name for certificate [localdomain.localdomain]:    <-----そのままEnter
          --== APACHE CONFIGURATION ==--
          Setup can configure the default page of the web server to present the application home page. This may conflict with existing applications.
          Do you wish to set the application as the default page of the web server? (Yes, No) [Yes]:    <-----そのままEnter
          Setup can configure apache to use SSL using a certificate issued from the internal CA.
          Do you wish Setup to configure that, or prefer to perform that manually? (Automatic, Manual) [Automatic]:    <-----そのままEnter
          --== SYSTEM CONFIGURATION ==--
          Configure an NFS share on this server to be used as an ISO Domain? (Yes, No) [Yes]:    <-----そのままEnter
          Local ISO domain path [/var/lib/exports/iso]:    <-----そのままEnter
          Local ISO domain name [ISO_DOMAIN]:    <-----そのままEnter
          --== END OF CONFIGURATION ==--
[ INFO  ] Stage: Setup validation
[WARNING] Less than 16384MB of memory is available
          --== CONFIGURATION PREVIEW ==--
          Database name                      : engine
          Database secured connection        : False
          Database host                      : localhost
          Database user name                 : engine
          Database host name validation      : False
          Datbase port                       : 5432
          NFS setup                          : True
          PKI organization                   : localdomain.localdomain
          NFS mount point                    : /var/lib/exports/iso
          Application mode                   : both
          Firewall manager                   : iptables
          Host FQDN                          : test.localdomain.localdomain
          Datacenter storage type            : nfs
          Configure local database           : True
          Set application as default page    : True
          Configure Apache SSL               : True
          Configure VDSM on this host        : True
          Local storage domain directory     : /var/lib/images
          Please confirm installation settings (OK, Cancel) [OK]:<-----そのままEnter
あとは自動でインストールが走ります。
インストールが終了したら、
http://<サーバのIP>/にアクセスします。

まずは管理用ポータルにアクセスします。

ユーザID:admin、パスワードはインストール時に設定したものでログインします。

defaultのデータセンターはどうやら機能しないようです。
defaultのストレージにISO_DOMAINというISOファイルを格納する場所があるので、
それと同じ設定をlocal_datacenterに設定します。
(画面キャプチャは設定済みです。)
おそらくNFSサーバがある場合、その設定をすればいいと思いますが、今回環境を用意できなかったので試せていません。

仮想マシンへのインストール用ISOイメージの登録は以下のコマンドで行います。
# engine-iso-uploader -i ISO_DOMAIN upload <ISO FIlename>
仮想マシンの構築や運用は、ユーザーポータルで行います。
同じく、ID:admin、パスワードはインストール時に設定したものでログインできます。
Windowsを入れる際にドライバが必要になりますが、ここからISOファイルをDLして入れます。
WebインターフェースからVNCが表示されない問題があります。ここから専用のクライアントをDLして入れ、console.vvというファイルに関連付けをしておきます。
仮想マシンの作成方法とかまで手が回りませんでしたが、こんな感じの画面です。


2013年11月9日土曜日

RubyのUFO演算子を利用したソート処理について

今日、長年?の疑問がひとつ解消したが、また忘れそうなのでメモ。
Rubyでイテレータを使ったソートのコード。
例えば、以下のコードは文字列配列arrayの中身をアルファベット順にソートする。

array=%w(R U B Y)
sorted=array.sort{|a,b|
a <=>b
}

これ、実はよく分かっていなくて、ずっと引っかかっていた。
イテレータなのだが、よく処理を渡すと説明がある。

以下疑問点
・処理を渡す引数は何処?|a,b|のaとbに何か渡すの?
・突然出てくる、a<=>bの箇所が不明。UFO演算子でA < Bならば負の数を返し、
A > Bならば正の数を返し、AとBが等しければ0を返す。は分かるが、その戻り値は何処に返っているの?
・a<=>bでアルファベット順に並べるとあるので、これ自体がアルファベット順に並べる命令?とすると、数字を並べるのは1<=>2とか??
・そもそも、ソート処理にブロックを渡しているのが違和感がある。
・イテレーターってループ処理のことじゃなかったっけ??

今となってはかなりアホな疑問なのだが、ついさっきまで理解できていなかった。
(なので、定型句としての理解だった)

a<=>bというのは、上記の通り2つの値を比較するもの。
数字や文字コードなどの比較を行い、その大小に応じて、-1,0,1を返す。
http://docs.ruby-lang.org/ja/search/query:%EF%BC%9C%EF%BC%9D%EF%BC%9E/

で、これ、ソートの判定条件をセットしているんです。

っといっても、鈍感な私はピンと来なかったわけです。
で、こいつを分解していきます。

sorted=array.sort{<ソートする判定条件>}
これが最初の疑問処理を渡す引数は何処?の答え。
では、その中身がどういう動きをしているのか書いてみる。
簡単なバブルソートの例ですが。

array=%w(R U B Y)
cnt=array.size-1
for i in 0..cnt
  for j in 0..cnt -i -1
    case array[j]<=>array[j+1] #ここ
    when +1 then
      swap=array[j]
      array[j]=array[j+1]
      array[j+1]=swap
    end
  end
end

2番目の疑問。
こいつ自体は、ソート時の判定処理に組み込まれる。
この例では、+1の時しか役に立っていないが、+1,0,-1を返すことを期待されている。
ここまで来ると、3つ目の疑問が自ずと解消される。
これは、
|a,b|
A~Bという意味ではなく、単なる変数で、array[j]とarray[j+1]がセットされる。
なので、別に|z,a|でも良い。
そして、次の
a<=>bが結果的に
array[j]<=>array[j+1]
となり、上記のcase文判定条件となる。

4つ目の疑問。
これはソート条件をプラグインで差し替えることを目的としている。
例えば、
a<=>b
の箇所を
a.length<=>b.length
にすると、結果的に
array[j].length<=>array[j+1].length
となり、文字列長での並び替えとなる。

処理を渡すと言われると、上記のコードを丸々変数か何かに入れて渡すとかをイメージするので、訳が分からなかったが、
上記コードが遮蔽されていて、判定条件部分を渡すのなら合点が行った次第。


ちなみに、UFO演算子は宇宙船演算子が正しい??






2013年11月3日日曜日

OpenNebulaを使ってみた。

突然ですが、
広島Ruby勉強会 #035に参加してきました。(遅刻しましたが。)
主な目的はChef入門を聞くことでしたが。

が、最後の最後でなんかしゃべろと予想通りムチャぶりされてしまったので、少しOpenNebulaの紹介をさせて頂きました。
といっても、つい昨日触ったばっかりなんですけどね(笑)

その中で、インストール方法をブログに乗っけると言ってしまったので、ざっくりと書いて見ました。