2014年6月29日日曜日

戦国無双3【ぷち】攻略情報

■ストーリ攻略情報
http://www31.atwiki.jp/sengoku3/

■その他攻略情報
上記の攻略情報で記載のないものなど

・レベル上げ
桶狭間の戦い(織田軍)で道中に現れる武将をすべて撃破します
道中以外に現れる武将は倒さなくて大丈夫です、それらを倒していると10分以内で獲得できるボーナスが取得できなくなってしまいます
難易度は普通でOKです
武器に立志3をつけると更に良いです、だいたい一周で約10000の経験値を取得することができます
また、本多忠勝を倒すと撃破効果付きの武器を手に入れることができ同時に武器集めもすることができます
http://www31.atwiki.jp/sengoku3/pages/95.html#id_887bf7d8

・素材赤(大)入手方法
無双演武、長宗我部元親の姉川決戦で原長頼を速攻で撃破する
難易度は地獄で実施する、撃破したら即効で倒されてOK
1回2、3分で周回可能

・素材黄(大)入手方法
模擬演舞、大阪の陣(徳川軍)で携帯道具未使用で長宗我部盛親を速攻で撃破する
難易度は地獄で実施する、撃破したら即効で倒されてOK
ポイントは砲台を使って壁を破壊するところをいかに早く終わらせるか(壁破壊ミッションをクリアしないと南西砦で開門せず長宗我部盛親に会えない)
長宗我部盛親に向かう途中で武器の箱があるので取得しておくといい
1回5、6分で周回可能

・武器集め
難易度はできれば地獄でやる、難しいでもOK
  1. 本能寺の変(織田軍)で一番はじめのミッションで討伐の必要がある2人の武将を倒し開門する
  2. 撃破効果で武器を取得することができる詰所頭のところまでいく
  3. 一旦、詰所頭の前で途中保存する
  4. 詰所頭を倒し撃破効果付きの武器をGETする
  5. 外に出て適当に倒される
  6. 結果を見て目的の武器が取得できたか確認する
  7. 武器が気に入らなかったらWiiリモコンのホームボタンからリセットして再度、詰所頭を倒す、目的の武器が出るまで繰り返す
※このとき結果の画面でリセットしないで最後まで行ってしまうと途中保存が上書きされてしまうので必ず武器の取得画面でリセットすること

・無双演武の進め方(おすすめ方法)
「レベル上げ」を実施してレベル1から30くらいまで上げる(だいたい慣れてくると1人1時間くらいで30になる)
武器がなかなかいいのが手に入らなければ「武器集め」をして武器を集める(20レベルくらいあれば難易度「難しい」なら詰所頭を倒すことができると思う)

パズドラプレイメモ

https://docs.google.com/spreadsheets/d/10Vt5ATZJHEZQBeR6BQSe8NRw1z2HhZu2nFIlyj5TuB0/edit?usp=sharing

モンストプレイメモ

運極作成順

  1. クイーンバタフライRD ( 2015/10/12, ランク164, ログイン268 )
  2. 魔王サタンの娘 リリム ( 2015/11/6, ランク171, ログイン294 )
  3. 夢幻方士 左慈 ( 2015/11/7, ランク171, ログイン295 )
  4. 宇宙生物 クトゥルフ ( 2015/11/7, ランク171, ログイン295 )
  5. 暗黒祭龍 ニーズヘッグ ( 2015/11/11, ランク172, ログイン298 )
  6. エール・ソレイユ ( 2015/11/25, ランク180, ログイン 312 )
  7. 新ラー x 第6使徒
  8. 聖鐘のサンタ ノエル ( 2015/12/23, ランク197, ログイン 340 )
  9. 御祭将軍 徳川慶喜 ( 2015/12/26, ランク198, ログイン 343 )
  10. 冥猫神 バステト ( 2015/12/31, ランク200, ログイン 348 )
  11. 荒御霊 滝夜叉姫 ( 2016/01/16, ランク 211, ログイン 364 )
  12. ジャック・オーランタン
  13. デスアーク RD ( 2016/02/06, ランク 220, ログイン 384 )
  14. 紀伊
  15. 呪詛神 滝夜叉姫 ( 2016/02/22, ランク 228, ログイン 402 )
  16. リビング・ゴースト
  17. リベンジャーナッシュ ( 2016/02/27, ランク 230, ログイン 406 )
  18. 精霊大王 ドラゾンビ
  19. レルネーの主 ヒュドラ
  20. 白馬の騎士 のび太
  21. 水瓶座の黄金聖闘士 カミュ
  22. 幻棲鬼 ファルファレルロ
  23. パンプキン・ジャック
  24. 超翠竜 エメラルドドラゴン
  25. 妖怪対象 ぬらりひょんX
  26. エール・ソレイユX
  27. 灼夏の巨人 スルト
  28. ティーガーI X
  29. 豊穣の女神 バステト
  30. モンストアクア
  31. 一番隊組長 沖田総司
  32. 銀幕の女帝 オリガ
  33. 万能の天才 ダヴィンチ

ガチャ履歴

