2012年6月30日土曜日

nuttcpを使ってネットワークのスループットを測定してみた

1. まずはダウンロード
http://www.wcisd.hpc.mil/nuttcp/Nuttcp-HOWTO.html
※公式(っぽいです)
HTML, FTP, ローカルコピーどれでもいいのでソースを持ってきます
ソースからのインストールしかなさそうです
今回も例のごとくyoshi3サーバで行います
※以下で紹介しているパスは適当に作成しておりますので適宜変更していただいて問題ございません

[root@yoshi3 28_20120628_nuttcp]# wget http://www.lcp.nrl.navy.mil/nuttcp/beta/nuttcp-7.1.6.c
--2012-06-27 11:57:07-- http://www.lcp.nrl.navy.mil/nuttcp/beta/nuttcp-7.1.6.c
www.lcp.nrl.navy.mil をDNSに問いあわせています... 132.250.114.61
www.lcp.nrl.navy.mil|132.250.114.61|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 251878 (246K) [text/plain]
`nuttcp-7.1.6.c' に保存中

100%[=====================================================================================================================================>] 251,878 179K/s 時間 1.4s

2012-06-27 11:57:11 (179 KB/s) - `nuttcp-7.1.6.c' へ保存完了 [251878/251878]

[root@yoshi3 28_20120628_nuttcp]# cc -O3 -o nuttcp nuttcp-7.1.6.c
[root@yoshi3 28_20120628_nuttcp]# ls
nuttcp nuttcp-7.1.6.c
[root@yoshi3 28_20120628_nuttcp]# cd /usr/bin/
[root@yoshi3 bin]# ln -s /root/28_20120628_nuttcp/nuttcp nuttcp
[root@yoshi3 bin]# ls -ltr | grep nuttcp


2. 測定開始

[root@yoshi3 bin]# nuttcp -S (サーバ側起動)
[root@yoshi3 bin]# ps aux | grep nuttcp
root 4945 0.0 0.0 6028 296 ? Ss 13:21 0:00 nuttcp -S
root 4947 0.0 0.1 65440 872 pts/0 R+ 13:21 0:00 grep nuttcp
[root@yoshi3 bin]# nuttcp yoshi3 (yoshi3サーバへリクエストしたときのスループットを測定)
10646.0469 MB / 10.01 sec = 8921.2350 Mbps 14 %TX 24 %RX 0 retrans 0.03 msRTT
[root@yoshi3 bin]# nuttcp -il yoshi3
2785.8750 MB / 1.00 sec = 23325.0159 Mbps 0 retrans
1611.8125 MB / 1.04 sec = 13060.3425 Mbps 0 retrans
860.1250 MB / 1.06 sec = 6833.2263 Mbps 0 retrans
818.3125 MB / 1.00 sec = 6864.0772 Mbps 0 retrans
826.5000 MB / 1.02 sec = 6816.7745 Mbps 0 retrans
725.3125 MB / 0.93 sec = 6561.1123 Mbps 0 retrans
813.2500 MB / 1.02 sec = 6714.9719 Mbps 0 retrans
802.7500 MB / 1.00 sec = 6722.3053 Mbps 0 retrans
819.3750 MB / 1.05 sec = 6574.1851 Mbps 0 retrans
717.8125 MB / 0.91 sec = 6638.5398 Mbps 0 retrans

10785.7344 MB / 10.01 sec = 9038.6793 Mbps 13 %TX 25 %RX 0 retrans 0.02 msRTT

3. 測定結果

----------------------------------------------------------------------------------------
↓1秒の間に送信したパケット量
2785.8750 MB / 1.00 sec = 23325.0159 Mbps 0 retrans
使っているethカードの最大帯域↑
----------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------
↓10秒間で送信したパケットの合計
10785.7344 MB / 10.01 sec = 9038.6793 Mbps 13 %TX 25 %RX 0 retrans 0.02 msRTT
使っているethカードの最大帯域の平均↑
----------------------------------------------------------------------------------------

結果から読み取れる概要としては
・ネットワークの帯域的には10Gくらいあるネットワーク使ってますよ
・データ転送量的には1秒間で800Mくらいは送れますね
・13%TXがクライアント側の平均CPU使用率、25%RXがサーバ側の平均CPU使用率
といったところでしょうか
開始時に値が大きくなっているのはなんかこうなっちゃうみたいです
おそらくは、スイッチ等のネットワーク機器がethカード以上の帯域を専有しないいように絞っているのでしょう
また、オプションなしで実行しているこの環境は双方向通信の測定結果になります

4. その他オプションなど
「-D」を指定すると下りの性能のみを計測
「-B」を指定すると上りの性能のみを計測
⇒こちらもやってみましたが、あまり双方向通信の結果と変わりませんでした
「nuttcp」とコマンドを実行すればヘルプも出るようです

