2009年02月28日

JavaでExcel仕様のCSVファイルの読み込みと表示

ExcelのCSV仕様に沿ったCSVファイルデータをJavaで分割・表示します。というソースを作成しようと思いましたが、既にあったので、紹介します。

OpenCsv「CSVReaderクラス」
http://opencsv.sourceforge.net/

【ExcelのCSV仕様】
エンクォート文字(")で囲まれた区切り文字(,)および改行はスキップします。
また、項目中のエンクォート文字(")の連続2個("")は、エンクォート文字1個(")に置き換えられます。
具体例:
47201,"900 ","900,""0000"
というデータは、
[47201] [900 ] [900,"0000]
のように分割されます。

【使用例】

import java.io.FileReader;

public class CsvFileReadSkeleton {

public static void main(String[] args) throws Exception {
CSVReader reader = new CSVReader(new FileReader("c:\\okinawa.csv"));
String [] nextLine;
int i=1;
while ((nextLine = reader.readNext()) != null) {
// nextLine[] is an array of values from the line
System.out.println("Row Number => " + i);
for( String data : nextLine ) {
System.out.println("[" + data + "]");
}
i++;
}
}
}
posted by 台北猫々 at 23:39| Comment(0) | TrackBack(1) | 技術メモ(Java)

2009年02月27日

TERASOLUNAで、全角文字→半角文字変換と半角文字→全角文字変換

NTTデータが公開しているTERASOLUNAフレームワークなんですが、中を見ると結構便利なユーティリティクラスがあります。
そんな中で、今回は全角文字→半角文字変換と半角文字→全角文字変換を使ってみます。

TERASOLUNAサイトのダウンロードページから、ブランクプロジェクトをダウンロードして適当な場所で解凍します。
そして、"terasoluna-spring-thin-blank\webapps\WEB-INF\lib\terasoluna-thin-server.jar"ファイルをEclipseプロジェクトに追加しましょう。

で、以下のソースを作成・実行するとTERASOLUNAによる文字変換を体験できます。ICUと比較して機能が限定されている分でしょうか、処理が軽い気がします。

import jp.terasoluna.fw.util.StringUtil;

public class TestTerasolunaStringUtil {

public static void main(String args[]) {

String src = "AaAアいろはアイウエイウエ";

//全角文字→半角文字に変換
System.out.println(src + "→★(全角文字→半角文字)★→" + StringUtil.zenkakuToHankaku(src));

//半角文字→全角文字に変換
System.out.println(src + "→★(半角文字→全角文字)★→" + StringUtil.hankakuToZenkaku(src));
}
}




AaAアいろはアイウエイウエ→★(全角文字→半角文字)★→AaAアいろはアイウエイウエ
AaAアいろはアイウエイウエ→★(半角文字→全角文字)★→AaAアいろはアイウエイウエ

と、なります。

ちなみにソースは、"terasoluna-spring-thin-blank\terasoluna\src\terasoluna-server4jweb-src_2.0.1.0.zip"にあります。
posted by 台北猫々 at 22:09| Comment(0) | TrackBack(0) | 技術メモ(Java)

2009年02月26日

Javaで、ICUで、文字変換

ICUサイトダウンロードページから、ICU4J(今回は"icu4j-4_0_1.jar")をダウンロードします。

EclipseプロジェクトにICU4JのJarを追加します。で、以下のソースを作成・実行するとICUによる文字変換を体験できます。


import com.ibm.icu.text.*;
import com.ibm.icu.util.*;

public class TestICU {

public static void main(String args[]) {

String src = "AaAアいろはアイウエイウエ";

//全角文字→半角文字に変換
Transliterator trF2H = Transliterator.getInstance("Fullwidth-Halfwidth");
System.out.println(src + "→★(全角文字→半角文字)★→" + trF2H.transliterate(src));

//半角文字→全角文字に変換
Transliterator trH2F = Transliterator.getInstance("Halfwidth-Fullwidth");
System.out.println(src + "→★(半角文字→全角文字)★→" + trH2F.transliterate(src));

//カタカナ→ひらがなに変換
Transliterator trK2H = Transliterator.getInstance("Katakana-Hiragana");
System.out.println(src + "→★(カタカナ→ひらがな)★→" + trK2H.transliterate(src));

//ひらがな→カタカナ変換
Transliterator trH2K = Transliterator.getInstance("Hiragana-Katakana");
System.out.println(src + "→★(ひらがな→カタカナ)★→" + trH2K.transliterate(src));

//ひらがな→ローマ字に変換
Transliterator trH2L = Transliterator.getInstance("Hiragana-Latin");
System.out.println(src + "→★(ひらがな→ローマ字)★→" + trH2L.transliterate(src));

}
}




AaAアいろはアイウエイウエ→★(全角文字→半角文字)★→AaAアいろはアイウエイウエ
AaAアいろはアイウエイウエ→★(半角文字→全角文字)★→AaAアいろはアイウエイウエ
AaAアいろはアイウエイウエ→★(カタカナ→ひらがな)★→AaAあいろはあいうえいうえ
AaAアいろはアイウエイウエ→★(ひらがな→カタカナ)★→AaAアイロハアイウエイウエ
AaAアいろはアイウエイウエ→★(ひらがな→ローマ字)★→AaAアirohaアイウエイウエ

となります。

ちなみに、


import org.apache.commons.collections.EnumerationUtils;

for(Object s : EnumerationUtils.toList(Transliterator.getAvailableIDs()) )
System.out.println(s);


↑で可能な変換のリストを閲覧できます(ただし、commons-collections-3.1.jarが必要)
変換できるリスト
Accents-Any
Any-Accents
Any-Publishing
Arabic-Latin
Armenian-Latin
Bengali-Devanagari
Bengali-Gujarati
Bengali-Gurmukhi
Bengali-Kannada
Bengali-Latin
Bengali-Malayalam
Bengali-Oriya
Bengali-Tamil
Bengali-Telugu
Cyrillic-Latin
Devanagari-Bengali
Devanagari-Gujarati
Devanagari-Gurmukhi
Devanagari-Kannada
Devanagari-Latin
Devanagari-Malayalam
Devanagari-Oriya
Devanagari-Tamil
Devanagari-Telugu
Digit-Tone
Fullwidth-Halfwidth
Georgian-Latin
Greek-Latin
Greek-Latin/UNGEGN
Gujarati-Bengali
Gujarati-Devanagari
Gujarati-Gurmukhi
Gujarati-Kannada
Gujarati-Latin
Gujarati-Malayalam
Gujarati-Oriya
Gujarati-Tamil
Gujarati-Telugu
Gurmukhi-Bengali
Gurmukhi-Devanagari
Gurmukhi-Gujarati
Gurmukhi-Kannada
Gurmukhi-Latin
Gurmukhi-Malayalam
Gurmukhi-Oriya
Gurmukhi-Tamil
Gurmukhi-Telugu
Halfwidth-Fullwidth
Han-Latin
Hangul-Latin
Hebrew-Latin
Hiragana-Katakana
Hiragana-Latin
Jamo-Latin
Kannada-Bengali
Kannada-Devanagari
Kannada-Gujarati
Kannada-Gurmukhi
Kannada-Latin
Kannada-Malayalam
Kannada-Oriya
Kannada-Tamil
Kannada-Telugu
Katakana-Hiragana
Katakana-Latin
Latin-Arabic
Latin-Armenian
Latin-Bengali
Latin-Cyrillic
Latin-Devanagari
Latin-Georgian
Latin-Greek
Latin-Greek/UNGEGN
Latin-Gujarati
Latin-Gurmukhi
Latin-Han
Latin-Hangul
Latin-Hebrew
Latin-Hiragana
Latin-Jamo
Latin-Kannada
Latin-Katakana
Latin-Malayalam
Latin-NumericPinyin
Latin-Oriya
Latin-Syriac
Latin-Tamil
Latin-Telugu
Latin-Thaana
Latin-Thai
Malayalam-Bengali
Malayalam-Devanagari
Malayalam-Gujarati
Malayalam-Gurmukhi
Malayalam-Kannada
Malayalam-Latin
Malayalam-Oriya
Malayalam-Tamil
Malayalam-Telugu
NumericPinyin-Latin
NumericPinyin-Pinyin
Oriya-Bengali
Oriya-Devanagari
Oriya-Gujarati
Oriya-Gurmukhi
Oriya-Kannada
Oriya-Latin
Oriya-Malayalam
Oriya-Tamil
Oriya-Telugu
Pinyin-NumericPinyin
Publishing-Any
Simplified-Traditional
Syriac-Latin
Tamil-Bengali
Tamil-Devanagari
Tamil-Gujarati
Tamil-Gurmukhi
Tamil-Kannada
Tamil-Latin
Tamil-Malayalam
Tamil-Oriya
Tamil-Telugu
Telugu-Bengali
Telugu-Devanagari
Telugu-Gujarati
Telugu-Gurmukhi
Telugu-Kannada
Telugu-Latin
Telugu-Malayalam
Telugu-Oriya
Telugu-Tamil
Thaana-Latin
Thai-Latin
Tone-Digit
Traditional-Simplified
Any-Null
Any-Remove
Any-Hex/Unicode
Any-Hex/Java
Any-Hex/C
Any-Hex/XML
Any-Hex/XML10
Any-Hex/Perl
Any-Hex
Hex-Any/Unicode
Hex-Any/Java
Hex-Any/C
Hex-Any/XML
Hex-Any/XML10
Hex-Any/Perl
Hex-Any
Any-Lower
Any-Upper
Any-Title
Any-Name
Name-Any
Any-NFC
Any-NFD
Any-NFKC
Any-NFKD
Any-Latin
Any-Telugu
Any-Malayalam
Any-Oriya
Any-Gurmukhi
Any-Gujarati
Any-Bengali
Any-Devanagari
Any-Kannada
Any-Tamil
Any-Han
Any-Katakana
Any-Hiragana
Any-Armenian
Any-Cyrillic
Any-Hangul
Any-Arabic
Any-Greek
Any-Greek/UNGEGN
Any-Hebrew
Any-Thai
Any-Syriac
Any-Thaana
Any-Georgian
posted by 台北猫々 at 21:11| Comment(0) | TrackBack(1) | 技術メモ(Java)

2009年02月25日

拡張現実感、お試し!

とりあえず、工学ナビ(http://kougaku-navi.net/ARToolKit.html)のサンプルを動かしてみます。

これ↓が「現実」です。
20090225_1.jpg
中央下部にある黒枠の中に模様のあるカードが「マーカー」です。今回試してみるARプログラムはこの「マーカー」を認識して、「現実」にコンピュータ情報を重ねます。

で、ARプログラムを動かすとこう↓なります。すごいのは”リアルタイム”に「現実」に対してコンピュータ情報を重ねられることです。
20090225_2.jpg

極端な話、もし、メガネ型やコンタクトレンズ型のウエラブルPCが実用化された場合に、今見ている現実世界のどこまでが”リアル”なのか分からなくなるかもしれませんね。

実際に動作している所が、YouTubeにアップされていますね。
posted by 台北猫々 at 21:44| Comment(0) | TrackBack(2) | 拡張現実感(AR)

2009年02月24日

拡張現実感(AR)の準備

 

を購入しました。USBカメラは奮発して200万画素のものを購入しました(130万画素とかでも大丈夫だったのかなぁ?)。とりあえず感度良好です。

締めて約11000円なり。
posted by 台北猫々 at 22:10| Comment(0) | TrackBack(0) | 拡張現実感(AR)

2009年02月23日

拡張現実感技術(以下、「AR」)っておもしろそう

ARとは、なんぞや?というと、

〜拡張現実(かくちょうげんじつ)とは現実環境にコンピュータを用いて情報を付加提示する技術、および情報を付加提示された環境そのものを示す。英語表記はAugmented Reality 、省略形はAR。〜(WikiPediaより)
といったものになります。

映画「マイノリティ・レポート」で街中の広告ポスターから人が浮き出てきて、宣伝はじめたりしていたのもARですね。

アニメ「攻殻機動隊」で、電脳チップを頭に埋め込んでいる主人公達が見る現実風景には、電脳により情報が付加されています。これもARです。

で、今現在のARでどんなことができるかというと、

「風景を識別し情報を表示するARアプリケーション「Fallen」」
http://itpro.nikkeibp.co.jp/article/COLUMN/20090202/324007/

ということがあったりします。この場合は、ノートPCのディスプレイでARを確認していますが、メガネ型やコンタクタクトレンズ型のウエラブルPC(既にゴーグル型的なものはあります)が実用化すれば、もっとスマートにARすることができます。

また、他の利用方法としては、家電などで使い方が分からない時は、ARで小人さんを表示し、説明してもらうというのも未来的かもしれません。

はたまた、引越し先の家具のレイアウトをシミュレーションするという使い方もできそうですね。

バーチャルリアルティと対を成す技術ですが、商用的にはARの方が価値があるように思えます(日々の生活を補助すると言う意味で適用の場が多そう)。

というARを自分でも使ってみたいと思いまして、とりあえずWebカメラと書籍を購入しました。プログラムはC言語で組めるそうなので、特に技術的な障害ななさそうです。色々と遊んでみたいと思います。
posted by 台北猫々 at 20:23| Comment(0) | TrackBack(2) | 拡張現実感(AR)

2009年02月21日

今年のテーマは

AR=拡張現実感



公認会計士

としました。
posted by 台北猫々 at 23:06| Comment(0) | TrackBack(0) | 日記

2009年02月20日

正規表現で、渡された文字列に半角カタカナが存在するか?のチェック(Java編)



/**
* 文字列に半角カタカナが存在するか?
* 参考:
* http://www.unicode.org/charts/PDF/U0000.pdf
*/

private static final String P_HALF_KATAKANA = ".*[\\uFF65-\\uFF9F].*";

/**
* 文字列に半角カタカナが存在するか?
* @param str チェック対象文字列
* @return はい:true いいえ:false
*/

public static boolean existHalfKatakana(String str) {
return str.matches(P_HALF_KATAKANA);
}

posted by 台北猫々 at 21:42| Comment(1) | TrackBack(1) | 技術メモ(Java)

2009年02月19日

正規表現で、渡された文字列に非半角数字があるか?のチェック(Java編)


/**
* 文字列に半角数字でない文字が存在するか?
* 参考:
* http://www.unicode.org/charts/PDF/U0000.pdf
*/

private static final String P_NOT_DIGIT = ".*[^0-9].*";

/**
* 半角数字でない文字があるか
* @param str チェック対象文字列
* @return 半角数字でない文字がある:true ない:false
*/

public static boolean existNotDigit(String str) {
return str.matches(P_NOT_DIGIT);
}
posted by 台北猫々 at 21:29| Comment(0) | TrackBack(0) | 技術メモ(Java)

2009年02月18日

正規表現で、文字列は全て半角英数字か?のチェック(Java編)


/**
* 文字列が「半角英数字」のみか?
*/

private static final String P_ALPHA_DIGIT_ONLY = "^[0-9A-Za-z]+$";


/**
* 全て半角英数字か?
* @param str チェック対象文字列
* @return はい:true いいえ:false
*/

public static boolean isAlphaDigitOnly(String str) {
return str.matches(P_ALPHA_DIGIT_ONLY);
}
posted by 台北猫々 at 19:21| Comment(0) | TrackBack(0) | 技術メモ(Java)

2009年02月17日

「基礎から学ぶSEの会計知識」



これは良書です。とても分かりやすく、SEとして必要な会計に関する基礎知識を得る事ができます。新人とかに読ませても良いと思います。

過去に簿記の勉強をしていたので、仕訳方法や、B/SやP/L表などの見方などは大体知っているのですが、それらとソフトウエアを結び付けられずにいました(開発中のソフトウエアって、どう計上するのだろう?とか)。が、この本を読んでいるとそれらが繋がっていく感じがして楽しいです。
posted by 台北猫々 at 00:08| Comment(0) | TrackBack(3) | 本・DVD

2009年02月15日

だいぶ立派に

gremzですが、ずいぶん立派に育ちました。
生い茂ってます♪
posted by 台北猫々 at 21:27| Comment(0) | TrackBack(0) | 日記

2009年02月14日

ことの葉ひらひら その32

「Live as if you were to die tomorrow. Learn as if you were to live forever.」
(明日、死んでしまうかのように行きなさい。永遠に生きれるかのように学びなさい)

by ガンジー


本当に誠実な生き方を突き詰めると、このようなことになるんですよね(若干、生き急ぎ気味になるかもしれませんね)。
posted by 台北猫々 at 22:09| Comment(0) | TrackBack(0) | ことの葉

2009年02月12日

「プログラマー」の位置づけ

プログラマーの誇りを見せ付けろ」には結構賛同できます。

「プログラマー」って、”ひよっこSE”や”ひよっこ社会人”のことではないはずですよね。「プログラマー」は「プログラマー」として専門職であるべきだと思っています。それでこそ、生産物に対しての高いレベルでの”こだわり”というものが生まれる(期待される)ものだと。

私も一度見せ付けてやりたいですね。”ひよっこSEの動作するので精一杯の品質”と”プロフェッショナルのプログラマーの生産物の品質”の差を。ただ、そうするには同じシステムで比較しないといけないのですが。

そうやって客観的にレベル差を見せることで、妥当な対価というものを要求していけるのではと思います。


あと、元ネタのブログの件では、ソースレビューって文化は現場から失われてしまっているのかな?もしくは、レビューすることができるだけの力のある人がいないのかな?という別も問題もあるように見えました。
posted by 台北猫々 at 20:51| Comment(0) | TrackBack(0) | 日記

2009年02月11日

BlazeDSの「Flex Messaging Service」を体験しましょう

コードなにがしにBlazeDSの「Flex Messaging Service」を体験しましょうを投稿しました。

「Flex Messaging Service」は、Pub / Subモデルのメッセージサービスですが、要はあるFlexクライアントからサーバーを仲介して、別のFlexクライアントへメッセージ(データ)をプッシュできるというものですが、非常に手軽に実装できます。

ずいぶん簡単にできるので、なんか楽しいです。
posted by 台北猫々 at 22:31| Comment(0) | TrackBack(1) | 技術メモ(SAStruts)

2009年02月10日

Adobe Flex+S2BlazeDS+S2JDBCってすごいかも

昨日に引き続き、「Adobe Flex+S2BlazeDS+S2JDBC」の組み合わせでサンプルを作成していますが、HTTPServiceでやりとりするのに比べて圧倒的に製造量が少なくなりますね。

SeasarとBlazeDS、これは足し算ではなく掛け算ですね。
(y^^y)
posted by 台北猫々 at 23:31| Comment(0) | TrackBack(0) | 技術メモ(SAStruts)

2009年02月09日

Adobe Flex+S2BlazeDS+S2JDBC

Flex Builder3の試用期限があと6日間と迫ってきました。
残りの期間は、BlazeDSを試してみたいと思います。

コードなにがしの「Adobe Flex+S2BlazeDS+S2JDBC」に少しずつ投稿始めましたよ〜

まだ、始めたばかりですが、BlazeDSを使いやすくするSeasarプロジェクトの「S2BlazeDS」は、結構ゴキゲンなプロダクトな予感がします。
posted by 台北猫々 at 21:44| Comment(0) | TrackBack(0) | 技術メモ(SAStruts)

2009年02月08日

副業として農業

副業として農業をやるのはいいんじゃないかと思いました。

本業とすると色々とリスクがあるので、例えば農地を借りて年収100〜200万円を目指す程度ならどうかなど。育てるなら「長ねぎ」がいいらしいのですよね(用途が広いし、日持ちしない(冬場で1週間ぐらいかな?)ので消費の回転が早い)。あと、付加価値の高いハーブ系とか。「ブロッコリー」などもいいかも。

基本的に、それほど高収入を求めなければ、「旬」に逆らう必要がなくなりますね(1年中なにか作らなくてもいいので)。そうすると、暖房費とか設備費とかは、あんまりかけなくても良くなりますね。それに栽培の難易度も下がります。

ちなみに、栽培というより商品にするのが難しいのは避けるべきでですね、例えば「きゅうり」は、まっすぐになっていないと商品になりにくいので手間が余計にかかるとか。

何かの本で読みましたが、
基本的に農家のお年寄りは休閑地になっている土地を、売るのは抵抗があっても貸すのは歓迎ムードらしいので借りるのが吉であるとも。

また、地域の農協に出資して会員になれば流通経路を使えて、肥料などを割引価格で入手することもできるようです。

と、いったところで、↓のようなニュースを見ました。

「富士通 子会社正社員の副業を容認 賃金目減り補填」
http://headlines.yahoo.co.jp/hl?a=20090204-00000059-san-ind

多分、これから副業を容認するのは製造業で特に広がるのではないかなと思っています。すると、ワークシェアで収入の減ってしまった人は副業を求めるでしょう。

そういった人達を対象として、副業として農業するためのコンサルとか仲介業とかやりだしたら結構流行るのではないかなと思いました。

農業って、とにかく何から始めればいいかわからないですし、栽培のノウハウとかも知らなければなりませんし。流通とかどうすればいいかわからないですよね。

あと、基本的に農家の人は「よそもの」を簡単に受け入れません(これは偏見かも?)。

ともあれ、エンジニアは基本的にモノヅクリが好きなので、延長線上のものとして受け入れやすいかなとも。あと、普段日にあたらないので、太陽の下の作業は体が求めるのではと。
posted by 台北猫々 at 22:41| Comment(0) | TrackBack(14) | 日記

2009年02月07日

今日は不動産屋に行ってきました。

今まで、会社の借り上げの住居しか住んだことなかったので。
部屋を賃貸するって大変なことなんだと初めて知りました。

自分の無知を思い知った日で、
色々と常識を学んだ日でした。

とりあえず、賃貸手数料なんてものがあるのですね。しかも、家賃一カ月分と聞いて内心「うそーん」な感じでした。

また、物件の下見に行きましたが、電車&徒歩で移動でしたが、これもまた結構疲れるものなんですねぇー(不動産屋さんが道を間違えまくっていたからかもしれませんが)。

などなど、初体験ばかりの日でした。
posted by 台北猫々 at 23:27| Comment(0) | TrackBack(0) | 日記

2009年02月06日

月単価320万円のITエンジニア・・・どんなだよ・・・

「舛添要一厚労相は「IT技術者の評価はピンからキリまであり、2万円では安い、ということもある」と答弁した。」

【<社会保険庁>システム外注費「時給」2万円…高いか安いか】
http://headlines.yahoo.co.jp/hl?a=20090205-00000140-mai-pol
より


時給2万円で、一ヶ月あたり160H働くとして、月単価320万円のITエンジニア・・・相場というものを知らないのでしょうか?知らないのでしょうねぇ。。。ともあれ見積もりの詳細を開示して欲しいですね。もうこれは「どんぶり勘定」というレベルではないので。

「「研究員」が1万3200円」だとしても、月単価200万ですか・・・「研究員」というのはSE or PGということになるのかな?

多分、大手SIerはSE単価1人月200万で受注しといて、1人月60〜80万で外注しているのでしょうね(偏見かな?)。



posted by 台北猫々 at 20:27| Comment(0) | TrackBack(3) | 日記