総計と★5 の履歴
新規で取得したものから上位に記載
総計・・・241
★5 ・・・33

  • ★5 スピカ
  • ★5 関羽
  • ★5 バッハ x 2
  • ★5 西郷隆盛
  • ★5 アグナムートX
  • ★5 ガリバー
  • ★5 猪八戒
  • ★5 スサノオ
  • ★5 ハーレー x 2
  • ★5 ストライク x 2
  • ★5 オセロー
  • ★5 アラジン
  • ★5 ポルトス
  • ★5 ティアラ (★5限定ガチャ)
  • ★5 ラー
  • ★5 マッドハッター
  • ★5 トニー緑川
  • ★5 劉備
  • ★5 出雲 x 2
  • ★5 ゼウス
  • ★5 ヘラクレス x 2
  • ★5 ベルゼブブ
  • ★5 ガブリエル
  • ★5 クロノス
  • ★5 ウンディーネ
  • ★5 鈴蘭
  • ★5 アメノウズメ
  • ★5 シンドバッド
  • ★5 アザゼル
  • ★5 ローレライ
  • ★5 武田信玄
  • ★5 アメノウズメ
  • ★5 武蔵坊弁慶

夢玉ガチャ履歴

  • 第 2 回
    • 1510回で3体運極
    • リリム・・・極 + 11
    • 左慈・・・極
    • クトゥルフ・・・極 + 10
  • 第 3 回
    • 850回で運極
    • ファルファレルロ

2014年6月28日土曜日

rabbiqmqでMQTTプロトコルを試してみた

■環境
CentOS release 5.10 (Final)
RabbitMQ 3.0.4
※RabbitMQインストール方法
Java 1.7.0_05
Maven 3.1.0
※MQTT用のJavaのクライアントライブラリを使って接続テストをするために必要です

■MQTTの設定
rabbitmq-plugins enable rabbitmq_mqtt
rabbitmq-plugins list | grep rabbitmq_mqtt
[E] rabbitmq_mqtt                     3.0.4

/etc/init.d/rabbitmq-server start

Webの管理コンソールのOverviewを見てmqttプロトコルが有効になっていることを確認します

■MQTTを試してみる
Javaのクライアントライブラリがありましたのでそれを使ってみます

mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DgroupId=com.sample.rabbitmq.mqtt -DartifactId=mqtt_test

emacs pom.xml

dependencies タグ内に以下を記載してください
<dependency>
  <groupId>org.fusesource.mqtt-client</groupId>
  <artifactId>mqtt-client</artifactId>
  <version>1.10</version>
  <scope>compile</scope>
</dependency>

project タグ内に以下を記載してください
<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>exec-maven-plugin</artifactId>
      <version>1.2.1</version>
      <configuration>
        <mainClass>com.sample.rabbitmq.mqtt.App</mainClass>
      </configuration>
    </plugin>
  </plugins>
</build>

emacs src/main/java/com/sample/rabbitmq/mqtt/App.java
package com.sample.rabbitmq.mqtt;

import java.net.URISyntaxException;

import org.fusesource.mqtt.client.*;

public class App {

public static void main( String[] args ) throws URISyntaxException, Exception {
        String topic = "test/topic";

        MQTT mqtt = new MQTT();
        mqtt.setHost("localhost", 1883);
        BlockingConnection bc = mqtt.blockingConnection();
        bc.connect();
        // subscribe
        Topic[] topics = {
            new Topic(topic, QoS.AT_LEAST_ONCE)
        };
        byte[] qoses = bc.subscribe(topics);
        for (byte qos: qoses) {
            System.out.println(qos);
        }

        // send message
        bc.publish(topic, "payloadA".getBytes(), QoS.AT_LEAST_ONCE, false);
        bc.publish(topic, "payloadB".getBytes(), QoS.AT_LEAST_ONCE, false);

        // receive message
        Message message = bc.receive();
        System.out.println(message.getTopic());
        byte[] payload = message.getPayload();
        message.ack();
        System.out.println(new String(payload, "UTF-8"));

        message = bc.receive();
        System.out.println(message.getTopic());
        payload = message.getPayload();
        message.ack();
        System.out.println(new String(payload, "UTF-8"));

        bc.disconnect();
    }

}

mvn clean compile exec:java
1
test/topic
payloadA
test/topic
payloadB
(・・・ここで停止する・・・)

■動作説明
接続前に subscribe することで MQTT で使用する Exchange とそれにバインドする Routing Key を決定します


本ライブラリを使った RabbitMQ での MQTT の場合は Exchange を経由してとメッセージのやりとりをするようです
subscribe 時に指定している Topic 名は Exchange にバインドするRouting Keyとして使用されます(何でもOKです)
ただ、publish するときや receive するときはこのバイティングされた Routing Key を指定する必要があります

publish するときの第一引数には subscribe 時に指定した Routing Key を指定します
receive 時には subscribe で指定した Routing Key を自動で判断してメッセージの受信を行います

MQTT でのメッセージのやり取りがあった場合には RabbitMQ 側に一時的なキューが作成されます
disconnect するとこのキューは削除されなくなります
(connect するたびにキューが作成されるようです)