2012年6月29日金曜日

mysqlで現在の書き込み、読み込み状態を確認する方法

mysqladmin -p processlist

※rootにパスワードを設定している場合には-pをつけてからパスワードを入力する必要があります
これを実行してInfo欄に「show processlist」が表示されているレコードのみ表示されれば他に動作しているプロセスはありません

あとはこの辺で状態確認が行えます
mysqladmin -p status
mysqladmin -p extended-status

長くなってしまう場合はコマンドの最後に「\G」をつけるといい感じに整形してくれます

2012年6月28日木曜日

【Jenkins】ビルド結果に出力される「成功」「失敗」に色をつけるプラグイン(Log Parser Plugin)

P.S 20140805
タイトル修正しました
本文の体裁を整えました

1. インストール
普通にJenkinsのプラグインインストールからいきましょう
以下の名前のプラグインをインストールします

2. 設定
以下のようにファイルを作成します
cd ~/.jenkins/
mkdir log
cd log/
touch stu_fix_log.txt
emacs stu_fix_log.txt
----------------------------------
error /^failed:/
info /executing/
----------------------------------
今回はerrorとinfoレベルに分けたいと思います

Jenkinsの管理→システムの設定から以下のように設定


ジョブ名→設定から以下を設定

3. 確認
一旦ビルドしましょう
ビルド結果を確認すると左メニューに「Parsed Console Output」が増えています
これをクリックするとコンソール出力に
errorと設定した文字列を含む部分が赤色になり
infoと設定した文字列を含む部分が青色になっている
ことがわかると思います

2012年6月27日水曜日

【Ruby】Capistranoを使ってみた(gitとJenkinsもちょっと連携)

インストールについては適当にググってやってくださいw
「capistrano インストール」でガッツリでてきます

以下いろいろと使ってみた結果です
コマンドのとこだけ実行していくと基本的な設定と動作はできるようになります

mkdir /usr/local/cap
cd /usr/local/cap
capify .
(不思議なおまじないです)
cap -T
(capで実行できる命令が一覧で表示されます)
emacs config/deploy.rb

set :application, "stu"                                                               
set :repository,  "git://github.com/kakakikikeke/shorten_the_URL.git"                 
set :scm, :git                                                                 
                                                                                      
role :web, "yoshi3"                                                                   
role :app, "yoshi3"                                                                   
role :db,  "yoshi3", :primary => true                                                 
role :db,  "yoshi3"                                                                   
                                                                                      
# if you want to clean up old releases on each deploy uncomment this:                 
# after "deploy:restart", "deploy:cleanup"                                            
                                                                                      
# if you're still using the script/reaper helper you will need                        
# these http://github.com/rails/irs_process_scripts                                   
                                                                                      
# If you are using Passenger mod_rails uncomment this:                                
# namespace :deploy do                                                                
#   task :start do ; end                                                              
#   task :stop do ; end                                                               
#   task :restart, :roles => :app, :except => { :no_release => true } do              
#     run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}"          
#   end                                                                               
# end

http://d.hatena.ne.jp/officel/20120228/p1
でCapifileをちょっと設定変更
cap deploy:setup
で以下が作成された

[root@yoshi3 u]# cd /u
[root@yoshi3 u]# ls -lR
.:
合計 4
drwxr-xr-x 3 root root 4096  6月 22 21:29 apps

./apps:
合計 4
drwxrwxr-x 4 root root 4096  6月 22 21:29 stu

./apps/stu:
合計 8
drwxrwxr-x 2 root root 4096  6月 22 21:29 releases
drwxrwxr-x 5 root root 4096  6月 22 21:29 shared

./apps/stu/shared:
合計 12
drwxrwxr-x 2 root root 4096  6月 22 21:29 log
drwxrwxr-x 2 root root 4096  6月 22 21:29 pids
drwxrwxr-x 2 root root 4096  6月 22 21:29 system

cap deploy:check
ちゃんとdeploy:setupが実行されたかをチェックします

と基本的なコマンドは以上かと思います
あとはその他のコマンドについて何ができるのかメモっておきます

cap deploy:cold
gitからソースコードをデプロイしてくれます
Rackfileがないプロジェクトなので警告が表示されますが、デプロイはされました

cap deploy:web:disable
/u/apps/stu/shared/system/maintenance.html
を作ってくれます
このパスをApacheとかのメンテ画面に設定しておくとこれを実行するだけでメンテ画面になる

cap deploy:web:enable
/u/apps/stu/shared/system/maintenance.html
を削除してくれます。メンテ画面解除ができます

cap deploy:cleanup
/u/apps/stu/releases/配下の日付フォルダの古い順から5件削除してくれるみたい

