So-net無料ブログ作成
検索選択

今朝の朝取りキュウリ [家庭菜園]

間違いなく今朝の朝取りキュウリです。

昨日の朝取りとか、一昨日の朝取りではありませんよ(^^)

20160612a.jpg

追記:お昼に味噌付けて美味しくいただきました。[わーい(嬉しい顔)]

そろそろキュウリが収穫できそうです。 [家庭菜園]

そろそろキュウリが収穫できそうです。
DSC_0928.jpg

こっちはアイコ
DSC_0929.jpg

普通のミニトマト(オレンジ
DSC_0931.jpg
まだミドリ

そして5年前からあまり食べれなくなったブルーベリー
DSC_0932.jpg


LPI-304 Virtualization & High Availability の認定を取得した。 [Linux]

先日 LPI-304 Virtualization & High Availability の認定を取得した。

もうすぐ有意性の期限切れが来るという事で、303 か 304 を受けようと思っていたんだけれど、
先月ちょうどいいタイミングで新しい試験内容に対応した
「徹底攻略 LPIC Level3 304 教科書+問題集[Version 2.0]対応」
いわゆる黒本が新発売されたので、これを買って 304 を受ける事にしました。

勉強期間は1ヶ月。たいだい1日30分から1時間位、空いている時間を使っての勉強です。
教材は黒本のみ。問題を繰り返し解きました。(最後の方はいい加減飽きてきました。)
試験は90分ですが、30分くらいで一通り終わってしまい、
とりあえず見なおしして、「もういいや!ポチっ」と終了を押下。
スコアは満点にあとちょっとだった。(残念)
実際に仮想環境を構築して確認できるものは確認しましたが、
これは自分の興味本意での確認なので、仮想環境を自前で構築できなくても問題無いです。

取得の目的は、単に有意性の延長です。
これを持っているからといって仕事に有利とか、・・・そんな話はありません。たぶん。

ちなみに取得済みの廃止された LPIC-3 Core(301) の有意性も延長されていました。

300 303 304 のロゴだけど、
なんか (M)(S)(V)3シリーズ揃えてコンプリートさせようとしている意図を感じます。
でもL3は1試験3万と高額なので、私はこれ以上受ける気はありません。
受けるとしたら次回も有意性の延長の為。つまり3~4年後でしょう。


VMware で Nested Virtualization (仮想マシンのCentOSで Xen とか KVM を動かす) [Linux]

CentOS で KVM や Xen を試してみたいと思っても、ハードウェア上で直接 CentOS を動作させる環境が無い場合、なんかいい方法が無いかと考えてみる。

クライアントWindows の仮想化ソフトウェアだと VirtualBox か VMware
(Hyper-V は選考外。)

これらの仮想化ソフトウェアで CentOS を動作させ、その CentOS 上で Xen や KVM を動作させる事はできないのだろうか?

結論を書きます。

VirtualBox 5 では Nested Virtualization に対応してなくダメでした。

VMware Player だとプロセッサの設定で「Intel VT-x/EPT または ADM-V/RVI を仮想化(V)」を有効にすると、起動した仮想マシンで Xen や KVM が使用できました。

これですね
vhv.enable = TRUE

起動した CentOS の /proc/cpuinfo を見ると vmx が確認できます。
Xen の Domain-0 では vmx が確認できないけど Domain-0 も Xen ハイパーバイザー上で動作する仮想マシンだからだと思われる。

できれば VMware Player から VirtualBox に移行したいんだけど、
性能とかグラフィックとか、まだ VMware Player に追い付けてない。(残念)


CentOS 6 で kvm のブリッジを設定しようとしたら device br0 already exists となってしまう件 [Linux]

ホストマシンの /etc/udev/rules.d/70-persistent-net.rules を確認する

# PCI device 0x8086:0x100f (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:e4:ab:85", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x8086:0x100f (e1000) (custom name provided by external tool)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:e4:ab:85", ATTR{type}=="1", KERNEL=="eth*", NAME="br0"
重複しているのでコメントアウト
# PCI device 0x8086:0x100f (e1000) (custom name provided by external tool)
#SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:e4:ab:85", ATTR{type}=="1", KERNEL=="eth*", NAME="br0"

修正後ホストマシンを再起動


SH-01Fが勝手に再起動を繰り返す [スマホ]

数日前から AQUOS PHONE ZETA SH-01F が勝手に再起動を繰り返すようになった。

結論から言うと microSD メモリーを別のものに変えたら治りました。

経緯:
机の上に置いてあった SH-01F が突然 ブーンというバイブの音とともに電源ボタンを押しづづけたような
画面を表示して勝手に再起動しました。
「なんか勝手に再起動したな。 まぁ、たまにはいいか。」と思っていたら、夜中にブーブー再起動を繰り返し、
電源を切ることさえも難しい状況に・・・。
ググってみると SH-01F が勝手に再起動を繰り返すっていう情報がたくさんあって、
SIMを抜き差しするとか、SDカードを抜き差ししてみるとか、リセットするとか、修理に出すとか。
でもこうすれば治ったという書き込みは見つけられませんでした。

私もSIMやSDカードを抜き差ししましたが、状況は改善せず。
リセットするのも再設定が面倒だし、
まして docomo に持って行って修理なんて、はなから期待できません。
初期化されて帰ってくるだけです。(^^;)

機種変しなければダメかな?(お金無いけど・・・)っと思いながらググっていると SH-01F で無いけど
SHARP の端末で SDメモリーカードを別の物に変えたら再起動を繰り返すのが治ったという書き込みを見つけました。

そういえば勝手に再起動する時に、
「SDメモリーカードは電源を切ってから抜いてください」って画面に表示されていたのを思い出し、
「これはSDカードの抜き挿しを誤検出したのが原因では?」
でも、一応SDカードは抜き挿ししてみたし、
今使っているSDメモリーカードは1年以上使っていて問題なかったんだけどなぁ・・・。
と、思いつつ SAMSUNG の32GBのSDメモリーカードを SANDISK の32GBに入れ替えてみました。

結果:今のところ再起動は発生していません。

「SAMSUNG のMicroSDHC 32GB」 ← 今のところこれが原因と思われます。
  ↑
でもこれ、PCで使っている分には何も問題無さそうなんですけどね。

Windows から CentOS7 にリモートディスクトップ接続をする。 [Linux]

Windows から CentOS7 にリモートディスクトップ接続をする。

基本的には Windows から CentOS6 にリモートディスクトップ接続をする。 とだいたい同じ。

vnc-server はCentOS のリポジトリからインストール

# yum install tigervnc-server

xrdp は epel より取得。

CentOS6 と違うのは /etc/xrdp/xrdp.ini を編集して
色の深さを 32 から 24 に変更しないとログイン時にエラーになる事。
max_bpp=32
 ↓
max_bpp=24
リモートディスクトップクライアントの画面の色を True Color(24ビット)に変更してもOK

あとCentOS6 の時はkm-e0010411.ini を別途取得したけど、
CenntOS7用のxrdpのパッケージには km-e0010411.ini も km-0411.ini も元から入っているので
あとは必要なシンボリックリンクを張るだけ。

でもこのままログインすると日本語で表示されない。
xrdp はシステムのデフォルトの言語設定を読み込まないみたいなので、
/etc/xrdp/startwm.sh に言語を設定するか
ログインするユーザの .bash_profie に言語を設定する。
#export LANG=$LANG
export LANG=ja_JP.UTF-8

サービスを起動する。
# systemctl start xrdp

サービスを自動起動にする場合。
# systemctl enable xrdp

firewalld とかの設定も忘れずに。

Windows から CentOS6 にリモートディスクトップ接続をする。 [Linux]

Windows から CentOS6 にリモートディスクトップ接続をする。

CentOS6のディスクトップをWindowsに表示する方法としては

① Cygwin-X 等、X端末ソフトの環境を Windows にセットアップする。
② Vncクライアントを Windows にインストールする。
③ xrdp を CentOS6 にインストールして Windows のリモートディスクトップクライアントからCentOSに接続する。

以上が考えられるが、

①はセットアップが面倒。(挫折した。)
②はWindowsにVNCクライアントをインストールしなければならない。 
③はWindows側はセットアップ不要なので一番お手軽。

で CentOS6 側の設定

インストールするパッケージは xrdp と vnc-server

xrdp は epel より取得する。
vnc-server は CentOS6 のリポジトリより取得する。

xrdp と vnc-server をインストール後、
キーボードレイアウト用のファイル km-e0010411.ini を入手し /etc/xrdp にコピーしてkm-0411.ini にmv。
# mv km-e0010411.ini km-0411.ini

HKEY_CURRENT_USER\Keybord Layout\Preload にあるデータ値を確認
e0220411 00000411 e0230411 が存在する場合は
# ln -s km-0411.ini km-e0220411.ini
# ln -s km-0411.ini km-e0230411.ini
とする。

# service xrdp start
でサービス開始
OS 起動時にサービスを開始するのであれば chkconfig で自動起動を設定

ちなみに vncserver を起動する必要は無い。
vncserver は xrdp が リモートディスクトップクライアントからの接続時に起動してくれる。
vncpasswd の登録も不要。

2016-04-05 : CentOS のバージョンを明記。

大根日記 2015/12/29 [家庭菜園]

大根は暴落しているようですが、一応ぼちぼち収穫しています。

daikon2.png

正直、いまいちな出来です。
小さいし、一本当たりのコストを考えると買った方がましです。
でも子供が喜んで抜いているからまあいいか。


ソケットを使った複数クライアント間のプログラム構造について [Java]

プログラムの基本は入力されたデータを元に処理を行い、作成したデータの出力を行う。
基本はパンチカードの時代からあまり変わってないと思う。

ソケットを使って通信を行う場合も基本は同じだけれど、
大体のプログラムは複数の接続先と同時に通信を行う。

Javaを使って複数のソケットで同時に通信する場合、
プログラムの基本構造をどうすれば良いのか。
インターネットを検索してもなかなか良いページが見つからない。

ソケットを使用したプロセススレッド間でデータを受け渡すにはどうすれば良いのか?
受信したデータを List とか Vector(今時は使わない)に登録し、
読み出し側でポーリングするようなプログラムは
最初のデータを読み出すまでの待ち時間があって効率が悪いしカッコ悪い。


1.select() を使ってシングルタスクで複数の接続先と通信を行う。

この方法は C言語でプログラムを作っていた頃よくやっていた。
この頃はマルチCPUなんて殆ど無かったのでスレッドを使おうなんて考えもしなかった。

Xサーバがどうやって複数のXクライアントと通信を行い画面の描画を行っているのか。
その基本的な構造と同じだと思います。(今時のXサーバは分からないけどね。)

Java でも 1.4 から select() が使えるようになったので同じようなプログラムが記述できる。
逆に言うと 1.3 までは select() が使えなかったので
C言語で select() を使っていた私はには、
「何で Java に select() が無いんだ?」
と、ずっと思ってました。

このプログラム構造は大量の接続先があってもスレッド数が増えないのが利点。
でも基本的にシングルタスクなので、一つの入出力の処理に時間がかかると他の処理が止まってしまう。
通常は一つの入出力処理はあっという間に終わるので、一見同時に処理を行っているように見える。
一つの入出力処理が長い場合はデータ受信後そのデータの処理を別スレッドにするという手もある。

主となる一つのスレッドが複数のソケットと同時に接続しているので、接続先毎に別の処理が必要な場合、
select() から抜けてデータを処理する部分が複雑になる。
ソケットでは一回の受信で全てのデータを受信できる訳ではないので、
足りない分はもう一度受信する必要がある。送信も同じ。
接続先ごとにデータを管理するのが面倒。


2.接続先毎にスレッドを生成して通信を行う。wait()/notifyAll() 編

この方法は Java で select() が使えなかった 1.4 より前の頃に仕方なく行っていた方法。

スレッド間のデータの受け渡しには synchronize と LinkedList を使う。

ソケットからのデータ入力待ちには DataInputStream#read()、
あるいはバッファへの登録待ちにはThread#wait()を使う。

あるスレッドが受信したデータを他のスレッドが接続している接続先に送信したい場合、
目的の接続先に接続しているスレッドのLinkedListに送信データを登録し notifyAll()
を呼び出す。

wait() している全てのスレッドは自分の LinkedList にデータが登録されていればそのデータを読み出して
接続先のソケットにデータの送信を行う。

でも notifyAll() とか notify() は目的のスレッドを指定する事ができないので、別の言い方をすると、
「ポストにデータを入れたから各自ポストを確認してちょーだい!」
と言ってるのと同じで、なんか効率が悪い。


3.接続先毎にスレッドを生成して通信を行う。nio編

スレッド間の通信には synchronize LinkedList を使う。

データ入出力待ちには Selecter#select() を使う。

あるスレッドが受信したデータを他のスレッドが接続している接続先に送信したい場合、
目的の接続先に接続しているスレッドのLinkedListに送信データを登録し、
目的の接続先に接続しているスレッドの Selecter のwakeup()メソッドをを呼び出す。

select() で入出力待ちをしているスレッドは
自分の LinkedList にデータが登録されていればそのデータを読み出して
接続先のソケットにデータの送信を行う。

2.と違って目的のスレッドの待ち状態を解除する事ができる。
1.と違ってスレッドは接続先の処理に専念できるのでプログラムがわかりやすくなる。
接続数が多くなるとスレッド数が多くなる事を考えておく必要がある。

とりあえずこんな感じで、参考になるかな?

あんまり突っ込まないでね。思いつきで書いてるので。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。