2011年11月14日月曜日

平成23年度秋季研究大会の報告

お久しぶりです。
ほぼロム専な管理人その2、関ちゃんですよ。
報告と寄稿をいただきましたのでお知らせします。

平成23年11月11日(金)~13日(日)にいわて県民情報交流センター「アイーナ」で日本経営工学会 平成23年度秋季研究大会が開催されました。

産技からゲーム科2年生 丸山結以さんが「AHPを利用した効果的なクラウドサービス提供の枠組み」のテーマでプレゼンを行いました。
丸山ちゃんおつかれ!(・∀・)ノ
感想を寄稿してもらったので以下に掲載します。

-----

無事に帰ることができ安心しました。

初めての割には、よく出来ていた
こう言ってもらえたことが、とても嬉しかったです。

よく出来たのは協力してくださった先輩や先生、皆さんのおかげです。
スライドの作成や、その内容について、発表の仕方、聞く姿勢など
今日の発表は私の勉強不足を実感しました。

スライドの作成もほぼお願いしてしまいましたし、
質疑応答にも答えられませんでした。
発表中の動作も、欠点がいくつもありました。
反省点しか浮かばないくらいです。

やる気ももちろん大事だけれど
それに見合った実力をつける努力をする
という事が大事であり基本だと強く思いました。

今回発表に参加できたことで、多くのことを学ぶ事が出来ました。
貴重な体験をさせていただけたことに感謝です。
今日の反省点を、今後生かせるように、努力していきたいと思います。

 丸山結以

2011年11月9日水曜日

重複組み合わせの全組み合わせを表示

重複組み合わせの全組み合わせを表示するプログラムです。
今回種類が3なのでループも3重になります。
種類の数でループの深さが決まります。

#include

#define KYOTEN 3
#define NUMBER 5

//3H5=7C5=21通り

int fact(int);

void main() {
int k1, k2, k3, i = 1;

printf("今回はK=%d, N=%dで%dH%d=%dC%dとなり%d通りあります\n", KYOTEN, NUMBER, KYOTEN, NUMBER, KYOTEN+NUMBER-1,NUMBER, fact(KYOTEN+NUMBER-1)/(fact(NUMBER)*fact(KYOTEN-1)));

for(k1 = 0; k1 <= NUMBER; k1++) {
for(k2 = 0; k1+k2 <= NUMBER; k2++) {
for(k3 = 0; k1+k2+k3 <= NUMBER; k3++) {
if(k1+k2+k3 == NUMBER)
printf("%d番目 %d %d %d\n",i++, k1, k2, k3);
}
}
}
}

//階乗関数
int fact(int num){
int i;
if(num == 1){
return 1;
} else {
i = num * fact(num - 1);
return i;
}
}

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つの検証例としてここに投稿させていただきました。
良かったら参考にしてみてください。
以上、萩原がお送り致しました。
いやー、なかなかいい勉強になった。