cap deploy:create_symlink
/u/apps/stu/currentを
/u/apps/stu/releases/配下で一番新しいフォルダに切り替えてくれます

cap deploy:migrate
current配下に対してrakeを実行します(ビルド実行みたいな感じか)
ローカルビルド的な

cap deploy:migrations
途中で失敗
gitに対して何かしようとしてる感じからおそらくリモートコミットかなーと
鍵とかの設定ができていればcapからgitコミットもできそう

かなり不確定でかつ途中ですが、まぁ参考程度にw
やっぱりいちばんイイのは自分で.rbファイルのレシピを作ることですかね
あとは「deploy:cold」の中でいろいろと実行しているのでとりあえずdeploy:coldができれば問題ないですね
deploy:coldの中身
------------------------
cap deploy:update_code
cap deploy:finalize_update
cap deploy:create_symlink
------------------------
Jenkinsからコマンドキックするときはdeploy:coldではなくて上記3つのコマンドを並べたほうがよさそうですね

っていうかなんでRubyは「レシピ」って呼び方をするのだろうか?


P.S 20130513
■Tips
  • deploy.rb内に「:user」「:password」を設定するとcapコマンド実行時にパスワードを聞かれなくなる
  • capコマンドを実行するとまずCapifileが読まれ、その中でdeploy.rbをloadしているため「:user」「:password」の設定はcap shellなどを実行時にも読み込まれる
  • sshが秘密鍵認証の場合は以下2つを指定するとできるようになる
  • ssh_options[:keys] = %w(/path/to/private_key)
    ssh_options[:passphrase] = "private_key_password" 
■サンプルレシピ
以下をconfig/deploy.rbに記載する
namespace :sample do
  desc <<-DESC
    This is a sample capistrano recipe.
  DESC
  task :hostname, :roles => :app do
    run "hostname"
  end
end
:appにrolesが設定してあれば
cap sample:hostname でrolesに設定したサーバのホスト名が表示される
cap -T にも表示されるようになる
desc の宣言がない場合は cap -vT をしないとタスク一覧には表示されない

2012年6月25日月曜日

【Jenkins】Persona Pluginをインストールして設定する方法

Persona PluginはJenkinsの背景画像やビルド結果のアイコンを簡単に変更することができるプラグインです。
設定はXMLファイルで行います。
公式サイトです。https://wiki.jenkins-ci.org/display/JENKINS/Persona+Plugin

1.Persona Pluginのインストール
Jenkinsの管理→プラグインの管理→利用可能
で「Persona」で検索し「Person Plugin」を選択しダウンロードして再起動後にインストールを押下

2.設定(必要なフォルダ、ファイルの作成)
JENKINS_HOMEはTomcatのデプロイでインストールすると「~/.jenkins/」になります
JENKINS_HOMEが確認できたら以下のコマンド参考に必要なフォルダ、ファイルを作成していきます

・Persona Pluginの設定
cd ~/.jenkins
mkdir persona
cd persona/
mkdir yoshi3 ← Persona用のフォルダです、この階層に別のフォルダを作成すれば他の設定使えるようになります
cd yoshi3/
touch persona.xml
emacs persona.xml
※persona.xmlの内容はとりあえずデフォルトのものを使いましょう、以下を貼り付けてください
<persona displayname="Daniel J. Bernstein" id="djb">
  <quote>Just because it's automatic doesn't mean it works.</quote>
  <quote>Be careful what you wish for you just might get it.</quote>
  <quote>I do engineering, not religion.</quote>
  <quote type="success">This is only for stable builds.</quote>
  <quote type="failure">This is only for unstable builds.</quote>
  <quote type="other">This is only for failed builds.</quote>  ...
</persona>

画像を準備します
画像は.jpg/.png/.gifが可能でです。
ワタシはyoshi3フォルダ配下に「success.png」「failure.png」「other.png」を用意しました

以下が設定結果となります。
[root@yoshi3 yoshi3]# pwd
/root/.jenkins/persona/yoshi3
[root@yoshi3 yoshi3]# ls -ltr
合計 20
-rwxr--r-- 1 root root 1465 6月 22 00:52 success.png
-rwxr--r-- 1 root root 1373 6月 22 00:53 failure.png
-rwxr--r-- 1 root root 1372 6月 22 00:53 other.png
-rwxr--r-- 1 root root 1431 6月 22 01:00 icon.png
-rwxrwxrwx 1 root root 374 6月 22 01:13 persona.xml

・Jenkinsの設定
Personaを適用したいジョブに移動して左にあるメニューから「設定」を選択します
一番下「ビルド後の処理」で「ビルド後の処理の追加」を押下し「Associate Persona」を選択します
すると「Persona」と「Location」という属性の値を設定する入力欄が現れるので先程作成したPersonaの「yoshi3」を選択し、Locationには「Bottom-Right」を選択しましょう
Locationはビルド結果画面で実際に設定した画像を表示する位置になります。お好みに合わせて変更してみてください

