static public double calulateAVG( double[] val ) {
double sum = 0;
for( double d : val ) {
sum += d;
}
return sum/val.length;
}
2007年11月29日
平均値取得
2007年11月28日
もうすぐ11月も終わりですね。
気づくと、あと数日で11月も終わり、いよいよ師走ですね。
なんか歳を取ると、本当に時間が早く進みます。
今年中にやることを整理しないと。。。
なんか歳を取ると、本当に時間が早く進みます。
今年中にやることを整理しないと。。。

2007年11月27日
長い半角文字列を一定の長さで分割して、HTMLの改行を挿入します。
$str = "aaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbcccccccccccc";
preg_match_all("/.{10}|.+$/", $str, $out);
$res = implode("<br>", $out[0]);
preg_match_all("/.{10}|.+$/", $str, $out);
$res = implode("<br>", $out[0]);
2007年11月26日
phpのimplode関数みたいな
public static String implode(String glue, String[] pieces) {
StringBuffer buf = new StringBuffer();
for( int i=0; ; i++ ) {
buf.append(pieces[i]);
if( i == pieces.length -1 ) {
break;
}
buf.append(glue);
}
return buf.toString();
}
2007年11月25日
2007年11月23日
今日は勤労感謝の日
ですね。
昔、とある開発プロジェクトで開発リーダーをやっていたときのこと。まあ、ご他聞に漏れずファイアーな感じだったのですが。。。
11月22日の夜の進捗会議で、各サブシステムチームの開発リーダーが進捗報告をした後に、プロジェクトマネージャーが「明日、休日出勤するチームは?」と聞きました。全チームが「出ます」という返答をしました。その時、誰かが「明日は何の祝日だっけ?」と。
それに対して誰かが、
「勤労感謝の日です。」
と言いました。
全員が苦笑するという、微笑ましい時が流れました。
今は懐かしい思い出です。
昔、とある開発プロジェクトで開発リーダーをやっていたときのこと。まあ、ご他聞に漏れずファイアーな感じだったのですが。。。
11月22日の夜の進捗会議で、各サブシステムチームの開発リーダーが進捗報告をした後に、プロジェクトマネージャーが「明日、休日出勤するチームは?」と聞きました。全チームが「出ます」という返答をしました。その時、誰かが「明日は何の祝日だっけ?」と。
それに対して誰かが、
「勤労感謝の日です。」
と言いました。
全員が苦笑するという、微笑ましい時が流れました。
今は懐かしい思い出です。
2007年11月22日
色々な人が
自分に自信(よりどころ)が無いために、他人に乱暴な言葉を投げる人がいます。投げられた方は正直堪りませんが、ある意味不幸な人である気もします。
社会に出てから、そんな人とニアミスすることは何回もあります。でも、いまだに対応方法が確立していない私は未熟者です。
そんなことを思う今日このごろです。。。
社会に出てから、そんな人とニアミスすることは何回もあります。でも、いまだに対応方法が確立していない私は未熟者です。
そんなことを思う今日このごろです。。。

