2008年3月12日水曜日

Breath stop

午前中新宿へ向かう.気が重い.なんでかって?いつもは横浜方面の下りだけど,新宿に行くためには品川方面の上がり電車に乗らないとならないから.朝(8時過ぎ)の京浜東北線の上り電車はなまら混む.蒲田駅で駅員さんに押されて無理やり乗った電車.具合が悪くなってきたのでつぎの大森駅で降りた.なんでこんな辛いことを我慢しないとならないのか理解できないもの.なんで周りの人達は平気な顔してるんだろ?
ぼくは閉所恐怖症.おまけに対人恐怖症.こんな混んでる電車に乗るのは拷問以外のなにものでもない.あーあ,電車に乗らなくてもいい方法はないもんかな?大体,自分でコントロールできない乗り物ってあんまり好きじゃない.自転車乗ってるほうが楽チンチンだ.仕事場がもうちょっと近くにあれば自転車で通勤するんだけどなー.ん?引越し?うーん,ちょっと考えよう.

目が痒い.ブルーベリーで乗りきるべ.アントシアニーーーーン!

2008年3月11日火曜日

Tune making

雑誌を見てたら.Rolandの“EDIROL”っていうコンパクトな24ビットのオーディオ・キャプチャーの広告が載っていた.パソコンとUSB接続できて電源がいらないのかー.なんかスマートでおしゃれ.昔,曲作りしてたときはアンプとマイクを(近所迷惑にならないように)風呂場やトイレにセットしてTASCAMの4chミキサー(カセットテープで録音できるタイプ)で録音したりしてたけど,これならギターをインターフェースに直結してもゲインが落ちたりしないみたいだから,そんな苦労はいらないのね.ふーん.実物を触ってないんで,どんなもんかわかんないけれど,面白そうだな.ちょっとした曲作りとかに便利そうだし.今度アキバに行った帰りに御茶ノ水に寄って見てこようかな?

でも,ギターはスタジオででっかい音出すのがイチバン.爆音サイコー!!!

2008年3月10日月曜日

fell down

出勤途中,蒲田駅の階段で滑って怪我してしまった.この季節,外に出ると涙が止まらなくて,ハンカチで目を押さえて階段を降りてる最中に踏み外してしまったのさ-_-# まるで,階段で滑り込みをするような体勢で右足をグリっとこすり付けちゃった.朝から雨が降っていて階段が濡れてたせいもあったけど,階段でこけるなんて生まれてはじめて@@.うーん,足腰が弱くなってるんだろうか? ま,最近サイクリングもご無沙汰だったから,ちょっと体が鈍ってるのかもしんない.あ,それと最近ご飯を朝昼晩しっかり食べて,チョコレートや煎餅を間食してるから,ちょっとメタボ体形になってきてるなー.ズボンがきつくなってきてるもんね^^;ちょっと運動したほうがいいみたい.うし,たまにはバットで素振りでもするべ.

家の中で素振り.気を抜けない.ブンブン,キャッホーーー!

2008年3月9日日曜日

Please take care

改修工事中の蒲田駅.工事のためJRと東急の連絡通路が狭くなって,普段の混雑がより一層はげしくなってる.以前は,この通路にあった“KIWAMI”っていうラーメン屋さんで出勤前によくラーメンを食べてた.あっさりした東京風の醤油ラーメンが290円.多いときは週に4回くらい食べてた^^;夏は冷やしが多かったけど,あえて汗をダラダラ垂らしながら食べる熱いラーメンがこれまた美味しい(ん?お前はMか?って.はい,たぶんMです^^;).お酒を飲んだ後にラーメンが無性に食べたくなることがあるけれど,朝一で食べるラーメンもなかなかうんまい.二日酔いの朝にラーメンを食べると,なぜかその日は回復が早い.気のせいかもしんないけど.そういえば,20年前東横線の学芸大駅のしなそば屋さんのラーメンをよく食べてたなー(お店の名前は忘れた).あっさり醤油に細めの麺.ちょっとニンニクが効いててうんまかった♪今でもあるんだべか?

ラーメンとカレーがあれば,あとはなんにもいらない.庶民サイコーーー!

2008年3月8日土曜日

Object-oriented

オブジェクト指向,モデルとモデリングの考え方についてちょっと考察してみるべか.






ソフトウェア開発において,オブジェクト指向“OO”といえば,

- オブジェクト指向言語
- オブジェクト指向プログラミング
- オブジェクト指向データベース
- オブジェクト指向分析
- オブジェクト指向設計