サンプルでは2回 publish して3回 receive しています
receive 時にキューにメッセージがない場合は次のメッセージが到着するまで待ち続けます
MQTT 用に一時的に作られたキューに対して管理コンソールなどから publish message するとそのメッセージを受信して処理が終了します

サンプルでは同期処理でメッセージのやり取りをやっています
FutureConnection という機能がありこれを使うと非同期でメッセージのやり取りを行うことができます

以上です
とりあえず RabbitMQ を使って MQTT を動作させることができました
実際に HTTP や AMQP との比較は行っていないのでどれだけ軽量なのかわかっていませんが
せっかく動いたので次は比較でもできればなと思います

■参考サイト

2014年6月27日金曜日

GithubのAPIをPHPから実行してみた

■環境
CentOS release 5.10 (Final)
PHP 5.3.3
composer 3251f9f1aa997479fff78905841e22beacfbe37b
php-github-api
guzzle 3.9.1
GitHub API v3

■インストール
・phpインストール
yum -y install php php-devel php-pear
php -m | grep curl
   でcurlモジュールがインストールされていることを確認します

・composerインストール
composerのインストール

emacs composer.json
{
    "require": {
        "knplabs/github-api": "*"
    },
    "minimum-stability": "dev"
}

composer install
Loading composer repositories with package information
Installing dependencies (including require-dev)
  - Installing symfony/event-dispatcher (dev-master 7a4f4b4)
    Cloning 7a4f4b42886f8c2e35acb1071f157a0b8eb1bd39

  - Installing guzzle/guzzle (v3.9.1)
    Downloading: 100%

  - Installing knplabs/github-api (dev-master a462c35)
    Cloning a462c357aa0503bd7fc94da889517de98c2c4ec0

symfony/event-dispatcher suggests installing symfony/dependency-injection ()
symfony/event-dispatcher suggests installing symfony/http-kernel ()
knplabs/github-api suggests installing knplabs/gaufrette (Needed for optional Gaufrette cache)
Writing lock file
Generating autoload files

ls -ltr vendor
合計 20
drwxr-xr-x 3 root root 4096  6月 27 09:34 symfony
drwxr-xr-x 3 root root 4096  6月 27 09:34 guzzle
drwxr-xr-x 3 root root 4096  6月 27 09:34 knplabs
drwxr-xr-x 2 root root 4096  6月 27 09:34 composer
-rw-r--r-- 1 root root  183  6月 27 09:34 autoload.php

■サンプルソースコード(指定したユーザのリポジトリ情報取得)
指定したユーザのリポジトリ情報一覧を取得します

emacs TestGithub.php
api('user')->repositories('kakakikikeke');
for ($i = 0; $i < count($repositories); $i++) {
  $repos = $repositories[$i];
  foreach ($repos as $key => $value) {
    if ($key === "name") {
      echo $key . " => " . $value . "\n";
    }
  }
}
?>

api('user') は固定です
コールするAPIの種類を指定します(他にも「issue」「pr」など指定できます)

repositories('kakakikikeke') にリポジトリを取得するユーザ名を指定します

サンプルではリポジトリの名前(name)だけを表示しています
連想配列として格納されているのでkeyを直接指定して取得してもOKです

■サンプルソースコード(README.mdの取得)
指定したユーザのリポジトリからREADMEの情報を取得します

api('repo')->readme('kakakikikeke', 'java-signature');
echo base64_decode($readme['content']);
?>

readmeメソッドの引数にユーザ名とリポジトリ名を指定します

contentはbase64エンコードされて取得されるのでクライアント上でデコードしてあげます

以上です
ソースコードも非常に読みやすく
endor/knplabs/github-api/lib/Github/Client.php
で呼び出すAPIを振り分けており、呼び出すAPIごとに
endor/knplabs/github-api/lib/Github/Api
配下に専用のclassとメソッドが定義されています
ドキュメントも用意されていますがソースが読みやすいので直接ソースを見てもいいかと思います
今回は紹介したPHPライブラリの他にもいろいろなサードパーティ製のライブラリがあるようなので興味のある方は他のライブラリも試してみるといいかもしれません

■参考サイト

2014年6月20日金曜日

いろんな言語の基本構文まとめ

以下の構文、使い方をいろいろな言語についてまとめています
(とりあえず自分が経験済みの言語をまとめています)
他にも気づいたら追加していこうと思います

  • 初級
    • 実行メインクラスの作成
    • 標準出力
    • 標準入力 (一部適用)
    • 引数 (一部適用)
    • 変数
    • 配列
    • 関数の作り方
    • 関数の使い方
    • 条件分岐(if)
    • 繰り返し(for)
    • ファイル制御
    • エラーハンドリング
    • 正規表現 (一部適用)
  • 中級
    • 外部ライブラリの使い方
    • クラスの作成の方法(オブジェクト指向があるなら)
    • 独自クラスの使い方(import)
    • パッケージの概念

言語一覧

2014年6月18日水曜日

MavenでWebアプリをモダンに開発

前回、maven+testngでモダンにテスト開発をしてみました
今回はmavenを使ってサーバサイドだけでWebアプリ開発ができないか頑張ってみました