※Jenkins側の設定は以下で説明するリロードリクエストを一回行なってからでないと選択項目に作成したPersona情報が表示されないかもしれません

3.確認
http://yoshi3:8080/jenkins/reload-persona/
でpersona.xmlを読み込んで設定は反映します
対象のジョブで一度ビルドを実行しましょう
ビルド結果を見ると設定した画像と文章が反映されていると思います

以上で完了です
persona.xmlを変更した場合は再度reloadのURLをリクエストしましょう
その後のビルドから変更が反映されるようになります

2012年6月22日金曜日

CentOSでJenkinsをインストール【Java、Tomcat、antからgit連携まで】

  1. Javaのインストール
  2. Tomcatのインストール
  3. antのインストール
  4. Jenkinsのインストールと基本設定
  5. ジョブの作成とGit連携設定(Git連携設定)
  6. GitHub側設定
※1, 2. 3のインストールが済んでいる方は3から見ていただければと思います。

1.Javaのインストール

rpm -ivh --prefix=/usr/local/java/ jdk-7u5-linux-x64.rpm
cd /usr/bin/
ln -s /usr/local/java/jdk1.7.0_05/bin/java java
export JAVA_HOME=/usr/local/java/jdk1.7.0_05/
java -version

2.Tomcatのインストール

wget http://ftp.jaist.ac.jp/pub/apache/tomcat/tomcat-7/v7.0.27/bin/apache-tomcat-7.0.27.tar.gz
tar xvf apache-tomcat-7.0.27.tar.gz
mv apache-tomcat-7.0.27 tomcat
mv tomcat /usr/local/
cd /usr/bin/
ln -s /usr/local/tomcat/bin/startup.sh tomstart
ln -s /usr/local/tomcat/bin/shutdown.sh tomstop
tomstart
tomstop

※tomcatの起動スクリプトも作成しましたので起動スクリプトも登録したい方はこちら

3.antのインストール

http://ftp.yz.yamagata-u.ac.jp/pub/network/apache//ant/binaries/apache-ant-1.8.4-bin.tar.gz
mv apache-ant-1.8.4 ant
cd /usr/bin/
ln -s /usr/local/ant/bin/ant ant
export ANT_HOME=/usr/local/ant/

※Tomcatのコンテナとしてデプロイする方法を紹介します
※コンテナとしてデプロイする場合にはここの設定も見ておくといいかもしれません
4.Jenkinsのインストール

wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war
ls -ltr ~/.jenkins
※ここが$JENKINS_HOKEに設定されている、設定ファイルもここをいじるように
mv jenkins.war /usr/local/tomcat/webapps/
・セキュリティ設定(ユーザ設定)

Jenkinsの管理→システム設定→セキュリティの有効化ON→アクセス制御→ユーザ情報→Unix ユーザー/グループ データベース
同じく権限管理→ログイン済みユーザーに許可
で適用を押下
※このときユーザ情報で何も選択しないで適用してしまうと設定ファイルを変更する必要が出てくるので注意しましょう詳しくはこちら
※セキュリティ設定をするとすぐにログイン画面に遷移するので、ログインしてください
ログインは設定したとおり「Linuxでログインするユーザ名とパスワードです」
・Java、ant設定


Jenkinsの管理、システム設定、JDK and Antの設定をします
自動インストールのチェックをはずしてそれぞれ先程設定したJAVA_HOME、ANT_HOMEを記載します

5.ジョブの作成とGit連携設定(Git連携設定)

・GitHub Pluginをインストール
Jenkinsの管理→プラグインの管理→利用可能で「git」で検索して「GitHub plugin」をインストールします
インストール後Jenkins(Tomcat)の再起動が走ります
・ジョブ作成
フリースタイル・プロジェクトのビルドを選択
ソースコード管理システムでGitを選択
ビルド・トリガでBuild when a change is pushed to GitHubを選択
ビルドを以下のように設定


6.GitHub側設定

ログイン後jenkinsと連携するリボジトリに移動
Adminをクリック(スパナのマークが書いてあるボタン)
Service Hooksをクリック
WebHook URLsを選択して
URLに以下を記載
「http://username:password@ipaddress:8080/jenkins/job/shorten_the_URLbuild?delay=0sec」
Test Hookを押下
Jenkinsに戻ってと対象のジョブでビルドが走っていることを確認する

