土日のどちらかは うさぎの話題 うさぎ写真館をやろうと思います。


では、一人うさぎQ&Aから~ヽ(゜▽、゜)ノ


うさぎを飼って気づいたこと


× うさぎは水を飲まない       うさぎはたくさん水を飲みます。


× うさぎは寂しいと死ぬ       うさぎは他当飼いより1匹飼いのほうがいいです。


× うさぎは野菜をあげればいい   子うさぎのエサはペレットというウサギ専用のドックフードみたいなもの

                      大人うさぎは牧草という乾いた草が主で、ペレットを副食にして食べさせ

                      ます。


× うさぎはトイレを覚えない      犬ほどでないけれども、覚えます。三角コーナみたいなトイレをセット

                      しておくとそこにしてくれます。


× うさぎってどんな泣き声?     うさぎは鳴きません。そういえばうさぎの鳴き声って聞いたことがない(汗

                      マンションで飼うのに最適ですが、管理組合、オーナーさんにきちんと
                      相談してください。


うさぎ写真館



うちのみみたれ


みみたれうさぎの実用Javaプログラムの考察




ひなたぼっこ みみたれ


みみたれうさぎの実用Javaプログラムの考察


なんとなく りりしい

みみたれうさぎの実用Javaプログラムの考察




うさぎをこれから飼おうかと思う人のための ウサギスタータキット



-------------------------- まず、ウサギハウスから -------------------------------------

引き出しのトレイで掃除が楽

¥15,120
楽天

※モバイル非対応

うさぎのケージ10%OFF!!カワイ スーパーケージコンフォート60 【送料無料_200906】



クイックサークル65&フロアーマット48の2点セット 【送料無料】

¥6,980
楽天

※モバイル非対応

部屋の中で遊ばせたいなら サークルがあるといいです。


-------------------------- 水のみは必須です ---------------------------------


水のみは必須です。 小皿に水を入れてもいいですが、結構飲みますので

リッチェル ウォーターノズル イエロー 【給水器】/犬・猫・うさぎ
¥1,218
楽天

※モバイル非対応

--------------------------健康なウサギには健康な牧草 -------------------------------------


牧草はいろいろ試した結果これがいいですね。カオリがダントツ良くて食いつきがいいです。

うさぎの牧草ハイペット パスチャーチモシー 450g 【5,000円以上で送料無料】



-------------------------- 野菜ではなくてペレットをあげましょう-----------------------------


こちらのシリースは安くて、チモシーメインなのでヘルシーです。


【送料390円3150円以上で送料無料】イースター どうぶつ村ラビットフード チモシー 2.7kg
【送料390円3150円以上で送料無料】イースター どうぶつ村ラビットフード チモシー お徳用...
ウサギの健康に欠かせない食物繊維がたっぷりですイースター どうぶつ村ラビットフードチモシー 2...
¥570
楽天

※モバイル非対応



少し高いですが、人気があります。

うさぎのフード10%OFF!!イースター バニーセレクション メンテナンス 1.5kg 【10...
¥1,557
楽天

※モバイル非対応


うさぎのフード10%OFF!!イースター バニーセレクション メンテナンス 3.5kg 【10...
¥3,240
楽天

※モバイル非対応

----------ケージに固定できるエサ入れ 砕いた牧草入れ用に2つ買っても良いかも-----------------------

【処分特価】小動物用エサ入れGEX 固定式フードBOX
¥99
楽天

※モバイル非対応


----------------------- トイレはこちら ぜひ砂を入れましょう -------------------------------


トイレに一握りの砂を入れるとにおいがウソのように消えます。これが一番効果があります。


うさぎのトイレ砂ジェックス トップブリーダーの消臭砂 7リットル 【5,000円以上で送料無料】
¥1,344
楽天

※モバイル非対応



うさぎのトイレ砂セット30%OFF!!【4個セット】ジェックス トップブリーダーの消臭砂 7リットル
¥3,763
楽天

※モバイル非対応

ケージの隅に固定できて使いやすいです。

定番の三角トイレ

[GEX]うさぎのトイレ(三角タイプ)
¥829
楽天

※モバイル非対応



GEX うさぎのトイレ 四角タイプ
¥850
楽天

※モバイル非対応





---------------- うさぎとのコミュニケーション お・や・つ -------------------------------------


パパイヤは大好物であると同時に、おなかに溜まった毛を溶かす効果があります


【2月の特価品】 マルカン そのまんま青パパイヤ  「うさぎのおやつ」 【あす楽対応_関東】【...
¥235
楽天

※モバイル非対応


うさぎのおやつ穂果 N.S treats パパイヤ 70g 【10P05feb10】
¥682
楽天

※モバイル非対応




へぇー うさぎって以外 

でも、みみたれていない奴がいなかったか?


気のせいか と思われた方は ↓ をクリック



人気ブログランキングへ


------------------------------- UPDATE --------------------------

ペットシーツ足しました(モリゾさん)

ケージの下に敷くと確かに掃除が楽です。



アウトレットペットシーツ 《レギュラーサイズ》440枚のところ増量中♪もれなく銀炭パワー!サン...
¥3,520
楽天

※モバイル非対応



SuperCSVでCSVファイルを書き込む方法を書きます。



CSVファイルの読み込みは


JavaでCSVを読む パートⅡ SuperCSV


http://ameblo.jp/smartjava/entry-10447653513.html



で書きました。ライブラリは


http://supercsv.sourceforge.net/



public static void main(String[] args) throws IOException{
  ICsvListWriter writer = new CsvListWriter(new FileWriter("sample3.csv"),

                              CsvPreference.EXCEL_PREFERENCE);

  String[] header = {"へっだ1","ヘッダ2","ヘッダ3"};

  writer.writeHeader(header);

  for(int i =0; i < 1000000; i++){
     List<String> row = new ArrayList<String>();
     row.add("データ" + i);
      row.add("でーた" + i);
     row.add("データ~" + i);
     writer.write(row);
     writer.getLineNumber();
}

writer.close();
}


---------------------------------------------------

出力結果


へっだ1,ヘッダ2,ヘッダ3
データ0,でーた0,データ~0
データ1,でーた1,データ~1
データ2,でーた2,データ~2
データ3,でーた3,データ~3
データ4,でーた4,データ~4
データ5,でーた5,データ~5
データ6,でーた6,データ~6

---------------------------------------------------


どうでしょうか、ホームディレクトリに sample3.csvが書き込まれたと思います。

書き込むオブジェクトをメモリ展開しなければ、書き出しもメモリ展開しません。


JUnitで確認してみてください。




現場で使えるソフトウェアテスト Java編/飯山 教史
¥2,940
Amazon.co.jp



Jakarta Commonsクックブック ―Javaプロジェクト必須のレシピ集/Timothy M. O’Brien

¥3,780
Amazon.co.jp

【負けパターン】 シリーズでは

現場でソースを見ていて、これが良くないよね というパターンを見ていきます。


さて、以下のソースを見てほしいのですが


--------------------------------------------------


Map userInfoMap = new HashMap();


 中略


test1Mes(userInfoMap );


--------------------------------------------------


test1Mes()メソッドは何をするメソッドで引数からどんな値を取得しているのでしょうか?


じーーーー と見つめましょう


・・・・・


はい、わかりません。 なので以下を見てみます。




public void test1Mes(Map userInfo){


   String username = (String)userInfo.get("username");
   String age = (String)userInfo.get("age");

   System.out.println("ユーザ名 =>" + username);
   System.out.println("年齢 =>" + age);
}


--------------------------------------------------


あー マップに username と age が格納されていて標準出力に出力されるんだな~ なるほど


では、次を見ます。


--------------------------------------------------


 

    UserInfoDTO dto = new UserInfoDTO();

 

     中略


    test2Mes(dto );



public class UserInfoDTO{


   private String username;

   private String age;


   public String getUsername(){ return username;};

   public String getAge(){ return age;};


    public void getUsername(String username){ this.username = username;};

   public void getAge(String age ){ this.age = age;};


}


--------------------------------------------------



さて、


test2Mes()メソッドは何をするメソッドで引数からどんな値を取得しているのでしょうか?


  何をするものかわかりませんが、たぶん username と age を取って何かをするものなのでしょう。


 

というふうに、メソッドの中を追わなくても外側からの見通しがよくなります。

 

 さらに、Mapオブジェクトにセットするキーのスペルを間違えたとします。


 map.put("userneme","たれみみ"); // aをeにしてしまった。


 これはコンパイルエラーになりません。ランタイムエラーになってしまいます。


   しかし


 dto.setUserneme("たれみみ"); // これはコンパイルエラー


マップオブジェクトは値をプットするときはエラーになりません。

これがエラーとして検出されるのは、値を取り出すときです。


実際にあったのですが、某大手IT会社のテストケースに 


   データバインドのキーは小文字で "u" "s" "e" "r" "n" "a" "m" "e"

   であることを目視で確認すること!


   デバックモードでブレイクポイントを張ってオブジェクトの中身を確認すること!

 

 と堂々と書いてありました。 う~ん 繰り返しの試験をすることになったらキツそうです。


 

 逆にマップを使ったほうがいい場合を考えると


   ・キー と 値 の組み合わせが不定である場合

   

   ・不定ではないがいくつものパターンがある場合


 このような場合は仕方がないので、マップを用いて重点的にテストするべきでしょう。



 あらかじめ、username とか age とか わかっている場合は ValueObject や DataTransferObject

 を作って値を出し入れするべきです(2つだけなら引数2つのメソッドでもいいと思いますが)。

 

 そのようにすると、スペルミスをコンパイルエラーにしてくれるだけでなく、型を指定すれば型のチェックもできます。

 (例えば age を int 型にすれば 数字にできないものは入りません あるいは 数字にできないものを

 入れようとしたところでランタイムエラーになってくれます。)


 ValueObject や DataTransferObject(厳密にはそれぞれの意味は微妙に違いますが) を作る手間を

 省略すると、結合テストの手間が増えるとともに 本番環境のリスク が増加します。言い換えると、


 ValueObject を書くのがめんどいので、テスターさん ヨロシク ! と言っているようなものです。



 最後に 実際に遭遇したソースのご紹介


--------------------------------------------------


 map.put("NAME","testman");


testMes1(map);


if(kubun == 1){

map.put("TEL1","0000-0000");

map.put("TEL2","0000-2222");

} else if(kubun == 2){

map.put("TEL1","0000-0000");

//  kubun == 2 は TEL2 イラナイんだー?

}


testMes2(map); // 実際 NAMEは無視してました。


if(kubun == 3){

map.remove("TEL1");

}


testMes3(map); // 今度は NAMEだけ使ってました っていうか String name って引数に変更しようよ


ひとつのMapオブジェクトを複数のメソッドで使いまわしてる・・・


  ・・・ 以下省略  


ごめん。レビュー とんずら したいんですが (心の叫び)・・・



やたらとマップをVO、DTO の代わりに使いまくると テストエンジニアが かわいそう

っていうか、うちの現場にもマッパーがいたかも・・・と思った方は ↓をクリック



人気ブログランキングへ

機会があれば↓の本の内容について書きたいと思います。

プログラムがわかり始めた頃のエンジニアさんにはオススメです。



バグ攻略で極めるWeb開発のツボ 現場で必要不可欠なバッドノウハウ/山城 拓明
¥2,940
Amazon.co.jp

俺流amazonの作り方―Amazon Webサービス最新活用テクニック/水野 貴明
¥2,730
Amazon.co.jp



 








SuperCSVで1000万件のCSVファイルを読み込んでみます。

ここで注意してほしいのは


パートⅢのソースで読み込みをしてはならないということです。


パートⅢのソースは取得したデータをメモリ展開しますので、あれで読もうとするとバンしますショック!


ログファイルのように何件入るかわからないファイルの統計処理は必要最低限の情報を読み込んで

あとは捨てるようにします。


まずはCSVファイルから


みみたれうさぎの実用Javaプログラムの考察



sample2.csv (300MBぐらいになります)

-------------------------------------------------------------

test,テスト,テスト,いっぱい,テスト
test,テスト,テスト,いっぱい,テスト
・・・
・・・

test,テスト,テスト,いっぱい,おわり <= 1000万件目

-------------------------------------------------------------

パートⅢのJUnitに以下のメソッドを追加して実行してください


@Test
public void testCsvReader2() throws IOException{
ICsvListReader reader = new CsvListReader(new FileReader("sample2.csv"), CsvPreference.EXCEL_PREFERENCE);
List<List<String>> list = new ArrayList<List<String>>();
List<String> temp = null;


while ((temp = reader.read()) != null){
System.out.println(temp);
}
}


-------------------------------------------------------------

出力結果


[test, テスト, テスト, いっぱい, てすと]
[test, テスト, テスト, いっぱい, てすと]
・・・
・・・
[test, テスト, テスト, いっぱい, おわり]

-------------------------------------------------------------



無事に終了しました。メモリがバンしなかったので


SuperCSV自体はメモリ展開しないライブラリであることが検証できました(書き込み

はまだ試していませんが)


このように、自分が作ろうとしているシステムの使用に耐えられるかテストしてライブラリ

の選定を行います。


フリーのライブラリなんて不安だよ~って言う先輩がいたら、JUnitでテストして論破

してやる~とファイティングスピリッツいっぱいの方は↓をクリック




人気ブログランキングへ




Eclipse 3.5 完全攻略/宮本 信二
¥2,940
Amazon.co.jp