2007年11月21日
現在日付取得、フォーマット指定
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd (EEE) HH:mm:ss");
String str = sdf.format(new Date());
System.out.println(str);
↓
2007/11/21 (水) 21:38:05
String str = sdf.format(new Date());
System.out.println(str);
↓
2007/11/21 (水) 21:38:05
2007年11月20日
いいねえ〜iBATIS
iBATISいいんです。
私的には、Hibernateより断然使いやすいです。
HibernateはXML地獄のHQL地獄の、ダブル地獄という感じでしたが、iBATISは潔くSQLを隠蔽していないのがいいです。
Eclipseプラグインの「Abator」を使うとDTOとDAO、SQLマッピングファイルを自動生成してくれるのでさらにOKな感じです。
AbatorのEclipseダウンロードサイト
http://ibatis.apache.org/tools/abator
「使用者の技術レベルに関わらず使いやすいもの」ではなく「技術レベルの高い人にマンネリな作業をさせないもの」であるフレームワークの方が目的がはっきりしていて、私は好きです。
HibernateのHQLなんてものは、SQLを使える人間にとっては邪魔なだけです。
私的には、Hibernateより断然使いやすいです。
HibernateはXML地獄のHQL地獄の、ダブル地獄という感じでしたが、iBATISは潔くSQLを隠蔽していないのがいいです。
Eclipseプラグインの「Abator」を使うとDTOとDAO、SQLマッピングファイルを自動生成してくれるのでさらにOKな感じです。
AbatorのEclipseダウンロードサイト
http://ibatis.apache.org/tools/abator
「使用者の技術レベルに関わらず使いやすいもの」ではなく「技術レベルの高い人にマンネリな作業をさせないもの」であるフレームワークの方が目的がはっきりしていて、私は好きです。
HibernateのHQLなんてものは、SQLを使える人間にとっては邪魔なだけです。
2007年11月19日
空文字列を無視しない文字列分割
StringTokenizerクラスやC言語のstrok関数でも似たようなことがあるのですが、、、
String str = ",2,3,,";
String[] strs = str.split(",");
↓
要素数は3つになります。
strs[0]・・・""
strs[1]・・・"2"
strs[2]・・・"3"
後続の空文字列は無視される仕様ということなのです。
これって、不便なことが多いのですよね。今までは、文字列分割処理を自作していました。
ところが、実は便利なメソッドがあることを今日しりました。
String str = ",2,3,,";
String[] strs = str.split(",",5);
↓
要素数は5つになります。
strs[0]・・・""
strs[1]・・・"2"
strs[2]・・・"3"
strs[3]・・・""
strs[4]・・・""
splitメソッドの第二引数は「期待する要素数」ということになります。
これは地味に助かります。ぐっじょぶ!
String str = ",2,3,,";
String[] strs = str.split(",");
↓
要素数は3つになります。
strs[0]・・・""
strs[1]・・・"2"
strs[2]・・・"3"
後続の空文字列は無視される仕様ということなのです。
これって、不便なことが多いのですよね。今までは、文字列分割処理を自作していました。
ところが、実は便利なメソッドがあることを今日しりました。
String str = ",2,3,,";
String[] strs = str.split(",",5);
↓
要素数は5つになります。
strs[0]・・・""
strs[1]・・・"2"
strs[2]・・・"3"
strs[3]・・・""
strs[4]・・・""
splitメソッドの第二引数は「期待する要素数」ということになります。
これは地味に助かります。ぐっじょぶ!

2007年11月18日
鶏肉とキャベツのスープ
昨日に深酒してしまって、胃腸が駄目駄目なので、胃腸に優しい野菜メインの煮物を作りました。
鶏肉とキャベツのスープ
【材料(4人前ぐらい)】
・キャベツ 1/4
・じゃがいも 3個
・エリンギ 3本
・たまねぎ 2個
・とりもも肉 200gぐらい
・にんにく 1個
・塩
・こしょう
[スープ]
・水 3カップ
・白ワイン 1/2カップ
・ブイヨン 適量
【プロトコル】
(1)とりあえず[スープ] を一回煮立たせ作っておきます。
(2)野菜・肉は食べやすい大きさに適当に切る。
(3)鍋にスープ・肉・野菜をいれます。
(4)中火で煮ます。
(5)塩・コショウで調味します。
(6)出来上がりです。
鶏肉とキャベツのスープ
【材料(4人前ぐらい)】
・キャベツ 1/4
・じゃがいも 3個
・エリンギ 3本
・たまねぎ 2個
・とりもも肉 200gぐらい
・にんにく 1個
・塩
・こしょう
[スープ]
・水 3カップ
・白ワイン 1/2カップ
・ブイヨン 適量
【プロトコル】
(1)とりあえず[スープ] を一回煮立たせ作っておきます。
(2)野菜・肉は食べやすい大きさに適当に切る。
(3)鍋にスープ・肉・野菜をいれます。
(4)中火で煮ます。
(5)塩・コショウで調味します。
(6)出来上がりです。
2007年11月17日
たんたかた〜ん♪
焼酎が急に飲みたくなったので、コンビニに走って「鍛高譚」と氷を買ってきました。
焼酎は普段、芋焼酎を好む人なのですが、ちょっと今日は気まぐれで紫蘇焼酎を嗜んでいます。
ロックで飲んでしますが、随分さっぱりしてしますね。つまみとしては、「うるめいわし」なんか合いそうですね。
焼酎は普段、芋焼酎を好む人なのですが、ちょっと今日は気まぐれで紫蘇焼酎を嗜んでいます。
ロックで飲んでしますが、随分さっぱりしてしますね。つまみとしては、「うるめいわし」なんか合いそうですね。

