2012年9月30日日曜日

【lisp】xyzzyで拡張lispをミニバッファで実行する方法

  1. XYZZYHOME/site-lisp/show-today.lを作成
  2. 内容は以下の記事のソースコードを使用する
  3. xyzzyを起動してミニバッファでコンパイルする
  4. 「byte-compile-file」で作成したshow-today.lを指定してコンパイルする
  5. show-today.lcファイルが作成されていることを確認する
  6. .xyzzyに以下の設定を追加
  7. (load-library "show-today")
  8. xyzzyを再起動すると「M-x show-today」が実行できるようになっている

2012年9月29日土曜日

xyzzyで拡張lispやってみた

■xyzzyインストール
以下のサイトからアーカイブをダウンロードして解凍後フォルダを配置して完了です。
http://www.jsdlab.co.jp/~kamei/

■xyzzy設定
XYZZYHOMEを環境変数に設定
設定したXYZZYHOMEに「.xyzzy」というファイルを配置

■作ったもの
起動時に今日の日付を表示することができるlispのソースコードになります
.xyzzyに記載することで起動時に表示できるようにしてみます

■ソースコード
以下を.xyzzyファイルに記載して終了となります。貼り付けたら再起動してみてください
起動するとミニバッファの下に日付が表示されます
(defun show-today ()
 (interactive)
 (setq today(format-date-string "%Y/%m/%d %H:%M:%S (%v) %z" (get-universal-time)))
 (message today)
)
(show-today)

■参考サイト

2012年9月27日木曜日

JavaをObjective-Cに変換できるj2objcを使ってみた

■概要
Googleから発表されたJavaをObjective-cに変換することができるコマンドラインツールです
githubで公開されているソースコードをObjective-Cに変換してみたいと思います
出落ちですが、どうやらMAC上でやらないとダメみたいですw
今回はCentOS上でやりました(途中まで!w)

■j2objcインストール
Linuxサーバにインストールします
現在のバージョンは0.5.2のベータ版です

wget https://j2objc.googlecode.com/files/j2objc-0.5.2.zip
unzip j2objc-0.5.2.zip
mv j2objc-0.5.2 j2objc
mv j2objc /usr/local/
cd /usr/bin
ln -s /usr/local/j2objc/j2objc j2objc
ln -s /usr/local/j2objc/j2objcc j2objcc
j2objc
Translated 0 files: 0 errors, 0 warnings
とりあえず上記が表示されればOKだと思います

■Javaソースコード
せっかくなのですでに動作するものを変換してみましょう

git clone git://github.com/kakakikikeke/Ngram.git
cd Ngram/src/jp/geocities/www/ngram/
nkf -w NgramAnalyzer.java > NgramAnalyzer.java2
すいません、文字コードがShift_JISだと動作しないようなので、UTF-8に変換します
mv NgramAnalyzer.java NgramAnalyzer.java0
mv NgramAnalyzer.java2 NgramAnalyzer.java

■j2objc実行
j2objc NgramAnalyzer.java
translating NgramAnalyzer.java
Translated 1 file: 0 errors, 0 warnings
cd jp/geocities/www/ngram/
新たにパッケージ名と同じ階層がほられるようです

というわででObjective-Cに変換できたところで終了
これ以降はLLVMとclangというコンパイラ環境とXcodeが必要になります

■ドキュメント

2012年9月26日水曜日

error Failed to initialise SSL plugin: Failed to load certificate 'broker'

katelloインストール時にこんなことを言われた
katello-allをインストールする方法を以下のようにしたら解決できた

yum -y install katello-all --enablerepo=*

どうやらrpmでインストールしたkatelloのリポジトリが有効になっていなかったのが原因のよう・・・

2012年9月23日日曜日

katelloインストール方法と初期設定方法

■概要
katelloはパッケージの管理をWebUIとAPIで制御することができるOSSのツールです
イメージとしてはRightScaleのRightエージェントと同じようなイメージです

■環境
Linux yoshi6 3.1.0-7.fc16.x86_64.debug #1 SMP Tue Nov 1 20:44:08 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
Fedora release 16 (Verne)

