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にインポートできるようになります