2011年10月8日土曜日

Windowsタスクスケジューラを利用して姫野ベンチ実行、DBアップロード

Windowsタスクスケジューラを利用して姫野ベンチ実行、DBアップロードをするメモです。

[準備]
・プロジェクトをEclipseにインポート
・Dドライブ直下に(なければCドライブ直下に)Himenoフォルダを設置
・Dドライブ直下に(なければCドライブ直下に)Benchmarkフォルダ設置

1.次のファイルを作成
[Himeno.java]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.TimeUnit;

public class Himeno {

String t;

public static void main(String[] args) throws InterruptedException,
IOException {
ProcessBuilder pb = new ProcessBuilder("D:\\himeno\\himenoBMTxp_s.exe");//必要に応じて変更
Process p = pb.start();

BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
Catcher c = new Catcher(br);
c.start();

TimerTask task = new ProcessDestroyer(p);
Timer timer = new Timer("プロセス停止タイマー");
timer.schedule(task, TimeUnit.SECONDS.toMillis(80)); //80秒後にProcessDestroyer#run()が呼ばれる。必要に応じて変更

for (;;) {
try {
p.waitFor(); //プロセスの終了待ち
break;
} catch (InterruptedException e) {
e.printStackTrace();

//waitFor()はInterruptedExceptionが発生する可能性があるが、
//今回の例では、その場合もプロセスの終了待ちを繰り返す。
//(プロセスの強制終了とInterruptedExceptionは無関係)
}
}

timer.cancel(); //タイマーのキャンセル(必須)

// System.out.println(c.out.toString());
// System.out.println(c.out.toString().indexOf("MFLOPS",210)); //最初のMFLOPSは203文字目に出現
int idx = c.out.toString().indexOf("MFLOPS",210);
String t = c.out.toString().substring(idx+10,idx+18);
// System.out.println(t);

Mysql ms = new Mysql();
ms.mysqlInsert(Double.parseDouble(t));

}

int getValue()
{
int value = Integer.parseInt(t);
return value;
}
}


class ProcessDestroyer extends TimerTask {

private Process p;

public ProcessDestroyer(Process p) {
this.p = p;
}

@Override
public void run() {
p.destroy(); //プロセスを強制終了
}
}


class Catcher extends Thread {
Reader in;
StringWriter out = new StringWriter();
public Catcher(Reader in) {
this.in = in;
}

public void run() {
int c;
try {
while ((c = in.read()) != -1) {
out.write((char)c);
}
} catch (IOException e) {
e.printStackTrace();
}

}

}


[Mysql.java]
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

class Mysql {

public void mysqlInsert(double vl) {
String msg = "";
try {
// ドライバロード
Class.forName("org.gjt.mm.mysql.Driver");

// MySQLに接続
Connection con = DriverManager.getConnection("jdbc:mysql://ホスト名/DB名", "ユーザ名", "パスワード");

// ステートメント生成
Statement stmt = con.createStatement();


// SQLを実行
String sql = "INSERT INTO himeno_benchmarks(server_id,MFLOPS_measured) VALUES (40,"+vl+")";//40はID。VPSのIDを調べて変更する
stmt.executeUpdate(sql);

// 接続を閉じる
stmt.close();
con.close();
}catch (ClassNotFoundException e){
msg = "ドライバのロードに失敗";
System.out.println(msg);
}catch (Exception e){
msg = "ドライバのロードに失敗しました";
System.out.println(msg);
}
}
}

2.実行可能Jarファイルの作成
図のように実行可能JARファイルを作成します。


これをD:\Benchmark\Himeno40.jar として保存します。

ここまで確認
javaw -jar D:\Benchmark\Himeno34.jar
が実行され、DBに内容が保存されるか確認
Javaがインストールされていなかったらインストール(パス登録も)

3.タスクスケジューラの登録

重要
外部JARファイルとして利用していた「mysql-connector-java-5.0.8-bin.jar」を
「C:\Program Files (x86)\Java\jre6\lib\ext」にいれておきます。
これがないとスケジューラではDBにアップロードされませんでした。

タスクスケジューラに図のように登録します。

「ログインしているかどうかかかわらず実行する」にチェックをいれる