■環境
CentOS release 5.10 (Final)
JDK 1.7.0_05
Maven 3.1.1
Tomcat 7.0.27
Servlet API 3.0.1

■プロジェクトの作成
mvn archetype:generate -DgroupId=com.sample.webapp -DartifactId=webapp-quick-start -DarchetypeArtifactId=maven-archetype-webapp

※versionとGroupIdの入力は特に指定しませんでした
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom >>>
[INFO]
[INFO] <<< maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom <<<
[INFO]
[INFO] --- maven-archetype-plugin:2.2:generate (default-cli) @ standalone-pom ---
[INFO] Generating project in Interactive mode
[INFO] Using property: groupId = com.sample.webapp
[INFO] Using property: artifactId = webapp-quick-start
Define value for property 'version':  1.0-SNAPSHOT: :
[INFO] Using property: package = com.sample.webapp
Confirm properties configuration:
groupId: com.sample.webapp
artifactId: webapp-quick-start
version: 1.0-SNAPSHOT
package: com.sample.webapp
 Y: :
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-webapp:1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.sample.webapp
[INFO] Parameter: packageName, Value: com.sample.webapp
[INFO] Parameter: package, Value: com.sample.webapp
[INFO] Parameter: artifactId, Value: webapp-quick-start
[INFO] Parameter: basedir, Value: /var/tmp/maven
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /var/tmp/maven/webapp-quick-start
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.472s
[INFO] Finished at: Tue Jun 17 19:53:57 JST 2014
[INFO] Final Memory: 12M/30M
[INFO] ------------------------------------------------------------------------

webapp-quick-start というフォルダが作成されていることを確認します
ついでにパッケージ用のディレクトリも作成します

ls -ltr webapp-quick-start/
合計 8
drwxr-xr-x 3 root root 4096  6月 17 19:53 src
-rw-r--r-- 1 root root  746  6月 17 19:53 pom.xml

mkdir -p webapp-quick-start/src/main/java/com/sample/webapp

■サンプルアプリ作成
dependencies 内にservlet-apiを使うためのライブラリの定義を記載します

emacs webapp-quick-start/pom.xml
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
  <version>3.0.1</version>
  <scope>compile</scope>
</dependency>

メインとなるクラスを作成します

emacs webapp-quick-start/src/main/java/com/sample/webapp/TestWebApp.java
package com.sample.webapp;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class TestWebApp extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        out.println( "Hello World!!!" );
        out.flush();
        out.close();
    }
}

Webコンテナの定義を記載します

emacs webapp-quick-start/src/main/webapp/WEB-INF/web.xml
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>TestWebApp</servlet-name>
    <servlet-class>com.sample.webapp.TestWebApp</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>TestWebApp</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
</web-app>

■ビルド
cd webapp-quick-start
mvn clean compile package

■デプロイ
cp target/webapp-quick-start.war /usr/local/tomcat/webapps/
service tomcat restart

tomcatのデプロイ先のディレクトリは各自の環境に合わせてください
tomcatの再起動コマンドも各自の環境に合わせてください
再起動はtomcatのオートデプロイがONになっていれば再起動不要です

■動作確認
http://localhost:8080/webapp-quick-start/hello

にアクセスして「Hello World!!!」が表示されることを確認してください
Tomcat ManagerにアクセスするとデプロイしたWebコンテナ情報が登録されていることもわかるかと思います


何とかサーバサイドだけで開発できる環境ができました
Javaを書き換えたり、pom.xmlを書き換えたりした場合は
「mvn clean compile package」->「cpでデプロイ」の流れを実施すれば変更を確認することができます

以下、やったみた感想です
  • MavenのXMLを記述するところがJavaらしいとというか、RubyやPHPみたいにモダン開発できない(慣れればできる?)
  • HelloWorldのサンプルを作成するだけなのにコード量が多すぎるのが残念
  • scaffold的な感じをJavaでもやりたかったのが動機
  • 今回は通常のWebアプリ(サーブレットコンテナ)でのやり方でだったが spring.io や PlayFramework を使えばもっと簡単にできるはず

■参考サイト

■Tips
http://localhost:8080/webapp-quick-start/
にアクセスするとsrc/main/webapp/index.jspの情報が表示されます

web.xmlのurl-mappingに「/」のみ記載するとwebapp-quick-start/aaa, webapp-quick-start/bbbと/配下の何にアクセスしてもサンプルの内容が表示されます

どうしてもEclipseで開発したい場合は「maven eclipse:eclipse」するとEclipseにインポートできるようになります

2014年6月17日火曜日

CentOS6.4でvmtoolsdが起動しなくなった場合の対応方法

カーネルをyum updateしてしまってvmtoolsdが起動しなくなってしまった
「vmtoolsd &」のようにコマンドを打ってもすぐにプロセスが死んでしまう
ログとかどこに出ているかもよくわからなかったので再度configしなおしたら起動したのでメモしておく
何しているかをちゃんと調べてからやるほうが吉です(すいません、自分は詳しくは未調査です)

■環境
CentOS release 6.4 (Final)
Linux localhost 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

