スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
流行ってるなぁジェネレータ
ジェネレータが流行っているようだ。
画像をどうやって生成しているのだろう。
気になったので作ってみた。

用意する画像:
a.png
a.png


b.png
b.png


background.png
background.png


生成される画像:
out.png



ImageObserverインタフェースはよくわからんかったのでdrawImageメソッドに引数としてImageObserverインタフェースを与えるところは null にした。

ソース
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class Main {

public static void main(String[] args) {

BufferedImage readImage1 = null;
BufferedImage readImage2 = null;
BufferedImage readImage3 = null;
try {
readImage1 = ImageIO.read(new File("background.png"));
readImage2 = ImageIO.read(new File("a.png"));
readImage3 = ImageIO.read(new File("b.png"));
} catch (Exception e) {
e.printStackTrace();
readImage1 = null;
}

Graphics2D off = readImage1.createGraphics();

off.drawImage(readImage2, 0, 0, null);
off.drawImage(readImage3, 50, 0, null);
off.drawImage(readImage2, 0, 50, null);
off.drawImage(readImage3, 50, 50, null);

try {
ImageIO.write(readImage1, "png", new File("out.png"));
} catch (Exception e) {
e.printStackTrace();
}
}
}


参考資料:
ImageIOクラスで画像ファイルを読み書きする
スポンサーサイト
ということで
http://bingobingobingo.blog49.fc2.com/blog-entry-747.html ということで、
Let'snote
が、よいのではないかとpascal氏から助言を頂いた。

重さ(kg)意識しないなら、MacBookも視野に入れてみてはとのことだった。
ケータイからメールに書いたもの
 今、僕は平野さんの本と共に外にいます。ソフトウェア開発ってホント、わくわく感がないとできないと思う。

 平野さんの本に感化されて今、この瞬間にホームページを作ってみたくなったり、ちっこいプログラムを書いてみたくなったんだけど、家に帰らないと開発環境がないことに気が付いた。書きたい衝動に駈られたのに書けないなんてなんて悲しいんだ。まして、今は休日、好きなだけ好きなこと書いたっていいじゃないか。

 それと相方を筆頭にこんなにプログラム好きとの距離が縮まったのに、思い立った瞬間に書けないなんてやっぱり悲しい。相方とゲームショウへ行ったときに乗った電車の中でも、作りたいものをどうやって作るかって話だし、時間が許す限り相手が作りたいものをどうやって作るか話し合うのは楽しい。

 僕がこうしてる間にも、あいつ(相方とはまた別の人物)は家でこもってプログラミングしてるのかと思うと、そのワクワクとドキドキに混ぜてほしいと思う。

 開発環境を持ち歩かないと! 僕はなんて損をしてるんだろう。街を歩くとギターケースを抱えた若者とすれ違う。そんなとき、なにか興奮を覚える。さっき通りすぎていった彼は開発環境を持って街に出ているんだ。僕も買いたい、持ち歩きたい。繋がりたいときに繋がりたい。そんな時代がもう来てるはずじゃないか。
「旅する会社」購入しました
070923_2215~01.jpg


オールナイトニッポン以降のお話のようです。

さっそく、読まないと。

あのときのプログラマに対する強い憧れが蘇ってくるといいなぁ。

あのときの俺に、今の学力とプログラミング能力をあげれるなら、えらいことになりそうなんだがなぁ。


そういえば、最近のポータブルオーディオ、FMラジオは聞けてもAMラジオが聞けないとは・・・ ショックすぎる。
テキトーにすごしました
昨日は、相方と銭湯に入りに行った。江戸の湯につかったので、私も江戸っ子になってしまったようだ。

本日は、東京ゲームショウへ。

070923_1504~01.jpg


070923_1505~01.jpg


団長がいました。
070923_1613~02.jpg


070923_1613~01.jpg


あと、
http://www.onlineplayer.jp/modules/wordpress/index.php?p=81
が、面白かった。
相方が来るので
JS使いの相方がくるので部屋を片づけ中。



東京出てきてから、お給料で買った本
070922_1304~02.jpg



Lisp関係がまったくてづかずだな。
今後は、ストックから読めばよいので、買う量は減るかな。

なお、写真は一部です。


ちなみに 1/3くらいがOracle・DB関係。
配属後即DBのパフォーマンス周りからJavaとともに開始ですからね。
まいったよね。知らないことが多すぎて、今も知らないことばかりだが。

