<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10japanesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0IGRXY_fCp7ImA9WhRaFE4.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757</id><updated>2012-02-17T08:38:44.844+09:00</updated><category term="codeigniter" /><category term="android" /><category term="gttodo" /><category term="book" /><category term="erlang" /><category term="joomla" /><category term="php" /><category term="amazon" /><category term="gentoo" /><category term="security" /><category term="google" /><category term="misc" /><title>少年よ大志を抱け</title><subtitle type="html">Webに置いておくもの - &lt;b&gt;休止中&lt;/b&gt;</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://bba-ltom.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>46</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/jp/bba-ltom" /><feedburner:info uri="jp/bba-ltom" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><meta xmlns="http://pipes.yahoo.com" name="pipes" content="noprocess" /><entry gd:etag="W/&quot;AkIMQX07fSp7ImA9WhZbEE4.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-5595007781431144760</id><published>2011-06-14T16:59:00.001+09:00</published><updated>2011-06-14T17:03:00.305+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-14T17:03:00.305+09:00</app:edited><title>ブログ更新休止</title><content type="html">2年近くまともに更新していないところに休止もなにもないけど、今後ですら技術系知見を&lt;br /&gt;
&lt;div&gt;
深めていけなさそうなので、いったんこのブログは「休止」とします。&lt;br /&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
といいつつ、&lt;a href="https://profiles.google.com/junji.shiokawa/buzz"&gt;buzz&lt;/a&gt;や&lt;a href="http://twitter.com/howking"&gt;twitter&lt;/a&gt;と棲み分けたとりとめのない&lt;a href="http://howking.blogspot.com/"&gt;近況ブログ&lt;/a&gt;をはじめる、かもしれな&lt;/div&gt;
&lt;div&gt;
い。。。&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-5595007781431144760?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=O0mcSqmWAEc:663Bg5v3Qbs:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=O0mcSqmWAEc:663Bg5v3Qbs:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=O0mcSqmWAEc:663Bg5v3Qbs:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=O0mcSqmWAEc:663Bg5v3Qbs:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/O0mcSqmWAEc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/5595007781431144760/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=5595007781431144760" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/5595007781431144760?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/5595007781431144760?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/O0mcSqmWAEc/blog-post.html" title="ブログ更新休止" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2011/06/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUENRH09eip7ImA9Wx9VGU0.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-8137669454604370363</id><published>2011-02-05T21:08:00.001+09:00</published><updated>2011-02-05T21:08:15.362+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-05T21:08:15.362+09:00</app:edited><title>Androidからの更新テスト</title><content type="html">&lt;div&gt;&lt;p&gt;1&amp;#24180;&amp;#20197;&amp;#19978;&amp;#12406;&amp;#12426;&amp;#12398;&amp;#26356;&amp;#26032;&amp;#12399;&amp;#20181;&amp;#20107;&amp;#12418;&amp;#12379;&amp;#12378;&amp;#12289;&amp;#26053;&amp;#34892;&amp;#20808;&amp;#12398;&amp;#12452;&amp;#12531;&amp;#12489;&amp;#12363;&amp;#12425;&amp;#12398;&amp;#12456;&amp;#12531;&amp;#12488;&amp;#12522;&amp;#12540;&amp;#12290;&lt;br&gt;
&amp;#12377;&amp;#12387;&amp;#12363;&amp;#12426;buzz&amp;#12391;&amp;#12375;&amp;#12363;&amp;#36817;&amp;#27841;&amp;#12434;&amp;#12388;&amp;#12389;&amp;#12387;&amp;#12390;&amp;#12394;&amp;#12356;&amp;#12369;&amp;#12393;&amp;#12289;&amp;#12371;&amp;#12398;blogger&amp;#20844;&amp;#24335;&amp;#12450;&amp;#12503;&amp;#12522;&amp;#12418;&amp;#12394;&amp;#12363;&amp;#12394;&amp;#12363;&amp;#20351;&amp;#12356;&amp;#12420;&amp;#12377;&amp;#12381;&amp;#12358;&amp;#12394;&amp;#12398;&amp;#12391;&amp;#12364;&amp;#12435;&amp;#12400;&amp;#12387;&amp;#12390;&amp;#26356;&amp;#26032;&amp;#12375;&amp;#12390;&amp;#12415;&amp;#12424;&amp;#12358;&amp;#12290;&lt;/p&gt;
&lt;br/&gt;&lt;img src='http://lh5.ggpht.com/_p-4rp2Mdkx4/TU09rGQ3WDI/AAAAAAAAgBs/IYfC5WfdHVI/C360_2011-02-05%2012-27-04.png' /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-8137669454604370363?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=o7aOxpuzbKI:lgAl06HWXco:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=o7aOxpuzbKI:lgAl06HWXco:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=o7aOxpuzbKI:lgAl06HWXco:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=o7aOxpuzbKI:lgAl06HWXco:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/o7aOxpuzbKI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/8137669454604370363/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=8137669454604370363" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/8137669454604370363?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/8137669454604370363?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/o7aOxpuzbKI/android.html" title="Androidからの更新テスト" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_p-4rp2Mdkx4/TU09rGQ3WDI/AAAAAAAAgBs/IYfC5WfdHVI/s72-c/C360_2011-02-05%2012-27-04.png" height="72" width="72" /><thr:total>0</thr:total><georss:featurename>Aman Resorts, Golf Links, Lodhi Colony, New Delhi, Delhi (state), India</georss:featurename><georss:point>28.59166 77.238626</georss:point><feedburner:origLink>http://bba-ltom.blogspot.com/2011/02/android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEHSXc9eSp7ImA9WxBQF0w.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-2722515400534409734</id><published>2010-01-16T19:43:00.002+09:00</published><updated>2010-01-17T16:50:38.961+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-17T16:50:38.961+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Nexus Oneがやってきた</title><content type="html">いわゆるGoogle Phone(&lt;a href="http://www.nttdocomo.co.jp/product/foma/pro/ht03a/"&gt;HT-03A&lt;/a&gt;)を使ってたけど、&lt;a href="http://www.google.com/phone"&gt;Nexus One&lt;/a&gt;よさげだなぁとぼやいていたらNYにいる方が&lt;a href="http://twitter.com/kensuke_sato/status/7462606311"&gt;送ってくれる&lt;/a&gt;かもしれないとのこと!&lt;br /&gt;
日本でちゃんと使えるかどうかわからないし、今年早々には&lt;a href="http://www.itmedia.co.jp/news/articles/0911/10/news095.html"&gt;ソニエリ&lt;/a&gt;だの&lt;a href="http://k-tai.impress.co.jp/docs/news/20091117_329492.html"&gt;SHARP&lt;/a&gt;だのが出すのだろうけど、海外からの嬉しいメッセージにノリで反応してみたらこれが大正解!(ちなみに$529+NY州税&lt;span style="font-family: arial, sans-serif; white-space: nowrap;"&gt;$46.95+送料速いやつで$40ぐらいらしい)&lt;span style="font-family: 'MS PGothic'; white-space: normal;"&gt;。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/_p-4rp2Mdkx4/S1GGbzQsItI/AAAAAAAAZPk/RfW1oZP2cVs/s1600-h/n1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_p-4rp2Mdkx4/S1GGbzQsItI/AAAAAAAAZPk/RfW1oZP2cVs/s320/n1.jpg" width="192" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;br /&gt;
仕事で死んでるので軽いレビューとしては下記の通り。&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;HT-03Aと比べると速度が&lt;a href="http://komugi.net/archives/2010/01/201001130831.php"&gt;別次元に近く速い&lt;/a&gt;。ホームに戻る時に固まった感じになることが多かったのが、まるでなくなって相当快適。&lt;/li&gt;
&lt;li&gt;巷では&lt;a href="http://soundsgood.cocolog-nifty.com/blog/2010/01/nexus-one-f9a7.html"&gt;片手で使えない？&lt;/a&gt;らしいのだけど、普通に片手で使ってる。&lt;/li&gt;
&lt;li&gt;箱から出してDoCoMoのSIMを指して起動 → ロケールを見てるんだかで日本語が表示される。&lt;/li&gt;
&lt;li&gt;APNの設定をmopera.net(open.mopera.net)に設定(ビズホ契約が必要かも) → 3Gで繋がります(mpr.bizho.net、mpr2.bizho.netはダメでした)&lt;/li&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://ja.wikipedia.org/wiki/%E3%83%91%E3%82%B1%E6%AD%BB"&gt;パケ死&lt;/a&gt;するかどうかは引き続きチェック中だけど、&lt;a href="http://twitter.com/howking/status/7821017653"&gt;大丈夫&lt;/a&gt;みたい。&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;(続報)翌日、再チェック。増えてない。大丈夫、大丈夫、、、&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/_p-4rp2Mdkx4/S1LAnXXfeRI/AAAAAAAAZQ4/qMimBn3f8dE/s1600-h/WS000000.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="110" src="http://2.bp.blogspot.com/_p-4rp2Mdkx4/S1LAnXXfeRI/AAAAAAAAZQ4/qMimBn3f8dE/s400/WS000000.JPG" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
↓&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/_p-4rp2Mdkx4/S1LA0mCr_fI/AAAAAAAAZRA/h7PfgCHdheU/s1600-h/WS000001.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="111" src="http://1.bp.blogspot.com/_p-4rp2Mdkx4/S1LA0mCr_fI/AAAAAAAAZRA/h7PfgCHdheU/s400/WS000001.JPG" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.junefabrics.com/palmnet/index.php"&gt;PdaNet&lt;/a&gt;でBluetooth経由でのインターネット接続ができる!&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;li&gt;Bluetooth Keyboard(&lt;a href="http://www.reudo.co.jp/rboardk/rbk-2000bt2.html"&gt;RBK-2100BTJ&lt;/a&gt;)はやっぱり繋がらず、、、&lt;a href="http://jp.androlib.com/android.application.com-mymobilegear-pjqz.aspx"&gt;KeyPro&lt;/a&gt;も入れてみたけど使い方がよくわからず断念。。。&lt;a href="http://twitter.com/howking/status/4067918795"&gt;前やったみたい&lt;/a&gt;にrootとればいけるとは思うけど、また暇だったらいじってみる。&lt;/li&gt;
&lt;li&gt;地味に便利になったこと&lt;/li&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;連絡帳の検索は前方一致のみだったけど、部分一致になった。&lt;/li&gt;
&lt;li&gt;「実行中のサービス」というアプリから使用メモリの確認や終了ができるようになった。&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.quickoffice.com/"&gt;Quickoffice&lt;/a&gt;がバンドルされていてオフィス文書とかPDFが普通に見れる。&lt;/li&gt;
&lt;li&gt;ステレオミニジャックが上についている、ということは充電しなが音楽が聞ける(HT-03Aはそれができなかった)。&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;li&gt;まだ不満なこと&lt;/li&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;GMailの文章からコピーができない、電話番号とか書かれていると悶絶する。&lt;/li&gt;
&lt;li&gt;正直ホームとかバックボタンはHT-03Aのハードウェアボタンのほうが使いやすい。&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/ul&gt;
&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-2722515400534409734?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=XK7iTU73fW4:lzUK0yMgSUA:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=XK7iTU73fW4:lzUK0yMgSUA:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=XK7iTU73fW4:lzUK0yMgSUA:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=XK7iTU73fW4:lzUK0yMgSUA:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/XK7iTU73fW4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/2722515400534409734/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=2722515400534409734" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/2722515400534409734?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/2722515400534409734?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/XK7iTU73fW4/nexus-one.html" title="Nexus Oneがやってきた" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_p-4rp2Mdkx4/S1GGbzQsItI/AAAAAAAAZPk/RfW1oZP2cVs/s72-c/n1.jpg" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2010/01/nexus-one.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8GRXo_fSp7ImA9WxNaEkw.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-2643287493794977363</id><published>2009-11-26T15:27:00.000+09:00</published><updated>2009-11-26T15:27:04.445+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-26T15:27:04.445+09:00</app:edited><title>【宣伝】マネージドサービスFORTS+Plusの裏側を聞いてみた</title><content type="html">&lt;a href="http://draft.blogger.com/"&gt;&lt;/a&gt;&lt;span id="goog_1259209393240"&gt;&lt;/span&gt;&lt;span id="goog_1259209393241"&gt;&lt;/span&gt;その昔、&lt;a href="http://www.intel.co.jp/jp/intel/pr/press2000/000629b.htm"&gt;インテル オンライン サービス&lt;/a&gt;という当時としてはものすごく豪華絢爛なサービスにいたく感激。自分たちも、求められているのは単なるサーバの箱貸しではなく、人と人とで信頼してまかせてもらえるサーバインフラなのかもしれない、と思いたった&lt;a href="http://web.archive.org/web/20031210234802/http://forts.jp/index.html"&gt;2003年&lt;/a&gt;のはじめ頃。&lt;a href="http://forts.jp/"&gt;FORTS&lt;/a&gt;というサービス名でフルマネッジド・ホスティングサービスを立ち上げてから、はや6年。大幅にパワーアップさせたらしい「FORTS +Plus」について詳細を聞いてみた。&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;
Q. プラス(+Plus) ってついてるけど、今までと何が変ったの？&lt;/blockquote&gt;
&lt;blockquote&gt;
A.&amp;nbsp;[担当I]&amp;nbsp;基本的なサービス構成に変更は&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;ありません&lt;/span&gt;ねー。&lt;/blockquote&gt;
&lt;br /&gt;
&lt;blockquote&gt;
Q. え、、じゃあこの不況下だからって値段&lt;a href="http://forts.jp/campaign/"&gt;&lt;span style="color: black;"&gt;下げた&lt;/span&gt;&lt;/a&gt;だけ？&lt;/blockquote&gt;
&lt;blockquote&gt;
A. [担当K] 確かに、そう思わても&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;しょうがないか&lt;/span&gt;も。&lt;/blockquote&gt;
&lt;br /&gt;
&lt;blockquote&gt;
Q. おいおい、せっかく&lt;a href="http://www.atpress.ne.jp/view/12938"&gt;&lt;span style="color: black;"&gt;プレスリリース&lt;/span&gt;&lt;/a&gt;出したんでしょ。。。なにか説明しようよ、、、&lt;/blockquote&gt;
&lt;blockquote&gt;
A. [担当I] うーん、でも&amp;nbsp;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;新サービス用に上位回線を増強したり、ルータからラックからまったく別の見直しをしてセキュアな構成を実現した&lt;/span&gt;&amp;nbsp;と言ってもそれが売りになるわけでもなく。。。&lt;/blockquote&gt;
&lt;blockquote&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;[担当K] 実際 &lt;span class="Apple-style-span" style="font-size: x-large;"&gt;リモートでコンソールを覗いたり、ネットワークブートできるようにしてる&lt;/span&gt; からどうだって感じですしね。&lt;/blockquote&gt;
&lt;br /&gt;
&lt;blockquote&gt;
Q. まーそりゃお客さんにとっちゃどーでもいい話なのかもだけどさ、、、&lt;/blockquote&gt;
&lt;blockquote&gt;
A. [担当K] あー前からちょっと違うのは&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;ステージングサーバを仮想化&lt;/span&gt;させましたよ。&lt;/blockquote&gt;
&lt;blockquote&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;a href="http://xen.org/"&gt;&lt;span style="color: black;"&gt;Xen&lt;/span&gt;&lt;/a&gt;を使って共有サーバだろうが、専有サーバだろうが、コンテンツ毎に提供されるので、だいぶと使いやすくなっているはずです。&lt;/blockquote&gt;
&lt;br /&gt;
&lt;blockquote&gt;
Q. おーそうそう、そういうの大事。世の中で&lt;a href="http://www.msp-sp.net/main_msp/msp_what/index.html"&gt;&lt;span style="color: black;"&gt;MSP&lt;/span&gt;&lt;/a&gt;を&lt;a href="http://www.msp-sp.net/main_msp/msp_data/index.html#Anchor-27579"&gt;&lt;span style="color: black;"&gt;名乗る企業&lt;/span&gt;&lt;/a&gt;はいっぱいあるけど結局Webにおける制作や開発は開発用サーバがないと話にならないし、そこを含めてパッケージして、、、&lt;/blockquote&gt;
&lt;blockquote&gt;
A.&amp;nbsp;[担当I]&amp;nbsp;まぁでも&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;前からやってます&lt;/span&gt;しね、、、セキュリティや利便性の度合はだいぶと上がりましたけど。それに結局規模が大きくなるとサーバを20台とか並べてどん、みたいな案件になってしまいますし、、、&lt;/blockquote&gt;
&lt;br /&gt;
&lt;blockquote&gt;
Q. だよね、、、うーむ、やっぱりわかりにくい、、、が、まーよりキャンペーン展開やECを載せる環境としては充実しましたよーってことで。&lt;/blockquote&gt;
&lt;blockquote&gt;
A.&amp;nbsp;[担当I] ですね。あまり目玉とか売り、とかよりもマネージドを昔からやってきた老舗として正常に進化してきましたってのをお客様にちゃんとご説明していきたいです。&lt;/blockquote&gt;
&lt;br /&gt;
はい。IさんKさん、ありがとうございました。&lt;br /&gt;
また、かなり役員からいろんな部署の人達が走りまわって仕上げていたとのことで、おつかれさまです!&lt;br /&gt;
というまったくのネタぽい内容のみで申し訳ございませんが、皆様どうかよろしくお願い致します! m(__)mペコ&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-2643287493794977363?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=5EgRRscAEVA:CdTOzxBA9Z0:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=5EgRRscAEVA:CdTOzxBA9Z0:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=5EgRRscAEVA:CdTOzxBA9Z0:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=5EgRRscAEVA:CdTOzxBA9Z0:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/5EgRRscAEVA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/2643287493794977363/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=2643287493794977363" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/2643287493794977363?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/2643287493794977363?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/5EgRRscAEVA/fortsplus.html" title="【宣伝】マネージドサービスFORTS+Plusの裏側を聞いてみた" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2009/11/fortsplus.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcDQ30_fyp7ImA9WxNRFkQ.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-2728709807228996893</id><published>2009-09-11T23:02:00.004+09:00</published><updated>2009-09-12T04:24:32.347+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-12T04:24:32.347+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="misc" /><title>最強ランチャ 「ファイル名を指定して実行」</title><content type="html">(bloggerが「続きを読む」に対応したぽいので、細いネタをアップしてみる)&lt;br&gt;
スタートメニューの「ファイル名を指定して実行」をランチャとして使っている人は、、、時々&lt;a href="http://www.google.co.jp/search?q=%E3%83%A9%E3%83%B3%E3%83%81%E3%83%A3%E3%83%BC+%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%97%E3%81%A6%E5%AE%9F%E8%A1%8C"&gt;いる&lt;/a&gt;らしい。&lt;br&gt;
calcとかnotepadとか一発で起動するものは&lt;a href="http://it.kndb.jp/entry/show/id/146"&gt;こちら&lt;/a&gt;とか&lt;a href="http://www1.u-netsurf.ne.jp/~tomo_c/tips/Win003.html"&gt;こちら&lt;/a&gt;が詳しいけど、個人的に便利に使っている方法は、、、&lt;br&gt;
&lt;a href="http://bba-ltom.blogspot.com/2009/09/blog-post.html#more"&gt;Read more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-2728709807228996893?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=5t0IJassuLI:2Wv6zgEwJR4:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=5t0IJassuLI:2Wv6zgEwJR4:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=5t0IJassuLI:2Wv6zgEwJR4:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=5t0IJassuLI:2Wv6zgEwJR4:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/5t0IJassuLI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/2728709807228996893/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=2728709807228996893" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/2728709807228996893?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/2728709807228996893?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/5t0IJassuLI/blog-post.html" title="最強ランチャ 「ファイル名を指定して実行」" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2009/09/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YMRH46cSp7ImA9WxNSFkk.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-5463396643895711945</id><published>2009-08-29T16:43:00.006+09:00</published><updated>2009-08-31T00:13:05.019+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-31T00:13:05.019+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="android" /><title>Emacs + Ant でAndroid開発</title><content type="html">&lt;p&gt;つくづくいい時代になってきたなぁと思うのが、自分でモバイル端末のアプリをすぐ作れること。&lt;p&gt;
&lt;p&gt;もちろん、PalmからはじまってWindowsCE、IPhone、iアプリ(?)とかいろんな端末を触ってきてなんか作ってみたいなと試してみたけれど、どれも途中挫折。なんか、本気入れてプログラム開発して商売するのであれば開発ツールにコストかけたり、低級言語でがんばるけどもっと気軽に自分専用のちょっとしたアプリでもいいからモバイル端末で走らせたい、ってとこにはいかなかった。&lt;/p&gt;
&lt;p&gt;が、Androidの開発はすごくやりやすい(もちろん個人的にだけど)。エディタで修正 → コンパイル指示 → 実機確認 がすぐに実行できる環境がフリーで提供されている。&lt;/p&gt;
&lt;p&gt;そして、&lt;a href="http://jp.androlib.com/android.application.jp-co-fork-android-junji-test2-jDFE.aspx"&gt;こんなアプリ&lt;/a&gt;でも全世界に公開しちゃったりできる(開発者登録には$25かかるけど。)&lt;p&gt;
&lt;p&gt;てことで、自分がやってる方法は下記の通り。&lt;/p&gt;
&lt;h3&gt;Emacsでソースを開いてC-cC-cでコンパイルから実機インストールまで一発で実行する!&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://developer.android.com/intl/ja/sdk/1.5_r3/index.html"&gt;Android 1.5 SDK&lt;/a&gt;と、&lt;a href="http://java.sun.com/javase/downloads/index.jsp"&gt;JDK&lt;/a&gt;、&lt;a href="http://ant.apache.org/"&gt;ant&lt;/a&gt;をインストール。&lt;/li&gt;
(自分の環境はWindows Vista+&lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt;+&lt;a href="http://ntemacsjp.sourceforge.jp/"&gt;NTEmacs&lt;/a&gt;)
&lt;li&gt;ソース中に日本語を書きたいので、テンプレートを修正しておく&lt;/li&gt;
&lt;pre&gt;
c:/android-sdk-windows-1.5_r2/platforms/android-1.5/templates/android_rules.xml
        &amp;lt;javac encoding="ascii" target="1.5" debug="true" ...
                        ↓
        &amp;lt;javac encoding="utf-8" target="1.5" debug="true" ...