■手順
  1. initctl list | grep vmware
  2. initctl配下で管理されていることを確認
  3. less /etc/init/vmware-tools.conf
  4. 起動ファイルの場所を確認
  5. /etc/vmware-tools/services.sh start
  6. Checking acpi hot plug                                  [  OK  ]
    VMware Tools is installed, but it has not been
    (correctly) configured for the running kernel.
    To (re-)configure it, invoke the following command:
    /usr/bin/vmware-config-tools.pl.
    
  7. /usr/bin/vmware-config-tools.pl
  8. 言われるがままにperlスクリプトを実行
  9. 質問されるがすべてenterを押下
  10. 「/usr/sbin/vmtoolsd &」で起動できることを確認

以上です
initctl配下で管理されるようになってからよくわからんですね

2014年6月16日月曜日

jmeterで指定したreq/secで負荷テストを実施する方法

前回までのjmeter関連の記事は以下の通りです

今回は更に指定したリクエスト/secだけリクエストできるようにしたいと思います
上記まで完了している体で説明します

  1. スレッドグループを右クリック -> 追加 -> タイマ -> 定数スループットタイマ を追加
  2. タイマの名前を適当に決めます
  3. ターゲットスループット(サンプル数/分)に「1分間でリクエストするリクエスト数」を指定
  4. ここで指定するリクエストがreq/minであることに注意してください 例えば 100 rec/sec のリクエストを送りたい場合は「6000.0」と入力してください
  5. Caluculate Throughput based onは「this thread only」を選択
  6. スレッドグループを編集
  7. スレッドプロパティの無限ループのチェックボックスをON
  8. スレッドプロパティのスケジューラをON
  9. スケジューラ設定内の持続時間(秒)にリクエストを発行し続ける秒数を指定
  10. 開始時刻と終了時刻は過去の時間を設定しておけば無視されるので過去の時間を設定してください

これでタイマに指定した間隔でjmeterはリクエストをかけるようになります
スレッドグループのスレッド数をあげることでもreq/secをあげることができますがクライアントのPCスペックに依存するのでスペックに合わせてスレッド数は上げ下げしてください

2014年6月13日金曜日

JmeterでREST-APIを負荷テストするテストケースを作成する方法

事前にjmeterのインストールは済ませておいてください
またjmeterのGUIを使ってテストケースを作成するのでX環境が必要です

■手順
  1. jmeter.bat(またはjmeter.sh)をクリックしGUIを起動
  2. テスト計画を右クリック -> 追加 -> Threads(Users) -> スレッドグループでスレッドグループを追加
  3. 名前とスレッド数とループ数を設定
  4. 作成したスレッドグループを右クリック -> 追加 -> サンプラー -> HTTPリクエストでリクエストを追加
  5. サーバ名、ポートを設定(APIをコールするエンドポイントの情報です)
  6. プロトコル、パスを設定
  7. プロトコルは「https」か「http」を入力
  8. メソッドがGETならばパスの部分にパラメータ情報をすべて記載
  9. Header情報が必要な場合は「Parameters」の部分に名前と値のkey, value形式で追加
  10. プロキシが必要な場合はProxyServerに設定を記載
  11. HTTPリクエストを右クリック -> 追加 -> リスナー -> 統計レポート を追加
  12. 他の結果も表示したい場合は同様に追加
  13. 設定が完了したら上部の緑三角ボタンをクリックして実行
  14. 追加した統計レポートに結果が表示されることを確認

基本的なテストはこれで作成できます
あとはテスト計画をjmx形式で保存できます(中身はXML形式のファイルです)
これをサーバに転送してコマンドで実行することも可能です

jmeter -n -t hogefuga.jmx

ここまでできたらJenkinsと連携して結果を可視化できるようにもしたいですね

2014年6月11日水曜日

Zabbixでtimeoutするアイテムを監視する方法

Zabbix Agentのタイムアウトは最大で30秒までしか設定できません
値を取得するのに30秒以上かかるアイテムの場合はZBX_NOTSUPPORTEDになってしまい監視できません
その場合、自分はcron+リダイレクトを使った方法で監視しているので紹介します
(cronを使わない方法(zabbix_sender等)もありますので参考程度に御覧ください)

■環境
CentOS release 5.10 (Final)
Zabbix Server 2.2.1

■設定方法
  1. Zabbixに登録するデータを取得するコマンドを作成する
  2. 今回は時間がかかるコマンドとして「du -sx /」を例として紹介します
  3. 結果が数字の部分だけになるようにコマンドを修正する
  4. du -sx / | awk '{print $1}'
  5. cronに登録する(例として毎時5分実行するように設定する)
  6. cron内で結果をファイルにリダイレクトさせる
  7. 5 * * * * du -s . | awk '{print $1}' > /var/tmp/du.size
  8. zabbix_agent.confを開く
  9. emacs /etc/zabbix/zabbix_agent.conf
  10. UserParameterを使ってリダイレクトしたファイルの情報を取得する設定を記載する
  11. UserParameter=get.du.size,cat /var/tmp/du.size
  12. zabbix-agentdを再起動する
  13. 一度cronが回ってファイルが作成できたら念のためzabbix_getで設定したキーの値が取得できるか確認する
  14. zabbix_get -s hostname -k get.du.size
  15. zabbix-serverのアイテムにget.du.sizeで監視するアイテムを登録する
  16. ポイントは更新間隔(秒)を「3600」にすることでcronの間隔と合わせています

