asmackでXMPPのPreference情報を取得する

asmack + openfireでチャットについて調査中

相手先の状態(Presence)を取得するには、ユーザーのRosterが登録されていなければならない。Rosterはユーザーの追加を行うことでできるが、通常は一方通行の関係となる(subscribeがfrom, to)。ユーザーが追加されたことは検知できるので、追加された側もPresense.Type.subscribeを相手に送ってあげることで双方向の関係となり、相手のPreferenceの変更をRosterListenerで取得することができる。

openvzで開発環境を作る #3

DMZ環境を用意します。ネットワークは10.0.0.0/24としておき、全てのPCが単一のブリッジにつながるようにしておきます。

まずはホストで以下の設定を行ってリブートします。

"/etc/sysconfig/network-script/ifcfg-br0"(新規作成)

DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
IPADDR=10.0.0.1
NETMASK=255.255.255.0
NETWORK=10.0.0.0
ONBOOT=yes

これでリブートすると、br0インターフェイスが見えるはず。

#ifconfig
br0       Link encap:Ethernet  HWaddr XX:XX:XX:XX:XX:XX  
          inet addr:10.0.0.1  Bcast:10.0.0.255  Mask:255.255.255.0
          inet6 addr: fe80::488c:fbff:fef0:31ff/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:800 (800.0 b)

ルーティングテーブルにも10.0.0.0/24は全てbr0にいくようになっています。

#route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        *               255.255.255.0   U     0      0        0 br0
192.168.11.0    *               255.255.255.0   U     0      0        0 wlan0
link-local      *               255.255.0.0     U     1003   0        0 wlan0
link-local      *               255.255.0.0     U     1005   0        0 br0
default         buffalo.setup   0.0.0.0         UG    0      0        0 wlan0

CentOS 6.3に古いUSB無線LANを導入

古いパソコンにCentOS 6.3をいれたまではよかったけど、USB無線LANの導入に手こずったので備忘録的にブログに記録

[状況]

OS: CentOS 6.3 (minimam)
無線LAN: WLI-U2-KG54 (Buffalo)

[記録]

  • 普通にCentOSを導入。yumでモジュールを最新にする。
  • yumで"wireless-tools"をインストール
  • こことかここを見ながら導入。DHCPサーバからIPを取得するところまではいけたものの次のようなエラーがずっと出る。
    phy0 -> rt2500usb_set_device_state: Error - Device failed to enter state 3 (-16).
    phy0 -> rt2x00lib_autowakeup: Error - Device failed to wakeup.
  • このページを見て"iwconfig wlan0 power off"で直るとかかれていたので、入力したら直った。

Javaで現在実行中のメソッドの情報を取得する方法

Javaで実行中のメソッドの情報は、旧来は次のような方法が用いられていた。

String methodName = new Throwable().getStackTrace()[0].getMethodName()

しかしこれはパフォーマンス的にはあまりいい方法ではないし、リフレクションのMethodオブジェクトではないのでその他の情報が取れない。Java 1.5からは次の方法で現在実行中のメソッドのMethodオブジェクトが取得できる。

Method method = new Object(){}.getClass().getEnclosingMethod();

パフォーマンス的にどうかはわからないが、Methodオブジェクトが取得できるのはいいと思う。

openvzで開発環境を作る #2

[]開発環境用のマシンにcentos 6を入れる。限られたリソースを有効に使いたいので、CentOS-6.x-i386-minimal.isoを使ってインストールする。ここでインストールしたOSはOpenVZのホストであり、かつクライアント環境、開発環境、テスト環境を結ぶルーターでもある。

minimalだと特に何も聞かれずにインストールが進む。インストールが完了してrootでログインができたら、次の作業を行う。

  • ネットワークの設定

"/etc/sysconfig/network-script/ifcfg-eth0"ファイルを、次のように編集する。

DEVICE="eth0"
BOOTPROTO="static"
IPADDR=192.168.11.101 # ルータと同じネットワークでかぶらないもの
NETMASK=255.255.255.0 # ルータと同じ設定
GATEWAY=192.168.11.1 # ブロードバンド ルーターのアドレス
HWADDR="(元の値をそのまま使う)"
NM_CONTROLLED="yes"
ONBOOT="yes" # noからyesに変更
TYPE="Ethernet"
UUID="(元の値をそのまま使う)"
「IDADDR」と「NETMASK」は、ブロードバンドルーターと通信ができるよう同じネットワークでかつdhcpで提供されるipとかぶらないもので、ブロードバンドルーターと同じネットワークセグメントに所属するように設定する。
  • ホスト名の変更
[root@localhost ~]hostname router
  • 作業用ユーザの作成
[root@router ~]# useradd kenji
[root@router ~]# passwd kenji
[root@router ~]# vigr (開いた画面で、wheelという列に追加したユーザー("kenji")を追加する

再起動をするとこのマシンにはリモートで接続できるようになる。以降の作業は、使いなれた日頃使っているマシンからsshで接続して作業する。

openvzで開発環境を作る #1

開発をする時には、開発用のCMSサーバ、Jenkinsサーバ、テストサーバなどもろもろのサービスが必要。でも、一つのサーバの中にサービスを詰め込むと障害があった時に大変なので、なるべく別々のサーバにしたい。

そこで、openvzを使って物理的に一台のマシンに複数のサーバを立てることにする。その覚え書き。

物理構成:

  • 普段使っているコンピュータ
  • 開発環境用のコンピュータ(数10ギガバイトのHDD, 1〜2Gのメモリ)
  • インターネットに出られる環境(ブロードバンドルーターのLAN側のアドレスを覚えておくこと)