&lt;/pre&gt;
&lt;li&gt;開発したアプリには署名をしなくてはいけないので、鍵をつくっておく[JDKに附属しているコマンド]&lt;/li&gt;
&lt;pre&gt;
$ keytool -genkey -keystore (キーストアファイル名) -validity 10000 -alias (キーエイリアス)
いろいろ聞かれるので、(ストアパスワード)と(キーパスワード)を入力
&lt;/pre&gt;
&lt;li&gt;さっそく開発用のプロジェクトを作成&lt;/li&gt;
&lt;pre&gt;
$ android create project --package test.hello --activity HelloAndroid --target 2 --path ./HelloAndroid
&lt;/pre&gt;
&lt;li&gt;スケルトンが展開されるので、build.xmlに下記を追加&lt;/li&gt;
&lt;pre&gt;
    &amp;lt;setup /&amp;gt;
    ...ここから...
    &amp;lt;property name="out-signed-package" value="${out-folder}/${ant.project.name}.apk"/&amp;gt;
    &amp;lt;target name="deploy" depends="compile"&amp;gt;
      &amp;lt;signjar jar="${out-folder}/${ant.project.name}-unsigned.apk"
               signedjar="${out-signed-package}"
               alias="(キーエイリアス)" storepass="(ストアパスワード)"
               keypass="(キーパスワード)" keystore="(キーストアファイル名)"
               /&amp;gt;
      &amp;lt;exec executable="${adb}" failonerror="true"&amp;gt;
        &amp;lt;arg value="-d" /&amp;gt;
        &amp;lt;arg value="install" /&amp;gt;
        &amp;lt;arg value="-r" /&amp;gt;
        &amp;lt;arg path="${out-signed-package}" /&amp;gt;
      &amp;lt;/exec&amp;gt;
    &amp;lt;/target&amp;gt;
...ここまで...
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
&lt;li&gt;Android携帯をUSBに接続&lt;/li&gt;
&lt;pre&gt;
設定→アプリケーション→開発から「USBデバック」と「スリープモードにしない」をONしておく
&lt;/pre&gt;
&lt;li&gt;これで準備OK～。&lt;/li&gt;
&lt;pre&gt;
下記のコマンドで実機インストールまで一発で終る
$ ant deploy
Buildfile: build.xml
    [setup] Project Target: Android 1.5
    [setup] API level: 3

dirs:
     [echo] Creating output directories if needed...

resource-src:
     [echo] Generating R.java / Manifest.java from the resources...

aidl:
     [echo] Compiling aidl files into Java classes...

compile:
    [javac] Compiling 2 source files to d:\dev\HelloAndroid\bin\classes

deploy:
     [exec]     pkg: /data/local/tmp/HelloAndroid.apk
     [exec] Success
     [exec] 446 KB/s (13246 bytes in 0.029s)

BUILD SUCCESSFUL
Total time: 4 seconds
&lt;/pre&gt;
&lt;pre&gt;
;; Emacs上では
(add-hook 'java-mode-hook
          '(lambda ()
             (define-key java-mode-map "\C-c\C-c" 'compile)
             ))
を.emacsに追加。
ソースを開いてる状態でC-cC-c、コマンドは
cd (ソースの展開ディレクトリ) &amp;&amp; ant -emacs deploy
を指定してEnter
&lt;/pre&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-5463396643895711945?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=jD3JeFtWnJs:3FvDpP4Sie0:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=jD3JeFtWnJs:3FvDpP4Sie0:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=jD3JeFtWnJs:3FvDpP4Sie0:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=jD3JeFtWnJs:3FvDpP4Sie0:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/jD3JeFtWnJs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/5463396643895711945/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=5463396643895711945" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/5463396643895711945?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/5463396643895711945?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/jD3JeFtWnJs/emacs-ant-android.html" title="Emacs + Ant でAndroid開発" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2009/08/emacs-ant-android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UNQnw9fCp7ImA9WxRUEUs.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-7170437268965793664</id><published>2008-11-20T14:13:00.003+09:00</published><updated>2008-11-20T15:08:13.264+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-20T15:08:13.264+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="security" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><category scheme="http://www.blogger.com/atom/ns#" term="codeigniter" /><title>CodeIgniterでCookieにsecure属性をつける</title><content type="html">すごい久しぶりの更新。&lt;br /&gt;
ひょんなことでお話しさせていただいた&lt;a href="http://twitter.com/yudouhu"&gt;yudouhu&lt;/a&gt;さんから「&lt;a href="http://codeigniter.com/"&gt;CodeIgniter&lt;/a&gt;&amp;nbsp;いいですよ」と聞き、ひょ&lt;br /&gt;
んなタイミングで調べてみたら、存外よかった。&lt;br /&gt;
特徴的だと思ったのは&lt;a href="http://codeigniter.jp/user_guide_ja/libraries/sessions.html"&gt;セッションの管理機構&lt;/a&gt;&amp;nbsp;がデフォルトではCookieをそのまま使用するらしく、&lt;a href="http://codeigniter.jp/user_guide_ja/libraries/encryption.html"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://codeigniter.jp/user_guide_ja/libraries/encryption.html"&gt;暗号&lt;/a&gt;&lt;a href="http://codeigniter.jp/user_guide_ja/libraries/encryption.html"&gt;化&lt;/a&gt;&amp;nbsp;もできるということで、ちょっと調べてみたら&lt;a href="http://www.hepo.jp/bbn/?Cookie%A4%CESecure%C2%B0%C0%AD"&gt;secure属性&lt;/a&gt;&amp;nbsp;はつけられないみたいだった。&lt;br /&gt;
&lt;a href="http://bba-ltom.blogspot.com/2008/07/php.html"&gt;ここ&lt;/a&gt;&amp;nbsp;でもちょっと書いたけど、我が国ではCookieのsecure属性については&lt;a href="http://www.ipa.go.jp/security/ciadr/20030808cookie-secure.html"&gt;敏感な部分&lt;/a&gt;&amp;nbsp;がある&lt;br /&gt;
ので、パッチにしてみた。&lt;br /&gt;
まるでたいした修正じゃないし、&lt;a href="http://codeigniter.jp/user_guide_ja/helpers/cookie_helper.html"&gt;set_cookie&lt;/a&gt;&amp;nbsp;という&lt;a href="http://codeigniter.jp/user_guide_ja/general/helpers.html"&gt;ヘルパー関数&lt;/a&gt;&amp;nbsp;も初期インストール状態では&lt;br /&gt;
どこからも参照されていなかったので、そのままいじる。&lt;br /&gt;
&lt;pre&gt;$this-&amp;gt;load-&amp;gt;helper('cookie');
#で
set_cookie($name, $value, $expire, $domain, $path, $prefix, 1);
#もしくは
$cookie = array(
                'name'   =&amp;gt; 'The Cookie Name',
                'value'  =&amp;gt; 'The Value',
                'expire' =&amp;gt; '86500',
                'domain' =&amp;gt; '.some-domain.com',
                'path'   =&amp;gt; '/',
                'prefix' =&amp;gt; 'myprefix_',
                'secure' =&amp;gt; '1'
               );