※usernameとpasswordはJenkinsにログインする際のユーザ名とパスワードを設定します
(4.で設定した通りJenkinsのログイン管理はLinuxのユーザで設定しているのでLinuxsに登録されているユーザ名とパスワードです)
※ホスト名解決ができない場合はJenkinsがインストールされているサーバのIPADDRESSを入力しましょう
※これでダメな場合はGitHubからの8080アクセスがiptablesなどのFWで拒否されている可能性があります
GitHubの外向けのIPアドレスは(おそらく)50.57.128.197な気がしていますが、普通に考えたらグローバルの外向けIPアドレスは複数あると思いますので、できるならCIDRで0.0.0.0/0を設定しましょう(セキュリティ上はよくないですが・・・)

これでGitHubの対象のリポジトリににpushされるとJenkis側にリクエストが来て自動でJenkisがビルドを開始します

2012年6月21日木曜日

【Tomcat7】tomcatの起動ファイルを作成してみた

cd /etc/init.d/
touch tomcat
chmod 755 tomcat
chkconfig --add tomcat
chkconfig --list | grep tomcat
---
tomcat 0:off 1:off 2:on 3:on 4:on 5:on 6:off
---
vi tomcat
で以下を貼り付けてください
#!/bin/sh
#
# Startup script for Apache Tomcat 7.0.27.0
#
# chkconfig: 2345 85 15
# description: Apache Tomcat Java Servlets and JSP server
# processname: tomcat
# pidfile: /var/run/tomcat.pid
# config: /usr/local/tomcat/conf/server.xml

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

CATALINA_HOME=/usr/local/tomcat
TOMCAT_SCRIPT=$CATALINA_HOME/bin/catalina.sh
TOMCAT_USER=root

if [ ! -f $TOMCAT_SCRIPT ]; then
    exit 0
fi

# See how we were called.
case "$1" in
    start)
        # Start daemons.
        if [ -f /var/lock/subsys/tomcat ] ; then
            echo "Tomcat already started!"
            exit 1
        fi
        echo -n "Starting Tomcat: "
        su -s /bin/bash - $TOMCAT_USER -c "$TOMCAT_SCRIPT start"
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch /var/lock/subsys/tomcat
        ;;
    stop)
        # Stop daemons.
        if [ ! -f /var/lock/subsys/tomcat ] ; then
            echo "Tomcat already stopped!"
            exit 1
        fi
        echo -n "Shutting down Tomcat: "
        $TOMCAT_SCRIPT stop
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/tomcat
        ;;
    status)
        status tomcat
        exit $?
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Usage: $TOMCAT_PROG {start|stop|status|restart}"
        exit 1
esac

exit 0

太字の箇所の設定は自身の設定に合わせてください
これでserviceコマンドからtomcatを起動することができます

2012年6月20日水曜日

Jenkinsでログインできなくなってしまった場合には

http://d.hatena.ne.jp/sumiosmith/20120410/1334034032

ここに記載のあるとおり設定ファイルを変更してJenkinsを再起動します
するとログインフォームの画面が現れずJenkisの設定ができるので、
Jenkinsの管理→システム設定→ユーザー情報
を設定しましょう。このとき必ずどれかにチェックをつけてください
そうしないとユーザ情報がない状態でログインフォームが表示されてしまうので、何を入れてもログインできない状態になってしまいますw

【Firefoxアドオン】shorten-the-url リリースノート+メモ

■概要
アドオン名
shorten the URL
概要:
選択した部分、アンカーテキストを右クリックで「shorten the URL」とするとURLを短くしてくれます
公開サイト
ソースコード

■使い方

  1. https://addons.mozilla.org/ja/firefox/addon/shorten-the-url/ にアクセスしてプラグインをインストールします
  2. Firefoxのメニューバーから ツール -> アドオン でアドオンマネージャを開きます
  3. Shorten the URL の「設定」をクリックし Config ダイアログを表示します
  4. bitlyで取得したAPIをコールするためのユーザ名とキー情報を取得します
  5. 取得したキー情報を Config ダイアログにある「Bitly API Username」と「Bitly API Key」にそれぞれ入力します
  6. APIをコールするためのユーザ名とキー情報はbitlyにログインし Settings -> Advanced -> Legacy API Key に記載されています

  • 短縮したい URL を選択し右クリックから「shorten the URL」を選択してください
  • アンカーテキストになっている部分を右クリックしても短縮することができます
  • 選択もせず、アンカーテキストでもない部分で URL を短縮すると現在アクセスしているページの短縮 URL を取得することができます

■更新履歴
コミットログを御覧ください
git commit log

■Tips
あと、(ここに記載するのも何ですが)Firefoxのアドオンをリリースする際に気になったことをメモしておきます
随時ここに記載していければと・・・技術的なことはソースを見ていただければと思います

