<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2082063918226001433</id><updated>2011-12-14T08:16:13.740+09:00</updated><category term='apache'/><category term='S2Dao'/><category term='solr'/><category term='mail'/><category term='コマンド'/><category term='ポストコ'/><category term='セキュリティ'/><category term='postgresql'/><category term='MySQL'/><category term='javascript'/><category term='JAVA'/><category term='ランチャー'/><category term='CSS'/><category term='php'/><category term='[ツール][アクセス解析]'/><category term='perl'/><category term='S2JDBC'/><category term='etc'/><category term='postgis'/><category term='H2'/><category term='Nutch'/><category term='VBA'/><category term='Tomcat'/><category term='緯度経度'/><category term='シェル'/><category term='ツール'/><category term='DB'/><category term='HTML'/><category term='cakephp'/><category term='トラブルシューティング'/><category term='ミリ秒'/><category term='Dos'/><category term='teeda'/><category term='SAStruts'/><category term='seasar'/><category term='devwp'/><title type='text'>メモ</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default?start-index=101&amp;max-results=100'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>137</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-5698312784070847103</id><published>2010-08-23T08:52:00.004+09:00</published><updated>2010-08-23T08:54:46.058+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='devwp'/><title type='text'>.infoドメイン</title><content type='html'>安さにつられて.infoドメインを取得してみました。&lt;br /&gt;前回ドメイン取得から一般公開までやたらと苦戦しましたが、&lt;br /&gt;２回目だったので今回は悩むことなく公開できました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://devwp.info/"&gt;http://devwp.info/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;さくらインターネットさんの専用サーバにwordpressをインストールしてみて、それを公開してみてます。&lt;br /&gt;んー・・・コンセプトが無いまま公開してしまった・・・どうしよう・・・&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-5698312784070847103?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/5698312784070847103/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=5698312784070847103' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5698312784070847103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5698312784070847103'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2010/08/info.html' title='.infoドメイン'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-9196667558143183609</id><published>2010-08-23T08:50:00.002+09:00</published><updated>2010-08-23T08:51:18.546+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ポストコ'/><title type='text'>WEBの品質情報投稿サイト</title><content type='html'>WEBの品質情報投稿サイトの運用・保守みたいなことをやってます。&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;a href="http://postco.jp/"&gt;WEBの品質情報投稿サイト&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;シンプルで使いやすいのですが、もう一歩な感がありますね。&lt;br /&gt;もっと使ってもらえるようにアイディアだし、改修がんばります！&lt;br /&gt;の前に・・・バグがちょいちょいあるからそれを直さなきゃ・・・&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-9196667558143183609?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/9196667558143183609/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=9196667558143183609' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/9196667558143183609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/9196667558143183609'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2010/08/web.html' title='WEBの品質情報投稿サイト'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-5052932278121926129</id><published>2010-06-26T11:58:00.004+09:00</published><updated>2010-06-26T12:08:39.281+09:00</updated><title type='text'>絵心がない。。。</title><content type='html'>ショッピングサイトを作って思いました。&lt;br /&gt;絵心ないなー。俺。&lt;br /&gt;&lt;br /&gt;サーバサイドは得意なフィールドなので何の苦労もなかったですが・・・&lt;br /&gt;htmlとかcssとか画像とか・・・これが一番苦労しました、挫折しそうでした。。。&lt;br /&gt;&lt;br /&gt;画像なんて作ったことなかったから、一個画像作るのに半日も費やしてました。&lt;br /&gt;おかげでちょっとした画像はちょいちょいーっと作れるようになりましたが。&lt;br /&gt;ちなみに、サイトロゴが初作成画像ですが、一日かかりました・・・(脱力&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;デザイナーさんの凄さを痛感しました。&lt;br /&gt;デザイナーさんありがとう。&lt;br /&gt;あなたたちのお力で生きていけてます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-5052932278121926129?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/5052932278121926129/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=5052932278121926129' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5052932278121926129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5052932278121926129'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2010/06/blog-post_26.html' title='絵心がない。。。'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-3076904610438615035</id><published>2010-06-26T11:49:00.002+09:00</published><updated>2010-06-26T11:54:41.180+09:00</updated><title type='text'>YSlowは便利だった</title><content type='html'>YSlowは便利でした。&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/ja/firefox/addon/5369/"&gt;https://addons.mozilla.org/ja/firefox/addon/5369/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;js圧縮した方がいいよ。&lt;br /&gt;画像にexpireつけた方がいいよ。&lt;br /&gt;etc...&lt;br /&gt;&lt;br /&gt;と色々アドバイスがありちょー助かりました。&lt;br /&gt;おかげ様でショッピングサイトはサーバに飛んでくるリクエストの数をそれなりに軽減できました。&lt;br /&gt;jsの圧縮なんてあんまり効果ないんじゃない？&lt;br /&gt;なんて思ってましたが、それなりに効果あるみたいですね。&lt;br /&gt;&lt;br /&gt;商品画像は商品提供者のサーバにあるのでexpireつけれないなー。&lt;br /&gt;商品画像も自分のサーバに全キャッシュしちゃおうかなー。&lt;br /&gt;うーん、めんどくさい。もー他のサイトを作りたくなってきた。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-3076904610438615035?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/3076904610438615035/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=3076904610438615035' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/3076904610438615035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/3076904610438615035'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2010/06/yslow.html' title='YSlowは便利だった'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-8622680412534802311</id><published>2010-06-26T11:43:00.003+09:00</published><updated>2010-06-26T11:48:48.764+09:00</updated><title type='text'>ショッピングサイトを作ってみました</title><content type='html'>ショッピングサイトを作ってみました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pu-chan.jp/"&gt;http://pu-chan.jp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;色々課題は残ってますが、自分でサイトを作ってみるお勉強第一弾。&lt;br /&gt;ってことで。一旦オープンさせました。&lt;br /&gt;サーバ借りたり、ドメイン取得したり・・&lt;br /&gt;一人でやってみると意外と面倒なもんでした・・・&lt;br /&gt;お勉強代もそれなりにして・・・&lt;br /&gt;一番悩んだのはやはり、お金が結構・・・ってとこでした(笑&lt;br /&gt;&lt;br /&gt;まずは、商品検索がダサいからそこから改修しまーす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-8622680412534802311?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/8622680412534802311/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=8622680412534802311' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/8622680412534802311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/8622680412534802311'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2010/06/blog-post.html' title='ショッピングサイトを作ってみました'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-3533955930679161558</id><published>2009-10-19T11:45:00.001+09:00</published><updated>2009-10-19T11:48:04.182+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>ブラウザに表示されている画面を直接編集する方法</title><content type='html'>&lt;a href="http://masutaka.net/chalow/2009-10-04-1.html"&gt;Web ブラウザに表示されている画面を直接編集する方法&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;使いどころがない気もするけど、すごいですね。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;javascript:document.body.contentEditable='true'; document.designMode='on'; void 0&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-3533955930679161558?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/3533955930679161558/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=3533955930679161558' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/3533955930679161558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/3533955930679161558'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/10/blog-post_19.html' title='ブラウザに表示されている画面を直接編集する方法'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-317450659830682266</id><published>2009-10-19T10:49:00.010+09:00</published><updated>2009-10-19T11:06:56.274+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>jQueryのセレクタ</title><content type='html'>よく使うのによく忘れる・・・なんでだろう・・・&lt;br /&gt;よく使うのだけメモっておこう。&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;要素セレクター&lt;br /&gt;      &lt;li&gt;$(&amp;#34;要素名&amp;#34;)&lt;br /&gt;      &lt;li&gt;特定のhtml要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;IDセレクター&lt;br /&gt;      &lt;li&gt;$(&amp;#34;#ID名&amp;#34;)&lt;br /&gt;      &lt;li&gt;特定のid属性の値を持つ要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;クラスセレクター&lt;br /&gt;      &lt;li&gt;$(&amp;#34;.クラス名&amp;#34;)&lt;br /&gt;      &lt;li&gt;特定のclass属性の値を持つ要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;子孫セレクター&lt;br /&gt;      &lt;li&gt;$(&amp;#34;要素1 要素2&amp;#34;)&lt;br /&gt;      &lt;li&gt;特定の要素の内側にある要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;first-child擬似クラス&lt;br /&gt;      &lt;li&gt;$(&amp;#34;要素:first-child&amp;#34;)&lt;br /&gt;      &lt;li&gt;特定の要素内の最初の要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;last-child擬似クラス&lt;br /&gt;      &lt;li&gt;$(&amp;#34;要素:last-child&amp;#34;)&lt;br /&gt;      &lt;li&gt;特定の要素内の最後の要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;only-child擬似クラス&lt;br /&gt;      &lt;li&gt;$(&amp;#34;要素:only-child&amp;#34;)&lt;br /&gt;      &lt;li&gt;指定した要素が1つだけ含まれる特定の要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;[attribute]&lt;br /&gt;      &lt;li&gt;$(&amp;#34;[属性名]&amp;#34;)&lt;br /&gt;      &lt;li&gt;特定の属性を持つ要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;[attribute=&amp;#39;value&amp;#39;]&lt;br /&gt;      &lt;li&gt;$(&amp;#34;[属性名=&amp;#39;値&amp;#39;]&amp;#34;)&lt;br /&gt;      &lt;li&gt;特定の属性が指定した値を持つ要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;[attribute!=&amp;#39;value&amp;#39;]&lt;br /&gt;      &lt;li&gt;$(&amp;#34;要素名[属性名!=&amp;#39;値&amp;#39;]&amp;#34;)&lt;br /&gt;      &lt;li&gt;特定の属性が指定した値を持たない要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;[attribute^=&amp;#39;value&amp;#39;]&lt;br /&gt;      &lt;li&gt;$(&amp;#34;[属性名^=&amp;#39;値&amp;#39;]&amp;#34;)&lt;br /&gt;      &lt;li&gt;特定の属性が特定した値で始まっている要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;[attribute$=&amp;#39;value&amp;#39;]&lt;br /&gt;      &lt;li&gt;$(&amp;#34;[属性名$=&amp;#39;値&amp;#39;]&amp;#34;)&lt;br /&gt;      &lt;li&gt;特定の属性が特定した値で終わっている要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;[attribute*=&amp;#39;value&amp;#39;]&lt;br /&gt;      &lt;li&gt; $(&amp;#34;[属性名*=&amp;#39;値&amp;#39;]&amp;#34;)&lt;br /&gt;      &lt;li&gt;特定の属性が特定した値を含んでいる要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;[attributeFilter1][attributeFilter2]&lt;br /&gt;      &lt;li&gt;$(&amp;#34;[属性セレクター1][属性セレクター2]&amp;#34;)&lt;br /&gt;      &lt;li&gt;複数の属性セレクターに該当する要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;firstフィルター &lt;br /&gt;      &lt;li&gt;$(&amp;#34;要素:first&amp;#34;)&lt;br /&gt;      &lt;li&gt;指定した要素の最初の要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;lastフィルター&lt;br /&gt;      &lt;li&gt;$(&amp;#34;要素:last&amp;#34;)&lt;br /&gt;      &lt;li&gt;指定した要素の最後の要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;evenフィルター&lt;br /&gt;      &lt;li&gt;$(&amp;#34;要素:even&amp;#34;)&lt;br /&gt;      &lt;li&gt;指定した要素の偶数番目の要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;oddフィルター&lt;br /&gt;      &lt;li&gt;$(&amp;#34;要素:odd&amp;#34;)&lt;br /&gt;      &lt;li&gt;指定した要素の奇数番目の要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;eqフィルター&lt;br /&gt;      &lt;li&gt;$(&amp;#34;要素:eq(番号)&amp;#34;)&lt;br /&gt;      &lt;li&gt;指定した番号の要素（番号は0から数える）&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;gtフィルター&lt;br /&gt;      &lt;li&gt;$(&amp;#34;要素:gt(番号)&amp;#34;)&lt;br /&gt;      &lt;li&gt;指定した番号より後の要素（番号は0から数える）&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;ltフィルター&lt;br /&gt;      &lt;li&gt;$(&amp;#34;要素:lt(番号)&amp;#34;)&lt;br /&gt;      &lt;li&gt;指定した番号より前の要素（番号は0から数える）&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;headerフィルター&lt;br /&gt;      &lt;li&gt;$(&amp;#34;要素:header&amp;#34;)&lt;br /&gt;      &lt;li&gt;h1～h6までのheader要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;containsフィルター&lt;br /&gt;      &lt;li&gt;$(&amp;#34;要素:contains(文字列)&amp;#34;)&lt;br /&gt;      &lt;li&gt;特定の文字列が含まれている要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;hasフィルター&lt;br /&gt;      &lt;li&gt;$(&amp;#34;要素1:had(要素2)&amp;#34;)&lt;br /&gt;      &lt;li&gt;特定の要素が含まれている要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;      &lt;li&gt;parentフィルター&lt;br /&gt;      &lt;li&gt;$(&amp;#34;要素:parent&amp;#34;)&lt;br /&gt;      &lt;li&gt;子要素やテキストを含む要素&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-317450659830682266?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/317450659830682266/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=317450659830682266' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/317450659830682266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/317450659830682266'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/10/jquery-html-id-id-class-2-first-child.html' title='jQueryのセレクタ'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-7121635835622987735</id><published>2009-10-19T09:02:00.004+09:00</published><updated>2009-10-19T09:06:09.935+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><title type='text'>シートの内容が変更されたことをハンドリング</title><content type='html'>タイトルが適当かよく分かりませんが・・・&lt;br /&gt;ユーザ定義のリストの内容が変更されたら、それに属したデータを表示したい。&lt;br /&gt;ってことはよくあると思います。&lt;br /&gt;Worksheet_Change(ByVal Target As Range)&lt;br /&gt;ってSubを用意してやると、変更されたときをハンドリングしてくれて&lt;br /&gt;変更されたセル情報が渡ってくる。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Private Sub Worksheet_Change(ByVal Target As Range)&lt;br /&gt;&lt;br /&gt;    If Target.Column = 11 Then&lt;br /&gt;&lt;br /&gt;        'hoge&lt;br /&gt;&lt;br /&gt;    Else&lt;br /&gt;&lt;br /&gt;        'fuga&lt;br /&gt;&lt;br /&gt;    End If&lt;br /&gt;&lt;br /&gt;End Sub&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-7121635835622987735?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/7121635835622987735/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=7121635835622987735' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/7121635835622987735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/7121635835622987735'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/10/blog-post.html' title='シートの内容が変更されたことをハンドリング'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-6422230626110646778</id><published>2009-10-19T09:01:00.001+09:00</published><updated>2009-10-19T09:01:34.658+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><title type='text'>VBAで文字コードを指定してファイル出力</title><content type='html'>エクセルを使っているとよくVBA使います。&lt;br /&gt;テキストファイルに出力する際の文字コードの設定方法。&lt;br /&gt;&lt;div class="contentstitle"&gt;参照設定の追加&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;ツール→参照設定→Microsoft ActiveX Data Objects 2.7 Library&lt;br /&gt;&lt;br /&gt;の手順で参照設定を追加&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;ソース&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Public Sub Write(filename As String, text As String)&lt;br /&gt;    &lt;br /&gt; On Error GoTo err_&lt;br /&gt; &lt;br /&gt;    Dim Stm As New ADODB.Stream&lt;br /&gt;    Dim bytData() As Byte&lt;br /&gt;    &lt;br /&gt;    With Stm&lt;br /&gt;        .Charset = "utf-8"&lt;br /&gt;        .Type = adTypeText&lt;br /&gt;        .Open&lt;br /&gt;        .WriteText (text)&lt;br /&gt;        .Position = 0&lt;br /&gt;        .Type = adTypeBinary&lt;br /&gt;        .Position = 3&lt;br /&gt;        bytData = .Read&lt;br /&gt;        .Close&lt;br /&gt;        .Open&lt;br /&gt;        .Type = adTypeBinary&lt;br /&gt;        .Write bytData&lt;br /&gt;        .SaveToFile filename, adSaveCreateOverWrite&lt;br /&gt;        .Close&lt;br /&gt;    End With&lt;br /&gt;    Set Stm = Nothing&lt;br /&gt;&lt;br /&gt;    Exit Sub&lt;br /&gt;&lt;br /&gt;err_:&lt;br /&gt;    If Stm.State = adStateOpen Then&lt;br /&gt;        Stm.Close&lt;br /&gt;    End If&lt;br /&gt;    Set Stm = Nothing&lt;br /&gt;    Err.Raise Err.Number&lt;br /&gt;End Sub&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;こんな感じで文字コードを指定してファイル出力できる。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-6422230626110646778?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/6422230626110646778/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=6422230626110646778' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6422230626110646778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6422230626110646778'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/10/vba.html' title='VBAで文字コードを指定してファイル出力'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-4234255441241408997</id><published>2009-09-01T17:48:00.008+09:00</published><updated>2009-10-19T09:01:55.717+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='S2JDBC'/><title type='text'>S2JDBCで取得する列を限定する！</title><content type='html'>S2JDBCの流れるインターフェースで検索すると、すべてのカラムが取得されます。嫌ならsqlファイルに書けばいいじゃん。って話ですが、せっかくのタイプセーフな検索が意味なし！&lt;br /&gt;悩んだ末、lazyを使えばいいのかとたどりつきました。&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;エンティティのプロパティにアノテーションつける&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;@Basic(fetch = FetchType.LAZY)&lt;br /&gt;public String hoge;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;eagerで取得する列を選択する&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;jdbcManager.from(HogeEntity.class).eager("hoge").getResultList();&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;これでHogeEntityのhoge列のみ取得します。&lt;br /&gt;(※実際にはeagerの引数にはタイプセーフな列名を指定します)&lt;br /&gt;注意点として、FKにはLazyは設定できません。(当り前か)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-4234255441241408997?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/4234255441241408997/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=4234255441241408997' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4234255441241408997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4234255441241408997'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/09/s2jdbc.html' title='S2JDBCで取得する列を限定する！'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-1137355936235366578</id><published>2009-08-28T14:21:00.002+09:00</published><updated>2009-08-28T14:26:18.722+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='[ツール][アクセス解析]'/><title type='text'>アクセス解析がおもしろい</title><content type='html'>ちょっと面白いアクセス解析がありました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ui.userlocal.jp/"&gt;http://ui.userlocal.jp/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;それにしてもユーザ属性まで分析できるとは！&lt;br /&gt;使ってみたいなぁ。&lt;br /&gt;早くこれを使える仕事をしたい！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-1137355936235366578?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/1137355936235366578/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=1137355936235366578' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/1137355936235366578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/1137355936235366578'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/08/blog-post_28.html' title='アクセス解析がおもしろい'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-8882538198836262911</id><published>2009-08-14T18:40:00.001+09:00</published><updated>2009-08-14T18:40:56.521+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>実行中のメソッド名が取得できる？</title><content type='html'>System.out.println(new Throwable().getStackTrace()[0].getMethodName());&lt;br /&gt;&lt;br /&gt;これだけで実行中のメソッド名が取得できます。&lt;br /&gt;んー・・・、仕組みが全く分からない。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-8882538198836262911?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/8882538198836262911/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=8882538198836262911' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/8882538198836262911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/8882538198836262911'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/08/blog-post_14.html' title='実行中のメソッド名が取得できる？'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-5436011800315148916</id><published>2009-08-14T18:26:00.001+09:00</published><updated>2009-08-14T18:28:33.787+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ランチャー'/><title type='text'>新たなランチャー！</title><content type='html'>今まではExtendQuickBarってやつを使ってました。&lt;br /&gt;&lt;a href="http://mebiusbox.crap.jp/software.html#ExtendQuickBar"&gt;http://mebiusbox.crap.jp/software.html#ExtendQuickBar&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;が！いい感じの新しいランチャーを発見！&lt;br /&gt;&lt;a href="http://www.launchy.net/"&gt;http://www.launchy.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;google デスクトップサーチっぽく起動窓が表示されるのがいい感じです。&lt;br /&gt;しばらくこれになりそうだなぁ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-5436011800315148916?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/5436011800315148916/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=5436011800315148916' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5436011800315148916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5436011800315148916'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/08/blog-post.html' title='新たなランチャー！'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-3580062653759449618</id><published>2009-08-14T18:12:00.009+09:00</published><updated>2009-10-20T08:53:55.914+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAStruts'/><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>tagファイルを使おう！</title><content type='html'>今まで全然知りませんでした。tagファイル。&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;tagファイルを作る&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;hoge.tag を以下の内容で作る&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;%@ tag pageEncoding="UTF-8"%&amp;gt;&lt;br /&gt;&amp;lt;%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%&amp;gt;&lt;br /&gt;&amp;lt;%@ attribute name="value" required="true" %&amp;gt;&lt;br /&gt;&amp;lt;fmt:formatNumber value="${value}" pattern="###,###" /&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;tagdirを指定する&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;作ったタグファイルを使うjspで、&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;lt;%@taglib tagdir="/WEB-INF/tags" prefix="m" %&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;と宣言する。&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;使ってみる！&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&amp;lt;m:hoge value="${hogeDto.hogeNUm}" /&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;って感じで、valueにelで値を渡せばフォーマットしてくれる。&lt;br /&gt;マクロみたいな感じですかね。&lt;br /&gt;詳細な解説はこちらにありました。&lt;br /&gt;&lt;a href="http://www.techscore.com/tech/J2EE/JSP/14.html"&gt;http://www.techscore.com/tech/J2EE/JSP/14.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-3580062653759449618?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/3580062653759449618/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=3580062653759449618' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/3580062653759449618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/3580062653759449618'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/08/tag.html' title='tagファイルを使おう！'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-1565450358196044207</id><published>2009-07-16T13:07:00.002+09:00</published><updated>2009-07-16T13:10:09.018+09:00</updated><title type='text'>spotmapオープン！</title><content type='html'>&lt;a href="http://spotmap.jp"&gt;http://spotmap.jp&lt;/a&gt;がオープンしました！&lt;br /&gt;&lt;br /&gt;路線、駅、店舗の周辺スポットが探せる地域情報サイト「Spotmap」。全国の地域情報、知りたい街の情報を地図上にスポット表示！地図からお店などが探せます！&lt;br /&gt;&lt;br /&gt;他にも似たようなサイトはありますが、とてもシンプルで直感で使い方がわかるちょっと新しい感じですね。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://spotmap.jp/index.html"&gt;皆様お試しを！&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-1565450358196044207?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/1565450358196044207/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=1565450358196044207' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/1565450358196044207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/1565450358196044207'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/07/spotmap.html' title='spotmapオープン！'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-1620953127345570075</id><published>2009-07-02T16:47:00.009+09:00</published><updated>2009-07-02T17:18:28.802+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Nutch'/><title type='text'>Nutchのキャッシュ文字化け問題</title><content type='html'>&lt;div class="contentstitle"&gt;Nutchインストール &amp; クロール&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;こちらの手順でさっくりインストール &amp; クロールできます。&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/knaka20blue/20090602"&gt;http://d.hatena.ne.jp/knaka20blue/20090602&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;knaka20blueさんに感謝！&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;cache文字化け対処 方法１．cached.jspを修正する&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;修正するファイル：$CATALINA_HOME/webapps/nutch/cached.jsp&lt;br /&gt;&lt;br /&gt;・29行目付近に↓を追加&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;import="org.apache.nutch.util.EncodingDetector"&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;・55行目付近を修正&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;encoding = (String) metaData.get("CharEncodingForConversion");&lt;br /&gt;↓&lt;br /&gt;encoding = EncodingDetector.parseCharacterEncoding((String) metaData.get("Content-Type"));&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;cache文字化け対処 方法２．HtmlParserを修正する&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;※以下、/usr/local/src/nutch-2009-06-09_04-01-14/ は適宜環境に合わせて読み替えて&lt;br /&gt;  下さい。&lt;br /&gt;&lt;br /&gt;・修正するファイル： /usr/local/src/nutch-2009-06-09_04-01-14/src/plugin/parse-html/src/java/org/apache/nutch/parse/html/HtmlParser.java&lt;br /&gt;&lt;br /&gt;・127行目付近を修正&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Metadata metadata = new Metadata();&lt;br /&gt;↓&lt;br /&gt;Metadata metadata = content.getMetadata();&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;・jar ファイルを作る&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;cd /usr/local/src/nutch-2009-06-09_04-01-14/&lt;br /&gt;ant&lt;br /&gt;cp /usr/local/src/nutch-2009-06-09_04-01-14/build/parse-html/parse-html.jar /usr/local/src/nutch-2009-06-09_04-01-14/plugins/parse-html/parse-html.jar&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;cache文字化け対処どちらにするか・・・&lt;/div&gt;&lt;br /&gt;バグなので対処２が本来とは思うものの、対処１でも軽く試すだけならいい気がする。&lt;br /&gt;でもバグがどこまで影響あるか分からないから、本格的にNutch使うなら対処２を選択したほうがいいのかなぁ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-1620953127345570075?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/1620953127345570075/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=1620953127345570075' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/1620953127345570075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/1620953127345570075'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/07/nutch.html' title='Nutchのキャッシュ文字化け問題'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-5934713769072556196</id><published>2009-06-26T13:15:00.001+09:00</published><updated>2009-06-26T13:16:49.573+09:00</updated><title type='text'>postgresqlでselect文の結果をファイル出力</title><content type='html'>psql -U[DB USER NAME] [DB NAME] -c "select id from hoge" -o select_rs&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-5934713769072556196?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/5934713769072556196/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=5934713769072556196' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5934713769072556196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5934713769072556196'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/06/postgresqlselect.html' title='postgresqlでselect文の結果をファイル出力'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-4374660509038949467</id><published>2009-06-22T10:08:00.003+09:00</published><updated>2009-06-22T10:17:47.994+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='セキュリティ'/><title type='text'>DenyHostでssh攻撃を防ぐ</title><content type='html'>&lt;div class="contentstitle"&gt;インストール&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;wget http://jaist.dl.sourceforge.net/sourceforge/denyhosts/DenyHosts-2.6.tar.gz&lt;br /&gt;tar zxvf ./DenyHosts-2.6.tar.gz&lt;br /&gt;cd DenyHosts-2.6&lt;br /&gt;python setup.py install&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;設定&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;cd /usr/share/denyhosts/&lt;br /&gt;cp denyhosts.cfg-dist denyhosts.cfg&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;SECURE_LOG = /var/log/secure&lt;/li&gt;&lt;br /&gt;  セキュリティログの場所。&lt;br /&gt;  特に、sshdのエラー関係が記録されるログファイル。&lt;br /&gt;&lt;li&gt;HOSTS_DENY = /etc/hosts.deny&lt;/li&gt;&lt;br /&gt;  拒否ホストの情報が書かれているファイル。&lt;br /&gt;&lt;li&gt;PURGE_DENY =&lt;/li&gt;&lt;br /&gt;  一旦拒否アドレスに追加したとき、その拒否を解除するまでの時間。&lt;br /&gt;  m(分)h(時間)d(日)w(週間)y(年間)のオプションを付けます。&lt;br /&gt;&lt;li&gt;PURGE_THRESHOLD =&lt;/li&gt;&lt;br /&gt;  何回拒否アドレスに追加されたら、「永久拒否アドレス」（解除しない）にするか。&lt;br /&gt;&lt;li&gt;BLOCK_SERVICE =&lt;/li&gt;&lt;br /&gt;  どのサービスへのアクセスを拒否するか。&lt;br /&gt;  ALLにすれば、全てのサービス、sshdにすれば、sshでのアクセスを拒否。&lt;br /&gt;&lt;li&gt;DENY_THRESHOLD_INVALID =&lt;/li&gt;&lt;br /&gt;  何回認証失敗したら拒否リストへ入れるか。&lt;br /&gt;  これは、システムに登録されていないユーザを使った場合の設定。&lt;br /&gt;&lt;li&gt;DENY_THRESHOLD_VALID =&lt;/li&gt;&lt;br /&gt;  これは、システムに存在するユーザ（つまり、パスワードが違う）を使った場合。&lt;br /&gt;  あまり少なくすると、パスワード打ち間違いが何度かあったときに自分までロックされる。&lt;br /&gt;&lt;li&gt;DENY_THRESHOLD_ROOT =&lt;/li&gt;&lt;br /&gt;  これは、rootで認証に失敗した場合。&lt;br /&gt;  rootでいきなりログインできるようにはしていないと思いますが･･･。&lt;br /&gt;  ここを１にしておくと、間違えてrootで認証かけてしまったときに、自分が拒否リストに入ってしまう。&lt;br /&gt;&lt;li&gt;ADMIN_EMAIL =&lt;/li&gt;&lt;br /&gt;  拒否リストへ追加されたホストの情報をメールで送信する場合、その送信先アドレス。&lt;br /&gt;&lt;li&gt;SMTP_HOST =&lt;/li&gt;&lt;br /&gt;&lt;li&gt;SMTP_PORT =&lt;/li&gt;&lt;br /&gt;  上記メールの送信サーバとポート番号&lt;br /&gt;&lt;li&gt;SMTP_USERNAME=&lt;/li&gt;&lt;br /&gt;&lt;li&gt;SMTP_PASSWORD=&lt;/li&gt;&lt;br /&gt;  メール送信にユーザ名とパスワードが必要な場合。&lt;br /&gt;&lt;li&gt;SMTP_FROM =&lt;/li&gt;&lt;br /&gt;  メールの差出人&lt;br /&gt;&lt;li&gt;SMTP_SUBJECT =&lt;/li&gt;&lt;br /&gt;  メールのタイトル（件名）&lt;br /&gt;&lt;li&gt;AGE_RESET_VALID =&lt;/li&gt;&lt;br /&gt;  認証失敗（拒否アドレスにはまだ追加されていない）からここで設定した日数経過すると、カウントが０になって、また１回目の認証になる。&lt;br /&gt;  これは、システムに登録されているユーザ名での場合。&lt;br /&gt;&lt;li&gt;AGE_RESET_ROOT =&lt;/li&gt;&lt;br /&gt;  これは、rootの場合。&lt;br /&gt;&lt;li&gt;AGE_RESET_INVALID =&lt;/li&gt;&lt;br /&gt;  これは、システムに登録されていないユーザ名での場合。&lt;br /&gt;&lt;li&gt;RESET_ON_SUCCESS = &lt;/li&gt;&lt;br /&gt;  ここをyesにしておくと、認証失敗しても、（拒否アドレスに追加されるまでなら）認証に成功したら認証失敗のカウントがリセットされる。&lt;br /&gt;  noにしておくと、認証に成功しても先回の認証失敗は指定(AGE_RESET_XXX)期間中カウントされている。&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;起動&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;cp daemon-control-dist daemon-control&lt;br /&gt;chown root daemon-control&lt;br /&gt;chmod 700 daemon-control&lt;br /&gt;cd /etc/rc.d/init.d/&lt;br /&gt;ln -s /usr/share/denyhosts/daemon-control denyhosts&lt;br /&gt;/etc/rc.d/init.d/denyhosts start&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-4374660509038949467?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/4374660509038949467/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=4374660509038949467' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4374660509038949467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4374660509038949467'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/06/denyhostssh.html' title='DenyHostでssh攻撃を防ぐ'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-6414533421643304423</id><published>2009-06-16T15:44:00.003+09:00</published><updated>2009-06-16T15:46:10.664+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cakephp'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>cakephpで例外をハンドリングする</title><content type='html'>&lt;div class="contentstitle"&gt;ディスパッチャーを修正&lt;/div&gt;&lt;br /&gt;[cakephpインストールディレクトリ]/cake/dispatcher.php&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;br /&gt;$output = $controller-&gt;dispatchMethod($params['action'], $params['pass']);&lt;br /&gt;&lt;br /&gt;↓のように修正&lt;br /&gt;&lt;br /&gt;try {&lt;br /&gt;&lt;br /&gt; $output = $controller-&gt;dispatchMethod($params['action'], $params['pass']);&lt;br /&gt;&lt;br /&gt;} catch (Exception $e) {&lt;br /&gt;&lt;br /&gt; $this-&gt;log($e-&gt;getMessage(), LOG_ERROR);&lt;br /&gt; $controller-&gt;layout = "app_error";&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-6414533421643304423?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/6414533421643304423/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=6414533421643304423' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6414533421643304423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6414533421643304423'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/06/blog-post_16.html' title='cakephpで例外をハンドリングする'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-900719440672498249</id><published>2009-06-12T09:51:00.001+09:00</published><updated>2009-06-12T09:51:40.788+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cakephp'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>コントローラーでモデルとコンポーネントを使う</title><content type='html'>// 使用するモデル&lt;br /&gt;var $uses = array("HogeHoge");&lt;br /&gt;// コンポーネント&lt;br /&gt;var $components = array("HogeCommon");&lt;br /&gt;&lt;br /&gt;で使用可能になります。&lt;br /&gt;&lt;br /&gt;$this-&gt;HogeHoge-&gt;hoge();&lt;br /&gt;$this-&gt;HogeCommon-&gt;com();&lt;br /&gt;&lt;br /&gt;という感じに。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-900719440672498249?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/900719440672498249/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=900719440672498249' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/900719440672498249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/900719440672498249'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/06/blog-post.html' title='コントローラーでモデルとコンポーネントを使う'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-1402349515348032713</id><published>2009-06-12T09:37:00.001+09:00</published><updated>2009-06-12T11:43:41.627+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cakephp'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>modelの任意のメソッドをキャッシュする</title><content type='html'>&lt;div class="contentstitle"&gt;CacheBehaviorを作る&lt;/div&gt;&lt;br /&gt;[cakephpインストールディレクトリ]/app/models/behaviors/cache.php&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;class CacheBehavior extends ModelBehavior {&lt;br /&gt;&lt;br /&gt;    static $cacheData = array();&lt;br /&gt;    var $enabled = true;&lt;br /&gt;    &lt;br /&gt;    function setup(&amp;$model, $config = array()) {}&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     * メソッドキャッシュ&lt;br /&gt;     */&lt;br /&gt;    function cacheMethod(&amp;$model, $expire, $method, $args = array()){&lt;br /&gt;&lt;br /&gt;        $this-&gt;enabled = false;&lt;br /&gt;        // キャッシュキー&lt;br /&gt;        $cachekey = get_class($model) . '_' . $method . '_'  . $expire . '_' . md5(serialize($args));&lt;br /&gt;        &lt;br /&gt;        // 変数キャッシュの場合&lt;br /&gt;        if(!$expire){&lt;br /&gt;            if (isset($this-&gt;cacheData[$cachekey])) {&lt;br /&gt;                $this-&gt;enabled = true;&lt;br /&gt;                return $this-&gt;cacheData[$cachekey];&lt;br /&gt;            }&lt;br /&gt;            $ret = call_user_func_array(array($model, $method), $args);&lt;br /&gt;            $this-&gt;enabled = true;&lt;br /&gt;            $this-&gt;cacheData[$cachekey] = $ret;&lt;br /&gt;            return $ret;&lt;br /&gt;        }&lt;br /&gt;        &lt;br /&gt;        // サーバーキャッシュの場合&lt;br /&gt;        $ret = Cache::read($cachekey);&lt;br /&gt;        if(!empty($ret)){&lt;br /&gt;            $this-&gt;enabled = true;&lt;br /&gt;            return $ret;&lt;br /&gt;        }&lt;br /&gt;        $ret = call_user_func_array(array($model, $method), $args);&lt;br /&gt;        $this-&gt;enabled = true;&lt;br /&gt;        Cache::write($cachekey, $ret, $expire);&lt;br /&gt;        &lt;br /&gt;        // クリア用にモデル毎のキャッシュキーリストを作成&lt;br /&gt;        $cacheListKey = get_class($model) . '_cacheMethodList';&lt;br /&gt;        $list = Cache::read($cacheListKey);&lt;br /&gt;        $list[$cachekey] = 1;&lt;br /&gt;        Cache::write($cacheListKey, $list);&lt;br /&gt;        return $ret;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     * 再帰防止判定用&lt;br /&gt;     */&lt;br /&gt;    function cacheEnabled(&amp;$model){&lt;br /&gt;        return $this-&gt;enabled;&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     * キャッシュクリア&lt;br /&gt;     */&lt;br /&gt;    function cacheDelete(&amp;$model){&lt;br /&gt;        $cacheListKey = get_class($model) . '_cacheMethodList';&lt;br /&gt;        $list = Cache::read($cacheListKey);&lt;br /&gt;        if(empty($list)) return;&lt;br /&gt;        foreach($list as $key =&gt; $tmp){&lt;br /&gt;            Cache::delete($key);&lt;br /&gt;        }&lt;br /&gt;        Cache::delete($cacheListKey);&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    /**&lt;br /&gt;     * 追加・変更・削除時にはキャッシュをクリア&lt;br /&gt;     */&lt;br /&gt;    function afterSave(&amp;$model, $created) {&lt;br /&gt;        $this-&gt;cacheDelete($model);&lt;br /&gt;    }&lt;br /&gt;    function afterDelete(&amp;$model) {&lt;br /&gt;        $this-&gt;cacheDelete($model);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;機能説明&lt;/div&gt;&lt;br /&gt;１．モデル内の任意のメソッドの結果をキャッシュする&lt;br /&gt;２．キャッシュ有効期限を指定しない(もしくは0を指定)場合は、変数にキャッシュする（同一のリクエスト内で有効）&lt;br /&gt;３．モデルのデータ内容に変化（追加・更新・削除）があった場合には自動的にキャッシュをクリアする&lt;br /&gt;４．コントローラーからモデルのメソッドを呼び出す際にキャッシュを実装可能にする&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;使い方&lt;/div&gt;&lt;br /&gt;以下をmodelのfunctionの先頭に追加。&lt;br /&gt;キャッシュの有効時間は秒指定です。&lt;br /&gt;この例では30日間キャッシュを有効にします。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;if ($this-&gt;Behaviors-&gt;attached('Cache')) {&lt;br /&gt;&lt;br /&gt;    $args = func_get_args();&lt;br /&gt;    if($this-&gt;cacheEnabled()) {&lt;br /&gt;        return $this-&gt;cacheMethod('2592000', __FUNCTION__, $args);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-1402349515348032713?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/1402349515348032713/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=1402349515348032713' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/1402349515348032713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/1402349515348032713'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/06/model.html' title='modelの任意のメソッドをキャッシュする'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-4943703688578199813</id><published>2009-06-12T09:12:00.001+09:00</published><updated>2009-06-12T11:44:09.223+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cakephp'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>cakephpのログ出力をlog4phpにする</title><content type='html'>&lt;div class="contentstitle"&gt;log4phpをダウンロード&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.vxr.it/log4php/download.html"&gt;http://www.vxr.it/log4php/download.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;log4phpを配置&lt;/div&gt;&lt;br /&gt;[cakeインストールディレクトリ]/vendors/log4php/&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;cake_log.phpを編集&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;?php&lt;br /&gt; if (!class_exists('File')) {&lt;br /&gt;  require LIBS . 'file.php';&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; if (!defined('LOG_WARNING')) {&lt;br /&gt;  define('LOG_WARNING', 3);&lt;br /&gt; }&lt;br /&gt; if (!defined('LOG_NOTICE')) {&lt;br /&gt;  define('LOG_NOTICE', 4);&lt;br /&gt; }&lt;br /&gt; if (!defined('LOG_DEBUG')) {&lt;br /&gt;  define('LOG_DEBUG', 5);&lt;br /&gt; }&lt;br /&gt; if (!defined('LOG_INFO')) {&lt;br /&gt;  define('LOG_INFO', 6);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;define('LOG4PHP_CONFIGURATION', ROOT . DS . APP_DIR . DS .'config' .DS .'log4php.properties');&lt;br /&gt;&lt;br /&gt;require_once(VENDORS.'log4php/LoggerManager.php');&lt;br /&gt;&lt;br /&gt;class CakeLog {&lt;br /&gt;&lt;br /&gt; function CakeLog() {&lt;br /&gt;  $args = func_get_args();&lt;br /&gt;     if (method_exists($this, '__destruct')) {&lt;br /&gt;   register_shutdown_function (array(&amp;$this, '__destruct'));&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; function __destruct() {&lt;br /&gt;  LoggerManager::shutdown();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; function write($type, $msg) {&lt;br /&gt;&lt;br /&gt;  if (!defined('LOG_ERROR')) {&lt;br /&gt;   define('LOG_ERROR', 2);&lt;br /&gt;  }&lt;br /&gt;  if (!defined('LOG_ERR')) {&lt;br /&gt;   define('LOG_ERR', LOG_ERROR);&lt;br /&gt;  }&lt;br /&gt;  $levels = array(&lt;br /&gt;   LOG_WARNING =&gt; 'warning',&lt;br /&gt;   LOG_NOTICE =&gt; 'notice',&lt;br /&gt;   LOG_INFO =&gt; 'info',&lt;br /&gt;   LOG_DEBUG =&gt; 'debug',&lt;br /&gt;   LOG_ERR =&gt; 'error',&lt;br /&gt;   LOG_ERROR =&gt; 'error'&lt;br /&gt;  );&lt;br /&gt;&lt;br /&gt;  if (is_int($type) &amp;&amp; isset($levels[$type])) {&lt;br /&gt;   $type = $levels[$type];&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  $logger =&amp; LoggerManager::getLogger(basename($_SERVER['SCRIPT_NAME']));&lt;br /&gt;  $output = $msg;&lt;br /&gt;  switch ($type) {&lt;br /&gt;   case 'debug':&lt;br /&gt;    $logger-&gt;debug($output);&lt;br /&gt;    break;&lt;br /&gt;   case 'info':&lt;br /&gt;    $logger-&gt;info($output);&lt;br /&gt;    break;&lt;br /&gt;   case 'warning':&lt;br /&gt;    $logger-&gt;warn($output);&lt;br /&gt;    break;&lt;br /&gt;   case 'error':&lt;br /&gt;    $logger-&gt;error($output);&lt;br /&gt;    break;&lt;br /&gt;  }&lt;br /&gt;  return true;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;log4php.propertiesを作成&lt;/div&gt;&lt;br /&gt;[cakeインストールディレクトリ]/app/config/log4php.properties&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;log4php.rootLogger=DEBUG, APP&lt;br /&gt;log4php.appender.APP=LoggerAppenderDailyFile&lt;br /&gt;log4php.appender.APP.file=/home/mmm/log/web/sample_log_%s.log&lt;br /&gt;log4php.appender.APP.layout=LoggerPatternLayout&lt;br /&gt;log4php.appender.APP.layout.ConversionPattern=%d %5p - %m%n&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;注意点&lt;/div&gt;&lt;br /&gt;LoggerAppenderDailyFile って日付でローテートしてくれるのかと思ったら日付付きのログファイルにログ出力するだけでした。&lt;br /&gt;ホントにローテートさせたいのであれば、Appenderを自作するかlogrotateとか使うってなる感じです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-4943703688578199813?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/4943703688578199813/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=4943703688578199813' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4943703688578199813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4943703688578199813'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/06/cakephplog4php.html' title='cakephpのログ出力をlog4phpにする'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-1656092130908413647</id><published>2009-05-28T22:50:00.009+09:00</published><updated>2009-06-12T09:08:32.372+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Dos'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>apacheでDos攻撃を防ぐ！</title><content type='html'>&lt;div class="contentstitle"&gt;mod_dosdetectorを使う！&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;wget http://ncu.dl.sourceforge.net/sourceforge/moddosdetector/mod_dosdetector-0.2.tar.gz&lt;/li&gt;&lt;br /&gt;&lt;li&gt;tar xvzf mod_dosdetector-0.2.tar.gz&lt;/li&gt;&lt;br /&gt;&lt;li&gt;cd mod_dosdetector-0.2&lt;/li&gt;&lt;br /&gt;&lt;li&gt;make&lt;/li&gt;&lt;br /&gt;&lt;li&gt;make install&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;httpd.confの設定&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;LoadModule dosdetector_module modules/mod_dosdetector.so&lt;br /&gt; &lt;br /&gt;DoSDetection     on&lt;br /&gt;DoSPeriod        5&lt;br /&gt;DoSThreshold     10&lt;br /&gt;DoSHardThreshold 25&lt;br /&gt;DoSBanPeriod     30&lt;br /&gt;DoSTableSize     100&lt;br /&gt;DoSIgnoreContentType  .(js|png|jpe?g|gif|css|ico)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;httpd.confの設定解説&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;上記例は&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;   1. 同一IPアドレスから5秒間に10回以上のアクセスがあった場合「DoS攻撃の疑いあり」と見なし、その後30秒間のアクセスに対しては環境変数 SuspectDoS をセットする（値は”1″）&lt;br /&gt;&lt;br /&gt;   2. さらに5秒間のアクセス回数が25回に達した場合、「DoS攻撃の疑い濃厚」と見なし、環境変数 SuspectHardDoS もセットする（値は”1″）&lt;br /&gt;&lt;br /&gt;   3. 初めに「DoS攻撃の疑いあり」と判定してから30秒が経過したら、次のアクセスでもう一度判定をやり直す。直近5秒のアクセスが10回を下回っていれば、疑いは晴れる&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;という意味。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;DoSDetection&lt;br /&gt;    DoS判定機能の有効・無効を設定。on で有効&lt;br /&gt;&lt;br /&gt;DoSTableSize&lt;br /&gt;    クライアントの追跡記録の最大保存数。&lt;br /&gt;    この数値を大きくし過ぎるとメモリ使用量と負荷が上昇する&lt;br /&gt;&lt;br /&gt;DoSShmemName&lt;br /&gt;    クライアントの追跡記録を保存しておくための共有メモリの名前。&lt;br /&gt;    (設定しなくても問題なし)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;※icoを次のように AddType を追加しておけば image と判定される。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;AddType  image/vnd.microsoft.icon  .ico&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;DoS攻撃に対する防御設定&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;mod_dosdetector が行うのはあくまでも攻撃の”検出”だけなので、防御する方法はまた別に設定する必要。&lt;br /&gt;「DoS攻撃の疑い濃厚」なアクセスに対してステータスコード503 + 静的なHTMLを返す場合は次のように設定（Apache 2.2 only）。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;RewriteEngine On&lt;br /&gt;RewriteCond %{ENV:SuspectHardDoS} =1&lt;br /&gt;RewriteRule .*  - [R=503,L]&lt;br /&gt; &lt;br /&gt;ErrorDocument 503 /server_is_busy.html&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;最後に&lt;/div&gt;&lt;br /&gt;ログの設定をする。これを設定しておかないときっとこのモジュールが動いてんだかなんだか分からない・・・&lt;br /&gt;&lt;br /&gt;DoS攻撃の疑いありなアクセスを普通のログと分けて記録。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;LogFormat "%{SuspectHardDoS}e %h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-Agent}i\"" dos_suspect&lt;br /&gt;CustomLog logs/dos_suspect_log dos_suspect env=SuspectDoS&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;実際に使ってみて&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;何故か&lt;br /&gt;DoSIgnoreContentType&lt;br /&gt;で指定したcontent-typeがignoreされませんでした。&lt;br /&gt;ログを仕込んでみたところ、gifでもcssでもtext/plainと判断していることが分かりました。&lt;br /&gt;が、AddType image/gif .gif や AddHandler image/gif .gif しても一向に現象が変わらず&lt;br /&gt;困り果てていたときに、以下の改造版を使ったらうまくいった！感謝！&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wp.serpere.info/archives/483"&gt; http://wp.serpere.info/archives/483&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-1656092130908413647?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/1656092130908413647/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=1656092130908413647' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/1656092130908413647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/1656092130908413647'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/05/apachedso.html' title='apacheでDos攻撃を防ぐ！'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-8090764146791616850</id><published>2009-05-28T16:32:00.001+09:00</published><updated>2009-05-28T16:33:57.468+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='コマンド'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><category scheme='http://www.blogger.com/atom/ns#' term='シェル'/><title type='text'>mailコマンドでfromを偽装できる</title><content type='html'>mail -s "test" "motoba@hoge.co.jp" -- -f "from@hoge.co.jp"&lt;br /&gt;&lt;br /&gt;を実行して、本文を入力すればmotoba@hoge.co.jpに差出人from@hoge.co.jp&lt;br /&gt;としてメールが送信できる！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-8090764146791616850?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/8090764146791616850/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=8090764146791616850' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/8090764146791616850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/8090764146791616850'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/05/mailfrom.html' title='mailコマンドでfromを偽装できる'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-2002892546319383924</id><published>2009-05-20T22:21:00.001+09:00</published><updated>2009-05-20T22:25:26.030+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='S2JDBC'/><category scheme='http://www.blogger.com/atom/ns#' term='S2Dao'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>PostgreSQLの接続文字列には注意！</title><content type='html'>PostgreSQL の Version8 のドライバを使用する際、protocolVersion=2は必須！&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;jdbc:postgresql://localhost:5432/postgres?protocolVersion=2&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;以前なんで？ってくらいSQLが遅くて散々時間を費やしたあげく、&lt;br /&gt;これが原因だったことがあった。&lt;br /&gt;接続文字列にprotocolVersion=2が無くてもなんとなく動いちゃうからやっかいだなぁ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-2002892546319383924?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/2002892546319383924/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=2002892546319383924' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2002892546319383924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2002892546319383924'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/05/postgresql_20.html' title='PostgreSQLの接続文字列には注意！'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-4309066023361931875</id><published>2009-05-20T21:26:00.001+09:00</published><updated>2009-05-20T21:29:42.128+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>imgのhover</title><content type='html'>イメージを２枚用意しなくてもできるんですね。&lt;br /&gt;&lt;br /&gt;&amp;lt;a href="#" class="hoge_hover"&amp;gt;&amp;lt;img src="hogehoge.jpg" /&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;br /&gt;a.hoge_hover:hover img {&lt;br /&gt;    filter:alpha(opacity=80); // for IE&lt;br /&gt;    opacity:0.8; // FF&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-4309066023361931875?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/4309066023361931875/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=4309066023361931875' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4309066023361931875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4309066023361931875'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/05/imghover.html' title='imgのhover'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-6276279585581836618</id><published>2009-05-17T13:06:00.005+09:00</published><updated>2009-06-12T09:09:42.822+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='緯度経度'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>PostgreSQLで範囲検索</title><content type='html'>ホットペッパーAPIでお店の情報をDBに投入。&lt;br /&gt;&lt;br /&gt;&lt;div  class="contentstitle"&gt;投入先のテーブル構成&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;CREATE TABLE shop&lt;br /&gt;(&lt;br /&gt;  "ID" integer NOT NULL,&lt;br /&gt;  "NAME" character varying(120) NOT NULL,&lt;br /&gt;  "KANA" character varying(255),&lt;br /&gt;  "PREF_CODE" smallint NOT NULL,&lt;br /&gt;  "ADDRESS" character varying(408) NOT NULL,&lt;br /&gt;  "IDO_JGD" double precision NOT NULL,&lt;br /&gt;  "KEIDO_JGD" double precision NOT NULL,&lt;br /&gt;  "OPENING_HOURS" character varying(255),&lt;br /&gt;  "REGULAR_HOLIDAY" character varying(255),&lt;br /&gt;  "URL_PC" character varying(255),&lt;br /&gt;  "URL_MB" character varying(255),&lt;br /&gt;  "IDO_AREA" integer NOT NULL,&lt;br /&gt;  "KEIDO_AREA" integer NOT NULL,&lt;br /&gt;  "GEO_AREA" point NOT NULL,&lt;br /&gt;  CONSTRAINT shop_pkey PRIMARY KEY ("ID")&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;CREATE INDEX shop_idx3&lt;br /&gt;  ON shop&lt;br /&gt;  USING btree&lt;br /&gt;  ("IDO_AREA", "KEIDO_AREA");&lt;br /&gt;&lt;br /&gt;CREATE INDEX shop_idx4&lt;br /&gt;  ON shop&lt;br /&gt;  USING gist&lt;br /&gt;  (circle("GEO_AREA", 0::double precision));&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;INSERT時のポイント&lt;/div&gt;&lt;br /&gt;緯度経度を以下のように1000倍した値をテーブルに投入する。&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;"IDO_AREA"　←　Integer.toString((int) (lat * 1000.0))した値&lt;br /&gt;"KEIDO_AREA"←　Integer.toString((int) (lon * 1000.0))した値&lt;br /&gt;"GEO_AREA"←　POINT(Integer.toString((int) (lat * 1000.0)), Integer.toString((int) (lat * 1000.0)))&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;具体的なINSERT文&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;INSERT INTO SHOP (&lt;br /&gt; "ID",&lt;br /&gt; "NAME",&lt;br /&gt; "PREF_CODE",&lt;br /&gt; "ADDRESS",&lt;br /&gt; "IDO_JGD",&lt;br /&gt; "KEIDO_JGD",&lt;br /&gt; "IDO_AREA",&lt;br /&gt; "KEIDO_AREA",&lt;br /&gt; "GEO_AREA")&lt;br /&gt;VALUES (&lt;br /&gt; 1,&lt;br /&gt; "ほげほげ店"&lt;br /&gt; 13,&lt;br /&gt; "東京都新宿区",&lt;br /&gt; 35.660671535,&lt;br /&gt; 139.6960513532,&lt;br /&gt; 35660,&lt;br /&gt; 139696,&lt;br /&gt; POINT(35660, 139696)&lt;br /&gt;);&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;検索してみる&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;select * from shop where circle("GEO_AREA" ,0) @ circle(point(35660,139696), 10) order by "GEO_AREA" &lt;-&gt; point(35660,139696) limit 500;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;おぉ！見事検索できました。&lt;br /&gt;インデックスが使われているかをみてみる。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;explain analyze select * from shop where circle("GEO_AREA" ,0) @ circle(point(35660,139696), 10) order by "GEO_AREA" &lt;-&gt; point(35660,139696) limit 500;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;おぉ！見事インデックスも使われてますね！&lt;br /&gt;&lt;br /&gt;ただ、問題は1000倍した緯度経度の基点として検索すること。&lt;br /&gt;上記のSQLはある点から近い順に500件取得する。&lt;br /&gt;としてますが、そのある点は実際の緯度経度から若干ずれてます。&lt;br /&gt;10～50m位と思われますが当然誤差が発生する。&lt;br /&gt;1000倍を10000倍と値を増やしていけばいいけどとりあえずは気にしないって方向で。&lt;br /&gt;&lt;br /&gt;参考にさせて頂いたURL&lt;br /&gt;&lt;a href="http://neta.ywcafe.net/000597.html"&gt;http://neta.ywcafe.net/000597.html&lt;/a&gt;&lt;br /&gt;ありがとうございました。&lt;br /&gt;めちゃめちゃ助かりました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-6276279585581836618?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/6276279585581836618/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=6276279585581836618' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6276279585581836618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6276279585581836618'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/05/postgresql_17.html' title='PostgreSQLで範囲検索'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-1288361590679798439</id><published>2009-05-16T19:42:00.004+09:00</published><updated>2009-06-12T09:10:12.409+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>PostgreSQLのダンプとリストア</title><content type='html'>色んなオプションがあるみたいだけど、とりあえず一番シンプルはやり方。&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;ダンプ&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;pg_dump.exe -U&amp;lt;user_name&amp;gt; &amp;lt;db_name&amp;gt; &amp;gt; c:\dump.sql&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;リストア&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;psql.exe -U&amp;lt;user_name&amp;gt; &amp;lt;db_name&amp;gt; &amp;lt; c:\test.txt&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-1288361590679798439?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/1288361590679798439/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=1288361590679798439' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/1288361590679798439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/1288361590679798439'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/05/postgresql.html' title='PostgreSQLのダンプとリストア'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-2875324090432206276</id><published>2009-05-16T19:32:00.003+09:00</published><updated>2009-05-29T13:16:18.864+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='緯度経度'/><category scheme='http://www.blogger.com/atom/ns#' term='ミリ秒'/><title type='text'>緯度経度の変換あれこれ</title><content type='html'>あるサイトでは緯度経度をミリ秒で提供してます。&lt;br /&gt;別のあるサイトでは緯度経度を度分秒で提供してます。&lt;br /&gt;&lt;br /&gt;・・・しょーがないから変換するハメに・・・&lt;br /&gt;&lt;br /&gt;139.1231 とか 35.123132 をミリ秒に変換するには&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;br /&gt;// 小数点以下は切り捨て&lt;br /&gt;// d は Double&lt;br /&gt;Double d = 139.7550122&lt;br /&gt;int mili = Double.valueOf(d * 3600000.0).intValue();&lt;br /&gt;System.out.println(Integer.toString(mili));&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;こんな感じで。&lt;br /&gt;ミリ秒を139.12312とかにするには&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;int mili = 503118044;&lt;br /&gt;double d = mili/3600000;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;こんな感じで。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-2875324090432206276?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/2875324090432206276/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=2875324090432206276' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2875324090432206276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2875324090432206276'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/05/blog-post.html' title='緯度経度の変換あれこれ'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-2131526096834369198</id><published>2009-05-16T01:25:00.006+09:00</published><updated>2009-06-12T09:11:16.427+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='postgis'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>postgisを使ってみる</title><content type='html'>postgis はインストール済み前提です。&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;テーブル作成&lt;/div&gt;&lt;br /&gt;CREATE TABLE geodata&lt;br /&gt;(&lt;br /&gt;  id integer NOT NULL,&lt;br /&gt;  "name" character varying(256) NOT NULL,&lt;br /&gt;  geo geometry NOT NULL,&lt;br /&gt;  CONSTRAINT geodata_pkey PRIMARY KEY (id)&lt;br /&gt;)&lt;br /&gt;&lt;div class="contentstitle"&gt;データ投入&lt;/div&gt;&lt;br /&gt;INSERT INTO geodata (id, name, geo) VALUES&lt;br /&gt;(1,'上野駅', GeomFromText('POINT(139.777254 35.713768)', 4326)),&lt;br /&gt;(2,'西郷隆盛像', GeomFromText('POINT(139.774029 35.711846)', 4326)),&lt;br /&gt;(3,'上野の森美術館', GeomFromText('POINT(139.774744 35.712737)', 4326)),&lt;br /&gt;(4,'不忍池弁財天', GeomFromText('POINT(139.770872 35.712351)', 4326)),&lt;br /&gt;(5,'野口英世博士像', GeomFromText('POINT(139.775696 35.716293)', 4326)),&lt;br /&gt;(6,'国立西洋美術館', GeomFromText('POINT(139.775803 35.71542)', 4326)),&lt;br /&gt;(7,'国立科学博物館', GeomFromText('POINT(139.776544 35.716319)', 4326)),&lt;br /&gt;(8,'東京都美術館', GeomFromText('POINT(139.772776 35.717186)', 4326)),&lt;br /&gt;(9,'東京国立博物館', GeomFromText('POINT(139.776462 35.718883)', 4326)),&lt;br /&gt;(10,'花やしき', GeomFromText('POINT(139.794547 35.71528)', 4326)),&lt;br /&gt;(11,'雷門', GeomFromText('POINT(139.792692 35.710635)', 4326));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;function作成&lt;/div&gt;&lt;br /&gt;CREATE FUNCTION expand_sphere_pseudo(geometry,double precision)&lt;br /&gt;RETURNS geometry&lt;br /&gt;AS '&lt;br /&gt;    DECLARE&lt;br /&gt;        fx double precision;&lt;br /&gt;        fy double precision;&lt;br /&gt;        dx double precision;&lt;br /&gt;        dy double precision;&lt;br /&gt;        se varchar(11);&lt;br /&gt;        sw varchar(11);&lt;br /&gt;        ss varchar(11);&lt;br /&gt;        sn varchar(11);&lt;br /&gt;        sid integer;&lt;br /&gt;        wkt text;&lt;br /&gt;        geo geometry;&lt;br /&gt;    BEGIN&lt;br /&gt;        fx = x($1);&lt;br /&gt;        fy = y($1);&lt;br /&gt;        sid = SRID($1);&lt;br /&gt;        dx = $2/20.0/3600.0;&lt;br /&gt;        dy = $2/30.0/3600.0;&lt;br /&gt;        se = to_char(fx-dx,''S999D999999'');&lt;br /&gt;        sw = to_char(fx+dx,''S999D999999'');&lt;br /&gt;        ss = to_char(fy-dy,''S999D999999'');&lt;br /&gt;        sn = to_char(fy+dy,''S999D999999'');&lt;br /&gt;        wkt = ''LINESTRING('' || se || '' '' || ss || '',&lt;br /&gt;              '' || sw || '' '' || sn || '')'';&lt;br /&gt;        geo = GeomFromText(wkt,sid);&lt;br /&gt;        RETURN geo;&lt;br /&gt;    END&lt;br /&gt;' IMMUTABLE LANGUAGE plpgsql;&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;検索してみる&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;SELECT * FROM geodata WHERE expand_sphere_pseudo(GeomFromText('POINT(139.774744 35.712737)', 4326),1000) &amp;&amp; geo AND distance_sphere(geo, GeomFromText('POINT(139.774744 35.712737)', 4326)) &lt; 1000;&lt;br /&gt;&lt;br /&gt;おぉ！検索できますね。&lt;br /&gt;多少の誤差はあるでしょうが、とりあえずいけてるっぽい！&lt;br /&gt;&lt;br /&gt;ソートする場合&lt;br /&gt;&lt;br /&gt;SELECT id, name, distance_sphere(geo, GeometryFromText('POINT(139.774744 35.712737)', 4326)) as distance FROM geodata WHERE expand_sphere_pseudo(GeomFromText('POINT(139.774744 35.712737)', 4326), 1000) &amp;&amp; geo AND distance_sphere(geo, GeometryFromText('POINT(139.774744 35.712737)', 4326)) &lt; 1000 ORDER BY distance;&lt;br /&gt;&lt;br /&gt;これで1000m以内の近い順。&lt;br /&gt;&lt;br /&gt;&lt;div class="contentstitle"&gt;geometryのインデックス&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;CREATE INDEX geodata_geo_idx&lt;br /&gt;  ON geodata&lt;br /&gt;  USING gist&lt;br /&gt;  (geo);&lt;br /&gt;&lt;br /&gt;こんな感じでgistというインデックスがはれるらしい。&lt;br /&gt;本当にこれで早くなるのか・・・&lt;br /&gt;テストデータ作るのが面倒なので、とりあえずここまで。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-2131526096834369198?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/2131526096834369198/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=2131526096834369198' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2131526096834369198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2131526096834369198'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/05/postgis.html' title='postgisを使ってみる'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-3323560732635393924</id><published>2009-04-10T10:41:00.003+09:00</published><updated>2009-06-01T16:20:51.697+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>IEでjavascriptのsubmitエラー</title><content type='html'>document.formname.submit();&lt;br /&gt;&lt;br /&gt;とやってもIEだとsubmitできない。&lt;br /&gt;散々悩んだあげくformタグのmethod="POST"がないのが原因だった。&lt;br /&gt;でもFirefoxだとsubmitできてしまう。&lt;br /&gt;&lt;br /&gt;うーん、しょぼい問題で時間を使ってしまった…&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-3323560732635393924?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/3323560732635393924/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=3323560732635393924' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/3323560732635393924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/3323560732635393924'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/04/iejavascriptsubmit.html' title='IEでjavascriptのsubmitエラー'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-249002926226555271</id><published>2009-02-27T16:17:00.013+09:00</published><updated>2009-05-16T17:45:00.280+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>selectボックスに属するoptioinを作り直す</title><content type='html'>&lt;br/&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;document.forms[0].hogeId.length=1;&lt;br /&gt;document.forms[0].hogeId.options[0].value = '';&lt;br /&gt;document.forms[0].hogeId.options[0].text = '選択してください';&lt;/p&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;って感じ。&lt;br /&gt;jQueryとか使うと&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;var hogeId = $('select[@name=hogeId]');&lt;br /&gt;hogeId.empty();&lt;br /&gt;hogeId.append($('&amp;lt;option&amp;gt;').attr({ value:'' }).text('選択してください'));&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;ってやりたくなるけどちょー遅い。&lt;br /&gt;&lt;br /&gt;javascriptって難しいなぁ。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-249002926226555271?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/249002926226555271/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=249002926226555271' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/249002926226555271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/249002926226555271'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/02/selectoptioin.html' title='selectボックスに属するoptioinを作り直す'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-4029672265194913761</id><published>2009-02-27T16:07:00.003+09:00</published><updated>2009-02-27T16:09:50.073+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>elementの次のエレメントを取得</title><content type='html'>element.nextSibling で次の要素が取得できる。&lt;br /&gt;なんでかいつも忘れるからメモ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-4029672265194913761?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/4029672265194913761/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=4029672265194913761' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4029672265194913761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4029672265194913761'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/02/element.html' title='elementの次のエレメントを取得'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-4511277399848104627</id><published>2009-02-12T09:28:00.006+09:00</published><updated>2009-05-16T17:46:28.820+09:00</updated><title type='text'>POPコマンドでメール受信</title><content type='html'>まずコマンドラインからtelnetでサーバ（hoge.com）のポート110番と通信する。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;telnet hoge.com 110&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;ここからpopコマンドを使ってメールを受信する&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;USER hoge &lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;+OK Password required.と表示されるので続けてパスワードを入力する&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;PASS password&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;+OK logged in.と表示されればログイン成功。&lt;br /&gt;&lt;br /&gt;メールサーバ上に保存されているメールの総数とサイズを知るには&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;STAT&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;各メールごとのサイズを知るには&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;LIST&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;メールを受信するには（番号15のメールを受信する）&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;RETR 15&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-4511277399848104627?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/4511277399848104627/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=4511277399848104627' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4511277399848104627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4511277399848104627'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/02/pop.html' title='POPコマンドでメール受信'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-5317333898533074565</id><published>2009-01-30T10:41:00.003+09:00</published><updated>2009-01-30T10:50:34.885+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='S2JDBC'/><title type='text'>S2JDBCってどうだろう？</title><content type='html'>個人的にはO/Rマッパー大嫌いですが、開発では色々使う機会があります。&lt;br /&gt;今はS2JDBC。&lt;br /&gt;いいところもありますが、しかし。&lt;br /&gt;検索したテーブルの全列取得対象にするのはどーしてもうけいれられない…&lt;br /&gt;検索するテーブルによってはちょー悲惨。&lt;br /&gt;そーゆー場合は自分でSQL書くんですかね。&lt;br /&gt;&lt;br /&gt;このような場合、あのような場合、っていちいち考えるのメンドクサイ&lt;br /&gt;ので全部自分でSQL書きますね。&lt;br /&gt;&lt;br /&gt;一般ユーザに公開するようなサイト作りするときは流れるインターフェースは危険なにおいがする。性能的に。&lt;br /&gt;生産性はいいのかもしれませんが。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-5317333898533074565?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/5317333898533074565/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=5317333898533074565' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5317333898533074565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5317333898533074565'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2009/01/s2jdbc.html' title='S2JDBCってどうだろう？'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-6178685732850903192</id><published>2008-10-31T11:41:00.002+09:00</published><updated>2008-10-31T14:36:31.814+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='コマンド'/><category scheme='http://www.blogger.com/atom/ns#' term='シェル'/><title type='text'>wgetのプロキシ設定</title><content type='html'>一番お手軽な方法は&lt;br /&gt;&lt;br /&gt;export http_proxy="http://[proxy host]:[proxy port]/"&lt;br /&gt;&lt;br /&gt;ちょっとメンドクサイな方法は&lt;br /&gt;~/.wgetrc に以下の設定を&lt;br /&gt;&lt;br /&gt;http_proxy=PROXY_SERVER:PORT&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-6178685732850903192?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/6178685732850903192/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=6178685732850903192' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6178685732850903192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6178685732850903192'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/wget.html' title='wgetのプロキシ設定'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-8608707040194520574</id><published>2008-10-30T23:14:00.003+09:00</published><updated>2008-10-31T14:37:26.677+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='トラブルシューティング'/><title type='text'>MySQL max_heap_table_size</title><content type='html'>あるテーブルのストレージエンジンをMEMORYにしようとしたら・・・&lt;br /&gt;MySQL 1114 the table ～ is full&lt;br /&gt;って言われて変更できない。&lt;br /&gt;&lt;br /&gt;なんで？&lt;br /&gt;って調べてみたら、max_heap_table_size ってheap領域にデータを持つテーブルのサイズは決まってるみたい。&lt;br /&gt;&lt;br /&gt;set global max_heap_table_size = 429496627;&lt;br /&gt;&lt;br /&gt;みたいにして、見事ストレージエンジンをMEMORYにできました。&lt;br /&gt;set globalのみで変更するとDB再起動で設定消えちゃうので、設定ファイルに設定すること！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-8608707040194520574?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/8608707040194520574/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=8608707040194520574' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/8608707040194520574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/8608707040194520574'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/mysql-maxheaptablesize.html' title='MySQL max_heap_table_size'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-2009657761397639944</id><published>2008-10-30T20:50:00.000+09:00</published><updated>2008-10-30T20:51:48.439+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='コマンド'/><title type='text'>文字コード変換</title><content type='html'>いつも忘れるからメモ。&lt;br /&gt;文字コード変換コマンド iconv&lt;br /&gt;&lt;br /&gt;iconv -f eucjp -t utf8 hoge.log&lt;br /&gt;&lt;br /&gt;みたいな感じで。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-2009657761397639944?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/2009657761397639944/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=2009657761397639944' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2009657761397639944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2009657761397639944'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/blog-post_30.html' title='文字コード変換'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-7587291613822718624</id><published>2008-10-29T22:12:00.006+09:00</published><updated>2009-05-17T13:30:31.215+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>MySQLをソースからインストール</title><content type='html'>※以下を実行する前にmysqlユーザを作成して下さい。&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;configureコマンド実行&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;※/tmp/mysql配下にインストールされます。インストールディレクトリは適宜修正して下さい。&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;./configure --prefix=/usr/local/mysql --exec-prefix=/usr/local/mysql &lt;br /&gt;--with-charset=utf8 --with-innodb&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;make &amp; install&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;make&lt;br /&gt;make install&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;権限変更&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;chown -R mysql:mysql /usr/local/mysql&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;DB初期化&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;sudo -u mysql /usr/local/mysql/bin/mysql_install_db --datadir=/usr/local/mysql/var&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;my.cnf&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;sudo -u mysql cp /usr/local/mysql/share/mysql/my-xxx.cnf /etc/my.cnf&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;DB起動&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;sudo -u mysql /usr/local/mysql/bin/mysqld_safe &amp;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-7587291613822718624?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/7587291613822718624/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=7587291613822718624' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/7587291613822718624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/7587291613822718624'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/mysql.html' title='MySQLをソースからインストール'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-2953932049307531996</id><published>2008-10-29T13:17:00.004+09:00</published><updated>2009-05-17T13:28:40.292+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seasar'/><category scheme='http://www.blogger.com/atom/ns#' term='SAStruts'/><title type='text'>独自のインターセプターを追加してみる</title><content type='html'>&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;適当なインターセプターを作る&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;SimpleTraceInterceptorをまるぱくり。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;public class SimpleTraceInterceptorMMM extends AbstractInterceptor {&lt;br /&gt;&lt;br /&gt;    private static final long serialVersionUID = 1L;&lt;br /&gt;&lt;br /&gt;    private static final Logger logger = Logger&lt;br /&gt;            .getLogger(SimpleTraceInterceptorMMM.class);&lt;br /&gt;&lt;br /&gt;    public Object invoke(final MethodInvocation invocation) throws Throwable {&lt;br /&gt;        if (!logger.isDebugEnabled()) {&lt;br /&gt;            return invocation.proceed();&lt;br /&gt;        }&lt;br /&gt;        final StringBuffer buf = new StringBuffer(100);&lt;br /&gt;        buf.append(getTargetClass(invocation).getName());&lt;br /&gt;        buf.append("#");&lt;br /&gt;        buf.append(invocation.getMethod().getName());&lt;br /&gt;        logger.debug("BEGIN " + buf);&lt;br /&gt;        try {&lt;br /&gt;            return invocation.proceed();&lt;br /&gt;        } catch (Throwable t) {&lt;br /&gt;            buf.append(" Throwable:").append(t);&lt;br /&gt;            throw t;&lt;br /&gt;        } finally {&lt;br /&gt;            logger.debug("END " + buf);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;InterceptorChainを定義&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;customizer.diconに以下のような感じで。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&amp;lt;component name="simpleTraceInterceptorMMM" class="jp.co.sample.aop.interceptor.SimpleTraceInterceptorMMM"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;component name="testChain" class="org.seasar.framework.aop.interceptors.InterceptorChain"&amp;gt;&lt;br /&gt;    &amp;lt;initMethod name="add"&amp;gt;&amp;lt;arg&amp;gt;simpleTraceInterceptorMMM&amp;lt;/arg&amp;gt;&amp;lt;/initMethod&amp;gt;&lt;br /&gt;    &amp;lt;initMethod name="add"&amp;gt;&amp;lt;arg&amp;gt;aop.traceInterceptor&amp;lt;/arg&amp;gt;&amp;lt;/initMethod&amp;gt;&lt;br /&gt;&amp;lt;/component&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;作成したInterceptorChainを追加する&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&amp;lt;component name="actionCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain"&amp;gt;&lt;br /&gt;&lt;font color="red"&gt;&lt;br /&gt;  &amp;lt;initMethod name="addAspectCustomizer"&amp;gt;&lt;br /&gt;    &amp;lt;arg&amp;gt;"testChain"&amp;lt;/arg&amp;gt;&lt;br /&gt;  &amp;lt;/initMethod&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;  &amp;lt;initMethod name="addAspectCustomizer"&amp;gt;&lt;br /&gt;    &amp;lt;arg&amp;gt;"actionMessagesThrowsInterceptor"&amp;lt;/arg&amp;gt;&lt;br /&gt;  &amp;lt;/initMethod&amp;gt;&lt;br /&gt;  &amp;lt;initMethod name="addCustomizer"&amp;gt;&lt;br /&gt;    &amp;lt;arg&amp;gt;&lt;br /&gt;      &amp;lt;component class="org.seasar.framework.container.customizer.TxAttributeCustomizer"/&amp;gt;&lt;br /&gt;    &amp;lt;/arg&amp;gt;&lt;br /&gt;  &amp;lt;/initMethod&amp;gt;&lt;br /&gt;  &amp;lt;initMethod name="addCustomizer"&amp;gt;&lt;br /&gt;    &amp;lt;arg&amp;gt;&lt;br /&gt;      &amp;lt;component class="org.seasar.struts.customizer.ActionCustomizer"/&amp;gt;&lt;br /&gt;    &amp;lt;/arg&amp;gt;&lt;br /&gt;  &amp;lt;/initMethod&amp;gt;&lt;br /&gt;&amp;lt;/component&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Actioinのメソッドが呼ばれると…&lt;br /&gt;&lt;br /&gt;2008/10/29 13:13:32.156 DEBUG (TraceInterceptor:105) - END jp.co.sample.action.IndexAction#index() : index.jsp&lt;br /&gt;2008/10/29 13:13:32.156 DEBUG (SimpleTraceInterceptorMMM:105) - END jp.co.sample.action.IndexAction#index&lt;br /&gt;&lt;br /&gt;おぉ～、見事両方のインターセプターが呼ばれましたね！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-2953932049307531996?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/2953932049307531996/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=2953932049307531996' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2953932049307531996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2953932049307531996'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/blog-post_29.html' title='独自のインターセプターを追加してみる'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-6088481217439881800</id><published>2008-10-29T11:45:00.004+09:00</published><updated>2009-05-17T13:32:47.688+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAStruts'/><title type='text'>Actionクラスのテストケース</title><content type='html'>ちょっとはまった…&lt;br /&gt;customizerでNullPointerExceptinとかって発生…&lt;br /&gt;env_ut.txtをproduct→utにしたら解決！&lt;br /&gt;&lt;br /&gt;ちなみに、テストケースは下記のような感じ。&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;package jp.co.sample.action;&lt;br /&gt;&lt;br /&gt;import org.seasar.extension.jdbc.JdbcManager;&lt;br /&gt;import org.seasar.extension.unit.S2TestCase;&lt;br /&gt;&lt;br /&gt;public class IndexActionTest extends S2TestCase {&lt;br /&gt;&lt;br /&gt;    private JdbcManager h2JdbcManager;&lt;br /&gt;&lt;br /&gt;    protected void setUp() throws Exception {&lt;br /&gt;&lt;br /&gt;        include("app.dicon");&lt;br /&gt;        super.setUp();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void testIndex() {&lt;br /&gt;&lt;br /&gt;        // テスト対象のアクションをnew&lt;br /&gt;        IndexAction test = new IndexAction();&lt;br /&gt;&lt;br /&gt;        // 依存クラスは自分でセット&lt;br /&gt;        test.h2JdbcManager = h2JdbcManager;&lt;br /&gt;&lt;br /&gt;        assertEquals("index.jsp", test.index());&lt;br /&gt;    }&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-6088481217439881800?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/6088481217439881800/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=6088481217439881800' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6088481217439881800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6088481217439881800'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/action.html' title='Actionクラスのテストケース'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-5399563639942008064</id><published>2008-10-29T10:53:00.005+09:00</published><updated>2008-10-29T11:02:26.324+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='S2JDBC'/><category scheme='http://www.blogger.com/atom/ns#' term='S2Dao'/><title type='text'>S2JDBCをいじってっみて</title><content type='html'>ちょろっといじってみましたが、ちょー面倒くさいです。&lt;br /&gt;&lt;br /&gt;テーブル定義をエンティティに確実に反映しなきゃいけない。&lt;br /&gt;エンティティがアノテーションの嵐になる。&lt;br /&gt;自動生成したエンティティに@GeneratedValueがついちゃう。&lt;br /&gt;(これはどうにかできる？)&lt;br /&gt;joinとかすると1ステップがちょー長くなっちゃう。&lt;br /&gt;etc...&lt;br /&gt;&lt;br /&gt;ちょろっといじってみて一瞬ハマったとこ。&lt;br /&gt;PRIMARY KEYを変更したらentityの@Id変更してなかったせいで思った通りの結果が得られなかった。&lt;br /&gt;&lt;br /&gt;@GeneratedValue(strategy = GenerationType.TABLE)って定義すると&lt;br /&gt;create table ID_GENERATOR {&lt;br /&gt;  PK varchar(80) not null primary key,&lt;br /&gt;  VALUE integer);&lt;br /&gt;ってテーブル用意しなきゃいけない。&lt;br /&gt;&lt;br /&gt;こんなん別に生産性も品質も上がりません。メンドイ &amp;amp; 勝手にやるから原因つきとめんのにスゲー時間かかった。&lt;br /&gt;&lt;br /&gt;個人的にはS2Daoのがいい。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-5399563639942008064?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/5399563639942008064/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=5399563639942008064' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5399563639942008064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5399563639942008064'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/s2jdbc.html' title='S2JDBCをいじってっみて'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-4246802086453120130</id><published>2008-10-29T10:39:00.003+09:00</published><updated>2009-05-17T13:34:44.523+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='S2JDBC'/><title type='text'>S2JDBCで複数DBに接続する</title><content type='html'>S2Daoの場合、&lt;a href="http://www.seasar.org/wiki/index.php?FAQ%2FS2DAO#w7da6e0e"&gt;http://www.seasar.org/wiki/index.php?FAQ%2FS2DAO#w7da6e0e&lt;/a&gt;が参考になると思います。&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;作成するファイル&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;&lt;li&gt;jdbca.dicon&lt;br /&gt;&lt;li&gt;jdbcb.dicon&lt;br /&gt;&lt;li&gt;s2jdbca.dicon&lt;br /&gt;&lt;li&gt;s2jdbcb.dicon&lt;br /&gt;&lt;/UL&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;s2jdbc.dicon&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;まずは、デフォルトで用意されているs2jdbc.diconを以下のように編集&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;components&amp;gt;&lt;br /&gt;    &amp;lt;include path="s2jdbca.dicon"/&amp;gt;&lt;br /&gt;    &amp;lt;include path="s2jdbcb.dicon"/&amp;gt;&lt;br /&gt;&amp;lt;/components&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;s2jdbca.dicon&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;components namespace="s2jdbcA"&amp;gt;&lt;br /&gt;    &amp;lt;include path="jdbca.dicon"/&amp;gt;&lt;br /&gt;    &amp;lt;include path="s2jdbc-internal.dicon"/&amp;gt;&lt;br /&gt;    &amp;lt;component name="jdbcManagerA" class="org.seasar.extension.jdbc.manager.JdbcManagerImpl"&amp;gt;&lt;br /&gt;        &amp;lt;property name="maxRows"&amp;gt;0&amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="fetchSize"&amp;gt;0&amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="queryTimeout"&amp;gt;0&amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="dialect"&amp;gt;mysqlDialect&amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="dataSource"&amp;gt;DataSource&amp;lt;/property&amp;gt;&lt;br /&gt;    &amp;lt;/component&amp;gt;&lt;br /&gt;&amp;lt;/components&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;s2jdbcb.dicon&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;components namespace="s2jdbcB"&amp;gt;&lt;br /&gt;    &amp;lt;include path="jdbcb.dicon"/&amp;gt;&lt;br /&gt;    &amp;lt;include path="s2jdbc-internal.dicon"/&amp;gt;&lt;br /&gt;    &amp;lt;component name="jdbcManagerB" class="org.seasar.extension.jdbc.manager.JdbcManagerImpl"&amp;gt;&lt;br /&gt;        &amp;lt;property name="maxRows"&amp;gt;0&amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="fetchSize"&amp;gt;0&amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="queryTimeout"&amp;gt;0&amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="dialect"&amp;gt;mysqlDialect&amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="dataSource"&amp;gt;DataSource&amp;lt;/property&amp;gt;&lt;br /&gt;    &amp;lt;/component&amp;gt;&lt;br /&gt;&amp;lt;/components&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;jdbca.dicon&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;components namespace="jdbc"&amp;gt;&lt;br /&gt;      &amp;lt;include path="jta.dicon"/&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;component name="xaDataSource"&lt;br /&gt;  class="org.seasar.extension.dbcp.impl.XADataSourceImpl"&amp;gt;&lt;br /&gt;  &amp;lt;property name="driverClassName"&amp;gt;"org.h2.Driver"&amp;lt;/property&amp;gt;&lt;br /&gt;  &amp;lt;property name="URL"&amp;gt;&lt;br /&gt;   "jdbc:h2:tcp://localhost:8082/test"&lt;br /&gt;  &amp;lt;/property&amp;gt;&lt;br /&gt;  &amp;lt;property name="user"&amp;gt;"sa"&amp;lt;/property&amp;gt;&lt;br /&gt;  &amp;lt;property name="password"&amp;gt;""&amp;lt;/property&amp;gt;&lt;br /&gt;  &amp;lt;destroyMethod&amp;gt;&lt;br /&gt;   @org.seasar.framework.util.DriverManagerUtil@deregisterAllDrivers()&lt;br /&gt;  &amp;lt;/destroyMethod&amp;gt;&lt;br /&gt; &amp;lt;/component&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;component name="connectionPool"&lt;br /&gt;        class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl"&amp;gt;&lt;br /&gt;        &amp;lt;property name="timeout"&amp;gt;600&amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="maxPoolSize"&amp;gt;10&amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="allowLocalTx"&amp;gt;true&amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;destroyMethod name="close"/&amp;gt;&lt;br /&gt;    &amp;lt;/component&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;component name="DataSource" class="org.seasar.extension.dbcp.impl.DataSourceImpl"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/components&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;jdbcb.dicon&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;components namespace="jdbc"&amp;gt;&lt;br /&gt;      &amp;lt;include path="jta.dicon"/&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;component name="xaDataSource"&lt;br /&gt;        class="org.seasar.extension.dbcp.impl.XADataSourceImpl"&amp;gt;&lt;br /&gt;        &amp;lt;property name="driverClassName"&amp;gt;&lt;br /&gt;            "com.mysql.jdbc.Driver"&lt;br /&gt;        &amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="URL"&amp;gt;&lt;br /&gt;            "jdbc:mysql://localhost:3306/clontalk03?useUnicode=true&amp;amp;characterEncoding=UTF8&amp;amp;zeroDateTimeBehavior=convertToNull"&lt;br /&gt;        &amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="user"&amp;gt;"root"&amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="password"&amp;gt;""&amp;lt;/property&amp;gt;&lt;br /&gt;    &amp;lt;/component&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;component name="connectionPool"&lt;br /&gt;        class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl"&amp;gt;&lt;br /&gt;        &amp;lt;property name="timeout"&amp;gt;600&amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="maxPoolSize"&amp;gt;10&amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="allowLocalTx"&amp;gt;true&amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;destroyMethod name="close"/&amp;gt;&lt;br /&gt;    &amp;lt;/component&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;component name="DataSource"&lt;br /&gt;        class="org.seasar.extension.dbcp.impl.DataSourceImpl"&lt;br /&gt;    /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/components&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;JdbcManager&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;上記設定が完了すれば。&lt;br /&gt;下記のように@BindingでインジェクションしたいJdbcManagerを選択すればオッケー！&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt; &lt;br /&gt;@Binding("jdbcManagerA")&lt;br /&gt; private JdbcManager h2JdbcManager;&lt;br /&gt;&lt;br /&gt; @Binding("jdbcManagerB")&lt;br /&gt; private JdbcManager mySqlJdbcManagerB;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-4246802086453120130?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/4246802086453120130/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=4246802086453120130' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4246802086453120130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4246802086453120130'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/s2jdbcdb.html' title='S2JDBCで複数DBに接続する'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-3097144958969870602</id><published>2008-10-28T19:12:00.005+09:00</published><updated>2009-05-17T13:35:46.196+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DB'/><category scheme='http://www.blogger.com/atom/ns#' term='H2'/><title type='text'>H2をlinuxで使ってみる</title><content type='html'>&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;ダウンロード&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.h2database.com/html/main.html"&gt;http://www.h2database.com/html/main.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;インストール&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;ダウンロードしたzipファイルを解凍するだけ。&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;起動&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;java -cp ./h2-1.1.102.jar org.h2.tools.Server&lt;br /&gt;※jarのバージョンは異なるかもしれないのでご注意を！&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;接続&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;java -cp ./h2-1.1.102.jar org.h2.tools.Shell&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;サンプルselect&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;下記コードを実行する前にcreate table test_tbl(col1 int PRIMARY KEY);をお忘れなく。&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;import java.sql.*;&lt;br /&gt;public class Test {&lt;br /&gt;&lt;br /&gt;    public static void main(String[] a) {&lt;br /&gt;&lt;br /&gt;        Connection conn = null;&lt;br /&gt;        Statement stmt = null;&lt;br /&gt;        ResultSet rs = null;&lt;br /&gt;        try {&lt;br /&gt;&lt;br /&gt;            Class.forName("org.h2.Driver");&lt;br /&gt;            //conn = DriverManager.getConnection("jdbc:h2:~/test", "sa", "");&lt;br /&gt;            conn = DriverManager.getConnection("jdbc:h2:tcp://localhost/~/test", "sa", "");&lt;br /&gt;            stmt = conn.createStatement();&lt;br /&gt;            rs = stmt.executeQuery("select * from TEST_TBL");&lt;br /&gt;            while (rs.next()) {&lt;br /&gt;&lt;br /&gt;                System.out.println(rs.getInt(1));&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            Thread.sleep(2000);&lt;br /&gt;&lt;br /&gt;        } catch (Exception e) {&lt;br /&gt;&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;&lt;br /&gt;        } finally {&lt;br /&gt;&lt;br /&gt;            if (rs != null) {&lt;br /&gt;&lt;br /&gt;                try {&lt;br /&gt;&lt;br /&gt;                    rs.close();&lt;br /&gt;&lt;br /&gt;                } catch (Exception e) {&lt;br /&gt;&lt;br /&gt;                    e.printStackTrace();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            if (stmt!= null) {&lt;br /&gt;&lt;br /&gt;                try {&lt;br /&gt;&lt;br /&gt;                    stmt.close();&lt;br /&gt;&lt;br /&gt;                } catch (Exception e) {&lt;br /&gt;&lt;br /&gt;                    e.printStackTrace();&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            if (conn!= null) {&lt;br /&gt;&lt;br /&gt;                try {&lt;br /&gt;                    conn.close();&lt;br /&gt;                } catch (Exception e) {&lt;br /&gt;&lt;br /&gt;                    e.printStackTrace();&lt;br /&gt;                }&lt;br /&gt;             }        &lt;br /&gt;         }&lt;br /&gt;    }&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-3097144958969870602?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/3097144958969870602/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=3097144958969870602' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/3097144958969870602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/3097144958969870602'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/h2linux.html' title='H2をlinuxで使ってみる'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-7496918407894383349</id><published>2008-10-27T17:18:00.007+09:00</published><updated>2009-05-17T13:36:51.264+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><title type='text'>proxy_ajp</title><content type='html'>mod_jkでもいんですが、より簡単な方法で。&lt;br /&gt;&lt;a href="http://www.orangesignal.com/myserver/linux/mod_proxy_ajp.shtml"&gt;http://www.orangesignal.com/myserver/linux/mod_proxy_ajp.shtml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;以下に重要なとこだけ。&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;http.conf&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;Location /tomcat&amp;gt;&lt;br /&gt;  ProxyPass ajp://localhost:8009/&lt;br /&gt;  Order allow,deny&lt;br /&gt;  Allow from xxx.xxx.xxx.xxx&lt;br /&gt;&amp;lt;/Location&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;server.xml&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;AJP コネクタの設定を変更します。&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;Connector port="8009" protocol="AJP/1.3" redirectPort="8443"&lt;br /&gt;    ホスト名参照を行わないようにします。&lt;br /&gt;    enableLookups="false"&lt;br /&gt;    ローカルアドレスからのみ受け付けるようにします。&lt;br /&gt;    address="127.0.0.1"&lt;br /&gt;    必要により最小スレッド数や最大スレッド数などを設定します。&lt;br /&gt;    ※設定する値は一般的に Web サーバー側の値より小さくてかまいません。&lt;br /&gt;    minSpareThreads="4" maxSpareThreads="50" maxThreads="200" backlog="10"&lt;br /&gt;    接続タイムアウト(ミリ秒)を指定します。&lt;br /&gt;    connectionTimeout="20000"&lt;br /&gt;    最大 POST サイズなどを指定します。&lt;br /&gt;    maxPostSize="2097152" maxSavePostSize="4096"&lt;br /&gt;    必要により URI エンコーディングなどを指定します。&lt;br /&gt;    URIEncoding="Windows-31J" useBodyEncodingForURI="false"&lt;br /&gt;    xpoweredBy="false" /&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-7496918407894383349?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/7496918407894383349/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=7496918407894383349' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/7496918407894383349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/7496918407894383349'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/proxyajp.html' title='proxy_ajp'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-3807300245872206617</id><published>2008-10-24T13:08:00.000+09:00</published><updated>2008-10-24T13:09:24.787+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DB'/><category scheme='http://www.blogger.com/atom/ns#' term='H2'/><title type='text'>H2データベースファイルが作成されるディレクトリを変更する</title><content type='html'>&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;デフォルトは？&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;デフォルトはH2インストールディレクトリでしょ。&lt;br /&gt;って思ってインストールディレクトリ内を一通り見てみる。&lt;br /&gt;・・・どこにも見あたらない。。&lt;br /&gt;ググってみたら分かりました。&lt;br /&gt;C:\Documents and Settings\&lt;ユーザ名&gt;&lt;br /&gt;にそれらしきファイル群が！&lt;br /&gt;これまたちょー分かりづれー。&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;変更する&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;起動のオプションで -baseDir "&lt;path&gt;" とすればいいみたい。&lt;br /&gt;c:\h2\data ディレクトリを作成し、&lt;br /&gt;java -cp .\h2-1.1.101.jar org.h2.tools.Server -baseDir "c:\H2\data"&lt;br /&gt;と実行。&lt;br /&gt;コンソールで見ると・・&lt;br /&gt;あれ？さっき作ったDBがみれる？？&lt;br /&gt;ん～なんでだって思ってc:\H2\data 配下を確認すると、空っぽ。&lt;br /&gt;DBを作ってC:\Documents and Settings\&lt;ユーザ名&gt;配下を確認すると・・・&lt;br /&gt;こっちファイル追加されてる。&lt;br /&gt;変更できてねーじゃん。&lt;br /&gt;&lt;br /&gt;マニュアル見ると・・・&lt;br /&gt;JDBC URL を jdbc:h2:test みたいな感じにすると、-baseDir で指定したディレクトリ配下に作成されるらしい。&lt;br /&gt;早速ためすと・・・、おぉーデータベースファイルが -baseDir で指定したパス配下にできました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-3807300245872206617?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/3807300245872206617/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=3807300245872206617' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/3807300245872206617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/3807300245872206617'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/h2_24.html' title='H2データベースファイルが作成されるディレクトリを変更する'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-7577899102233756153</id><published>2008-10-24T10:27:00.006+09:00</published><updated>2008-10-24T13:10:08.221+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DB'/><category scheme='http://www.blogger.com/atom/ns#' term='H2'/><title type='text'>H2を使ってみる</title><content type='html'>&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;サービスに登録する&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;C:\Program Files\H2\service\1_install_service.bat&lt;br /&gt;を実行。そんだけ。&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;H2を起動させる&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;C:\Program Files\H2\service\2_start_service.bat&lt;br /&gt;を実行。そんだけ。&lt;br /&gt;のはずが・・・・、なんでか起動しない。&lt;br /&gt;ちょっと調べたけどよく分からない・・・、メンドクサイから、&lt;br /&gt;java -cp .\h2-1.1.101.jar org.h2.tools.Server&lt;br /&gt;をコマンドラインで実行して自力で起動させる。&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;新しいDBを作る&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;http://localhost:8082/&lt;br /&gt;でH2のコンソールを開く。&lt;br /&gt;デフォルト設定でログインして、CREATE DATABASE コマンド発行してみるが・・&lt;br /&gt;うぅ・・・CREATE DATABASE しても作れない。。&lt;br /&gt;マニュアルを参照してみると、&lt;br /&gt;&lt;br /&gt;By default, if the database specified in the URL does not yet exist, a new (empty) database is created automatically. The user that created the database automatically becomes the administrator of this database.&lt;br /&gt;&lt;br /&gt;とのこと。どうやらURL指定して存在しないDBだった場合、自動でDBを作るとのこと。&lt;br /&gt;マジで？と思いつつ、jdbc:h2:~/test → jdbc:h2:~/hoge にして接続してみると・・・&lt;br /&gt;おぉ～、見事接続に完了です。&lt;br /&gt;ちょーわかりづれー。&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;新しいテーブルを作る&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;テーブルは CREATE TABLE でいけるようですね。&lt;br /&gt;早速作ろうとしましたが・・・、なんと int unsinged が使えない・・・&lt;br /&gt;CREATE TABLE test(&lt;br /&gt;col1 int PRIMARY KEY,&lt;br /&gt;col2 bigint );&lt;br /&gt;ん～、こーゆー書き方ってことは複数列のPKはできないってこと？&lt;br /&gt;試しに・・&lt;br /&gt;CREATE TABLE test(&lt;br /&gt;col1 int PRIMARY KEY,&lt;br /&gt;col2 bigint PRIMARY KEY);&lt;br /&gt;「複数のプライマリキーを定義しようとしました」&lt;br /&gt;だそうです。&lt;br /&gt;「複数のPK」ではなく「複数の列でPK」なのに・・・&lt;br /&gt;まぁ、これはいいや。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-7577899102233756153?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/7577899102233756153/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=7577899102233756153' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/7577899102233756153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/7577899102233756153'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/h2.html' title='H2を使ってみる'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-2861070380607514963</id><published>2008-10-07T10:16:00.007+09:00</published><updated>2009-05-17T13:39:38.653+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teeda'/><category scheme='http://www.blogger.com/atom/ns#' term='SAStruts'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>独自のエラーページに遷移しよう！</title><content type='html'>SAStrutsはデフォルトでjspへの直接アクセスを禁止してます。&lt;br /&gt;jspへ直接アクセスすると、org.seasar.struts.filter.RoutingFilterが400で不正リクエストの旨を返します。&lt;br /&gt;うーん、これだとTomcatのバージョンとかばれちゃうから、独自のエラーページにしたいよね。ってときは、web.xmlに以下のように定義すればオッケー。&lt;br /&gt;(まぁSAStrutsに限ったことではないんですけどね…)&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;error-page&amp;gt;&lt;br /&gt;    &amp;lt;error-code&amp;gt;400&amp;lt;/error-code&amp;gt;&lt;br /&gt;    &amp;lt;location&amp;gt;/WEB-INF/view/error/badrequest.html&amp;lt;/location&amp;gt;&lt;br /&gt;&amp;lt;/error-page&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;ちなみに、IEだと↑で指定しているhtmlのサイズが512バイト？だっけかな？より大きくないとIEデフォルトのエラーページが表示されちゃいます。&lt;br /&gt;あれー指定したページが表示されないなぁ、↑で指定しているhtmlのサイズを1KByte位にしてみると表示されるかもしれません。&lt;br /&gt;&lt;br /&gt;さぁ、次はインターセプターかなぁ、どーせMethodInterceptorを拡張するだけでしょうけど…&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-2861070380607514963?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/2861070380607514963/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=2861070380607514963' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2861070380607514963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2861070380607514963'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/blog-post_07.html' title='独自のエラーページに遷移しよう！'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-5345244668959561887</id><published>2008-10-06T17:04:00.000+09:00</published><updated>2008-10-06T17:05:32.387+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAStruts'/><title type='text'>SAStrutsのクロスサイトスクリプティング対策は？</title><content type='html'>入力値を表示する場合は、f:h()を、アンカータグのhrefはf:u()を使ってエンコーディングって感じ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-5345244668959561887?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/5345244668959561887/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=5345244668959561887' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5345244668959561887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5345244668959561887'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/sastruts_5082.html' title='SAStrutsのクロスサイトスクリプティング対策は？'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-2476978157761088082</id><published>2008-10-06T15:20:00.006+09:00</published><updated>2009-05-17T13:41:56.987+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>文字列の検証</title><content type='html'>&lt;ul&gt;&lt;li&gt;全角文字判定&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;protected static boolean isFullString(String s) {&lt;br /&gt;&lt;br /&gt;    Pattern pattern = Pattern.compile("^[^ -~｡-ﾟ]+$");&lt;br /&gt;    Matcher matcher = pattern.matcher(s);&lt;br /&gt;    return matcher.matches();&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;半角英字判定&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;protected static boolean isHalfAl(String s) {&lt;br /&gt;&lt;br /&gt;    Pattern pattern = Pattern.compile("^[a-zA-Z]+$");&lt;br /&gt;    Matcher matcher = pattern.matcher(s);&lt;br /&gt;    return matcher.matches();&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;半角数字判定&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;protected static boolean isHalNum(String s) {&lt;br /&gt;&lt;br /&gt;    Pattern pattern = Pattern.compile("^[0-9]+$");&lt;br /&gt;    Matcher matcher = pattern.matcher(s);&lt;br /&gt;    return matcher.matches();&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;半角英数字判定&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;protected static boolean isHalfAlNum(String s) {&lt;br /&gt;&lt;br /&gt;    Pattern pattern = Pattern.compile("^[a-zA-Z0-9]+$");&lt;br /&gt;    Matcher matcher = pattern.matcher(s);&lt;br /&gt;    return matcher.matches();&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;半角英数記号判定&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;protected static boolean isAlNumSign(String s) {&lt;br /&gt;&lt;br /&gt;    Pattern pattern = Pattern.compile("^[a-zA-Z0-9 -/:-@\[-\`\{-\~]+$");&lt;br /&gt;    Matcher matcher = pattern.matcher(s);&lt;br /&gt;    return matcher.matches();&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;半角カタカナ判定&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;protected static boolean isHalfKana(String s) {&lt;br /&gt;&lt;br /&gt;    Pattern pattern = Pattern.compile("^[｡-ﾟ+]+$");&lt;br /&gt;    Matcher matcher = pattern.matcher(s);&lt;br /&gt;    return matcher.matches();&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ひらがな判定&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;protected static boolean isHiragana(String s) {&lt;br /&gt;&lt;br /&gt;    Pattern pattern = Pattern.compile("^[ぁ-ゞ]+$");&lt;br /&gt;    Matcher matcher = pattern.matcher(s);&lt;br /&gt;    return matcher.matches();&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;全角カタカナ判定&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;protected static boolean isFullKana(String s) {&lt;br /&gt;&lt;br /&gt;    Pattern pattern = Pattern.compile("^[ァ-ヶ]+$");&lt;br /&gt;    Matcher matcher = pattern.matcher(s);&lt;br /&gt;    return matcher.matches();&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-2476978157761088082?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/2476978157761088082/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=2476978157761088082' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2476978157761088082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2476978157761088082'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/blog-post_06.html' title='文字列の検証'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-1856278572156317560</id><published>2008-10-06T14:00:00.001+09:00</published><updated>2008-10-06T14:03:07.249+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAStruts'/><title type='text'>SAStrutsのパッケージ構成</title><content type='html'>マニュアルにこーすればいいよ！って書いてあったけど１点だけそれって変じゃない？って私は思った点が。&lt;br /&gt;&lt;br /&gt;「ビジネスロジックは、エンティティかサービスに定義します。」&lt;br /&gt;&lt;br /&gt;これ。&lt;br /&gt;エンティティってMVCのModelに相当するんだと思うんで、ロジックがあるのは個人的にはちょー違和感ある。&lt;br /&gt;だもんで、ロジックはサービスだよね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-1856278572156317560?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/1856278572156317560/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=1856278572156317560' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/1856278572156317560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/1856278572156317560'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/sastruts_06.html' title='SAStrutsのパッケージ構成'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-7273822692463923103</id><published>2008-10-06T13:48:00.005+09:00</published><updated>2009-05-17T13:43:27.797+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAStruts'/><title type='text'>SAStrutsのレイアウト機能</title><content type='html'>SAStrutsのデフォルトのlayout.jspを使ってみたら、ヘッダー、メニュー、フッターが表示されない。。&lt;br /&gt;なんでかなぁって色々試したら、&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&amp;lt;tiles:insert page="/common/header.jsp" /&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;↓&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&amp;lt;tiles:insert page="/WEB-INF/view/common/header.jsp"  /&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;ってしたらオッケーだった。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-7273822692463923103?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/7273822692463923103/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=7273822692463923103' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/7273822692463923103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/7273822692463923103'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/sastruts.html' title='SAStrutsのレイアウト機能'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-4266584404129952578</id><published>2008-10-06T13:02:00.004+09:00</published><updated>2008-10-06T13:12:22.027+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teeda'/><category scheme='http://www.blogger.com/atom/ns#' term='SAStruts'/><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>SAStruts + Mayaa</title><content type='html'>&lt;a href="http://d.hatena.ne.jp/tatsuparu/20080125/1201195552"&gt;http://d.hatena.ne.jp/tatsuparu/20080125/1201195552&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ん～・・・、個人的にはTeedaでいいんじゃない？って気がします。&lt;br /&gt;データとレイアウトが分けることができる。って言うよりは分かれちゃう。ってとらえ方になっちゃいますね。私は。&lt;br /&gt;まぁ、結局実現できるものはどっちでも同じだからどうでもいいけど。&lt;br /&gt;肝心なとこだけコピーしとこm(__)m&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Mayaaのライブラリ一式をWEB-INF/libに配置&lt;/li&gt;&lt;br /&gt;&lt;li&gt;web.xmlにMayaaServletを追加&lt;/li&gt;&lt;br /&gt;&lt;li&gt;HTMLとmayaaファイルを用意して配置（/webapp/login/test.html,/webapp/login/test.mayaa）&lt;/li&gt;&lt;br /&gt;&lt;li&gt;LoginActionの戻り値をtest.htmlに変更&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;上記手順で試してみると・・・おぉー見事htmlが動きますね！&lt;br /&gt;ただMayaaって全然知らないから勉強しなきゃ・・・&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-4266584404129952578?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/4266584404129952578/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=4266584404129952578' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4266584404129952578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4266584404129952578'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/sastruts-mayaa.html' title='SAStruts + Mayaa'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-5996642557845474563</id><published>2008-10-03T17:19:00.004+09:00</published><updated>2009-05-17T13:45:08.705+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>形態素解析してみる２</title><content type='html'>Luceneのライブラリを使って形態素解析してみる。&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;まずは、Senとかダウンロード。&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="padding:0px 0px 0px 15px;"&gt;&lt;a href="http://www.mlab.im.dendai.ac.jp/~yamada/ir/MorphologicalAnalyzer/Sen.html"&gt;http://www.mlab.im.dendai.ac.jp/~yamada/ir/MorphologicalAnalyzer/Sen.html&lt;/a&gt;&lt;br /&gt;lucene-ja-～と、sen-～をダウンロードする。&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;Senのdicをビルドする&lt;/strong&gt;&lt;/div&gt;&lt;div style="padding:0px 0px 0px 15px;"&gt;&lt;br /&gt;sen-～/dic 配下に移動してantする。&lt;br /&gt;build が成功すれば、token.senとかmatrix.senとかって数種類ファイルが追加されてるはずです。&lt;br /&gt;&lt;br /&gt;※ビルド中にファイルダウンロードが実行されます。&lt;br /&gt;  Proxyを使ったネットワーク環境の場合、以下のようにantの引数にproxyのホストとポートを指定して実行して下さい。&lt;br /&gt;ant -Dproxy.host=proxy.hoehoe.jp -Dproxy.port=8080&lt;br /&gt;&lt;br /&gt;※windowsでbuildする場合、cygwinをインストールして下さい。&lt;br /&gt;  でもって、build.xmlのperl.binを以下のように修正する必要があります。&lt;br /&gt;  &amp;lt;property name="perl.bin" value="c:/cygwin/bin/perl.exe"/&amp;gt;&lt;br /&gt;&amp;lt;!--&amp;lt;property name="perl.bin" value="/usr/bin/perl"/&amp;gt;--&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;クラスパスに必要なjarを配置&lt;/strong&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;commons-logging.jar&lt;br /&gt;&lt;li&gt;lucene-1.4.3.jar&lt;br /&gt;&lt;li&gt;lucene-ja.jar&lt;br /&gt;&lt;li&gt;sen.jar&lt;/ul&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;JapaneseAnalyzerを使ってみる&lt;/strong&gt;&lt;/string&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.StringReader;&lt;br /&gt;import org.apache.lucene.analysis.Token;&lt;br /&gt;import org.apache.lucene.analysis.TokenStream;&lt;br /&gt;import org.apache.lucene.analysis.ja.JapaneseAnalyzer;&lt;br /&gt;&lt;br /&gt;public class SenSample {&lt;br /&gt;&lt;br /&gt;    static {&lt;br /&gt;&lt;br /&gt;        // Senのホームディレクトリをシステムプロパティに設定&lt;br /&gt;        // ディレクトリパスにスペース、日本語は使用できません！&lt;br /&gt;        System.setProperty("sen.home", "C:/hogehoge/sen-1.2.2.1");&lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;    public void StringTaggerTest(String s) {&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;&lt;br /&gt;            StringTagger tagger = StringTagger.getInstance();&lt;br /&gt;            net.java.sen.Token[] tokens = tagger.analyze(s);&lt;br /&gt;            for (int i = 0; i &lt; tokens.length; i++) {&lt;br /&gt;&lt;br /&gt;                System.out.println("------------------------");&lt;br /&gt;                System.out.println(tokens[i].getBasicString());&lt;br /&gt;                System.out.println(tokens[i].getTermInfo());&lt;br /&gt;                System.out.println(tokens[i].getAddInfo());&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;        } catch (IllegalArgumentException e) {&lt;br /&gt;&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;&lt;br /&gt;        } catch (IOException e) {&lt;br /&gt;&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class Sample {&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;&lt;br /&gt;        SenSample senSample = new SenSample();&lt;br /&gt;&lt;br /&gt;        senSample.StringTaggerTest("形態素解析できるのかテスト中です!");&lt;br /&gt;    }&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;Sampleクラスのmainを実行すると…&lt;/strong&gt;&lt;/div&gt;&lt;div style="padding:0px 0px 0px 15px;"&gt;&lt;br /&gt;------------------------&lt;br /&gt;形態素&lt;br /&gt;名詞,一般,*,*,*,*,形態素,ケイタイソ,ケイタイソ&lt;br /&gt;&lt;br /&gt;------------------------&lt;br /&gt;解析&lt;br /&gt;名詞,サ変接続,*,*,*,*,解析,カイセキ,カイセキ&lt;br /&gt;&lt;br /&gt;------------------------&lt;br /&gt;できる&lt;br /&gt;動詞,自立,*,*,一段,基本形,できる,デキル,デキル&lt;br /&gt;&lt;br /&gt;------------------------&lt;br /&gt;の&lt;br /&gt;名詞,非自立,一般,*,*,*,の,ノ,ノ&lt;br /&gt;&lt;br /&gt;------------------------&lt;br /&gt;か&lt;br /&gt;助詞,副助詞／並立助詞／終助詞,*,*,*,*,か,カ,カ&lt;br /&gt;&lt;br /&gt;------------------------&lt;br /&gt;テスト&lt;br /&gt;名詞,サ変接続,*,*,*,*,テスト,テスト,テスト&lt;br /&gt;&lt;br /&gt;------------------------&lt;br /&gt;中&lt;br /&gt;名詞,接尾,副詞可能,*,*,*,中,チュウ,チュー&lt;br /&gt;&lt;br /&gt;------------------------&lt;br /&gt;です&lt;br /&gt;助動詞,*,*,*,特殊・デス,基本形,です,デス,デス&lt;br /&gt;&lt;br /&gt;------------------------&lt;br /&gt;!&lt;br /&gt;null&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-5996642557845474563?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/5996642557845474563/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=5996642557845474563' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5996642557845474563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5996642557845474563'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/blog-post_03.html' title='形態素解析してみる２'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-6089423522711244522</id><published>2008-10-03T17:14:00.008+09:00</published><updated>2009-06-01T11:15:01.931+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='solr'/><title type='text'>solrのインストール</title><content type='html'>solrをインストールしてみる。&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;まずは、solrダウンロード。&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="padding:0px 0px 0px 15px;"&gt;&lt;a href="http://ftp.riken.jp/net/apache/lucene/solr/1.3.0/"&gt;http://ftp.riken.jp/net/apache/lucene/solr/1.3.0/&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;Webアプリケーションを配備する&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="padding:0px 0px 0px 15px;"&gt;&lt;ul&gt;&lt;li&gt;~\apache-solr-1.3.0\example\webapps\solr.war を TOMCAT_HOME\webapps 配下にコピー&lt;/li&gt;&lt;br /&gt;&lt;li&gt;コピーしたwarファイルを解凍&lt;/li&gt;&lt;br /&gt;&lt;li&gt;~\apache-solr-1.3.0\example\solr\bin と ~\apache-solr-1.3.0\example\solr\conf を解凍したsolrディレクトリ配下にコピー&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;コンテキストファイルを用意する&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="padding:0px 0px 0px 15px;"&gt;&lt;br /&gt;TOMCAT_HOME/conf/Catalina/localhost/solr.xmlを以下の内容で作成する。&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;Context docBase="solr_first" debug="0" crossContext="true" &amp;gt;&lt;br /&gt;   &amp;lt;Environment name="solr/home" type="java.lang.String" value="C:/Program Files/Apache Software Foundation/Tomcat 5.5/webapps/solr" override="true" /&amp;gt;&lt;br /&gt;&amp;lt;/Context&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;Tomcatを起動する&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="padding:0px 0px 0px 15px;"&gt;Tomcatを起動して &lt;a href="http://localhost:8080/solr/admin"&gt;http://localhost:8080/solr/admin&lt;/a&gt; でsolrの管理画面が開けばオッケー!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-6089423522711244522?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/6089423522711244522/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=6089423522711244522' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6089423522711244522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6089423522711244522'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/solr.html' title='solrのインストール'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-428773831286861476</id><published>2008-10-03T09:11:00.021+09:00</published><updated>2009-05-17T13:47:02.997+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>形態素解析してみる</title><content type='html'>Luceneのライブラリを使って形態素解析してみる。&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;まずは、Senとかダウンロード。&lt;/strong&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="padding:0px 0px 0px 15px;"&gt;&lt;a href="http://www.mlab.im.dendai.ac.jp/~yamada/ir/MorphologicalAnalyzer/Sen.html"&gt;http://www.mlab.im.dendai.ac.jp/~yamada/ir/MorphologicalAnalyzer/Sen.html&lt;/a&gt;&lt;br /&gt;lucene-ja-～と、sen-～をダウンロードする。&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;Senのdicをビルドする&lt;/strong&gt;&lt;/div&gt;&lt;div style="padding:0px 0px 0px 15px;"&gt;&lt;br /&gt;sen-～/dic 配下に移動してantする。&lt;br /&gt;build が成功すれば、token.senとかmatrix.senとかって数種類ファイルが追加されてるはずです。&lt;br /&gt;&lt;br /&gt;※ビルド中にファイルダウンロードが実行されます。&lt;br /&gt;  Proxyを使ったネットワーク環境の場合、以下のようにantの引数にproxyのホストとポートを指定して実行して下さい。&lt;br /&gt;ant -Dproxy.host=proxy.hoehoe.jp -Dproxy.port=8080&lt;br /&gt;&lt;br /&gt;※windowsでbuildする場合、cygwinをインストールして下さい。&lt;br /&gt;  でもって、build.xmlのperl.binを以下のように修正する必要があります。&lt;br /&gt;  &amp;lt;property name="perl.bin" value="c:/cygwin/bin/perl.exe"/&amp;gt;&lt;br /&gt;&amp;lt;!--&amp;lt;property name="perl.bin" value="/usr/bin/perl"/&amp;gt;--&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;クラスパスに必要なjarを配置&lt;/strong&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;commons-logging.jar&lt;br /&gt;&lt;li&gt;lucene-1.4.3.jar&lt;br /&gt;&lt;li&gt;lucene-ja.jar&lt;br /&gt;&lt;li&gt;sen.jar&lt;/ul&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;JapaneseAnalyzerを使ってみる&lt;/strong&gt;&lt;/string&gt;&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.StringReader;&lt;br /&gt;import org.apache.lucene.analysis.Token;&lt;br /&gt;import org.apache.lucene.analysis.TokenStream;&lt;br /&gt;import org.apache.lucene.analysis.ja.JapaneseAnalyzer;&lt;br /&gt;&lt;br /&gt;public class SenSample {&lt;br /&gt;&lt;br /&gt;    static {&lt;br /&gt;&lt;br /&gt;        // Senのホームディレクトリをシステムプロパティに設定&lt;br /&gt;        // ディレクトリパスにスペース、日本語は使用できません！&lt;br /&gt;        System.setProperty("sen.home", "C:/hogehoge/sen-1.2.2.1");&lt;br /&gt;    } &lt;br /&gt;&lt;br /&gt;    public void JapaneseAnalyzerTest(String s) {&lt;br /&gt;&lt;br /&gt;        StringReader reader = null;&lt;br /&gt;        try {&lt;br /&gt;&lt;br /&gt;            JapaneseAnalyzer analyzer = new JapaneseAnalyzer();&lt;br /&gt;            reader = new StringReader(s);&lt;br /&gt;            TokenStream tokenStream = analyzer.tokenStream("", reader);&lt;br /&gt;            Token token = null;&lt;br /&gt;            while ((token = tokenStream.next()) != null) {&lt;br /&gt;&lt;br /&gt;                System.out.println(token.termText() + ":" + token.type());&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;        } catch (IOException e) {&lt;br /&gt;&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;&lt;br /&gt;        } finally {&lt;br /&gt;&lt;br /&gt;            if (reader != null) {&lt;br /&gt;&lt;br /&gt;                reader.close();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class Sample {&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;&lt;br /&gt;        SenSample senSample = new SenSample();&lt;br /&gt;&lt;br /&gt;        senSample.JapaneseAnalyzerTest("形態素解析できるのかテスト中です!");&lt;br /&gt;    }&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="width: 500px; border-left: 10px solid silver;border-bottom: 2px solid silver;padding: 0px 0px 0px 5px;"&gt;&lt;strong&gt;Sampleクラスのmainを実行すると…&lt;/strong&gt;&lt;/div&gt;&lt;div style="padding:0px 0px 0px 15px;"&gt;&lt;br /&gt;形態素:名詞-一般&lt;br /&gt;解析:名詞-サ変接続&lt;br /&gt;の:名詞-非自立-一般&lt;br /&gt;か:助詞-副助詞／並立助詞／終助詞&lt;br /&gt;テスト:名詞-サ変接続&lt;br /&gt;中:名詞-接尾-副詞可能&lt;br /&gt;です:助動詞&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-428773831286861476?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/428773831286861476/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=428773831286861476' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/428773831286861476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/428773831286861476'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/10/blog-post.html' title='形態素解析してみる'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-1955464197751359497</id><published>2008-09-30T23:45:00.004+09:00</published><updated>2009-05-17T13:48:05.970+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='コマンド'/><title type='text'>システム監視コマンド</title><content type='html'>&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;/usr/lib/sa/sadc 1 ./sar.dat&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;ってやると1秒間隔にシステム状態を監視してくれます。&lt;br /&gt;sar.datはそのままじゃー読めないので、&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;sar -A -f ./sar.dat&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;とか&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;sar -P ALL -f ./sar.dat&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;とかオプションを指定して、自分が知りたい情報を見てみましょう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-1955464197751359497?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/1955464197751359497/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=1955464197751359497' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/1955464197751359497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/1955464197751359497'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/09/blog-post.html' title='システム監視コマンド'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-1638563578678312500</id><published>2008-09-25T11:52:00.007+09:00</published><updated>2009-05-17T13:48:54.218+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='トラブルシューティング'/><title type='text'>MySQL max_allowed_packet</title><content type='html'>データサイズがでかいデータ(画像とかムービーとか？)をINSERTすると発生する可能性大。&lt;br /&gt;DBの再起動なしでそっこー反映させる場合&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;set global max_allowed_packet = 1047552;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;本来はmy.cnfのmax_allowed_packetを修正して、DB再起動です。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;max_allowed_packet=1M&lt;br /&gt;       ↓&lt;br /&gt;max_allowed_packet=10M&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;MySQLって色々メンドクサクテいやだなぁ。&lt;br /&gt;PostgreSQLがいい。&lt;br /&gt;&lt;br /&gt;あっ。現状の設定は以下のコマンド確認を。&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;show variables like 'max_allowed_packet';&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-1638563578678312500?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/1638563578678312500/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=1638563578678312500' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/1638563578678312500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/1638563578678312500'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/09/mysql-maxallowedpacket.html' title='MySQL max_allowed_packet'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-1812466452086233212</id><published>2008-09-24T17:30:00.005+09:00</published><updated>2008-09-24T17:38:45.192+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seasar'/><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>Seasarのjarをライブラリとしてみると・・・</title><content type='html'>フレームワークではなく、ただのライブラリとしてもかなり便利な気がします。&lt;br /&gt;最近の発見では&lt;a href="http://s2container.seasar.org/2.4/s2-framework/ja/apidocs/org/seasar/framework/util/ArrayUtil.html"&gt;ArrayUtil&lt;/a&gt;←のいくつかのメソッドは自作したりしてました。&lt;br /&gt;やっぱりあるんですねぇ、こーゆーのって。&lt;br /&gt;&lt;br /&gt;って調べてたら、既にまとまってた・・・&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/dewa/20080715/1216134363"&gt;http://d.hatena.ne.jp/dewa/20080715/1216134363&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;またまた、出羽様に感謝m(_ _)m&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-1812466452086233212?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/1812466452086233212/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=1812466452086233212' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/1812466452086233212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/1812466452086233212'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/09/seasarjar.html' title='Seasarのjarをライブラリとしてみると・・・'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-74817402495005646</id><published>2008-09-24T16:25:00.011+09:00</published><updated>2009-05-17T13:49:28.519+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SAStruts'/><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>SAStrutsで二重サブミット防止</title><content type='html'>Teedaのダブルサブミットを調べついでにSAStrutsも。&lt;br /&gt;SAStrutsの場合Tokenでチェックするみたいですねぇ。&lt;br /&gt;そりゃそうか、Strutsだもんね。&lt;br /&gt;チュートリアルのTokenActionをまるぱくり。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;@Resource&lt;br /&gt;protected HttpServletRequest request;&lt;br /&gt;&lt;br /&gt;@Execute(validator = false)&lt;br /&gt;public String index() {&lt;br /&gt;    TokenProcessor.getInstance().saveToken(request);&lt;br /&gt;    return "index.jsp";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Execute(validator = false, validate = "validate", input = "index.jsp")&lt;br /&gt;public String result() {&lt;br /&gt;    return "result.jsp";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public ActionMessages validate() {&lt;br /&gt;    ActionMessages errors = new ActionMessages();&lt;br /&gt;    if (!TokenProcessor.getInstance().isTokenValid(request, true)) {&lt;br /&gt;        errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(&lt;br /&gt;            "errors.invalid", "Token"));&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    return errors;&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;こんな感じの処理ってアノテーション + インターセプター&lt;br /&gt;でやりたがる人がいるけど、アノテーション + インターセプター&lt;br /&gt;が便利なのは分かるけど、ちょっとやり過ぎな感じがして、個人的にはあんまり好きじゃないですねぇ。&lt;br /&gt;どっちでもいーですけどね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-74817402495005646?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/74817402495005646/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=74817402495005646' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/74817402495005646'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/74817402495005646'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/09/sastruts.html' title='SAStrutsで二重サブミット防止'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-502821586277089142</id><published>2008-09-18T19:06:00.002+09:00</published><updated>2008-09-24T17:19:30.748+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teeda'/><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>Teedaで二重サブミット防止</title><content type='html'>ソッコー見つかりました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/dewa/20070905"&gt;http://d.hatena.ne.jp/dewa/20070905&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;出羽様に感謝 m(_ _)m&lt;br /&gt;&lt;br /&gt;↑の中にもありますが、クライアントサイドでは&lt;br /&gt;&lt;a href="http://teeda.seasar.org/ja/kumu_disabled.html"&gt;http://teeda.seasar.org/ja/kumu_disabled.html&lt;/a&gt;&lt;br /&gt;を参考に。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-502821586277089142?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/502821586277089142/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=502821586277089142' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/502821586277089142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/502821586277089142'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/09/teeda.html' title='Teedaで二重サブミット防止'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-8326477081288283429</id><published>2008-09-14T23:18:00.008+09:00</published><updated>2009-05-17T13:50:31.790+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>HTMLのPタグのスタイル</title><content type='html'>Pタグって結構便利。&lt;br /&gt;&lt;ul&gt;&lt;li&gt;white-space:pre の場合&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre;"&gt;&lt;br /&gt;Integer hoge;&lt;br /&gt;Double       hogehoge;&lt;br /&gt;String hogeString ="";&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;white-space:nowrap の場合&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:nowrap;"&gt;&lt;br /&gt;Integer hoge;&lt;br /&gt;Double       hogehoge;&lt;br /&gt;String hogeString ="";&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;white-space:normal の場合&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:normal;"&gt;&lt;br /&gt;Integer hoge;&lt;br /&gt;Double       hogehoge;&lt;br /&gt;String hogeString ="";&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-8326477081288283429?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/8326477081288283429/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=8326477081288283429' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/8326477081288283429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/8326477081288283429'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/09/htmlp.html' title='HTMLのPタグのスタイル'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-3625742790772776919</id><published>2008-09-14T22:58:00.017+09:00</published><updated>2009-05-17T13:51:12.222+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>DTOをXML形式の文字列に変換</title><content type='html'>JAXB使えよって感じなんでしょうけど、単純にXML形式にしたいだけなのにJAXBだとちょっと面倒。&lt;br /&gt;IntegerとかDoubleもFormat指定できた方がいいんだろうなぁ。&lt;br /&gt;isUserClassもちょっとダサいし。。&lt;br /&gt;まぁ一発目としてはこれでいいかな。&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;import java.lang.reflect.Field;&lt;br /&gt;import java.sql.Timestamp;&lt;br /&gt;import java.text.SimpleDateFormat;&lt;br /&gt;import java.util.Date;&lt;br /&gt;import java.util.List;&lt;br /&gt;&lt;br /&gt;import javax.xml.bind.annotation.XmlElement;&lt;br /&gt;import javax.xml.bind.annotation.XmlElementWrapper;&lt;br /&gt;import javax.xml.bind.annotation.XmlRootElement;&lt;br /&gt;&lt;br /&gt;import jp.co.ccs.xml.annotation.Format;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * XMLに変換するクラスです&lt;br /&gt; * &lt;br /&gt; * @author y-motoba&lt;br /&gt; */&lt;br /&gt;public class XmlConverter {&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * objをxml形式に変換します&lt;br /&gt;     * &lt;br /&gt;     * @param obj&lt;br /&gt;     *            Object&lt;br /&gt;     * &lt;br /&gt;     * @return String&lt;br /&gt;     */&lt;br /&gt;    public String convert(Object obj) {&lt;br /&gt;&lt;br /&gt;        if (obj == null) {&lt;br /&gt;&lt;br /&gt;            return "";&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        StringBuffer xmlString = new StringBuffer();&lt;br /&gt;&lt;br /&gt;        String rootElementName = getRootElementName(obj);&lt;br /&gt;        xmlString.append("&amp;lt;" + rootElementName + "&amp;gt;");&lt;br /&gt;        xmlString.append(obj2xml(obj));&lt;br /&gt;        xmlString.append("&amp;lt;/" + rootElementName + "&amp;gt;");&lt;br /&gt;&lt;br /&gt;        return xmlString.toString();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * @param obj&lt;br /&gt;     * @return&lt;br /&gt;     */&lt;br /&gt;    private String obj2xml(Object obj) {&lt;br /&gt;&lt;br /&gt;        StringBuffer xmlString = new StringBuffer();&lt;br /&gt;        &lt;br /&gt;        Field[] fields = obj.getClass().getDeclaredFields();&lt;br /&gt;        for (Field field : fields) {&lt;br /&gt;&lt;br /&gt;            xmlString.append(field2Xml(obj, field));&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return xmlString.toString();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * DTOのフィールドをxml形式に変換します&lt;br /&gt;     * &lt;br /&gt;     * @param field&lt;br /&gt;     *            Field&lt;br /&gt;     * &lt;br /&gt;     * @return String&lt;br /&gt;     */&lt;br /&gt;    private String field2Xml(Object obj, Field field) {&lt;br /&gt;&lt;br /&gt;        field.setAccessible(true);&lt;br /&gt;        return getFieldElement(obj, getFieldManager(obj, field));&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * XML形式にしたDTOのフィールドを取得します&lt;br /&gt;     * &lt;br /&gt;     * @param obj&lt;br /&gt;     *            Object&lt;br /&gt;     * @param fieldManager&lt;br /&gt;     *            FieldManager&lt;br /&gt;     * &lt;br /&gt;     * @return String&lt;br /&gt;     */&lt;br /&gt;    private String getFieldElement(Object obj, FieldManager fieldManager) {&lt;br /&gt;&lt;br /&gt;        StringBuffer xml = new StringBuffer();&lt;br /&gt;        boolean isWrapper = false;&lt;br /&gt;        if (!"".equals(fieldManager.elementWrapperName)) {&lt;br /&gt;&lt;br /&gt;            isWrapper = true;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        if (isWrapper)&lt;br /&gt;            xml.append("&amp;lt;" + fieldManager.elementWrapperName + "&amp;gt;");&lt;br /&gt;&lt;br /&gt;        xml.append("&amp;lt;" + fieldManager.elementName + "&amp;gt;"&lt;br /&gt;                + getElementValue(obj, fieldManager) + "" + &lt;br /&gt;                "&amp;lt;/" + fieldManager.elementName + "&amp;gt;");&lt;br /&gt;&lt;br /&gt;        if (isWrapper)&lt;br /&gt;            xml.append("");&lt;br /&gt;&lt;br /&gt;        return xml.toString();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * DTOのフィールドに関する情報を取得します&lt;br /&gt;     * &lt;br /&gt;     * @param field&lt;br /&gt;     *            Field&lt;br /&gt;     * &lt;br /&gt;     * @return FieldManager&lt;br /&gt;     */&lt;br /&gt;    private FieldManager getFieldManager(Object obj, Field field) {&lt;br /&gt;&lt;br /&gt;        FieldManager fieldManager = new FieldManager();&lt;br /&gt;&lt;br /&gt;        fieldManager.field = field;&lt;br /&gt;        fieldManager.fieldValue = getFieldValue(obj, field);&lt;br /&gt;        fieldManager.elementName = getElementName(field);&lt;br /&gt;        fieldManager.elementWrapperName = getElementWrapperName(field);&lt;br /&gt;        fieldManager.format = getFormat(field);&lt;br /&gt;&lt;br /&gt;        return fieldManager;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * DTOのフィールドに対する値を取得します&lt;br /&gt;     * &lt;br /&gt;     * @param obj&lt;br /&gt;     *            Object&lt;br /&gt;     * @param fieldManager&lt;br /&gt;     *            FieldManager&lt;br /&gt;     * &lt;br /&gt;     * @return String&lt;br /&gt;     */&lt;br /&gt;    private String getElementValue(Object obj, FieldManager fieldManager) {&lt;br /&gt;&lt;br /&gt;        Object value = fieldManager.fieldValue;&lt;br /&gt;&lt;br /&gt;        if (value == null) {&lt;br /&gt;&lt;br /&gt;            return "";&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        if (value instanceof List) {&lt;br /&gt;&lt;br /&gt;            return list2Xml(obj, (List) value);&lt;br /&gt;&lt;br /&gt;        } else if (value instanceof Date) {&lt;br /&gt;&lt;br /&gt;            return format((Date) value, fieldManager.format);&lt;br /&gt;&lt;br /&gt;        } else if (fieldManager.fieldValue instanceof Timestamp) {&lt;br /&gt;&lt;br /&gt;            return format((Timestamp) value, fieldManager.format);&lt;br /&gt;&lt;br /&gt;        } else if (isUserClass(value)) {&lt;br /&gt;&lt;br /&gt;            return obj2xml(value);&lt;br /&gt;&lt;br /&gt;        } else {&lt;br /&gt;&lt;br /&gt;            return value.toString();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * tsをformat形式に変換します&lt;br /&gt;     * &lt;br /&gt;     * @param ts&lt;br /&gt;     *            Timestamp&lt;br /&gt;     * @param format&lt;br /&gt;     *            format&lt;br /&gt;     * &lt;br /&gt;     * @return String&lt;br /&gt;     */&lt;br /&gt;    private String format(Timestamp ts, String format) {&lt;br /&gt;&lt;br /&gt;        return format(new Date(ts.getTime()), format);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * dateをformat形式に変換します&lt;br /&gt;     * &lt;br /&gt;     * @param date&lt;br /&gt;     *            Date&lt;br /&gt;     * @param format&lt;br /&gt;     *            format&lt;br /&gt;     * &lt;br /&gt;     * @return String&lt;br /&gt;     */&lt;br /&gt;    private String format(Date date, String format) {&lt;br /&gt;&lt;br /&gt;        SimpleDateFormat sdf = new SimpleDateFormat(format);&lt;br /&gt;        return sdf.format(date);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * ユーザ独自のクラスか判定します&lt;br /&gt;     * &lt;br /&gt;     * @param obj&lt;br /&gt;     *            Object&lt;br /&gt;     * &lt;br /&gt;     * @return boolean&lt;br /&gt;     */&lt;br /&gt;    private boolean isUserClass(Object obj) {&lt;br /&gt;&lt;br /&gt;        if (obj instanceof String) {&lt;br /&gt;&lt;br /&gt;            return false;&lt;br /&gt;&lt;br /&gt;        } else if (obj instanceof Integer) {&lt;br /&gt;&lt;br /&gt;            return false;&lt;br /&gt;&lt;br /&gt;        } else if (obj instanceof Long) {&lt;br /&gt;&lt;br /&gt;            return false;&lt;br /&gt;&lt;br /&gt;        } else if (obj instanceof Double) {&lt;br /&gt;&lt;br /&gt;            return false;&lt;br /&gt;&lt;br /&gt;        } else if (obj instanceof Float) {&lt;br /&gt;&lt;br /&gt;            return false;&lt;br /&gt;&lt;br /&gt;        } else if (obj instanceof List) {&lt;br /&gt;&lt;br /&gt;            return false;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return true;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * fieldValueListをxml形式に変換します&lt;br /&gt;     * &lt;br /&gt;     * @param obj&lt;br /&gt;     *            Object&lt;br /&gt;     * @param objList&lt;br /&gt;     *            変換対象リスト&lt;br /&gt;     * &lt;br /&gt;     * @return String&lt;br /&gt;     */&lt;br /&gt;    private String list2Xml(Object obj, List fieldValueList) {&lt;br /&gt;&lt;br /&gt;        if (fieldValueList == null) {&lt;br /&gt;&lt;br /&gt;            return "";&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        StringBuffer xmlString = new StringBuffer();&lt;br /&gt;        for (Object fieldValue : fieldValueList) {&lt;br /&gt;&lt;br /&gt;            if (isUserClass(fieldValue)) {&lt;br /&gt;&lt;br /&gt;                String fieldElementName = getRootElementName(fieldValue);&lt;br /&gt;                xmlString.append("&amp;lt;" + fieldElementName + "&amp;gt;");&lt;br /&gt;                xmlString.append(obj2xml(fieldValue));&lt;br /&gt;                xmlString.append("&amp;lt;/" + fieldElementName + "&amp;gt;");&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return xmlString.toString();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * objのフィールドfieldの値を取得します&lt;br /&gt;     * &lt;br /&gt;     * @param obj&lt;br /&gt;     *            Object&lt;br /&gt;     * @param field&lt;br /&gt;     *            Field&lt;br /&gt;     * &lt;br /&gt;     * @return Object&lt;br /&gt;     */&lt;br /&gt;    private Object getFieldValue(Object obj, Field field) {&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;&lt;br /&gt;            return field.get(obj);&lt;br /&gt;&lt;br /&gt;        } catch (IllegalArgumentException e) {&lt;br /&gt;&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;            throw new RuntimeException();&lt;br /&gt;&lt;br /&gt;        } catch (IllegalAccessException e) {&lt;br /&gt;&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;            throw new RuntimeException();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * フィールドのFormatアノテーションの値を取得します&lt;br /&gt;     * &lt;br /&gt;     * @param obj&lt;br /&gt;     *            Object&lt;br /&gt;     * &lt;br /&gt;     * @return RootElementName&lt;br /&gt;     */&lt;br /&gt;    private String getFormat(Field field) {&lt;br /&gt;&lt;br /&gt;        Format format = field.getAnnotation(Format.class);&lt;br /&gt;        if (format == null) {&lt;br /&gt;&lt;br /&gt;            return "yyyy/MM/dd hh:mm:ss";&lt;br /&gt;&lt;br /&gt;        } else {&lt;br /&gt;&lt;br /&gt;            return format.value();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * XMLの要素ラッパー名取得&lt;br /&gt;     * &lt;br /&gt;     * @param obj&lt;br /&gt;     *            Object&lt;br /&gt;     * &lt;br /&gt;     * @return RootElementName&lt;br /&gt;     */&lt;br /&gt;    private String getElementWrapperName(Field field) {&lt;br /&gt;&lt;br /&gt;        XmlElementWrapper xmlElementWrapper = field&lt;br /&gt;                .getAnnotation(XmlElementWrapper.class);&lt;br /&gt;        if (xmlElementWrapper == null) {&lt;br /&gt;&lt;br /&gt;            return "";&lt;br /&gt;&lt;br /&gt;        } else {&lt;br /&gt;&lt;br /&gt;            return xmlElementWrapper.name();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * XMLの要素名取得&lt;br /&gt;     * &lt;br /&gt;     * @param obj&lt;br /&gt;     *            Object&lt;br /&gt;     * &lt;br /&gt;     * @return RootElementName&lt;br /&gt;     */&lt;br /&gt;    private String getElementName(Field field) {&lt;br /&gt;&lt;br /&gt;        XmlElement xmlElement = field.getAnnotation(XmlElement.class);&lt;br /&gt;        if (xmlElement == null) {&lt;br /&gt;&lt;br /&gt;            return field.getName();&lt;br /&gt;&lt;br /&gt;        } else {&lt;br /&gt;&lt;br /&gt;            return xmlElement.name();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * XMLのルート要素名取得&lt;br /&gt;     * &lt;br /&gt;     * @param obj&lt;br /&gt;     *            Object&lt;br /&gt;     * &lt;br /&gt;     * @return RootElementName&lt;br /&gt;     */&lt;br /&gt;    private String getRootElementName(Object obj) {&lt;br /&gt;&lt;br /&gt;        XmlRootElement xmlRootElement = obj.getClass().getAnnotation(&lt;br /&gt;                XmlRootElement.class);&lt;br /&gt;        if (xmlRootElement == null) {&lt;br /&gt;&lt;br /&gt;            return obj.getClass().getSimpleName();&lt;br /&gt;&lt;br /&gt;        } else {&lt;br /&gt;&lt;br /&gt;            return xmlRootElement.name();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class FieldManager {&lt;br /&gt;&lt;br /&gt;    public Field field;&lt;br /&gt;    public Object fieldValue;&lt;br /&gt;    public String elementName;&lt;br /&gt;    public String elementWrapperName;&lt;br /&gt;    public String format;&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-3625742790772776919?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/3625742790772776919/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=3625742790772776919' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/3625742790772776919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/3625742790772776919'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/09/dtoxml.html' title='DTOをXML形式の文字列に変換'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-2517935710664654376</id><published>2008-09-11T17:07:00.008+09:00</published><updated>2009-05-17T13:51:59.209+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='トラブルシューティング'/><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><title type='text'>Tomcatのコネクションを再接続</title><content type='html'>いっつも忘れちゃうから残します。&lt;br /&gt;以下の設定を加えることでプールされているコネクションの接続チェックしてくれます。&lt;br /&gt;(切断されちゃってた場合、再接続してくれます。)&lt;br /&gt;Tomcatのと言うより、DBCPのってのが正しいのかな？&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;testOnBorrow="true"&lt;br /&gt;validationQuery="select 1 from dual"&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;実際の定義ファイルでは↓こんな感じかな。&lt;br /&gt;&lt;blockquote&gt;&amp;lt;Resource&lt;br /&gt;  name="jdbc/repositoryDataSource"&lt;br /&gt;  auth="Container" type="javax.sql.DataSource"&lt;br /&gt;  maxActive="20"&lt;br /&gt;  maxIdle="10"&lt;br /&gt;  minIdle="2&lt;br /&gt;  initialSize="2"&lt;br /&gt;  maxWait="10000"&lt;br /&gt;  &lt;font color="red"&gt;testOnBorrow="true"&lt;br /&gt;  validationQuery="select 1 from dual"&lt;/font&gt;&lt;br /&gt;  poolPreparedStatements="true"&lt;br /&gt;  username="root"&lt;br /&gt;  password="password"&lt;br /&gt;  driverClassName="com.mysql.jdbc.Driver"&lt;br /&gt;url="jdbc:mysql://127.0.0.1:3306/slide?autoReconnect=true&amp;amp;characterEncoding=utf8"&lt;br /&gt;/&amp;gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;ちなみに、Seasar使ってる人はjdbc.diconを↓な感じで。&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;    &amp;lt;component name="connectionPool"&lt;br /&gt;            class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl"&amp;gt;&lt;br /&gt;        &amp;lt;property name="timeout"&amp;gt;600&amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="maxPoolSize"&amp;gt;10&amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="allowLocalTx"&amp;gt;true&amp;lt;/property&amp;gt;&lt;br /&gt;        &lt;font color="red"&gt;&amp;lt;property name="validationQuery"&amp;gt;"select * from dual"&amp;lt;/property&amp;gt;&lt;br /&gt;        &amp;lt;property name="validationInterval"&amp;gt;10000&amp;lt;/property&amp;gt;&lt;/font&gt;&lt;br /&gt;        &amp;lt;destroyMethod name="close"/&amp;gt;&lt;br /&gt;    &amp;lt;/component&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-2517935710664654376?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/2517935710664654376/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=2517935710664654376' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2517935710664654376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2517935710664654376'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/09/tomcat.html' title='Tomcatのコネクションを再接続'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-4265277000610688889</id><published>2008-09-11T10:43:00.003+09:00</published><updated>2009-05-28T22:59:09.852+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>perlで日付表示</title><content type='html'>dateコマンドでもいんですけど、perlでやってみた。&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;#!/usr/bin/perl&lt;br /&gt;&lt;br /&gt;sub show_date {&lt;br /&gt;    my $tm = shift;&lt;br /&gt;    my ($day, $month, $year) = (localtime($tm))[3..5];&lt;br /&gt;    printf "%04d-%02d-%02d\n", $year + 1900, $month + 1, $day;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;show_date(time);# 前々日を表示&lt;br /&gt;#show_date(time - 48 * 3600);&lt;br /&gt;# 翌日を表示&lt;br /&gt;#show_date(time + 24 * 3600);&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-4265277000610688889?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/4265277000610688889/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=4265277000610688889' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4265277000610688889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4265277000610688889'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/09/perl.html' title='perlで日付表示'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-5430469067151668527</id><published>2008-08-28T15:45:00.006+09:00</published><updated>2009-05-17T13:53:03.891+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>オブジェクトのソート</title><content type='html'>List&lt;MyClass&gt; のお手軽ソート。&lt;br /&gt;&lt;br /&gt;1.Comparableをimplementsする&lt;br /&gt;  public class MyClass implements Comparable&lt;br /&gt;&lt;br /&gt;2.ソートルールをMyClassに追加する&lt;br /&gt;  下記の例だと降順ソートです。&lt;br /&gt;  昇順ソートにする場合、1 と -1 を入れ替えましょう！&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;public int compareTo(Object o) {&lt;br /&gt;&lt;br /&gt;    MyClass myClass= (MyClass ) o;&lt;br /&gt;    if (this.value&lt; myClass.value) {&lt;br /&gt;        return 1;&lt;br /&gt;    } else if (this.value&gt; myClass.value) {&lt;br /&gt;        return -1;&lt;br /&gt;    } else {&lt;br /&gt;        return 0;&lt;br /&gt;    }&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-5430469067151668527?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/5430469067151668527/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=5430469067151668527' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5430469067151668527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5430469067151668527'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/08/blog-post_28.html' title='オブジェクトのソート'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-6122281525731716826</id><published>2008-08-23T22:58:00.004+09:00</published><updated>2009-05-17T13:53:43.215+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>ストライプテーブル</title><content type='html'>jQueryを使ってストライプテーブルを作ってみました。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&amp;gt;&lt;br /&gt;&amp;lt;meta http-equiv="Content-Style-Type" content="text/css"&amp;gt;&lt;br /&gt;&amp;lt;meta http-equiv="Content-Script-Type" content="text/javascript"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script type="text/javascript" src="./jquery-1.2.6.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;style&amp;gt;&lt;br /&gt;&lt;br /&gt;table {&lt;br /&gt;&lt;br /&gt;  border:solid 1px black;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;thead {&lt;br /&gt;&lt;br /&gt;  background-color:lightblue;&lt;br /&gt;  font-size:large;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;table.shoptable {&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;th {&lt;br /&gt;&lt;br /&gt;  border:solid 1px black;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;td {&lt;br /&gt;&lt;br /&gt;  font-size:small;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;td.number {&lt;br /&gt;&lt;br /&gt;  border:solid 1px black;&lt;br /&gt;  width:100px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;td.name {&lt;br /&gt;&lt;br /&gt;  border:solid 1px black;&lt;br /&gt;  width:200px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;td.money {&lt;br /&gt;&lt;br /&gt;  border:solid 1px black;&lt;br /&gt;  width:100px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;td.num {&lt;br /&gt;&lt;br /&gt;  border:solid 1px black;&lt;br /&gt;  width:100px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.stripe td {&lt;br /&gt;  background: aliceblue;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;&lt;br /&gt;$(document).ready(function() {&lt;br /&gt;&lt;br /&gt;  $(".shoptable tr:even").addClass("stripe");&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;//--&amp;gt;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;table class="shoptable"&amp;gt;&lt;br /&gt;  &amp;lt;thead&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;th class="number"&amp;gt;商品番号&amp;lt;/th&amp;gt;&lt;br /&gt;      &amp;lt;th class="name"&amp;gt;商品名&amp;lt;/th&amp;gt;&lt;br /&gt;      &amp;lt;th class="money"&amp;gt;単価&amp;lt;/th&amp;gt;&lt;br /&gt;      &amp;lt;th class="num"&amp;gt;個数&amp;lt;/th&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;/thead&amp;gt;&lt;br /&gt;  &amp;lt;tbody&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;td class="number"&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="name"&amp;gt;ノートPC&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="money"&amp;gt;\10,000&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="num"&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;td class="number"&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="name"&amp;gt;ノートPC&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="money"&amp;gt;\10,000&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="num"&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;td class="number"&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="name"&amp;gt;ノートPC&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="money"&amp;gt;\10,000&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="num"&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;td class="number"&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="name"&amp;gt;ノートPC&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="money"&amp;gt;\10,000&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="num"&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;td class="number"&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="name"&amp;gt;ノートPC&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="money"&amp;gt;\10,000&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="num"&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;td class="number"&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="name"&amp;gt;ノートPC&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="money"&amp;gt;\10,000&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="num"&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;td class="number"&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="name"&amp;gt;ノートPC&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="money"&amp;gt;\10,000&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="num"&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;td class="number"&amp;gt;1&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="name"&amp;gt;ノートPC&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="money"&amp;gt;\10,000&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="num"&amp;gt;10&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;/tbody&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-6122281525731716826?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/6122281525731716826/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=6122281525731716826' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6122281525731716826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6122281525731716826'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/08/blog-post_9363.html' title='ストライプテーブル'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-7250678772380849315</id><published>2008-08-23T22:54:00.004+09:00</published><updated>2009-05-17T13:54:18.804+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>テーブルのデータ部分だけスクロールさせる</title><content type='html'>divタグで逃げてしまいがちですが(結局divタグ使いますけど…)&lt;br /&gt;table + divでデータ部分だけスクロールさせてみる。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&amp;gt;&lt;br /&gt;&amp;lt;meta http-equiv="Content-Style-Type" content="text/css"&amp;gt;&lt;br /&gt;&amp;lt;meta http-equiv="Content-Script-Type" content="text/javascript"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;style&amp;gt;&lt;br /&gt;&lt;br /&gt;/* 全体のdivスタイル */&lt;br /&gt;.header {&lt;br /&gt;&lt;br /&gt;  position:relative;&lt;br /&gt;  padding-top:24px; /* データ部の高さの開始位置 */&lt;br /&gt;  width:522px; /* 全体の幅 */&lt;br /&gt;  border: 1px inset #999;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* データ部分の位置と高さのスタイル */&lt;br /&gt;.contents {&lt;br /&gt;&lt;br /&gt;  overflow:auto; /* 範囲外になった場合にスクロールさせる */&lt;br /&gt;  height:100px; /* データ部分全体の高さ */&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* ヘッダ部分の位置のスタイル */&lt;br /&gt;table.contentsscroll thead tr {&lt;br /&gt;&lt;br /&gt;  position:absolute;&lt;br /&gt;  top:0; /* ヘッダ部のトップ位置 */&lt;br /&gt;  left:0; /* ヘッダ部の左位置 */&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* ヘッダ部分のスタイル */&lt;br /&gt;table.contentsscroll thead tr th{&lt;br /&gt;&lt;br /&gt;  height:24px; /* ヘッダ部分の高さ */&lt;br /&gt;  width:100px; /* ヘッダ部分の幅 */&lt;br /&gt;  background-color: lightblue; /* ヘッダの背景色 */&lt;br /&gt;  border-right: 1px solid #000000; /* ヘッダの区切り線 */&lt;br /&gt;  border-bottom: 1px solid #000000; /* ヘッダの区切り線 */&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* データ部分のスタイル */&lt;br /&gt;table.contentsscroll tbody tr td{&lt;br /&gt;  &lt;br /&gt;  width:100px; /* データ部分の幅 */&lt;br /&gt;  border-right: 1px solid #D9D9D9;&lt;br /&gt;  border-bottom: 1px solid #f0f0f0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;div class="header"&amp;gt;&lt;br /&gt;  &amp;lt;div class="contents"&amp;gt;&lt;br /&gt;    &amp;lt;table cellpadding="0" cellspacing="0" class="contentsscroll"&amp;gt;&lt;br /&gt;      &amp;lt;thead&amp;gt;&lt;br /&gt;        &amp;lt;tr&amp;gt;&lt;br /&gt;          &amp;lt;th&amp;gt;Shopper&amp;lt;/th&amp;gt;&lt;br /&gt;          &amp;lt;th&amp;gt;First&amp;lt;/th&amp;gt;&lt;br /&gt;          &amp;lt;th&amp;gt;Last&amp;lt;/th&amp;gt;&lt;br /&gt;          &amp;lt;th&amp;gt;User ID&amp;lt;/th&amp;gt;&lt;br /&gt;          &amp;lt;th&amp;gt;Status&amp;lt;/th&amp;gt;&lt;br /&gt;        &amp;lt;/tr&amp;gt;&lt;br /&gt;      &amp;lt;/thead&amp;gt;&lt;br /&gt;      &amp;lt;tbody&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Fishing&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;John&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;&amp;lt;span class="style1"&amp;gt;Doe&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;C2C Fishing&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Enabled&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Someone&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Jane&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;&amp;lt;span class="style1"&amp;gt;Joe&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Guppy &amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Disabled&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;      &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Someone&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Jane&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;&amp;lt;span class="style1"&amp;gt;Joe&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Guppy &amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Disabled&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;      &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Someone&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Jane&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;&amp;lt;span class="style1"&amp;gt;Joe&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Guppy &amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Disabled&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;      &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Someone&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Jane&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;&amp;lt;span class="style1"&amp;gt;Joe&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Guppy &amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Disabled&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;      &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Someone&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Jane&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;&amp;lt;span class="style1"&amp;gt;Joe&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Guppy &amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Disabled&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;      &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Someone&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Jane&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;&amp;lt;span class="style1"&amp;gt;Joe&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Guppy &amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Disabled&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;      &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Someone&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Jane&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;&amp;lt;span class="style1"&amp;gt;Joe&amp;lt;/span&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Guppy &amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;td&amp;gt;Disabled&amp;lt;/td&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;      &amp;lt;/tbody&amp;gt;&lt;br /&gt;    &amp;lt;/table&amp;gt;&lt;br /&gt;  &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-7250678772380849315?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/7250678772380849315/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=7250678772380849315' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/7250678772380849315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/7250678772380849315'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/08/blog-post_23.html' title='テーブルのデータ部分だけスクロールさせる'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-4186671114135973455</id><published>2008-08-15T13:56:00.014+09:00</published><updated>2009-05-17T13:55:08.037+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='solr'/><title type='text'>solrにインデキシングしたドキュメントを削除</title><content type='html'>solrにaddしたドキュメントの削除方法&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;java -Ddata=args -Dcommit=no -jar post.jar "&amp;lt;delete&amp;gt;&amp;lt;id&amp;gt;SP2514N&amp;lt;/id&amp;gt;&amp;lt;/delete&amp;gt;"&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;とか&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;java -Ddata=args -jar post.jar "&amp;lt;delete&amp;gt;&amp;lt;query&amp;gt;name:DDR&amp;lt;/query&amp;gt;&amp;lt;/delete&amp;gt;"&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;ってxmlをポストしてやればオッケーらしい。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-4186671114135973455?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/4186671114135973455/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=4186671114135973455' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4186671114135973455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4186671114135973455'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/08/solr.html' title='solrにインデキシングしたドキュメントを削除'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-2948628125478181149</id><published>2008-08-13T16:47:00.003+09:00</published><updated>2009-05-17T13:55:35.738+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='S2Dao'/><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>S2Daoのupdate0件回避</title><content type='html'>S2Daoでupdateすると、必ず更新される行が必要となるようです。&lt;br /&gt;でも、更新されても、されなくてもいいんだよ。って場合には、&lt;br /&gt;メソッドアノテーションとして&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;@CheckSingleRowUpdate&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;を指定すると、更新件数0件のUPDATEを実行しても例外が発生しない。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-2948628125478181149?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/2948628125478181149/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=2948628125478181149' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2948628125478181149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2948628125478181149'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/08/s2daoupdate0.html' title='S2Daoのupdate0件回避'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-5772620095224788707</id><published>2008-08-13T11:46:00.006+09:00</published><updated>2009-05-28T22:59:53.254+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>生年月日と現在時刻から年齢を求める</title><content type='html'>&lt;blockquote&gt;&lt;br /&gt;// 誕生日を設定&lt;br /&gt;Calendar cal = Calendar.getInstance();&lt;br /&gt;cal.set(Calendar.YEAR, 1978);&lt;br /&gt;cal.set(Calendar.MONTH, 1);&lt;br /&gt;cal.set(Calendar.DAY_OF_MONTH, 20);&lt;br /&gt;&lt;br /&gt;SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");&lt;br /&gt;&lt;br /&gt;// 現在時刻と誕生日を文字列にしてintにする&lt;br /&gt;int now = Integer.parseInt(sdf.format(new Date()));&lt;br /&gt;int birth = Integer.parseInt(sdf.format(cal.getTime()));&lt;br /&gt;&lt;br /&gt;// 年齢を標準出力&lt;br /&gt;// (20080811 - 19780220) / 10000 &lt;br /&gt;// って感じの計算&lt;br /&gt;System.out.println((int) ((now - birth) / 10000));&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-5772620095224788707?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/5772620095224788707/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=5772620095224788707' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5772620095224788707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5772620095224788707'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/08/blog-post.html' title='生年月日と現在時刻から年齢を求める'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-5152900068185482690</id><published>2008-08-06T13:36:00.004+09:00</published><updated>2009-05-17T13:56:31.581+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>MySQLのAutoIncrementの値を取得する！</title><content type='html'>INSERT後、autoincrementの値を取得したい場合&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;SELECT LAST_INSERT_ID()&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;で取得できます。&lt;br /&gt;あんまり試してないですが、同一トランザクション内でないとダメな感じ。&lt;br /&gt;当たり前か。&lt;br /&gt;&lt;br /&gt;テーブル名称指定して最後にINSERTしたautoincrementの値を取得できるようになるといいなぁ。&lt;br /&gt;カレントタイムスタンプの列があるなら、タイムスタンプでソートして最後にINSERTされたレコードのIDって感じになるから必要ないか。まぁ、いいや。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-5152900068185482690?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/5152900068185482690/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=5152900068185482690' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5152900068185482690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5152900068185482690'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/08/mysqlautoincrement.html' title='MySQLのAutoIncrementの値を取得する！'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-6552476277042889399</id><published>2008-07-31T17:30:00.004+09:00</published><updated>2009-05-28T23:00:54.548+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>Javaでソケット通信</title><content type='html'>ソケット通信するサンプル作ってみた。&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color:skyblue;"&gt;サーバ&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.InputStream;&lt;br /&gt;import java.io.PrintWriter;&lt;br /&gt;import java.net.ServerSocket;&lt;br /&gt;import java.net.Socket;&lt;br /&gt;&lt;br /&gt;public class WordManageServer {&lt;br /&gt;&lt;br /&gt;    private static final int PORT = 8888;&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;&lt;br /&gt;        ServerSocket serverSocket = null;&lt;br /&gt;        Socket socket = null;&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;&lt;br /&gt;            // サーバーソケットの生成&lt;br /&gt;            serverSocket = new ServerSocket(PORT);&lt;br /&gt;&lt;br /&gt;            for (;;) {&lt;br /&gt;&lt;br /&gt;                System.out.println("wait request.");&lt;br /&gt;                socket = serverSocket.accept();&lt;br /&gt;                System.out.println("accept [" + socket.getInetAddress() + "]");&lt;br /&gt;&lt;br /&gt;                // スレッド起動&lt;br /&gt;                new WordManagerThread(socket);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;        } catch (IOException e) {&lt;br /&gt;&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;&lt;br /&gt;        } finally {&lt;br /&gt;&lt;br /&gt;            try {&lt;br /&gt;&lt;br /&gt;                serverSocket.close();&lt;br /&gt;&lt;br /&gt;            } catch (IOException e) {&lt;br /&gt;&lt;br /&gt;                e.printStackTrace();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class WordManagerThread extends Thread {&lt;br /&gt;&lt;br /&gt;    private Socket socket = null;&lt;br /&gt;&lt;br /&gt;    public WordManagerThread(Socket socket) {&lt;br /&gt;&lt;br /&gt;        this.socket = socket;&lt;br /&gt;        this.start();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void run() {&lt;br /&gt;&lt;br /&gt;        PrintWriter out = null;&lt;br /&gt;        BufferedReader in = null;&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;&lt;br /&gt;            // 出力ストリームを取得&lt;br /&gt;            out = new PrintWriter(socket.getOutputStream(), true);&lt;br /&gt;&lt;br /&gt;            InputStream inputStream = socket.getInputStream();&lt;br /&gt;            byte[] func = new byte[4];&lt;br /&gt;            byte[] dt = new byte[4];&lt;br /&gt;&lt;br /&gt;            inputStream.read(func);&lt;br /&gt;            int val1 = ((func[3] &amp; 0xff) &lt;&lt; 24) | ((func[2] &amp; 0xff) &lt;&lt; 16)&lt;br /&gt;                    | ((func[1] &amp; 0xff) &lt;&lt; 8) | (func[0] &amp; 0xff);&lt;br /&gt;&lt;br /&gt;            inputStream.read(dt);&lt;br /&gt;            int val2 = ((dt[3] &amp; 0xff) &lt;&lt; 24) | ((dt[2] &amp; 0xff) &lt;&lt; 16)&lt;br /&gt;                    | ((dt[1] &amp; 0xff) &lt;&lt; 8) | (dt[0] &amp; 0xff);&lt;br /&gt;&lt;br /&gt;            System.out.println(val1);&lt;br /&gt;            System.out.println(val2);&lt;br /&gt;&lt;br /&gt;        } catch (IOException e) {&lt;br /&gt;&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;&lt;br /&gt;        } finally {&lt;br /&gt;&lt;br /&gt;            close(socket, out, in);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * @param socket&lt;br /&gt;     * @param out&lt;br /&gt;     * @param in&lt;br /&gt;     */&lt;br /&gt;    private static void close(Socket socket, PrintWriter out, BufferedReader in) {&lt;br /&gt;&lt;br /&gt;        if (out != null) {&lt;br /&gt;&lt;br /&gt;            out.close();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        if (in != null) {&lt;br /&gt;&lt;br /&gt;            try {&lt;br /&gt;&lt;br /&gt;                in.close();&lt;br /&gt;&lt;br /&gt;            } catch (IOException e) {&lt;br /&gt;&lt;br /&gt;                e.printStackTrace();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        if (socket != null) {&lt;br /&gt;&lt;br /&gt;            try {&lt;br /&gt;&lt;br /&gt;                socket.close();&lt;br /&gt;&lt;br /&gt;            } catch (IOException e) {&lt;br /&gt;&lt;br /&gt;                e.printStackTrace();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color:skyblue;"&gt;クライアント&lt;/div&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;import java.io.BufferedReader;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.io.InputStreamReader;&lt;br /&gt;import java.io.OutputStream;&lt;br /&gt;import java.net.Socket;&lt;br /&gt;&lt;br /&gt;public class TestClient {&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;&lt;br /&gt;            Socket socket = new Socket("localhost", 8888);&lt;br /&gt;            BufferedReader in = new BufferedReader(new InputStreamReader(socket&lt;br /&gt;                    .getInputStream()));&lt;br /&gt;&lt;br /&gt;            OutputStream os = socket.getOutputStream();&lt;br /&gt;            os.write((int)2);&lt;br /&gt;            os.write((int)3);&lt;br /&gt;            os.flush();&lt;br /&gt;&lt;br /&gt;            System.out.println(in.readLine());&lt;br /&gt;&lt;br /&gt;            // 入出力ストリームを閉じる&lt;br /&gt;            os.close();&lt;br /&gt;            in.close();&lt;br /&gt;            socket.close();&lt;br /&gt;&lt;br /&gt;        } catch (IOException e) {&lt;br /&gt;&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-6552476277042889399?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/6552476277042889399/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=6552476277042889399' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6552476277042889399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6552476277042889399'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/java_31.html' title='Javaでソケット通信'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-6478298320434105520</id><published>2008-07-30T20:26:00.005+09:00</published><updated>2009-05-17T13:57:07.539+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>javaのプロセスのメモリ状態とかを見る</title><content type='html'>jconsole(jdk1.5以上)が標準でインストールされるとのこと。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;java -Dcom.sun.management.jmxremote 実行クラス&lt;br /&gt;&lt;br /&gt;&amp;lt;jdk install&amp;gt;/bin/jconsole&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;とすると、jconsoleの接続リストの中に自分が実行したプロセスがいる。&lt;br /&gt;それを選択すると、ヒープの状態とか、その他もろもろみれる。&lt;br /&gt;何かメモリリークしちゃってたので、どこでメモリ使いまくってるか検出できた。&lt;br /&gt;普段あんまり使わないと思うけど、いざという時に便利です。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-6478298320434105520?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/6478298320434105520/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=6478298320434105520' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6478298320434105520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6478298320434105520'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/java.html' title='javaのプロセスのメモリ状態とかを見る'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-7542760866393368704</id><published>2008-07-30T14:09:00.005+09:00</published><updated>2009-05-17T13:57:45.632+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>JavaBeansのプロパティの値を全て表示する</title><content type='html'>エンティティとかDTOのプロパティを全部ログ出力したい場合等に有効かと。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;public String toString() {&lt;br /&gt;return ToStringBuilder.reflectionToString(this, ToStringStyle.DEFAULT_STYLE);&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;↑のtoStringを実行すると&lt;br /&gt;&lt;blockquote&gt;jp.co.hoge.entity.hogeDto@f01a1e[prop1=&lt;値１&gt;,prop2=&lt;値２&gt;]&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;のように出力してくれます。&lt;br /&gt;出力形式はToStringStyleが用意してくれてるので、好みの出力形式に変更可能！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-7542760866393368704?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/7542760866393368704/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=7542760866393368704' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/7542760866393368704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/7542760866393368704'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/javabeans.html' title='JavaBeansのプロパティの値を全て表示する'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-5910032443329570207</id><published>2008-07-22T22:58:00.004+09:00</published><updated>2009-05-28T23:01:31.828+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teeda'/><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>Teedaのforeach</title><content type='html'>S2JSFあがりの私にはとても違和感があったのと、ちゃんとドキュメント読まないとはまる気がするのでメモ。&lt;br /&gt;&lt;br /&gt;Pageクラスに&lt;br /&gt;&lt;br /&gt;public List&amp;lt;HogeDto&amp;gt; hogeDtoItems;&lt;br /&gt;&lt;br /&gt;があり、Dtoが&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;public class HogeDto {&lt;br /&gt;&lt;br /&gt;    private String aaa;&lt;br /&gt;    private String bbb;&lt;br /&gt;&lt;br /&gt;    // getter、setterは省略&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;のようになっていた場合、PageクラスにDtoと同じプロパティ名&lt;br /&gt;&lt;br /&gt;public String aaa;&lt;br /&gt;public String bbb;&lt;br /&gt;&lt;br /&gt;を持ってないとforeach使ってレンダリングされません。&lt;br /&gt;ダセー、と思ってteeda修正しようと思いましたが、TForEachクラスだけでは修正がとどまらない感じだったので断念・・・&lt;br /&gt;htmlとpageが1対1ってのは分かりますが、PageクラスにDtoと同じプロパティを更新可能な状態(public にするか getter を用意する)でもってなきゃレンダリングされないってのはイケてないと思う。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-5910032443329570207?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/5910032443329570207/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=5910032443329570207' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5910032443329570207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5910032443329570207'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/teedaforeach.html' title='Teedaのforeach'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-3934017334055504667</id><published>2008-07-18T16:52:00.000+09:00</published><updated>2008-07-18T16:53:30.487+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>例外時のページ</title><content type='html'>&lt;a href="http://d.hatena.ne.jp/shot6/20070425"&gt;http://d.hatena.ne.jp/shot6/20070425&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ん～、ためになります。&lt;br /&gt;ISIDの方ってほんとにスバラシイ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-3934017334055504667?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/3934017334055504667/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=3934017334055504667' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/3934017334055504667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/3934017334055504667'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/blog-post_7202.html' title='例外時のページ'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-4494169645295215506</id><published>2008-07-18T16:47:00.002+09:00</published><updated>2008-07-18T16:49:30.097+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='etc'/><title type='text'>どうなんだろう・・・</title><content type='html'>&lt;a href="http://d.hatena.ne.jp/himazublog/20070408/1175994799"&gt;http://d.hatena.ne.jp/himazublog/20070408/1175994799&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;結果がついてきてるからすごいなぁ、と素直に思うけど、かなり綱渡りな気がする。&lt;br /&gt;まぁ、それなりのリスクはしょうがないのかな。&lt;br /&gt;勉強になります。m(_ _)m&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-4494169645295215506?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/4494169645295215506/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=4494169645295215506' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4494169645295215506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4494169645295215506'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/blog-post_18.html' title='どうなんだろう・・・'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-4194226655667739368</id><published>2008-07-18T16:04:00.010+09:00</published><updated>2009-05-28T23:02:09.182+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teeda'/><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>Teedaでセッション情報削除</title><content type='html'>なんと、&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;public class LogoutPage {&lt;br /&gt;&lt;br /&gt;    private LoginDto loginDto;&lt;br /&gt;&lt;br /&gt;    @RemoveSession(name={ "loginDto" })&lt;br /&gt;    public Class prerender() {&lt;br /&gt;&lt;br /&gt;        loginDto.logout();&lt;br /&gt;        return null;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setLoginDto(LoginDto loginDto) {&lt;br /&gt;&lt;br /&gt;        this.loginDto = loginDto;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;ってやれば、@RemoveSession で指定したloginDtoがセッションから消えるらしい。&lt;br /&gt;ん～、すばらしい。&lt;br /&gt;&lt;br /&gt;ついでに、セッションに持たせるには、&lt;br /&gt;&lt;br /&gt;@Component(instance = InstanceType.SESSION)&lt;br /&gt;&lt;br /&gt;public class Hoge implements Serializable {&lt;br /&gt;&lt;br /&gt;って感じで、@Componentアノテーションで、インスタンスはセッションだよ。&lt;br /&gt;ってやるだけでいいみたい。&lt;br /&gt;フレームワークってすごいなぁ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-4194226655667739368?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/4194226655667739368/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=4194226655667739368' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4194226655667739368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4194226655667739368'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/teeda_5252.html' title='Teedaでセッション情報削除'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-2728350238327670250</id><published>2008-07-18T15:56:00.008+09:00</published><updated>2009-05-28T23:02:37.307+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teeda'/><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>Teedaで独自のインターセプター</title><content type='html'>Teedaで独自のインターセプターを作る！&lt;br /&gt;&lt;br /&gt;■インターセプターを作る！&lt;hr/&gt;&lt;br /&gt;&amp;lt;root package&amp;gt;.intercepterにAbstractInterceptorを継承したクラスを作成&lt;br /&gt;&lt;br /&gt;■作ったインターセプターをPageクラスに適用する！&lt;hr/&gt;&lt;br /&gt;&amp;lt;component name="pageCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain"&amp;gt;&lt;br /&gt;  &amp;lt;initMethod name="addAspectCustomizer"&amp;gt;&lt;br /&gt;    &amp;lt;arg&amp;gt;"hogeLogManagerInterceptor"&amp;lt;/arg&amp;gt;&lt;br /&gt;    &amp;lt;arg&amp;gt;"do.*, initialize, prerender"&amp;lt;/arg&amp;gt;&lt;br /&gt;  &amp;lt;/initMethod&amp;gt;&lt;br /&gt;&amp;lt;/component&amp;gt;&lt;br /&gt;&lt;br /&gt;こんな感じでいけるらしい。&lt;br /&gt;仕事が終わったら試してみよ。&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color:skyblue;"&gt;試してみた&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;package jp.interceptor;&lt;br /&gt;&lt;br /&gt;import org.aopalliance.intercept.MethodInvocation;&lt;br /&gt;import org.seasar.framework.aop.interceptors.AbstractInterceptor;&lt;br /&gt;&lt;br /&gt;public class TestInterceptor extends AbstractInterceptor {&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public Object invoke(MethodInvocation arg0) throws Throwable {&lt;br /&gt;&lt;br /&gt;  System.out.println("aaaaa");&lt;br /&gt;  arg0.proceed();&lt;br /&gt;  System.out.println("bbbbb");&lt;br /&gt;  return null;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;こんな感じでちゃんと動いた！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-2728350238327670250?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/2728350238327670250/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=2728350238327670250' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2728350238327670250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2728350238327670250'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/teeda_18.html' title='Teedaで独自のインターセプター'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-5015817414082248518</id><published>2008-07-18T15:40:00.001+09:00</published><updated>2008-08-13T16:50:36.830+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teeda'/><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>TeedaでRequest、SessionをDI</title><content type='html'>ソッコーでみつかりました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/shot6/20070202"&gt;http://d.hatena.ne.jp/shot6/20070202&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;さすがDIコンテナー！便利すぎる。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-5015817414082248518?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/5015817414082248518/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=5015817414082248518' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5015817414082248518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5015817414082248518'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/teedarequestsessiondi.html' title='TeedaでRequest、SessionをDI'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-5901585592546919459</id><published>2008-07-17T22:20:00.005+09:00</published><updated>2008-08-13T16:51:03.509+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='teeda'/><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>Teedaのパッケージ構成</title><content type='html'>teedaってどんな感じがいじってみました。&lt;br /&gt;ざっくりいじって、そう言えばどんなパッケージ構成がいいんだろう？&lt;br /&gt;って思って調べてみたら、ひがさんのブログに書いてあった。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/higayasuo/20070130/1170151552"&gt;http://d.hatena.ne.jp/higayasuo/20070130/1170151552&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ん～、さすがひがさんです。&lt;br /&gt;&lt;br /&gt;でも、Doltengで～Serviceって作成できるけど、↑の説明に出てこない。&lt;br /&gt;ん～、サービスクラスって何なんだろう？&lt;br /&gt;あと、ActioinとPageを分離できるけど、どんな時に分離するんだろう・・&lt;br /&gt;&lt;br /&gt;えーい！メーリングリストに質問しちゃえ！&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color:skyblue;"&gt;その後&lt;/div&gt;&lt;br /&gt;メーリングリストに質問したら、小林様が情報提供してくれた。&lt;br /&gt;その結果、各クラスの役割は以下のような感じにしてteedaを使ってみます。&lt;br /&gt;&lt;br /&gt;■Action → do～、initialize 等のメソッドを作る。プレゼンテーション層のロジック&lt;br /&gt;■Page → html id属性をプロパティとする JavaBeans&lt;br /&gt;■Dto → ～Items とかで使用するプレゼンテーション層のDto&lt;br /&gt;■Dxo → プレゼンテーション層とドメイン層のコンバータ&lt;br /&gt;■Logic → ビジネスロジック、ドメインロジック&lt;br /&gt;■Dao → テーブルと1対1になるデータアクセスオブジェクト&lt;br /&gt;■Entity → テーブルと1対1になるエンティティ&lt;br /&gt;&lt;br /&gt;これさえ決まれば、パッケージ構成も自然と決まるはず!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-5901585592546919459?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/5901585592546919459/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=5901585592546919459' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5901585592546919459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5901585592546919459'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/teeda.html' title='Teedaのパッケージ構成'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-469419481625095609</id><published>2008-07-17T16:49:00.006+09:00</published><updated>2008-07-18T09:25:13.944+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='トラブルシューティング'/><title type='text'>InnoDBが無効でもENGINE=InnoDBでテーブル作成できちゃう</title><content type='html'>InnoDBオプションが無効でもENGINE=InnoDBって指定している&lt;br /&gt;CREATE TABLE スクリプトが成功してしまいます。(汗&lt;br /&gt;&lt;br /&gt;参考にさせて頂いたURLは↓。&lt;br /&gt;&lt;a href="http://webdba.blogspot.com/2007/10/innodbgatypeinnodb_30.html"&gt;&lt;br /&gt;http://webdba.blogspot.com/2007/10/innodbgatypeinnodb_30.html&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;MySQLのバージョンが異なるせいか、設定ファイルの書き方が微妙に異なる&lt;br /&gt;ので注意して下さい。&lt;br /&gt;&lt;br /&gt;mysql&gt; create table hoge ( col1 varchar(4) ) type=innodb ;&lt;br /&gt;Query OK, 0 rows affected, 2 warnings (0.01 sec)&lt;br /&gt;&lt;br /&gt;ただし、よくみると警告が表示されている。&lt;br /&gt;Innodb を有効にして&lt;br /&gt;　alter table test type=innodb ;&lt;br /&gt;することでトランザクションが使えるようになる。&lt;br /&gt;&lt;br /&gt;my.conf を変更して有効にする（mysqlの再起動が必要)&lt;br /&gt;&lt;br /&gt;&lt;font color="green"&gt;&lt;br /&gt;#skip-innodb&lt;br /&gt;# Uncomment the following if you are using InnoDB tables&lt;br /&gt;innodb_data_home_dir = C:/xampp/mysql/data/&lt;br /&gt;innodb_data_file_path = ibdata1:10M:autoextend&lt;br /&gt;innodb_log_group_home_dir = C:/xampp/mysql/data/&lt;br /&gt;innodb_log_arch_dir = C:/xampp/mysql/data/&lt;br /&gt;# You can set .._buffer_pool_size up to 50 - 80 %&lt;br /&gt;# of RAM but beware of setting memory usage too high&lt;br /&gt;innodb_buffer_pool_size=16M&lt;br /&gt;innodb_additional_mem_pool_size=2M&lt;br /&gt;# Set .._log_file_size to 25 % of buffer pool size&lt;br /&gt;innodb_log_file_size=5M&lt;br /&gt;innodb_log_buffer_size=8M&lt;br /&gt;innodb_flush_log_at_trx_commit=1&lt;br /&gt;innodb_lock_wait_timeout=50&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="background-color:skyblue"&gt;その後の調査で・・・&lt;/div&gt;&lt;br /&gt;ソースからインストールしている場合、&lt;br /&gt;mysql停止→configureのオプションに--with-innodb→make→make install→mysql起動&lt;br /&gt;でinnodbエンジンが有効になりました。&lt;br /&gt;なんと、my.cnfの修正はいりません。しかもconfigure --helpで--with-innodb&lt;br /&gt;オプション出てこないし。。なんで？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-469419481625095609?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/469419481625095609/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=469419481625095609' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/469419481625095609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/469419481625095609'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/innodbengineinnodb.html' title='InnoDBが無効でもENGINE=InnoDBでテーブル作成できちゃう'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-6136375003039141672</id><published>2008-07-17T15:59:00.002+09:00</published><updated>2008-07-17T16:01:39.508+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>ArrayListを配列に変換する</title><content type='html'>いつも忘れちゃうからメモ。&lt;br /&gt;&lt;br /&gt;Integer[] integerArray = (Integer[])arrayList.toArray(new Integer[]{});&lt;br /&gt;&lt;br /&gt;なんで、toArrayっていい感じに配列に変換してくれないんだろ。&lt;br /&gt;toArrayの内部でnewしてくれりゃーいいのにな。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-6136375003039141672?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/6136375003039141672/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=6136375003039141672' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6136375003039141672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6136375003039141672'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/arraylist.html' title='ArrayListを配列に変換する'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-6150624318477704070</id><published>2008-07-16T17:57:00.003+09:00</published><updated>2008-07-16T18:04:45.453+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ツール'/><title type='text'>tiddlywiki</title><content type='html'>ToDoとかちょっとしたメモ書きってテキストで書いてましたが、&lt;br /&gt;そんな勢いで使えそうなツール発見。&lt;br /&gt;&lt;a href="http://www.tiddlywiki.org/wiki/TiddlyWiki"&gt;http://www.tiddlywiki.org/wiki/TiddlyWiki&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;プラグインのインストールにちょっと手こずったのでメモ。&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li/&gt;http://www.tiddlytools.com/を開く。&lt;br /&gt;&lt;li/&gt;画面左にある「DownLoad」リンクをクリック。&lt;br /&gt;&lt;li/&gt;ポップアップみたいのが表示されるので、その中の一番下のリンクをローカルにコピー&lt;br /&gt;     (名前を付けてリンク先を保存)&lt;br /&gt;&lt;li/&gt;tiddlywikiのempty.htmlを開く。&lt;br /&gt;&lt;li/&gt;一番上のimportをクリック。&lt;br /&gt;&lt;li/&gt;「参照」ボタンをクリックしてtiddlytoolsからダウンロードしたindex.htmlを選択する&lt;br /&gt;&lt;li/&gt;好きなプラグインにチェックしてimportする。&lt;br /&gt;&lt;li/&gt;リロードする。&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-6150624318477704070?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/6150624318477704070/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=6150624318477704070' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6150624318477704070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6150624318477704070'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/tiddlywiki.html' title='tiddlywiki'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-8527450648661727198</id><published>2008-07-15T17:33:00.002+09:00</published><updated>2008-07-15T17:36:29.294+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='シェル'/><title type='text'>シェルだけで排他する</title><content type='html'>なんちゃって排他ですが、&lt;br /&gt;&lt;br /&gt;LOCK_FILE=~/lockfile&lt;br /&gt;if [ -f "$LOCK_FILE" ];&lt;br /&gt;then&lt;br /&gt;&lt;br /&gt;    echo "exist lock file!"&lt;br /&gt;    exit&lt;br /&gt;&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;touch $LOCK_FILE&lt;br /&gt;&lt;br /&gt;# シェルの処理&lt;br /&gt;&lt;br /&gt;rm $LOCK_FILE&lt;br /&gt;&lt;br /&gt;バシバシ実行されるシェルだと排他できてないって話になりますが、1分に1回cronで実行されるシェル。なんかの場合上記のようなスクリプトで十分だと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-8527450648661727198?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/8527450648661727198/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=8527450648661727198' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/8527450648661727198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/8527450648661727198'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/blog-post_15.html' title='シェルだけで排他する'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-6558058839104618047</id><published>2008-07-15T17:20:00.003+09:00</published><updated>2008-07-15T17:32:24.560+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>mysqldumpで一行ずつのINSERT</title><content type='html'>mysqldump -c --order-by-primary --skip-extended-insert -u&amp;lt;username&amp;gt; -p&amp;lt;password&amp;gt; &amp;lt;dbname&amp;gt; &amp;lt;tablename&amp;gt; &gt; dump.sql&lt;br /&gt;&lt;br /&gt;こんな感じで、ダンプしたsqlが一行ずつのINSERTとして出力されます。&lt;br /&gt;BULK INSERTのが早いのは分りますが、1テーブル 1行ってダンプするのがデフォルトってどうなんでしょう？&lt;br /&gt;どっちかっていうと、BULK INSERTがオプションで、1row 1行でダンプするのがデフォルトのがいいと思います。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-6558058839104618047?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/6558058839104618047/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=6558058839104618047' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6558058839104618047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6558058839104618047'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/mysqldumpinsert.html' title='mysqldumpで一行ずつのINSERT'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-7314295190342744091</id><published>2008-07-10T12:13:00.003+09:00</published><updated>2008-07-10T12:19:08.973+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>InnoDBとMyISAMの検索性能検証</title><content type='html'>同じテーブル、同じデータでInnoDBとMyISAMの性能を比較してみました。&lt;br /&gt;&lt;br /&gt;id : INTEGER&lt;br /&gt;sdate : DATE&lt;br /&gt;edate : DATE&lt;br /&gt;yaverage_gap : TINYINT(3)&lt;br /&gt;tagerage_gap : TINYINT(3)&lt;br /&gt;sort_num : TINYINT(3)&lt;br /&gt;message : TEXT&lt;br /&gt;upd_timestamp : TIMESTAMP&lt;br /&gt;gender : TINYINT(3)&lt;br /&gt;&lt;br /&gt;ってテーブルに対して、それぞれのストレージエンジンでSELECT * FROM hoge を100万回実行して時間を計測。&lt;br /&gt;(データ件数は80件)&lt;br /&gt;&lt;br /&gt;【InnoDB】&lt;br /&gt;182265msec&lt;br /&gt;183344msec&lt;br /&gt;&lt;br /&gt;【MyISAM】&lt;br /&gt;164672msec&lt;br /&gt;169609msec&lt;br /&gt;&lt;br /&gt;予測通りMyISAMの方が早いですね。&lt;br /&gt;マスター系のテーブルはMyISAMの方がいいのかなぁ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-7314295190342744091?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/7314295190342744091/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=7314295190342744091' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/7314295190342744091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/7314295190342744091'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/innodbmyisam.html' title='InnoDBとMyISAMの検索性能検証'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-5629092218175458686</id><published>2008-07-10T12:02:00.001+09:00</published><updated>2008-07-10T12:04:35.335+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>MySQLのTIMESTAMP</title><content type='html'>Cannot convert value '0000-00-00 00:00:00' from column 8 to TIMESTAMP&lt;br /&gt;こんなエラーが発生。&lt;br /&gt;&lt;br /&gt;JDBCアダプターの動作がバージョンによって異なるらしく、接続文字列に&lt;br /&gt;&lt;br /&gt;&amp;amp;zeroDateTimeBehavior=convertToNul&lt;br /&gt;&lt;br /&gt;ってパラメータを追加して解決!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-5629092218175458686?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/5629092218175458686/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=5629092218175458686' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5629092218175458686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5629092218175458686'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/mysqltimestamp.html' title='MySQLのTIMESTAMP'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-7203974655980271637</id><published>2008-07-10T11:41:00.007+09:00</published><updated>2009-05-17T13:58:44.460+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>log4jの重複ログ出力</title><content type='html'>パッケージ毎の出力と&amp;lt;root&amp;gt;の出力で、ログが倍出力されてしまった・・・(汗&lt;br /&gt;でもグーグル先生に聞いたらあっさり解決。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="white-space:pre; line-height:13px;"&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;category name="org.apache" additivity="false"&amp;gt;&lt;br /&gt;    &amp;lt;priority value="DEBUG" /&amp;gt;&lt;br /&gt;    &amp;lt;appender-ref ref="CONSOLE" /&amp;gt;&lt;br /&gt;&amp;lt;/category&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;root&amp;gt;&lt;br /&gt;    &amp;lt;level value="INFO" /&amp;gt;&lt;br /&gt;    &amp;lt;appender-ref ref="CONSOLE" /&amp;gt;&lt;br /&gt;&amp;lt;/root&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;って感じで、additivity="false" とすると、上位のアペンダーを継承しないので、ログが重複して出力されなくなるそうです。&lt;br /&gt;でも、これってデフォルトでいい気がするなぁ。なんでデフォルトfalseじゃないんだろ。アペンダーだから？まぁいいや。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-7203974655980271637?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/7203974655980271637/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=7203974655980271637' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/7203974655980271637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/7203974655980271637'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/log4j.html' title='log4jの重複ログ出力'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-937334087791005787</id><published>2008-07-10T11:19:00.003+09:00</published><updated>2008-07-10T14:58:50.100+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>MySQLのチューニングについて調べる</title><content type='html'>MySQLのチューニングポイントについて調べてみた。&lt;br /&gt;検証してないけど、以下がポイントっぽい。&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;key_bufferのサイズ調整。インデックスをちゃんと使ってるなら有効。&lt;br /&gt;&lt;li&gt;InnoDBの場合、MyISAMにしてみる。(可能であれば)&lt;br /&gt;&lt;li&gt;更新系処理でオートコミットにしている場合、オートコミットを無効にする&lt;br /&gt;    更新処理が少ないと意味ないけど。&lt;br /&gt;&lt;li&gt;my.cnfの見直し。&lt;br /&gt;&lt;li&gt;BULK INSERT(呼び方違ってたらすいません)ができるなら使用する。&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;他にもいっぱいあるだろうけど、とりあえずこんだけメモっとこ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-937334087791005787?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/937334087791005787/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=937334087791005787' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/937334087791005787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/937334087791005787'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/mysql_10.html' title='MySQLのチューニングについて調べる'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-5246006234526608107</id><published>2008-07-09T12:54:00.036+09:00</published><updated>2008-07-10T11:39:11.667+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>MySQLのインストール</title><content type='html'>&lt;div style="BACKGROUND-COLOR:#E0FFFF; width:90%; margin:0px 0px 0px 30px; border: 1pt solid navy;"&gt;※以下の操作はMySQL実行ユーザで行って下さい。&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;mysql-5.1.25-rc-linux-x86_64-glibc23.tar.gz をダウンロードして、任意のディレクトリに配置して展開。&lt;br /&gt;&lt;br /&gt;&lt;li&gt;展開されたディレクトリmysql-5.1.25-rc-linux-x86_64-glibc23を好きなディレクトリ名称に変更する。&lt;br /&gt;&lt;br /&gt;&lt;li&gt;mysqlインストールディレクトリに移動して以下のコマンドを実行。&lt;br /&gt;./scripts/mysql_install_db --datadir=&amp;lt;data dir path&amp;gt&lt;br /&gt;cp &amp;lt;mysql install dir&amp;gt;/support-files/my-medium.cnf &amp;lt;mysqlinstalldir&amp;gt;/data/my.cnf&lt;br /&gt;※my.cnfの元となるファイルはhuge、large等もあるので適宜修正して下さい。&lt;br /&gt;&lt;br /&gt;&lt;li&gt;mysql ディレクティブの修正&lt;br /&gt;vi &amp;lt;mysql install dir&amp;gt;/data/my.cnf&lt;br /&gt;[mysqld]&lt;br /&gt;user = mysql&lt;br /&gt;basedir = &amp;lt;mysql install dir&amp;gt;&lt;br /&gt;datadir = &amp;lt;mysql install dir&amp;gt;/data&lt;br /&gt;port = 3306&lt;br /&gt;default-character-set=utf8&lt;br /&gt;&lt;br /&gt;[mysql.server]&lt;br /&gt;default-character-set=utf8&lt;br /&gt;&lt;br /&gt;[safe_mysqld]&lt;br /&gt;default-character-set=utf8&lt;br /&gt;&lt;br /&gt;[client]&lt;br /&gt;default-character-set=utf8&lt;br /&gt;&lt;br /&gt;&lt;li&gt;設定が完了したので、MySQLを以下のコマンドで起動してみます。&lt;br /&gt;./bin/mysqld_safe --defaults-file=&amp;lt;mysql install dir&gt;/data/my.cnf &amp;gt;&amp;gt; &amp;lt;mysql install dir&amp;gt;/data/mysqld_safe.log 2&amp;gt;&amp;1 &amp;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;起動ができたら、ユーザの作成。&lt;br /&gt;&amp;lt;mysql install dir&amp;gt;/bin/mysql --user=root&lt;br /&gt;&lt;br /&gt;mysql&gt; TRUNCATE TABLE mysql.user;&lt;br /&gt;mysql&gt; FLUSH PRIVILEGES;&lt;br /&gt;mysql&gt; GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'パスワード' WITH GRANT OPTION;&lt;br /&gt;mysql&gt; CREATE DATABASE hoge DEFAULT CHARACTER SET utf8;&lt;br /&gt;mysql&gt; GRANT ALL PRIVILEGES ON hoge.* TO hogeuser IDENTIFIED BY 'パスワード';&lt;br /&gt;&lt;br /&gt;&lt;li&gt;最後にMySQLの停止です。&lt;br /&gt;/usr/mysql/bin/mysqladmin shutdown --user=root --password=パスワード&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-5246006234526608107?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/5246006234526608107/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=5246006234526608107' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5246006234526608107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/5246006234526608107'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/mysql.html' title='MySQLのインストール'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-9148651716599238834</id><published>2008-07-08T09:41:00.004+09:00</published><updated>2009-05-28T23:03:25.945+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='シェル'/><title type='text'>シェルでプロパティファイルの値を取得する</title><content type='html'>シェルとjavaの両方でDBに接続する必要が出てきた。&lt;br /&gt;場合(環境？)によってはシェルとjavaでの接続定義は別ファイルで設定してもいいと思う。&lt;br /&gt;でも、今回はシェルでjavaで使ってるプロパティファイルの値を取得してみた。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;getProp()&lt;br /&gt;{&lt;br /&gt;    PROP_FILE_PATH=$1&lt;br /&gt;    KEY=$2&lt;br /&gt;&lt;br /&gt;    # キーとプロパティファイルは必須&lt;br /&gt;    if [ -z "$KEY" -o -z "$PROP_FILE_PATH" ];&lt;br /&gt;    then&lt;br /&gt;&lt;br /&gt;        exit -1&lt;br /&gt;&lt;br /&gt;    fi&lt;br /&gt;&lt;br /&gt;    # 指定されたキーに対応するデータを取得&lt;br /&gt;    # 最後の改行は削除&lt;br /&gt;    KEY_VALUE=`grep $PROP_FILE_PATH $KEY | awk 'BEGIN { FS="="} {print $2}' | tr -d '\015\032'`&lt;br /&gt;&lt;br /&gt;    echo $KEY_VALUE&lt;br /&gt;    exit 0&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;'\015\032' ってのは改行コードの削除。&lt;br /&gt;環境に合わせて適宜修正する必要がある。&lt;br /&gt;こんなんでいいのかなぁ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-9148651716599238834?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/9148651716599238834/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=9148651716599238834' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/9148651716599238834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/9148651716599238834'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/blog-post_08.html' title='シェルでプロパティファイルの値を取得する'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-4042767525886031554</id><published>2008-07-08T09:33:00.004+09:00</published><updated>2009-05-28T23:03:44.931+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='シェル'/><title type='text'>シェルでクラスパスのjarファイルを収集</title><content type='html'>シェルであるjavaを実行する際、classpathにjarをずらずら書かなければいけません。&lt;br /&gt;いちいち書くのは面倒なので、以下のような感じでclasspathに指定するjarファイル&lt;br /&gt;の文字列を生成。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;getJarList()&lt;br /&gt;{&lt;br /&gt;    BASE_DIR_PATH=$1&lt;br /&gt;&lt;br /&gt;    if [ -z "$BASE_DIR_PATH" ];&lt;br /&gt;    then&lt;br /&gt;&lt;br /&gt;        exit -1&lt;br /&gt;&lt;br /&gt;    fi&lt;br /&gt;&lt;br /&gt;    JARLIST=""&lt;br /&gt;    for f in `find $BASE_DIR_PATH -name "*.jar" -print`&lt;br /&gt;    do&lt;br /&gt;        JARLIST="$JARLIST$f:";&lt;br /&gt;    done&lt;br /&gt;&lt;br /&gt;    echo $JARLIST&lt;br /&gt;    exit 0&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;ちなみ、外部ファイルの関数を呼び出すようにするには&lt;br /&gt;&lt;br /&gt;. 外部ファイルのパス&lt;br /&gt;&lt;br /&gt;とすれば、getJarList が呼び出せます。&lt;br /&gt;&lt;br /&gt;シェル関数名ってアンスコとかで区切る方が一般的なんですかね？&lt;br /&gt;まぁいいや。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-4042767525886031554?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/4042767525886031554/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=4042767525886031554' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4042767525886031554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4042767525886031554'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/jar.html' title='シェルでクラスパスのjarファイルを収集'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-4264680176322029970</id><published>2008-07-07T16:17:00.001+09:00</published><updated>2008-07-07T16:20:19.145+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>サーブレットで画像をいじる場合の注意点</title><content type='html'>サーブレットで画像を生成したりする場合、&lt;br /&gt;&lt;br /&gt;export CATALINA_OPTS="-server -Xmx256M -Xms128M -Xss256k -Djava.awt.headless=true"&lt;br /&gt;&lt;br /&gt;ってな感じで「-Djava.awt.headless=true」が必要です。&lt;br /&gt;(-server とか -Xmx とかは必要ないです。環境に合わせて適宜修正するか削除して下さい)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-4264680176322029970?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/4264680176322029970/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=4264680176322029970' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4264680176322029970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/4264680176322029970'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/07/blog-post.html' title='サーブレットで画像をいじる場合の注意点'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-2204861785597048564</id><published>2008-06-27T10:37:00.010+09:00</published><updated>2009-05-28T23:04:14.837+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>コネクションプーリング</title><content type='html'>コネクションプーリングのクラスを自作してみました。&lt;br /&gt;Tomcatとか使えばこんなの自作する必要ないんですけどね。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;br /&gt;import java.sql.Connection;&lt;br /&gt;import java.sql.ResultSet;&lt;br /&gt;import java.sql.SQLException;&lt;br /&gt;import java.sql.Statement;&lt;br /&gt;&lt;br /&gt;import org.apache.commons.dbcp.ConnectionFactory;&lt;br /&gt;import org.apache.commons.dbcp.DriverManagerConnectionFactory;&lt;br /&gt;import org.apache.commons.dbcp.PoolableConnectionFactory;&lt;br /&gt;import org.apache.commons.dbcp.PoolingDataSource;&lt;br /&gt;import org.apache.commons.pool.impl.GenericObjectPool;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * DBとのコネクション管理を提供するクラスです&lt;br /&gt; */&lt;br /&gt;public class DataSourceMng {&lt;br /&gt;&lt;br /&gt;    /** データソース */&lt;br /&gt;    private static PoolingDataSource mySqlDataSource = null;&lt;br /&gt;&lt;br /&gt;    /** インスタンス */&lt;br /&gt;    private static DataSourceMng instance = null;&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * 初期化&amp;lt;br&amp;gt;&lt;br /&gt;     * データベースとのプーリングを開始します&lt;br /&gt;     */&lt;br /&gt;    private static synchronized void init() {&lt;br /&gt;&lt;br /&gt;        if (instance == null) {&lt;br /&gt;&lt;br /&gt;            instance = new DataSourceMng();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * DBとのコネクションを取得します&lt;br /&gt;     * &lt;br /&gt;     * @return Connection&lt;br /&gt;     */&lt;br /&gt;    public static synchronized Connection getConnection() {&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;&lt;br /&gt;            if (instance == null) {&lt;br /&gt;&lt;br /&gt;                init();&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            return mySqlDataSource.getConnection();&lt;br /&gt;&lt;br /&gt;        } catch (SQLException e) {&lt;br /&gt;&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;            throw new RuntimeException(e);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * ResultSetのclose&lt;br /&gt;     * &lt;br /&gt;     * @param rs&lt;br /&gt;     *          ResultSet&lt;br /&gt;     */&lt;br /&gt;    public static void close(ResultSet rs) {&lt;br /&gt;&lt;br /&gt;        if (rs != null) {&lt;br /&gt;&lt;br /&gt;            try {&lt;br /&gt;&lt;br /&gt;                rs.close();&lt;br /&gt;&lt;br /&gt;            } catch (SQLException e) {&lt;br /&gt;&lt;br /&gt;                e.printStackTrace();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Statementのclose&lt;br /&gt;     * &lt;br /&gt;     * @param st&lt;br /&gt;     *          Statement&lt;br /&gt;     */&lt;br /&gt;    public static void close(Statement st) {&lt;br /&gt;&lt;br /&gt;        if (st != null) {&lt;br /&gt;&lt;br /&gt;            try {&lt;br /&gt;&lt;br /&gt;                st.close();&lt;br /&gt;&lt;br /&gt;            } catch (SQLException e) {&lt;br /&gt;&lt;br /&gt;                e.printStackTrace();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * Connectionのclose&lt;br /&gt;     * &lt;br /&gt;     * @param con&lt;br /&gt;     *          Connection&lt;br /&gt;     */&lt;br /&gt;    public static void close(Connection con) {&lt;br /&gt;&lt;br /&gt;        if (con != null) {&lt;br /&gt;&lt;br /&gt;            try {&lt;br /&gt;&lt;br /&gt;                con.close();&lt;br /&gt;&lt;br /&gt;            } catch (SQLException e) {&lt;br /&gt;&lt;br /&gt;                e.printStackTrace();&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    /**&lt;br /&gt;     * 各種リソースのclose&lt;br /&gt;     * &lt;br /&gt;     * @param rs&lt;br /&gt;     *          ResultSet&lt;br /&gt;     * @param statement&lt;br /&gt;     *          Statement&lt;br /&gt;     * @param connection&lt;br /&gt;     *          Connection&lt;br /&gt;     */&lt;br /&gt;    public static void close(&lt;br /&gt;        ResultSet rs, Statement statement, Connection connection) {&lt;br /&gt;&lt;br /&gt;        close(rs);&lt;br /&gt;        close(statement);&lt;br /&gt;        close(connection);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * データベースとのコネクションプーリングを生成します&lt;br /&gt;     */&lt;br /&gt;    private DataSourceMng() {&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;&lt;br /&gt;            Class.forName("com.mysql.jdbc.Driver");&lt;br /&gt;            GenericObjectPool pool = new GenericObjectPool();&lt;br /&gt;            /* ここは環境に合わせて適宜修正&lt;br /&gt;            pool.setMaxActive(100);&lt;br /&gt;            pool.setMinIdle(10);&lt;br /&gt;            pool.setMaxWait(10);&lt;br /&gt;            */&lt;br /&gt;&lt;br /&gt;            ConnectionFactory conFactory =&lt;br /&gt;                new DriverManagerConnectionFactory(&lt;br /&gt;                    "url", "db_user_name", "db_user_password");&lt;br /&gt;            new PoolableConnectionFactory(&lt;br /&gt;                conFactory, pool, null, null, false, true);&lt;br /&gt;            mySqlDataSource = new PoolingDataSource(pool);&lt;br /&gt;&lt;br /&gt;        } catch (Throwable t) {&lt;br /&gt;&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-2204861785597048564?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/2204861785597048564/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=2204861785597048564' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2204861785597048564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/2204861785597048564'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/06/blog-post_27.html' title='コネクションプーリング'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-6393106406534852203</id><published>2008-06-26T10:14:00.002+09:00</published><updated>2008-06-26T10:18:24.415+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>log4jの設定ファイルを切り替える</title><content type='html'>複数のバッチを作る場合にバッチ毎にログ出力設定を行いたい。&lt;br /&gt;なんて時に有効かと思います。&lt;br /&gt;方法は簡単です。&lt;br /&gt;&lt;br /&gt;java -Dlog4j.configuration=log4j_xxx.xml&lt;br /&gt;&lt;br /&gt;って感じでVMの引数に設定するだけです。&lt;br /&gt;クラスパスが通ってるディレクトリに設定ファイルが配置できない場合、&lt;br /&gt;&lt;br /&gt;java -Dlog4j.configuration=file:///c:/log4j_xxx.xml&lt;br /&gt;&lt;br /&gt;という感じに「file:///」で絶対パス指定でも可能です。&lt;br /&gt;あんまり利用シーンはないのかもしれませんが、いざと言う時に便利かも。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-6393106406534852203?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/6393106406534852203/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=6393106406534852203' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6393106406534852203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6393106406534852203'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/06/log4j.html' title='log4jの設定ファイルを切り替える'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-8401674830312613185</id><published>2008-06-25T21:18:00.002+09:00</published><updated>2008-06-25T21:21:23.675+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ツール'/><title type='text'>DB管理ツール</title><content type='html'>&lt;a href="http://www.hi-ho.ne.jp/tsumiki/"&gt;つみきWebさん CSE&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;フリーウェアとは思えない程便利です。&lt;br /&gt;データの型によってはデータが表示できない、なんてこともありましたが、&lt;br /&gt;かなり使わせて頂いています。&lt;br /&gt;&lt;br /&gt;でも、pgAdminとかmySqlAdministrator専用の管理ツールがあればそちらがお勧め。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-8401674830312613185?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/8401674830312613185/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=8401674830312613185' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/8401674830312613185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/8401674830312613185'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/06/db.html' title='DB管理ツール'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-6103594028304722850</id><published>2008-06-25T21:14:00.001+09:00</published><updated>2008-06-25T21:17:09.349+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ツール'/><title type='text'>削除できないファイルを無理やり削除</title><content type='html'>&lt;a href="http://cowscorpion.com/file/Unlocker.html"&gt;unlocker&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ファイルをにぎっている実行ファイルを表示してくれたり、&lt;br /&gt;ロック解除ってやれば削除できたりします。&lt;br /&gt;出番は少ないですが、結構便利！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-6103594028304722850?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/6103594028304722850/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=6103594028304722850' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6103594028304722850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/6103594028304722850'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/06/blog-post_1850.html' title='削除できないファイルを無理やり削除'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2082063918226001433.post-65972260878833314</id><published>2008-06-25T21:05:00.002+09:00</published><updated>2008-06-25T21:10:27.066+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAVA'/><title type='text'>処理時間の計測</title><content type='html'>commonsにStopWatchがあったから使ってみた。&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;public static void main(String[] args) throws InterruptedException {&lt;br /&gt;&lt;br /&gt;    org.apache.commons.lang.time.StopWatch sw = new StopWatch();&lt;br /&gt;    sw.start();&lt;br /&gt;&lt;br /&gt;    Thread.sleep(20);&lt;br /&gt;&lt;br /&gt;    sw.stop();&lt;br /&gt;    System.out.println(sw.toString());&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;実行したところ・・・&lt;br /&gt;0:00:00.031&lt;br /&gt;って表示された。&lt;br /&gt;ん～20ミリ秒しかスリープしてないのになんで31ミリ秒ってなっちゃうわけ？&lt;br /&gt;ミリ秒単位で表示されるけど、ミリ秒単位の計測は正確にできなそう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2082063918226001433-65972260878833314?l=ymotoba.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ymotoba.blogspot.com/feeds/65972260878833314/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2082063918226001433&amp;postID=65972260878833314' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/65972260878833314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2082063918226001433/posts/default/65972260878833314'/><link rel='alternate' type='text/html' href='http://ymotoba.blogspot.com/2008/06/blog-post_25.html' title='処理時間の計測'/><author><name>ymotoba</name><uri>http://www.blogger.com/profile/00055755775698733117</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