set_cookie($cookie);&lt;/pre&gt;
と書く。
以下、パッチ。
&lt;br /&gt;
&lt;pre&gt;*** cookie_helper.php.orig Thu Nov 20 12:25:28 2008
--- cookie_helper.php Thu Nov 20 12:28:52 2008
***************
*** 40,54 ****
   * @param string the cookie domain.  Usually:  .yourdomain.com
   * @param string the cookie path
   * @param string the cookie prefix
   * @return void
   */
  if ( ! function_exists('set_cookie'))
  {
!  function set_cookie($name = '', $value = '', $expire = '', $domain = '', $path = '/', $prefix = '')
   {
    if (is_array($name))
    {  
!    foreach (array('value', 'expire', 'domain', 'path', 'prefix', 'name') as $item)
     {
      if (isset($name[$item]))
      {
--- 40,55 ----
   * @param string the cookie domain.  Usually:  .yourdomain.com
   * @param string the cookie path
   * @param string the cookie prefix
+  * @param bool the cookie secure flag
   * @return void
   */
  if ( ! function_exists('set_cookie'))
  {
!  function set_cookie($name = '', $value = '', $expire = '', $domain = '', $path = '/', $prefix = '', $secure = 0)
   {
    if (is_array($name))
    {  
!    foreach (array('value', 'expire', 'domain', 'path', 'prefix', 'name', 'secure') as $item)
     {
      if (isset($name[$item]))
      {
***************
*** 89,95 ****
     }
    }
   
!   setcookie($prefix.$name, $value, $expire, $path, $domain, 0);
   }
  }
   
--- 90,96 ----
     }
    }
   
!   setcookie($prefix.$name, $value, $expire, $path, $domain, $secure);
   }
  }
   
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-7170437268965793664?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=mkp6tHzvLDs:Z7D6YjrNcbk:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=mkp6tHzvLDs:Z7D6YjrNcbk:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=mkp6tHzvLDs:Z7D6YjrNcbk:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=mkp6tHzvLDs:Z7D6YjrNcbk:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/mkp6tHzvLDs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/7170437268965793664/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=7170437268965793664" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/7170437268965793664?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/7170437268965793664?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/mkp6tHzvLDs/codeignitercookiesecure.html" title="CodeIgniterでCookieにsecure属性をつける" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2008/11/codeignitercookiesecure.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMGQ3Y9fip7ImA9WxdVEEg.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-2094710613126796816</id><published>2008-07-15T00:32:00.000+09:00</published><updated>2008-07-15T00:47:02.866+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-15T00:47:02.866+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="joomla" /><title>joomla-users.jpをいじる</title><content type="html">&lt;a href="http://www.betation.co.jp/"&gt;会社&lt;/a&gt;の&lt;a href="http://d.hatena.ne.jp/inspfightman/"&gt;同僚&lt;/a&gt;が当然ノープランで&lt;a href="http://joomla-users.jp/"&gt;joomla-users.jp&lt;/a&gt;をとってさっそく運営を&lt;a href="http://joomla-users.jp/content/blogcategory/4/14/"&gt;はじめた&lt;/a&gt;。&lt;br /&gt;
&lt;img src="http://lh3.ggpht.com/junji.shiokawa/SHtzgR0qywI/AAAAAAAAOnA/QXlJULlAAa8/s400/WS000000.jpg" /&gt;&lt;br /&gt;
まずこの初期デザイン変更しようよって思いつつも、まー日本では全然&lt;a href="http://www.google.co.jp/trends?q=XOOPS%2Cjoomla%2CDrupal&amp;ctab=0&amp;geo=all&amp;geor=all&amp;date=all&amp;sort=1"&gt;知名度&lt;/a&gt;ないしある程度有意義なサイトになればと願ってます(協力もするよー)。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-2094710613126796816?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=5IXpU2docig:wxLCp1b8t7M:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=5IXpU2docig:wxLCp1b8t7M:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=5IXpU2docig:wxLCp1b8t7M:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=5IXpU2docig:wxLCp1b8t7M:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/5IXpU2docig" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/2094710613126796816/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=2094710613126796816" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/2094710613126796816?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/2094710613126796816?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/5IXpU2docig/joomla-usersjp.html" title="joomla-users.jpをいじる" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/junji.shiokawa/SHtzgR0qywI/AAAAAAAAOnA/QXlJULlAAa8/s72-c/WS000000.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2008/07/joomla-usersjp.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIMSX04fyp7ImA9WxdWGUw.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-5355965098534336322</id><published>2008-07-12T09:44:00.001+09:00</published><updated>2008-07-13T11:53:08.337+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-13T11:53:08.337+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="security" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>PHP: セッションにセキュリティ対策する</title><content type="html">PHPには標準で&lt;a href="http://e-words.jp/w/E382BBE38383E382B7E383A7E383B3.html"&gt;セッション&lt;/a&gt;の管理機能が&lt;a href="http://jp.php.net/manual/ja/ref.session.php"&gt;組み込まれ&lt;/a&gt;ているので平易に使うことができるけれど、これがなかなか曲者。&lt;br /&gt;
そのまま使ってダメな理由は&lt;a href="http://www.asahi-net.or.jp/~wv7y-kmr/memo/php_security.html#PHP_Session"&gt;ここ&lt;/a&gt;が詳しくて、ざっくり書くと下記の通り。&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;そもそもセッションIDの書式チェックがされてない&lt;/li&gt;
&lt;li&gt;初期設定ではCookieにsecure属性がついてない&lt;/li&gt;
&lt;li&gt;SSLに移行しても同じIDを使い続ける&lt;/li&gt;
&lt;/ul&gt;
ここらへんは設定の問題や、回避処理を忘れずに入れておけば問題ないのだけど、HTTPからHTTPS、HTTPSからHTTPへのセッションの移行とかが必要になるとちょっと別口の方法を用意しておかないと簡単には実現できない。ようわ、
&lt;ol&gt;
&lt;li&gt;HTTP中をセッションID12345で移動しているとして、&lt;/li&gt;
&lt;li&gt;SSLに移行時には同じIDが危険なので67890に変更する&lt;/li&gt;
&lt;li&gt;ただ、CookieにsecureフラグがついているのでHTTPに戻った時に67890が取得できないので&lt;/li&gt;
&lt;li&gt;HTTPとHTTPSの両方で保持しておきたい情報はセッションには入れられない&lt;/li&gt;
&lt;li&gt;よって、都度渡すか別途データベース等に外部的に保存しておくしかない&lt;/li&gt;
&lt;/ol&gt;
&lt;center&gt;(大嘘だったらゴメンナサイ)&lt;/center&gt;
&lt;br /&gt;
そこらへんもろもろの対策と外部DBではなくCookieに保存するようにしたのが下記の通り。(&lt;a href="http://www.jumperz.net/texts/csrf.htm"&gt;CSRF対策&lt;/a&gt;と冗長な注意事項と言い訳のおまけ付き)
&lt;pre&gt;&amp;lt;?php
/* strict_session.php (セキュアなセッション管理)
 *
 * - PHP5.1.0以上じゃないと使えない
 * - 携帯には対応してない。Cookieに対応していない端末やUA、IPが
 *   ころころ変ることがある為。
 * - session_idは特定のルールで設定し、書式チェックを行う
 * - ハッシュ生成はsha1を使うように
 * - また、SSLかはポートで判別してるのでProxyの裏側でも使えない
 * - セッションの破棄はstrict_session_destroy()を使ってhttpとhttpsで
 *   それぞれやる必要がある
 * - セッションIDの変更時には元のセッションを破棄
 * - Cookieのパスや有効期間は都度設定する必要があるかもしれない
 * - HTTPSに移動したらセッション名とIDを変更
 * - Cookie以外でセッションのやりとりをしない(trans_sidをOFF)
 * - UAとIPが一致しなかったら新規セッションとする
 * - そのままだとHTTPのセッションはHTTPSで使えないが、明示的に
 *   strict_session_serializeを使うことで値の受渡しが可能。
 * - POSTで渡さない場合は外部DB化することが必要
 * - まとめると
 *   HTTPとHTTPSの両方から参照したいデータ: カートのデータ等
 *     -&amp;gt; 外部DB化して、両方から参照できるようにする
 *   HTTPSのみのデータ: 個人情報系
 *     -&amp;gt; HTTPSのセッションに保存する(HTTPには決っして飛ばない)
 * - 外部DBをCookieで代替、あまり大きいデータは保持できない
 */

// UAを保存するセッション名
define('STRICT_SESSION_UA_NAME','strict_session_user_agent');

// IPアドレスを保存するセッション名
define('STRICT_SESSION_RA_NAME','strict_session_remote_addr');

// HTTP &amp;lt;-&amp;gt; HTTPS 間で受渡しされるセッション名
define('STRICT_SESSION_ENCRYPT_NAME','strict_session_serialized');

// HTTP &amp;lt;-&amp;gt; HTTPS 間で受渡しされる暗号化キー文字列
// 外部に漏れると中身が見られてしまう恐れがある。
// サイト毎に変更すること
define('STRICT_SESSION_ENCRYPT_KEY','keuiqdzR87m4X7xDF39sSqoH');

// CSRF対策用のセッション名
define('STRICT_SESSION_CSRFM_NAME','strict_session_csrfm');

/*
 * セキュアなセッションを開始
 */
function strict_session_start() {

    // セッションはCookieのみを使用
    ini_set( 'session.use_only_cookies', 1 );
    // md5よりさらに予測困難なsha1でセッションIDを生成
    ini_set( 'session.hash_function', 1 );
    // セッションIDをURLパラメータに書かない
    ini_set( 'session.use_trans_sid', 0 );
    // HTTP &amp;lt;-&amp;gt; HTTPS 間でセッションの受渡しやCSRF対策でフォームに
    // 自動付与されるoutput_add_rewrite_varでURLパラメータに書かれ
    // ないようにする
    ini_set( 'url_rewriter.tags', 'form=' );

    // HTTPS通信時にはCookieにセキュア属性をつけ、セッションの名前
    // も変更する
    if($_SERVER['SERVER_PORT']==443){
        ini_set( 'session.cookie_secure', 1 );
        session_name('SECURE_'.session_name());
    }

    // セッションの開始
    session_start();

    $invalid=FALSE;

    // sha1でセッションIDのハッシュ値を生成した場合の書式チェック
    if(! preg_match('/[0-f]{40}/', session_id())){
        $invalid=TRUE;
    }
    
    // IPとUAが同時に一致しなかった時のみエラーとする
    if(
       (
        $_SERVER['HTTP_USER_AGENT'] &amp;&amp; $_SESSION[STRICT_SESSION_UA_NAME] &amp;&amp;
        ($_SERVER['HTTP_USER_AGENT'] != $_SESSION[STRICT_SESSION_UA_NAME])
        )
       &amp;&amp;
       (
        $_SERVER['REMOTE_ADDR'] &amp;&amp; $_SESSION[STRICT_SESSION_RA_NAME] &amp;&amp;
        ($_SERVER['REMOTE_ADDR'] != $_SESSION[STRICT_SESSION_RA_NAME])
        )
       ){
        $invalid=TRUE;
    }
    
    $_SESSION[STRICT_SESSION_UA_NAME]=$_SERVER['HTTP_USER_AGENT'];
    $_SESSION[STRICT_SESSION_RA_NAME]=$_SERVER['REMOTE_ADDR'];
    
    if($invalid){
        // セッションを破棄して新しいセッションを開始
        strict_session_destroy();
    }
    
}

/*
 * セッションIDを変更して元のIDを削除する。
 * - PHP 5.1.0 以降でのみ正しく動作
 */
function strict_session_regenerate_id(){
    return session_regenerate_id(TRUE);
}

/*
 * セッションを完全に削除
 */
function strict_session_destroy(){
    // セッション変数を全て解除する
    $_SESSION = array();

    // セッションを切断するにはセッションクッキーも削除する。
    // Note: セッション情報だけでなくセッションを破壊する。
    if (isset($_COOKIE[session_name()])) {
        setcookie(session_name(), '', time()-42000, '/');
    }

    // HTTP &amp;lt;-&amp;gt; HTTPS 間でセッションの受渡し用Cookieも削除
    if (isset($_COOKIE[STRICT_SESSION_ENCRYPT_NAME])) {
        setcookie(STRICT_SESSION_ENCRYPT_NAME, '', time()-42000, '/');
    }

    // 最終的に、セッションを破壊する
    session_destroy();
}

/*
 * HTTP &amp;lt;-&amp;gt; HTTPS 間でセッションの受渡し用関数
 * 与えられた変数をシリアライズして、STRICT_SESSION_ENCRYPT_KEYで定義した
 * キーを元に暗号化。
 */
function strict_session_serialize($d=null) {
    $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CFB), MCRYPT_RAND);
    setcookie(STRICT_SESSION_ENCRYPT_NAME, base64_encode($iv.mcrypt_encrypt(MCRYPT_3DES, STRICT_SESSION_ENCRYPT_KEY, serialize($d), MCRYPT_MODE_CFB, $iv)), 0, '/');
}

/*
 * HTTP &amp;lt;-&amp;gt; HTTPS 間でセッションの受渡し用関数
 * strict_session_serializeによって暗号化され変数を復号化する。
 */
function strict_session_unserialize() {

    if(isset($_COOKIE[STRICT_SESSION_ENCRYPT_NAME])){
        $is = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CFB);
        $et = base64_decode($_COOKIE[STRICT_SESSION_ENCRYPT_NAME]);
        return unserialize(mcrypt_decrypt(MCRYPT_3DES, STRICT_SESSION_ENCRYPT_KEY, substr($et,$is), MCRYPT_MODE_CFB, substr($et, 0, $is)));
    }

    return FALSE;
    
}

/*
 * CSRF対策: ID(トークン)を生成してフォームに付与する
 * - output_add_rewrite_varによってページの全てのFORMに自動付与される。
 *   外部サイトへのフォームにも付与されてしまうので注意。
 */
function strict_session_csrfm_set() {
    $_SESSION[STRICT_SESSION_CSRFM_NAME]=strict_session_csrfm_id();
    output_add_rewrite_var(STRICT_SESSION_CSRFM_NAME,$_SESSION[STRICT_SESSION_CSRFM_NAME]);
}

/*
 * CSRF対策: ID(トークン)を比較して違っていたらFALSEを返す
 * POSTのみ対応。
 */
function strict_session_csrfm_check() {

    // セッションに保存されたIDとPOSTされたIDを比較。
    if($_POST[STRICT_SESSION_CSRFM_NAME] &amp;&amp; $_POST[STRICT_SESSION_CSRFM_NAME] == $_SESSION[STRICT_SESSION_CSRFM_NAME]){
        return TRUE;
    }
    
    return FALSE;
    
}

/*
 * CSRF対策: ID(トークン)の生成
 */
function strict_session_csrfm_id() {
 mt_srand((double)microtime()*1000000);
    return sha1(uniqid(mt_rand(),1));
}

?&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-5355965098534336322?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=qQFHfVw-qf8:SnbVUp_aXwo:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=qQFHfVw-qf8:SnbVUp_aXwo:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=qQFHfVw-qf8:SnbVUp_aXwo:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=qQFHfVw-qf8:SnbVUp_aXwo:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/qQFHfVw-qf8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/5355965098534336322/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=5355965098534336322" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/5355965098534336322?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/5355965098534336322?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/qQFHfVw-qf8/php.html" title="PHP: セッションにセキュリティ対策する" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2008/07/php.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cAQXs9eCp7ImA9WxdWFEg.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-7903652307765084194</id><published>2008-07-08T04:19:00.001+09:00</published><updated>2008-07-08T04:30:40.560+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-08T04:30:40.560+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="misc" /><title>会社のホームページにオンライン状態を表示2</title><content type="html">&lt;a href="http://bba-ltom.blogspot.com/2008/06/blog-post.html"&gt;これ&lt;/a&gt;
の続きで、会社のトップページに社員のメッセンジャーへのログインやアクティ
ブかどうかを表示するようにしたのに加え、社内にいるかどうかも&lt;a href="http://www.fork.co.jp/"&gt;表示&lt;/a&gt;させる
ようにした。&lt;br /&gt;
&lt;p&gt;&lt;img src="http://lh3.ggpht.com/junji.shiokawa/SG-TKJJLJ8I/AAAAAAAAOlA/9THd_E3BQFs/s400/WS000000.jpg" /&gt;&lt;br /&gt;
アクティブユーザ数 : ログイン数 : 社内にいる人数&lt;/p&gt;
社内にいる人数は入退室カードの読み取り装置がいつ入ったり出たりしたかの
情報をSubjectに含んだメールで送信してくれるので、それをこんな感じ
&lt;pre&gt;# /var/qmail/alias/.qmail-webcast
| sed '/^$/q' | sed -n 's/^Subject: =?Shift-JIS?B?\(.*\)?=$/\1/p' | nkf -mB -S -e | /bin/bash webcast.sh
# | 改行までを読み込み | 先頭がSubjectを抜き出し | デコード | 結果をDBに
&lt;/pre&gt;でパースしてカウントしてるだけ。&lt;br /&gt;
&lt;br /&gt;
他、数字だけだとちょっと味気なしなんのことかわからないので、マウスオーバすると説明文を出すよ
うにした。ここらへんがグリグリ動くのは&lt;a href="http://berniecode.com/writing/animator.html"&gt;Animator.js&lt;/a&gt;
というライブラリを使わせていただいていて、大変簡単に動きがつけられるので楽しい。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-7903652307765084194?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=3WEbylbRyHQ:HyOonRcRqhs:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=3WEbylbRyHQ:HyOonRcRqhs:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=3WEbylbRyHQ:HyOonRcRqhs:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=3WEbylbRyHQ:HyOonRcRqhs:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/3WEbylbRyHQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/7903652307765084194/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=7903652307765084194" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/7903652307765084194?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/7903652307765084194?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/3WEbylbRyHQ/2.html" title="会社のホームページにオンライン状態を表示2" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/junji.shiokawa/SG-TKJJLJ8I/AAAAAAAAOlA/9THd_E3BQFs/s72-c/WS000000.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2008/07/2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMCR3w7eip7ImA9WxdWEko.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-6865588643160414001</id><published>2008-07-05T19:31:00.003+09:00</published><updated>2008-07-06T01:14:26.202+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-06T01:14:26.202+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gentoo" /><category scheme="http://www.blogger.com/atom/ns#" term="amazon" /><title>64bit版のGentoo Linux AMIを作ってみた</title><content type="html">ちょっと前にAmazon EC2でハイパフォーマンスタイプの&lt;a href="http://docs.amazonwebservices.com/AWSEC2/2008-02-01/DeveloperGuide/"&gt;インスタンス&lt;/a&gt;が&lt;a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1535"&gt;出て&lt;/a&gt;いたので64bit版のGentoo AMIを作ってみることにした。(32bit版は&lt;a href="http://bba-ltom.blogspot.com/2008/04/gentoo-linuxami2.html"&gt;こちら&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
が、、、かなり手こずる。&lt;br /&gt;
&lt;br /&gt;
で、だいたい大事なところをすっかり省いて無理矢理動かしてみた。&lt;br /&gt;
&lt;pre&gt;AMI ID: ami-8cba5ee5
AMI Manifest: fork/gentoo-base-x86_64/200807051035.manifest.xml&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="http://pop-on.ddo.jp/imy/"&gt;tezuly&lt;/a&gt;にすごーく基本的なところから教えてもらってありがとう!&lt;/li&gt;
&lt;li&gt;hardened-2008.0_beta2のstage3ベースというかそれだけ。なんもしてない&lt;/li&gt;
&lt;li&gt;カーネルコンパイルしないでfedra8のカーネルを読み込みしてる(まだここらへんがよくわかってない)&lt;/li&gt;
&lt;li&gt;/procや/sysがマウントできない&lt;a href="http://markus.revti.com/index.php/2008/06/03/xen-debian-vps-problem-with-nash-hotplug-using-100-cpu-resource/"&gt;問題&lt;/a&gt;があるっぽかったので、&lt;a href="http://gentoo-wiki.com/HOWTO_Xen_and_Gentoo"&gt;HOWTO Xen and Gentoo&lt;/a&gt;に沿って修正。&lt;/li&gt;
&lt;li&gt;起動後に/bin/nash(nash-hotplug)がCPUを100%使い続けるのも&lt;a href="http://markus.revti.com/index.php/2008/06/03/xen-debian-vps-problem-with-nash-hotplug-using-100-cpu-resource/"&gt;おかしい&lt;/a&gt;ので強引に修正。&lt;/li&gt;
&lt;li&gt;起動時にマウントの仕方でエラーになってるので/etc/fstabを&lt;pre&gt;/dev/sda1               /                       ext3    defaults 1 1
/dev/sdb               /mnt                     ext3    defaults 0 0&lt;/pre&gt;のように修正。また後で直そ...
&lt;/ul&gt;しばらく検証してみて、問題なさそーだったら&lt;a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1441"&gt;こっち&lt;/a&gt;みたいに&lt;a href="http://developer.amazonwebservices.com/connect/kbcategory.jspa?categoryID=101"&gt;Amazon Machine Images (AMIs)&lt;/a&gt;に登録するつもり。
&lt;pre&gt;# またfedra8(ami-2a5fba43)上で作業
mv /tmp /mnt &amp;&amp; ln -sf /mnt/tmp /
mkdir /mnt/gentoo
# ベータ版の64bit Gentoo Linux 2008.0(hardened) のstage3を使う
wget -O- http://gentoo.osuosl.org/releases/amd64/2008.0_beta2/stages/hardened/stage3-amd64-hardened-2008.0_beta2.tar.bz2 | tar xjC /mnt/gentoo
wget -O- http://gentoo.osuosl.org/snapshots/portage-latest.tar.bz2 | tar xjC /mnt/gentoo/usr
# fedra8のカーネルモジュールをそのまま使う、カーネルも落してこない
wget -O- http://s3.amazonaws.com/ec2-downloads/ec2-modules-2.6.21-2952.fc8xen-x86_64.tgz | tar xzC /mnt/gentoo

\cp -f /etc/resolv.conf /mnt/gentoo/etc
\cp -f /etc/fstab /mnt/gentoo/etc
cat /proc/mounts &amp;gt; /mnt/gentoo/etc/mtab
chroot /mnt/gentoo /bin/bash
env-update
source /etc/profile