以上で設定は完了です
これで1時間おきにduの結果がZabbix Serverに登録されているかと思います

■Tips
うまく値が取得できなくZBX_NOTSUPPORTEDになってしまう場合は、ファイルの権限を確認して読み込み権限を付与してください

cronの部分をJenkinsで巻き取り、値を取得したあとでzabbix_getでZBX_NOTSUPPORTEDにならないか確認するとより正確な監視ができるかと思います
(Zabbix Serverはアイテムが何かの拍子にZBX_NOTSUPPORTEDになっても警告してくれないのでそこをJenkinsでカバーするイメージです)
RESULT=`zabbix_get -s yoshi3 -k get.du.size2`
if [ $RESULT = "ZBX_NOTSUPPORTED" ]
then 
  echo NG
  exit 1
fi

2014年6月7日土曜日

Chromecast使ってみた

ついに日本で発売になったChromecast
さっそく購入してセットアップ手順をまとめて実際に使うところまで試してみました

■環境
TV : Sony BRAVIA EX420
Chromecast
iOS 6
iPhone 5

※事前に無線LAN環境+Googleアカウントが必要になりますのでご注意ください

■設定方法
パッケージです
Chromecastの写真が載ってます


開封は横のシールを剥がして行います
剥がして横に引っ張り出せば取り出せます


中の箱を開けば本体がお目見えします
そして、驚きは説明書
開いた蓋の裏側に3つだけ手順が記載しています
  1. テレビにコンセントに差し込む
  2. テレビの入力切替をする
  3. アプリで設定する


本体の部分を取り出すと中にコンセント類が入っています
USB + コンセントと
HDMIの延長コードが入っています
本体は裏側に丸い穴が開いているのでそこを押せばケースから取り出せます(表から引っ張るとうまく出せないので裏から押しましょう)


USBとChromecastを接続します
Chromecastの周りにコーティング用のにシールが貼ってるのあるのでそれを剥がしてからUSBを接続します
USBは基本的に電源共有として使います
本体に直接付いているのはHDMIの端子でテレビと直接つなぎます
HDMI端子からは電源を供給できないのでUSBがついている感じです


TVにChromecastを接続します
今回、テレビはBRAVIA EX420を使用しております
テレビの裏側にHDMI入力端子がありますのでまずそちらを差し込みます
空いているHDMI端子に差し込めばOKです
EX420は全部で3つのHDMI端子があります(裏側に2つ、側面に1つあります)
写真はすでに1つのHDMI端子を使っていますので空いている部分に接続します
(すいません、写真に埃がかぶっていました。。。)


接続したらこんな感じになります
その後、電源供給用のUSBを接続します
EX420の場合、ちょうど接続したHDMIの下にHDDを接続するためのUSB端子があります
電源供給はそこにUSBを接続してもできるようなので私の場合はそこに接続しました
(写真だと見づらいですが、すでにUSB端子に接続している状況です)
充電がはじまるとChromecastが白く点滅します
これでChromecastの設定は完了です、次にiPhoneアプリをインストールしてアプリの設定をします


https://cast.google.com/chromecast/setup/
iPhoneでブラウザを開いて上記のURLにアクセスします
iPhoneの場合はAppStoreに誘導されるのでAppStoreでChromecastアプリをダウンロードします


アプリの設定を行います
まずは利用規約に同意します
次にChromecastをセットアップします
まだ接続がないので「新しいChromecastのセットアップ」を選択します
するとiPhoneのWi-Fi設定でChromecastに接続してくださいと言われるので、Wi-FI設定でChromecastに接続します




接続が完了したらアプリに戻ります
Chromecastに固有の名前を設定します
まず「次へ」を選択します


テレビを点けて入力をHDMIに切り替えください
テレビ画面に出ているコードとアプリ側に出ているコードが一致していることを確認したらアプリ側で「次へ」を選択します
(すいません、一応コードの部分は黒塗りにしています)


国の選択画面になりますのでお住まいの国を選択してください


そしてChromecastの名前を決定します
なんでもOKです
自分が判断できる名前をつけてください
名前の設定が完了したら「次へ」を選択します


そしてChromecastが接続するネットワークを選択します
「Wi-Fiネットワークを選択」を押すとChromecastの範囲にあるネットワークを表示しますので接続したいネットワークを選択します
当たり前ですが、私は自分のネットワーク(WiMAX)に接続しました
ネットワークとパスワードを入力したらセットアップを選択します
(このセットアップが始まるとiPhoneとChromecastの接続は終了します、そしてその後はアプリ経由でChromecastに接続することになります)




セットアップがはじまります
アプリおよびテレビにも同じようなくるくるが始まります
数分待てばセットアップが完了します
Chromecastの初回セットアップで最新ファームウェアがないか探しにいくのでアップデートした場合はChromecastの再起動が走るようです