UMLが読めないと、超肩身が狭いので、UMLも多少独学しました。。

# DBのことは私に聞かないでください


追記:
相方は、超散らかっている私の部屋に1度来たことがあるのだが、あれを見ても、泊るというんだから勇猛すぎる。 まあ、連休だしな。
プログラム書いてないなぁ
ちょっとだけRubyの本を読む。

Rubyの本を読むのに、Javaの知識を使い。どういうわけかPerlの理解が深まる。面白い。
連休
daiから教授に会ってくるとのメールがあった。
また、なんでと思ったが連休利用して、大阪帰ってるのか。

なんかある度に帰るなぁ、みんな。

ああ、帰りたいさ。帰りたいとも。いいなぁ~

ホームシックかかるよなぁ。
超天気がよかったので
むちゃくちゃ天気がよかったので、
ヒルズのファミリーマートまで昼食を買いに行った。

070920_1256~01.jpg

↑とても天気がよさそうに見えない写メ

帰途に買った「チーズおかき」と「ポッキー」より昼食が安いってどういうことだ?w
というか、おかし高いよ;;

ちなみに、夜になるとこんな感じ

070920_2115~01.jpg

語尾が
こっちは、語尾が「だよ」なんだよ。

「じゃん」との使い分けがわからねぇ。 orz

というか、だよ派とじゃん派か?
地域の問題だろうか。

「やで」しか使えん。
インストールについて
大学3回生までWindowsにインストールがうまくできなかった。

なんか、今もそうかも・・・と思いつつ、Linuxでのインストールについて載せます(大きくは間違ってないはず)。


Linuxのパッケージ.ppt

ソースからのインストール.ppt

FreeBSDのパッケージについて.ppt
# FreeBSDのパッケージについて.pptは不勉強をさらすことになるだけかも

一覧リンク


CC
A氏と遊びに行こうという話しになった。B氏やC氏も誘おうということになったので、じゃあメールは俺が送っとくと言った。

To: にB氏とC氏を挿入後、 CC: に関係者であるA氏を入れておかないという思いが一瞬よぎる・・・


ハ、俺は一体何を考えているんだ、職業病か!



と思い。B氏とC氏だけに送った。
あ、たぶん
マウスの右クリックが死んだ。

マウスジェスチャーやりすぎたか。

寿命だろうなぁ。ハードウェア消耗したのは初だな。
3連休の過ごし方
相方らは、こりゃプログラミング三昧の気配だな。

ろんごん先生は VMwareでLinux三昧のようだし。

ビンゴ中西は、戦意喪失気味。
んー メモリ
20070916111426.jpg

さて、Windows起動時はこんな感じ。

ここで、Eclipse, Sleipnir, Tomcatを起動すると、

Eclipse
eclipse.exe 3,188 K 3 M
javaw.exe 90,008 K 90 M

Sleipnir
Sleipnir.exe 49,992 K 50 M

Tomcat
tomcat4.exe 27,868 K 28 M
tomcat4w.exe 4,968 K 5 M
-----------------------------
176 M

となって300Mを超えるなぁ
プログラミングの前に
プログラミングの前に見につけなければならないことがあるようだ。

20070916111201.jpg

こ、これは、434MBもメモリ超過ですか!!!


なんとか、ここまで減らした20070916111426.jpg

キーボードの見所
Ctrlキーの位置なんかより、ファンクションキーの押し安さの方が大切なんじゃないだろうかEclipse使うなら。俺のノートパソコンのF3(というかファンクションキー全部)、小さくて超押しずれー。

ああ、ああ、つらかった
やっと、休日か。

Excelを方眼紙の代わりにした1週間。

プログラミングなし。


自分の書いたソースのテストのためだから
しゃーないといえばしゃーないのだが・・・・
なんか色々ダメぽ
ResultSet、クローズしなくていいのだろうか・・・
Javaのオブジェクト指向が崩壊してるんだがどうしよ・・・ orz

なソースができたんだが、とりあえず今回のスタンスはDBへの登録と引き出しができればOKなので・・・と言いたいんだが・・・ どうやって改良すればいいんだ・・・ orz


とりあえず、これで、DBに行った試合経過を全部残せるようにはなった・・・ いやいやダメなソースすぎるのはわかる・・・ orz