cd /lib/modules/
ln -s 2.6.21-2952.fc8xen 2.6.21.7-2.fc8xen

cat &amp;gt;&amp;gt; /etc/ssh/sshd_config &amp;lt;&amp;lt;\EOF
UseDNS no
PermitRootLogin without-password
EOF
perl -p -i -e 's/^c([^1])/\#c$1/g' /etc/inittab
perl -p -i -e 's/(try mount.* \/proc .*)$/\#$1/' /sbin/rc
perl -p -i -e 's/(try mount.* \/sys .*)$/\#$1/' /sbin/rc

# &lt;a href="http://docs.amazonwebservices.com/AWSEC2/2008-02-01/DeveloperGuide/building-shared-amis.html"&gt;Shared AMI Guidelines&lt;/a&gt;に沿った設定と
# nash-hotplugの問題を修正
cat &amp;gt;&amp;gt; /etc/conf.d/local.start &amp;lt;&amp;lt;\EOF
[ ! -e /root ] &amp;&amp; cp -r /etc/skel /root
if [ -f "/root/firstrun" ] ; then
  usermod -p `dd if=/dev/urandom count=50 2&amp;gt; /dev/null | md5sum | cut -d " " -f1-1` root
  rm -f /root/firstrun
else
  echo "* Firstrun *" &amp;&amp; touch /root/firstrun
fi
if [ ! -d /root/.ssh ] ; then
        mkdir -p /root/.ssh
        chmod 700 /root/.ssh
fi
curl http://169.254.169.254/2008-02-01//meta-data/public-keys/0/openssh-key &amp;gt; /tmp/my-key
if [ $? -eq 0 ] ; then
        cat /tmp/my-key &amp;gt;&amp;gt; /root/.ssh/authorized_keys
        chmod 600 /root/.ssh/authorized_keys
        rm /tmp/my-key
fi
wget -q -O- http://169.254.169.254/2007-12-15/user-data | sh
pkill -9 nash
EOF

cat &amp;gt;&amp;gt; /etc/make.conf &amp;lt;&amp;lt;\EOF
MAKEOPTS="-j9"
CFLAGS="${CFLAGS} -mno-tls-direct-seg-refs"
CXXFLAGS="${CFLAGS} -mno-tls-direct-seg-refs"
EOF

echo 'dhcp_eth0="release nodns nontp nonis"' &amp;gt;&amp;gt; /etc/conf.d/net
rc-update add net.eth0 default
rc-update add sshd default

emerge dhcpcd ruby curl unzip

cd /usr/local
wget http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools.zip
unzip ec2-ami-tools.zip
rm -rf ec2-ami-tools.zip

export EC2_AMITOOL_HOME=/usr/local/ec2-ami-tools-1.3-21885
PATH=$EC2_AMITOOL_HOME/bin:$PATH

# 別環境からpemの転送
&amp;gt; scp *.pem root@ec2-75-101-xxx-xxx.compute-1.amazonaws.com:/mnt/gentoo/root

# ボリューム作成
ec2-bundle-vol -b -e /root -d /mnt -c /root/cert.pem -k /root/pk.pem -u ***** -s 9216 -r x86_64 -p 200807051035

# Amazon S3へアップロード
ec2-upload-bundle -b fork/gentoo-base-x86_64 -m /mnt/200807051035.manifest.xml -a ***** -s *****

# 別環境からEC2へ登録、publicにして公開
&amp;gt; ec2-register fork/gentoo-base-x86_64/200807051035.manifest.xml
&amp;gt; ec2-modify-image-attribute ami-8cba5ee5 --launch-permission -a all
&lt;/pre&gt;
ビルドしては失敗、登録しては削除ってのを繰り返したそこらへんのコマンドは下記の通り。
&lt;pre&gt;# コンソール出力を確認する
ec2-get-console-output i-*****

# EC2へ登録したAMIを解除
ec2-deregister ami-******

# S3へアップしたボリュームを削除
ec2-delete-bundle -b fork/gentoo-base-x86_64 -m /mnt/200807050950.manifest.xml -a ***** -s *****
&lt;/pre&gt;64bit CPUx8 (c1.xlarge)でのベンチとかはまた後日...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-6865588643160414001?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=xDf-nmU3fAw:StbD1lLaejQ:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=xDf-nmU3fAw:StbD1lLaejQ:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=xDf-nmU3fAw:StbD1lLaejQ:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=xDf-nmU3fAw:StbD1lLaejQ:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/xDf-nmU3fAw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/6865588643160414001/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=6865588643160414001" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/6865588643160414001?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/6865588643160414001?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/xDf-nmU3fAw/64bitgentoo-linux-ami.html" title="64bit版のGentoo Linux AMIを作ってみた" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2008/07/64bitgentoo-linux-ami.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4BQHgzfSp7ImA9WxdXGEo.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-6351584770841770705</id><published>2008-06-30T22:34:00.005+09:00</published><updated>2008-07-01T11:22:31.685+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-01T11:22:31.685+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="misc" /><title>rrdの日時をリセットする</title><content type="html">&lt;a href="http://oss.oetiker.ch/mrtg/"&gt;MRTG&lt;/a&gt;と&lt;a href="http://oss.oetiker.ch/rrdtool/"&gt;RRDtool&lt;/a&gt;を使ってこんな感じ&lt;p&gt;&lt;img src="http://oss.oetiker.ch/rrdtool/stream-pop.png" alt="" width="400" height="129"&gt;&lt;/p&gt;のグラフを生成してサーバの状態を監視してる。&lt;br /&gt;
たまにサーバの時計がずれてたりすると&lt;pre&gt;2008-06-30 19:49:44: ERROR: Cannot update /var/foo/data/server.rrd with '1214822984:53:20' illegal attempt to update using time 1214822984 when last update time is 1214855107 (minimum one second step)&lt;/pre&gt;というエラー表示がでてしまい、&lt;pre&gt;# データファイルの最終更新日付を表示
$ rrdtool last data.rrd | awk '{print strftime("%c",$1)}'
Tue Jul  2 08:50:04 2008&lt;/pre&gt;日付が明日だ。。。。&lt;br /&gt;こうなると、サーバの時間を正しく合わせても明日になるまで更新されないので、すぐに記録を開始するにはデータファイルをいったん消したりする。&lt;br /&gt;最終更新日時だけ戻すことはできないかと探して、まともな方法じゃないかもだけどスクリプト化してみた。&lt;pre&gt;#!/bin/bash
if [ "$1" = "" -o ! -e "$1" ] ; then
    echo usage rrdreset [filename.rrd]
exit
fi

RRD="$1"
DUMP=`mktemp`