2007年11月16日
PHPの5C問題
<?php
print '可能';
?>
これをSJISエンコードで実行するとパースエラーになります。
SJISの'能'の文字コードの2バイト目が0x5cなのですが、このコードはASCIIにおけるバックスラッシュ(\)と同じなので、PHPエンジンからすると
print '0x94\';
となり、'がエスケープされてパースエラーになってしまうそうです。
SJISにはこのような地雷のような、マルチバイトがいくつか存在するそうです。最近構築するシステムは基本的にUTF-8なので、自分が遭遇したことはないのですが、他の人の質問に答えるために調べていて知りました。
これって、PHPでSJISは事実上扱えないと言うこと?
print '可能';
?>
これをSJISエンコードで実行するとパースエラーになります。
SJISの'能'の文字コードの2バイト目が0x5cなのですが、このコードはASCIIにおけるバックスラッシュ(\)と同じなので、PHPエンジンからすると
print '0x94\';
となり、'がエスケープされてパースエラーになってしまうそうです。
SJISにはこのような地雷のような、マルチバイトがいくつか存在するそうです。最近構築するシステムは基本的にUTF-8なので、自分が遭遇したことはないのですが、他の人の質問に答えるために調べていて知りました。
これって、PHPでSJISは事実上扱えないと言うこと?
さて、どうしよう。
めっきり寒くなりましたね。
布団の中の幸せ空間から抜け出すのに苦労します。
それは、さておきJavaでデータベースへのデータインポートツールを作ることになりました。要件的にはORマッピングのフレームワークを使えそうなのですが、どうしようかなと思っている次第で。
使うとするとHibernateかiBATISあたりかと思っていますが、Hibernateは以前にちょっと評価した時にあまりの設定の煩雑さにやられてしまっているので、iBATISかなと。
ただ、ORマッピングツール体制反対派としては、JDBCで手書きするとこともありだなあと。
布団の中の幸せ空間から抜け出すのに苦労します。
それは、さておきJavaでデータベースへのデータインポートツールを作ることになりました。要件的にはORマッピングのフレームワークを使えそうなのですが、どうしようかなと思っている次第で。
使うとするとHibernateかiBATISあたりかと思っていますが、Hibernateは以前にちょっと評価した時にあまりの設定の煩雑さにやられてしまっているので、iBATISかなと。
ただ、ORマッピングツール体制反対派としては、JDBCで手書きするとこともありだなあと。