DBむずいんだよ・・・ というか書いたことなさすぎる・・・

# え、前回の記事とどこが変わったかわからない?
# diffとって報告ですか・・・


create table game_tb(
game int,
y int,
x int,
count int
);
まず、create tableでMySQLにテーブル作成。どっちが勝ったか示すカラムを足すべきだった。

package game;

import java.sql.ResultSet;
import java.sql.SQLException;

public class Replay {
public static void main(String[] args) {
Board board = new Board();
ReplayMan replayMan1 = new ReplayMan(Mark.MARU, board);
ReplayMan replayMan2 = new ReplayMan(Mark.BATU, board);
MyDb myDb = new MyDb();

ReplayMan player = replayMan1;

ResultSet rs = myDb.getRs(1); // 何試合目を再現するか直打ち

try {
while(rs.next()){
player.put(rs.getInt("y"), rs.getInt("x"));
board.show();
if(rs.getInt("count") % 2 == 0){
player = replayMan1;
}else{
player = replayMan2;
}
}


} catch (SQLException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
}


package game;

public class ReplayMan {
int mark;
Board board;

public ReplayMan(int mark, Board board) {
this.mark = mark;
this.board = board;
}

public void put(int y, int x) {
board.replayPut(y, x, mark);
}
}


package game;

public class Board {
/** 盤 */
private int[][] board = new int[3][3];

private int count;

private MyDb myDb = new MyDb();

private int game = myDb.getGameFromDB();

public Board() {
for (int y = 0; y < 3; y++) {
for (int x = 0; x < 3; x++) {
board[y][x] = Mark.EMP;
}
}

count = 0;
}

public boolean isPut(int y, int x) {
if (board[y][x] == Mark.EMP) {
return true;
} else {
return false;
}
}

public int isEnd() {
int yoko = 0;
int tate = 0;
int naname1 = 0;
int naname2 = 0;

for (int i = 0; i < 3; i++) {
yoko = tate = 0;
for (int j = 0; j < 3; j++) {
yoko += board[i][j];
tate += board[j][i];
}
naname1 += board[i][i];
if (yoko == 3 || yoko == -3) {
return yoko;
}
if (tate == 3 || tate == -3) {
return tate;
}
naname2 += board[i][2 - i];
}

if (naname1 == 3 || naname1 == -3) {
return naname1;
}

if (naname2 == 3 || naname2 == -3) {
return naname2;
}

if (count == 9) {
return count;
}

return Mark.EMP;
}

public void put(int y, int x, int m) {
board[y][x] = m;
count++;

myDb.myInsert(game, y, x, count);
}

public void replayPut(int y, int x, int m) {
board[y][x] = m;
count++;
}

public void show() {
String stone[] = { "O", " ", "×" };

System.out.println(" A B C");
System.out.println(" ┌─┬─┬─┐");
for (int i = 0; i < 3; i++) {
System.out.print((i + 1) + "|");
for (int j = 0; j < 3; j++) {
System.out.print(stone[board[i][j] + 1] + "|");
}
if (i == 2) {
System.out.println("\n └─┴─┴─┘");
} else {
System.out.println("\n ├─┼─┼─┤");
}
}
}

}



package game;

import java.sql.*;

public class MyDb {

public void myInsert(int game, int y, int x, int count) {
try {
// 1.JDBC Driver の登録
Class.forName("com.mysql.jdbc.Driver").newInstance();

// 2.データベースへの接続
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost/game_db", "root", "rootdayo");

// 3.SQL ステートメント・オブジェクトの作成
String query = "insert into game_tb(game,y,x,count) VALUES (?,?,?,?)";
PreparedStatement pstmt = con.prepareStatement(query);

// 各カラムに登録するデータをセット
pstmt.setInt(1, game);
pstmt.setInt(2, y);
pstmt.setInt(3, x);
pstmt.setInt(4, count);

pstmt.execute();

pstmt.close();
con.close();

} catch (SQLException e1) {
System.out.println("SQLException: " + e1.getMessage());
System.out.println(" SQLState: " + e1.getSQLState());
System.out.println(" VendorError: " + e1.getErrorCode());
} catch (Exception e2) {
System.out.println("Exception: " + e2.getMessage());
}
}

public int getGameFromDB() {

int game = 0;

try {

// 1.JDBC Driver の登録
Class.forName("com.mysql.jdbc.Driver").newInstance();

// 2.データベースへの接続
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost/game_db", "root", "rootdayo");

// 3.SQL ステートメント・オブジェクトの作成
Statement stmt = con.createStatement();
// 4.SQL ステートメントの発行
ResultSet rs = stmt.executeQuery("SELECT game from game_tb");
// 5.結果の出力
while (rs.next()) {
game = rs.getInt("game");
}

// 6.データベースのクローズ
rs.close();
stmt.close();
con.close();

} catch (SQLException e1) {
System.out.println("SQLException: " + e1.getMessage());
System.out.println(" SQLState: " + e1.getSQLState());
System.out.println(" VendorError: " + e1.getErrorCode());
} catch (Exception e2) {
System.out.println("Exception: " + e2.getMessage());
}

return game + 1;
}

public ResultSet getRs(int game) {
ResultSet rs = null;
try {

// 1.JDBC Driver の登録
Class.forName("com.mysql.jdbc.Driver").newInstance();

// 2.データベースへの接続
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost/game_db", "root", "rootdayo");

// 3.SQL ステートメント・オブジェクトの作成
Statement stmt = con.createStatement();
// 4.SQL ステートメントの発行
rs = stmt.executeQuery("select * from game_tb where game = " +
game + " order by count asc");


} catch (SQLException e1) {
System.out.println("SQLException: " + e1.getMessage());
System.out.println(" SQLState: " + e1.getSQLState());
System.out.println(" VendorError: " + e1.getErrorCode());
} catch (Exception e2) {
System.out.println("Exception: " + e2.getMessage());
}

return rs;
}
}

Oracle マスターモード
マスターとってからOracle触ってねぇー

と思ってたら、仕事が入ってきた。開発環境にデータ、インサートするだけだが。

帰ってきてまで MySQLさわる気がなくなったり、なくならなかったり・・・


浅いコピーと深いコピー
深いコピーじゃないと意味がない、というかえらい思い違いのバグに陥って超はまりそうなのに、浅い方しかメソッド用意されてないんですか??

参考資料:
JavaFAQ: オブジェクトのコピー - clone
オブジェクトの複写
Javaの“常識”、“非常識” 第4回 - ITアーキテクト
プログラムが書きたい
【参考資料】
Java 入門 | JDBC | MySQL ドライバー: MM.MySQL

MySQL V5 ダウンロード~インストール - [データベース]All About


意味不明に環境設定に戸惑った。
おとなしくインストール時に出されたメッセージ読めばよかった。

ということで続きは明日(日付まわってもう今日か・・・)、働いた後でか・・・
ちょっとだけオブジェクト指向になってきた(?)
ちょっとだけオブジェクト指向ができるようになってきた気がする。
(気がするだけかも)

○×ゲーム。
コンピュータ対コンピュータ。
Humanクラスも作ろうとしたけど、やめとこう。

まさか、ほぼ参照物なしでここまでJavaが書けるようになるとは、学生のときは露ほどにも感じてなかった。
いや、まさかJavaになるとは。。。 ってそのことはもういいかw


以下、どうしても書きたくなったので 帰宅後2時間で作成。
石を置けるかどうかの判定と勝利判定(終了判定)と出力部分は過去のもの(C++)を流用。

クラスの掲載順番は適当です。
Javadoc用のコメントはいきなり力尽きました。
package game;

public class Board {
/** 盤 */
private int[][] board = new int[3][3];

private int count;

public Board() {
for (int y = 0; y < 3; y++) {
for (int x = 0; x < 3; x++) {
board[y][x] = Mark.EMP;
}
}

count = 0;
}

public boolean isPut(int y, int x) {
if (board[y][x] == Mark.EMP) {
return true;
} else {
return false;
}
}

public int isEnd() {
int yoko = 0;
int tate = 0;
int naname1 = 0;
int naname2 = 0;

for (int i = 0; i < 3; i++) {
yoko = tate = 0;
for (int j = 0; j < 3; j++) {
yoko += board[i][j];
tate += board[j][i];
}
naname1 += board[i][i];
if (yoko == 3 || yoko == -3) {
return yoko;
}
if (tate == 3 || tate == -3) {
return tate;
}
naname2 += board[i][2 - i];
}

if (naname1 == 3 || naname1 == -3) {
return naname1;
}

if (naname2 == 3 || naname2 == -3) {
return naname2;
}

if (count == 9) {
return count;
}

return Mark.EMP;
}

public void put(int y, int x, int m) {
board[y][x] = m;
count++;
}

public void show() {
String stone[] = { "O", " ", "×" };

System.out.println(" A B C");
System.out.println(" ┌─┬─┬─┐");
for (int i = 0; i < 3; i++) {
System.out.print((i + 1) + "|");
for (int j = 0; j < 3; j++) {
System.out.print(stone[board[i][j] + 1] + "|");
}
if (i == 2) {
System.out.println("\n └─┴─┴─┘");
} else {
System.out.println("\n ├─┼─┼─┤");
}
}
}

}


package game;

public class Mark {
public static int MARU = -1;

public static int EMP = 0;

public static int BATU = 1;
}



package game;

public class Human extends Player {

public Human(int mark, Board board) {
this.mark = mark;
this.board = board;
}

public void put() {
// 未実装
}
}



package game;

public class Senjou {

/**
* @param args
*/
public static void main(String[] args) {
Board board = new Board();
Player com1 = new Com(Mark.MARU, board);
Player com2 = new Com(Mark.BATU, board);
Player player = com1;
int count = 0;

while (!((board.isEnd() == Mark.MARU * 3)
|| (board.isEnd() == Mark.BATU * 3) || (board.isEnd() == 9))) {
if (count % 2 == 0) {
player = com1;
} else {
player = com2;
}
count++;
player.put();
board.show();
}

switch (board.isEnd()) {
case -3:
System.out.println("○の勝利!!!");
break;
case 3:
System.out.println("×の勝利!!!");
break;
case 9:
System.out.println("勝負がつきませんでした・・・");
}

}
}



package game;

public class Com extends Player {

public Com(int mark, Board board) {
this.mark = mark;
this.board = board;
}

public void put() {
int y;
int x;
do {
y = (int) (Math.random() * 10) % 3;
x = (int) (Math.random() * 10) % 3;
} while (!board.isPut(y, x));

board.put(y, x, mark);

}
}



package game;

abstract class Player {
int mark;
Board board;

public abstract void put();
}
エクセルの印刷
Excel、WYSIWYG じゃねぇ。。。

どういうことなんだ


What You See Is What You Get

俺に、見てるものをくれませんか・・・


そうか、表計算のためのソフトだからWYSIWYGじゃないんだ。
って、効率悪すぎる。。。。
うーん
本日とったスクリーンショットの数 40

エクセルを方眼紙の代わりに使った時間 11時間

負けそうになった心と戦った回数 5回
やべぇ
どうでもいいがプログラミングがしたい(いや、どうでもよくないな)。

止らなくなるので、ぐっとこらえた休日であった。
そろそろ
ハードウェアにも興味を出さんといかんようだな。
というかガジェットか。

ケータイに赤外線ついてないのは少々まずいのかもしれない。

まさか、ろんごん先生があれを買うとは思わんかった。
さすが組み込み系エンジニア。
平和な1日
070908_2049~01.jpg

Java EE 関係の本を読む。
飲んだコーヒーの数、2本。


隣の席で、3人のなにやら楽しそうな会議が行われていた。

「それってWeb2.0的じゃない?」
「いや、それ 6.0ぐらいいってるよ」
「ははは(笑)」

「おなか空かない?」
「よし、じゃあ飯食べに行こうか」
「次の店では設計を考えよう」

東京ってWeb関係の人、多いんだなぁと思いながら、
Javaの本を読み。バッチ処理を書く2.0な(?)システムエンジニア(修行中)。

この飲んだコーヒーも毎日のJavaプログラムとテストで飲めているのかと思うと少し感慨深い。



# Webなんてものがこの世にあったなぁ・・・ と思う今日この頃
# プログラムって月次とかで動くもんじゃなかったけ・・・
ブログ検索

プロフィール

ビンゴ中西
Perlが好きである。
プログラミング言語のほとんどは独学。独学の過程で多くのプログラム仲間にも色々教わりました。

FC2カウンター

カレンダー

08 | 2007/09 | 10
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -

ブロとも申請フォーム

この人とブロともになる

| ホーム | 次のページ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。