ファイル名はHimeno**.jar (**はID)
プログラム:javaw
引数: -jar D\Benchmark\Himeno**.jar


これで毎時結果がDBにアップロードされます。
ちょっと不安定ですがこれで様子をみます。

2011年10月3日月曜日

GALAXY Tab Market ID統一管理

はーい。こんにちは。
blog初登場のT09003 萩原健太こと、通称"はぎけん"です。
が、まあ萩原です。よろしくお願いします。
今回Webのandroid marketからGALAXY Tabにアプリのインストールをするとき
1つのIDで多数のGALAXY Tabにアプリをインストールできるよう環境を設定しました。
見にくい画像やらいたらない表現があるかもしれませんが
今回のそのなかで1つの手段について記述します。
今まで使っていたGALAXYにそのまま新たに共通IDを設定してやろうと
考えたのですがWebのmarketのマーケットアカウントというところに
端末が表示されることがなくうまくいきませんでした。
いろいろ調べ、試行錯誤した結果
現在のGALAXYの利用状況でうまく共通IDの設定をするのは無理なのでは?
という見解にたどりついてしまったので1からやり直すことにしました。
そこでまず。
端末の初期化です。
ここでは画面上の設定にある初期化をしてもいまく1から設定しなおすことはできません。
電源を切ります。→ 電源ボタンとVolアップボタンを同時に長押しします。
そうすると今までに見たのとのないこの黒い画面が出ます。
撮影者が写りこんでますがすみません萩原です。
気になさらないでください。
この画面とは初対面だったのでテンション上がりました。
そしてドキドキ感やばかったー。(笑)
※端末横のVolボタンで上下選択できます。
wipe data/factory resetを選びHOMEボタンを押します。
ドロイド君がいる画面に切り替わります。そこで少し待ってから
もう1度HOMEを押します。
この別の黒い画面が現れるのでここでは
Yes -- delete all user dataを選びHOMEボタン。
またドロイド君が出てきます。
さらに少し待ってからHOMEボタンを押します。
reboot system nowを選びHOMEボタン。
ドロイド君の画面が出るのでさらに少し待つ。
もう1度HOMEを押しましょう。
これで端末が起動し始めます。
SIMについてはなくても大丈夫です。
ここからは通常通り設定を進めていきます。
ポイントのみ記述します。
1.インターネット接続はWi-Fiのみでも大丈夫です。
2.Googleのアカウントを新たに作成してください。
これ以外の設定は流れで最後まで進めてください。これで設定は終わりです。
画面が出てきたらマーケットアプリを開いて”同意する”を押してください
次にマーケットを閉じて
Webからandroid marketにいきます。
画面右上のログインをクリックし、先ほど設定したGoogleアカウントでログインします。
その後、マーケットアカウントの端末欄に端末が表示されたら1台目が完了です。
Webでの反映には少し時間がかかる場合があるので少し気長に。
気休めかもしれませんが、端末からマーケットアプリを開いたり閉じたり
Webでログインし直してみたり私はしていました。(笑)
たぶん、いや、確実に気休め。(笑)
2台目以降の設定についてですが。
同じように黒い画面で初期化して端末設定を進めます。
違う点は1つのみで。
Googleアカウントを作成せず、1台目の初期設定で設定したアカウントにログインすることです。
その後も同じように設定したりマーケットにつないだり
Webでandroid marketにログインしたりします。
マーケットアカウントの端末欄に新しく端末が追加されたらこれでOKです。
ここに反映されるまでに1時間近くかかったりしたときもあって結構あせりました。(笑)
ちなみに端末本体の設定でアカウントと同期をとる必要もとくにありません。
こんな感じで端末が追加されていきます。
私はこんな感じで簡単に名前うつけてあります。
Tabにもテプラが貼ってあるので管理は十分できます。
アプリをダウンロードするときに端末を選択できるようになるので
そこで1台ずつインストールすることができるようになります。
こんな感じで。
別の端末に送信
を開くとこんな感じで端末選択できます。
とまあこんな感じで1つのIDでWebから
アプリのインストールができるようになりました。
初期化までしなくとも他にも何かやり方があったかもしれませんが
1つの検証例としてここに投稿させていただきました。
良かったら参考にしてみてください。
以上、萩原がお送り致しました。
いやー、なかなかいい勉強になった。