2007年03月30日
おっくせんまん!
久々にニコニコ動画みてたらえらい画質があがっててびっくり。
Stage6ほど綺麗じゃないけどYouTubeよりはめちゃ綺麗だ。
ファミコンのロックマン2のBGMに歌詞をつけた「おっくせんまん」がめちゃ熱い。
特に
http://www.nicovideo.jp/watch/sm5979(まだテスト期間だしニコニコ動画のアカウントがないとみれないかな?)
この人のバージョンが好きだな。シャウトが熱すぎる。おっくせんまん!おっくせんまん!
ロックマンのBGM作曲した人も、20年後に(極一部で)人気が出て愛されるなんて思わなかっただろうな。
ロックマンのBGMはどの曲もホントの歌詞がついてそうだけど、どんな歌詞を思いながら作曲したんだろう。
あとニコニコ動画を見てたらアイドルマスターに詳しくなって困るw
血迷ってXBOX360買ってしまったヤツも多いだろう。
レッツゴー!陰陽師も人気あるけど良さはよく理解できない・・・。
陰陽師がカラオケになるんだったらおっくせんまんの方が良いような気がするが。
さて、テクニカルエンジニアのセキュリティの試験まであと2週間なワケですが、仕事が忙しかったり体調崩したりで全然勉強できてませんよ!だんだんあきらめムードになってきました。
まぁ一応残り2週間がんばってできるところまではやってみよう。少なくとも勉強したことは無駄にはならないし。さてさて、がんばろっと。
2007年03月22日
期間限定
期間限定。
なんて甘美な響き。
と言うことでモスの期間限定デミカツドッグ食べてきた。お肉が柔らかく、ころもがサクサクで美味。でもやっぱレギュラーメニューの方が美味しいな。期間限定のはたまに食べるぐらいがいいのかも。
そして悲しいことだけど、近所のモスバーガーがつぶれてしまったので気軽に食べることが出来なくなってしまったな・・・。小さな頃から愛用していたお店なのに・・・合掌。
ポテトチップスも期間限定でいろんな味を出してて、なかなかおいしい磯のり味普通ののりしおより遥かにおいしいのでこっちをレギュラーにして欲しいぐらいだ。
どうでも良いけどポテチのサイトを見てたら"のりしお"に関西版と関東版があることに気がついた。うどんのつゆのように、のりしおにも関東関西こだわりの違いがあるのだろうか。
今週から発売されてるポテトチップス えびしお、コレは微妙だった・・・・。
ポテチのサイトでポテチの種類を見てたら知らない期間限定の商品が割とある。こんなの知らないなぁと思っていたら「コンビニエンスストアでは販売していません。」と書いてある。ちなみに磯のり味はコンビニ限定。
どういう戦略かはわからないが、コンビニばっかり行かずにスーパーにも行けという事のようだ。
邪推するとそれぞれ限定の商品を出すことで、スーパーとコンビニのライバル同士それぞれに気を使って客集めの商品を作り、熾烈な棚スペース確保の戦いを有利に進めようとかあるのかもしれない。
それぞれターゲット層に違いがあるのか、スーパー限定のポテチのパッケージは子供が喜びそうなかわいいイラストが描いてあって子供連れの親にターゲットが絞られているのがわかる。
コンビニ限定のはレギュラーポテチより上品なパッケージで微妙に高級感がある。中高生やOL、サラリーマンをターゲットにしているんだろうな。
ポテチのサイトを見てていろいろ発見があり、ちょっと嬉しい深夜であった。
2007年03月18日
ボードいてきた
土曜日に毎週やってるフットサルの練習に行っていて、昨日も練習だった。
そのときにめちゃボード好きの人に「今日の夜からボード行くけど来る?」と誘われた。
フットサルの後だしハードだなぁと思いつつも「今シーズン最後だよ」との声で参加することに決定。
フットサルの練習が終わって家に帰って6時間後には家を出ることに...。
今年は暖冬だし3月半ばでまだ滑れるの?とか思っていたけど、なんと家出たときには京都でも雪が結構降ってたし・・・。
岐阜あたりはまだまだ余裕で滑ることが出来るようだ。
と言うことでめいほうスキー場に行ってきた。もう3月半ばだからか知らないけど日曜日にもかかわらず平日料金で、なおかつ途中のコンビニで券を買ったら食事1000円分の食事券付きで4000円だった。安い。
めいほうスキー場はコースが横に広いし、わりとなだらかな斜面がずっと続いてるので滑ってて気持ちよかった。
中級コースは全然人がいなくて、見える範囲誰もいない!俺貸切り!!状態(いっしょに行った人は上手なのでもう見えなくなるぐらい先に行ってる)
そしてはしゃいで調子に乗って滑ってたら豪快にこけて首が"ミシッ"と鳴る音を聞いてしまった。
いい感じに上達してきたし今回は楽しかったし満足満足。
その分筋肉痛と顔が日焼けしてパンダ状態なのは我慢しないとダメだけど....。
2007年03月13日
Google Guice
Googleが作ったDIコンテナGoogle Guiceの1.0がリリースされた。
Google Guiceのサイトはこちら。
これでGoogleジュースと読むらしい。
DIは直訳で依存性の注入で、簡単に言うとあるオブジェクトの属性や機能を外部から注入する感じ。
それにより依存関係が弱くなって実装を変更しなくちゃならない場合でも設定ファイルを書き換えるだけで実装を変更できる。と言うのがメリットだと言われているけど、それをメリットだと実感して「DIってスバラシィーーッ」って思ったことがないのでよくわかんない。
Webアプリ作成の業務でDIコンテナ使うことがあればそう思うのかもしれないけど。
と言うことでガイドはこちら。Springとはどうちがうねんと言うのはこちら。日本語でおkと言う場合はこちら(あるまに@monstar)。
Google社内でAdWordsのために開発されたとあるけど、AdWordsはJavaで動いてるんだなぁ。検索はC++だったような気がする。GMailやGoogle CalendarはGWT使ってるからこっちもJavaなんかな。
あるまに@monstarさんところで
>特にDIのパフォーマンスで困っている訳でも、XML定義が大きすぎて困っている訳でもない私がGuiceにちょっと興味を持っているのは、ソース見たらジェネリクスがすごい事になっていたからです。
>正直、最初見た時ソースの文法が一部理解できなくて「ジェネリクスをフル活用するとこんなソースになるのか!」と衝撃を受けました。
と言うことなので見てみた。
確かにジェネリクス使いまくりだ~。と思ったけど気になったのはインデントがスペース2個なのと拡張for文使ってるところが「おっ」と思った。
Google社内のコードはタブが2文字でのインデントが伝統という記事がどっかに書いてあった。創業以前からの社長のポリシーとかなんか書いてあったっけな。なのでコードを見るだけで社内のコードか外部のコードかが一目でわかるという。
拡張for文は以下のように書けるfor文の省略版。ListのitemListからitemを取り出しつつループする。
for( Item item : itemList){
item.use();
}
単に内部でIteratorを使ってるだけなので、Iterator経由の呼び出しにオーバーヘッドがあって、ArrayListの場合、単純にループの処理だけで3割ほど遅くなるとどっかに書いてあったので敬遠してた。
でも最近は「やっぱこれ便利じゃね?」と言うことで使いだしつつもある。
3割遅いって言ってもループ自体の処理の負荷なんて小さすぎるしループの中での処理の方が圧倒的に重いだろうしそう重要ではないよな。
でもJavaの拡張for文の不便なのは処理の負荷なんかじゃなく、perlのように添え字が自動生成できないところだ。
拡張for文で書いても、そのうち結局添え字が必要になってループカウンタ足したりする場面があるんだよな。
それにEclipseだと近くにあるリストや配列からfor文を自動生成してくれるし、拡張for文のメリットは見た目がすっきりする以外あんまり無い。
どうでも良いけどプログラマがfor文すらも自分で書かなくなってしまうとは恐ろしいことだ。
Eclipse便利すぎるぜ!
2007年03月10日
コネクションプール
Struts+Spring+iBATIS+MySQLの構成でDB検索し結果をWebに表示するページができたので、どれぐらいスループットがでるのかなと負荷テストをやってみた。
ツールはJMeterを使ってみた。
JMeterは自由にWebリクエストを設定してその繰り返しで負荷テストを行うツールだ。
ためしに10スレッドからそれぞれ300リクエストしてみた。
スループットは40/secか・・・。1秒間に40リクエストを処理できるのか。微妙に重いな。と思いつつ結果を見てると途中から以下のエラーがでるようになった。
java.net.SocketException: java.net.BindException: Address already in use: connectどうやらJDBCのコネクションが多すぎてポートを確保できないらしい。
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:156)
at com.mysql.jdbc.MysqlIO.(MysqlIO.java:276)
以下略
そんなときはコネクションプールだ!ということでCommons DBCPを導入することにする。DBCPは名前の通りDatabase Connection Poolだ。
DBCPと、DBCPが依存しているライブラリをlibに突っ込んで、springの設定ファイルのdataSourceをデフォルトのorg.springframework.jdbc.datasource.DriverManagerDataSourceからDBCPのorg.apache.commons.dbcp.BasicDataSourceに変更する。
なんとこれだけで設定完了、コネクションプールができる。便利な世の中になったものだ・・・。
さっそくJMeterで負荷テストをしてみると・・・おおお!軽い!! しかも落ちない!!!
スループットは300/secまで上昇、7.5倍も高速になった。
恐るべしコネクションプール。
ちなみに今回はスループットが劇的に改善したけど、場合によってはコネクションを維持するコストの方が高くて、コネクションをプールしない方がよい場合もあるらしい。
DB検索の結果のキャッシュも有効にするともっと高速になりそうだな。
2007年03月09日
負荷分散装置
オープンソースのロードバランサ Linux Virtual Server のチュートリアル
Linux Virtual Serverチュートリアル
かなり高負荷な環境でも余裕で対応できるらしい。
Webサーバの負荷分散や、RDBの負荷分散にも使えて良い感じのようだ。
とあるLVSの使用例
>弊社が運用している最もハイトラフィックのクライアントN社様の場合、1日に1,000万ページビュー(HTTPリクエストとしては4億リクエスト以上)を、なんとXeon3Gシングルのサーバ1台(heartbeatにより冗長化しており実質は2台)で涼しい顔(CPU30%以下)をして処理できています。
4億リクエストを軽々と処理するなんてすごいな。
平均1秒に4000リクエスト以上で、ピーク時なら数倍になりそうだ。
1台のサーバでサービスを開始して、その後60台以上(現在はもっと多いだろう)のサーバで構成されるシステムに成長したLiveJournalのシステム構成と成長過程でどのような問題が発生しどのようにそれを解決したかの資料。
Inside LiveJournal's Backend
naoyaのはてなダイアリー
サーバーを増やせばいいんじゃない、サーバーを増やすだけで解決できるように努力するのだ
これは勉強になる。
確かにサーバを追加するだけでコンスタントに性能が上がるようなスケーラビリティのあるシステムを作るって言うのを、サーバが1台の頃から考えていかないとだめって事ね。または途中からそういうシステムに変更できるぐらい柔軟性のあるシステム。
今や人間のコストよりもハードウエアのコストが安すぎる時代だから、いかに速いプログラム(システム)を書くかよりいかにクラスタリングできるかand性能がコンスタントに上昇する(スケーラビリティのある)システムを作れるかが重要そうだな。
2007年03月01日
Struts + Spring + iBATIS
先日のiBATISはなかなか良い感じだ。
使ってみたところSQLは自分で書いて、検索結果のオブジェクト化などを自動でやってくれるのでコードを書く側としてはSQL書くだけでよいのでとても楽。SQLも書きたくない人はHibernateへ。
現在のiBATISにはDAO(Data Access Object)の機能が無いので、Spring Frameworkを使うことになる。
Spring FrameworkはDI(Dependency Injection:依存性の注入)のフレームワークで、今回はSpringのDBアクセス関連とトランザクション関連の機能を使う。
作りたいWebアプリがあるので、簡単にさくっと作りたいなと思ったんだけど、結局Struts + Spring + iBATISと言う王道な組み合わせになってしまったな。iBATISがHibernateなら、より王道だが。
Struts(Webアプリケーションフレームワーク)はさわったことあるけどSpringとiBATISは新しく学習するので割と大変だ。
とりあえずJava・J2EE・オープンソース Spring入門 ~より良いWebアプリケーションの設計と実装を読む。SpringとStruts、SpringとiBATISの連携方法ものっていて今回のプログラムには最適だ。
この本のSpringのバージョンは1系だけど、最新の2.0.2でiBATISとの連携をやってみたところ問題は無かった。
Strutsも深く理解しているとは言えないのでプログラミングJakarta Strutsを読んでみる。
また、DBは結局MySQLを使うことにしたのでMySQL 徹底入門 第2版を読んで勉強してみる。
ちょっとさわった感じではなんとシーケンスが無いことにカルチャーショックを覚えた。シーケンスの代わりにAUTO_INCREMENTと言うのがあって、出来ることはシーケンスと似てるけど使い方が違ったりで微妙に不便だ。データをINSERTするまで実際にふられるIDがわからないって言うのがなんかイヤだな。