■インストール
ping -c1 localhost
ping -c1 `hostname -s`
ping -c1 `hostname -f`
名前解決できる必要があるので上記がうまくいくように設定しましょう
基本的にはhostsやhostnameを編集すれば大丈夫です
rpm -Uvh http://fedorapeople.org/groups/katello/releases/yum/1.0/Fedora/16/x86_64/katello-repos-1.0.3-1.fc16.noarch.rpm
yum -y install katello-all --enablerepo=*
結構な量のrpmがインストールされます
自分は160MBほどでした
katello-configure
基本的な設定を全て行なってくれます
以下のように表示されればOKです
WARNING: FQDN is not set!
Starting Katello configuration
The top-level log file is [/var/log/katello/katello-configure-20120923-013754/main.log]
Populating Katello database schema
############################################################ ... OK
Initializing Katello data
############################################################ ... OK
katelloもこれで起動します

■動作確認
ブラウザからhttps://hostname/katelloにアクセスしてみましょう
katelloの管理画面が表示されるはずです
443のポート開放も忘れずに行いましょう
デフォルトのID/PWはadmin/adminになっています
一番はじめに組織を選択スル画面になりますが「ACME_Corporation」を選択します(架空企業の意味です)

■初回設定
  1. 組織の作成
  2. Administer→Manage Organazations→新規の組織で新しい組織を作成します、ACME_Corporationでは何も設定できません
  3. ユーザの作成
  4. Administer→ユーザ→新規ユーザの作成でadmin以外のユーザを作成しましょう
  5. ロールの割り当て
  6. Administer→ロールで管理者用の権限をさきほど作成したユーザに割り当てましょう

以上で基本的な設定は完了です。
次はkatelloを使って実際にパッケージ管理を行なってみたいと思います。

また「ps aux | grep katello」などで見てみるとわかりますが、katelloは5000,5001,5002番ポートでプロセスが起動しているようでDBにはpostgresを使用しているようです

■公式ドキュメント
https://fedorahosted.org/katello/wiki/Install

2012年9月22日土曜日

2012年9月21日金曜日

【Zabbix】ファイルのチェックサムを監視する方法

アイテムの追加で以下のキーを持つアイテムを作成する
vfs.file.cksum[file]

http://www.zabbix.com/documentation/2.0/manual/config/items/itemtypes/zabbix_agent
指定できるキーの一覧はここにあります
あとデフォルトのLinuxTemplateにも入っているので、ホストにLinuxTemplateを指定すればキーを洗濯することもできます

2012年9月20日木曜日

Plugin execution not covered by lifecycle configuration: org.jenkins-ci.tools:maven-hpi-plugin:1.74:test-hpl (execution: default-test-hpl, phase: test-compile)

eclipseを使っているならば、Problemsビューから「Quick Fix」を実行すれば勝手にeclipseが整形してくれます

自分にはこれしかできなかった・・・orz

2012年9月19日水曜日