など,いろんな言葉で表現されるものがありますが,その明確な定義は存在しないと言われています.
ソフトウェアに求められる要件としては,

- 正確さ:正しく作業を実行すること
- 頑丈さ:異常な条件のもとで適切に対応できること
- 拡張性:仕様の変更にソフトウェアが対応しやすいこと
- 再利用性:多様なアプリケーションでソフトウェアが利用できること

などが挙げられます.構造化プログラミングは,プログラミングの機能を幾つかの単位に分ける(サブルーチンによって詳細な記述を行う)C言語が代表ですが,オブジェクト指向プログラミングは,基本的には構造化プログラミングの発展形であり,関連性の強い“データ”と“機能”をひとまとめにするものです.ここでのオブジェクトとは,単にロジックとデータを1つにまとめたものではなく,オブジェクトの共同体の責任あるメンバーとなります.オブジェクト指向プログラミングのアイディアとしては,カプセル化(オブジェクト内のデータや機能を外から見えなくし,外部に公開された機能を通じてオブジェクトにアクセスできる),継承,ポリモフィズム(オブジェクトへの操作が呼び出し側ではなく受け手によって決定される)があります.つぎにクラスとインスタンスですが,クラスは抽象的なもの(例えば銀行口座),インスタンスはクラスから生成される具体的なもの(例えばteruの銀行口座)であらわされます.

オブジェクトの要件としては,つぎの3つがあります.

- 状態(state)
オブジェクトが内部で保持している値.Javaではフィールド(インスタンス変数)に対応
- 振る舞い(behavior)
オブジェクトが何らかの処理をすること.Javaではメソッドに対応.
- アイデンティティ(identity)
あるオブジェクトとほかのオブジェクトを区別できるようにすること.オブジェクトはIDを持つ.JavaではIDを直接的に触れることはできない.

ソフトウェア開発の基本的な流れは,実現したい目的があり,その目的を実現するためにどのようなソフトウェアを作成すべきか検討し,最終的にはプログラムが作成され,目的が実現されることになります.ここで,ある問題が発生します.それは実現したい目的をいきなりプログラムに変換することが大変だというギャップの存在です.
ここで現実世界の事象をソフトウェアで表現できるように抽象化していくモデルとモデリングという手法を経てからプログラミングを行うという方法が考え出されました.
モデルは,大きくつぎのように分類されます.

・問題領域モデル
- やりたいこと
- ドメイン分析モデル
- 要求分析モデル

・解決領域モデル
- やりかた
- システム分析モデル
- 設計モデル
- 実装モデル

ソフトウェア開発では,設計モデルと実装モデルをプログラミングすることになり,つぎのようなフェーズがあります.

・要求分析
- どのようなソフトウェアを作るのかはっきりさせる
・設計
- 要求分析の結果を実現するためにソフトウェアを設計する
・実装
- 設計に従ってプログラムを作成する
・テスト
- プログラムがうまく動いているかチェックする

開発プロセスでは,こうした各フェーズを組み合わせて,繰り返しながら開発を進めていくことになります.開発プロセスは大まかにつぎのように分類されます.

・ウォーターフォール型
システム全体の要求分析・設計・実装・テストを順番にこなしていく.ソフトウェアがきちんと動いているかどうか,最終段階までよくわからないということで批判されることがありますが,見積もりをとりやすいこと,フェーズごとに担当を変える事が可能であることから,現在最も使われることの多い開発プロセスです.

・反復型
機能ごとに要求分析・設計・実装・テストを順番にこなしていく.
- 段階的リリース:できたものから順にリリースしていく
- タイムボックス:設定された各反復期間内で開発できるものをこなす.

1990年代前半,Boochの“Booch法”やRambaughの“OMT法”,Jacobsonの“Objectory法”といったさまざまなオブジェクト指向開発方法論が提案・利用されていて,これらをまとめたものは統一プロセス:Unified Processと呼ばれています(この3人は“スリーアミーゴ”と呼ばれています).統一プロセスの商用版としては,Rational社(現IBM)のRUP(Rational Unified Process),サブセットとしてIBMからEclipse Foundationに寄贈されたオープンソースのOpenUP/Basicがあります.また,最近は“アジャイル(agile)”という俊敏な反復型開発プロセスのジャンルが注目されています.アジャイル開発プロセスの特徴はつぎのとおりです.