・Review Process
Full Review・・・完全レビュー。まぁ時間かかるけどちゃんと中の人がレビューしてくれるモード
Preliminary Review・・・予備的レビュー。時間はかからないけど、適当なレビューモード(自分はこっち)
⇒どちらでもいいのでレビューを受けないとアドオンのインストールページで「Add to Firefox」が黄色の警告みたいなしましまのボタンになってます
⇒予備レビューのまま放置しておくといつの間にかアドオンの公開用リンクがなくなっている可能性がありますので早めにフルレビューを通過するようにしましょう

・アドオンインストール時のアイコン
http://kakakikikeke.blogspot.com/2012/06/f.html
こっちを参照してください

・ADD-ONSとサポートのアカウントは異なるためサポートのフォーラム等で発言する場合には別途アカウントが必要

・公開ページがいきなり消えた
公開ページというリンクをクリックしてみると「We're sorry, but we can't find what you're looking for.」
おっ!と思いいろいろ調べてみると
ADD-ONSにログインし対象のアドオンの管理ページに行く「Manage Status & Versions」という左メニューをクリックしてアドオンのバージョン管理履歴に行く
最新版のアドオンにまだ警告が残っているのが原因かと思い最新バージョンのリンクをクリックして「Approval Status」を見てみると
shorten the URL Version 0.3.1 rejected.
Your add-on makes remote, synchronous XMLHttpRequests which have the ability to lock-up the browser UI and are not allowed in public add-ons. Please use asynchronous requests instead.
なんと・・・orz
要するに警告が一つでも出ていると公開できないですよってことですね。知りませんでした。
みなさんもアップロードしたxpiファイルに警告が出た場合には必ず修正するようにして修正後にReviewをお願いするようにしましょう
警告もエラーも何も出なくなるようになれば普通にページも復活します

2012年6月19日火曜日

rpmパッケージでインストール先を指定してインストールする方法

rpm -ivh --prefix=/usr/local/java jre-7u5-linux-i586.rpm

上記はjavaをrpmでインストールする際のコマンド ですが、
「--prefix」でインストール先を指定できます

rpmでインストールした場合はインストール先がわからなくなる場合が多いのでprefixを指定してインストールすると管理も楽になると思います

お試しあれ

2012年6月18日月曜日

XULでURLの絶対パスを取得する方法

XULでは以下のようにしてURLの絶対パスを取得することができないようです。

http://d.hatena.ne.jp/brazil/20070103/1167788352

またIOService.newURIというFirefoxのプラグイン用のクラスを使ってみましたがうまくいきませんでした

http://d.hatena.ne.jp/brazil/20070708/1183877867

じゃあどうしたかと言うと

function getURLOnHref() {
 var urlOnHref = "";
 var tag = document.popupNode.tagName;
 if (tag.toString() == "A") {
//  urlOnHref = document.popupNode.getAttribute("href");
  urlOnHref = document.popupNode.href;
 } else {
  urlOnHref = document.popupNode.innerHTML;
 }
 return urlOnHref;
};

何をしているかというと
右クリックを開いたときのカーソルの下にある属性情報を取得してきて
それがAタグだったらhrefを取得するという命令なのですが、ここで

getAttribute("href")

ではなく

href

で直接プロパティ値を指定するとブラウザが良い感じで解釈して絶対パスで返してくれるそうです
今回の場合はpopupNodeならばうまくhrefが取得できましたが、冒頭のURLに記載があるように
XULでは、firstNodeなどのオブジェクトからはhrefがうまく取得できないようです
(確かnullになってしまったような・・・)

ただ、popupNodeも使わない状況でただ文字列で相対パスがある状態で
そこから絶対パスを出す方法はちょっとわからなかったです。。。
完全にpopupNodeに助けられました。すいません。


2012年6月17日日曜日

【ソフトウェアのインストール】Firefoxのアドオンインストール時のアイコン設定方法【作者を信頼しているアドオン以外はインストールしないでください】

ずーっとinstall.rdfを編集したり、XULファイルの設定変更をしたりするのかなー
と思っていたけど、ここは全然違うところで設定するみたいです・・・

https://addons.mozilla.org/ja/developers/addon/submit/1

普通にアドオンを公式に登録するときにアイコンを設定するところがあるので、
そこでアイコンをアップロードするとインストール時のアイコンもちゃんと表示されるようです

こんなところで設定するとは・・・はまったわw

【Linux】rmとかmvしてもdfでディスクの容量が減らないときの対処方法

たとえば以下のコマンドでファイルを削除したとしよう

rm -f messages

でこのあとに「df -h」コマンドでディスクの容量を見てもまったく変わらない・・・
なんてことがLinux上ではありえます。

結論から言ってしまうと

messagesファイルをまだ誰かが開いている状態だから

という結論に至ります
ではこれをどやって解決するかというと

lsof | grep messages

でmessagesが誰がまだ開いているのかを突き止めます(rootで実行しましょう)
自分場合はこんな風に表示されました