インストールISOをyumのリポジトリとして使用する方法

  1. ISOをドライブに挿入してマウントする
  2. mount -r /dev/cdrom /mnt
  3. 中身を全てコピーする
  4. cp -frp /mnt/* /var/tmp/original_repo
  5. ローカルリポジトリ用の設定ファイルを記載する
  6. vi /etc/yum.repos.d/local.repo
    [local] name=local baseurl=file:///var/tmp/original_repo enabled=0 gpgcheck=0
  7. 実行する
  8. yum install gcc --disablerepo=* --enablerepo=local

2012年9月18日火曜日

タブのように操作可能なscreenコマンドの基本的な使い方

■インストール
yum -y install screen

screen -v
Screen version 4.00.03 (FAU) 23-Oct-06

■スクリーン起動
screen
通常起動
screen -dmS yoshiS
スクリーンの名前を指定してスクリーンモードを起動
screen -r 11111.yoshiS
指定したスクリーンを使用する、11111はプロセスIDを入力する
screen -list
現在起動中のスクリーンモード一覧を表示
一覧で表示されているすべてのスクリーンを一括で削除するコマンドはないようなので
それぞれのスクリーンに切り替えてからスクリーンを閉じて行くしかない

■スクリーンモード起動後の主なコマンド
  • Ctrl+a, cでスクリーンの新規作成を行う
  • Ctrl+a, nで次のスクリーンへ
  • Ctrl+a, pで前のスクリーンへ
  • Ctrl+a, 数字で指定した数字のスクリーンへ
  • Ctrl+wで現在のスクリーンの状態がタイトルバーで確認できる「*」がついているところが現在のスクリーン
  • 各スクリーンでexitを実行することがで作成したスクリーンを閉じることが可能 すべてのスクリーンがなくなれば「screen is terminating」と表示されスクリーンモードが解除される
  • Ctrl+a, Aで現在のスクリーンのタイトルを変更することができる
  • Ctrl+a, Ctrl+aで直前のアクティブウィンドウへ切り替える
  • Ctrl+a, "で現在のスクリーンの状態がウィンドウ上で確認できる
  • スクリーン番号を押下してEnterでそのスクリーンに移動できる
  • Ctrl+a, zでスクリーンサスペンド(スリープ状態)にできる、fgコマンドを打つとスリープ状態のスクリーンを復帰することができる
  • Ctrl+a, dでスクリーンをデタッチすることができる、screen -rコマンドを打つとデタッチしたスクリーンを復帰することができる
  • Ctrl+a, kでスクリーンをkillできるらしいのですができない。。。普通に開いたscreen上でexitコマンドを実行してもkillできます

■所感
基本動作はscreenモード起動後にCtrl+aの次のキーでタブと同様の動作できるようになります
PoderosaやXshellなどのタブ表示可能なターミナルツールと大きく違うなーと感じたところは
  • Ctrl+aの操作でタブ同様の動作ができるので、Linuxキーバインドに慣れているならscreenのほうが操作が早くなるかもしれない
  • スクリーンの状態を保存しておくことができるので、前回終了時から再開することができる(デタッチとサスペンド)
  • 単純に機能が豊富(デタッチやサスペンドもそうだがコピーやスクリーン分割、ログも見れる)
  • クライアントのターミナルツールが落ちてもサーバ側はscreen越しに起動し続けてくれる(デーモン起動できないプロセスなどには便利)
まぁメリット、デメリットあると思います
状況応じて使い分けると非常に便利なツールになりそうです

Ctrl+aの次に打てるキーの一覧は以下にあります
http://www.limy.org/program/screen.html



P.S 20130717
・Ctrl+aのエスケープ
Ctrl+a がscreenで使われているのでカーソルを先頭に移動することができません
emacsのように先頭にしたい場合には設定ファイルにエスケープの定義を追加する必要があります
ただこれを実施するとCtrl+aでscreenの操作ができなくなります
echo "escape ^Tt" >> /root/.screenrc

・There is no screen to be resumed matching
と表示されてアタッチできない場合はすでに誰かがそのスクリーンを使っている状態です
一旦デタッチ(screen -D)してからアタッチ(screen -r)すれば再度アタッチすることができます

2012年9月17日月曜日

Ubuntu12.04でssh、iptables、emacs、vmware-toolsのインストールと設定を行ったメモ

■ISO
ubuntu-12.04.1-server-i386.iso

■パッケージアップデート
apt-get update

■sshをインストール
apt-get install ssh
apt-get install chkconfig
sudo ln -s /usr/lib/insserv/insserv /sbin/insserv
chkconfig ssh on
chkconfig --list | grep ssh
なんかたくさんエラーが出るが問題ない

■iptablesを停止
ufw disable

■emacsをインストール
apt-get install emacs

■vmware-toolsをインストール
apt-get install gcc
apt-get install linux-headers-lbm-3.2.0-29-generic-pae
mount -r /dev/cdrom1 /mnt
cd /mnt
cp * /var/tmp
cd /var/tmp/
tar xvf VMwareTools-9.2.0-799703.tar.gz
cd vmware-tools-distrib
./vmware-install.pl --default EULA_AGREED=yes
すべてデフォルトの設定でインストールする
どうやらservice登録はできないらしい、ただ別のところで自動起動は登録されている
コマンドはvmtoolsdとなった

Fedora17でssh、iptables、emacs、vmware-toolsのインストールと設定を行ったメモ

■ISO
Fedora-17-i686-Live-Desktop.iso

■パッケージアップデート
yum update

■sshインストール
yum -y install openssh*
systemctl start sshd.service
systemctl -t service | grep ssh
systemctl enable sshd.service

■iptables停止
systemctl stop iptables.service
systemctl stop ip6tables.service
systemctl enable iptables.service
systemctl enable ip6tables.service
systemctl -t service | grep iptables
systemctl -t service | grep ip6tables

vi /etc/sysconfig/selinux
#SELINUX=enforcing
SELINUX=disabled

■emacsインストール
yum -y install emacs

■vmware-toolsインストール
yum -y install gcc
yum -y install *3.5.3-1.fc17.i686*
mount -r /dev/cdrom /mnt/
cd /mnt/
cp -ipr VMwareTools-9.2.0-799703.tar.gz /var/tmp/
cd /var/tmp
tar xvf VMwareTools-9.2.0-799703.tar.gz
cd vmware-tools-distrib/
./vmware-install.pl
systemctl status vmware-tools.service
systemctl -t service | grep vmware


■メモ
http://www.server-world.info/query?os=Fedora_17&p=initial_conf&f=2
http://blog.tndl.net/2012/05/31/481/fedora-17-%E5%82%99%E5%BF%98%E9%8C%B2/
⇒serviceコマンドやchkconfigコマンドは全てsystemctlに統合されているみたい
systemctl -a | grep hogehoge
ですべてのサービス状況が確認できる

/etc/resolv.confをfedoraのNetworkManagerという機能で毎回上書きされてしまう
それを防ぐためにはNetworkManagerを停止してしまえばいいのだが、DHCPがうまく動作しない場合がある
その場合は素直に/etc/sysconfig/network-scripts/ifcfg-ethXにDNS1とDNS2を設定しましょう
ちなみにifcfg-ethXファイルが複数ある場合には全てに同じ内容のDNSを設定しないと反映されないので頑張ってすべてに記載しましょう

シャットダウンする場合は右上のアカウント名のところをクリックしてaltを押下すると
suspendのところがpoweroffに変わるのでそれでシャットダウンできる

2012年9月16日日曜日

【Java】System.exit()の引数の数字の意味

基本的には呼ばれた時点でプログラムを終了します
が、引数によって意味が異なってきます

0・・・プログラム的には正常に終了
1・・・プログラム的には異常に終了

という意味合いがあるみたいです
コーティングレベルの話かと思いますが、必要に応じて使い分ける必要がありそうです

2012年9月13日木曜日

【Java】log4jを使ってsyslogにログを飛ばしてみた

■概要
JavaのLog4jの仕組みを利用して、Linuxのsyslogに対してJavaのログを飛ばしてみる
Javaのソースファイルはeclipse上で編集しました

最終的にはこのようになります

■ソースファイル
以下にサンプルをおきました

http://www.geocities.jp/kakakikikeke_new/cui/cui32.html

準備ができたらbuild.xmlを実行してjarファイルを作成します


■syslog側設定
vi /etc/syslog.conf
local6.* /var/log/test.log
を追加する

vi /etc/sysconfig/syslog
SYSLOGD_OPTIONS="-m 0"

SYSLOGD_OPTIONS="-m 0 -r"
service syslog restart

■実行
syslogが動作しているLinuxサーバにlog4jTest.jarとlog4j.propertiesを持っていきます
適当に同一ディレクトリ配下に置いたら実行してみます

java -jar log4jTest.jar
tailf /var/log/test.log

syslogで設定したログファイルにJavaからのログが吐かれていると思います

eclipseでJenkinsのプラグイン開発

■事前作業
mavenの設定とプラグインを開発出来る準備をしておいてください
http://kakakikikeke.blogspot.com/2012/09/jenkins.html

■設定
※事前作業で作成したpluginディレクトリを使用します
cd plugin
mvn -DdownloadSources=true -DdownloadJavadocs=true -DoutputDirectory=target/eclipse-classes eclipse:eclipse
eclipseに取り込むための必要なファイルが作成されました
.classpath
.project
.settings
pom.xml
src
target
work
作成したpluginプロジェクトをeclipseのworkspace配下にコピーしましょう

■eclipseのm2プラグインのインストール
Eclipse Marketplaceから「m2eclipse-wtp」をインストールしましょう
m2プラグイン単体もあるようですが、これを入れてしまうとかなり楽です

■eclipseのプロジェクトとして取り込む
eclipseから既存のプロジェクトとしてpluginプロジェクトをインポートします
先ほどインストールしたプラグインが入っていれば作成したpluginプロジェクトはエラーにならないと思います

■デバッグ(サンプルプログラムを実行)
動作確認をしてみます
コマンドプロンプトを開きeclipseのworkspaceにコピーしたpluginプロジェクト配下に移動します
mvn hpi:run
を実行し、8080にアクセスすることでプラグインの動作確認を行うことができます
ソースコードを変更すると自動で変更を検知してくれるので、再度デバッグを実行する必要はありません

このサンプルコードはビルド後のコンソール出力に「Hello xxx」または「Bonjour xxx」と表示することができるサンプルです


フランス語に設定することでBonjuorが表示されるようになります
設定はJenkinsの管理→システムの設定からフランス語への切り替えができます


またコンソール出力に表示するかしないかは各ジョブの設定で「ビルド手順の追加」から「Say hello world」を選択すると表示されるようになります

■参考サイト

2012年9月11日火曜日

【redmine】ガントチャートで表示されるデフォルトの開始月を変更する方法

ガントチャートはデフォルトだと当月から表示されます
プロジェクトによっては何ヶ月か前から進行しているものもあり数ヶ月前の状況を確認したい場合もあります
一応プルダウンから月の変更は可能ですが、毎回当月から変更するのはめんどくさいですね
その場合の対処方法をご紹介します
※今回は2ヶ月前にしてみます


cp -p lib/redmine/helpers/gantt.rb{,.back}
emacs lib/redmine/helpers/gantt.rb
53行目あたり
@month_from ||= Date.today.month

@month_from ||= Date.today.month - 2
にすることでガントチャートの開始月が現在の付きの2ヶ月前となります


redmineを再起動しガントチャートを見ると当月の2ヶ月前から表示されていると思います
お試しあれー

P.S 20130201
すいません。上記だと2月に@month_fromが0になるので、エラーとなりガントチャートが表示されません。。。
以下の部分を上記で修正した箇所の下に追記してください
if @month_from = 0
  @month_from = 12
  @year_from = @year_from - 1
end
0の場合は12月をセットしかつ年も一年前にします
2013年2月の場合は2012年12月から表示されます

2012年9月10日月曜日

CentOSにgitサーバをインストール+初期構築

¡ŠÂ‹«
CentOS release 6.3 (Final)
git version 1.7.12

¡ƒCƒ“ƒXƒg[ƒ‹Žè‡
1. gitƒT[ƒoƒCƒ“ƒXƒg[ƒ‹
rpm -Uvh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
  RHEL6—p‚Ìrpmforge‚ðyum‚̃Šƒ|ƒWƒgƒŠæ‚Æ‚µ‚Ä“o˜^‚µ‚Ü‚·
yum clean
  •K‚¸clean‚µ‚Ä‚­‚¾‚³‚¢
yum update
yum install -y gettext
yum install -y git*
emacs ~/.bashrc
export PATH=$PATH:/usr/local/libexec/git-core
git-daemon
  ƒtƒHƒAƒOƒ‰ƒ“ƒh‚Å‚ÌŽÀs‚Æ‚È‚è‚Ü‚·
netstat -an | grep 9418
  0.0.0.0:9418
  9418ƒ|[ƒg‚ðŠJ•ú‚µ‚Ü‚µ‚傤
  ‚Ü‚½ssh‚Åpush‚·‚é‚Ì‚Å22”Ôƒ|[ƒg‚àŠJ•ú‚µ‚Ü‚µ‚傤

2. ƒT[ƒo‘¤Ý’è
cd /var/tmp
mkdir test.git
cd test.git
git --bare init --shared
ls -ltr
  git—p‚̃tƒ@ƒCƒ‹‚ª¶¬‚³‚¹‚Ä‚¢‚邱‚Æ‚ðŠm”F‚·‚é
touch /git/test.git/git-daemon-export-ok
  git‚ðclone‚·‚邽‚ß‚É•K—v‚ȃtƒ@ƒCƒ‹‚ð’u‚«‚Ü‚·

3. ƒNƒ‰ƒCƒAƒ“ƒg‘¤‘€ì
mkdir tmp
cd tmp
git init
touch test.txt
git add .
git commit -m "01 commit test"
git remote add origin ssh://root@git_server/git/test.git
git push -u origin master

4. cloneŠm”F
rm -rf /var/tmp/test.git
git clone git://git_server/git/test.git

2012年9月9日日曜日

Jenkinsのプラグインを開発するための手順(mavenのインストールからサンプルの実行まで)

■環境
Windows7
Java7

■mavenのインストール
http://www.apache.org/dyn/closer.cgi?path=/maven/binaries/apache-maven-3.0.4-bin.zip
ダウンロードしたzipファイルを解凍し解凍してできたファイルの名称を「maven」に変更する
名称変更したフォルダをC:\直下に配置する
以下のように環境変数を追加します
MAVEN_HOME:C:\maven
PATH:MAVEN_HOME\bin
JAVA_HOMEも必要になるので、JAVA_HOMEも設定します
Javaがまだインストールできていない場合にはインストールしましょう
コマンドプロンプトを開いて「mvn」と入力しエラー文らしきものが出力されることを確認

C:\Users\ユーザ名配下に「.m2」というフォルダがあるので配下にsettings.xmlを作成し以下を記載

<settings>
  <pluginGroups>
    <pluginGroup>org.jenkins-ci.tools</pluginGroup>
  </pluginGroups>

  <profiles>
    <!-- Give access to Jenkins plugins -->
    <profile>
      <id>jenkins</id>
      <activation>
        <activeByDefault>true</activeByDefault> <!-- change this to false, if you don't like to have it on per default -->
      </activation>
      <repositories>
        <repository>
          <id>repo.jenkins-ci.org</id>
          <url>http://repo.jenkins-ci.org/public/</url>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>repo.jenkins-ci.org</id>
          <url>http://repo.jenkins-ci.org/public/</url>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
</settings>

■mavenプロジェクトの作成
事前に作業用のフォルダを作成しておくとよいでしょう
コマンドプロンプトを開いて作業用フォルダに移動します
mvn -cpu hpi:create
いろいろとダウンロードされるのを確認します
途中でmavenプロジェクトの名前とグループ名を入力するようになりますので、適当に入力します
ここではグループ名を「kaka」プロジェクト名を「plugin」とします
cd plugin
mvn package
成功すると「target」「src」「pom.xml」の3つのファイルが作成されます

■サンプルプラグインの作成
mvn install
成功するとtargetフォルダ配下にplugin.hpiというファイルができているのでそれがプラグインになります

■サンプルプログラムの実行
set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=n
mvn hpi:run
ブラウザからローカルホストの8000へアクセスすれば自作プラグインがインストールされたJenkinsがJetty越しに起動します
Jettyは一度起動したら自動で変更を認識してくれるので、上記を実行したターミナルはそのままでよいでしょう

8000番にアクセスした際に

Debugger failed to attach: handshake failed - received >GET / HTTP/1.1< - expected >JDWP-Handshake<

が出た場合には8000ではなく8080にアクセスしてみてください

ブラウザでデバッグモードのJenkinsにアクセスできたらJenkinsの管理からプラグインの管理にを見てみると「plugin」というのが表示されていればインストール完了です
今回のサンプルプラグインは特に何も動作しないです

以上で簡単な流れの説明は終了です
次回は統合開発環境eclipseを使ってサンプルプラグインを作成してみます

2012年9月7日金曜日

【dhclient】IPが何度も変わってしまう場合の対処方法

/var/log/messageにDHCPREQUESTのログが30秒おきに何度も行われている場合があった
DHCPサーバ側での動作とは考えにくかったためdhclient側を調査してみた

less /var/lib/dhclient/dhclient.leases

lease {
interface "eth2";
fixed-address 10.1.100.186;
option subnet-mask 255.255.252.0;
option dhcp-lease-time 43200;
option dhcp-message-type 5;
option dhcp-server-identifier 10.1.100.10;
renew 3 2012/9/5 12:46:44;
rebind 3 2012/9/5 12:46:44;
expire 3 2012/9/5 12:46:44;
}

dhcp-lease-timeが30に設定されていたため時間を長くすることで回避できそうだ
お試しあれ

2012年9月5日水曜日

gitを使って開発環境を完全システム化

したいなーと思ってメモがてらcacooで書いてみました
cacooを使いたいからって理由もあるんですけどねw

https://cacoo.com/diagrams/SXFfzCFSLTxhPvEb

2012年9月4日火曜日

【Java】JunitをやめてTestNGを使ってみた

JunitのテストプログラムをTestNGに移行してみたので簡単ですが、その手順をメモしておきます
TestNGに移行した理由はテストの順番を明確にしたかったからです
ソースの内容によってもかなり変わるので本当に参考程度にしてくださいw

■インストール
http://search.maven.org/#search|ga|1|a%3A%22testng%22
⇒TestNGをダウンロード
jarファイルをcld-ui-testのビルドパスに追加
eclipseMarcketからTestNGのプラグインをインストールしeclipseを再起動

■移行時手順とかTips
  • ライブラリ読み込み
  • 各テストクラスファイルのの以下をソースコードを修正 import org.testng.annotations.Test; を追加し import org.junit.Test; を削除
  • テストに依存関係を追加
  • 以下のアノテーションを使ってテストに依存関係を持たせる @Test(groups={"aftertest"}, dependsOnMethods = { "beforetest" }) dependsOnMethods にはメソッド名を入力する
  • テストを無視させる
  • テストを無視させたい場合には以下を追加 @Test(enabled=false)
  • テストが実行される順番
  • dependsOnMethodsで依存関係を指定していない場合、テストが実行される順番はメソッド名の降順でテストされる様子

2012年9月3日月曜日

【Java】Seleniumを劇的に安定させる方法

https://gist.github.com/3497944

FirefoxDriverを継承してsleepを必要なメソッドに入れてあげた
自分はこれで飛躍的に安定しました
正直カッコ悪いですけどねw

2012年9月2日日曜日

【fluentd】ニフティクラウドストレージにログを上げてみた

何番煎じと言われようが関係ないw
やってしまったのでメモ程度に残しておきます

cd /usr/local/fluent/
fluent-gem install fluent-plugin-s3
emacs /usr/local/fluent/fluent.conf

<match pattern>
  type s3 ⇒プラグインの名前です(固定)

  aws_key_id YOUR_AWS_KEY_ID ⇒取得したAPIキーを入力してください
  aws_sec_key YOUR_AWS_SECRET/KEY ⇒取得したAPIシークレッキーを入力してください
  s3_bucket YOUR_S3_BUCKET_NAME ⇒バケット名を入力してください
  s3_endpoint ncss.nifty.com ⇒エンドポイント名です(固定)
  path logs/ ⇒バケット直下に置くフォルダです、フォルダがある場合はしてします
  buffer_path /var/log/fluent/s3 ⇒s3に上げる前にテンポラリログを吐くパスです、この場合s3.xxxxというログを吐きます

  time_slice_format %Y%m%d_%H%M%S ⇒ストレージにあげるログのフォーマットを指定します
  time_slice_wait 10m ⇒毎時10分にテンポラリにためたログをストレージにアップロードします、この時にテンポラリは削除されます
  #flush_interval 60s ⇒こちらを指定すると60秒ごとにテンポラリのアップロードと削除が行われます
  utc
</match>

fluentd --config /usr/local/fluent/fluent.conf -vv

上記の設定の場合だとX時10分にクラウドストレージを見るとログがgzに圧縮されたログが出力されているはずです

他にもパラメータをいじることでいろいろな設定変更ができそうです
時間ではなくテンポラリのログサイズをトリガーにしてストレージに送ることもできるみたいです
パラメータの詳細は公式のドキュメントが一番わかりやすいです
http://fluentd.org/doc/plugin.html

2012年9月1日土曜日

【Zabbix】JMXのヒープメモリの使用率をアイテムに追加する方法

jmx[java.lang:type=Memory][HeapMemoryUsage.used]

をキーにしてZabbixでアイテム作成をします

キーの値はjconsoleを使えば取得できます

キーのフォーマットがjmx[ObjectName][属性値]になっておりこの情報がjconsoleを使うと取得できるというわけです

P.S 20130129
※zabbixのアイテムのキーの値は整数や浮動小数点など取得する値の形式を選択する箇所があります
これをちゃんと設定しないとWebUI上で「取得不可」と表示されてしまいますので形式はちゃんと指定するようにしましょう
形式を調べる方法としてはリファレンスを見る方法もありますが、一番なのはzabbx_getで実際に値を取ってみることだと思います