・個人や相互作用(プロセスやツールよりも)
- Individuals and interactions over processes and tools
・動くソフトウェア(包括的なドキュメントよりも)
- Working software over comprehensive documentation
・顧客との強調(契約交渉よりも)
- Customer collaboration over contract negotiation
・変化への対応(契約に従うよりも)
- Responding to change over following a plan
アジャイル宣言より

ここでUML(Unified Modeling Language(統一モデリング言語)の登場です.UMLとは,モデリングを表現するためのグラフィカルな言語で,さまざまな図でモデリングに関するの一側面を表現するものです.UMLの歴史は,1996年 UML 1.0,2003年 UML 1.5,2005年 UML 2.0というバージョンを経ています.UML 2.0ではつぎの図(ダイヤグラム)が用いられます.

・アクティビティ図
・オブジェクト図
・クラス図
・コミュニケーション図
・コンポーネント図
・コンポジット図
・シーケンス図
・ステートマシン図
・相互作用概要図
・タイミング図
・配置図
・パッケージ図
・ユースケース図

ずいぶん沢山の図がありますが,UMLはずべての図を記述しなければならないわけではなく,基本的には必要なものだけ使えばよいことになっています.通常は“クラス図”,“シーケンス図”,“ユースケース図”の3つが中心になります.UMLは主に,スケッチ(ささっと書く),設計図(設計の意図を文書化),プログラミング言語(UMLの図がプログラムに変換される)として使われます.


しっかし,オブジェクト指向ってピンとこないな^^;

2008年3月7日金曜日

Starting MySQL

いきなりですが,今日はWindows XPのパソコンにRDBMSを管理,運用するための実装のひとつであるMySQL(マイエスキューエル)をインストールしてみようと思います.※MySQLはスウェーデンの“MySQL AB”が保持していたオープンソースプロジェクトでしたが,2008年2月26日にサン・マイクロシステムズに買収されました.

★MySQLのインストールとサービス起動
MySQLのサイトでユーザ登録をしてダウンロードしたファイルをダブルクリック.

“MySQL Server Instance Configuration Wizard”では,つぎの項目にチェックを付けます(root password は忘れないように)

- Developer Machine
- Multifunctional Database
- Decision Support(DSS)/OLAP
- Enable TCP/IP Networking(Port Number:3306)
- Enable Strict Mode
- Best Support Multilingualism

つぎにMySQLをインストールしたフォルダにあるmy.iniのdefault-character-set の設定をつぎの値に編集します.

[client]
default-character-set=sjis
[mysqld]
default-character-set=utf8

サービスを起動するには,コマンドプロンプトから net start コマンドを実行します.

C:> net start MySQL

※上記はサービス名を“MySQL”でインストールした場合.

★MySQL用のJDBCドライバのインストール
MySQLのサイトからJDBCドライバをダウンロードして適切なフォルダ(“lib”や“common”)へコピーします.最新版ならmysql-connector-java-5.1.5.zip中のmysql-connector-java-5.1.5-bin.jarになります.

★データベースとユーザーの作成
まず,コマンドプロンプトからrootでmysqlコマンドラインクライアントを起動します.

c:\> mysql -u root -p******

※-pのすぐ後にパスワードを入力します.

データベース:eadb を作成.

mysql> CREATE DATABASE eadb;

作成したデータベース:eadb にユーザー名:teru が操作できるように設定.

mysql> GRANT ALL PRIVILEGES
-> ON eadb.*
-> TO teru@localhost
-> IDENTIFIED BY '******';

teru@localhostがユーザー名+アクセスするホスト名
IDENTIFIED BY '******'がパスワード

★データベース:eadb にテーブル:gakuseki_name を作成,データを挿入

mysql> use eadb;
mysql> DROP TABLE gakuseki_name;
mysql> CREATE TABLE gakuseki_name
-> (
-> id INTEGER AUTO_INCREMENT PRIMARY KEY,
-> gakuseki VARCHAR(10) UNIQUE,
-> name TEXT
-> );
-> INSERT INTO gakuseki_name (gakuseki,name) VALUES ('0001','teru');

★MySQLの操作

さっきのテーブル作成,データ挿入という一連の操作は,ファイルからインポートすることができます.

imp.sqlというファイルにつぎの操作を保存.
---
use eadb;
DROP TABLE gakuseki_name;
CREATE TABLE gakuseki_name
(
id INTEGER AUTO_INCREMENT PRIMARY KEY,
gakuseki VARCHAR(10) UNIQUE,
name TEXT
);
INSERT INTO gakuseki_name (gakuseki,name) VALUES ('0001','teru');
-----

つぎのコマンドを実行することでインポートされます.

mysql> \. imp.sql


以降は,MySQLを操作するためによく使用されるコマンドを紹介します.

まず,テーブルを表示してみましょう.

mysql> select * from gakuseki_name;

つぎにデータベースを表示してみましょう.

mysql> show databases;

カレントデータベースの変更はつぎのとおり.

mysql> use eadb;

カレントデータベースのテーブルを表示.

mysql> show tables;

mysqlコマンドのヘルプ表示.

mysql> help

SQLコマンドのヘルプ表示(select や create など入力).

mysql> help SQLのコマンドを入力

mysqlクライアントの終了.

mysql> \q


mysqlコマンドは,PostgreSQLのコマンドと非常によく似ています.

あ,せっかくJDBCインストールしたんで,次回は javaプログラムでデータベースにあくせく,じゃなくて,アクセスしてみましょう.ちょっとサンプルを書いときますね(2行にまたがってるステートメントに注意!).

ViewTableJDBCTest.java
----

import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/*
* ViewTableJDBCTest.java
*/

/**
* @author : teru
*
MySQLのデータベース(eadb)にテーブルを作成
use eadb;
DROP TABLE gakuseki_name;
CREATE TABLE gakuseki_name
(
id INTEGER AUTO_INCREMENT PRIMARY KEY,
gakuseki VARCHAR(10) UNIQUE,
name TEXT
);
INSERT INTO gakuseki_name (gakuseki,name)
VALUES ('0001','teru');

JDBCで必要なパラメータ
drv: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/eadb
usr: teru
pwd: ******

コンパイル
javac -classpath mysql-connector-java-5.1.5-bin.jar
ViewTableJDBCTest.java
実行
java -classpath mysql-connector-java-5.1.5-bin.jar;.
ViewTableJDBCTest

*/
public class ViewTableJDBCTest
{

public static void main(String args[])
{
Connection con = null;
PreparedStatement prepStmt = null;
try
{
// (1) データベースとの接続の確立
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/" +
"eadb?characterEncoding=UTF-8";
con = DriverManager.getConnection
(url, "teru", "******");

// (2) SQLの実行
String selectStatement =
"SELECT * " +
"FROM gakuseki_name";
prepStmt = con.prepareStatement(selectStatement);
ResultSet rs = prepStmt.executeQuery();

// (3) SQLの実行結果の処理
while (rs.next())
{
System.out.print(rs.getString
("gakuseki") + "\t");
System.out.print(rs.getString("name") );
}

// (4) 後始末
rs.close();
rs = null;
prepStmt.close();
prepStmt = null;
con.close();
con = null;

}
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
try
{
if (prepStmt != null)
prepStmt.close();
}
catch (SQLException e)
{
e.printStackTrace();
}

try
{
if (con != null)
con.close();
}
catch (SQLException e)
{
e.printStackTrace();
}
}
}
}