---
syslog 30534 root 1w REG 8,6 1715205 126059 /var/log/messages
---

syslogがmessagesをつかんでいる状態だったためにdfを打っても容量が減らなかったというわけです
「service syslog restart」をしてあげたところ無事ディスクの容量が減っていました
当たり前といえばあたり前ですね・・・
今後は忘れないようにしたいです

2012年6月15日金曜日

xyzzyでWindowsのクリップボードにコピーするためのセレクションモードに切り替える方法

ちょっとわかりずらい表現で申し訳ないのですが、
普通にxyzzyで
「Ctrl+Space」でポイントをセットして「Ctrl+w」でカットした場合には
xyzzy内では「Ctrl+y」で簡単に貼り付けできるが、
他のエディタ(メモ帳やTerapad)に貼り付けすることができない
これはクリップボードには「Ctrl+w」でカットした情報がコピーされてないからである

xyzzyでクリップボードにコピーするためには
マウスなどを使って範囲を選択して右クリックでコピーと選択する必要がある
これが非常にめんどくさい
なのでこの動作をすべてキーボードでできるようにする方法をご紹介

「F6」
でセレクションモード(マウスで選択する状態)になりあとは「Ctrl+p」とか「Ctrl+n」で範囲を広げていきクリップボードに保存するさいには
「Ctrl+Insert」
でクリップボードに保存する

一応これでキーボード操作のみでクリップボード保存ができるようにはなるのだが
如何せん結構キーがめんどくさい
ので自分は以下の設定をして簡単に押せるようにしました

---
・Insertキーの場所を変更する(自分は右下のほうにある「カタカナ/ひらがな」というキーをInsertにしてます)
・(global-set-key #\C-\' 'start-selection-as-line)を.xyzzyファイルに記載することで「F6」ではなく「Ctrl+'」でセレクションモードに変更できるようにする
---

まぁキーバインド人それぞれなので、この辺はお好みに合わせて変更するといいと思います
特に自分は104キーボードなので、シングルクオートにしましたが109だとシングルクオートは結構めんどいですからねw

2012年6月13日水曜日

【VPN】Windows7でPPTP接続【WiMAX Uload-8000】

以下3つの設定だけでできました
  1. Uload-8000でVPNパススルー設定
  2. Windows7でPPTP設定
  3. Remote Access Connection Managerを許可する


リンクと画像だけですが、一応メモ

2012年6月12日火曜日

ERROR 1033 (HY000): Incorrect information in file

このあとに: './db_name/table_name.frm'というファイルの指定あります

こんなエラーが出た場合は以下を削除(or 移動)してみましょう
ib_logfile1
ib_logfile2

mysqlのデータを保存する先にあるはずです
デフォルトの設定ならば「/var/lib/mysql/l」配下にあると思います

もしない場合は「/etc/my.cnf」というファイルの「datadir」という欄を見てみましょう
ここで指定されているパス以下にあるはずです


このデータはSQLのトランザクションファイルです
つまりこれがあるということはまだ何かのトランザクションが完了してないということになる
トランザクションが詰まってしまっているために処理中のテーブルに対してはSELECTができなかった

2012年6月10日日曜日

【Javaサンプル】bitlyのAPIを使ってみた

bitlyjというJava用のSDKがあったのでそれを使って簡単にURLを短縮できるところまでやってみました。
以下サンプルのソースコードです。
package com.bitly.sample;

import com.rosaloves.bitlyj.ShortenedUrl;
import com.rosaloves.bitlyj.Url;
import com.rosaloves.bitlyj.Bitly;
import com.rosaloves.bitlyj.Bitly.Provider;
import com.rosaloves.bitlyj.BitlyMethod;

public class BitlySample {

 public static void main(String[] args) {
  Provider p = Bitly.as("o_29agaehgs3", "R_f5d38d6538575b0b3e3c32633d05b89b");
  BitlyMethod surl = Bitly.shorten("http://kakakikikeke.blogspot.com/");
  Url url =p.call(surl);
  System.out.println(url.getShortUrl());
 }

}

Javadoc bitly2.0.0
bitlyj用のJavaDocです。
かなり内容は少ないです。まぁ確かにURL短縮するくらいですからねw
詳細に見ていませんが、bundleのAPIとかおあるんですかねー。

いろいろとやってく中でこいつが一番曲者でした・・・
https://bitly.com/a/your_api_key
当たり前といえば当たり前ですが、APIのOAuth認証用のアカウントとシークレットキーが用意されています
シークレットキーはログイン後に右上のアカウント名のクリック→SETTINGS→ADVANCED→一番した「Legacy API Key」から普通に見れるのですが
API用のアカウント名はここでは見れないようです。

bitlyAPIのデベロッパーズ用のページに行くとちゃんとリンクがあるようです。
まぁ自分は気づかなかったわけですがw

とりあえずはこでJavaからURLの短縮ができるようになります。
お試しあれ

2012年6月8日金曜日

【TwitterException】statusCode=403, retryAfter=-1, rateLimitStatus=null, featureSpecificRateLimitStatus=null, version=2.2.5}