一応テレビにこんな感じのが移ればOKだと思います


Chromecast側のセットアップが完了してからアプリに戻ると設定したChromecastがアプリから認識できているのが確認できると思います
また、アプリからChromecastを認識するためには
Chromecastが接続されているネットワークにiPhoneも接続している必要がある
ということにご注意ください
なのでiPhoneでキャリアの回線(例えばau-4GLTE)を使っている場合はアプリを立ち上げてChromecastを認識しないのでご注意ください
(おそらくなのですがChromecast側には認証がないのでネットワークの接続認証で代替しているのだと思います)


これでセットアップは完了です
次にChromecast用のアプリをダウンロードしていろいろと使ってみたいと思います

■使ってみる
Chromecatアプリを立ち上げ「アプリを見つける」を選択します
するとsafariが立ち上がりChromecastのアプリページに誘導されます
今のところ「Google Playムービー」しかなさそうなのでとりあえず選択し、AppStoreからダウンロードします


ダウンロードしたGoogle Playムービーを立ち上げます
右上をタップし端末に接続から設定したChromecastに接続します
これでGoogle Playで購入、ダウンロードした動画をChromecastを経由して見れるようになります
iPhoneからではGoogle Playアプリがないので直接ブラウザでGoogle Playにアクセスして動画を購入もしくはダウンロードしてください


試しにPCでGoogle Playにアクセスして「ドラマ 闇金ウシジマくん」の1話をダウンロードしました
するとGoogle Playムービーのアプリにもドラマが表示されるのでこれを選択すれば、Chromecastを経由でしてテレビでGoogle Playでダウンロードしたドラマを見ることができるようになります
再生してもChromecast側で動画が再生されない場合は「Google Playムービー」アプリとして右上にあるアイコンからChromecastに転送できます
動画再生中はiPhoneで別アプリをいじっても問題なしです



とりあえずこれでGoogle Playでダウンロードした動画はテレビで見れるようになりました
あとは今後アプリが追加されてChromecastで見れる動画が増えるといいかなーと思います
(AndroidでGoogle Playで検索するとすでに多くのアプリがChromecast対応しておりました、iPhone対応のアプリが少ないだけのようです)

■所感とTips
正直、IT知識のない人には設定が結構たいへんかなーと思いました
というのも前提条件として「無線LANが必要」とか「Google アカウント必須」とか「HDMI対応テレビが必要」とか事前にやることがいろいろあるので「気軽にー」というわけにはいかなさそうです

あと画質は全く問題ないです、普通にテレビ感覚で見ることができます
前はPCからHDMIでTVに移していたのですが、それよりかは全然画質が綺麗です

Google Playムービーアプリを終了しても動画は再生し続けるようです

Google公式で出しているYoutubeアプリはChromecastにすでに対応しているのでGoogle Playムービー同様、アプリを立ち上げて、動画を再生して転送ボタンを押せばTVで見ることができます

Youtubeアプリには「TVキュー」という機能がありキューに入れておけば動画終了後、連続で再生することができるようです

Chromecastに対応したiPhoneアプリがまだ少ないのでAndroidがある場合はAndroidで操作するほうが全然いいです
  • d-Video
  • Youtube
  • Google Play Movies
  • Red Bull TV
  • Plex
  • Post TV
  • Viki
などなどいろいろなアプリがChromecast対応してました、詳しくはChromecastアプリから「アプリを見つける」で探すことができます

どの端末(iPhone, Android etc...)からcastされたのかTV上に出してくれます(動画転送時、はじめに少しだけ表示されます)
Googleアカウントに紐付いているのでGoogleアカウントのアクティビティログにcast履歴を出してくれるかもしれません(未確認)

2014年6月5日木曜日

EclipseでSAStrutsの開発環境構築をしてみた

■環境
Windows7 64bit
Eclipse 4.3.1 Kepler
SAStruts 1.0.4 sp9
Apache Tomcat 6.0.20

■Doltenプラグインのインストール
まずEclipseのプラグインをインストールします
これをインストールしなくても環境構築できますが入れたほうが簡単なのでインストールします

Eclipse MarketPlaceでは公開されていないのでプラグインの公開サイトを追加してインストールします

Help -> Install New Software
を開き
  • http://eclipse.seasar.org/updates/3.2
  • http://eclipse.seasar.org/updates/3.3
を追加します
追加するとURLに存在するプラグイン一覧が下ペインに表示されると思いますので

3.2では
  • DbLauncher
  • Dolteng
  • Sysdeo/SQLI Tomcat Launcher
3.3では
  • Dolteng
  • SAStrutsPlugin
のチェックボックスをONにしてインストールします(以下は3.3にあるプラグインをインストールする場合のウィザード)



requires 'bundle org.eclipse.jst.jsp.ui 0.0.0' but it could not be found
となってインストールエラーとなる場合には

Help -> Install New Software
を開き
  • Kepler - http://download.eclipse.org/releases/kepler
を選択し「Web, XML, Java EE and OSGi Enterprise Development」を選択しインストールします
結構量が多いのでインストールには時間がかかります