2008年3月6日木曜日

Caramel pudding

お昼.おにぎりで済ませることが多いんだけど,ちょっと趣向を変えてみた.コンビニでたまごロールとプリンを購入.学校給食みたい.そういえば,プリンなんて学校給食の時ぐらいしか口にしなかったな.田舎の実家は自営業(漁業)で,家は海の目の前(波打ち際まで100mくらいの場所)に建ってた.近所には小さな食料品店が1軒だけ.自動販売機はない.お金を持って外出するのは年に一回のお祭りのときだけだったと思う.駄菓子やみたいなお店が近所にあったら,たぶん通ったりしてたんだろうな.でもなかった.あと,家の食事の献立は和風がメインで,ハンバーグやオムライスなんて出てこなかった.焼き魚や煮付け,刺身ばっか.冬になると工場で加工しているウニをよく食べてたっけ.あ,たまにジンギスカンとかも.カレーもたまに出てきたけど,具はサバやほっき貝が入ってたな.おやつは蒸かしただけの芋が多かった.今思うと田舎でジンギスカン以外の肉を食べた記憶がほとんどない.ステーキやしゃぶしゃぶ食べたのって,上京してからだし.ハンバーガーもだ.初めてマック入ったときは緊張したなー.って今でも緊張してるな^^;

プリン,茶碗蒸しみたいでうんまい♪ズビズバー,パパパヤー!