エコキュート

エコキュートの営業を受けてみた。エコキュートの営業って、結構、訪ねてくると思うのだけど、切り替えるだけの価値があるのかを確認するのにも良い機会かと。そもそも、エコキュートが何をしてくれるのかというと、まぁ、簡単にいうと夜の電気代でお湯を沸かして、1日分はそれを使うことができるという感じのもの。通常は、電気代は一日中同じ金額だけど、エコキュートとか導入すると、昼間は若干値段が上がるけど夜間は半分以下の金額の電気代という時間帯価格になる。なので、エコキュートは夜間の電気代が安い時にお湯を沸かすわけね。

ガスからエコキュートに切り替えるにはいろいろとポイントがあるかとは思う。まぁ、うちの場合に関していうと、

  • ガス釜は6年の利用(一般的にガス釜10~15年で交換することになる)
  • 月々の電気代は7500円くらい
  • 月々のガス代は4900円くらい(このうち、お湯代は3300円くらい想定)

という感じで、エコキュートを導入すると、月々2800円くらい安くなるらしい。しかし、エコキュートも安いものではない。金額的には工事費含めると、安くても50万を超えるだろう。例えば、60万を15年月々分割にしたとしても月4000円は超えることになる。つまり、15年は1000円以上高くなることになる(安いケースでこれなので、月2000円は高くなる覚悟は必要かと)。そんなわけで、エコ志向の人は別かと思うが、エコキュートはガス釜が10年以上超えているか、ガス釜が壊れたときに導入するのが正しいかなっという気がする(わざわざ工事の調整をするのもめんどうだしね)。あとはガス釜は下取りをしてくれるというが大した金額にはならないだろう。という感じで、うちのエコキュートの導入は5年後ぐらい先かな(そのころには今より技術進化しているだろうと思うし)。

障害URL一覧機能

他に良い呼び名が思いつかなかったので、クロールしてExceptionが発生したURLを障害URLという感じで呼んでいるのだけど、それを確認できる機能を追加してみた(4.0.0-SNAPSHOT)。これは要望頂いた機能を実装してみた感じです。障害URLを保持することができるようになったので、次はこれを元に次回クロール時には障害URLはスキップする機能を付けようかと思っています。

あとは、細かいところですが、管理画面の左側にあるメニューの数が20個を超える感じになり、ぱっとみでどこに何があるかわかりにくいので、分類してみました。

4.0のリリースまではまだ時間がある感じですが、やることとしては、

  • クリックログ
  • ログ集計
  • NTLM認証対応(どこまでやるか未定)

な感じでしょうか。既にクロール処理に関しては Commons HttpClient 3.1 から HttpComponent HttpClient 4.1系に移行済みなので、NTLMまわりもいろいろとできるはずかと思っています。

そんな感じですが、Fess の新しい機能を見てみたい(または、テストしていただける)方は、ぜひ、4.0.0-SNAPSHOT を使っていただければ助かりますー。

HttpClient 3 から 4 へ

日本語だと HttpClient 4 を使っている人をあまり見ないような気もするけど(気のせい?)、3 から 4 にするとどう違うかを超簡単に示すと、

// Create an instance of HttpClient.
HttpClient client = new HttpClient();
// Create a method instance.
GetMethod method = new GetMethod(url);
try {
// Execute the method.
int statusCode = client.executeMethod(method);
// Read the response body.
InputStream is = method.getResponseBodyAsStream();
... 何かする ...
} catch (Exception e) {
... 何かする ...
} finally {
// Release the connection.
method.releaseConnection();
}

という感じで今まで書いていたと思うけど、

// Create an instance of HttpClient.
HttpClient httpclient = new DefaultHttpClient();
// Create a method instance.
HttpGet httpget = new HttpGet(url);
HttpEntity entity = null;
try {
// Execute the method.
HttpResponse response = httpclient.execute(httpget);
int statusCode = response.getStatusLine().getStatusCode();
entity = response.getEntity();
// Read the response body.
InputStream is = entity.getContent();
... 何かする ...
} catch (Exception e) {
... 何かする ...
} finally {
// Release the connection.
if (entity != null) {
entity.consumeContent();
}
}
httpclient.getConnectionManager().shutdown();

という感じ。

まず、DefaultHttpClient を生成する。今までのHttpClientと思って良いだろう。メソッドクラス系の GetMethod などは、HttpGet などに置き換わっている。まぁ、これも特に問題ないだろう。メソッドの実行については execute メソッドを利用する。引数は HttpGet などのメソッドだ(本気で HttpClient 4 を使う場合はリクエストヘッダーなどのパラメータなども渡したくなるからHttpContextも渡すメソッドを使うことになるだろう)。executeメソッドを実行すると HttpResponse が返ってくる。なので、レスポンスはここから取得する。ステータス系は getStatusLine メソッドで取得できる。レスポンスの本文は HttpEntity から取得する。getContent メソッドでストリームを取得できる。取得したら、今までのreleaseConnectionメソッドを呼んでいたところでHttpEntity の consumeContent メソッドを呼んでおく。httpclientが不要になったら、connectionManagerのshutdownをしておく。