rrdtool dump ${RRD} &gt; ${DUMP}
perl -pi -e "s#&amp;lt;lastupdate&amp;gt; (.*) &amp;lt;/lastupdate&amp;gt;#&amp;lt;lastupdate&amp;gt; `date +%s` &amp;lt;/lastupdate&amp;gt;#" ${DUMP}
mv -f ${RRD} ${RRD}.orig
rrdtool restore ${DUMP} ${RRD}
rm -rf ${DUMP}&lt;/pre&gt;使い方はこんな感じ&lt;pre&gt;$ ls
data.cfg data-day.png  data-week.png  data.rrd
# 最終更新日時を現在日時でリセット
$ rrdreset.sh data.rrd
# オリジナルは.origで保存される
$ ls
data.cfg data-day.png  data-week.png  data.rrd  data.rrd.orig
# 現在日時でリセットされていることを確認
$ rrdtool last data.rrd | awk '{print strftime("%c",$1)}'
Tue Jul  1 08:50:04 2008
# 大丈夫そうだったらmrtgで再読み込みさせて、オリジナルやキャッシュ画像は消しておく
$ mrtg data.cfg
$ rm -rf data.rrd.orig data-*.png
# 全般的にずれてしまってたら検索して適用したり。
$ find /data -name "*.rrd" -exec rrdreset.sh {} \; -print
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-6351584770841770705?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=L3DM6U5ajbw:nNAJ0VpgFDE:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=L3DM6U5ajbw:nNAJ0VpgFDE:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=L3DM6U5ajbw:nNAJ0VpgFDE:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=L3DM6U5ajbw:nNAJ0VpgFDE:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/L3DM6U5ajbw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/6351584770841770705/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=6351584770841770705" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/6351584770841770705?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/6351584770841770705?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/L3DM6U5ajbw/rrd.html" title="rrdの日時をリセットする" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2008/06/rrd.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8GRnw6fCp7ImA9WxdXFUU.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-6992092494726236411</id><published>2008-06-23T17:29:00.010+09:00</published><updated>2008-06-28T01:23:47.214+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-28T01:23:47.214+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="erlang" /><title>erlang-users.jpをいじる</title><content type="html">&lt;a href="http://bba-ltom.blogspot.com/2008/06/erlang-org-3.html"&gt;ここ&lt;/a&gt;でボヤいてた甲斐あって(?)、&lt;a href="http://teahut.sakura.ne.jp/b/2008-06-02-1.html"&gt;Erlang 分散システム勉強会&lt;/a&gt;の後の懇談会で&lt;a href="http://www.cuspy.org/blog/"&gt;hamano&lt;/a&gt;さんの「おれはやるよ」という不敵な笑み(?)より翌日、めでたく &lt;a href="http://erlang-users.jp/"&gt;erlang-users.jp&lt;/a&gt;がお目見え!&lt;br /&gt;
でも、&lt;a href="https://github.com/"&gt;github&lt;/a&gt;か、、、&lt;a href="http://git.or.cz/"&gt;git&lt;/a&gt;使ったことないよ、git、、、&lt;br /&gt;
まーせっかくコミットしていいって言われたので、設定してみたのは下記の通り。&lt;br /&gt;
環境は&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Windows Vista Ultimate SP1&lt;/li&gt;&lt;li&gt;Cygwin (DLL version: 1.5.25)&lt;/li&gt;&lt;ul&gt;&lt;li&gt;emacs 22.1-3&lt;/li&gt;&lt;li&gt;emacs-el 22.1-3&lt;/li&gt;&lt;li&gt;emacs-X11 22.1-3&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://tsgates.cafe24.com/git/git-emacs.el"&gt;http://tsgates.cafe24.com/git/&lt;span class="highlight"&gt;git-emacs.el&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tsgates.cafe24.com/git/git-modeline.el"&gt;http://tsgates.cafe24.com/git/git-modeline.el&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://tsgates.cafe24.com/git/git-blame.el"&gt;http://tsgates.cafe24.com/git/git-blame.el&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://www.update.uu.se/%7Eams/emacs/lisp/vc-git.el"&gt;http://www.update.uu.se/~ams/emacs/lisp/vc-git.el&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;aspell 0.60.5-1&lt;/li&gt;&lt;li&gt;aspell-en 6.0.0-1&lt;/li&gt;&lt;li&gt;git 1.5.5.1-1&lt;/li&gt;&lt;/ul&gt;
&lt;/ul&gt;Emacsの設定は&lt;pre&gt;;; .emacsに追加
(setq ispell-program-name "aspell")
(require 'git-emacs)
&lt;/pre&gt;として、あとはhamanoさんに用意してもらったgithubの&lt;a href="http://github.com/hamano/erlang-users.jp/tree/master"&gt;README&lt;/a&gt;にある通り、チェックアウト、コミット。Emacs的な操作では&lt;ol&gt;&lt;li&gt;ファイルを開いて編集&lt;/li&gt;&lt;li&gt;内容に問題がなければCtrl-x v vでコミットログの画面が表示されるので&lt;/li&gt;&lt;li&gt;ログを書いて、UTF-8で記録するにはCtrl-x Enter cで文字コードを聞かれるので、utf-8と指定して、&lt;/li&gt;&lt;li&gt;Ctrl-c Ctrl-cでコミット&lt;/li&gt;&lt;/ol&gt;
% index.html -&gt; index.yaws ってしたらどうなるのかな～&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-6992092494726236411?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=pL_XkU4FlAI:t9Ft9vIBdNk:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=pL_XkU4FlAI:t9Ft9vIBdNk:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=pL_XkU4FlAI:t9Ft9vIBdNk:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=pL_XkU4FlAI:t9Ft9vIBdNk:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/pL_XkU4FlAI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/6992092494726236411/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=6992092494726236411" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/6992092494726236411?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/6992092494726236411?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/pL_XkU4FlAI/erlang-usersjp.html" title="erlang-users.jpをいじる" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2008/06/erlang-usersjp.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8DSXY4eip7ImA9WxdXFUU.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-240681091680643772</id><published>2008-06-20T07:18:00.004+09:00</published><updated>2008-06-28T01:24:38.832+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-28T01:24:38.832+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="misc" /><title>会社のホームページにオンライン状態を表示</title><content type="html">昔&lt;a href="http://www.mediar.co.jp/"&gt;株式会社メディアライツ&lt;/a&gt;さんのホームページを教えてもらった時にいたく感動。&lt;br /&gt;
ページヘッダのFlashに社員のインスタントメッセンジャー(IM)のステータスを拾って、オンライン状態を&lt;a href="http://www.mediar.co.jp/manual.html"&gt;表示&lt;/a&gt;してるのがすごく可愛いくて、がんばってます、みたいノリにすごく親近感をもってしまった。&lt;br /&gt;
あとは&lt;a href="http://www.ark-web.jp/"&gt;アークウェブ&lt;/a&gt;さんの&lt;a href="http://www.ark-web.jp/resources.html"&gt;お仕事状況&lt;/a&gt;ってのも、手動更新かもしれないけど、なんかやる気がみえていいと思う。&lt;br /&gt;
&lt;br /&gt;
うちの会社界隈はちょっと前に全員&lt;a href="http://www.google.com/talk/"&gt;Google Talk&lt;/a&gt;を使うように統一してたので、ステータスとってページに載せられないかなと思ってやってみた。&lt;br /&gt;
&lt;br /&gt;
1. ステータスを収集するJabberクライアントをつくってみんなに登録してもらう。&lt;br /&gt;
2. ログイン状態を監視して、集計値をWebから見えるとこに置く。&lt;br /&gt;
3. あとは&lt;a href="http://www.fork.co.jp/"&gt;表示&lt;/a&gt;するだけ、だけなんだけど、なにげに手間だったな。。。&lt;br /&gt;
&lt;br /&gt;
&lt;img src="http://lh6.ggpht.com/junji.shiokawa/SFrfeUUyDqI/AAAAAAAAOgk/PSYsVdZTZOg/s800/WS000004.jpg" /&gt;&lt;br /&gt;
&lt;br /&gt;
小さっ。&lt;br /&gt;
&lt;br /&gt;
まーあとはきっとデザイナさんが素敵な表示にしてくれるに違いない。一応&lt;pre&gt;アクティブユーザ数:ログインユーザ数&lt;/pre&gt;で5分ぐらいで更新されるようになってる。じつはアニメーションもしてる。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-240681091680643772?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=YNaqukVEzSg:eDFlQGsvWXQ:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=YNaqukVEzSg:eDFlQGsvWXQ:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=YNaqukVEzSg:eDFlQGsvWXQ:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=YNaqukVEzSg:eDFlQGsvWXQ:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/YNaqukVEzSg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/240681091680643772/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=240681091680643772" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/240681091680643772?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/240681091680643772?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/YNaqukVEzSg/blog-post.html" title="会社のホームページにオンライン状態を表示" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/junji.shiokawa/SFrfeUUyDqI/AAAAAAAAOgk/PSYsVdZTZOg/s72-c/WS000004.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2008/06/blog-post.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4CRX84cSp7ImA9WxdXFUU.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-8099546203961948708</id><published>2008-06-16T04:22:00.012+09:00</published><updated>2008-06-28T01:26:04.139+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-28T01:26:04.139+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="misc" /><category scheme="http://www.blogger.com/atom/ns#" term="amazon" /><title>TwitterからFriendFeed通してPipesで加工してAmazonでごちゃごちゃ</title><content type="html">&lt;a href="http://konomys.jp/"&gt;「このミステリーがすごい」&lt;/a&gt;にインスパイアされて勝手に「この漫画がすごい」と&lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt;につぶやいていた。&lt;br /&gt;
ある日友人からリストでとってこれんのかと言われ、&lt;a href="http://twitter.com/help/api"&gt;API&lt;/a&gt;を参照しようとしたけど、&lt;a href="http://friendfeed.com/"&gt;FriendFeed&lt;/a&gt;のほうがレスポンスよさそうだったので、&lt;a href="http://friendfeed.com/api/"&gt;こっち&lt;/a&gt;をつかってみよう、と思ったのがはじまり。&lt;br /&gt;
結局コード書かないで、&lt;ol&gt;&lt;li&gt;Twitterで「この漫画がすごい 竹光侍」とかつぶやく&lt;/li&gt;&lt;li&gt;FriendFeedで「この漫画がすごい」の文字列検索をしてRSSを生成&lt;/li&gt;&lt;li&gt;&lt;a href="http://pipes.yahoo.com/pipes/"&gt;Pipes&lt;/a&gt;で題名だけ抽出したあとAmazonの&lt;a href="https://affiliate.amazon.co.jp/"&gt;アソシエイト&lt;/a&gt;をくっつけてリンク生成&lt;/li&gt;&lt;li&gt;同時にBadge(ブログパーツ)化できるのでそれをブログに&lt;a href="#comic"&gt;貼る&lt;/a&gt;&lt;/li&gt;&lt;li&gt;(ﾟдﾟ)ｳﾏｰ?&lt;/li&gt;&lt;/ol&gt;とサービスが連携していく様に感動。まあこの場合FriendFeedとか余計なのかもだけど、作り方は下記の通り。&lt;h4&gt;FriendFeedで検索してRSS化&lt;/h4&gt;気軽に&lt;a href="http://friendfeed.com/search/advanced"&gt;Advanced Search&lt;/a&gt;から検索して&lt;br /&gt;
&lt;img src="http://lh4.ggpht.com/junji.shiokawa/SFV1R9XPVAI/AAAAAAAAOeQ/7-JTPvlJeFM/s800/ffasc1.jpg" /&gt;&lt;br /&gt;
下のほうにあるRSSアイコンから&lt;br /&gt;
&lt;img src="http://lh5.ggpht.com/junji.shiokawa/SFV3UNXPVBI/AAAAAAAAOew/r7M3PVBYeCQ/s800/ffasc2.jpg" /&gt;&lt;br /&gt;
フィードのURLを表示すれば毎回ここからリストが得られる。&lt;br /&gt;
URL的には&lt;br /&gt;
&lt;a href="http://friendfeed.com/search?q=この漫画がすごい&amp;service=twitter&amp;who=howking"&gt;http://friendfeed.com/search?q=この漫画がすごい&amp;service=twitter&amp;who=howking&lt;/a&gt;&lt;br /&gt;
わかりやすい。&lt;h4&gt;Pipesでごちゃごちゃする&lt;/h4&gt;Pipesはさる&lt;a href="http://twitter.com/modernica73"&gt;御大&lt;/a&gt;から教えていただいて、感動した。&lt;br /&gt;
&lt;a href="http://picasaweb.google.com/junji.shiokawa/mMqgqF/photo?authkey=ruX46lMUZBE#5212207455988044834"&gt;&lt;img src="http://lh5.ggpht.com/junji.shiokawa/SFV7ENXPVCI/AAAAAAAAOfQ/dk-vGf5wB1w/s800/WS000000.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
ある意味プログラミングするよりややこしい気がするし、使い方間違ってる気がするけど設定した方法は下記の通り。&lt;ol&gt;&lt;li&gt;Source-&gt;FetchFeed&lt;/li&gt;RSSの元ソースにFriendFeedから生成したURLを指定する&lt;li&gt;Operators-&gt;Regex&lt;/li&gt;タイトルから「この漫画がすごい 」という文字列を削除する&lt;li&gt;Operators-&gt;Rename&lt;/li&gt;元のリンクがTwitterに飛んでしまうので、別のエレメント(olink)にしてしまう。&lt;li&gt;Operators-&gt;Rename&lt;/li&gt;タイトルの漫画名からリンク生成したいので"Copy As"を使ってlinkエレメントを生成。&lt;li&gt;Operators-&gt;Regex&lt;/li&gt;linkエレメントに入った漫画名を正規表現でAmazonのアソシエイトURLで置きかえる&lt;br /&gt;
http://www.amazon.co.jp/gp/search?ie=UTF8&amp;tag=howking-22&amp;index=books&amp;linkCode=ur2&amp;camp=247&amp;creative=1211&amp;keywords=$1&lt;br /&gt;
$1には&lt;br /&gt;
^(.*)$&lt;br /&gt;
で指定した文字列が入る&lt;li&gt;Pipe Output&lt;/li&gt;で出来上がりの確認。&lt;a href="http://pipes.yahoo.com/pipes/pipe.info?_id=1oUdUxY53RGGPMB1GsevXg"&gt;こちら&lt;/a&gt;からソースや表示の確認ができる。&lt;br /&gt;
あとはここから&lt;br /&gt;
&lt;a href="http://picasaweb.google.com/junji.shiokawa/mMqgqF/photo?authkey=ruX46lMUZBE#5212210741638026290"&gt;&lt;img src="http://lh6.ggpht.com/junji.shiokawa/SFV-DdXPVDI/AAAAAAAAOfw/Mcq8_E0lq6U/s800/WS000002.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;
の「Get as a Badge」をクリックしてブログに&lt;a href="#comic"&gt;貼る&lt;/a&gt;だけ。
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-8099546203961948708?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=Xtg7auGGcQg:rvfuJRwMqYY:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=Xtg7auGGcQg:rvfuJRwMqYY:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=Xtg7auGGcQg:rvfuJRwMqYY:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=Xtg7auGGcQg:rvfuJRwMqYY:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/Xtg7auGGcQg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/8099546203961948708/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=8099546203961948708" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/8099546203961948708?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/8099546203961948708?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/Xtg7auGGcQg/twitterfriendfeedpipesamazon.html" title="TwitterからFriendFeed通してPipesで加工してAmazonでごちゃごちゃ" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/junji.shiokawa/SFV1R9XPVAI/AAAAAAAAOeQ/7-JTPvlJeFM/s72-c/ffasc1.jpg" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2008/06/twitterfriendfeedpipesamazon.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcHRnY7eSp7ImA9WxdXFUU.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-5413575422998356007</id><published>2008-06-12T21:20:00.005+09:00</published><updated>2008-06-28T01:27:17.801+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-28T01:27:17.801+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="misc" /><category scheme="http://www.blogger.com/atom/ns#" term="gentoo" /><title>LVS(ipvsadm)で安全にシステムリリース</title><content type="html">システムのアップデートでは規模が大きくなってくるほど切り替えのタイミングが一番危険で、予期しにくい問題が発生しがち。&lt;br /&gt;
どんなにがんばってデバックをしても結局本番で稼働させてみたらエラーになってしまった、とか置き換えの手順が複雑でミスった、とかそれを回避するのに長ったらしいダウンタイムを予定したりとか。&lt;br /&gt;
もちろん本番で動かさないとどうしてもわからないことはあるにせよ、限りなく本番と同じ環境で動かしつつ、切換えを一瞬にして安全に行うのに自分が好んで使う手順は下記の通り。&lt;br /&gt;
&lt;br /&gt;
前提条件。&lt;ul&gt;&lt;li&gt;Webサーバが複数台の同じ構成で運用されていること&lt;/li&gt;1台でもApacheをポートを分けて立ち上げるとかで対応できるかも&lt;li&gt;上位ルータで&lt;a href="http://www.netfilter.org/"&gt;Netfilter&lt;/a&gt;(iptables)と&lt;a href="http://www.linuxvirtualserver.org/"&gt;LVS&lt;/a&gt;(ipvsadm)が利用されていること&lt;/li&gt;もちろんお高い専用ルータや、1台に全部入れてポートで振り分けとかお洒落(?)なことしてても可能。&lt;/ul&gt;
想定しているネットワーク構成は下記の通り。&lt;pre&gt;[一般ユーザ]     [テスト環境]
     |             ゲートウェイIPアドレス: 222.151.197.yyy
     |                 |
     +--------+--------+
              |
       (インターネット)
              |
           [ルータ]
              コンテンツURL: http://www.foo.com/
              グローバルIPアドレス: 202.53.20.xxx
              |
     +--------+---------+-------------+
     |                  |             |
     | (本番コンテンツ) |             |
     |                  |             |
 [Webサーバ1]     [Webサーバ2]  [開発用サーバ]
 192.168.0.1      192.168.0.2&lt;/pre&gt;手順の概要は下記の通り。&lt;ol&gt;&lt;li&gt;まず[Webサーバ2]を更新するとして、[ルータ]に[一般ユーザ]からの接続を切る設定をする&lt;/li&gt;&lt;li&gt;[一般ユーザ]は[Webサーバ1]にしか接続されないので安心して[Webサーバ2]を更新する。&lt;/li&gt;&lt;li&gt;[ルータ]に[テスト環境]からアクセスがあった時「のみ」[Webサーバ2]に接続するように設定する&lt;/li&gt;&lt;li&gt;[テスト環境]からはほぼ本番公開時と同じデバックが行える。&lt;/li&gt;&lt;li&gt;リリースの日時になったら、[一般ユーザ]のアクセスを[Webサーバ1]から[Webサーバ2]に切り替えるだけ。一瞬。問題が発生してしまったら、[Webサーバ1]に戻すのも一瞬。&lt;/li&gt;&lt;/ol&gt;巷では&lt;a href="http://www.vergenet.net/linux/ldirectord/"&gt;ldirectord&lt;/a&gt;とか&lt;a href="http://www.keepalived.org/"&gt;keepalived&lt;/a&gt;とかで管理するのが一般的だけど、男は黙ってコマンドラインの方法を書いておく。&lt;pre&gt;# 最初は元々の設定
# 202.53.20.xxx宛のパケットにFWM(ファイアーウォールマーク)の1番をつける
iptables -t mangle -D PREROUTING -d 202.53.20.xxx -p tcp -m tcp --dport 80 -j MARK --set-mark 1
# FWM1に対してロードバランスする設定を追加
ipvsadm -A -f 1 -s wlc
ipvsadm -a -f 1 -r 192.168.0.1:80 -m -w 1
ipvsadm -a -f 1 -r 192.168.0.2:80 -m -w 1

# こっからが更新手順
# 振り分けのウェイトを0にして接続がなくなるのを確認
ipvsadm -e -f 1 -r 192.168.0.2:80 -m -w 0
ipvsadm -Ln | grep -E -A2 "^FWM.*90"
FWM  1 wlc
   -&gt; 192.168.0.1:80              Masq    1      17         357
   -&gt; 192.168.0.2:80              Masq    0      0          0
# [Webサーバ2]への接続が0になっていればOK

# テスト環境からのアクセスはFWM2をつけて[Webサーバ2]に割り振りする
# マークは順番に評価されて最後にマッチしたものがセットされるの(確か)で、
# -Aを使うか-Iを使うかは場合による
iptables -t mangle -A PREROUTING -d 202.53.20.xxx -s 222.151.197.yyy -p tcp -m tcp --dport 80 -j MARK --set-mark 2
ipvsadm -A -f 2 -s wlc
ipvsadm -a -f 2 -r 192.168.0.2:80 -m -w 1

# 用意が完了したので、[Webサーバ2]にファイルをアップして更新する。
# テスト環境からのアクセスは全て[Webサーバ2]に飛ぶのでクライアントは
# 特別な設定を意識することなくテストができる。

# テストOKだったら切換え作業
# 一般ユーザに[Webサーバ2]への接続を復活させ、[Webサーバ1]の接続を切る
ipvsadm -e -f 1 -r 192.168.0.2:80 -m -w 1
ipvsadm -e -f 1 -r 192.168.0.1:80 -m -w 0

# 問題発生! すぐに直らないバグだったら[Webサーバ1]に戻す
ipvsadm -e -f 1 -r 192.168.0.1:80 -m -w 1
ipvsadm -e -f 1 -r 192.168.0.2:80 -m -w 0

# テスト完了して問題なかったら設定の掃除をして終り
# [Webサーバ1]も更新した上で再接続(ここを同じ手順で個別にテストしてもいい)
ipvsadm -e -f 1 -r 192.168.0.1:80 -m -w 1
# FWM2はもう使わないので削除
ipvsadm -d -f 2 -r 192.168.0.2:80
ipvsadm -D -f 2
iptables -t mangle -D PREROUTING -d 202.53.20.xxx -s 222.151.197.yyy -p tcp -m tcp --dport 80 -j MARK --set-mark 2&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-5413575422998356007?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=z-et2U_EwPA:r3tGknoMlKI:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=z-et2U_EwPA:r3tGknoMlKI:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=z-et2U_EwPA:r3tGknoMlKI:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=z-et2U_EwPA:r3tGknoMlKI:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/z-et2U_EwPA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/5413575422998356007/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=5413575422998356007" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/5413575422998356007?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/5413575422998356007?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/z-et2U_EwPA/lvsipvsadm.html" title="LVS(ipvsadm)で安全にシステムリリース" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2008/06/lvsipvsadm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUANQHk4fip7ImA9WxdRGE8.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-1285182038819553335</id><published>2008-06-07T16:06:00.003+09:00</published><updated>2008-06-07T16:29:51.736+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-07T16:29:51.736+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gttodo" /><title>todo.shをGoogle Talk経由で使う4</title><content type="html">&lt;a href="http://todotxt.com/"&gt;todo.sh&lt;/a&gt;の使い方をもっかい見直してみたので、そのメモを書いておく。もちろん下記のコマンドは &lt;a href="gtalk:chat?jid=gttodo@gmail.com"&gt;gttodo@gmail.com&lt;/a&gt; を経由する場合の話であって、普通にコマンドラインで打つ場合はtodo.shを頭につけたり、日本語入力の設定をしなければいけない。

&lt;h4&gt;TODOを追加する&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;add @fooweb サンプル&lt;/li&gt;&lt;li&gt;a @fooweb サンプル&lt;/li&gt;foowebのプロジェクトでのTODOを追加。本家ではp:foowebとか+foowebとかが紹介されてるけど、多分なんでもいーんだと思う。ちなみに、先頭文字からソートがかかるので、表示順を気にするのであれば、最初の文字でグループ化させたほうがいいと思う。&lt;li&gt;a 06/03 @fooweb サンプル2&lt;/li&gt;&lt;li&gt;a 06/04 @barsys サンプル3&lt;/li&gt;これは日付でソートかけることを目的とした登録の仕方。※拡張 「08/06/04/13:24」 という書式で登録した場合はその時刻に知らせてくれる。&lt;/ul&gt;
&lt;h4&gt;TODOを修正する&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;append 1 テスト&lt;/li&gt;&lt;li&gt;app 1 テスト&lt;/li&gt;appendとlistした時に表示される番号で文言の後に追加ができる。&lt;pre&gt;@fooweb サンプル テスト&lt;/pre&gt;&lt;li&gt;prepend 1 06/14&lt;/li&gt;&lt;li&gt;prep 1 06/14&lt;/li&gt;&lt;pre&gt;06/14 @fooweb サンプル テスト&lt;/pre&gt;prependとlistした時に表示される番号で文言の最初に挿入ができる。&lt;li&gt;replace 1 06/13 @fooweb サンプル更新&lt;/li&gt;完全に置き換えをするにはreplaceコマンドを使用&lt;pre&gt;06/13 @fooweb サンプル更新&lt;/pre&gt;&lt;li&gt;del 1&lt;/li&gt;&lt;li&gt;rm 1&lt;/li&gt;del,rmでTODOが削除される。実際にこの時点ではまだ.bakファイルに保存されている。&lt;li&gt;do 1&lt;/li&gt;TODOが完了したらdoする。この時点では表から消されなくて先頭にxと日付が記録される。&lt;pre&gt;01 x 2008-06-03 06/13 @fooweb テスト更新&lt;/pre&gt;&lt;li&gt;pri 1 a&lt;/li&gt;&lt;li&gt;p 1 a&lt;/li&gt;優先度(プライオリティ)を設定するにはpriコマンド+[A-Z]が使える。プライオリティと言っても先頭に(A)とつくだけで、ソートされる関係上見やすくなる、というだけ。表示上はprepで先頭に文字を挿入すると後にずれる。※拡張 プライオリティがAであれば、GoogleTalkで離席後やログイン時に知らせてくれる。
&lt;/ul&gt;
&lt;h4&gt;TODOを表示する&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;list&lt;/li&gt;&lt;li&gt;ls&lt;/li&gt;全てのTODOを表示する。&lt;li&gt;listall&lt;/li&gt;&lt;li&gt;lsa&lt;/li&gt;全てのTODO及びDONE(完了したもの)を表示する。ちなみにDONEの項目はあとから編集できない&lt;li&gt;ls @fooweb&lt;/li&gt;&lt;li&gt;lsa 06/.*&lt;/li&gt;&lt;li&gt;lsa 06 08&lt;/li&gt;ls移行は正規表現による検索ができるし、単純にスペースで区切っても検索してくれる。&lt;li&gt;listpri a&lt;/li&gt;&lt;li&gt;lsp a&lt;/li&gt;優先度(プライオリティ)がAのもののみ表示する。&lt;/ul&gt;
&lt;h4&gt;その他&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;remdump&lt;/li&gt;重複行を削除してくれるらしい&lt;li&gt;report&lt;/li&gt;report.txtにtodoとDONEの数を記録して表示。&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-1285182038819553335?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=Kz8i1EQfvj0:ytQ6rrTQHAk:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=Kz8i1EQfvj0:ytQ6rrTQHAk:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=Kz8i1EQfvj0:ytQ6rrTQHAk:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=Kz8i1EQfvj0:ytQ6rrTQHAk:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/Kz8i1EQfvj0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/1285182038819553335/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=1285182038819553335" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/1285182038819553335?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/1285182038819553335?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/Kz8i1EQfvj0/todoshgoogle-talk4.html" title="todo.shをGoogle Talk経由で使う4" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2008/06/todoshgoogle-talk4.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMCRHs9eCp7ImA9WxdRGE8.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-6690162796147143075</id><published>2008-06-07T15:52:00.004+09:00</published><updated>2008-06-07T16:24:25.560+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-07T16:24:25.560+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gttodo" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>todo.shをGoogle Talk経由で使う3</title><content type="html">&lt;b&gt;※ 最新情報は&lt;a href="http://bba-ltom.blogspot.com/search/label/gttodo"&gt;こちら&lt;/a&gt;。&lt;/b&gt;

「&lt;a href="http://bba-ltom.blogspot.com/2008/06/todoshgoogle-talk.html"&gt;todo.shをGoogle Talk経由で使う&lt;/a&gt;」をさらにカスタマイズ。プライオリティをAに設定しているTODOのみ離席の後や、ログイン後に話しかけてくれる。よーわけっこう重要ではやめにやらなければいけないことをタイミングよく知らせてほしかったので入れてみた。
&lt;pre&gt;--- gttodo.php  2008/06/02 20:47:17 1.2
+++ gttodo.php  2008/06/07 06:50:35 1.3
@@ -1,6 +1,7 @@
 &amp;lt;?php
 require("class.jabber.php");
 define('ME','junji.shiokawa@gmail.com');
+$_i=true;
 $j = new Jabber();
 $j-&amp;gt;server = 'gmail.com';
 $j-&amp;gt;connect_server = 'talk.google.com';
@@ -15,22 +16,24 @@
 $j-&amp;gt;RosterUpdate();
 $j-&amp;gt;SendPresence();
 chat(ME,'up');
+$_i=false;
 while(1){
     if($j-&amp;gt;connected == FALSE){
         $j-&amp;gt;Disconnect();
         exit;
     }
-
-    $c=("grep `date \"+%y/%m/%d/%H:%M\"` /service/gttodo/data/*.todo");
-    $p=popen($c, "r");
-    while (!feof($p)) {
-        $l=explode(".todo:",substr(fgets($p, 1024),21));
-        if($l[0] &amp;&amp; $l[1]){
-            chat($l[0],$l[1]);
+
+    $r=array();
+    $r=explode("\n",com("grep `date \"+%y/%m/%d/%H:%M\"` /service/gttodo/data/*.todo"));
+    foreach ($r as $l) {
+        $t=explode(".todo:",substr($l,21));
+        if($t[0] &amp;&amp; $t[1]){
+            chat($t[0],$t[1]);
         }
     }
-    pclose($p);

+    com("rm -rf /mnt/supervise/gttodo/data/*.touch");
+
     $j-&amp;gt;CruiseControl(60);
  }

@@ -44,19 +47,8 @@
         $j-&amp;gt;Disconnect();
         exit;
     }else{
-
-        $c="/bin/bash /mnt/supervise/gttodo/todo.sh -f -d /mnt/supervise/gttodo/data/$e.cfg ". ecmd($b) ." 2&amp;gt;&amp;1";
-        $p=popen($c, "r");
-        while (!feof($p)) {
-            $m.=fgets($p, 1024);
-        }
-        pclose($p);
-        if(!trim($m)){
-            $m='ok';
-        }
-        chat($e,$m);
+        chat($e,todo($e,$b));
     }
-
 }

 function Handler_presence_subscribe($p) {
@@ -67,14 +59,21 @@
 }

 function Handler_presence_available($p) {
-    global $j;
+    global $j,$_i;
     $e = email($j-&amp;gt;GetInfoFromPresenceFrom($p));
-    exec("echo 'TODO_DIR=/mnt/supervise/gttodo/data
+    com("echo 'TODO_DIR=/mnt/supervise/gttodo/data
 TODO_FILE=$e.todo
  DONE_FILE=$e.done
   REPORT_FILE=$e.report
    TMP_FILE=$e.tmp
  ' &amp;gt; /mnt/supervise/gttodo/data/$e.cfg");
+
+    $m=todo($e,"lsp a");
+    $t="/mnt/supervise/gttodo/data/$e.touch";
+    if($m != 'ok' &amp;&amp; ! file_exists($t) &amp;&amp; ! $_i){
+        chat($e,$m);
+        com("touch $t");
+    }
 }

 function chat($e,$m) {
@@ -96,4 +95,22 @@
     return $c;
 }

+function todo ($e,$a) {
+    $m=com("/bin/bash /mnt/supervise/gttodo/todo.sh -f -d /mnt/supervise/gttodo/data/$e.cfg ". ecmd($a) ." 2&amp;gt;&amp;1");
+    if(!trim($m)){
+        $m='ok';
+    }
+    return $m;
+}
+
+function com ($c) {
+    $p=popen($c, "r");
+    while (!feof($p)) {
+        $m.=fgets($p, 1024);
+    }
+    pclose($p);
+    echo "COM: $c -&amp;gt; [$m]\n";
+    return $m;
+}
+
 ?&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-6690162796147143075?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=TPNva3fRmV8:jctgzq9Bg5k:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=TPNva3fRmV8:jctgzq9Bg5k:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=TPNva3fRmV8:jctgzq9Bg5k:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=TPNva3fRmV8:jctgzq9Bg5k:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/TPNva3fRmV8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/6690162796147143075/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=6690162796147143075" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/6690162796147143075?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/6690162796147143075?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/TPNva3fRmV8/todoshgoogle-talk3.html" title="todo.shをGoogle Talk経由で使う3" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2008/06/todoshgoogle-talk3.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIHQno-eyp7ImA9WxdRGE8.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-5697714405561727181</id><published>2008-06-03T05:47:00.006+09:00</published><updated>2008-06-07T16:08:53.453+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-07T16:08:53.453+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gttodo" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>todo.shをGoogle Talk経由で使う2</title><content type="html">&lt;b&gt;※ 最新情報は&lt;a href="http://bba-ltom.blogspot.com/search/label/gttodo"&gt;こちら&lt;/a&gt;。&lt;/b&gt;

「&lt;a href="http://bba-ltom.blogspot.com/2008/06/todoshgoogle-talk.html"&gt;todo.shをGoogle Talk経由で使う&lt;/a&gt;」にリマインダ機能をつけた、といってもごく簡単に。&lt;pre&gt;08/06/03/05:42&lt;/pre&gt;という書式の文字列を探しにって発見したらその行をユーザに返すだけ。使い方はこんな感じ&lt;pre&gt;Junji: ls
gttodo: 02 (A) 月末の経費精算がまだだ。。。
01 暇になったらリマインダー機能をつける @gttodo
--
TODO: 2 tasks in junji.shiokawa@gmail.com.todo.
Junji: app 1 08/06/03/06:00
gttodo: 暇になったらリマインダー機能をつける @gttodo
Junji: ls
gttodo: 02 (A) 月末の経費精算がまだだ。。。
01 暇になったらリマインダー機能をつける @gttodo 08/06/03/06:00
--
TODO: 2 tasks in junji.shiokawa@gmail.com.todo.
# 指定の時間になると...
暇になったらリマインダー機能をつける @gttodo 08/06/03/06:00
# と話しかけられる。&lt;/pre&gt;差分ファイルはこちら。(ちなみに、CruiseControlでチェックしているので、指定時間ぴったりかどうか怪しいし、タイミングによってはスルーされることもあるかも。)&lt;pre&gt;--- gttodo.php  2008/06/02 20:45:54 1.1
+++ gttodo.php  2008/06/02 20:47:17 1.2
@@ -21,7 +21,17 @@
         exit;
     }

-    $j-&gt;CruiseControl(300);
+    $c=("grep `date \"+%y/%m/%d/%H:%M\"` /service/gttodo/data/*.todo");
+    $p=popen($c, "r");
+    while (!feof($p)) {
+        $l=explode(".todo:",substr(fgets($p, 1024),21));
+        if($l[0] &amp;amp;&amp;amp; $l[1]){
+            chat($l[0],$l[1]);
+        }
+    }
+    pclose($p);
+
+    $j-&gt;CruiseControl(60);
  }

 function Handler_message_chat($p) {
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-5697714405561727181?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=zjUp-8wV-jc:qZPqyRMlUIc:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=zjUp-8wV-jc:qZPqyRMlUIc:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=zjUp-8wV-jc:qZPqyRMlUIc:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=zjUp-8wV-jc:qZPqyRMlUIc:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/zjUp-8wV-jc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/5697714405561727181/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=5697714405561727181" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/5697714405561727181?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/5697714405561727181?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/zjUp-8wV-jc/todoshgoogle-talk2.html" title="todo.shをGoogle Talk経由で使う2" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2008/06/todoshgoogle-talk2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUHR3c7cSp7ImA9WxdRFEk.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-5432525982559982107</id><published>2008-06-03T04:27:00.003+09:00</published><updated>2008-06-03T07:37:16.909+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-03T07:37:16.909+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="erlang" /><title>Erlang: どう書く？org に投稿3</title><content type="html">最近ご無沙汰だった&lt;a href="http://ja.doukaku.org/"&gt;どう書く？org&lt;/a&gt;。久しぶりに&lt;a href="http://ja.doukaku.org/user/744/"&gt;覗いた&lt;/a&gt;ら、プラス評価いただいてものとかがあって身に余る光栄、恐縮です。。。
ついでにちょこっと投稿したので、過去分と合わせて書いておく。&lt;ul&gt;&lt;li&gt;&lt;a href="http://ja.doukaku.org/170/"&gt;固定長データ&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ja.doukaku.org/179/"&gt;出力の一時停止と再開&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://ja.doukaku.org/94/"&gt;擬似lsの実装&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;% &lt;a href="http://erlang-users.jp/"&gt;erlang-users.jp&lt;/a&gt;とかまだ空いてるなぁ...
% とかつぶやいてみるテスト。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-5432525982559982107?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=Opsg0foiHsk:kzIT8TCicHs:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=Opsg0foiHsk:kzIT8TCicHs:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=Opsg0foiHsk:kzIT8TCicHs:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=Opsg0foiHsk:kzIT8TCicHs:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/Opsg0foiHsk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/5432525982559982107/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=5432525982559982107" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/5432525982559982107?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/5432525982559982107?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/Opsg0foiHsk/erlang-org-3.html" title="Erlang: どう書く？org に投稿3" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2008/06/erlang-org-3.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMMSXc4eyp7ImA9WxdRGE8.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-6980663416485452517</id><published>2008-06-01T08:46:00.006+09:00</published><updated>2008-06-07T16:08:08.933+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-07T16:08:08.933+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gttodo" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>todo.shをGoogle Talk経由で使う</title><content type="html">&lt;b&gt;※ 最新情報は&lt;a href="http://bba-ltom.blogspot.com/search/label/gttodo"&gt;こちら&lt;/a&gt;。&lt;/b&gt;

もうTODO管理なんてテキストファイルでいいじゃん、て思いつつも&lt;a href="http://bba-ltom.blogspot.com/2008/03/prism-09.html"&gt;こっち&lt;/a&gt;の使い方で&lt;a href="http://www.rememberthemilk.com/"&gt;RTM&lt;/a&gt;も併用してて、でもそういえば&lt;a href="http://todotxt.com/"&gt;todo.sh&lt;/a&gt;とか昔あったなとふいに思い出したので、IM(メッセンジャー)経由で使えるようにしてみた。使えるかは微妙。&lt;pre&gt;設定ID: &lt;a href="gtalk:chat?jid=gttodo@gmail.com"&gt;gttodo@gmail.com&lt;/a&gt;&lt;/pre&gt;もちろんGoogleTalkだけじゃなくiChatやJabberクライアント経由でも使えるはず。一応マルチユーザ対応。コマンドライン引数をそのまま渡して結果を受けとるだけ、という恐しい仕様なのでいたずら禁止、自己責任で。&lt;pre&gt;Junji: -h
gttodo: Usage: todo.sh [-fhpqvV] [-d todo_config] action [task_number] [task_description]

Actions:
add "THING I NEED TO DO p:project @context"
a "THING I NEED TO DO p:project @context"
Adds TODO ITEM to your todo.txt.
...(そのまんまやん)
Junji: a 暇になったらリマインダー機能をつける @gttodo
gttodo: ok
Junji: a 時計の再修理の為、東急ハンズに行く
gttodo: ok
Junji: a 月末の経費精算がまだだ。。。
gttodo: ok
Junji: ls
gttodo: 02 時計の再修理の為、東急ハンズに行く
01 暇になったらリマインダー機能をつける @gttodo
03 月末の経費精算がまだだ。。。
--
TODO: 3 tasks in junji.shiokawa@gmail.com.todo.
Junji: pri 3 A
gttodo: ok
Junji: do 2
gttodo: 時計の再修理の為、東急ハンズに行く
Junji: lsa
gttodo: 003 (A) 月末の経費精算がまだだ。。。
002 x 2008-06-01 時計の再修理の為、東急ハンズに行く
001 暇になったらリマインダー機能をつける @gttodo
Junji: archive
gttodo: ok
Junji: ls
gttodo: 02 (A) 月末の経費精算がまだだ。。。
01 暇になったらリマインダー機能をつける @gttodo
--
TODO: 2 tasks in junji.shiokawa@gmail.com.todo.
Junji: ls gttodo
gttodo: 01 暇になったらリマインダー機能をつける @gttodo&lt;/pre&gt;自分だけの環境で使いたい場合は下記のソースでどうぞ(Python使える人は&lt;a href="http://todotxt.com/library/todo_jabber_bot/"&gt;こっち&lt;/a&gt;にもっとまともな実装がある)。&lt;pre&gt;&amp;lt;?php
require("class.jabber.php");
define('ME','junji.shiokawa@gmail.com');
$j = new Jabber();
$j-&amp;gt;server = 'gmail.com';
$j-&amp;gt;connect_server = 'talk.google.com';
$j-&amp;gt;port = 5222;
$j-&amp;gt;username = 'gttodo';
$j-&amp;gt;password = '*****';
$j-&amp;gt;resource = 'fork';
$j-&amp;gt;log_filename = 'php://stdout';
$j-&amp;gt;enable_logging = true;
$j-&amp;gt;Connect();
$j-&amp;gt;SendAuth();
$j-&amp;gt;RosterUpdate();
$j-&amp;gt;SendPresence();
chat(ME,'up');
while(1){
    if($j-&amp;gt;connected == FALSE){
        $j-&amp;gt;Disconnect();
        exit;
    }
    $j-&amp;gt;CruiseControl(300);
 }

function Handler_message_chat($p) {
 global $j;
 $e = email($j-&amp;gt;GetInfoFromMessageFrom($p));
 $b = body($j-&amp;gt;GetInfoFromMessageBody($p));
    
 if ( $e == ME &amp;&amp; $b == "kill" ) {
        chat($e,'ok');
        $j-&amp;gt;Disconnect();
        exit;
    }else{

        $c="/bin/bash /mnt/supervise/gttodo/todo.sh -f -d /mnt/supervise/gttodo/data/$e.cfg ". ecmd($b) ." 2&amp;gt;&amp;1";
        $p=popen($c, "r");
        while (!feof($p)) {
            $m.=fgets($p, 1024);
        }
        pclose($p);
        if(!trim($m)){
            $m='ok';
        }
        chat($e,$m);
    }
    
}

function Handler_presence_subscribe($p) {
    global $j;
    $f = $j-&amp;gt;GetInfoFromPresenceFrom($p);
    $j-&amp;gt;SubscriptionAcceptRequest($f);
    $j-&amp;gt;RosterUpdate();
}

function Handler_presence_available($p) {
    global $j;
    $e = email($j-&amp;gt;GetInfoFromPresenceFrom($p));
    exec("echo 'TODO_DIR=/mnt/supervise/gttodo/data
TODO_FILE=$e.todo
DONE_FILE=$e.done
REPORT_FILE=$e.report
TMP_FILE=$e.tmp
' &amp;gt; /mnt/supervise/gttodo/data/$e.cfg");
}

function chat($e,$m) {
    global $j;
    $j-&amp;gt;SendMessage($e, "chat", NULL, array("body" =&amp;gt;$m));
}

function email($f) {
    return strtolower(array_shift(explode('/',$f)));
}

function body ($b) {
    return trim(mb_convert_kana($b,'KVas','UTF-8'));
}

function ecmd ($c) {
    $c=preg_replace('/-f|-d/','',$c);
    $c=preg_replace('/([#&amp;;\|`&amp;lt;&amp;gt;\^\(\)\[\]\{\}\$\\\])/','\\\$1',$c);
    return $c;
}

?&amp;gt;&lt;/pre&gt;※IM系のネタでは&lt;a href="http://bba-ltom.blogspot.com/2008/05/google-talk.html"&gt;こっち&lt;/a&gt;で&lt;a href="gtalk:chat?jid=gtgchat@gmail.com"&gt;gtgchat@gmail.com&lt;/a&gt;を登録すると使えるグループチャットもどきもつくってみた。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-6980663416485452517?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=iPt0e1ZC2mM:yCry2WJd5fU:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=iPt0e1ZC2mM:yCry2WJd5fU:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=iPt0e1ZC2mM:yCry2WJd5fU:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=iPt0e1ZC2mM:yCry2WJd5fU:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/iPt0e1ZC2mM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/6980663416485452517/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=6980663416485452517" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/6980663416485452517?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/6980663416485452517?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/iPt0e1ZC2mM/todoshgoogle-talk.html" title="todo.shをGoogle Talk経由で使う" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2008/06/todoshgoogle-talk.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAFQHk7eip7ImA9WxdREUo.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-478389909918507143</id><published>2008-05-30T19:10:00.005+09:00</published><updated>2008-05-31T05:01:51.702+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-31T05:01:51.702+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gentoo" /><title>Slony-Iでレプリケーション設定</title><content type="html">&lt;a href="http://www.postgresql.org/"&gt;PostgreSQL&lt;/a&gt;でレプリケーションできる&lt;a href="http://slony.info/"&gt;Slony-I&lt;/a&gt;は&lt;a href="http://www2b.biglobe.ne.jp/~caco/pgpool/"&gt;pgpool&lt;/a&gt;と一緒に使ってるけど、運用手順がけっこうしんどい。ある程度は運用スクリプトでカバーさせつつも、確実に再設定させる手順は下記の通り。(最近はGUIで&lt;a href="http://www.pgadmin.org/"&gt;pgAdmin III&lt;/a&gt;,&lt;a href="http://phppgadmin.sourceforge.net/"&gt;phppgadmin&lt;/a&gt;とかあるらしいけどどうなんだろう)&lt;ul&gt;&lt;li&gt;pgpoolの接続切り変え&lt;/li&gt;設定更新するのにスレーブDBのPostgreSQLをいったん落すので、pgpoolの接続先をマスターDBへ切り替える&lt;pre&gt;ssh web01 "perl -pi -e \"s/^backend_host_name = '.*'$/backend_host_name = 'master01'/\" /etc/pgpool.conf ; svc -du /service/pgpool"
ssh web02 "perl -pi -e \"s/^backend_host_name = '.*'$/backend_host_name = 'master01'/\" /etc/pgpool.conf ; svc -du /service/pgpool"&lt;/pre&gt;&lt;li&gt;PostgreSQLとSlonyIのサービスを落とす&lt;/li&gt;pgpoolは落ちてても接続が残ってたら面倒なので、Slony-Iを落して、PostgreSQLを再起動させる。&lt;pre&gt;#マスタ、スレーブのslonyを落す
svc -d /service/slony
ssh slave01 svc -d /service/slony
ssh slave02 svc -d /service/slony
# スレーブのPostgreSQLを再起動
ssh slave01 svc -diu /service/postgresql
ssh slave02 svc -diu /service/postgresql&lt;/pre&gt;※&lt;a href="http://cr.yp.to/daemontools.html"&gt;daemontools&lt;/a&gt;のrunスクリプトは&lt;a href="http://bba-ltom.blogspot.com/2008/05/daemontools.html"&gt;こちら&lt;/a&gt;&lt;li&gt;同期設定(Slony-I)の削除&lt;/li&gt;すでにレプリケーション設定をしていたら、削除しておかないと再設定できない。&lt;pre&gt;#!/bin/bash

slonik &amp;lt;&amp;lt;EOF
cluster name = pg_cluster;
node 1 admin conninfo='dbname=postgres host=master01 port=5432 user=postgres';
node 2 admin conninfo='dbname=postgres host=slave01  port=5432 user=postgres';
node 3 admin conninfo='dbname=postgres host=slave02  port=5432 user=postgres';
uninstall node (ID=1);
uninstall node (ID=2);
uninstall node (ID=3);
EOF
&lt;/pre&gt;このスクリプトも、master01だけこけるとslave01,slave02から消えなかったり、どうしても削除できないエラーが起きたりする場合は&lt;pre&gt;psql -h slave01 -U postgres postgres -e "drop schema _pg_cluster cascade;"&lt;/pre&gt;で綺麗に消えてくれる。&lt;li&gt;DBスキーマのコピー&lt;/li&gt;これで再設定する準備が整ったので、スレーブDBを一端クリアして準備する&lt;pre&gt;dropdb -U postgres postgres -h slave01
createdb -U postgres postgres -E EUC-JP -h slave01
pg_dump -s -U postgres postgres | psql -U postgres -d postgres -h slave01
vacuumdb -U postgres -afz -h slave01
# 最初はこれが必要かも
createlang -U postgres -h slave01 plpgsql postgres

dropdb -U postgres postgres -h slave02
createdb -U postgres postgres -E EUC-JP -h slave02
pg_dump -s -U postgres postgres | psql -U postgres -d postgres -h slave02
vacuumdb -U postgres -afz -h slave02&lt;/pre&gt;ホスト名間違えるとえらいかなしいことになるので注意。。。&lt;li&gt;マスタにレプリケーション設定&lt;/li&gt;マスターにて下記のスクリプトを実行&lt;pre&gt;#!/bin/bash

slonik &amp;lt;&amp;lt;EOF
cluster name = pg_cluster;
node 1 admin conninfo='dbname=postgres host=master01 port=5432 user=postgres';
node 2 admin conninfo='dbname=postgres host=slave01  port=5432 user=postgres';
node 3 admin conninfo='dbname=postgres host=slave02  port=5432 user=postgres';

init cluster (id=1, comment='node 1[master01]');
create set (id=1, origin=1, comment='postgres');
set add table (set id=1, origin=1, id=1,  fully qualified name = 'public.sample_table', comment='sample_table');
store node (id=2, comment='node 2[slave01]');
store node (id=3, comment='node 3[slave02]');
store path (server=1, client=2, conninfo='dbname=postgres host=master01 port=5432 user=postgres');
store path (server=2, client=1, conninfo='dbname=postgres host=slave01  port=5432 user=postgres');
store path (server=1, client=3, conninfo='dbname=postgres host=master01 port=5432 user=postgres');
store path (server=3, client=1, conninfo='dbname=postgres host=slave02  port=5432 user=postgres');
store listen (origin=1, provider=1, receiver=2);
store listen (origin=1, provider=1, receiver=3);
EOF&lt;/pre&gt;&lt;li&gt;スレーブにレプリケーション設定&lt;/li&gt;スレーブに設定を送る&lt;pre&gt;echo "cluster name = pg_cluster;
node 1 admin conninfo='dbname=postgres host=master01 port=5432 user=postgres';
node 2 admin conninfo='dbname=postgres host=slave01  port=5432 user=postgres';
subscribe set (id=1, provider=1,receiver=2, forward=no);
" | ssh slave01 "cat | slonik"
echo "cluster name = pg_cluster;
node 1 admin conninfo='dbname=postgres host=master01 port=5432 user=postgres';
node 3 admin conninfo='dbname=postgres host=slave02  port=5432 user=postgres';
subscribe set (id=1, provider=1,receiver=3, forward=no);
" | ssh slave02 "cat | slonik"&lt;/pre&gt;&lt;li&gt;同期開始&lt;/li&gt;いよいよSlony-Iを立ち上げて同期の開始。&lt;pre&gt;#マスターで立ち上げ
svc -u /service/slony
#スレーブで立ち上げ
ssh slave01 svc -u /service/slony
ssh slave02 svc -u /service/slony&lt;/pre&gt;これで同期がスタート。データの容量が大きいとpsコマンドでCOPYのプロセスが走ってるのが確認できる。あとは適当にSQL投げたり、&lt;a href="http://ossipedia.ipa.go.jp/documents/pgbench/pgdiff.html"&gt;これ&lt;/a&gt;使ったりして同期がうまくいっていることを確認する。&lt;li&gt;pgpoolの接続を戻す&lt;/li&gt;最後に最初に避難させていたpgpoolの接続先を戻す&lt;pre&gt;ssh web01 "perl -pi -e \"s/^backend_host_name = '.*'$/backend_host_name = 'slave01'/\" /etc/pgpool.conf ; svc -du /service/pgpool"
ssh web02 "perl -pi -e \"s/^backend_host_name = '.*'$/backend_host_name = 'slave02'/\" /etc/pgpool.conf ; svc -du /service/pgpool"&lt;/pre&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-478389909918507143?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=uueVRyqnb4A:ghX38R4hZ6g:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=uueVRyqnb4A:ghX38R4hZ6g:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=uueVRyqnb4A:ghX38R4hZ6g:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=uueVRyqnb4A:ghX38R4hZ6g:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/uueVRyqnb4A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/478389909918507143/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=478389909918507143" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/478389909918507143?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/478389909918507143?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/uueVRyqnb4A/sloy-i.html" title="Slony-Iでレプリケーション設定" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2008/05/sloy-i.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUGRXc5fip7ImA9WxdSF04.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-333651560284387749</id><published>2008-05-25T20:07:00.007+09:00</published><updated>2008-05-26T01:50:24.926+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-26T01:50:24.926+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="misc" /><category scheme="http://www.blogger.com/atom/ns#" term="gentoo" /><title>やっぱりdaemontoolsが好き</title><content type="html">新しい技術についていけてないだけなのかもしれないけど、昔から&lt;a href="http://cr.yp.to/daemontools.html"&gt;daemontools&lt;/a&gt;を愛用してきて卒業できそうにない(&lt;a href="http://smarden.org/runit/index.html"&gt;runit&lt;/a&gt;はちょっと気になる)。理由は下記の通り。&lt;ul&gt;&lt;li&gt;デーモンのを一元管理できる&lt;/li&gt;普通にinitスクリプトでできるだろと言われるかもしれないけど、qmailやdjbdnsを使うのに管理方法が別になるのがやだった。ちゃんと設定しておけば&lt;pre&gt;svc -d /service/*&lt;/pre&gt;で全てのサービスが一発で落せたりするのが使いやすい。
&lt;li&gt;ログをちゃんと保持できる&lt;/li&gt;普通syslogに吐いてくれるのだろうけど、独自なファイルに出力されると扱いに困ってしまう。個別のログを大量に出してきたり、リアルタイムで特定の文字列でフックしたい場合にはlogwatchやsyslogではちょっと力不足。
もちろん標準出力へのエラーに対応していないデーモンもあるけど、そこらへんはソースをちょっといじるだけで済む場合が多いので、新しくログの管理方法に悩まされることはほとんどない。
ネットワーク経由での保存もsocklogを使えば対応できる。&lt;li&gt;いわゆるデーモンが作りやすい&lt;/li&gt;自分でなにかのデーモンを作ろうと思ったら、その名が示すとおり処理に集中していれば他の管理を全てまかしておける。管理方法もログの扱い方も他のデーモンと同じように扱えるもわかりやすい。(ネットワーク系も&lt;a href="http://cr.yp.to/ucspi-tcp.html"&gt;ucspi-tcp&lt;/a&gt;を使うと楽)
&lt;/ul&gt;まあようわ、「全部daemontoolsでやる」ていう方針じゃないとほころびが見えてしまうけれど、まとまっていればそこそこ使いやすい。デーモン君達とは向き合う方法は下記の通り。&lt;pre&gt;# qmailで再送信
svc -a /service/qmail-send

# PostgreSQLで安全に落す
svc -di /service/postgresql

# プロセスのチェックがわかりやすい
pstree
-----
init-+-6*[agetty]
     |-svscan-+-supervise---qmail-send-+-qmail-clean
     |        |                        |-qmail-lspawn
     |        |                        `-qmail-rspawn
     |        |-6*[supervise---multilog]
     |        |-supervise---sshd---sshd---bash---pstree
     |        |-2*[supervise---socklog]
     |        |-supervise---tcpserver
     |        `-supervise---crond
     `-udevd
-----

# multilogは指定の容量になったら自動的に消してくれるけど、できるだけ
# 残しておきたい場合は以下のジョブをcronに追加しておく。
# 指定の容量を1日で使い果す時以外はログが消えることはない。
0 4  * * * find /var/log/multilog -name "@*" ! -name "*.bz2" -exec bzip2 {} \;

# 時刻の記録が人間には判別できないけど、それほど不都合にはならないと思う。
# 特定の日付と時間帯(2008/05/01 16時台)にシステムで起きた全てのイベント(ロ
# グ)を拾うコマンドは下記の通り。
cat /var/log/multilog/*/*/* | tai64nlocal | grep "^2008-05-01 16:" | sort
&lt;/pre&gt;古いのもあるけど、使ってきた起動スクリプトは下記の通り。
socklog-notify/run
&lt;pre&gt;#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/var/qmail/bin
MAILTO=root
HOST=`hostname -f`
PIPE=/var/socklog/.notify

if [ ! -p "${PIPE}" ]; then mkfifo -m 0620 "${PIPE}"; chown socklog:socklog "${PIPE}"; fi
exec &amp;lt;&amp;gt; "${PIPE}"
exec setuidgid socklog uncat -s1999 -t5 \
    sh -c "tai64nlocal | mailsubj Notify\@${HOST} ${MAILTO}"&lt;/pre&gt;dcron/log/run
&lt;pre&gt;#!/bin/sh

exec setuidgid dcronlog multilog t s2500000 n40 /var/log/multilog/dcron/main&lt;/pre&gt;dcron/run
&lt;pre&gt;#!/bin/sh

exec /usr/sbin/crond -f 2&amp;gt;&amp;1&lt;/pre&gt;slony/log/run
&lt;pre&gt;#!/bin/sh

exec setuidgid slonylog multilog t s2500000 n40 /var/log/multilog/slony/main&lt;/pre&gt;slony/run
&lt;pre&gt;#!/bin/sh

exec setuidgid slony env - slon [cluster_name] "[connection_string]" 2&amp;gt;&amp;1&lt;/pre&gt;statd/log/run
&lt;pre&gt;#!/bin/sh

exec setuidgid statdlog multilog t s2500000 n40 /var/log/multilog/statd/main&lt;/pre&gt;statd/run
&lt;pre&gt;#!/bin/bash

exec 2&amp;gt;&amp;1
exec rpc.statd -Fd -p 32765 -o 32766
&lt;/pre&gt;msessiond/log/run
&lt;pre&gt;#!/bin/sh

exec setuidgid msesslog multilog t s2500000 n40 /var/log/multilog/msessiond/main&lt;/pre&gt;msessiond/run
&lt;pre&gt;#!/bin/sh

MSESSION_DIR=/usr/local/phoenix/msession
ALLOWIP="-a 255.255.255.255/127.0.0.1 -a 255.255.255.0/192.168.0.0"
cd ${MSESSION_DIR}

exec 2&amp;gt;&amp;1
exec setuidgid msess ./msessiond \
        ${ALLOWIP} \
        -d 900 \
        -e 60 \
        -g globals \
        -A 5 \
        -S "/tmp/msession_data" \
        -F ./fileplug.so&lt;/pre&gt;socklog-klog/log/run
&lt;pre&gt;#!/bin/sh
exec 2&amp;gt; /var/socklog/.notify
exec setuidgid socklog multilog t s2500000 n40 /var/log/multilog/socklog-klog/main \
  -* +'* error *' e&lt;/pre&gt;socklog-klog/run
&lt;pre&gt;#!/bin/sh
exec &amp;lt;/proc/kmsg
exec 2&amp;gt;&amp;1
exec softlimit -m 2000000 socklog ucspi&lt;/pre&gt;socklog-unix/log/run
&lt;pre&gt;#!/bin/sh
exec 2&amp;gt; /var/socklog/.notify
exec setuidgid socklog multilog t s2500000 n40 /var/log/multilog/socklog-unix/main \
  -* +'* *.err: *' e&lt;/pre&gt;socklog-unix/run
&lt;pre&gt;#!/bin/sh
exec 2&amp;gt;&amp;1
exec softlimit -m 2000000 envuidgid socklog socklog unix /dev/log&lt;/pre&gt;qmail-smtpd/log/run
&lt;pre&gt;#!/bin/sh

exec setuidgid qmaill multilog t s2500000 n40 /var/log/multilog/qmail-smtpd/main&lt;/pre&gt;qmail-smtpd/run
&lt;pre&gt;#!/bin/sh
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
exec /usr/bin/softlimit -m 8000000 \
        /usr/bin/tcpserver -H -R -v -p -c 256 -x /etc/tcp.smtp.cdb \
        -u ${QMAILDUID} -g ${NOFILESGID} 0 smtp rblsmtpd /var/qmail/bin/qmail-smtpd 2&amp;gt;&amp;1&lt;/pre&gt;qmail-send/log/run
&lt;pre&gt;#!/bin/sh

exec setuidgid qmaill multilog t s2500000 n200 /var/log/multilog/qmail-send/main&lt;/pre&gt;qmail-send/run
&lt;pre&gt;#!/bin/sh
exec /var/qmail/rc&lt;/pre&gt;mountd/log/run
&lt;pre&gt;#!/bin/sh

exec setuidgid mountdlog multilog t s2500000 n40 /var/log/multilog/mountd/main&lt;/pre&gt;mountd/run
&lt;pre&gt;#!/bin/bash

exec 2&amp;gt;&amp;1
exec rpc.mountd -F -p 32767
&lt;/pre&gt;net-snmp/log/run
&lt;pre&gt;#!/bin/sh

exec setuidgid net-snmplog multilog t s2500000 n40 /var/log/multilog/net-snmp/main&lt;/pre&gt;net-snmp/run
&lt;pre&gt;#!/bin/sh

#exec /usr/sbin/snmpd -fLo -d 2
exec /usr/sbin/snmpd -l /dev/null -f -L 2&amp;gt;&amp;1&lt;/pre&gt;pgpool/log/run
&lt;pre&gt;#!/bin/sh

exec setuidgid pgpoollog multilog t s2500000 n40 /var/log/multilog/pgpool/main&lt;/pre&gt;pgpool/run
&lt;pre&gt;#!/bin/sh

# trick gentoo's pgpool.ebuild
echo 0 &gt; /var/run/pgpool.pid
chown pgpool:pgpool /var/run/pgpool.pid

exec 2&amp;gt;&amp;1
exec setuidgid pgpool /usr/bin/pgpool -n -f /etc/pgpool.conf&lt;/pre&gt;apache2/log/run
&lt;pre&gt;#!/bin/sh

exec setuidgid apachelog multilog t s2500000 n40 /var/log/multilog/apache2/main&lt;/pre&gt;apache2/run
&lt;pre&gt;#!/bin/sh

. /etc/conf.d/apache2

exec 2&amp;gt;&amp;1
exec env - /usr/bin/pgrphack /usr/sbin/apache2 -DFOREGROUND ${APACHE2_OPTS} 2&amp;gt;&amp;1&lt;/pre&gt;openssh/log/run
&lt;pre&gt;#!/bin/sh

exec setuidgid opensshlog multilog t s2500000 n40 /var/log/multilog/openssh/main&lt;/pre&gt;openssh/run
&lt;pre&gt;#!/bin/sh

exec /usr/sbin/sshd -De 2&amp;gt;&amp;1&lt;/pre&gt;postgresql/log/run
&lt;pre&gt;#!/bin/sh

exec setuidgid postgreslog multilog t s2500000 n40 /var/log/multilog/postgresql/main&lt;/pre&gt;postgresql/run
&lt;pre&gt;#!/bin/sh

. /etc/conf.d/postgresql

exec setuidgid postgres env - PGDATA=${PGDATA} /usr/bin/postmaster 2&amp;gt;&amp;1&lt;/pre&gt;taiclockd/log/run
&lt;pre&gt;#!/bin/sh

exec setuidgid clocklog multilog t s2500000 n40 /var/log/multilog/taiclockd/main&lt;/pre&gt;taiclockd/run
&lt;pre&gt;#!/bin/sh
exec 2&amp;gt;&amp;1
exec setuidgid clock /usr/bin/taiclockd&lt;/pre&gt;clockspeed/log/run
&lt;pre&gt;#!/bin/sh

exec setuidgid clocklog multilog t s2500000 n40 /var/log/multilog/clockspeed/main&lt;/pre&gt;clockspeed/run
&lt;pre&gt;#!/bin/sh

if [ -d /var/lib/clockspeed ] ; then
    chown -R clock:clockspeed /var/lib/clockspeed
fi

if [ -f /var/lib/clockspeed/adjust ] ; then
    rm -rf /var/lib/clockspeed/adjust
fi

exec 2&amp;gt;&amp;1
exec setuidgid clock /usr/bin/clockspeed&lt;/pre&gt;portmap/log/run
&lt;pre&gt;#!/bin/sh

exec setuidgid portmaplog multilog t s2500000 n40 /var/log/multilog/portmap/main&lt;/pre&gt;portmap/run
&lt;pre&gt;#!/bin/bash

exec 2&amp;gt;&amp;1
exec /sbin/portmap -d&lt;/pre&gt;dnscache/log/run
&lt;pre&gt;#!/bin/sh

exec setuidgid dnslog multilog '-*' t s2500000 n40 /var/log/multilog/dnscache/main&lt;/pre&gt;dnscache/run
&lt;pre&gt;#!/bin/sh
dd if=/dev/urandom of=/var/dnscache/seed bs=128 count=1 &amp;gt; /dev/null 2&amp;gt;&amp;1
exec 2&amp;gt;&amp;1
exec &amp;lt;/var/dnscache/seed
exec envdir /var/dnscache/env sh -c '
  exec envuidgid dnscache softlimit -o250 -d "${DATALIMIT}" /usr/bin/dnscache
'&lt;/pre&gt;syslog-ng/log/run
&lt;pre&gt;#!/bin/bash

exec env - /usr/bin/setuidgid daemon \
  /usr/bin/multilog t s2500000 n40 /var/log/multilog/syslog-ng/main
&lt;/pre&gt;syslog-ng/run
&lt;pre&gt;#!/bin/bash
exec 2&amp;gt;&amp;1
exec env - /usr/sbin/syslog-ng -d -F -f /etc/syslog-ng/syslog-ng.conf&lt;/pre&gt;vixie-cron/log/run
&lt;pre&gt;#!/bin/sh
exec env - /usr/bin/setuidgid daemon \
  /usr/bin/multilog t s2500000 n40 /var/log/multilog/vixie-cron/main
&lt;/pre&gt;vixie-cron/run
&lt;pre&gt;#!/bin/sh

exec /usr/sbin/cron -n 2&amp;gt;&amp;1
&lt;/pre&gt;mysql/log/run
&lt;pre&gt;#!/bin/bash

exec env - /usr/bin/setuidgid daemon \
  /usr/bin/multilog t s2500000 n40 /var/log/multilog/mysql/main
&lt;/pre&gt;mysql/run
&lt;pre&gt;#!/bin/bash

exec setuidgid mysql \
  /usr/sbin/mysqld \
  2&amp;gt;&amp;1&lt;/pre&gt;ntpd/log/run
&lt;pre&gt;#!/bin/bash
exec env - /usr/bin/setuidgid daemon \
  /usr/bin/multilog t s2500000 n40 /var/log/multilog/ntpd/main
&lt;/pre&gt;ntpd/run
&lt;pre&gt;#!/bin/bash
exec /usr/sbin/ntpd -n&lt;/pre&gt;※まあけっこうsvc -d でも死なないデーモンもあるけど、そこは御愛嬌。initスクリプトだって絶対確実に落して立ち上げてくれるわけではないし、そこらへんの面倒をちゃんと見なくちゃいけないのはどういう管理方法でも同じだと思う。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-333651560284387749?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=7CygW-IRGo8:ZSQ52Cjxork:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=7CygW-IRGo8:ZSQ52Cjxork:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=7CygW-IRGo8:ZSQ52Cjxork:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=7CygW-IRGo8:ZSQ52Cjxork:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/7CygW-IRGo8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/333651560284387749/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=333651560284387749" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/333651560284387749?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/333651560284387749?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/7CygW-IRGo8/daemontools.html" title="やっぱりdaemontoolsが好き" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2008/05/daemontools.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEAAQ38yfSp7ImA9WxdSF0s.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-2346322822897351237</id><published>2008-05-22T23:54:00.004+09:00</published><updated>2008-05-26T10:52:22.195+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-26T10:52:22.195+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>PHP: use_trans_sidの注意点</title><content type="html">まず、そもそもCookieを使わずにリンクにセッションIDをつけるリスクは下記の通り。
&lt;ol&gt;&lt;li&gt;セッションIDを誤って外部サイトへ送信してしまうと、第三者にセッションをのっとられる(いわゆるセッション・ハイジャック)。&lt;/li&gt;&lt;li&gt;明示的に送信しなくても、外部サイトへのリンクがあればReferer(リファラ)からログに残ってしまったり、プログラムによって取得されてしまう。&lt;/li&gt;&lt;/ol&gt;PHPではsession.use_trans_sidをonに設定すれば全てのリンクにセッションIDを付与してくれるけど、挙動が今いちわからなかったのでちょっと調べてみた。
&lt;ol&gt;&lt;li&gt;一応外部サイトへのリンクにセッションIDは付与されない。&lt;/li&gt;ただし、フォームでは外部サイトであるかどうかの判別はされず、自動的にhiddenで埋め込まれてしまう。挙動の調整には url_rewriter.tags を使う。
&lt;li&gt;外部サイトへのリンクとは、リンクの文字列に":"(コロン)があるかどうかで判別している。&lt;/li&gt;ようは「外部サイト」という判別はしていなくて、同じホストでもhttpsへのリンクやもちろん「http://」や「javascript:」等のリンクにはセッションIDが付与されない。
かつ、プロトコルの文字列判別してるわけでもないので、foo.php?param:abc=1というリンクでも付与されない。。。パラメータ名にコロンてあまりない気がするけど、使わないように考えておく必要はある。&lt;/ol&gt;ちなみに、output_add_rewrite_varも同じ動作をする。実際の動きは下記の通り。&lt;pre&gt;&amp;lt;?php
ini_set('session.use_cookies','off');
ini_set('session.use_trans_sid', '1');
session_start();
output_add_rewrite_var("foo", "bar");
?&amp;gt;
&amp;lt;!-- 普通の内部リンク ○ --&amp;gt;
&amp;lt;a href="./next.php"&amp;gt;next&amp;lt;/a&amp;gt;
&amp;lt;!-- 普通の内部POST ○ --&amp;gt;
&amp;lt;form method="POST" action="./next.php"&amp;gt;
&amp;lt;input type="submit"&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;!-- 外部リンク × --&amp;gt;
&amp;lt;a href="http://www.fork.co.jp/"&amp;gt;next&amp;lt;/a&amp;gt;
&amp;lt;!-- 外部へPOST ○ --&amp;gt;
&amp;lt;form method="POST" action="http://www.fork.co.jp/"&amp;gt;
&amp;lt;input type="submit"&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;!-- 内部リンクだけど:(コロン)付き × --&amp;gt;
&amp;lt;a href="./next.php?param:1=1"&amp;gt;next&amp;lt;/a&amp;gt;
&amp;lt;a href="javascript:location.href='next.php'"&amp;gt;next&amp;lt;/a&amp;gt;&lt;/pre&gt;実行結果のソースは下記の通り。&lt;pre&gt;&amp;lt;!-- 普通の内部リンク ○ --&amp;gt;
&amp;lt;a href="./next.php?PHPSESSID=9d1ed5529291d7f9ce445e62dc85f8e4&amp;foo=bar"&amp;gt;next&amp;lt;/a&amp;gt;
&amp;lt;!-- 普通の内部POST ○ --&amp;gt;
&amp;lt;form method="POST" action="./next.php"&amp;gt;&amp;lt;input type="hidden" name="PHPSESSID" value="9d1ed5529291d7f9ce445e62dc85f8e4" /&amp;gt;&amp;lt;input type="hidden" name="foo" value="bar" /&amp;gt;
&amp;lt;input type="submit"&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;!-- 外部リンク × --&amp;gt;
&amp;lt;a href="http://www.fork.co.jp/"&amp;gt;next&amp;lt;/a&amp;gt;
&amp;lt;!-- 外部へPOST ○ --&amp;gt;
&amp;lt;form method="POST" action="http://www.fork.co.jp/"&amp;gt;&amp;lt;input type="hidden" name="PHPSESSID" value="9d1ed5529291d7f9ce445e62dc85f8e4" /&amp;gt;&amp;lt;input type="hidden" name="foo" value="bar" /&amp;gt;
&amp;lt;input type="submit"&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;!-- 内部リンクだけど:(コロン)付き × --&amp;gt;
&amp;lt;a href="./next.php?param:1=1"&amp;gt;next&amp;lt;/a&amp;gt;
&amp;lt;a href="javascript:location.href='next.php'"&amp;gt;next&amp;lt;/a&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-2346322822897351237?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=u_Qge_nKNKo:BmEcKnoweRY:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=u_Qge_nKNKo:BmEcKnoweRY:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=u_Qge_nKNKo:BmEcKnoweRY:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=u_Qge_nKNKo:BmEcKnoweRY:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/u_Qge_nKNKo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/2346322822897351237/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=2346322822897351237" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/2346322822897351237?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/2346322822897351237?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/u_Qge_nKNKo/php-usetranssid.html" title="PHP: use_trans_sidの注意点" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2008/05/php-usetranssid.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4NQHY5fyp7ImA9WxdTGUg.&quot;"><id>tag:blogger.com,1999:blog-2261563947247821757.post-1263286618379262147</id><published>2008-05-16T23:34:00.005+09:00</published><updated>2008-05-17T00:16:31.827+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-17T00:16:31.827+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="misc" /><title>Subversionのコマンドの流れ</title><content type="html">そろそろ&lt;a href="http://git.or.cz/"&gt;git&lt;/a&gt;もよさそーだなと思いつつもそれほど毎日がっつりプログラマでもなく、久方ぶりのブランチにマージとかでいつも混乱するので&lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt;でのざっくりメモを残しておく。&lt;pre&gt;# まずはプロジェクト用のリポジトリを作成
svnadmin create --fs-type fsfs /var/svn
# 次にプロジェクト用のディレクトリを作成
mkdir -p work/myprj
# 初期用のディレクトリを作成
cd work/myprj
mkdir branches tags trunk
# インポート
cd ../
svn import -m import myprj file:///var/svn/myprj
# 必要ないので消す
rm -rf myprj
# 開発はmyprj/trunkでやる
mkdir myprj
svn co file:///var/svn/myprj/trunk myprj/trunk
cd myprj/trunk
echo read me. &gt; README
svn add README
svn st
svn ci -m "commit"
# リリースをつくる
svn copy -m "rel" file:///var/svn/myprj/trunk file:///var/svn/myprj/tags/1.0.0
# リリースしたファイルを持ってくる
cd ../
svn co file:///var/svn/myprj/tags/1.0.0 1.0.0
# ブランチをつくる
svn copy -m "branch" file:///var/svn/myprj/trunk file:///var/svn/myprj/branches/1.1.x
# できたブランチで開発
svn co file:///var/svn/myprj/branches/1.1.x 1.1.x
cd 1.1.x
echo add 1.1.x. &gt;&gt; README
svn st
svn ci -m "commit"
# trunkでも修正が入る
cd ../trunk
svn up
perl -pi -e 's/read/Read/' README
svn st
svn ci -m "commit"
# trunkにおいてマージ作業、変更点のチェック
# trunkにおける現在のリビジョンを取得 -&gt; 6
svn up
# branchを分けた時のリビジョン番号を取得 -&gt; 4
svn log --verbose --stop-on-copy file:///var/svn/myprj/branches/1.1.x
# 変更点のチェック
svn diff -r 4:6 file:///var/svn/myprj/branches/1.1.x
# マージ前にチェック
svn merge --dry-run -r 4:6 file:///var/svn/myprj/branches/1.1.x
# マージ
svn merge -r 4:6 file:///var/svn/myprj/branches/1.1.x
# 変更点をチェック
svn st
# コンフリクトを解消してコミット
emacs README
svn resolved README
svn ci -m "commit"
# キーワード置換の設定(やらなくてもよし)
~/.subversion/config
[miscellany]
global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store *.LCK #*# *.bak *.swp %* _notes _mm _baks
enable-auto-props = yes
[auto-props]
*.php=svn:keywords=Id
find ./modules -name "*.php" -exec svn propset svn:keywords Id

# ログの確認
svn log -v -r 5:5
# ログを日付で確認
svn log -r {2008-05-16}:HEAD
# リポジトリの中を一覧
svnlook tree /var/svn
# 指定したリビジョンのファイルを一覧
svn list -r 3
# 指定したリビジョンでのファイルの内容を表示
svn cat -r 2 README
# ロックをはずす
svn cleanup
# 最新のリビジョンを確認
svn log -r BASE:HEAD
# コミットされているもので変更があったものを一覧で取得
svn log -v -r 83:HEAD file:///var/svn/myprj/branches/1.1.x | grep "^ *M" | awk '{print $2}'
# 元に戻す (r6からr4へ元に戻す)
svn merge -r 6:4 ./README
#ログの修正
# 1. 記録されているログを確認
svn log file:///var/svn/pjdmp -r 5
# 2. ログの入力
echo 'modified log' &gt; log.tmp
# 3. ログの設定
svnadmin setlog --bypass-hooks /var/svn -r 5 log.tmp&lt;/pre&gt;ちなみに構成管理でメインラインをどう保持していくとかはあまり情報がない気がする。どっかから下記の本を見つけて、ちょっと難解な部分はあるけど、基本て大事だなって思った。&lt;br /&gt;
&lt;iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=howking-22&amp;o=9&amp;p=8&amp;l=as1&amp;asins=4798112593&amp;fc1=000000&amp;IS2=1&amp;lt1=_blank&amp;lc1=0000FF&amp;bc1=000000&amp;bg1=FFFFFF&amp;f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2261563947247821757-1263286618379262147?l=bba-ltom.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=F6LyZHBGM4A:Iun44CPHlH4:V-t1I-SPZMU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=V-t1I-SPZMU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=F6LyZHBGM4A:Iun44CPHlH4:I9og5sOYxJI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=I9og5sOYxJI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=F6LyZHBGM4A:Iun44CPHlH4:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jp/bba-ltom?a=F6LyZHBGM4A:Iun44CPHlH4:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jp/bba-ltom?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jp/bba-ltom/~4/F6LyZHBGM4A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://bba-ltom.blogspot.com/feeds/1263286618379262147/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2261563947247821757&amp;postID=1263286618379262147" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/1263286618379262147?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2261563947247821757/posts/default/1263286618379262147?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/jp/bba-ltom/~3/F6LyZHBGM4A/subversion.html" title="Subversionのコマンドの流れ" /><author><name>Junji Shiokawa</name><uri>https://profiles.google.com/100878446734987381598</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh4.googleusercontent.com/-wa3ugswh4Vo/AAAAAAAAAAI/AAAAAAAAiDA/z9Ef0jzlj50/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://bba-ltom.blogspot.com/2008/05/subversion.html</feedburner:origLink></entry></feed>