なんてエラーに襲われた時は以下の原因が考えられます。
  1. 全くおんなじつぶやきを行おうとしている
  2. 認証キーがサスペンドになっている
  3. Twtter4jが古い

1. に関しては前のつぶやきを削除するか明日またつぶやきましょう
2. に関して再度TwitterDevから認証キーを作成しましょう
3. に関しては2系じゃない方は2系への乗り換えましょう
Twitter自体APIの変更が結構あるので、SDKも入れ替える必要があります
1系だとBasic認証の可能性もあるので、1系の場合には速攻で2系に乗り換えましょう
ただし、公式サイトにもありますが、1系から2系への乗り換えには多少ソースコードの改修が入ります

他にも原因はありえそうです
「たまたま」なんてこともありえそう・・・!?

2012年6月6日水曜日

MySQLでの正規表現の使い方【サンプル】

SELECT *
FROM `TBL_NAME`
WHERE `USER_DID`
REGEXP '[a-zA-Z]{5}[0-9]{5}$'

例えばこんな感じでやると
「ABCDE12345」
とかが該当します
アルファベット5文字と数字5文字のUSER_IDを取得するという命令になります
REGEXPの前にNOTをつけると否定となります「NOT REGEXP」

MySQL用で少し正規表現が違う場合もあるので、詳しくは公式サイトがいいと思います
http://dev.mysql.com/doc/refman/5.1/ja/regexp.html
まぁあとはガンガンテストする感じですかねw

2012年6月4日月曜日

【VIJava】IPアドレスからホスト名を取得する方法

public ESXTools(String url, String username, String password) {
  try {
    si = new ServiceInstance(new URL(url), username, password, true);
  } catch (RuntimeFault e) {
    e.printStackTrace();
  } catch (RemoteException e) {
    e.printStackTrace();
  } catch (MalformedURLException e) {
    e.printStackTrace();
  }
}

public void showEsx (String ipAddress) {
  try {
    ManagedEntity me = si.getSearchIndex().findByIp(null, ipAddress, true);
    if (me instanceof VirtualMachine) {
      VirtualMachineRuntimeInfo vmri = ((VirtualMachine) me).getSummary().getRuntime();
      System.out.println(((VirtualMachine) me).getName() + "," + new HostSystem(si.getServerConnection(), vmri.getHost()).getName() + "," + ipAddress);
    }
  } catch (RuntimeFault e) {
    e.printStackTrace();
  } catch (RemoteException e) {
    e.printStackTrace();
  }
}

インスタンスを作成する際のurl, username, passwordはそれぞれ「vCenterのIPアドレス」「vCenterに登録してあるユーザ名、パスワード」です
findByIpからVMを検索してそのVMが乗っているホスト名を取得します
ポイントはHostSystemのインスタンスを作成する点
VMの情報からはどうやっても参照できないようです
(gitで公開しようとしましたが、やめておきましたw)

2012年6月2日土曜日

lsofを監視するツール

#!/bin/sh
if [ $# -ne 1 ]; then
  echo "Please input hostname"
  exit 1;
fi

echo "lsof agent start !"
JPS=`jps | grep Bootstrap | awk '{print $1}'`
PID_FILE="lsof_agent_$1.pid"
if [ $JPS ]; then
  touch $PID_FILE
  while :
  do
    if [ -f $PID_FILE ]; then
      LOG_FILE=`date "+%Y%m%d"`_lsof_agent_$1.log
      LSOF=`lsof | grep $JPS | wc -l`;
      LSOF_ALL=`lsof | wc -l`;
      echo `date "+%Y%m%d %H%M%S"` $LSOF $LSOF_ALL >> $LOG_FILE;
      sleep 2;
    else
      exit 1;
    fi
  done
else
  echo "not found JPS...";
fi

※シェルスクリプトの名前は「lsof_agent.sh」としてます

■概要
開いているすべてのファイル数とJVM上で動作しているtomcatが開いているファイル数を監視し続けます
「日付_lsof_agent_hostname.log」というファイルにlsofの結果を出力し続けます
ログファイルは日付をまたぐと自動でローテートしてくれます
実行すると「lsof_agent_hostname.pid」というファイルができるのて停止する場合にはこのファイルを削除します

■使い方
./lsof_agent.sh hostname &

lsofの結果をgrepしているだけではあるので必要に応じてgrepする項目を変更していただければと思います
ちなみにlsofは基本的にroot権限がないと実行できないので、rootで実行してください