Qt の UDPSocket で気をつけること(Windowsの場合)

久しぶりにQt のUDPSocket ではまったのでメモ。

UDPSocket を連続して受信すると、9kbyte 付近で、必ずパケットロスをする現象が発生。パケットキャプチャをする限り、PCまでは届いているので、ソフト的な問題。UDPのバッファの問題か、と思い調べてみるが、Qt の中には、そのようなAPI は存在しない。(UDPSocket のバッファを変更しても無駄でした)

結論としてはSocket のデスクリプタを取得して、setsockopt で、SO_RCVBUF を増やす必要があった。そのため、連続してパケットを受け取ると、デフォルトが 8192 byte のWindowsUDP Socketは、データを落とす、ということらしい。

サンプルコードも書いておきたいが、とりあえず、備忘録で。

Qt で UDP を書いて、なぜかパケットロスがある人は、気をつけるべきだと思う。(ドキュメントに書いておくべきだと思う。ネットで検索しても、解決策が見つからないのも残念な感じ)
まあ、そもそも、Qt は signal/slot でイベントを扱うため、パフォーマンスが出ない、という問題もあるので、そのあたり、注意すべきだよね。

LVM 再び

時々しか Linux を管理していないと、いろいろなことを忘れてしまう。LVM もその一つ。
ということで、LVM ボリュームを追加するための方法をメモっておく。LVM の場合、物理ディスク、PV,VG,LV と4段階あるのに注意。まずは、新しいディスクのパーティションを作成。1つでOKのはず。 (Xen Server の場合)

fdisk /dev/xvdb 

で、まず、fdisk (パーティションエディタ)を起動。p で確認し n で新規パーティションを作成。p で primary を作成し、あとは、 1-最後までを cylinder 番号で指定。次にIdを LVM2 に変更するために、t で変更し、 8e (LVM) にする。w でディスクに書き込んで終了。fdisk -l で確認ができる。これで、ディスクはOK.次に PV として認識できるようにする。

pvcreate /dev/xvdb1

pvscan で確認して、出てこればOK。次は、vg だ。

vgextend VolGroup00 /dev/xvdb1

これで、VolGroup00 に /dev/xvdb1 というpv が追加される。でもまだ、これでは、LVまで広がらない。次にLV を広げる。pvdisplay で広げる対象の extent 数を数えておいて -l で指定するのが良い。

lvextend -l +1023 /dev/VolGroup00/LogVol00 

最後にファイルシステムのサイズ拡大

resize2fs /dev/mapper/VolGroup00-LogVol00

これでOKのはず。
あ、ちなみにCentOS5.6 です。

Webサービス開発でのハマり方

個々数日のWeb開発、マジにいろいろハマって、なんだか楽しい。
(いや、大変なんですが)

例えば

  • ストアカウントとapache アカウントの違いで cgi の挙動が異なるのに気づかない
  • JavaScriptの変数の書き間違いに気づかない
  • JavaScriptのエラーの場所がわからない
  • CSSの挙動がよく分からない(試行錯誤)
  • JSONの値が文字列か数値化かの判断間違い

などなど。

大変勉強になりました。それぞれ小一時間ほど(もっと多いのもの)時間をとられてしまうので、開発がなかなか進まない。。。

JavaScript の開発環境

GW の手習いに、Webサービスを構築している。

で、JavaScript

エラーがその場でわからないため、デバッグが大変。

とりあえず、emacs での開発環境として js2.el を導入してみる。

導入方法はまず、

wget http://js2-mode.googlecode.com/files/js2-20090723b.el
sudo cp js2-20090723b.el /usr/share/emacs/site-lisp/js2.el
sudo emacs -batch -f batch-byte-compile /usr/share/emacs/site-lisp/js2.el

とやってから .emacs

;; js2-mode
(autoload 'js2-mode "js2" nil t)
(add-to-list 'auto-mode-alist '("\\.js$" . js2-mode))

と記入すればOK.

ついでに、Inferior Javascript Mode も導入しよう

wget --no-check-certificate https://github.com/bkyle/inf-js/raw/master/inf-js.el

として、.emacs

(autoload 'run-js "inf-js" nil t)
(autoload 'inf-js-keys "inf-js" nil)
(add-hook 'js2-mode-hook '(lambda () (inf-js-keys)))
(defvar js-program-name "js")

を記入すればOK.
あ、もちろん Javascript インタプリタの導入が必要。
このコンパイルも大変だ。

CentOS 5.6 のEmacsで TeraTerm 経由でUTF-8の漢字が表示できない

という問題にはまって、はや数ヶ月。ひらがなだけができたりする点がまた微妙な漢字で不思議だった。あきらめて vi を使ってました。ネットを検索して、いろいろはまって、もうだめか、と諦めてました。

よくある記述は .emacs に以下を書けとのこと。

;; for japanese
(set-language-environment "Japanese")
(prefer-coding-system 'utf-8-unix)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(setq default-buffer-file-coding-system 'utf-8)

でも、なぜかダメ。うーん。

結局、環境変数 LANG の問題、ということが判明。実はサーバインストールをしていたので、X 環境も無いし、英語でインストールしてたんですよね。。。

すなわち .profile などに

LANG=ja_JP.UTF-8
export LANG

と書けばOK.

まさか環境変数が問題だとは気づかず、マジに長期間はまってました。同じようなことにハマる人が出ないように、ここに書いておきます。

ちなみに、OSレベルでの変更は

/etc/sysconfig/i18n

を変更すればOK.

DELL BMC で悩む

DELLPowerEdge 2950 には BMC(Baseboard Management Controller)がついている。これを使えば遠隔から Powerの On/Off やモニタリングができる。しかし、これを使うには、DELL OpenManage というツールをいれる必要があって、今ひとつ悩ましい。

ipmish というコマンドを使えばよいらしいが、そのためには Windows端末が必要。しかし調べてみるとOpenManage のDVD の中に RedHat 用のツールが入ってる。
パッケージ名は、

osabmcutil9g-RHEL

だ。これが分かれば、あとは簡単。つーことでipmish for linux は入手できたのだが、残念ながら、まだ電源On/Offには成功していない。

なぜだろう。。。。

e3meter install

メモ

Ubuntu 10.04に e3meter power を入れてみた。

apt-get install subversion
svn co http://svn.sourceforge.jp/svnroot/e3meter/trunk

apt-get install apache2
apt-get install rrdtool
apt-get install ruby
apt-get install rubygems
gem install soap4r

/etc/bluetooth/rfcomm.conf 編集
/etc/apache2/sites-available/xxx.conf 編集

make_html.rb
を実行ご
start.sh
を実行