2007年11月15日
テーブル命名規約について
調べてみました。
C:\usr\local\ruby\lib\ruby\gems\1.8\gems\activesupport-1.4.2\lib\active_support\inflections.rb
にありました(私の環境ではRubyをC:\usr\local\rubyにインストールしています)。
複数形化ルールを抜粋してみました。↓
inflect.plural(/$/, 's')
inflect.plural(/s$/i, 's')
inflect.plural(/(ax|test)is$/i, '\1es')
inflect.plural(/(octop|vir)us$/i, '\1i')
inflect.plural(/(alias|status)$/i, '\1es')
inflect.plural(/(bu)s$/i, '\1ses')
inflect.plural(/(buffal|tomat)o$/i, '\1oes')
inflect.plural(/([ti])um$/i, '\1a')
inflect.plural(/sis$/i, 'ses')
inflect.plural(/(?:([^f])fe|([lr])f)$/i, '\1\2ves')
inflect.plural(/(hive)$/i, '\1s')
inflect.plural(/([^aeiouy]|qu)y$/i, '\1ies')
inflect.plural(/(x|ch|ss|sh)$/i, '\1es')
inflect.plural(/(matr|vert|ind)ix|ex$/i, '\1ices')
inflect.plural(/([m|l])ouse$/i, '\1ice')
inflect.plural(/^(ox)$/i, '\1en')
inflect.plural(/(quiz)$/i, '\1zes')
なるほど、結構力技ですね。これって網羅しきれているのかなと思ってしまいますが、まあ欧米の人がやっているので大丈夫なのでしょう。
ただ、あれなんですね。これだとローマ字表記の場合は落とし穴にはまる場合もあるのですね。Railsのノリとしては、開発要件によってinflections.rbをカスタマイズするものらしいです。
C:\usr\local\ruby\lib\ruby\gems\1.8\gems\activesupport-1.4.2\lib\active_support\inflections.rb
にありました(私の環境ではRubyをC:\usr\local\rubyにインストールしています)。
複数形化ルールを抜粋してみました。↓
inflect.plural(/$/, 's')
inflect.plural(/s$/i, 's')
inflect.plural(/(ax|test)is$/i, '\1es')
inflect.plural(/(octop|vir)us$/i, '\1i')
inflect.plural(/(alias|status)$/i, '\1es')
inflect.plural(/(bu)s$/i, '\1ses')
inflect.plural(/(buffal|tomat)o$/i, '\1oes')
inflect.plural(/([ti])um$/i, '\1a')
inflect.plural(/sis$/i, 'ses')
inflect.plural(/(?:([^f])fe|([lr])f)$/i, '\1\2ves')
inflect.plural(/(hive)$/i, '\1s')
inflect.plural(/([^aeiouy]|qu)y$/i, '\1ies')
inflect.plural(/(x|ch|ss|sh)$/i, '\1es')
inflect.plural(/(matr|vert|ind)ix|ex$/i, '\1ices')
inflect.plural(/([m|l])ouse$/i, '\1ice')
inflect.plural(/^(ox)$/i, '\1en')
inflect.plural(/(quiz)$/i, '\1zes')
なるほど、結構力技ですね。これって網羅しきれているのかなと思ってしまいますが、まあ欧米の人がやっているので大丈夫なのでしょう。
ただ、あれなんですね。これだとローマ字表記の場合は落とし穴にはまる場合もあるのですね。Railsのノリとしては、開発要件によってinflections.rbをカスタマイズするものらしいです。
2007年11月14日
Ruby on Railsで単純アプリケーション開発1
とりあえず伝票テーブルと伝票明細テーブルのレイアウトはこんな感じでしょうか。商品マスタテーブルは、今回は除外しました。
テーブル名はRailsの規約に沿って複数形にしました。ためしにscaffoldしてみたらできたのでOKのようです。ローマ字表記でも単純に's'を付ければいいようですね(Railsのソースを今度ハックしてみよう)。
//伝票テーブル
CREATE TABLE denpyos (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
denpyo_no VARCHAR(10) NULL,
shohin_sum INTEGER UNSIGNED NULL,
kingaku_sum INTEGER UNSIGNED NULL,
denpyo_date TIMESTAMP NULL,
PRIMARY KEY(id)
);
//伝票明細テーブル
CREATE TABLE denpyo_meisais (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
denpyo_no VARCHAR(10) NULL,
meisai_no INTEGER UNSIGNED NULL,
shohin_name VARCHAR(128) NULL,
suryo INTEGER UNSIGNED NULL,
kingaku INTEGER UNSIGNED NULL,
PRIMARY KEY(id)
);
※伝票テーブル:伝票明細テーブル=1:N
また、従来のシステムであれば伝票番号(denpyo_no)をPKにするところですが、Railsのために"id"という列を付けています。
今までの開発経験から、「伝票番号」というのは業務的なもののためが単純な通番になることがなかったので、別途、Rails用にPK列を作りました。
これにより、思わぬところに影響が出たのですが、それはまた別の機会に・・・
テーブル名はRailsの規約に沿って複数形にしました。ためしにscaffoldしてみたらできたのでOKのようです。ローマ字表記でも単純に's'を付ければいいようですね(Railsのソースを今度ハックしてみよう)。
//伝票テーブル
CREATE TABLE denpyos (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
denpyo_no VARCHAR(10) NULL,
shohin_sum INTEGER UNSIGNED NULL,
kingaku_sum INTEGER UNSIGNED NULL,
denpyo_date TIMESTAMP NULL,
PRIMARY KEY(id)
);
//伝票明細テーブル
CREATE TABLE denpyo_meisais (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
denpyo_no VARCHAR(10) NULL,
meisai_no INTEGER UNSIGNED NULL,
shohin_name VARCHAR(128) NULL,
suryo INTEGER UNSIGNED NULL,
kingaku INTEGER UNSIGNED NULL,
PRIMARY KEY(id)
);
※伝票テーブル:伝票明細テーブル=1:N
また、従来のシステムであれば伝票番号(denpyo_no)をPKにするところですが、Railsのために"id"という列を付けています。
今までの開発経験から、「伝票番号」というのは業務的なもののためが単純な通番になることがなかったので、別途、Rails用にPK列を作りました。
これにより、思わぬところに影響が出たのですが、それはまた別の機会に・・・
BシェルでCSVファイルを処理しちゃいなよ
#!/bin/sh
OLDIFS=$IFS
IFS=,
while read ELE1 ELE2 ELE3
do
echo $ELE1
echo $ELE2
echo $ELE3
done < ./tmp.txt
IFS=$OLDIFS
exit
tmp.txtの内容は↓のようなCSV形式
a,b,c
d,e,f
2007年11月13日
ファイル名から拡張子を除きます。
public String removeExt(String file) {
int pos = file.lastIndexOf('.');
if (pos == -1) {
return file;
} else if (pos == 0) {
//先頭が「.」なら、そのまま返す
return file;
}
return file.substring(0, pos);
}
2007年11月12日
ちょっと時事ネタ
円高・ドル安が驀進中ですね。
それを受けた官房長官や経団連の会長の話として、「円が強くなっている」というようなことを言っていました。
が、
現在の状況は、ドル安の結果として円高になっているだけで、別に日本の評価が上がっているわけではないです。むしろ、輸出産業に頼っている日本経済にとっては、痛手にしかならないです。
ポジティブ過ぎるぜ、ハニー
それを受けた官房長官や経団連の会長の話として、「円が強くなっている」というようなことを言っていました。
が、
現在の状況は、ドル安の結果として円高になっているだけで、別に日本の評価が上がっているわけではないです。むしろ、輸出産業に頼っている日本経済にとっては、痛手にしかならないです。
ポジティブ過ぎるぜ、ハニー

2007年11月11日
Ruby on Railsアプリケーション開発するかなあ
この間、Railsについて色々と規約に反したことをやってみたりとかしていましたが、今度はRailsの規約(レール)の乗ってやってみたいと思います。
簡単な発注システムを作ってみようかと。
DBテーブルは、以下の感じかな。
伝票テーブル
伝票明細テーブル
商品マスタテーブル
簡単な発注システムを作ってみようかと。
DBテーブルは、以下の感じかな。
伝票テーブル
伝票明細テーブル
商品マスタテーブル