■SAStrutsサンプルプロジェクトの作成
プラグインをインストールできたらサンプルプロジェクトを作成してみます

  1. Package Explorerで右クリック -> New -> Other を選択
  2. プロジェクト作成ウィザードで Dolteng -> Dolteng Project を選択しNextをクリック
  3. プロジェクトに必要な情報を入力(プロジェクト名、パッケージ名は必須です、PresentationにはSAStrutsを選択します)
  4. 入力が完了したらNextをクリック
  5. 各種ファイルのパスを設定をっ実施(基本はデフォルトのままでOKです)
  6. 確認が完了したらFinishをクリック

これでプロジェクトの作成が完了です
次はこのサンプルプロジェクトを動作させてみます

■サンプルプロジェクトを動作させる
Tomcatで動作させるので事前にeclipse上のTomcatの設定を済ませてください
またTomcatはバージョン6系を使用しました(7だとSysdeo/SQLI Tomcat Launcherがうまく動作しませんでした)
eclipse上のTomcatの設定が完了したらプロジェクトとTomcatを連携します

  • プロジェクトを右クリック -> Tomcatプロジェクト -> コンテキスト定義を更新
をするとeclipseで開発したソースがリアルタイムでtomcatにデプロイされて開発しながらブラウザで確認できるようになります
コンテキストを更新したらツールバーにあるTomcatのアイコンからTomcatを起動してください

Tomcatの起動が完了したら、src/main/java 配下の
  1. com.sample.sas.action.IndexAction.java を右クリックし
  2. SAStruts -> View on Server をクリック
すると、eclipseに内蔵されているブラウザでサンプルの動作を確認できるかと思います
※この段階でTomcatが起動していなかったり、Sysdeo/SQLI Tomcat LauncherでeclipseとTomcatの連携ができていないと「このページは表示できません」という404エラーが画面になります

■参考サイト

この開発環境構築が大変なのはいかにもJavaという感じですね
せっかく環境構築できたので次はちょっとサンプルでも動かしてみたいです

P.S 20141027
以下のエラーが出る場合は「Web, XML, Java EE and OSGi Enterprise Development」を先にインストールしてから各種Sastruts用のプラグインをインストールしてください
Cannot complete the install because one or more required items could not be found.
Software currently installed: SAStrutsPlugin 0.0.14 (org.seasar.sastrutsplugin.feature.feature.group 0.0.14)
Missing requirement: SAStrutsPlugin 0.0.14 (org.seasar.sastrutsplugin 0.0.14) requires 'bundle org.eclipse.jst.jsp.ui 0.0.0' but it could not be found
Cannot satisfy dependency:
From: SAStrutsPlugin 0.0.14 (org.seasar.sastrutsplugin.feature.feature.group 0.0.14)
To: org.seasar.sastrutsplugin [0.0.14]
Web, XML, Java EE and OSGi Enterprise Developmentのインストール方法は
Help -> Install New Software -> Work with -> Luna
を選択すればその下の一覧に表示されるのでチェックボックスをONにしてインストールしてください
Lunaの部分は各Eclipseのバージョンごとに提供されているリポジトリ名なので適宜変更してください

2014年6月1日日曜日

shUnit2にパッチをあててJUnit形式のXMLファイルを吐けるようにしてみた

  1. https://code.google.com/p/shunit2/issues/detail?id=16 にアクセス
  2. 上記に添付してある shunit-2.1.6-xml.patch をダウンロード
  3. patchファイルをshunit2と同じディレクトリに配置
  4. [root@localhsot work]$ ls -ltr
    合計 100
    -rw-r--r-- 1 root   root   20944  5月 29 16:55 2014 shunit-2.1.6-xml.patch
    drwxr-xr-x 5 nifbat nifbat  4096  5月 29 16:59 2014 shunit2-2.1.6
    
  5. 以下のコマンドでパッチを当てる
  6. patch -u -p1 -d shunit2-2.1.6 < shunit-2.1.6-xml.patch
  7. パッチがあたることを確認する
  8. patching file bin/gen_test_results.sh
    patching file bin/which
    patching file lib/versions
    patching file src/shunit2
    patching file src/shunit2_test.sh
    patching file src/shunit2_test_asserts.sh
    patching file src/shunit2_test_failures.sh
    patching file src/shunit2_test_macros.sh
    patching file src/shunit2_test_misc.sh
    patching file src/shunit2_test_standalone.sh
    
  9. tempファイルをカレントディレクトリに作成しようとして権限がないと怒られるので「shunit2-2.1.6/src/shunit2」の以下も修正
  10. 1143 __shunit_system_out=$(mktemp 'shunit-out.XXXX')
    1144 __shunit_system_err=$(mktemp 'shunit-err.XXXX')
    ↓
    1143 __shunit_system_out=$(mktemp '/tmp/shunit-out.XXXX')
    1144 __shunit_system_err=$(mktemp '/tmp/shunit-err.XXXX')
    

パッチあてが完了したら実行する際に
export SHUNIT_OUTPUTDIR="/tmp" && sh testHoge.sh
みたいな感じで SHUNIT_OUTPUTDIR を export するようにしてください
そうしないとXMLファイルは標準出力に出力されてしまいます