Qt の UDPSocket で気をつけること(Windowsの場合)
久しぶりにQt のUDPSocket ではまったのでメモ。
UDPSocket を連続して受信すると、9kbyte 付近で、必ずパケットロスをする現象が発生。パケットキャプチャをする限り、PCまでは届いているので、ソフト的な問題。UDPのバッファの問題か、と思い調べてみるが、Qt の中には、そのようなAPI は存在しない。(UDPSocket のバッファを変更しても無駄でした)
結論としてはSocket のデスクリプタを取得して、setsockopt で、SO_RCVBUF を増やす必要があった。そのため、連続してパケットを受け取ると、デフォルトが 8192 byte のWindowsのUDP 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 で悩む
DELLの PowerEdge 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
を実行