<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2069020994556954437</id><updated>2012-01-31T13:00:46.558+09:00</updated><category term='apache'/><category term='ruby'/><category term='node.js'/><category term='screen'/><category term='mail'/><category term='jQuery'/><category term='postgresql'/><category term='dovecot'/><category term='MySQL'/><category term='javascript'/><category term='java'/><category term='ZendFramework'/><category term='openssl'/><category term='postfix'/><category term='FreeBSD'/><category term='その他'/><category term='SQLite'/><category term='Ajax'/><category term='mmeasure'/><category term='cocoa'/><category term='objective-c'/><category term='PHP'/><category term='open flash chart'/><category term='xcode'/><category term='Linux'/><category term='postgressql'/><category term='mac'/><category term='zsh'/><category term='snmp'/><category term='vpn'/><category term='vim'/><category term='iphoneアプリ'/><category term='iptables'/><category term='munin'/><category term='subversion'/><category term='svn'/><title type='text'>オデの日記＠WEB系</title><subtitle type='html'>大阪でWEBの仕事しています。
LinuxやWEB系プログラミング言語、SQLなどオープンソースを利用したアプリケーションについて考察や備忘録などを書いていきます。
たまに日々感じたことや趣味についても書きます。たぶん。
&lt;a href="http://twitter.com/koexuka"&gt;http://twitter.com/koexuka&lt;/a&gt;

&lt;br&gt;
株式会社マルジュで開発の仕事しています。
&lt;br&gt;
&lt;a href="http://www.maru.jp/"&gt;http://www.maru.jp/&lt;/a&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default?start-index=101&amp;max-results=100'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>129</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-9045291939794500733</id><published>2012-01-31T13:00:00.001+09:00</published><updated>2012-01-31T13:00:46.569+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ'/><category scheme='http://www.blogger.com/atom/ns#' term='xcode'/><title type='text'>Xcode 実機で動作しなくなる（'NSInternalInconsistencyException', reason: ' Could not load NIB in bundle...)</title><content type='html'>どうも、俺＠絶賛objective-c中です。&lt;br /&gt;&lt;br /&gt;Xcode ver.4.2で開発してて、iPhoneシュミレーターでは動作確認できるのですが急に実機で動作しなくなった！という場合の対処法めもです。&lt;br /&gt;場合によっては原因が異なると思うので、これが解決法の全てではないかもしれませんが。。&lt;br /&gt;&lt;br /&gt;iPhone実機（5.0.1）に繋いでXcodeからビルド＆実行すると以下のようなエラーが出てしまい、ビルドはできるのですが実行できません。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle (loaded)' with name 'ViewController'&lt;/pre&gt;つい5分前までは動いてたのに！&lt;br /&gt;原因はよく分かりませんでしたが、以下をやることで実機でも動作するようになりました。&lt;br /&gt;&lt;br /&gt;エラーログにある「ViewController.xib」を開き、右側の「Utilities」＞「File Inspector」内にある「Localization」の部分を見ます。&lt;br /&gt;僕の場合は&lt;br /&gt;English&lt;br /&gt;の1つのみが書かれていたので、「Japanese」を追加します。&lt;br /&gt;&lt;br /&gt;するとViewController.xibが&lt;br /&gt;&lt;pre&gt;ViewController.xib(English)&lt;br /&gt;ViewController.xib(Japanese)&lt;/pre&gt;の2つになります。&lt;br /&gt;この状態で実機転送すると動作します。&lt;br /&gt;&lt;br /&gt;このあと、なぜか先ほどのLocalizationにある&lt;br /&gt;Japanese&lt;br /&gt;は削除しても実機で動作しちゃいます。&lt;br /&gt;&lt;br /&gt;理由はよくわかりませんが、もしトラブった人は試してみて下さい。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇぇぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-9045291939794500733?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/9045291939794500733/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=9045291939794500733&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/9045291939794500733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/9045291939794500733'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2012/01/xcode-nsinternalinconsistencyexception.html' title='Xcode 実機で動作しなくなる（&apos;NSInternalInconsistencyException&apos;, reason: &apos; Could not load NIB in bundle...)'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-7239046514600529705</id><published>2012-01-31T11:15:00.000+09:00</published><updated>2012-01-31T11:18:31.774+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ'/><category scheme='http://www.blogger.com/atom/ns#' term='objective-c'/><title type='text'>UIViewアニメーションで一時停止</title><content type='html'>どうも、俺＠コーディング中です。&lt;br /&gt;今日はObjective-Cでアプリ開発をしてて、UIViewのアニメーションを使うことはよくあるのですが、今日はそのアニメーションを一時停止させる方法をめもめもします。&lt;br /&gt;&lt;pre&gt;&lt;span style="color: #6aa84f;"&gt;// hogeLabelの座標は(0, 0)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: lime;"&gt;hogeLabel&lt;/span&gt;.&lt;span style="color: #3d85c6;"&gt;frame&lt;/span&gt; = &lt;span style="color: #3d85c6;"&gt;CGRectMake&lt;/span&gt;(0, 0, 100, 100);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #6aa84f;"&gt;// アニメーション開始&lt;br /&gt;&lt;/span&gt;[&lt;span style="color: #3d85c6;"&gt;UIView&lt;/span&gt; &lt;span style="color: #3d85c6;"&gt;beginAnimations:&lt;/span&gt;&lt;span style="color: magenta;"&gt;nil&lt;/span&gt; context:&lt;span style="color: magenta;"&gt;nil&lt;/span&gt;];&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #6aa84f;"&gt;// アニメーション時間&lt;br /&gt;&lt;/span&gt;[&lt;span style="color: #3d85c6;"&gt;UIView&lt;/span&gt; &lt;span style="color: #3d85c6;"&gt;setAnimationDuration&lt;/span&gt;:1.0f];&lt;br /&gt;[&lt;span style="color: #3d85c6;"&gt;UIView&lt;/span&gt; &lt;span style="color: #3d85c6;"&gt;setAnimationCurve:UIViewAnimationCurveEaseIn&lt;/span&gt;];&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #6aa84f;"&gt;// hogeLabelを(200, 200)の位置へ動かす&lt;br /&gt;&lt;/span&gt;&lt;span style="color: lime;"&gt;hogeLabel&lt;/span&gt;.&lt;span style="color: #3d85c6;"&gt;frame&lt;/span&gt; = &lt;span style="color: #3d85c6;"&gt;CGRectMake&lt;/span&gt;(200, 200, 100, 100);&lt;br /&gt;&lt;br /&gt;[&lt;span style="color: #3d85c6;"&gt;UIView&lt;/span&gt; &lt;span style="color: #3d85c6;"&gt;setAnimationDelegate:self&lt;/span&gt;];&lt;br /&gt;[&lt;span style="color: #3d85c6;"&gt;UIView&lt;/span&gt; &lt;span style="color: #3d85c6;"&gt;setAnimationDidStopSelector&lt;/span&gt;:&lt;span style="color: magenta;"&gt;@selector&lt;/span&gt;(hogeLabelStopped:finished:context:)];&lt;br /&gt;[&lt;span style="color: #3d85c6;"&gt;UIView&lt;/span&gt; &lt;span style="color: #3d85c6;"&gt;commitAnimations&lt;/span&gt;];&lt;/pre&gt;とりあえずこれでhogeLabelは座標(0, 0)から(200, 200)へ1秒かけて動くアニメーションができました。&lt;br /&gt;このあとセレクターメソッド(hogeLabelStopped)内で、一旦停止させるには&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;- (&lt;span style="color: magenta;"&gt;void&lt;/span&gt;)hogeLabelStopped:(&lt;span style="color: #3d85c6;"&gt;NSString&lt;/span&gt; *)animation finished:(&lt;span style="color: magenta;"&gt;BOOL&lt;/span&gt;)finished context:(&lt;span style="color: magenta;"&gt;void&lt;/span&gt; *)context&lt;br /&gt;{&lt;br /&gt;&lt;span style="color: #6aa84f;"&gt;&amp;nbsp; // 一時停止(0.5秒)&lt;br /&gt;&lt;/span&gt;&amp;nbsp; [&lt;span style="color: #3d85c6;"&gt;NSThread&lt;/span&gt; &lt;span style="color: #3d85c6;"&gt;sleepForTimeInterval&lt;/span&gt;:0.5];&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #6aa84f;"&gt;&amp;nbsp; // その他の動作はこれ移行に記述&lt;br /&gt;&lt;/span&gt;}&lt;/pre&gt;こんな感じです。[NSThread sleepForTimeInterval:(double) interval]はスレッドをsleepさせる静的なメソッドです。&lt;br /&gt;&lt;br /&gt;以上どっぇぇぇぇぇえっぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-7239046514600529705?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/7239046514600529705/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=7239046514600529705&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/7239046514600529705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/7239046514600529705'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2012/01/uiview_31.html' title='UIViewアニメーションで一時停止'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-4834973885585108382</id><published>2012-01-20T14:16:00.003+09:00</published><updated>2012-01-20T14:47:37.712+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ'/><category scheme='http://www.blogger.com/atom/ns#' term='cocoa'/><category scheme='http://www.blogger.com/atom/ns#' term='objective-c'/><title type='text'>UIViewのアニメーションで画面遷移</title><content type='html'>どうも、俺＠仕事中です。久々のObjective-Cです。&lt;br /&gt;アプリでUINavigationControllerを使わずに画面をアニメーションさせて遷移させる方法を調べたのでメモメモ。&lt;br /&gt;&lt;br /&gt;右から左へスライドインする処理&lt;br /&gt;■元画面（FirstView: UIVIewControllerを継承）&lt;br /&gt;&lt;pre&gt;// 遷移先UIViewを画面外に生成（SecondView: UIVIewを継承）&lt;br /&gt;&lt;span class="Apple-style-span" style="color: lime;"&gt;secondView&lt;/span&gt; = [[&lt;span class="Apple-style-span" style="color: lime;"&gt;SecondView&lt;/span&gt; &lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;alloc&lt;/span&gt;]&lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;initWithFrame&lt;/span&gt;:&lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;CGRectMake&lt;/span&gt;(&lt;span class="Apple-style-span" style="color: magenta;"&gt;self&lt;/span&gt;.view.frame.size.width + 1, 0, &lt;span class="Apple-style-span" style="color: magenta;"&gt;self&lt;/span&gt;.view.frame.size.width, &lt;span class="Apple-style-span" style="color: magenta;"&gt;self&lt;/span&gt;.view.frame.size.height)];&lt;br /&gt;&lt;br /&gt;// アニメーション開始&lt;br /&gt;[&lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;UIView&lt;/span&gt; &lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;beginAnimations&lt;/span&gt;:&lt;span class="Apple-style-span" style="color: magenta;"&gt;nil&lt;/span&gt; context:&lt;span class="Apple-style-span" style="color: magenta;"&gt;nil&lt;/span&gt;]:&lt;br /&gt;[&lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;UIView&lt;/span&gt; &lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;setAnimationDuration&lt;/span&gt;:0.5]; // 0.5秒かけて&lt;br /&gt;[&lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;UIView&lt;/span&gt; &lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;setAnimationCure&lt;/span&gt;:&lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;UIViewAnimationCurveLinear&lt;/span&gt;]; // 一定速度で&lt;br /&gt;[&lt;span class="Apple-style-span" style="color: magenta;"&gt;self&lt;/span&gt;.&lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;view&lt;/span&gt; &lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;addSubview&lt;/span&gt;:&lt;span class="Apple-style-span" style="color: lime;"&gt;secondView&lt;/span&gt;]; // addSubviewする&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: lime;"&gt;secondView.frame&lt;/span&gt; = &lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;CGRectMake&lt;/span&gt;(0, 0, &lt;span class="Apple-style-span" style="color: magenta;"&gt;self&lt;/span&gt;.view.frame.size.width, &lt;span class="Apple-style-span" style="color: magenta;"&gt;self&lt;/span&gt;.view.frame.size.height); // 画面内へ動かす&lt;br /&gt;[&lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;UIView&lt;/span&gt; &lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;commitAnimations&lt;/span&gt;]; // アニメーションコミット&lt;/pre&gt;これで右から画面内へスライドインする遷移ができます。&lt;br /&gt;&lt;br /&gt;今度は戻るボタンなどで元画面へ戻る処理です。&lt;br /&gt;&lt;pre&gt;[&lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;UIView&lt;/span&gt; &lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;beginAnimations&lt;/span&gt;:&lt;span class="Apple-style-span" style="color: magenta;"&gt;nil&lt;/span&gt; context:&lt;span class="Apple-style-span" style="color: magenta;"&gt;nil&lt;/span&gt;];&lt;br /&gt;[&lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;UIView&lt;/span&gt; &lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;setAnimationDuration&lt;/span&gt;:0.5];&lt;br /&gt;[&lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;UIView&lt;/span&gt; &lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;setAnimationCurve&lt;/span&gt;:&lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;UIViewAnimationCurveLInear&lt;/span&gt;];&lt;br /&gt;[&lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;UIView&lt;/span&gt; &lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;setAnimationDelegate&lt;/span&gt;:&lt;span class="Apple-style-span" style="color: magenta;"&gt;self&lt;/span&gt;]; // デリゲートをselfで指定&lt;br /&gt;[&lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;UIView&lt;/span&gt; &lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;setAnimationDidStopSelector&lt;/span&gt;:&lt;span class="Apple-style-span" style="color: magenta;"&gt;@selector&lt;/span&gt;(animationStopped:finished:context:)]; // アニメーションが完了した時の処理&lt;br /&gt;&lt;br /&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="color: lime;"&gt;secondView.&lt;/span&gt;&lt;span style="color: #6fa8dc;"&gt;frame&lt;/span&gt; = &lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;CGRectMake&lt;/span&gt;(&lt;span class="Apple-style-span" style="color: magenta;"&gt;self&lt;/span&gt;.view.frame.size.width + 1, 0, &lt;span class="Apple-style-span" style="color: magenta;"&gt;self&lt;/span&gt;.view.frame.size.width, &lt;span class="Apple-style-span" style="color: magenta;"&gt;self&lt;/span&gt;.view.frame.size.height); // 画面外へ&lt;/pre&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;[&lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;UIView&lt;/span&gt; &lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;commitAnimations&lt;/span&gt;];&lt;/pre&gt;&lt;pre style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="color: #93c47d;"&gt;/**&lt;br /&gt; * アニメーション停止後の処理&lt;br /&gt; */&lt;/span&gt;&lt;br /&gt;- (&lt;span class="Apple-style-span" style="color: magenta;"&gt;void&lt;/span&gt;)animationStopped:(&lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;NSString&lt;/span&gt; *)animation finished:(&lt;span class="Apple-style-span" style="color: magenta;"&gt;BOOL&lt;/span&gt;)finished context:(&lt;span class="Apple-style-span" style="color: magenta;"&gt;void&lt;/span&gt; *)context&lt;br /&gt;{&lt;br /&gt;  [&lt;span class="Apple-style-span" style="color: lime;"&gt;secondView&lt;/span&gt; &lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;removeFromSuperview&lt;/span&gt;]; // secondViewをremoveFromSuperviewする&lt;br /&gt;}&lt;/pre&gt;&lt;/pre&gt;&lt;span class="Apple-style-span" style="background-color: white;"&gt;こうなります。&lt;/span&gt;&lt;br /&gt;secondViewをremoveFromSuperviewする場合は、UIViewのsetAnimationDidStopSelectorを使ってアニメーション停止後の処理をセレクターを使って処理させて下さい。そうしないとアニメーションが動きません。&lt;br /&gt;またその場合はUIViewのsetAnimationDelegateメソッドを呼んでおく必要があります。&lt;br /&gt;以上でぇぇぇぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-4834973885585108382?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/4834973885585108382/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=4834973885585108382&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4834973885585108382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4834973885585108382'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2012/01/uiview.html' title='UIViewのアニメーションで画面遷移'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-4766631943424456550</id><published>2012-01-05T20:42:00.003+09:00</published><updated>2012-01-05T20:43:29.643+09:00</updated><title type='text'>lsattrとchattrコマンド</title><content type='html'>明けましておめでとうございます。本年もよろしくお願い致しMuscle！&lt;br /&gt;俺＠今日から仕事始めです。&lt;br /&gt;&lt;br /&gt;Linuxで削除できないファイルがある、または削除できないファイルを作るなどといった場合に使えるコマンドの紹介です。&lt;br /&gt;これはext2またはext3ファイルシステムで使える、固有のフラグを操作するコマンドです。&lt;br /&gt;&lt;br /&gt;chattrコマンドで操作できます。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ chattr +i hoge.txt&lt;/pre&gt;これでhoge.txtは、たとえrootユーザになって削除しようとしても&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# rm -rf hoge.txt&lt;br /&gt;rm cannot remove `hoge.txt': Operation not permitted&lt;/pre&gt;となります。&lt;br /&gt;&lt;br /&gt;このi属性を削除するには&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ chattr -i hoge.txt&lt;/pre&gt;でOKです。&lt;br /&gt;引数に「+」で属性追加、「-」で属性削除になります。&lt;br /&gt;操作できる属性は&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;・a...ファイルの追書き込みのみ許可（append）&lt;br /&gt;・c...ファイルを圧縮しディスクに保存する（compress）&lt;br /&gt;・d...dumpコマンドによるバックアップ候補にしない（dump）&lt;br /&gt;・i...ファイル変更を許可しない。rmやmvができない（immutable）&lt;br /&gt;・A...ファイルがアクセスされた時のatimeを更新しない。Disk I/Oが少し早くなるかも？&lt;br /&gt;・D...ディレクトリに変更があった場合、すぐディスクに保存する。&lt;br /&gt;・S...ファイルに変更があった場合、すぐディスクに保存する。&lt;/pre&gt;です。他にもありますが、、&lt;br /&gt;実際使えるとすれば「i」と「A」かな。&lt;br /&gt;&lt;br /&gt;任意のファイルの属性を確認するには&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ lsattr hoge.txt&lt;/pre&gt;で、上記のフラグのいずかが出ればその属性が立っているということ。&lt;br /&gt;何もなければ（普通ないが）&lt;br /&gt;&lt;pre&gt;------------- hoge.txt&lt;/pre&gt;となります。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;少々マニアックなコマンドですが、プログラムで「何が何でも消してはアカンファイルがある！」という場合など、使えるかもしれません。&lt;br /&gt;また、不正プログラムなどにはこの属性がしてされており、もし管理者が不正ファイルを見つけて消そうとしても簡単には消えないようにされている場合もあります。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇえぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-4766631943424456550?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/4766631943424456550/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=4766631943424456550&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4766631943424456550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4766631943424456550'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2012/01/lsattrchattr.html' title='lsattrとchattrコマンド'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-6146002887310175479</id><published>2011-12-16T21:14:00.001+09:00</published><updated>2011-12-16T21:20:26.418+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>screenをやめてtmuxへ</title><content type='html'>どうも、俺＠残業中です。&lt;br /&gt;&lt;br /&gt;流行りモノの好きな俺はscreenをやめてtmuxへ移行することにしました。&lt;br /&gt;とは言うものの、もうだいぶ前からある仮想端末ソフトみたいですが、、^^;&lt;br /&gt;&lt;br /&gt;色んなブログを参考にしましたが、結局インストールして使ってみて、screenとtmuxとで大きな差がある感じはしません。&lt;br /&gt;何よりも重宝されるdetach&amp;amp;attachが両方備わってる訳ですし。&lt;br /&gt;tmuxだけで言うと&lt;br /&gt;・コピペのバッファを複数利用できる&lt;br /&gt;・画面分割がしやすい（paneという。縦横関わらず）&lt;br /&gt;・動作が軽い（メモリ消費も少ないらしい）&lt;br /&gt;・旬なやつ&lt;br /&gt;というメリットがあります。&lt;br /&gt;&lt;br /&gt;ではインストール、設定めもめもです。&lt;br /&gt;※僕の端末はMac OSX(lion)ですので、Mac用のインストールメモも含まれてます。&lt;br /&gt;&lt;br /&gt;まずMacな人はXcodeをインストールします。&lt;br /&gt;http://developer.apple.com/xcode/&lt;br /&gt;を参考に、インストール方法については省略します。&lt;br /&gt;&lt;br /&gt;次にMacPortsをインストールします。これはMacなエンジニアにとっては結構便利なツールです。&lt;br /&gt;http://www.macports.org/index.php&lt;br /&gt;から自分の環境に合ったパッケージファイルをDLし、そのdmgファイルを実行して下さい。&lt;br /&gt;僕はMacPorts-2-1.0.3-10.7-Lion.dmgを落としました。&lt;br /&gt;あとはインストーラに従うだけです。&lt;br /&gt;インストールが完了したら、ターミナルで環境設定を編集します。&lt;br /&gt;僕はzshを使っているので&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ vim ~/.zshrc&lt;br /&gt;--------------------------&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #ffd966;"&gt;export&lt;/span&gt; PATH=/opt/local/bin:/opt/local/sbin:&lt;span class="Apple-style-span" style="color: magenta;"&gt;$PATH&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #ffd966;"&gt;export&lt;/span&gt; MATHPATH=/opt/local/man:&lt;span class="Apple-style-span" style="color: magenta;"&gt;$MANPATH&lt;/span&gt;&lt;/pre&gt;とします。bashの人も同じですね。&lt;br /&gt;設定を読み込みます。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ source ~/.zshrc&lt;/pre&gt;次に設定ができたか確認します。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ port version&lt;br /&gt;Version: 2.0.3&lt;/pre&gt;OKです。&lt;br /&gt;まずは使う前に更新を確認します。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ sudo port selfupdate&lt;/pre&gt;勝手に更新してくれます。&lt;br /&gt;&lt;br /&gt;では早速tmuxをインストールしましょう！&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ sudo port install tmux&lt;/pre&gt;これで勝手にインストールしてくれます。yumみたいなもんですね。&lt;br /&gt;インストールが終わったら&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ tmux&lt;/pre&gt;と打つだけで仮想端末が立ち上がり、まるでscreenのように！！&lt;br /&gt;screenと同じく&lt;br /&gt;&lt;pre&gt;$ exit&lt;/pre&gt;で終了します。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ tmux list-session&lt;/pre&gt;でセッション一覧が見れます。平たくdetach、attachされた端末のことです。セッション番号:ウィンドウ数や起動日時が表示されます。&lt;br /&gt;セッション番号を参考にし&lt;br /&gt;&lt;pre&gt;$ tmux attach -t セッション番号&lt;/pre&gt;でアタッチできます。&lt;br /&gt;&lt;br /&gt;tmuxはデフォルトでCtrl-bがプレフィックスになっているので、何かコマンドを打つ場合はまずCtrl-bを打つことが基本です。※もちろん設定で変えられますが、僕は基本に忠実にやってます！&lt;br /&gt;tmuxを起動してからは、screenと同様にウインドウ分割（pane）やコピーモードへ移行、windowの生成など色々できます。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Ctrl-b ? ショートカット一覧&lt;br /&gt;Ctrl-b d デタッチ&lt;br /&gt;Ctrl-b w ウィンドウ一覧&lt;br /&gt;Ctrl-b c ウィンドウ生成&lt;br /&gt;Ctrl-b n 次のウィンドウへ&lt;br /&gt;Ctrl-b p 前のウィンドウへ&lt;br /&gt;Ctrl-b : コマンドモードへ&lt;br /&gt;Ctrl-b [ コピーモード開始&lt;br /&gt;Ctrl-b Ctrl-Space コピーモードでのコピー開始&lt;br /&gt;Ctrl-b ESC-w コピーモードでのコピー終了&lt;br /&gt;Ctrl-b ] コピーデータの貼付け&lt;br /&gt;Ctrl-b q ペインのインジケータ（番号？）を表示&lt;br /&gt;Ctrl-b t 時計表示（いらんｗ）&lt;br /&gt;Ctrl-b % ウインドウを左右ペインへ分割&lt;br /&gt;Ctrl-b " ウインドウを上下ペインへ分割&lt;br /&gt;Ctrl-b o アクティブなペインの移動（次のペインへ移動）&lt;br /&gt;Ctrl-b x ペインの破棄&lt;br /&gt;Ctrl-b Space ペインレイアウトの変更（左右、上下）&lt;br /&gt;Ctrl-b : resize-pane -U 数字&amp;nbsp;上部ペインのサイズ変更&lt;br /&gt;Ctrl-b : resize-pane -D 数字 下部ペインのサイズ変更&lt;br /&gt;Ctrl-b : resize-pane -L 数字 左ペインのサイズ変更&lt;br /&gt;Ctrl-b : resize-pane -R 数字 右ペインのサイズ変更&lt;/pre&gt;メインで使うコマンドはこのくらいでしょうか。&lt;br /&gt;あとは~/.tmux.confを編集して使いやすくします。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ vim ~/.tmux.conf&lt;br /&gt;--------------------------------&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;# コピーモードのキーバインドをviのように&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;# Spaceでコピー開始、Enterでコピー終了になります&lt;br /&gt;&lt;/span&gt;set-window-option -g mode-keys vi&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;# 縦分割、横分割をviのキーバインドのように&lt;br /&gt;&lt;/span&gt;bind s split-window -v&lt;br /&gt;bind v split-window -h&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #6fa8dc;"&gt;# 分割画面への移動をviのキーバインドのように&lt;br /&gt;&lt;/span&gt;bind h select-pane -L&lt;br /&gt;bind j select-pane -D&lt;br /&gt;bind k select-pane -U&lt;br /&gt;bind l select-pane -R&lt;/pre&gt;僕はこんな感じにしました。&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/yuckey369/20111115/1321357762"&gt;tmuxを使ってみる-なんでもつくる&lt;/a&gt;とか参考になります。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;さぁ、これで快適なtmuxライフを送れますね！&lt;br /&gt;&lt;br /&gt;以上でぇぇえぇす。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-6146002887310175479?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/6146002887310175479/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=6146002887310175479&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6146002887310175479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6146002887310175479'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/12/screentmux.html' title='screenをやめてtmuxへ'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-1155452890604712174</id><published>2011-12-09T10:47:00.001+09:00</published><updated>2011-12-09T11:36:31.555+09:00</updated><title type='text'>sshを公開鍵認証にする（複数ホスト対応）</title><content type='html'>どうも、俺＠仕事中です。忙しいです＞＜&lt;br /&gt;&lt;br /&gt;社内でもssh管理は「鍵認証にしよう！」ということで、今日はその対応方法についてめもです。&lt;br /&gt;パスワード接続だとちょっと不安ですしね。&lt;br /&gt;&lt;br /&gt;まずはサーバ上でnew_userというログインユーザを作ります。（既存のもので対応する場合は必要なし）&lt;br /&gt;＜サーバ＞&lt;br /&gt;&lt;pre&gt;# useradd -d /home/new_user -s /bin/zsh -g goup_name new_user&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;次にOPEN-SSLで鍵ファイルを作成します。公開鍵はサーバ上に、秘密鍵はクライアントに置きます。&lt;br /&gt;作成する場所はどちらでも構いませんが、分かりやすいので今回はクライアント側で作ることにします。&lt;br /&gt;＜クライアント＞&lt;br /&gt;&lt;pre&gt;$ ssh-keygen -t rsa&lt;br /&gt;Generating public/private rsa key pair.&lt;br /&gt;Enter file in which to save the key (/home/username/.ssh/id_rsa):&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #9fc5e8;"&gt;そのままEnterでも良いが、複数ホストに対応する場合はファイル名を変えたほうが良いので今回は「id_rsa.hostA」と打ちます。&lt;/span&gt;&lt;br /&gt;Enter passphrase (empty for no passphrase):&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #9fc5e8;"&gt;パスフレーズを入力（必要ない場合はそのままEnter）&lt;br /&gt;&lt;/span&gt;Enter same passphrase again:&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #9fc5e8;"&gt;再度パスフレーズ入力&lt;/span&gt;&lt;/pre&gt;これでファイルが2つ生成されるはずです。&lt;br /&gt;・id_rsa.hostA　秘密鍵。クライアントの.ssh以下へ置く。&lt;br /&gt;・id_rsa.hostA.pub　公開鍵。サーバの.ssh以下へ置く。&lt;br /&gt;&lt;br /&gt;では公開鍵をサーバへFTPなどで持って行き、該当のユーザ（この例ではnew_user）の.sshディレクトリ以下へ保存しておきます。説明は省略。&lt;br /&gt;またその内容をauthorized_keysファイルへ追記します。&lt;br /&gt;＜サーバ＞&lt;br /&gt;&lt;pre&gt;$ cat id_rsa.hostA.pub &amp;gt;&amp;gt; ~/.ssh/authorized_keys&lt;/pre&gt;とりあえずここでSSHの鍵認証が可能です。&lt;br /&gt;あとはセキュリティのため、サーバのsshd_configの設定を変更し、パスワードによるログインができなくしましょう。&lt;br /&gt;＜サーバ＞&lt;br /&gt;&lt;pre&gt;# cd /etc/ssh&lt;br /&gt;# cp sshd_config sshd_config.bak　&lt;span class="Apple-style-span" style="color: #9fc5e8;"&gt;// バックアップを取る&lt;/span&gt;&lt;br /&gt;# vim /etc/ssh/sshd_config&lt;br /&gt;---------------------------------&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #9fc5e8;"&gt;# 以下3つはコメントアウトのままでもデフォルトで問題ない&lt;br /&gt;&lt;/span&gt;RSAAuthentication yes&lt;br /&gt;PubkeyAuthentication yes&lt;br /&gt;AuthorizedKeysFile .ssh/authorized_keys&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #9fc5e8;"&gt;# noに変更する！&lt;br /&gt;&lt;/span&gt;PasswordAuthentication no&lt;/pre&gt;これでOK。&lt;br /&gt;設定を反映させます。&lt;br /&gt;＜サーバ＞&lt;br /&gt;&lt;pre&gt;# /etc/init.d/sshd restart&lt;/pre&gt;これでパスワードによるログインはできなくなり、公開鍵でのログインができるようになりました。&lt;br /&gt;&lt;br /&gt;ちなみに接続方法は&lt;br /&gt;＜クライアント＞&lt;br /&gt;&lt;pre&gt;$ ssh new_user@hostA -i ~/.ssh/id_rsa.hostA&lt;/pre&gt;になります。鍵ファイルにパスフレーズを設定している場合は、入力を求められます。&lt;br /&gt;&lt;br /&gt;ただしこの方法だと、管理する複数のホストで鍵認証する場合、都度「-i オプション」で鍵ファイルを明示的に指定しなければいけません。面倒です。&lt;br /&gt;なので.ssh/configに設定を書いておき、楽しちゃいましょう。&lt;br /&gt;&lt;br /&gt;＜クライアント＞&lt;br /&gt;&lt;pre&gt;$ vim ~/.ssh/config&lt;br /&gt;---------------------------------&lt;br /&gt;&lt;span class="Apple-style-span" style="color: lime;"&gt;Host&lt;/span&gt; serverA&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #9fc5e8;"&gt;&amp;nbsp; # HostNameはドメインまたはIPアドレス&lt;br /&gt;&lt;/span&gt;&amp;nbsp; &lt;span class="Apple-style-span" style="color: #c27ba0;"&gt;HostName&lt;/span&gt; hostA.com&lt;br /&gt;&amp;nbsp; &lt;span class="Apple-style-span" style="color: #c27ba0;"&gt;Port&lt;/span&gt; 22&lt;br /&gt;&amp;nbsp; &lt;span class="Apple-style-span" style="color: #c27ba0;"&gt;User&lt;/span&gt; new_user&lt;br /&gt;&amp;nbsp; &lt;span class="Apple-style-span" style="color: #c27ba0;"&gt;IdentityFile&lt;/span&gt; ~/.ssh/id_rsa.hostA&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: lime;"&gt;Host&lt;/span&gt; serverB&lt;br /&gt;&amp;nbsp; &lt;span class="Apple-style-span" style="color: #c27ba0;"&gt;HostName&lt;/span&gt; hostB.com&lt;br /&gt;&amp;nbsp; &lt;span class="Apple-style-span" style="color: #c27ba0;"&gt;Port&lt;/span&gt; 22&lt;br /&gt;&amp;nbsp; &lt;span class="Apple-style-span" style="color: #c27ba0;"&gt;User&lt;/span&gt; foo_user&lt;br /&gt;&amp;nbsp; &lt;span class="Apple-style-span" style="color: #c27ba0;"&gt;IdentityFile&lt;/span&gt; ~/.ssh/id_rsa.hostB&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: lime;"&gt;Host&lt;/span&gt; serverC&lt;br /&gt;&amp;nbsp; &lt;span class="Apple-style-span" style="color: #c27ba0;"&gt;HostName&lt;/span&gt; xxx.xxx.xxx.xxx&lt;br /&gt;&amp;nbsp; &lt;span class="Apple-style-span" style="color: #c27ba0;"&gt;Port&lt;/span&gt; 22&lt;br /&gt;&amp;nbsp; &lt;span class="Apple-style-span" style="color: #c27ba0;"&gt;User&lt;/span&gt; bar_user&lt;br /&gt;&amp;nbsp; &lt;span class="Apple-style-span" style="color: #c27ba0;"&gt;IdentityFile&lt;/span&gt; ~/.ssh/id_rsa.hostC&lt;/pre&gt;こんな感じです。&lt;br /&gt;これであれば、例えばhostB.comへ接続する場合&lt;br /&gt;＜クライアント＞&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ ssh serverB&lt;/pre&gt;と打つだけで、&lt;br /&gt;・hostB.comへ&lt;br /&gt;・foo_userで&lt;br /&gt;・22番ポートで&lt;br /&gt;・~/.ssh/id_rsa.hostBの秘密鍵を使って&lt;br /&gt;接続を試みてくれます。&lt;br /&gt;&lt;br /&gt;楽チンですねーー！以上でぇぇぇええぇす。&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-1155452890604712174?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/1155452890604712174/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=1155452890604712174&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1155452890604712174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1155452890604712174'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/12/ssh.html' title='sshを公開鍵認証にする（複数ホスト対応）'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-1037000419493523742</id><published>2011-12-01T15:31:00.001+09:00</published><updated>2011-12-01T15:42:30.340+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='node.js'/><title type='text'>WebSocketも対応したリバースプロキシ！</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;&lt;br /&gt;どうしてもリバースプロキシ経由でNode.jsを動かしたかったのですが、ApacheやNginxだとWebSocket&lt;br /&gt;をリバースプロキシしてくれない！&lt;br /&gt;という訳で、解決策を探してたら簡単に見つかりました。&lt;br /&gt;node-http-proxy &lt;a href="https://github.com/nodejitsu/node-http-proxy"&gt;https://github.com/nodejitsu/node-http-proxy&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;使い方もいたってシンプル。&lt;br /&gt;インストール&lt;br /&gt;&lt;pre&gt;$ npm install http-proxy&lt;/pre&gt;&lt;br /&gt;ソースを書く&lt;br /&gt;&lt;pre&gt;$ vim /path/to/app.js&lt;br /&gt;&lt;br /&gt;------------------------------&lt;br /&gt;&lt;span class="Apple-style-span" style="color: lime;"&gt;var&lt;/span&gt; proxy = require(&lt;span class="Apple-style-span" style="color: red;"&gt;'http-proxy'&lt;/span&gt;);&lt;br /&gt;proxy.createServer({&lt;br /&gt;&amp;nbsp; &lt;span class="Apple-style-span" style="color: orange;"&gt;router&lt;/span&gt;: {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;span class="Apple-style-span" style="color: red;"&gt;'myserver.com'&lt;/span&gt;: &lt;span class="Apple-style-span" style="color: red;"&gt;'toserver.jp:8088'&lt;/span&gt;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}).listen(&lt;span class="Apple-style-span" style="color: red;"&gt;3033&lt;/span&gt;);&lt;/pre&gt;myserver.comの3033番ポートで動くNodeプログラムです。&lt;br /&gt;&lt;br /&gt;起動させる&lt;br /&gt;&lt;pre&gt;$ node app.js&lt;/pre&gt;&lt;br /&gt;接続確認する&lt;br /&gt;&lt;pre&gt;$ telnet myserver.com 3033&lt;/pre&gt;&lt;br /&gt;これでtoserver.jpの8088番ポートへ通信しにいってくれます。&lt;br /&gt;もちろんWebSocketもOK！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上デェぇぇエス。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-1037000419493523742?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/1037000419493523742/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=1037000419493523742&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1037000419493523742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1037000419493523742'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/12/websocket.html' title='WebSocketも対応したリバースプロキシ！'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-1823285845421233313</id><published>2011-11-12T01:33:00.001+09:00</published><updated>2011-11-12T01:51:34.897+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ'/><category scheme='http://www.blogger.com/atom/ns#' term='cocoa'/><category scheme='http://www.blogger.com/atom/ns#' term='objective-c'/><title type='text'>NSNumberとNSValueとCGRect,CGPoint,CGSIzeについて</title><content type='html'>どうも、俺＠家帰っても勉強中です。&lt;br /&gt;Objective-CでNSNumberとNSValueという不思議なクラスにぶち当たりました。&lt;br /&gt;&lt;br /&gt;NSNumberは数値を表すオブジェクト型で、プリミティブなintやNSIntegerとは少し意味合いが違います。&lt;br /&gt;つまりintとNSIntegerはイコールですが、NSNumberはイコールではありません。&lt;br /&gt;使い方は&lt;br /&gt;&lt;pre&gt;int i = 10;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: cyan;"&gt;NSInteger&lt;/span&gt; i = 10;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: cyan;"&gt;NSNumber&lt;/span&gt; *i = 10;&lt;/pre&gt;のようになります。&lt;br /&gt;使いどころですが、例えばオブジェクト型で数値を表現したい場合はNSNumberを、そうでない場合はintやNSIntegerを使いましょう！というそのままなのですが、&lt;br /&gt;具体的には、NSArrayなどに格納できる要素はオブジェクト型である必要があります。&lt;br /&gt;NSArrayやNSMutableArrayにどうしても数値を格納する必要があれば、NSNumberを使えばOKです。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;int i =10;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: cyan;"&gt;NSNumber&lt;/span&gt; *num = [&lt;span class="Apple-style-span" style="color: cyan;"&gt;NSNumber&lt;/span&gt; numberWithInt: i];&lt;/pre&gt;としてやればintをNSNumber型に変換できます。&lt;br /&gt;他にも&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="color: cyan;"&gt;NSNumber&lt;/span&gt; *num = [&lt;span class="Apple-style-span" style="color: cyan;"&gt;NSNumber&lt;/span&gt; numberWithFloat: 10.0f];&lt;/pre&gt;のような使い方もできます。&lt;br /&gt;逆にNSNumber型をint型として取り出すには&lt;br /&gt;&lt;pre&gt;int i = [num intValue];&lt;/pre&gt;でOKです。&lt;br /&gt;&lt;br /&gt;またNSValueですが、これはCGRectやCGPoint、CGSizeなど構造体を表すオブジェクト（NSObjectを継承していない）を扱う場合に利用します。&lt;br /&gt;CGRectとかCGPointなどはクラスの引数の型などに設定できないんですね。あとは上の例のように、NSArrayの要素として追加したい場合など。&lt;br /&gt;&lt;pre&gt;CGrect rect = CGRectMake(0, 0, 100, 100);&lt;br /&gt;&lt;span class="Apple-style-span" style="color: cyan;"&gt;NSValue&lt;/span&gt; *val = [&lt;span class="Apple-style-span" style="color: cyan;"&gt;NSValue&lt;/span&gt; valueWIthCGRect:rct];&lt;br /&gt;CGPoint point = CGPointMake(100, 100);&lt;br /&gt;&lt;span class="Apple-style-span" style="color: cyan;"&gt;NSValue&lt;/span&gt; *val = [&lt;span class="Apple-style-span" style="color: cyan;"&gt;NSValue&lt;/span&gt; valueWIthCGPoint:point];&lt;br /&gt;CGSize size = CGSizeMake(100, 100);&lt;br /&gt;&lt;span class="Apple-style-span" style="color: cyan;"&gt;NSValue&lt;/span&gt; *val = [&lt;span class="Apple-style-span" style="color: cyan;"&gt;NSValue&lt;/span&gt; valueWIthCGSIze:size];&lt;/pre&gt;こんな感じです。&lt;br /&gt;&lt;br /&gt;逆にNSValue型のオブジェクトからCGRectなどを取り出す場合は&lt;br /&gt;&lt;pre&gt;CGRect rect = [val CGRectValue];&lt;br /&gt;CGPoint point = [val CGPointValue];&lt;br /&gt;CGSize size = [val CGSizeValue];&lt;/pre&gt;使い方はNSNumberの場合とほとんど一緒です。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-1823285845421233313?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/1823285845421233313/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=1823285845421233313&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1823285845421233313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1823285845421233313'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/11/nsnumbernsvaluecgrectcgpointcgsize.html' title='NSNumberとNSValueとCGRect,CGPoint,CGSIzeについて'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-4673421326556141070</id><published>2011-11-11T10:11:00.001+09:00</published><updated>2011-11-12T01:50:11.127+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>設定されたSSL鍵にパスフレーズが設定されているかどうか</title><content type='html'>どうも、俺＠アプリ開発中です。&lt;br /&gt;今日は、利用しているSSLの鍵にパスフレーズが設定されているかどうかを調べる方法についてめもめも。&lt;br /&gt;&lt;br /&gt;例えば、apacheを再起動しなければならなくなった場合&lt;br /&gt;そのapacheはSSL設定がされており、https://　なWEBサーバであると、再起動かけたとき&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# /usr/local/apache2/bin/apachectl restart&lt;br /&gt;Enter pass phrase for /path/to/ssl.key: &lt;/pre&gt;のようにパスフレーズを求められて、&lt;br /&gt;apacheが停止したところで止まってしまい、起動出来なくなってしまいます。これはエライコッチャ！&lt;br /&gt;&lt;br /&gt;こんな場合は、事前にSSL鍵にパスフレーズが設定されているかどうかチェックしておきましょう。&lt;br /&gt;まず、apacheのSSL設定ファイル（通常はhttpd-ssl.confかな）にあるSSLCertificateKeyFileを見て、SSL鍵パスを確認します。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# cat /usr/local/apache2/conf/extra/httpd-ssl.conf | grep SSLCertificateKeyFile&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;SSLCertificateKeyFile&lt;/span&gt; "/usr/local/apache2/conf/ssl/ssl.key"&lt;/pre&gt;例えばこのように出力されて、鍵ファイルのパスがわかります。&lt;br /&gt;&lt;br /&gt;このファイルを openssl コマンドでパスフレーズ設定されているかどうか確認します。&lt;br /&gt;&lt;pre&gt;# openssl rsa -in /usr/local/apache2/conf/ssl/ssl.key&lt;/pre&gt;とコマンドを打って&lt;br /&gt;・パスフレーズ設定されている場合&lt;br /&gt;&lt;pre&gt;Enter pass phrase for /usr/local/apache2/conf/ssl/ssl.key:&lt;/pre&gt;これは要注意です！&lt;br /&gt;&lt;br /&gt;・パスフレーズ設定されていない場合&lt;br /&gt;&lt;pre&gt;Writing RSA key&lt;br /&gt;----- BEGIN RSA PRIVATE KEY -----&lt;br /&gt;LKDFopa99yjkfslkKgudkdf...&lt;/pre&gt;のように鍵ファイルを表示できれば設定されていません！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;これで、apache再起動時に焦ることもなくなりますね。&lt;br /&gt;僕は、開発環境でパスフレーズ設定されたapacheを再起動してしまい、「あれぇ」となった事があります。&lt;br /&gt;&lt;br /&gt;ちなみにパスフレーズ設定されたSSL証明書鍵のパスフレーズを解除してしまう方法ですが、（セキュリティ的に危ないので本番サーバとかでは要検討！）&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: steelblue;"&gt;// バックアップを取る&lt;/span&gt;&lt;br /&gt;# cp ssl.key ssl.key.bak&lt;br /&gt;&lt;br /&gt;&lt;span style="color: steelblue;"&gt;// パスフレーズ解除&lt;/span&gt;&lt;br /&gt;# openssl rsa -in ssl.key -out new_ssl.key&lt;br /&gt;Enter pass phrase for ssl.key: &lt;span style="color: steelblue;"&gt;// ここでパスフレーズを入力&lt;/span&gt;&lt;/pre&gt;です。&lt;br /&gt;new_ssl.keyというパスフレーズの設定されていないSSL証明書鍵が出来ました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-4673421326556141070?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/4673421326556141070/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=4673421326556141070&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4673421326556141070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4673421326556141070'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/11/ssl.html' title='設定されたSSL鍵にパスフレーズが設定されているかどうか'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-2148750418157604958</id><published>2011-11-10T15:53:00.003+09:00</published><updated>2011-11-12T01:49:47.525+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ'/><category scheme='http://www.blogger.com/atom/ns#' term='cocoa'/><category scheme='http://www.blogger.com/atom/ns#' term='objective-c'/><title type='text'>UIView UILayout UITextViewを角丸にする</title><content type='html'>どうも、俺＠アプリ開発中です。&lt;br /&gt;今日はタイトル通り「UIView」「UILayout」「UITextView」の角を丸く描画する方法についてめもめもです。&lt;br /&gt;&lt;br /&gt;まず、ヘッダファイルで&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;#import &amp;lt;QuartzCore/QuartzCore.h&amp;gt;&lt;quartzcore quartzcore.h=""&gt;&lt;/quartzcore&gt;&lt;/pre&gt;とQuartzCore.frameworkをインポートします。&lt;br /&gt;別のサイトとかではQuartzCore.frameworkを追加して、とかあるのですが僕の環境ではそんなことしなくても普通に使えました。&lt;br /&gt;なぜだ。（XCode4.2）&lt;br /&gt;次に対象のオブジェクトに対し&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="color: cyan;"&gt;UIButton&lt;/span&gt; *btn = [UIButton &lt;span class="Apple-style-span" style="color: cyan;"&gt;buttonWithType:UIButtonTypeCustom&lt;/span&gt;];&lt;br /&gt;&lt;span class="Apple-style-span" style="color: cyan;"&gt;btn&lt;/span&gt;.frame = &lt;span class="Apple-style-span" style="color: cyan;"&gt;CGRectMake&lt;/span&gt;(100, 100, 50, 50);&lt;br /&gt;[&lt;span class="Apple-style-span" style="color: cyan;"&gt;btn&lt;/span&gt; setTitle:&lt;span class="Apple-style-span" style="color: red;"&gt;@"test"&lt;/span&gt; &lt;span class="Apple-style-span" style="color: cyan;"&gt;forState&lt;/span&gt;&lt;span class="Apple-style-span" style="color: white;"&gt;:&lt;/span&gt;&lt;span class="Apple-style-span" style="color: cyan;"&gt;UIControlStateNormal&lt;/span&gt;];&lt;br /&gt;&lt;br /&gt;&lt;span style="color: steelblue;"&gt;// 角丸の処理&lt;/span&gt;&lt;br /&gt;[[&lt;span class="Apple-style-span" style="color: cyan;"&gt;btn&lt;/span&gt; layer] setCornerRadius:5.0f];&lt;br /&gt;&lt;br /&gt;&lt;span style="color: steelblue;"&gt;// または&lt;/span&gt;&lt;br /&gt;&lt;span style="color: steelblue;"&gt;// btn.layer.cornerRadius = 5.0f;&lt;/span&gt;&lt;/pre&gt;こんな感じです。&lt;br /&gt;UILayoutやUITextViewでも同様に作れます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇぇえす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-2148750418157604958?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/2148750418157604958/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=2148750418157604958&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/2148750418157604958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/2148750418157604958'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/11/uiview-uilayout-uitextview.html' title='UIView UILayout UITextViewを角丸にする'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-7479690850886552317</id><published>2011-11-09T16:04:00.001+09:00</published><updated>2011-11-09T16:08:56.791+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphoneアプリ'/><category scheme='http://www.blogger.com/atom/ns#' term='cocoa'/><category scheme='http://www.blogger.com/atom/ns#' term='objective-c'/><title type='text'>Objective-Cでprivateメソッドを定義したい</title><content type='html'>どうも、俺です。&lt;br /&gt;ようやくobjective-c(cocoa)な話題です。&lt;br /&gt;&lt;br /&gt;objective-cで自作クラスを作り、javaやphpのようにprivateなメソッドを定義したい！という時のめもめもです。&lt;br /&gt;objective-cは基本的には定義されたメソッドはpublicになってしまいます。&lt;br /&gt;面倒なのであえてprivateなメソッドにする必要もなさそうですが。&lt;br /&gt;&lt;br /&gt;ちなみにprivateなプロパティは&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: steelblue;"&gt;// MyClass.h&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: magenta;"&gt;@interface&lt;/span&gt; MyClass: NSObject&lt;br /&gt;{&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #b45f06;"&gt;&amp;nbsp;@private&lt;/span&gt;&lt;br /&gt;&amp;nbsp;  id hoge;&lt;br /&gt;}&lt;br /&gt;-(void)methodA;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: magenta;"&gt;@end&lt;/span&gt;&lt;/pre&gt;のような形で定義できちゃいます。&lt;br /&gt;&lt;br /&gt;privateなメソッドを定義するには、カテゴリを使って何とか実装できます。、、なので面倒です。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="color: steelblue;"&gt;// MyClass.m&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: magenta;"&gt;@interface&lt;/span&gt; &lt;span class="Apple-style-span" style="color: lime;"&gt;MyClass&lt;/span&gt; () &lt;span style="color: steelblue;"&gt;// ←が無名カテゴリの定義&lt;/span&gt;&lt;br /&gt;-(void) privateMethod;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: magenta;"&gt;@end&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: magenta;"&gt;@implemention&lt;/span&gt; MyClass&lt;br /&gt;&lt;span style="color: steelblue;"&gt;// ここにクラスの実装を行う。&lt;/span&gt;&lt;br /&gt;&lt;span style="color: steelblue;"&gt;// privateMethodもここに作成する。&lt;/span&gt;&lt;br /&gt;-(void) prrivateMethod&lt;br /&gt;{&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #3d85c6;"&gt; &amp;nbsp;// メソッドの内容&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;&lt;span class="Apple-style-span" style="color: magenta;"&gt;@end&lt;/span&gt;&lt;/pre&gt;こんな感じです。&lt;br /&gt;MyClasss.hに変更を食わえる必要はありません。&lt;br /&gt;&lt;br /&gt;Objective-Cにprivateメソッドの仕組みが組み込まれてないんでしょうね。&lt;br /&gt;なんか冗長な気がするので、どうしてもprivateじゃないとアカン！という場合でなければ使わなくても良いかなと思いました。&lt;br /&gt;アプリ開発とかでもあまり大規模開発になることもなさそうですし。&lt;br /&gt;&lt;br /&gt;以上でぇぇぇぇぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-7479690850886552317?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/7479690850886552317/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=7479690850886552317&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/7479690850886552317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/7479690850886552317'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/11/objective-cprivate.html' title='Objective-Cでprivateメソッドを定義したい'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-4211574160394425449</id><published>2011-11-02T16:31:00.000+09:00</published><updated>2011-11-02T16:31:59.098+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><title type='text'>macのターミナルでvimのdeleteがおかしい時</title><content type='html'>どうも、俺です。&lt;br /&gt;お久しぶりです。ブログに書くようなネタがなかったのでしばらく更新できませんでした。。&lt;br /&gt;&lt;br /&gt;今日はmacを使っててターミナルからvimを開いてdeleteキーを押すと「^?」が出る人へ、対処法メモです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ vim ~/.vimrc&lt;br /&gt;-------------------&lt;br /&gt;&lt;span style="color: steelblue;"&gt;" 以下を追加&lt;/span&gt;&lt;br /&gt;&lt;span style="color: yellow;"&gt;noremap!&lt;/span&gt; &lt;span style="color: steelblue;"&gt;^? ^H&lt;/span&gt;&lt;/pre&gt;とりあえず、.vimrcをこのようにすれば直ります！直るはずです。&lt;br /&gt;^?はCtrl+vを押したあとdeleteキー。&lt;br /&gt;^HはCtrl+vを押した後Ctrl+hキー。&lt;br /&gt;&lt;br /&gt;最近はmacで仕事しております。iphoneアプリ開発とかしてるので、そのうちObjective-C関連のネタも書くようになれればいいなー。&lt;br /&gt;&lt;br /&gt;以上でぇぇえぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-4211574160394425449?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/4211574160394425449/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=4211574160394425449&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4211574160394425449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4211574160394425449'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/11/macvimdelete.html' title='macのターミナルでvimのdeleteがおかしい時'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-4616215508095185806</id><published>2011-09-13T20:55:00.001+09:00</published><updated>2011-09-13T21:00:23.330+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>fsockopenでhttps://へ接続したいとき</title><content type='html'>どうも、久しぶりです。俺＠残業中です。&lt;br /&gt;&lt;br /&gt;今日はphpのfsockeopen()の使い方注意をメモメモ。&lt;br /&gt;httpsな外部サイトへfsockopen()したいときは&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;fsockopen('www.example.com', 443, $errono, $errstr, $timeout);&lt;/pre&gt;では接続できません。&lt;br /&gt;サーバ側から&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;!DOCTYPE HTML PUBLIC “-//IETF//DTD HTML 2.0//EN”&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;400 Bad Request&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;lt;h1&amp;gt;Bad Request&amp;lt;/h1&amp;gt;&amp;lt;p&amp;gt;Your browser sent a request that this server could not understand.&amp;lt;br /&amp;gt;&lt;br /&gt;Reason: You’re speaking plain HTTP to an SSL-enabled server port.&amp;lt;br /&amp;gt;&lt;br /&gt;Instead use the HTTPS scheme to access this URL, please.&amp;lt;br /&amp;gt;&lt;/pre&gt;とかで帰ってきます。&lt;br /&gt;fsockopen()でhttps://なサイトへ接続するときは&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;fsockopen('ssl://www.example.com', 443, $errno, $errstr, $timeout);&lt;/pre&gt;としましょう。&lt;br /&gt;&lt;br /&gt;あ、ちなみにphpはopensslが利用可能な環境でインストールされている必要がありますよ。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; ./configure --with-openssl&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇえっぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-4616215508095185806?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/4616215508095185806/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=4616215508095185806&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4616215508095185806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4616215508095185806'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/09/fsockopenhttps.html' title='fsockopenでhttps://へ接続したいとき'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-7970958939589206992</id><published>2011-08-03T19:00:00.002+09:00</published><updated>2011-08-03T19:47:00.254+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='munin'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>muninで独自プラグインを作成</title><content type='html'>どうも、俺＠終業前です。&lt;br /&gt;&lt;br /&gt;今日はmuninで独自のデータを取得する方法についてめもめも。&lt;br /&gt;すごく簡単です。&lt;br /&gt;例としてDB（MySQL）からとあるテーブル（fooテーブルとbarテーブル）の総件数をロギングしたいと思います。&lt;br /&gt;&lt;br /&gt;まずmuninのプラグインのあるディレクトリに実行ファイルを作成します。&lt;br /&gt;このファイルはシェルスクリプトでもphpスクリプトでも何でも構いません。決められた引数に対して決められた値を返せれば良いです。&lt;br /&gt;yumでインストールした場合は、/usr/share/munin/plugins　以下になります。&lt;br /&gt;&lt;pre&gt;# cd /usr/share/munin/plugins&lt;br /&gt;# vim table_count&lt;/pre&gt;当然このファイルには実行権限を付けておいてください。&lt;br /&gt;&lt;pre&gt;# chmod +x table_count&lt;/pre&gt;&lt;br /&gt;基本的には&lt;br /&gt;１）引数「config」を与えられたときに値を返す（グラフ情報）&lt;br /&gt;２）引数なしで実行されたときに値を返す（実際の値）&lt;br /&gt;のように作成します。&lt;br /&gt;他にも引数はいくつかありますが、特に&lt;a href="http://www.clear-code.com/blog/2010/4/8.html"&gt;Muninプラグインの作り方:ククログ&lt;/a&gt;に詳しく書かれてありましたので参考にしてください。&lt;br /&gt;&lt;br /&gt;引数「autoconf」と引数「suggest」についてとても参考になりました。&lt;br /&gt;今回はこれらは割愛します。&lt;br /&gt;&lt;br /&gt;まず引数「config」の時の処理を書きます。&lt;br /&gt;&lt;pre&gt;# vim table_count&lt;br /&gt;----------------------------------------&lt;br /&gt;&lt;font color="steelblue"&gt;#!/bin/sh&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="yellow"&gt;if [&lt;/font&gt; "$1" = "&lt;font color="red"&gt;config&lt;/font&gt;" &lt;font color="yellow"&gt;]; then&lt;/font&gt;&lt;br /&gt;  &lt;font color="yellow"&gt;echo&lt;/font&gt; '&lt;font color="red"&gt;graph_title table count&lt;/font&gt;' &lt;font color="steelblue"&gt;# グラフのタイトル。&lt;/font&gt;&lt;br /&gt;  &lt;font color="yellow"&gt;echo&lt;/font&gt; '&lt;font color="red"&gt;graph_args --base 1000 -l 0&lt;/font&gt;' &lt;font color="steelblue"&gt;# 何も気にせず書く。&lt;/font&gt;&lt;br /&gt;  &lt;font color="yellow"&gt;echo&lt;/font&gt; '&lt;font color="red"&gt;graph_vlabel adfit_database_info&lt;/font&gt;' &lt;font color="steelblue"&gt;# グラフのラベル。y軸のとこに出ます。&lt;/font&gt;&lt;br /&gt;  &lt;font color="yellow"&gt;echo&lt;/font&gt; '&lt;font color="red"&gt;graph_category other&lt;/font&gt;' &lt;font color="steelblue"&gt;# グラフのカテゴリ。一覧のHTMLで表示されるカテゴリ。DiskとかNetworkとかOtherとかProcessesとかのやつ。&lt;/font&gt;&lt;br /&gt;  &lt;font color="yellow"&gt;echo&lt;/font&gt; '&lt;font color="red"&gt;graph_info Database data info.&lt;/font&gt;' &lt;font color="steelblue"&gt;# グラフの情報。詳細ページの下の方に出る。&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="yellow"&gt;echo&lt;/font&gt; '&lt;font color="red"&gt;foo.label total foo&lt;/font&gt;' &lt;font color="steelblue"&gt;# fooテーブルの件数についてのラベル。&lt;/font&gt;&lt;br /&gt;  &lt;font color="yellow"&gt;echo&lt;/font&gt; '&lt;font color="red"&gt;foo.draw LINE2&lt;/font&gt;' &lt;font color="steelblue"&gt;# 線グラフという意。他にもAREAやSTACKがある、らしい。&lt;/font&gt;&lt;br /&gt;  &lt;font color="yellow"&gt;echo&lt;/font&gt; '&lt;font color="red"&gt;foo.info total foo table count.&lt;/font&gt;' &lt;font color="steelblue"&gt;# ラベルfooに対する説明。&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;  &lt;font color="yellow"&gt;echo&lt;/font&gt; '&lt;font color="red"&gt;bar.label bar table count&lt;/font&gt;' &lt;font color="steelblue"&gt;# barテーブルの件数についてのラベル。&lt;/font&gt;&lt;br /&gt;  &lt;font color="yellow"&gt;echo&lt;/font&gt; '&lt;font color="red"&gt;bar.draw LINE2&lt;/font&gt;' &lt;font color="steelblue"&gt;# 線グラフという意。他にもAREAやSTACKがある、らしい。&lt;/font&gt;&lt;br /&gt;  &lt;font color="yellow"&gt;echo&lt;/font&gt; '&lt;font color="red"&gt;bar.info total bar table count.&lt;/font&gt;' &lt;font color="steelblue"&gt;# ラベルfooに対する説明。&lt;/font&gt;&lt;br /&gt;  &lt;font color="yellow"&gt;exit&lt;/font&gt; 0&lt;br /&gt;&lt;font color="yellow"&gt;fi&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;引き続き、引数なしで実行された時の処理を書きます。&lt;br /&gt;&lt;pre&gt;# vim table_count&lt;br /&gt;----------------------------------&lt;br /&gt;&lt;font color="yellow"&gt;echo&lt;/font&gt; &lt;font color="magenta"&gt;-n&lt;/font&gt; "&lt;font color="red"&gt;foo.value &lt;/font&gt;"&lt;br /&gt;/path/to/mysql &lt;i&gt;databasename&lt;/i&gt; -u &lt;i&gt;username&lt;/i&gt; -e '&lt;font color="red"&gt;SELECT COUNT(*) FROM foo&lt;/font&gt;' | awk '&lt;font color="red"&gt;NR==4 { print }&lt;/font&gt;' | sed -e "&lt;font color="red"&gt;s/ //g&lt;/font&gt;"&lt;br /&gt;&lt;br /&gt;&lt;font color="yellow"&gt;echo&lt;/font&gt; &lt;font color="magenta"&gt;-n&lt;/font&gt; "&lt;font color="red"&gt;bar.value &lt;/font&gt;"&lt;br /&gt;/path/to/mysql &lt;i&gt;databasename&lt;/i&gt; -u &lt;i&gt;username&lt;/i&gt; -e '&lt;font color="red"&gt;SELECT COUNT(*) FROM bar&lt;/font&gt;' | awk '&lt;font color="red"&gt;NR==4 { print }&lt;/font&gt;' | sed -e "&lt;font color="red"&gt;s/ //g&lt;/font&gt;"&lt;/pre&gt;かなりぶきっちょな書き方ですみません。もっとスマートな方法あるかも知れません。&lt;br /&gt;&lt;br /&gt;これを実行プラグインのシンボリックリンクがあるディレクトリに、同じくシンボリックリンクを貼ります。&lt;br /&gt;yumでインストールした場合は、/etc/munin/plugins になります。&lt;br /&gt;&lt;pre&gt;# ln -s /usr/share/munin/plugins/table_count /etc/munin/plugins&lt;/pre&gt;&lt;br /&gt;最後にmunin-nodeを再起動して完了です。&lt;br /&gt;&lt;pre&gt;# /etc/init.d/munin-node restart&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;これでグラフが描画されるはずです。&lt;br /&gt;以上でぇぇぇぇぇぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-7970958939589206992?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/7970958939589206992/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=7970958939589206992&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/7970958939589206992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/7970958939589206992'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/08/munin.html' title='muninで独自プラグインを作成'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-436496296730977653</id><published>2011-07-27T15:31:00.002+09:00</published><updated>2011-07-27T15:35:17.850+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='node.js'/><title type='text'>javascriptでurlエンコードしたものをphpでデコードする</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;相変わらずNodeやってます。&lt;br /&gt;&lt;br /&gt;Node側でユーザの入力データを受け取り、それをphpへ渡すような事をする場合は&lt;br /&gt;javascriptで入力データをURLエンコードしてphpでデコードを行う必要が出てきます。&lt;br /&gt;&lt;br /&gt;javascriptには&lt;br /&gt;&lt;pre&gt;escape(&lt;i&gt;str&lt;/i&gt;);&lt;br /&gt;encodeURI(&lt;i&gt;str&lt;/i&gt;);&lt;br /&gt;encodeURIComponent(&lt;i&gt;str&lt;/i&gt;);&lt;/pre&gt;の3つエンコード関数があり&lt;br /&gt;phpには&lt;br /&gt;&lt;pre&gt;&lt;font color="aqua"&gt;urldecode&lt;/font&gt;&lt;font color="magenta"&gt;(&lt;/font&gt;&lt;i&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;str&lt;/font&gt;&lt;/i&gt;&lt;font color="magenta"&gt;)&lt;/font&gt;;&lt;br /&gt;&lt;font color="aqua"&gt;rawurldecode&lt;/font&gt;&lt;font color="magenta"&gt;(&lt;/font&gt;&lt;i&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;str&lt;/font&gt;&lt;/i&gt;&lt;font color="magenta"&gt;)&lt;/font&gt;;&lt;/pre&gt;の2つデコード関数があります。&lt;br /&gt;&lt;br /&gt;どうやらそれぞれエンコード/デコードのアルゴリズムが違うらしく&lt;br /&gt;全くデータの受け渡しが出来なかったので、どれとどれの組み合わせだったらうまく動作するのか確認しようかな&lt;br /&gt;と思ってたところ、やってくれてる方がいらっしゃいました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.programming-magic.com/20071228223355/"&gt;JavaScriptとPHPのURLエンコード【JavaScript,PHP】:Programming Magic&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;このサイトを参考にして、javascriptでは&lt;br /&gt;&lt;pre&gt;encodeURIComponent(&lt;i&gt;str&lt;/i&gt;)&lt;/pre&gt;してからphpへ送り、&lt;br /&gt;phpでは&lt;br /&gt;&lt;pre&gt;&lt;font color="aqua"&gt;rawurldecode&lt;/font&gt;&lt;font color="magenta"&gt;(&lt;/font&gt;&lt;i&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;str&lt;/font&gt;&lt;/i&gt;&lt;font color="magenta"&gt;)&lt;/font&gt;;&lt;/pre&gt;すれば正しく受け渡しができました。感謝!!&lt;br /&gt;逆の場合でも同じですね。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇえっぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-436496296730977653?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/436496296730977653/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=436496296730977653&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/436496296730977653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/436496296730977653'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/07/javascripturlphp.html' title='javascriptでurlエンコードしたものをphpでデコードする'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-7854599089126958976</id><published>2011-07-19T20:19:00.003+09:00</published><updated>2011-07-19T20:36:04.883+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='node.js'/><title type='text'>socket.ioをv0.6.xからv0.7.xへ変更する</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;&lt;br /&gt;socket.ioのv0.7.xが出てたという噂を聞きつけて早速&lt;br /&gt;&lt;pre&gt;# npm update socket.io&lt;/pre&gt;しちゃったら、途端にnodeアプリが動作しなくなっちゃいました。&lt;br /&gt;そこで、socket.ioのv0.7.xの仕様変更、特にメッセージ送受信部分について簡単にめもめもします。&lt;br /&gt;まぁ、、&lt;a href="https://github.com/LearnBoost/Socket.IO/wiki/Migrating-0.6-to-0.7"&gt;socket.io : github : Migrating 0.6 to 0.7&lt;/a&gt;からの引用です。&lt;br /&gt;※express上で動作させているものとします。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;■ソケットの生成&lt;br /&gt;・サーバ側&lt;br /&gt;&lt;pre&gt;&lt;font color="lime"&gt;var&lt;/font&gt; io = require(&lt;font color="red"&gt;"socket.io"&lt;/font&gt;).listen(app);&lt;br /&gt;io.sockets.on(&lt;font color="red"&gt;'connection'&lt;/font&gt;, function(socket) {&lt;br /&gt;   console.log(&lt;font color="red"&gt;'接続されました'&lt;/font&gt;);&lt;br /&gt;});&lt;/pre&gt;&lt;br /&gt;・クライアント側&lt;br /&gt;&lt;pre&gt;&lt;font color="lime"&gt;var&lt;/font&gt; socket = io.connect(&lt;font color="red"&gt;'http://node.server.com:3000'&lt;/font&gt;);&lt;/pre&gt;すでにv0.6.xと実装が異なります。&lt;br /&gt;&lt;br /&gt;■メッセージ送受信&lt;br /&gt;・サーバ側&lt;br /&gt;&lt;pre&gt;io.sockets.on(&lt;font color="red"&gt;'connection'&lt;/font&gt;, function(socket) {&lt;br /&gt;  socket.on(&lt;font color="red"&gt;'message'&lt;/font&gt;, function(data) {&lt;br /&gt;    &lt;font color="steelblue"&gt;// 受信処理&lt;/font&gt;&lt;br /&gt;  });&lt;br /&gt;});&lt;/pre&gt;&lt;br /&gt;・クライアント側&lt;br /&gt;&lt;pre&gt;&lt;font color="lime"&gt;var&lt;/font&gt; socket = io.connect(&lt;font color="red"&gt;'http://node.server.com:3000'&lt;/font&gt;);&lt;br /&gt;socket.send(data);&lt;br /&gt;&lt;font color="steelblue"&gt;// または&lt;/font&gt;&lt;br /&gt;socket.json.send(data, &lt;i&gt;[callback]&lt;/i&gt;);&lt;/pre&gt;v0.7.xからは socket.json.send() により明示的にJSONへ変換するように指定できるようになりました。（省略可）&lt;br /&gt;それ以前は自動的にJSONへ変換がかかっていたので、それを変換する/しないが指定できるようになった形です。&lt;br /&gt;&lt;i&gt;callback&lt;/i&gt;では、送信後の処理を記述できます。（送達確認処理）&lt;br /&gt;&lt;br /&gt;■メッセージ送受信（カスタムイベント）&lt;br /&gt;v0.7.xからはメッセージやり取りに開発者の指定するカスタムイベントによって送受信できるようになりました。&lt;br /&gt;・サーバ側&lt;br /&gt;&lt;pre&gt;socket.on(&lt;font color="red"&gt;'custom event'&lt;/font&gt;, function(data) {&lt;br /&gt;  &lt;font color="steelblue"&gt;// custom eventを受け取ったときの処理&lt;/font&gt;&lt;br /&gt;});&lt;/pre&gt;&lt;br /&gt;・クライアント側&lt;br /&gt;&lt;pre&gt;socket.emit(&lt;font color="red"&gt;custom event&lt;/font&gt;, data, &lt;i&gt;[callback]&lt;/i&gt;);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;■サーバからのメッセージ送信&lt;br /&gt;・サーバ側&lt;br /&gt;&lt;pre&gt;&lt;font color="steelblue"&gt;// 自分自身へ送る&lt;/font&gt;&lt;br /&gt;socket.emit(&lt;font color="red"&gt;'custom response'&lt;/font&gt;, data);&lt;br /&gt;&lt;font color="steelblue"&gt;// 自分以外全員へ送る&lt;/font&gt;&lt;br /&gt;socket.broadcast.emit(&lt;font color="red"&gt;'custom response'&lt;/font&gt;, data);&lt;br /&gt;&lt;font color="steelblue"&gt;// 自分を含む全員へ送る&lt;/font&gt;&lt;br /&gt;io.sockets.emit(&lt;font color="red"&gt;'custom response'&lt;/font&gt;, data);&lt;/pre&gt;&lt;br /&gt;ちなみにこれらemit()でサーバから送られたデータをクライアント側で受け取る場合は、第1引数に指定されたイベント名でなければ受信できません。&lt;br /&gt;・クライアント側&lt;br /&gt;&lt;pre&gt;socket.on(&lt;font color="red"&gt;'custom response'&lt;/font&gt;, function(data) {&lt;br /&gt;  &lt;font color="steelblue"&gt;// 受け取ったときの処理&lt;/font&gt;&lt;br /&gt;});&lt;/pre&gt;&lt;br /&gt;v0.6.xのようにクライアント側で&lt;br /&gt;&lt;pre&gt;socket.on(&lt;font color="red"&gt;'message'&lt;/font&gt;, function(data) {&lt;br /&gt;});&lt;/pre&gt;で受け取る場合は、サーバ側の送信部分は&lt;br /&gt;&lt;pre&gt;socket.send(data);&lt;br /&gt;socket.broadcast.send(data);&lt;br /&gt;io.sockets.send(data);&lt;/pre&gt;のように記述すればOKです。&lt;br /&gt;&lt;br /&gt;また特定のソケットセッションに対し送信することもできるようになりました。&lt;br /&gt;・サーバ側&lt;br /&gt;&lt;pre&gt;io.sockets.socket(&lt;i&gt;&amp;lt;session id&gt;&lt;/i&gt;).send(data);&lt;br /&gt;io.sockets.socket(&lt;i&gt;&amp;lt;session id&gt;&lt;/i&gt;).emit(&lt;font color="red"&gt;'custom response'&lt;/font&gt;, data);&lt;/pre&gt;&lt;i&gt;&amp;lt;session id&gt;&lt;/i&gt;は任意のセッションIDです。&lt;br /&gt;&lt;br /&gt;セッションIDはv0.6.xまではsocket.sessionIdで取得していましたが、v0.7.xからはsocket.idで取得できるようになりました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-7854599089126958976?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/7854599089126958976/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=7854599089126958976&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/7854599089126958976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/7854599089126958976'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/07/socketiov06xv07x.html' title='socket.ioをv0.6.xからv0.7.xへ変更する'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-8024035735860803393</id><published>2011-07-15T14:08:00.008+09:00</published><updated>2011-07-15T14:41:36.233+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='node.js'/><title type='text'>node.jsで自作モジュールの作り方</title><content type='html'>どうも、俺＠昼ごはんは鯛の刺身を食べました。&lt;br /&gt;&lt;br /&gt;さて、nodeでモジュールを作る方法についてメモメモです。&lt;br /&gt;nodeは本日v0.5.1がリリースされたとこですね。&lt;br /&gt;&lt;br /&gt;nodeで言う「モジュール」というのはjavaやphpなどでいう「クラス」みたいなものです。&lt;br /&gt;でも実態はjavascriptなので、中身は関数群というか関数オブジェクトのかたまりですね。&lt;br /&gt;参考）&lt;a href="http://nodejs.org/docs/v0.5.1/api/modules.html#modules"&gt;http://nodejs.org/docs/v0.5.1/api/modules.html#modules&lt;/a&gt;&lt;br /&gt;&lt;a href="http://wiki.commonjs.org/wiki/Modules/1.1"&gt;commonsJS&lt;/a&gt;の仕様にのっとって利用します。&lt;br /&gt;&lt;br /&gt;利用するフレームワークはexpressとします。&lt;br /&gt;サンプルとしてよくある人間クラス（Person）を作ります。&lt;br /&gt;hello()メソッドで"hello!"と、myName()メソッドで自分の名前を出力します。&lt;br /&gt;Person.js&lt;br /&gt;&lt;pre&gt;&lt;font color="lime"&gt;var&lt;/font&gt; Person = &lt;font color="aqua"&gt;function&lt;/font&gt;(name) {&lt;br /&gt;  &lt;font color="lime"&gt;this&lt;/font&gt;.name = name;&lt;br /&gt;  &lt;font color="lime"&gt;this&lt;/font&gt;.hello = &lt;font color="aqua"&gt;function&lt;/font&gt;() {&lt;br /&gt;    console.log(&lt;font color="red"&gt;"hello"&lt;/font&gt;);&lt;br /&gt;  };&lt;br /&gt;  &lt;font color="lime"&gt;this&lt;/font&gt;.myName = &lt;font color="aqua"&gt;function&lt;/font&gt;() {&lt;br /&gt;    console.log(&lt;font color="lime"&gt;this&lt;/font&gt;.name);&lt;br /&gt;  };&lt;br /&gt;};&lt;br /&gt;module.exports = Person;&lt;/pre&gt;module.exportsは、モジュール全体を関数化（オブジェクト化）する時に利用します。&lt;br /&gt;ちなみにjavascriptのprototypeを使うパターンでも同じです。&lt;br /&gt;&lt;pre&gt;&lt;font color="lime"&gt;var&lt;/font&gt; Person = &lt;font color="aqua"&gt;function&lt;/font&gt;(name) {&lt;br /&gt;  &lt;font color="lime"&gt;this&lt;/font&gt;.name = name;&lt;br /&gt;};&lt;br /&gt;Person.&lt;font color="lime"&gt;prototype&lt;/font&gt;.hello = &lt;font color="aqua"&gt;function&lt;/font&gt;() {&lt;br /&gt;  console.log(&lt;font color="red"&gt;"hello"&lt;/font&gt;);&lt;br /&gt;};&lt;br /&gt;Person.&lt;font color="lime"&gt;prototype&lt;/font&gt;.myName = &lt;font color="aqua"&gt;function&lt;/font&gt;() {&lt;br /&gt;  console.log(&lt;font color="lime"&gt;this&lt;/font&gt;.name);&lt;br /&gt;};&lt;br /&gt;module.exports = Person;&lt;/pre&gt;&lt;br /&gt;app.js&lt;br /&gt;&lt;pre&gt;&lt;font color="lime"&gt;var&lt;/font&gt; Person = require(&lt;font color="red"&gt;"/path/to/Person"&lt;/font&gt;);&lt;br /&gt;&lt;font color="lime"&gt;var&lt;/font&gt; p = &lt;font color="yellow"&gt;new&lt;/font&gt; Person(&lt;font color="red"&gt;"koexuka"&lt;/font&gt;);&lt;br /&gt;p.hello();  &lt;font color="steelblue"&gt;// "hello!"&lt;/font&gt;&lt;br /&gt;p.myName();  &lt;font color="steelblue"&gt;// "koexuka"&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;です。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;またはもう一つやり方があり&lt;br /&gt;Person.js&lt;br /&gt;&lt;pre&gt;exports.setName = &lt;font color="aqua"&gt;function&lt;/font&gt;(name) {&lt;br /&gt;  &lt;font color="lime"&gt;this&lt;/font&gt;.name = name;&lt;br /&gt;};&lt;br /&gt;exports.hello = &lt;font color="aqua"&gt;function&lt;/font&gt;() {&lt;br /&gt;  console.log(&lt;font color="red"&gt;"hello!"&lt;/font&gt;);&lt;br /&gt;};&lt;br /&gt;exports.myName = &lt;font color="aqua"&gt;function&lt;/font&gt;() {&lt;br /&gt;  console.log(&lt;font color="lime"&gt;this&lt;/font&gt;.name);&lt;br /&gt;};&lt;/pre&gt;&lt;br /&gt;app.js&lt;br /&gt;&lt;pre&gt;&lt;font color="lime"&gt;var&lt;/font&gt; p = require(&lt;font color="red"&gt;"/path/to/Person"&lt;/font&gt;);&lt;br /&gt;p.setName(&lt;font color="red"&gt;"koexuka"&lt;/font&gt;);&lt;br /&gt;p.hello();  &lt;font color="steelblue"&gt;// "hello!"&lt;/font&gt;&lt;br /&gt;p.myName();  &lt;font color="steelblue"&gt;// "koexuka"&lt;/font&gt;&lt;/pre&gt;です。&lt;br /&gt;こちらの方が少し簡略ですね。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇぇえぇぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-8024035735860803393?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/8024035735860803393/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=8024035735860803393&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/8024035735860803393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/8024035735860803393'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/07/nodejs.html' title='node.jsで自作モジュールの作り方'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-5768242202793769864</id><published>2011-07-14T12:16:00.001+09:00</published><updated>2011-07-14T12:17:28.349+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>使いどころが分からないUnixコマンド</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;&lt;br /&gt;今日はどういう使い方をしたら良いか分からないUnixコマンドの紹介です。&lt;br /&gt;&lt;pre&gt;$ talk &lt;i&gt;username&lt;/i&gt;&lt;/pre&gt;talkコマンド。&lt;br /&gt;同サーバにログインしている&lt;i&gt;username&lt;/i&gt;とチャットをすることができます。&lt;br /&gt;ちなみに別ホストにいるユーザに対しては&lt;br /&gt;&lt;pre&gt;$ talk &lt;i&gt;username&lt;/i&gt;@&lt;i&gt;ホスト名&lt;/i&gt;&lt;/pre&gt;です。&lt;br /&gt;チャットを終了する場合は&amp;lt;Ctrl&amp;gt;+dです。&lt;br /&gt;ただしtalkdデーモンが起動している必要があります。これまたマニアックなデーモンですね。&lt;br /&gt;今時、便利なメッセンジャーアプリが多くありますし、電話もありますし。。&lt;br /&gt;全ての通信手段が利用不可になり、サーバ上でやり取りをするしかない場合は使えるかもしれません。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;続いて&lt;br /&gt;&lt;pre&gt;$ time &lt;i&gt;cmd&lt;/i&gt;&lt;/pre&gt;timeコマンド。&lt;i&gt;cmd&lt;/i&gt;は実行コマンドです。&lt;br /&gt;引数に指定したコマンドの開始～終了までの実行時間を測定します。&lt;br /&gt;どんなベンチマークで使うのでしょう。。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-5768242202793769864?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/5768242202793769864/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=5768242202793769864&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/5768242202793769864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/5768242202793769864'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/07/unix.html' title='使いどころが分からないUnixコマンド'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-2072257332927801054</id><published>2011-07-07T17:37:00.003+09:00</published><updated>2011-07-07T17:39:50.097+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>javascriptでスマホのタッチ（タップ）イベントを取得する</title><content type='html'>どうも、俺＠仕事中です。お久しぶりです。&lt;br /&gt;最近はクライアントjavascriptを書いたり、nodeを書いたり、やたらjavascriptばかりイジっています。&lt;br /&gt;&lt;br /&gt;今日はスマホブラウザ（iphoneやandroid）でタッチ（タップ）に対するイベントをjavascriptで取得する方法をめもめもします。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font color="steelblue"&gt;// １）ontouchstart&lt;/font&gt;&lt;br /&gt;&lt;font color="yellow"&gt;document&lt;/font&gt;.getElementsByTagName(&lt;font color="red"&gt;"body"&lt;/font&gt;).item(0).ontouchstart = &lt;font color="aqua"&gt;function&lt;/font&gt;() {&lt;br /&gt;  &lt;font color="yellow"&gt;alert&lt;/font&gt;(&lt;font color="red"&gt;"touchされたよ"&lt;/font&gt;);&lt;br /&gt;};&lt;br /&gt;&lt;font color="steelblue"&gt;// ２）ontouchmove&lt;/font&gt;&lt;br /&gt;&lt;font color="yellow"&gt;document&lt;/font&gt;.getElementsByTagName(&lt;font color="red"&gt;"body"&lt;/font&gt;).item(0).ontouchmove = &lt;font color="aqua"&gt;function&lt;/font&gt;() {&lt;br /&gt;  &lt;font color="yellow"&gt;alert&lt;/font&gt;(&lt;font color="red"&gt;"touchされて移動してるよ"&lt;/font&gt;);&lt;br /&gt;};&lt;br /&gt;&lt;font color="steelblue"&gt;// ３）ontouchend&lt;/font&gt;&lt;br /&gt;&lt;font color="yellow"&gt;document&lt;/font&gt;.getElementsByTagName(&lt;font color="red"&gt;"body"&lt;/font&gt;).item(0).ontouchend = &lt;font color="aqua"&gt;function&lt;/font&gt;() {&lt;br /&gt;  &lt;font color="yellow"&gt;alert&lt;/font&gt;(&lt;font color="red"&gt;"touchが終わったよ"&lt;/font&gt;);&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;jQueryだともっと楽に書けます。&lt;br /&gt;ちなみにiphoneのsafariだと確実に動作しますが、androidはGalaxySでしか確認していません。&lt;br /&gt;が、新しいandroid端末であればほぼ大丈夫だと思います。&lt;br /&gt;&lt;br /&gt;以上でぇぇえぇぇえす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-2072257332927801054?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/2072257332927801054/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=2072257332927801054&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/2072257332927801054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/2072257332927801054'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/07/javascript.html' title='javascriptでスマホのタッチ（タップ）イベントを取得する'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-1918092789204189280</id><published>2011-05-31T14:23:00.000+09:00</published><updated>2011-05-31T14:23:46.807+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='iptables'/><title type='text'>iptablesを使ってパケットの中継</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;&lt;br /&gt;今日はiptablesを使ってパケットを中継させたいと思います。&lt;br /&gt;例えばapacheにプロキシ機能がありますが、それをiptablesを使ってやるというような事です。&lt;br /&gt;サーバ移行などで、移行中でも稼働させたい場合などで使えますね。&lt;br /&gt;&lt;br /&gt;例では&lt;br /&gt;旧サーバ（192.168.0.10）の8088ポートをプロキシとして、&lt;br /&gt;新サーバ（192.168.0.11）の80ポートへ中継しそれを返す場合です。&lt;br /&gt;&lt;pre&gt;# iptables -t nat -A PREROUTING -p tcp --dport 8088 -j DNAT --to 192.168.0.11:80&lt;/pre&gt;この設定は、旧サーバ側のnatを使い、そのパケットを新サーバへ転送前（PREROUTING）に中継（DNAT）します。&lt;br /&gt;-p プロトコル&lt;br /&gt;--dport 向かってきたポート&lt;br /&gt;--to 中継先サーバ:ポート&lt;br /&gt;&lt;br /&gt;次にDNATで新サーバへ中継したパケットの戻りを旧サーバで受け取り処理する処理です。&lt;br /&gt;&lt;pre&gt;#iptables -t nat -A POSTROUTING -d 192.168.0.11 -p tcp -j SNAT --to 192.168.0.10:8088&lt;/pre&gt;新サーバからのアドレス送信元を旧サーバへSNATします。&lt;br /&gt;&lt;br /&gt;あとは保存しておきましょう。&lt;br /&gt;&lt;pre&gt;# /sbin/service iptables save&lt;br /&gt; # /sbin/service iptables restart&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇえぇぇす。午後からも仕事がんばるで。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-1918092789204189280?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/1918092789204189280/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=1918092789204189280&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1918092789204189280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1918092789204189280'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/05/iptables.html' title='iptablesを使ってパケットの中継'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-6425337998119241251</id><published>2011-05-27T10:44:00.000+09:00</published><updated>2011-05-27T10:44:08.849+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='screen'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>screenでattachできない！</title><content type='html'>どうも、俺＠始業しました。&lt;br /&gt;&lt;br /&gt;ちょうど先ほど、会社端末から開発サーバ（Linux）へSSH接続しいつものように&lt;br /&gt;&lt;pre&gt;$ screen -rU&lt;/pre&gt;と既存のscreenに対しアタッチしようとしたのですが、なぜかアタッチできない現象に襲われました。&lt;br /&gt;&lt;br /&gt;滅多にない事だとは思いますが、こんなときは&lt;br /&gt;&lt;pre&gt;$ screen -D &lt;i&gt;screen番号&lt;/i&gt;&lt;/pre&gt;で強制的にdetachしてその後attachしちゃいましょう！&lt;br /&gt;&lt;br /&gt;ちなみにscreenにはマルチモードというのがあって、アタッチされている仮想端末に対し&lt;br /&gt;&lt;pre&gt;$ screen -x -rU &lt;i&gt;screen番号&lt;/i&gt;&lt;/pre&gt;とすれば複数のターミナルから同じ仮想端末環境へアタッチできる。&lt;br /&gt;2つの画面から同じ端末の内容を操作＆閲覧できるよ。&lt;br /&gt;今回のようにアタッチ出来ない場合もマルチモードで接続してからデタッチできるかも。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇぇぇぇえぇす！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-6425337998119241251?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/6425337998119241251/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=6425337998119241251&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6425337998119241251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6425337998119241251'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/05/screenattach.html' title='screenでattachできない！'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-6823835353591714948</id><published>2011-05-20T20:26:00.000+09:00</published><updated>2011-05-20T20:26:49.655+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FreeBSD'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>FreeBSDでの自動起動設定</title><content type='html'>どうも、俺＠残業中です。&lt;br /&gt;&lt;br /&gt;今日は少しマニアックはFreeBSDで自動起動設定をする際のメモメモです。&lt;br /&gt;&lt;br /&gt;他一般的なLinux（CentOSとか）だと&lt;br /&gt;&lt;pre&gt;/etc/rc.local/起動.sh　を設置&lt;/pre&gt;または&lt;br /&gt;&lt;pre&gt;# /sbin/chkconfig --add [サービス名]&lt;br /&gt;# /sbin/chkconfig [サービス名] on&lt;/pre&gt;とかでいいんですが。&lt;br /&gt;&lt;br /&gt;FreeBSDの場合はOS起動時にまず /etc/defaults/rc.conf 設定ファイルを読みサービスを起動させます。&lt;br /&gt;次に /etc/rc.conf を読みます。&lt;br /&gt;&lt;br /&gt;自作起動スクリプトは&lt;pre&gt;/usr/local/etc/rc.d/起動.sh&lt;/pre&gt;を置いてればOkでーーーーーーす！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇぇえぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-6823835353591714948?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/6823835353591714948/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=6823835353591714948&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6823835353591714948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6823835353591714948'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/05/freebsd.html' title='FreeBSDでの自動起動設定'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-6641766335869532037</id><published>2011-04-15T17:46:00.000+09:00</published><updated>2011-04-15T17:46:38.386+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>CentOS5にcairoインストールでハマる</title><content type='html'>どうも、俺＠ハマってばっかりです。&lt;br /&gt;&lt;br /&gt;CentOS5にrrdtoolをソースからインストールする場合、色んなパッケージも一緒にインストールする必要があります。&lt;br /&gt;yumで一発インストールすればすべて解決なので、そんな便利な物使えない時ってありますよね。。。いや、なくてもソースからconfigureオプション指定してキチっとインストールしたい場合ありますよね。&lt;br /&gt;&lt;br /&gt;rrdtoolをインストールする際にはざっと&lt;br /&gt;・zlib&lt;br /&gt;・libpng&lt;br /&gt;・freetype-2&lt;br /&gt;・fontconfig&lt;br /&gt;・libpango&lt;br /&gt;・libcairo&lt;br /&gt;・libpixman&lt;br /&gt;が必要になります。他にもgdとかも必要かな。&lt;br /&gt;&lt;br /&gt;今日はその中のcairoをインストールする際にハマったのでメモメモ。&lt;br /&gt;./configureコマンドで&lt;br /&gt;&lt;pre&gt;configure: error: pixman &gt;= 0.10.0 is required&lt;/pre&gt;と出てしまい、「こりゃpixmanってやつインストしなあかんねんな」と思いpixmanをググって探します。&lt;br /&gt;pixman-0.20.2あったので&lt;br /&gt;&lt;pre&gt;# wget http://cairographics.org/releases/pixman-0.20.2.tar.gz&lt;br /&gt; # tar zxvf pixman-0.20.2.tar.gz&lt;br /&gt; # cd pixman-0.20.2&lt;br /&gt; # ./configure&lt;br /&gt; # make&lt;br /&gt; # make install&lt;/pre&gt;でインストしました。&lt;br /&gt;&lt;pre&gt;# ls /usr/local/lib&lt;br /&gt;libpixman-1.a&lt;br /&gt;&lt;font color="greenyellow"&gt;libpixman-1.la&lt;/font&gt;&lt;br /&gt;&lt;font color="aqua"&gt;libpixman-1.so&lt;br /&gt;libpixman-1.so.0&lt;/font&gt;&lt;br /&gt;&lt;font color="greenyellow"&gt;libpixman-1.so.0.20.2&lt;/font&gt;&lt;/pre&gt;ちゃんとインストされてます。&lt;br /&gt;&lt;pre&gt;# cd /path/to/cairo&lt;br /&gt; # ./configure&lt;br /&gt;configure: error: pixman &gt;= 0.10.0 is required&lt;/pre&gt;あれれ！？また同じエラーが、、&lt;br /&gt;&lt;br /&gt;pixmanライブラリを認識していないでは？と思い&lt;br /&gt;&lt;pre&gt;# vim /etc/ld.so.conf&lt;br /&gt;------------------------------&lt;br /&gt;/usr/local/lib&lt;br /&gt;&lt;br /&gt;# ldconfig&lt;/pre&gt;としてもダメ。&lt;br /&gt;&lt;pre&gt;# ./configure --libdir=/usr/local/lib&lt;/pre&gt;としてもダメ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;そんな時は&lt;br /&gt;&lt;pre&gt;# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib/pkgconfig:/usr/share/lib/pkgconfig&lt;/pre&gt;としてみてください。&lt;br /&gt;きっと解決するはず。&lt;br /&gt;詳しくはman pkg-configに。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇえぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-6641766335869532037?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/6641766335869532037/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=6641766335869532037&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6641766335869532037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6641766335869532037'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/04/centos5cairo.html' title='CentOS5にcairoインストールでハマる'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-1383552549920789052</id><published>2011-04-13T17:46:00.000+09:00</published><updated>2011-04-13T17:46:51.577+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='node.js'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>CentOS4.3にnode.jsをインストールする</title><content type='html'>どうも、俺＠お仕事中です。&lt;br /&gt;忘れないうちにメモメモします。&lt;br /&gt;&lt;br /&gt;CentOS4.3にnode.js(0.4.2)をインストールした時少しハマりました。&lt;br /&gt;まずは本体をDL。&lt;br /&gt;&lt;pre&gt;# wget 'http://nodejs.org/dist/node-v0.4.2.tar.gz'&lt;/pre&gt;次に解凍しいつものやつ。&lt;br /&gt;&lt;pre&gt;# tar zxvf node-v0.4.2.tar.gz&lt;br /&gt;# cd node-v0.4.2&lt;br /&gt;# ./configure&lt;/pre&gt;まずここでズッコけました。&lt;br /&gt;&lt;br /&gt;Pythonのバージョンが2.4以上でないとconfigureできないようです。&lt;br /&gt;&lt;pre&gt;# python -V&lt;br /&gt;Python 2.3.4&lt;/pre&gt;ズッコケた場合は、各々の環境に合わせてインストールされているPythonのバージョンを上げてください。&lt;br /&gt;僕の環境では古いバイナリをアンインストールし、新しいバージョンのものをソースから再インストールしました。&lt;br /&gt;&lt;pre&gt;# python -V&lt;br /&gt;Python 2.7&lt;/pre&gt;次にmake。&lt;br /&gt;&lt;pre&gt;# ./configure &lt;br /&gt;# make&lt;/pre&gt;ここでまたズッコけました。&lt;br /&gt;&lt;pre&gt;/mnt/src/node-v0.4.2/deps/v8/src/platform-linux.cc:587: error: `PR_SET_NAME' was not declared in this scope&lt;br /&gt;/mnt/src/node-v0.4.2/deps/v8/src/platform-linux.cc:587: warning: unused variable 'PR_SET_NAME'&lt;br /&gt;scons: *** [obj/release/platform-linux.o] Error 1&lt;br /&gt;scons: building terminated because of errors.&lt;br /&gt;Waf: Leaving directory `/mnt/src/node-v0.4.2/build'&lt;br /&gt;Build failed:  -&gt; task failed (err #2): &lt;br /&gt;        {task: libv8.a SConstruct -&gt; libv8.a}&lt;br /&gt;make: *** [program] エラー 1&lt;/pre&gt;この　'PR_SET_NAME'　というのが問題らしいのですが、この記述があるものをコメントアウトしちゃいます。&lt;br /&gt;&lt;pre&gt;# grep -r 'PR_SET_NAME' *&lt;br /&gt;deps/v8/src/platform-linux.cc://  prctl(PR_SET_NAME, thread-&gt;name(), 0, 0, 0);&lt;br /&gt;src/platform_linux.cc://  prctl(PR_SET_NAME, process_title);&lt;/pre&gt;2ファイル出てきたので両方とも該当行をコメントアウトします。&lt;br /&gt;これでインストールはスムーズにいくはずです。&lt;br /&gt;&lt;pre&gt;# make&lt;br /&gt;# make install&lt;/pre&gt;おわり！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇぇぇえぇぇぇぇえぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-1383552549920789052?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/1383552549920789052/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=1383552549920789052&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1383552549920789052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1383552549920789052'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/04/centos43nodejs.html' title='CentOS4.3にnode.jsをインストールする'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-1081807488100090773</id><published>2011-04-01T18:13:00.000+09:00</published><updated>2011-04-01T18:13:46.599+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>iptablesでipマスカレード設定</title><content type='html'>どうも、俺＠週末です。&lt;br /&gt;&lt;br /&gt;iptablesを使ってipマスカレードの設定めもめも。&lt;br /&gt;ローカル回線しかないLinuxサーバでもきちんとデフォルトゲートウェイの設定をしてあげれば、ローカルサーバからグローバルのデータを取得することは出来ます。&lt;br /&gt;&lt;br /&gt;・グローバルサーバ（192.168.0.10:ゲートウェイとなる）ローカル回線とグローバル回線&lt;br /&gt;・ローカルサーバ（192.168.0.11）　ローカル回線のみ&lt;br /&gt;とします。&lt;br /&gt;&lt;br /&gt;まずグローバル側の設定から始めましょう。&lt;br /&gt;&lt;pre&gt;// グローバルサーバ&lt;br /&gt;# iptables -L -t nat&lt;br /&gt;Chain PREROUTING (policy ACCEPT)&lt;br /&gt;target     prot opt source               destination         &lt;br /&gt;&lt;br /&gt;Chain POSTROUTING (policy ACCEPT)&lt;br /&gt;target     prot opt source               destination         &lt;br /&gt;&lt;br /&gt;Chain OUTPUT (policy ACCEPT)&lt;br /&gt;target     prot opt source               destination&lt;/pre&gt;普通はこんな感じ。&lt;br /&gt;&lt;pre&gt;// グローバルサーバ&lt;br /&gt;# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE -s 192.168.0.0/24&lt;br /&gt;# iptables -L -t nat&lt;br /&gt;Chain INPUT (policy ACCEPT)&lt;br /&gt;target     prot opt source               destination&lt;br /&gt;&lt;br /&gt;Chain FORWARD (policy ACCEPT)&lt;br /&gt;target     prot opt source               destination&lt;br /&gt;&lt;br /&gt;Chain OUTPUT (policy ACCEPT)&lt;br /&gt;target     prot opt source               destination&lt;br /&gt;[root@ss79 cadox]# iptables -L -t nat&lt;br /&gt;Chain PREROUTING (policy ACCEPT)&lt;br /&gt;target     prot opt source               destination&lt;br /&gt;&lt;br /&gt;Chain POSTROUTING (policy ACCEPT)&lt;br /&gt;target     prot opt source               destination&lt;br /&gt;MASQUERADE  all  --  192.168.1.0/24       anywhere&lt;br /&gt;&lt;br /&gt;Chain OUTPUT (policy ACCEPT)&lt;br /&gt;target     prot opt source               destination&lt;/pre&gt;ふむふむ、ちゃんと設定されている。&lt;br /&gt;次に転送設定。&lt;br /&gt;&lt;pre&gt;// グローバルサーバ&lt;br /&gt;# iptables -P FORWARD ACCEPT&lt;br /&gt;# service iptables save&lt;/pre&gt;かなりザックリですが。。&lt;br /&gt;&lt;pre&gt;// グローバルサーバ やり方は色々ありますが、、&lt;br /&gt;# vim /etc/sysctl.conf&lt;br /&gt;----------------------------------&lt;br /&gt;net.ipv4.ip_forward = 1&lt;br /&gt;&lt;br /&gt;# sysctl -p&lt;/pre&gt;または&lt;br /&gt;&lt;pre&gt;// グローバルサーバ&lt;br /&gt;echo 1 &gt; /proc/sys/net/ipv4/ip_forward&lt;/pre&gt;など。。&lt;br /&gt;&lt;br /&gt;次にローカルサーバ側でデフォルトゲートウェイの設定を行います。&lt;br /&gt;&lt;pre&gt;// ローカルサーバ&lt;br /&gt;# route add default gw 192.168.0.10&lt;br /&gt;# route&lt;br /&gt;Kernel IP routing table&lt;br /&gt;Destination     Gateway         Genmask         Flags Metric Ref    Use Iface&lt;br /&gt;192.168.0.0     *               255.255.255.0   U     0      0        0 eth1&lt;br /&gt;xxx.xxx.xx.xx   *               255.255.0.0     U     0      0        0 eth1&lt;br /&gt;default         192.168.0.10    0.0.0.0         UG    0      0        0 eth1　// ←できてる&lt;/pre&gt;再起動しても設定がリセットされないように&lt;br /&gt;&lt;pre&gt;// ローカルサーバ&lt;br /&gt;# vim /etc/sysconfig/network&lt;br /&gt;----------------------------&lt;br /&gt;GATEWAY=192.168.0.10 &lt;font color="steelblue"&gt;# ←追加&lt;/font&gt;&lt;/pre&gt;これでOK！&lt;br /&gt;&lt;br /&gt;以上でぇぇぇえっぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-1081807488100090773?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/1081807488100090773/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=1081807488100090773&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1081807488100090773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1081807488100090773'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/04/iptablesip.html' title='iptablesでipマスカレード設定'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-2408546665672652813</id><published>2011-03-18T18:02:00.002+09:00</published><updated>2011-03-18T18:02:40.501+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>postgresqlでSELECTした結果でUPDATEをかける</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;&lt;br /&gt;postgresqlでSELECTした結果を利用してUPDATE（更新）をかける方法についてメモメモ。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;dbname=# select * from table_a;&lt;br /&gt; id | name | ref_id &lt;br /&gt;----+------+--------&lt;br /&gt;  1 | xxx  |     10&lt;br /&gt;  2 | xxx  |     11&lt;br /&gt;  3 | xxx  |     12&lt;br /&gt;(3 rows)&lt;br /&gt;&lt;br /&gt;dbname=#&lt;br /&gt;dbname=# select * from table_b;&lt;br /&gt; id | name &lt;br /&gt;----+------&lt;br /&gt; 10 | aaa&lt;br /&gt; 11 | bbb&lt;br /&gt; 12 | ccc&lt;br /&gt;(3 rows)&lt;/pre&gt;テーブルはこういう状態だとします。&lt;br /&gt;期待する結果は&lt;br /&gt;&lt;pre&gt;dbname=# select * from table_a;&lt;br /&gt; id | name | ref_id &lt;br /&gt;----+------+--------&lt;br /&gt;  1 | aaa  |     10&lt;br /&gt;  2 | bbb  |     11&lt;br /&gt;  3 | ccc  |     12&lt;br /&gt;(3 rows)&lt;/pre&gt;table_bのnameでtable_aのnameを更新したい場合。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;dbname=# UPDATE table_a&lt;br /&gt; SET name = foo.name&lt;br /&gt; FROM (SELECT * FROM table_b) AS foo&lt;br /&gt;WHERE a.ref_id = foo.id;&lt;/pre&gt;これで出来ます！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇぇぇぇぇぇえぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-2408546665672652813?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/2408546665672652813/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=2408546665672652813&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/2408546665672652813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/2408546665672652813'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/03/postgresqlselectupdate.html' title='postgresqlでSELECTした結果でUPDATEをかける'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-1938539722434599978</id><published>2011-03-09T19:09:00.003+09:00</published><updated>2011-03-09T19:19:16.965+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>apacheのリバースプロキシでSSL接続しちゃう</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;&lt;br /&gt;またまたハマりました。&lt;br /&gt;タイトル通り、apache（2系）のリバースプロキシ機能を使ってローカル内のapacheにSSL接続しようと思ってハマりました。&lt;br /&gt;ググったらたくさん参考資料出てくるんですけどね、、&lt;br /&gt;&lt;br /&gt;イメージは&lt;br /&gt;&lt;pre&gt;クライアントブラウザ　→（SSL）→　Proxyサーバ[192.168.10.10]　→（SSL）→　ローカルapacheサーバ[192.168.10.11]&lt;/pre&gt;です。&lt;br /&gt;&lt;br /&gt;まずapacheをインストールする際に mod_proxyとmod_ssl、mod_proxy_connectが有効になっていないといけません。（多分、、）&lt;br /&gt;&lt;pre&gt;# /usr/local/apache2/bin/httpd -l&lt;/pre&gt;で上記のモジュールが出てくれば問題ありませんが、なければapacheをインストールし直しましょう。&lt;br /&gt;&lt;pre&gt;# ./configure --enable-module=so --with-included-apr --enable-proxy --enable-ssl --enable-proxy-connect&lt;/pre&gt;オプションは環境に合わせて変えてください。&lt;br /&gt;&lt;pre&gt;# make &amp;&amp; make install&lt;/pre&gt;&lt;br /&gt;では、まずhttpd.confでリバースプロキシの設定しましょう。&lt;br /&gt;&lt;pre&gt;# vim /usr/local/apache2/conf/httpd.conf&lt;br /&gt;----------------------------------------------&lt;br /&gt;&lt;font color="steelblue"&gt;# 以下を追加&lt;/font&gt;&lt;br /&gt;&lt;font color="aqua"&gt;ProxyRequests&lt;/font&gt; off&lt;br /&gt;&lt;font color="aqua"&gt;ProxyPass&lt;/font&gt; / http://192.168.10.11/&lt;br /&gt;&lt;font color="aqua"&gt;ProxyPassReverse&lt;/font&gt; /http://192.168.10.11/&lt;br /&gt;&lt;font color="aqua"&gt;ProxyPassReverseCookieDomain&lt;/font&gt; &lt;i&gt;mydomain local-domain&lt;/i&gt;&lt;br /&gt;&lt;font color="aqua"&gt;ProxyPassReverseCookiePath&lt;/font&gt; / /&lt;br /&gt;&amp;lt;Proxy *&gt;&lt;br /&gt; order deny,allow&lt;br /&gt; deny from all&lt;br /&gt; allow from xxx.xxx.xxx.0/24 ....&lt;font color="steelblue"&gt;# あとは適当に&lt;/font&gt;&lt;br /&gt;&amp;lt;/Proxy&gt;&lt;/pre&gt;リバースプロキシだけの設定では以上です。&lt;br /&gt;&lt;br /&gt;これからSSLの設定を行いましょう。&lt;br /&gt;※証明書の作り方は以前（&lt;a href="http://koexuka.blogspot.com/2009/08/openssl.html"&gt;opensslを使って秘密鍵と証明書の作成&lt;/a&gt;）も書いたのでそちらも参照ください。&lt;br /&gt;&lt;br /&gt;オレオレ証明書作ります。&lt;br /&gt;まず、CA秘密鍵作成&lt;br /&gt;&lt;pre&gt;# openssl genrsa -rand /var/log/messages -out ca.key 1024&lt;/pre&gt;-randオプションはランダムなデータを作成する元となるファイルを適当に選択。&lt;br /&gt;次にCA証明書の署名要求作成&lt;br /&gt;&lt;pre&gt;# openss req -new -key ca.key -out ca.csr&lt;/pre&gt;ここは色々質問されますが、内容は割愛します。&lt;br /&gt;では次に証明書発行&lt;br /&gt;&lt;pre&gt;# openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt&lt;/pre&gt;これでCA証明書まで完成です。&lt;br /&gt;&lt;br /&gt;次はサーバ用証明書を作成しましょう。&lt;br /&gt;まずサーバ用秘密鍵を作ります&lt;br /&gt;&lt;pre&gt;# openssl genrsa -rand /var/log/maillog -out server.key 1024&lt;/pre&gt;↑と一緒ですね。&lt;br /&gt;次にサーバ証明書の署名要求を作ります&lt;br /&gt;&lt;pre&gt;# openssl req -new -key server.key -out server.csr&lt;/pre&gt;これも↑と一緒。&lt;br /&gt;次にシリアルを記述した適当なファイルを作成&lt;br /&gt;&lt;pre&gt;# echo 01 &gt; ca.serial&lt;/pre&gt;では証明書を発行しちゃいましょう&lt;br /&gt;&lt;pre&gt;# openssl x509 -req -days 3650 -CA ca.crt -CAkey ca.key -in server.csr -out server.crt&lt;/pre&gt;出来ました！&lt;br /&gt;&lt;br /&gt;これを適当な場所へコピー（移動）します。&lt;br /&gt;&lt;pre&gt;# cp server.crt /usr/local/apache2/conf/ssl/server.crt &lt;font color="steelblue"&gt;# ←サーバ証明書&lt;/font&gt;&lt;br /&gt; # cp server.key /usr/local/apache2/conf/ssl/server.key &lt;font color="steelblue"&gt;# ←サーバ秘密鍵&lt;/font&gt;&lt;/pre&gt;ふぅ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;最後にapacheの設定です。&lt;br /&gt;&lt;pre&gt;# vim /usr/local/apache2/conf/httpd.conf&lt;br /&gt;-----------------------------------------------&lt;br /&gt;&lt;font color="yellow"&gt;&amp;lt;IfModule&lt;/font&gt; &lt;font color="red"&gt;mod_ssl.c&lt;/font&gt;&gt;&lt;br /&gt;&lt;font color="aqua"&gt; Include conf/ssl.conf&lt;/font&gt;&lt;br /&gt;&lt;font color="yellow"&gt;&amp;lt;/IfModule&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt; # vim /usr/local/apache2/conf/ssl.conf （必要な部分のみ抜粋）&lt;br /&gt;----------------------------------------&lt;br /&gt;&lt;font color="aqua"&gt;Listen&lt;/font&gt; 443&lt;br /&gt;&lt;font color="yellow"&gt;&amp;lt;VirtualHost&lt;/font&gt; &lt;font color="red"&gt;_default_:443&lt;/font&gt;&lt;font color="yellow"&gt;&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="aqua"&gt;SSLCertificateFile&lt;/font&gt; /usr/local/apache2/conf/ssl/server.crt&lt;br /&gt;&lt;font color="aqua"&gt;SSLCertificateKeyFile&lt;/font&gt; /usr/local/apache2/conf/ssl/server.key&lt;br /&gt;&lt;font color="yellow"&gt;&amp;lt;VirtualHost&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="steelblue"&gt;#SSLCACertificatePath /usr/local/apache2/conf/ssl.crt いらない！？&lt;/font&gt;&lt;br /&gt;&lt;font color="steelblue"&gt;#SSLCACertificateFile /usr/local/apache2/conf/ssl-bundle.crt いらない！？&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="steelblue"&gt;#SSLVerifyClient require いらない。クライアントの認証が必要であれば付ける&lt;/font&gt;&lt;br /&gt;&lt;font color="steelblue"&gt;#SSLVerifyDepth 1 いらない&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="aqua"&gt;SSLProxyEngine&lt;/font&gt; on&lt;br /&gt;&lt;font color="aqua"&gt;ProxyPass&lt;/font&gt; / https://192.168.10.11/ &lt;font color="steelblue"&gt;# ローカルのapacheが例えば4444ポートでSSLを動かしてる場合は　ProxyPass / https://192.168.10.11:4444/ね&lt;/font&gt;&lt;br /&gt;&lt;font color="aqua"&gt;ProxyPassReverse&lt;/font&gt; / https://192.168.10.11/ &lt;font color="steelblue"&gt;# こっちも ProxyPassReverse / https://192.168.10.11:4444/ね&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;出来ましたー！！&lt;br /&gt;&lt;br /&gt;起動！！&lt;br /&gt;&lt;pre&gt;# /usr/local/apache2/bin/httpd -k start -DSSL&lt;/pre&gt;たぶんパスフレーズ聞かれるので応えてあげてね。&lt;br /&gt;ちなみにパスフレーズを聞かれるのが面倒な人は&lt;br /&gt;&lt;pre&gt;# vim /usr/local/apache2/conf/ssl.conf&lt;br /&gt;----------------------------------------------&lt;br /&gt;&lt;font color="aqua"&gt;SSLPassPhraseDialog&lt;/font&gt; exec:/usr/local/apache2/bin/pp-exec&lt;br /&gt;&lt;font color="steelblue"&gt;# パスフレーズを入力するためのダイアログタイプ。builtin（デフォルト）またはexec。&lt;/font&gt;&lt;/pre&gt;で、&lt;br /&gt;&lt;pre&gt;# vim /usr/local/apache2/bin/pp-exec&lt;br /&gt;------------------------------------------&lt;br /&gt;&lt;font color="steelblue"&gt;#!/bin/sh&lt;/font&gt;&lt;br /&gt;echo "パスフレーズ"&lt;/pre&gt;だぜ！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇぇぇぇぇぇぇぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-1938539722434599978?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/1938539722434599978/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=1938539722434599978&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1938539722434599978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1938539722434599978'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/03/apachessl.html' title='apacheのリバースプロキシでSSL接続しちゃう'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-4487464394995411571</id><published>2011-03-08T20:55:00.000+09:00</published><updated>2011-03-08T20:55:34.265+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>phpインストール時にlibxml2を除外する</title><content type='html'>どうも、俺＠おもいっきり残業中です。&lt;br /&gt;&lt;br /&gt;php(ver.5.3.5)をインストールしてて、libxml2関連のエラーが出る場合。&lt;br /&gt;※makeしたときにエラーが出ました。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;configure: error: libxml2 version 2.6.10 or greater required.&lt;/pre&gt;僕の場合はこんな感じでしたが、いかんせんサーバが古いため試行錯誤した結果、libxml2を再インストール（またはアップデート）することを諦めた人へ。。。&lt;br /&gt;&lt;br /&gt;簡単な話が、configureオプションでlibxml2を外してやればいいのです。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# vim /usr/local/src/php-5.3.5/conf.sh&lt;br /&gt;----------------------------------------------&lt;br /&gt;#!/bin/sh&lt;br /&gt;./configure --with-apxs2=/usr/local/apache2/bin/apxs --enable-mbstring --enable-zend-multibyte --with-pgsql=/usr/local/pgsql --with-pdo-pgsql=/usr/local/pgsql --enable-sockets --disable-libxml --disable-dom --disable-simplexml --disable-xml --disable-xmlreader --disable-xmlwriter --without-pear&lt;/pre&gt;普段のオプションに加えて&lt;br /&gt;&lt;pre&gt;--disable-libxml --disable-dom --disable-simplexml --disable-xml --disable-xmlreader --disable-xmlwriter --without-pear&lt;/pre&gt;これらを追加してやればmakeできます！！&lt;br /&gt;&lt;br /&gt;ただし、phpのlibxml（xml）関連、DOM関連、PEARがインストールされませんのであしからず！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇぇえぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-4487464394995411571?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/4487464394995411571/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=4487464394995411571&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4487464394995411571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4487464394995411571'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/03/phplibxml2.html' title='phpインストール時にlibxml2を除外する'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-1677595583266666615</id><published>2011-02-25T10:11:00.006+09:00</published><updated>2011-02-25T10:19:10.932+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>PHPとpostgresqlでテーブル一覧を取得</title><content type='html'>どうも、オレ＠始業しましたです。&lt;br /&gt;&lt;br /&gt;忘れないうちにメモメモ。&lt;br /&gt;DBがpostgreSQLでphpからテーブル一覧を取得するためのクエリについて。&lt;br /&gt;postgreSQLのバージョンは7.4.12ですが、おそらく他のバージョンでも大丈夫かな？（未確認）&lt;br /&gt;PHPのバージョンは5以上です。&lt;br /&gt;&lt;pre&gt;&lt;font color="fuciana"&gt;&amp;lt;?php&lt;/font&gt;&lt;br /&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;pdo&lt;/font&gt; = &lt;font color="yellow"&gt;new&lt;/font&gt; &lt;font color="aqua"&gt;PDO&lt;/font&gt;(&lt;font color="red"&gt;'pgsql:host=localhost;port=5432;dbname=&lt;i&gt;dbname&lt;/i&gt;;user=&lt;i&gt;username&lt;/i&gt;;password=&lt;i&gt;password&lt;/i&gt;&lt;/font&gt;');&lt;br /&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;sql&lt;/font&gt; = '&lt;font color="red"&gt;select pg_statio_user_tables.relname&lt;br /&gt;from pg_catalog.pg_class,pg_catalog.pg_statio_user_tables&lt;br /&gt;where relkind='r'&lt;br /&gt;and pg_catalog.pg_statio_user_tables.relid=pg_catalog.pg_class.relfilenode&lt;/font&gt;';&lt;br /&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;stmt&lt;/font&gt; = &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;pdo&lt;/font&gt;&lt;font color="greenyellow"&gt;-&gt;&lt;/font&gt;query(&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;sql&lt;/font&gt;);&lt;br /&gt;&lt;font color="aqua"&gt;var_dump&lt;/font&gt;(&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;stmt&lt;/font&gt;&lt;font color="greenyellow"&gt;-&gt;&lt;/font&gt;fetchAll());&lt;/pre&gt;連想配列（fetchAll()した結果）でテーブル一覧が取得できます。&lt;br /&gt;ただし、作った覚えのないテーブルも含まれているので要注意。&lt;br /&gt;&lt;br /&gt;ちなみに、MySQLだと簡単で&lt;br /&gt;&lt;pre&gt;&lt;font color="fuciana"&gt;&amp;lt;?php&lt;/font&gt;&lt;br /&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;sql&lt;/font&gt; = '&lt;font color="red"&gt;show tables&lt;/font&gt;';&lt;br /&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;stmt&lt;/font&gt; = &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;pdo&lt;/font&gt;&lt;font color="greenyellow"&gt;-&gt;&lt;/font&gt;query(&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;sql&lt;/font&gt;);&lt;br /&gt;&lt;font color="aqua"&gt;var_dump&lt;/font&gt;(&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;stmt&lt;/font&gt;&lt;font color="greenyellow"&gt;-&gt;&lt;/font&gt;fetchAll());&lt;/pre&gt;です。&lt;br /&gt;&lt;br /&gt;以上でぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-1677595583266666615?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/1677595583266666615/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=1677595583266666615&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1677595583266666615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1677595583266666615'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/02/phppostgresql.html' title='PHPとpostgresqlでテーブル一覧を取得'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-3844219214914371537</id><published>2011-02-23T21:09:00.000+09:00</published><updated>2011-02-23T21:09:18.270+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>vimでバックスペースが効かない</title><content type='html'>どうも、俺＠残業中です。&lt;br /&gt;&lt;br /&gt;いつも忘れるので備忘録。&lt;br /&gt;vimでバックスペースを入れても無反応 or DELETE状態になってる場合。&lt;br /&gt;■対策１&lt;br /&gt;.vimrcを編集&lt;br /&gt;&lt;pre&gt;$ vim ~/.vimrc&lt;br /&gt;--------------------&lt;br /&gt;noremap ^? ^H&lt;br /&gt;noremap! ^? ^H&lt;br /&gt;noremap &lt;BS&gt; ^H&lt;br /&gt;noremap! &lt;BS&gt; ^H&lt;/pre&gt;を追加。&lt;br /&gt;^?はインサートモードでCtrl + v + BackSpace&lt;br /&gt;^HはインサートモードでCtrl + v + Ctrl + h&lt;br /&gt;&lt;br /&gt;■対策２&lt;br /&gt;sttyを設定&lt;br /&gt;&lt;pre&gt;$ stty -a&lt;br /&gt;erase = ^H&lt;/pre&gt;があることを確認。&lt;br /&gt;もしなければ、&lt;br /&gt;&lt;pre&gt;stty erase ^H&lt;/pre&gt;を設定する。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;これでも出来なければまたググってくださぁぁぁあぁぁい。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-3844219214914371537?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/3844219214914371537/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=3844219214914371537&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3844219214914371537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3844219214914371537'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/02/vim.html' title='vimでバックスペースが効かない'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-9136187104462130153</id><published>2011-02-16T15:01:00.000+09:00</published><updated>2011-02-16T15:01:37.158+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>innotopを使う</title><content type='html'>どうも、オレ＠仕事中です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://koexuka.blogspot.com/2011/02/mytop.html"&gt;オデの日記::mytopを使う&lt;/a&gt;に続きまして、innotopの利用です。&lt;br /&gt;&lt;br /&gt;今回参考にさせてもらったサイトは&lt;a href="http://d.hatena.ne.jp/interdb/20100412/1271068031"&gt;The Programmer’s Guide to the Parallel World::MySQL: innotopとサンプリング&lt;/a&gt;です。ありがとうございます。&lt;br /&gt;&lt;br /&gt;まず&lt;a href="http://sourceforge.net/projects/innotop/"&gt;innotop(source forge)&lt;/a&gt;から本体をDLします。&lt;br /&gt;&lt;pre&gt;# wget 'http://downloads.sourceforge.net/project/innotop/innotop/1.6.0/innotop-1.6.0.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Finnotop%2F&amp;ts=1297835567&amp;use_mirror=jaist'&lt;/pre&gt;解凍し、インストールします。&lt;br /&gt;&lt;pre&gt;# unzip innotop-1.6.0.zip&lt;br /&gt; # cd innotop-1.6.0&lt;br /&gt; # perl Makefile.PL&lt;br /&gt; # make install&lt;/pre&gt;ちなみに、僕の環境ではここでまたperlモジュールのエラーが出ました。&lt;br /&gt;なのでまたもやcpan利用します。&lt;br /&gt;&lt;pre&gt;# cpan install Time::HiRes&lt;br /&gt; # make install&lt;/pre&gt;これでOK。&lt;br /&gt;&lt;br /&gt;初回実行時に色々設定を質問されます。&lt;br /&gt;&lt;pre&gt;# innotop&lt;br /&gt;You have not defined any database connections.&lt;br /&gt;Choose a name for the connection.  It cannot contain whitespace, colons or semicolons.&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Enter a name: &lt;/u&gt; &lt;font color="steelblue"&gt;ここは何でもOK&lt;/font&gt;&lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt;Typical DSN strings look like&lt;br /&gt;   DBI:mysql:;host=hostname;port=port&lt;br /&gt;The db and port are optional and can usually be omitted.&lt;br /&gt;If you specify 'mysql_read_default_group=mysql' many options can be read&lt;br /&gt;from your mysql options files (~/.my.cnf, /etc/my.cnf).&lt;br /&gt;&lt;br /&gt;&lt;u&gt;Enter a DSN string: &lt;/u&gt; &lt;font color="steelblue"&gt;DBI:mysql:database=&lt;i&gt;DatabaseName&lt;/i&gt;;host=&lt;i&gt;hostname&lt;/i&gt;;port=&lt;i&gt;port&lt;/i&gt;のような形で入力&lt;br /&gt;何も指定しない場合はDBI:mysql:;; かな&lt;/font&gt;&lt;/pre&gt;失敗したらユーザのホームディレクトリに~/.innotop/というディレクトリがあるので&lt;br /&gt;丸ごと削除で再度設定できる＆~/.innotop/innotop.iniを書き換える事で修正可能です。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# innotop -d &lt;i&gt;秒間&lt;/i&gt;&lt;/pre&gt;のようにして利用できます。&lt;br /&gt;mytopよりinnotopの方が見やすいと思いました。&lt;br /&gt;&lt;br /&gt;以上でぇぇぇえぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-9136187104462130153?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/9136187104462130153/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=9136187104462130153&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/9136187104462130153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/9136187104462130153'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/02/innotop.html' title='innotopを使う'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-4251921389751416563</id><published>2011-02-16T14:39:00.001+09:00</published><updated>2011-02-16T14:39:59.388+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>mytopを使う</title><content type='html'>どうも、オレ＠仕事中です。&lt;br /&gt;&lt;br /&gt;今日はMySQLの実行状況を確認できる&lt;a href="http://jeremy.zawodny.com/mysql/mytop/"&gt;mytop&lt;/a&gt;というツールの紹介します。&lt;br /&gt;また後でinnotopについても書く（予定）です。&lt;br /&gt;Unixコマンドのtopをmysql版にしたようなものです。&lt;br /&gt;&lt;br /&gt;まず上記のサイトからtarボールをDLし解凍します。&lt;br /&gt;&lt;pre&gt;# wget 'http://jeremy.zawodny.com/mysql/mytop/mytop-1.6.tar.gz'&lt;br /&gt;# tar zxvf mytop-1.6.tar.gz&lt;br /&gt;# cd mytop-1.6&lt;/pre&gt;次にインストールです。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# perl Makefile.pl&lt;/pre&gt;ここで以下のようなエラーでる場合&lt;br /&gt;&lt;pre&gt;Warning: prerequisite DBD::mysql 1 not found.&lt;br /&gt;Warning: prerequisite Term::ReadKey 2.1.not found.&lt;/pre&gt;&lt;a href="http://koexuka.blogspot.com/2009/04/cpan.html"&gt;cpanモジュール&lt;/a&gt;でインストールしましょう。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# cpan install DBD::mysql &lt;font color="steelblue"&gt;# 該当サーバでMySQLサービスを停止させておいてね！&lt;/font&gt;&lt;br /&gt; # cpan install Term::ReadKey&lt;/pre&gt;これでOK！&lt;br /&gt;ではインストール。ドキュメント通りにやります。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# make&lt;br /&gt; # make test&lt;br /&gt; # make install&lt;/pre&gt;これでインストール完了です。&lt;br /&gt;&lt;br /&gt;あとは実行するのみ。&lt;br /&gt;&lt;pre&gt;# mytop -s1 -hlocalhost -u&lt;i&gt;UserName&lt;/i&gt; -p&lt;i&gt;Password&lt;/i&gt;&lt;/pre&gt;-s は表示間隔（秒）です。&lt;br /&gt;&lt;br /&gt;ちなみに、MySQLバージョン5以上の場合はmytopソース内の「SHOW STATUS」を「SHOW GLOBAL STATUS」に書き換える必要があります。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;MySQL on localhost (5.0.41)                                                                                                                                                                                                         up 0+00:14:17 [14:33:46]&lt;br /&gt; Queries: 81.0   qps:    0 Slow:     0.0         Se/In/Up/De(%):    00/00/00/00 &lt;br /&gt;             qps now:    0 Slow qps: 0.0  Threads:    1 (   1/   0) 00/00/00/00 &lt;br /&gt; Key Efficiency: 100.0%  Bps in/out:   0.2/ 14.4   Now in/out:   8.4/ 1.1k&lt;br /&gt;&lt;br /&gt;      Id      User         Host/IP         DB      Time    Cmd Query or State                                                                                                                                                                 &lt;br /&gt;      --      ----         -------         --      ----    --- ----------                                                                                                                                                                               &lt;br /&gt;       &lt;font color="yellow"&gt;5      root       localhost       test         0  Query show full processlist&lt;/font&gt;&lt;/pre&gt;実行中スレッドが黄色、接続のみのスレッドが白、システムに関するスレッドが緑色です。&lt;br /&gt;&lt;br /&gt;内容は&lt;br /&gt;&lt;pre&gt;Queries: 発行されたクエリの総数&lt;br /&gt; qps: 秒間の平均クエリ数&lt;br /&gt; Slow: スロークエリ総数&lt;br /&gt; Se/In/Up/De: select、Insert、Update、Delete分の比率&lt;br /&gt; qps now: 現在の秒間平均クエリ数&lt;br /&gt; Slow qps: 現在の秒間平均スロークエリ数&lt;br /&gt; Threads: スレッド数（アクティブスレッド数/総スレッドキャッシュ数）&lt;br /&gt; Key Efficiency: ky_bufferヒット数&lt;br /&gt; Bps in/out: 合計のデータ転送速度（bytes/sec）&lt;br /&gt; Now in/out: 現在のデータ転送量（bits/sec）&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://www.flatz.jp/archives/85"&gt;FLATzブログ::mytopの使い方&lt;/a&gt;を参考にさせてもらいました。&lt;br /&gt;&lt;br /&gt;以上どぇぇぇえす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-4251921389751416563?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/4251921389751416563/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=4251921389751416563&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4251921389751416563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4251921389751416563'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/02/mytop.html' title='mytopを使う'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-6722586775883915007</id><published>2011-02-09T21:21:00.002+09:00</published><updated>2011-02-09T21:55:44.266+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>javascriptでsleepみたいな事やりたい</title><content type='html'>どうも、俺＠残業中です。&lt;br /&gt;&lt;br /&gt;javascriptでsleep();、、そんなものはございません＞＜&lt;br /&gt;&lt;br /&gt;ただし、似たようなものでwindow.setInterval(&lt;i&gt;func&lt;/i&gt;, &lt;i&gt;millisec&lt;/i&gt;);があります。&lt;br /&gt;例えば現在時刻をリアルタイムに表示させるには&lt;br /&gt;&lt;pre&gt;&amp;lt;div id="nowtime"&gt;&amp;lt;/div&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&gt;&lt;br /&gt;  window.setInterval(setTimer, 1000);&lt;br /&gt;  function setTimer() {&lt;br /&gt;    var nowdate = new Date();&lt;br /&gt;    var year = nowdate.getFullYear();&lt;br /&gt;    var mon  = nowdate.getMonth() + 1;&lt;br /&gt;    var day  = nowdate.getDate();&lt;br /&gt;    var hour = nowdate.getHours();&lt;br /&gt;    var min  = nowdate.getMinutes();&lt;br /&gt;    var sec  = nowdate.getSeconds();&lt;br /&gt;&lt;br /&gt;    var elem = document.getElementById("nowtime");&lt;br /&gt;    elem.innerHTML = year + "年" + mon + "月" + day + "日" + " " + hour + "時" + min + "時" + sec + "秒"; &lt;br /&gt;  }&lt;br /&gt;&amp;lt;/script&gt;&lt;/pre&gt;でできちゃいますよ！&lt;br /&gt;間違ってもwhile(true)とかで無限ループさせないようにね！&lt;br /&gt;&lt;br /&gt;以上でぇぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-6722586775883915007?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/6722586775883915007/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=6722586775883915007&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6722586775883915007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6722586775883915007'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/02/javascriptsleep.html' title='javascriptでsleepみたいな事やりたい'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-4433525588740356649</id><published>2011-02-01T11:21:00.000+09:00</published><updated>2011-02-01T11:21:37.526+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='vpn'/><title type='text'>PPTPサーバ構築</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;&lt;br /&gt;docomoのGalaxyTab＋ポケットwifiルーターを1円で購入（月額5,000円くらい）したので、休みの日にネットブック持ち歩かず優雅にGalaxyTabを持ち歩くことにしました。&lt;br /&gt;突然の障害はGalaxyTabからsvn接続で対応！と計画中です。（かなり操作しづらいけど）&lt;br /&gt;androidの「connectbot」というアプリがsshクライアントとして利用できます。&lt;br /&gt;&lt;br /&gt;なのでVPNサーバ（PPTP)を構築することにしました。&lt;br /&gt;超簡単です。&lt;br /&gt;OSはCentOS4.3です。&lt;br /&gt;&lt;br /&gt;まずpppをインストール。http://ppp.samba.org/から最新のソースをDLしておく&lt;br /&gt;&lt;pre&gt;# wget 'ftp://ftp.samba.org/pub/ppp/ppp-2.4.5.tar.gz'&lt;br /&gt;# tar zxvf ppp-2.4.5.tar.gz&lt;br /&gt;# cd ppp-2.4.5&lt;br /&gt;# ./configure&lt;br /&gt;# make &amp;&amp; make install&lt;/pre&gt;これでよし。&lt;br /&gt;&lt;br /&gt;次にpptpdを最新ソースからインストール。&lt;br /&gt;&lt;pre&gt;# wget 'http://sourceforge.net/projects/poptop/files/pptpd/pptpd-1.3.4/pptpd-1.3.4.tar.gz/download'&lt;br /&gt;# tar zxvf pptpd-1.3.4.tar.gz&lt;br /&gt;# cd pptpd-1.3.4&lt;br /&gt;# ./configure&lt;br /&gt;# make &amp;&amp; make install&lt;/pre&gt;これでよし。&lt;br /&gt;&lt;br /&gt;次は設定ファイルを修正します。&lt;br /&gt;まずは/etc/pptpd.conf&lt;br /&gt;&lt;pre&gt;# vim /etc/pptpd.conf&lt;br /&gt;------------------------------&lt;br /&gt; option /etc/ppp/options.pptpd&lt;br /&gt; localip 192.168.0.15 &lt;font color="steelblue"&gt;PPTPサーバのローカルIP&lt;/font&gt;&lt;br /&gt; remoteip 192.168.0.110-131 &lt;font color="steelblue"&gt;# クライアントに割り振られるローカルIP。ローカルネットワーク内の問題なさそうな範囲でOK&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;次は/etc/ppp/options.pptpd&lt;br /&gt;&lt;pre&gt;# vim /etc/ppp/options.pptpd&lt;br /&gt;------------------------------&lt;br /&gt;lock&lt;br /&gt;noauth&lt;br /&gt;nobsdcomp&lt;br /&gt;nodeflate&lt;br /&gt;idle 0&lt;br /&gt;maxfail 0&lt;br /&gt;&lt;font color="steelblue"&gt;# 書いたほうが良いかもしれない&lt;br /&gt;# name servername&lt;br /&gt;# ms-dns 192.168.0.1 ←クライアントへ通知するDNSサーバアドレス&lt;/font&gt;&lt;/pre&gt;どこかのサイトを参考にさせてもらいました。（どこだったか忘れちゃいました＞＜）&lt;br /&gt;&lt;br /&gt;次は/etc/ppp/chap-secrets&lt;br /&gt;&lt;pre&gt;# vim /etc/ppp/chap-secrets&lt;br /&gt;------------------------------&lt;br /&gt;&lt;font color="steelblue"&gt;# Secrets for authentication using CHAP&lt;br /&gt;# client    server  secret          IP addresses&lt;/font&gt;&lt;br /&gt;&lt;i&gt;UserName&lt;/i&gt; * "&lt;i&gt;Password&lt;/i&gt;" *&lt;/pre&gt;UserNameとPasswordにログインするユーザ名、パスワードを設定します。&lt;br /&gt;&lt;br /&gt;もうちょいです。ルーティングの設定。&lt;br /&gt;&lt;pre&gt;# vim /etc/sysctl.conf&lt;br /&gt;-------------------------------&lt;br /&gt;&lt;font color="steelblue"&gt;# net.ipv4.ip_forward = 0 コメントアウト&lt;/font&gt;&lt;br /&gt;net.ipv4.ip_forward = 1&lt;br /&gt;net.ipv4.conf.all.accept_redirects = 0&lt;br /&gt;net.ipv4.conf.default.send_redirects = 0&lt;br /&gt;net.ipv4.conf.default.accept_redirects = 0&lt;br /&gt;net.ipv4.conf.lo.send_redirects = 0&lt;br /&gt;net.ipv4.conf.lo.accept_redirects = 0&lt;br /&gt;net.ipv4.conf.eth0.send_redirects = 0&lt;br /&gt;net.ipv4.conf.eth0.accept_redirects = 0&lt;/pre&gt;この設定で反映させます。&lt;br /&gt;&lt;pre&gt;# sysctl -p&lt;/pre&gt;&lt;br /&gt;ここまで来たらpptpdサーバを起動させます。&lt;br /&gt;&lt;pre&gt;/sbin/service pptpd start&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;あとはGalaxyTabなどのクライアントからVPN接続（PPTP）するだけ！&lt;br /&gt;L2TP版でもやったけど、上手く行かなかったので、、、また今度試してみます＞＜&lt;br /&gt;&lt;br /&gt;以上どぇぇぇえぇぇぇぇぇえぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-4433525588740356649?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/4433525588740356649/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=4433525588740356649&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4433525588740356649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4433525588740356649'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/02/pptp.html' title='PPTPサーバ構築'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-2056432296550600920</id><published>2011-01-05T16:24:00.003+09:00</published><updated>2011-01-05T16:46:32.123+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>nmapを使う</title><content type='html'>新年明けましておめでとうございます。&lt;br /&gt;本年もよろしくお願いします(｀・ω・´)&lt;br /&gt;&lt;br /&gt;今日はnmapの使い方めもめもです。&lt;br /&gt;このツール、すごく便利でかつ怖いですね。使う際は慎重に！&lt;br /&gt;&lt;br /&gt;まずはTCPスキャン。&lt;br /&gt;&lt;pre&gt;# nmap -sT localhost&lt;br /&gt;&lt;br /&gt;Starting nmap 3.70 ( http://www.insecure.org/nmap/ ) at 2011-01-05 16:28 JST&lt;br /&gt;Interesting ports on localhost.localdomain (127.0.0.1):&lt;br /&gt;(The 1655 ports scanned but not shown below are in state: closed)&lt;br /&gt;PORT     STATE SERVICE&lt;br /&gt;21/tcp   open  ftp&lt;br /&gt;22/tcp   open  ssh&lt;br /&gt;80/tcp   open  http&lt;br /&gt;873/tcp  open  rsync&lt;br /&gt;3306/tcp open  mysql&lt;br /&gt;&lt;br /&gt;Nmap run completed -- 1 IP address (1 host up) scanned in 0.285 seconds&lt;/pre&gt;これは自サーバ内でのポートスキャン結果です。&lt;br /&gt;ポートを絞って行う場合は&lt;br /&gt;&lt;pre&gt;# nmap -sT localhost -p 80-3306&lt;br /&gt;&lt;br /&gt;Starting nmap 3.70 ( http://www.insecure.org/nmap/ ) at 2011-01-05 16:31 JST&lt;br /&gt;Interesting ports on localhost.localdomain (127.0.0.1):&lt;br /&gt;(The 3224 ports scanned but not shown below are in state: closed)&lt;br /&gt;PORT     STATE SERVICE&lt;br /&gt;80/tcp   open  http&lt;br /&gt;873/tcp  open  rsync&lt;br /&gt;3306/tcp open  mysql&lt;br /&gt;&lt;br /&gt;Nmap run completed -- 1 IP address (1 host up) scanned in 0.243 seconds&lt;/pre&gt;80番ポートから3306番ポートまででTCPパケットを送り、どのサービスが動作しているか確認できます。&lt;br /&gt;&lt;br /&gt;次にローカルネットワーク内（192.168.60.0/24）でPINGスキャンしてみます。&lt;br /&gt;&lt;pre&gt;# nmap -sP 192.168.60.0/24&lt;br /&gt;&lt;br /&gt;Starting nmap 3.70 ( http://www.insecure.org/nmap/ ) at 2011-01-05 16:37 JST&lt;br /&gt;Host 192.168.60.0 seems to be a subnet broadcast address (returned 8 extra pings).&lt;br /&gt;Host 192.168.60.1 appears to be up.&lt;br /&gt;MAC Address: 00:06:5B:24:A2:A0 (Dell Computer)&lt;br /&gt;Host 192.168.60.2 appears to be up.&lt;br /&gt;MAC Address: 00:07:40:97:9A:C7 (Melco)&lt;br /&gt;Host 192.168.60.10 appears to be up.&lt;br /&gt;MAC Address: 78:CA:39:F9:6A:D3 (Unknown)&lt;br /&gt;Host 192.168.60.11 appears to be up.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;（中略）&lt;br /&gt;MAC Address: 00:80:F0:33:42:47 (Panasonic Communications Co.)&lt;br /&gt;Host 192.168.60.255 seems to be a subnet broadcast address (returned 14 extra pings).&lt;br /&gt;Nmap run completed -- 256 IP addresses (46 hosts up) scanned in 3.250 seconds&lt;/pre&gt;ネットワーク内でどのホストが生きている/死んでるを確認するとき便利ですね。&lt;br /&gt;&lt;br /&gt;UPDパケットで確認するときは（snmpd/udpデーモンの確認など）&lt;br /&gt;&lt;pre&gt;# nmap -sU localhost&lt;br /&gt;&lt;br /&gt;Starting nmap 3.70 ( http://www.insecure.org/nmap/ ) at 2011-01-05 16:39 JST&lt;br /&gt;Interesting ports on localhost.localdomain (127.0.0.1):&lt;br /&gt;(The 1477 ports scanned but not shown below are in state: closed)&lt;br /&gt;PORT    STATE         SERVICE&lt;br /&gt;123/udp open|filtered ntp&lt;br /&gt;&lt;br /&gt;Nmap run completed -- 1 IP address (1 host up) scanned in 1.475 seconds&lt;/pre&gt;で確認できます。&lt;br /&gt;&lt;br /&gt;実際にどのようなサービスが起動しているか確認するには&lt;br /&gt;&lt;pre&gt;# nmap -sS -sV 192.168.60.214 -p 21-80,110,3306,5432&lt;br /&gt;&lt;br /&gt;Starting nmap 3.70 ( http://www.insecure.org/nmap/ ) at 2011-01-05 16:43 JST&lt;br /&gt;Interesting ports on 192.168.60.214:&lt;br /&gt;(The 58 ports scanned but not shown below are in state: closed)&lt;br /&gt;PORT   STATE SERVICE VERSION&lt;br /&gt;21/tcp open  ftp     ProFTPD 1.3.0&lt;br /&gt;22/tcp open  ssh     OpenSSH 3.1p1 (protocol 1.99)&lt;br /&gt;23/tcp open  telnet  Linux telnetd&lt;br /&gt;25/tcp open  smtp    Postfix smtpd&lt;br /&gt;80/tcp open  http    Apache httpd 2.2.13 ((Unix) PHP/5.3.3)&lt;br /&gt;MAC Address: 0A:00:00:00:00:0D (Unknown)&lt;br /&gt;&lt;br /&gt;Nmap run completed -- 1 IP address (1 host up) scanned in 5.353 seconds&lt;/pre&gt;あらら、丸分かり。&lt;br /&gt;-sSはステルススキャン。TCP接続をフルで行わないので早い？のかな。half-openスキャニングと言うらしい。対象のサーバにログを残さなない場合は多い。※root権限&lt;br /&gt;-sVはサービスを確認する。が付けなくてもrootで動かせばサービス確認できると思います。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上どぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-2056432296550600920?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/2056432296550600920/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=2056432296550600920&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/2056432296550600920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/2056432296550600920'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2011/01/nmap.html' title='nmapを使う'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-4327884103196236487</id><published>2010-12-09T10:42:00.002+09:00</published><updated>2010-12-09T11:09:20.873+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><title type='text'>mailコマンドでメールを読む</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;&lt;br /&gt;今日はmailコマンドでメールを読む時のtipsをめもめも。&lt;br /&gt;いつも忘れちゃうので。&lt;br /&gt;&lt;br /&gt;まず受信メールを確認/表示させる&lt;br /&gt;&lt;pre&gt;$ mail&lt;br /&gt;Mail version 8.1 6/6/93.  Type ? for help.&lt;br /&gt;"/var/spool/mail/&lt;i&gt;username&lt;/i&gt;": 742 messages 742 unread&lt;br /&gt;&gt;U  1 root@localhost.local  Tue Nov 11 03:29  75/2378  "LogWatch for localhost.localdomain"&lt;br /&gt; U  2 root@localhost.local  Wed Nov 12 03:29  84/2936  "LogWatch for localhost.localdomain"&lt;br /&gt; U  3 root@localhost.local  Thu Nov 13 03:29  81/2666  "LogWatch for localhost.localdomain"&lt;br /&gt; U  4 root@localhost.local  Fri Nov 14 03:29  93/2763  "LogWatch for localhost.localdomain"&lt;br /&gt; U  5 root@localhost.local  Sat Nov 15 03:29  94/2985  "LogWatch for localhost.localdomain"&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;「&gt;」が付いているものが現在選択中のメールです。&lt;br /&gt;それぞれ頭文字の意味は&lt;br /&gt;&lt;pre&gt;U...未読&lt;br /&gt;N...新着&lt;br /&gt;R...既読&lt;br /&gt;S...保存済み&lt;/pre&gt;で数字はメール番号です。&lt;br /&gt;&lt;br /&gt;番号を入力しEnterでその番号のメールを読みます。&lt;br /&gt;&lt;pre&gt;&amp; 2 &lt;i&gt;Enter&lt;/i&gt;&lt;br /&gt;Message 2:&lt;br /&gt;From root@localhost.localdomain  Wed Nov 12 03:29:02 2008&lt;br /&gt;Date: Wed, 12 Nov 2008 03:29:02 +0900&lt;br /&gt;From: root &lt;root@localhost.localdomain&gt;&lt;br /&gt;To: root@localhost.localdomain&lt;br /&gt;Subject: LogWatch for localhost.localdomain&lt;br /&gt;&lt;br /&gt;&lt;font color="steelblue"&gt;// 以下メール本文表示&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;「q」でそのメールを閉じます。&lt;br /&gt;「n」で次のメール、「-」で前のメールへ移動します。&lt;br /&gt;&lt;br /&gt;mailコマンド実行中の「&amp;」のあとに打つサブコマンドは&lt;br /&gt;&lt;pre&gt;メール番号...その番号のメールを表示&lt;br /&gt;n...次のメール表示&lt;br /&gt;-...前のメール表示&lt;br /&gt;p...選択中のメール表示&lt;br /&gt;h...メール一覧を表示&lt;br /&gt;r...選択中のメールに返信&lt;br /&gt;d (メール番号)...選択中のメールを削除。番号を入力した場合はそのメールを削除&lt;br /&gt;u...メール削除の取り消し&lt;br /&gt;q...変更保存し、mailコマンド終了&lt;br /&gt;x...変更を保存せずにmailコマンド終了&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以下のサイトのマルコピですｗ&lt;br /&gt;&lt;a href="http://www.uetyi.mydns.jp/wordpress/command/entry-166.html"&gt;Linuxで自宅サーバ構築（新森からの雑記） - mailコマンドの使い方&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇえぇっぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-4327884103196236487?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/4327884103196236487/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=4327884103196236487&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4327884103196236487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4327884103196236487'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/12/mail.html' title='mailコマンドでメールを読む'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-3052815706679011180</id><published>2010-12-09T01:18:00.004+09:00</published><updated>2010-12-09T01:21:29.970+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='postfix'/><title type='text'>postfixでpermission（権限）に関するっぽいエラーが出る</title><content type='html'>どうも、俺＠寝る前です。&lt;br /&gt;&lt;br /&gt;なので超適当ですが、postfixを起動させた時や、エラーにパーミッション（権限）に関するっぽいようなエラーが出る場合は&lt;br /&gt;&lt;pre&gt;# postfix stop&lt;br /&gt;# postfix check &lt;font color="steelblue"&gt;// ここでエラー内容確認&lt;/font&gt;&lt;br /&gt;# postfix set-permissions &lt;font color="steelblue"&gt;// 権限修正&lt;/font&gt;&lt;br /&gt;# postfix start&lt;/pre&gt;&lt;br /&gt;で直ることもありますよ。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;おやすみなさいぃぃぃぃぃ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-3052815706679011180?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/3052815706679011180/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=3052815706679011180&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3052815706679011180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3052815706679011180'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/12/postfixpermission.html' title='postfixでpermission（権限）に関するっぽいエラーが出る'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-8167522515757819887</id><published>2010-11-26T15:09:00.002+09:00</published><updated>2010-11-26T15:19:55.964+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>apacheのrewriteでドメイン変更に対応する</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;&lt;br /&gt;今日はタイトルの通り、apacheのmod_rewriteを使ってサイトのドメイン変更に対応する方法についてメモめも。&lt;br /&gt;さらにそのサイトは「*（ワイルドカード）」によるサブドメイン設定がされておりその対応もしなければなりません。&lt;br /&gt;&lt;br /&gt;ドメインは&lt;br /&gt;old.jp　→　new.jp　に変更するものとします。&lt;br /&gt;DNSゾーン設定は以下のような感じで&lt;br /&gt;&lt;pre&gt;&lt;font color="steelblue"&gt;1.2.3.4は仮のサーバIPのつもり&lt;/font&gt;&lt;br /&gt;@ IN A 1.2.3.4&lt;br /&gt;* IN A 1.2.3.4&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;つまり&lt;br /&gt;old.jpでアクセスのあったものはnew.jpにリライトし&lt;br /&gt;foo.old.jpでアクセスのあったものはfoo.new.jpにリライトしたいのです。&lt;br /&gt;&lt;br /&gt;apacheのRewriteモジュールはインストールしておいてね。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;では設定方法について&lt;br /&gt;&lt;pre&gt;# vim /usr/local/apache2/conf/httpd.conf&lt;br /&gt;--------------------------------------------&lt;br /&gt;1 &lt;font color="aqua"&gt;RewriteEngine&lt;/font&gt; On&lt;br /&gt;2 &lt;font color="aqua"&gt;Rewrite Cond&lt;/font&gt; %{HTTP_HOST} ^(.*)old\.jp [NC]&lt;br /&gt;3 &lt;font color="aqua"&gt;RewriteRule&lt;/font&gt; ^(.*)$ http://%1new.jp$1 [R=301,L]&lt;/pre&gt;これでapache再起動でOKです。&lt;br /&gt;正規表現はかなり適当なので実運用する場合はも少し丁寧に書いたほうが良いと思います。&lt;br /&gt;&lt;br /&gt;ポイントは3行目の&lt;pre&gt;^(.*)$ http://%1new.jp$1&lt;/pre&gt;の部分です。&lt;br /&gt;「%1」は2行目のRewriteCondeで設定した正規表現の文字グループを後方参照する場合に使えます。&lt;br /&gt;もちろん複数ある場合は %2,%3..とつづきます。&lt;br /&gt;&lt;br /&gt;これで完成ーばんざあぁぁぁぁぁあぃ！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-8167522515757819887?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/8167522515757819887/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=8167522515757819887&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/8167522515757819887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/8167522515757819887'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/11/apacherewrite.html' title='apacheのrewriteでドメイン変更に対応する'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-6443902815154469313</id><published>2010-11-11T10:57:00.003+09:00</published><updated>2010-11-11T11:05:48.860+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>manコマンドで文字化け回避</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;&lt;br /&gt;今日はmanページを日本語環境で表示させた場合に文字化けしてしまう場合の対処法めもです。&lt;br /&gt;たぶんmanページが文字化けする以外のシチュエーションでも使えそうな気がします。&lt;br /&gt;&lt;br /&gt;例えば&lt;br /&gt;&lt;pre&gt;$ locale&lt;br /&gt;LANG=C&lt;br /&gt;LC_CTYPE="C"&lt;br /&gt;LC_NUMERIC="C"&lt;br /&gt;LC_TIME="C"&lt;br /&gt;LC_COLLATE="C"&lt;br /&gt;LC_MONETARY="C"&lt;br /&gt;LC_MESSAGES="C"&lt;br /&gt;LC_PAPER="C"&lt;br /&gt;LC_NAME="C"&lt;br /&gt;LC_ADDRESS="C"&lt;br /&gt;LC_TELEPHONE="C"&lt;br /&gt;LC_MEASUREMENT="C"&lt;br /&gt;LC_IDENTIFICATION="C"&lt;br /&gt;LC_ALL=&lt;/pre&gt;のような環境で&lt;br /&gt;&lt;pre&gt;$ man less&lt;br /&gt;LESS(1)                                                                                                                                                                                           &lt;br /&gt;&lt;br /&gt;NAME&lt;br /&gt;       less - opposite of more&lt;br /&gt;&lt;br /&gt;SYNOPSIS&lt;br /&gt;       less -?&lt;br /&gt;       less --help&lt;br /&gt;       less -V&lt;br /&gt;       less --version&lt;br /&gt;       less [-[+]aBcCdeEfFgGiIJLmMnNqQrRsSuUVwWX~]&lt;br /&gt;            [-b space] [-h lines] [-j line] [-k keyfile]&lt;br /&gt;--- 以下略 ---&lt;/pre&gt;のようにまず問題なく表示されます。&lt;br /&gt;ところが&lt;br /&gt;&lt;pre&gt;$ locale&lt;br /&gt;LANG=ja_JP.utf8&lt;br /&gt;LC_CTYPE="ja_JP.utf8"&lt;br /&gt;LC_NUMERIC="ja_JP.utf8"&lt;br /&gt;LC_TIME="ja_JP.utf8"&lt;br /&gt;LC_COLLATE="ja_JP.utf8"&lt;br /&gt;LC_MONETARY="ja_JP.utf8"&lt;br /&gt;LC_MESSAGES="ja_JP.utf8"&lt;br /&gt;LC_PAPER="ja_JP.utf8"&lt;br /&gt;LC_NAME="ja_JP.utf8"&lt;br /&gt;LC_ADDRESS="ja_JP.utf8"&lt;br /&gt;LC_TELEPHONE="ja_JP.utf8"&lt;br /&gt;LC_MEASUREMENT="ja_JP.utf8"&lt;br /&gt;LC_IDENTIFICATION="ja_JP.utf8"&lt;br /&gt;LC_ALL=&lt;/pre&gt;のような場合にmanを見ると&lt;br /&gt;&lt;pre&gt;$ man less&lt;br /&gt;LESS(1)                                                                                                                                                                                           &lt;br /&gt;&lt;br /&gt;&amp;lt;E5&gt;&amp;lt;ux&gt;&amp;lt;8D&gt;&amp;lt;E5&gt;&amp;lt;89&gt;&amp;lt;8D&gt;&lt;br /&gt;       less - more &amp;lt;E3&gt;&amp;lt;81&gt;&amp;lt;AE&gt;&amp;lt;E5&gt;&amp;lt;8F&gt;&amp;lt;8D&gt;&amp;lt;E5&gt;&amp;lt;AF&gt;&amp;lt;BE&gt; (more &amp;lt;E3&gt;&amp;lt;81&gt;&amp;lt;AE&gt;&amp;lt;E3&gt;&amp;lt;82&gt;&amp;lt;88&gt;&amp;lt;E3&gt;&amp;lt;81&gt;&amp;lt;86&gt;&amp;lt;E3&gt;&amp;lt;81&gt;&amp;lt;AA&gt;&amp;lt;E3&gt;&amp;lt;83&gt;&amp;lt;9A&gt;&amp;lt;E3&gt;&amp;lt;83&gt;&amp;lt;BC&gt;&amp;lt;E3&gt;&amp;lt;82&gt;&amp;lt;B8&gt;&amp;lt;E3&gt;&amp;lt;83&gt;&amp;lt;A3&gt;&amp;lt;E3&gt;&amp;lt;83&gt;&amp;lt;BC&gt;)&lt;br /&gt;&lt;br /&gt;&amp;lt;E6&gt;&amp;lt;9B&gt;&amp;lt;B8&gt;&amp;lt;E5&gt;&amp;lt;BC&gt;&amp;lt;8F&gt;&lt;br /&gt;       less -?&lt;br /&gt;       less --help&lt;br /&gt;       less -V&lt;br /&gt;       less --version&lt;br /&gt;--- 以下略 ---&lt;/pre&gt;のようになる場合があります。&lt;br /&gt;&lt;br /&gt;こんな時は&lt;br /&gt;&lt;pre&gt;$ export PAGER="less -irs"&lt;/pre&gt;とするかログインシェルの .xxrcファイルに設定しておけば万事解決です！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上どえぇぇっぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-6443902815154469313?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/6443902815154469313/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=6443902815154469313&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6443902815154469313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6443902815154469313'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/11/man.html' title='manコマンドで文字化け回避'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-9185637184356010036</id><published>2010-11-05T12:58:00.002+09:00</published><updated>2010-11-05T14:16:02.902+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>オデの.screenrc</title><content type='html'>どうも、俺＠会議前です。&lt;br /&gt;&lt;br /&gt;今日は出張先でも迷わないように、.screenrcの最低限の設定めもです。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ vim ~/.screenrc&lt;br /&gt;-----------------------------------&lt;br /&gt;vbell off&lt;br /&gt;hardstatus alwayslastline "[%02c] %`%-w%{=b bw}%n %t%{-}%+w" &lt;font color="steelblue"&gt;# 下部に表示するstatusline&lt;/font&gt;&lt;br /&gt;stuff "export LANG=C"&lt;br /&gt;encoding utf8 utf8 &lt;font color="steelblue"&gt;# 文字化け対策 utf8の場合&lt;/font&gt;&lt;br /&gt;defencoding utf8&lt;br /&gt;defkanji utf8&lt;br /&gt;autodetach on &lt;font color="steelblue"&gt;# デタッチを自動&lt;/font&gt;&lt;br /&gt;termcapinfo xterm* is=¥E[r¥E[m¥E[2J¥E[H¥E[?7h¥E[?1;4;6l &lt;font color="steelblue"&gt;# teratermなどでウィンドウサイズが変更されるのを防ぐ&lt;/font&gt;&lt;/pre&gt;とりあえずこれでなんとかなる！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上どぇぇぇぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-9185637184356010036?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/9185637184356010036/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=9185637184356010036&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/9185637184356010036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/9185637184356010036'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/11/screenrc.html' title='オデの.screenrc'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-6063247353016153435</id><published>2010-10-28T14:37:00.003+09:00</published><updated>2010-10-28T14:46:24.233+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>svnで特定のファイル（やディレクトリ）を除外して管理する</title><content type='html'>どうも、俺＠お昼ごはんでお腹いっぱいです。&lt;br /&gt;&lt;br /&gt;今日はsvnコマンドで特定のファイルやディレクトリを除外する方法についてメモメモ。&lt;br /&gt;&lt;br /&gt;例えば、&lt;br /&gt;リポジトリ管理下の tmp/ というディレクトリを除外する場合。&lt;br /&gt;&lt;pre&gt;$ svn propset svn:ignore /path/to/tmp&lt;br /&gt;&lt;font color="steelblue"&gt;// または&lt;/font&gt;&lt;br /&gt;$ svn propedit svn:ignore // ここでリターン&lt;br /&gt;&lt;font color="steelblue"&gt;// SVN_EDITORで指定したエディタが開くので除外パターンを改行区切りで記述&lt;/font&gt;&lt;br /&gt;/path/to/tmp&lt;/pre&gt;こんな感じです。&lt;br /&gt;&lt;br /&gt;logsディレクトリ以下の*.logというファイルを除外する場合は&lt;br /&gt;&lt;pre&gt;$ svn propset svn:ignore '*.log' /path/to/logs&lt;br /&gt;&lt;font color="steelblue"&gt;// または&lt;/font&gt;&lt;br /&gt;$ svn propedit svn:ignore /path/to/logs&lt;br /&gt;&lt;font color="steelblue"&gt;// SVN_EDITORで指定したエディタが開くので除外パターンを改行区切りで記述&lt;/font&gt;&lt;br /&gt;*.log&lt;/pre&gt;こんな感じです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;propsetはそのコマンドでパターンを指定する方法で&lt;br /&gt;propeditは設定ファイルでパターンを指定する方法です。&lt;br /&gt;&lt;br /&gt;以上でぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-6063247353016153435?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/6063247353016153435/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=6063247353016153435&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6063247353016153435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6063247353016153435'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/10/svn.html' title='svnで特定のファイル（やディレクトリ）を除外して管理する'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-5196133331736235277</id><published>2010-10-22T19:15:00.002+09:00</published><updated>2010-10-22T19:41:37.313+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><title type='text'>svnでどんなに頑張っても"can't convert string from 'utf-8' to native encoding"エラーが治らない</title><content type='html'>どうも、俺＠残業です。&lt;br /&gt;&lt;br /&gt;svnコマンドでimport chekcout commit updateコマンドを打った時によく出るエラーで&lt;br /&gt;&lt;pre&gt;Can't convert string from native encoding to 'UTF-8':&lt;/pre&gt;や&lt;pre&gt;Valid UTF-8 data.&lt;/pre&gt;や&lt;pre&gt;ネイティブのエンコーディングから'UTF-8'に文字列を変換できません&lt;/pre&gt;や&lt;pre&gt;有効なUTF-8のデータ（16進数: ）の後に無効なUTF-8文字列（16進数）&lt;/pre&gt;のようなエラーがあります。&lt;br /&gt;&lt;br /&gt;だいたいの原因が、存在するファイルに日本語ファイル名のものがある場合に発生する事があるのですが、おそらくlinuxエンジニアはやらないのでwindowsで誰かが作ったファイルが存在していることだと思います。&lt;br /&gt;&lt;br /&gt;大抵の場合は環境変数 LC_CTYPE= の設定で対応できます。&lt;br /&gt;&lt;pre&gt;$ export LC_CTYPE=ja_JP.utf8&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ja_JP.utf8なロケールが存在しない場合は（まずないと思いますが）&lt;br /&gt;&lt;pre&gt;locale -a | grep ja&lt;br /&gt;ja_JP&lt;br /&gt;ja_JP.eucjp&lt;br /&gt;ja_JP.sjis&lt;br /&gt;ja_JP.ujis&lt;br /&gt;japanese&lt;br /&gt;japanese.euc&lt;/pre&gt;入れちゃいましょう。&lt;br /&gt;&lt;pre&gt;# localedef -f UTF-8 -i ja_JP ja_JP.utf8&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;それでも同じエラーが出る場合は&lt;br /&gt;&lt;pre&gt;$ export LC_ALL=ja_JP.utf8&lt;/pre&gt;やっちゃいましょう。&lt;br /&gt;&lt;br /&gt;それでもエラーが出る場合は思い切って&lt;br /&gt;&lt;pre&gt;$ export LC_CTYPE=ja_JP.sjis&lt;/pre&gt;をやってみてください。&lt;br /&gt;ja_JP.sjisなロケールがない場合は&lt;br /&gt;&lt;pre&gt;# localedef -f SJIS -i ja_JP ja_JP.sjis&lt;/pre&gt;で追加してください。&lt;br /&gt;&lt;br /&gt;LC_CTYPE=ja_JP.sjisでやれば回避できることもあります。&lt;br /&gt;&lt;br /&gt;最後の手段は&lt;br /&gt;&lt;pre&gt;$ vim ~/.subversion/config&lt;br /&gt;log-encoding=utf8&lt;/pre&gt;です。&lt;br /&gt;&lt;br /&gt;これでもダメなら日本語ファイル名のファイルをsvn管理下から外してください！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上どぇぇぇぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-5196133331736235277?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/5196133331736235277/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=5196133331736235277&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/5196133331736235277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/5196133331736235277'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/10/svncant-convert-string-from-utf-8-to.html' title='svnでどんなに頑張っても&quot;can&apos;t convert string from &apos;utf-8&apos; to native encoding&quot;エラーが治らない'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-3240685906250527118</id><published>2010-10-20T10:26:00.003+09:00</published><updated>2010-10-20T10:53:32.121+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>mysql + senna インストール</title><content type='html'>どうも、僕です。&lt;br /&gt;&lt;br /&gt;MySQL+sennaで全文検索対応させるためインストールした時にトラブったのでメモ。&lt;br /&gt;あ、原因はわからないままなのですが、、、&lt;br /&gt;環境はKVM上でのCentOS5.5です。（KVMはLDAP認証でそれが怪しいと思っているのですが、、）&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;まずmecabをインスコ。（今回はmecab-0.98.tar.gz/mecab-ipadic-2.7.9-20070801.tar.gz）&lt;br /&gt;http://sourceforge.net/project/showfiles.php?group_id=177856からmecab（本体）とmecab-ipadic（辞書）を落としてきます。&lt;br /&gt;mecabは&lt;pre&gt;# ./configure --prefix=/usr --with-charset=utf8&lt;/pre&gt;でmecab-ipadicは&lt;pre&gt;# ./configure --prefix=/usr --with-charset=utf8&lt;/pre&gt;でmake &amp; make install します。&lt;br /&gt;&lt;br /&gt;同様にsennaも（今回はsenna-1.1.5.tar.gz）&lt;br /&gt;http://sourceforge.jp/projects/senna/files/からソースを落としてきて&lt;br /&gt;&lt;pre&gt;# ./configure --prefix=/usr&lt;/pre&gt;でインスコします。&lt;br /&gt;&lt;br /&gt;最後にtrittonを（今回はtritonn-1.0.12-mysql-5.0.87.tar.gz）&lt;br /&gt;http://sourceforge.jp/projects/tritonn/releases/からソースGETし&lt;br /&gt;&lt;pre&gt;# ./configure  --prefix=/usr/local/mysql --with-charset=sjis --with-extra-charsets=complex --with-mysql-user=mysql --without-bench --enable-assembler --with-mysqld-ldflags=-all-static --without-docs --with-senna --with-mecab CFLAGS="-O3 -mpentiumpro" CXX=gcc CXXFLAGS="-O3 -mpentiumpro -felide-constructors -fno-exceptions -fno-rtti"&lt;/pre&gt;でインストールしました。&lt;br /&gt;&lt;br /&gt;ここから通常のmysqlインストールと同じ作業を行います。&lt;br /&gt;&lt;pre&gt;# groupadd mysql&lt;br /&gt;# useradd -d /usr/local/mysql -g mysql mysql&lt;br /&gt;# chown -R mysql:mysql /usr/local/mysql&lt;br /&gt;# /usr/local/mysql/bin/mysql_install_db --user=mysql&lt;/pre&gt;ここでコケました。&lt;br /&gt;内容は&lt;br /&gt;&lt;pre&gt;   1 101019 20:51:13  mysqld started&lt;br /&gt;   2 101019 20:51:13 - mysqld got signal 11 ;&lt;br /&gt;   3 This could be because you hit a bug. It is also possible that this binary&lt;br /&gt;   4 or one of the libraries it was linked against is corrupt, improperly built,&lt;br /&gt;   5 or misconfigured. This error can also be caused by malfunctioning hardware.&lt;br /&gt;   6 We will try our best to scrape up some info that will hopefully help diagnose&lt;br /&gt;   7 the problem, but since we have already crashed, something is definitely wrong&lt;br /&gt;   8 and this may fail.&lt;br /&gt;   9 &lt;br /&gt;  10 key_buffer_size=0&lt;br /&gt;  11 read_buffer_size=262144&lt;br /&gt;  12 max_used_connections=0&lt;br /&gt;  13 max_connections=100&lt;br /&gt;  14 threads_connected=0&lt;br /&gt;  15 It is possible that mysqld could use up to&lt;br /&gt;  16 key_buffer_size + (read_buffer_size + sort_buffer_size)*max_connections = 76800 K&lt;br /&gt;  17 bytes of memory&lt;br /&gt;  18 Hope that's ok; if not, decrease some variables in the equation.&lt;br /&gt;  19 &lt;br /&gt;  20 thd=(nil)&lt;br /&gt;  21 Attempting backtrace. You can use the following information to find out&lt;br /&gt;  22 where mysqld died. If you see no messages after this, something went&lt;br /&gt;  23 terribly wrong...&lt;br /&gt;  24 Cannot determine thread, fp=0xbf908e38, backtrace may not be correct.&lt;br /&gt;  25 Stack range sanity check OK, backtrace follows:&lt;br /&gt;  26 0x80eab85&lt;br /&gt;  27 0x85fdd5&lt;br /&gt;  28 0x854f70&lt;br /&gt;  29 0x856cc0&lt;br /&gt;  30 0x85e67d0  31 0x85e69b6&lt;br /&gt;  32 0x80e9bef&lt;br /&gt;  33 0x80ef2f0&lt;br /&gt;  34 0x85a2398&lt;br /&gt;  35 0x8048131&lt;br /&gt;  36 New value of fp=(nil) failed sanity check, terminating stack trace!&lt;br /&gt;  37 Please read http://dev.mysql.com/doc/mysql/en/using-stack-trace.html and follow instructions on how to resolve the stack trace. Resolved&lt;br /&gt;  38 stack trace is much more helpful in diagnosing the problem, so please do&lt;br /&gt;  39 resolve it&lt;br /&gt;  40 The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains&lt;br /&gt;  41 information that should help you find out what is causing the crash.&lt;br /&gt;  42 &lt;br /&gt;  43 This crash occured while the server was calling initgroups(). This is&lt;br /&gt;  44 often due to the use of a mysqld that is statically linked against glibc&lt;br /&gt;  45 and configured to use LDAP in /etc/nsswitch.conf. You will need to either&lt;br /&gt;  46 upgrade to a version of glibc that does not have this problem (2.3.4 or&lt;br /&gt;  47 later when used with nscd), disable LDAP in your nsswitch.conf, or use a&lt;br /&gt;  48 mysqld that is not statically linked.&lt;br /&gt;  49 101019 20:51:13  mysqld ended&lt;/pre&gt;といったもの。&lt;br /&gt;/etc/my.cnfを作ってメモリ少なくして実行してもダメ、出力されたログをトレースしても意味不明。「何かがクラッシュしたぜ」としか出てこない。&lt;br /&gt;気になるのは最後の文章&lt;br /&gt;&lt;pre&gt;  43 This crash occured while the server was calling initgroups(). This is&lt;br /&gt;  44 often due to the use of a mysqld that is statically linked against glibc&lt;br /&gt;  45 and configured to use LDAP in /etc/nsswitch.conf. You will need to either&lt;br /&gt;  46 upgrade to a version of glibc that does not have this problem (2.3.4 or&lt;br /&gt;  47 later when used with nscd), disable LDAP in your nsswitch.conf, or use a&lt;br /&gt;  48 mysqld that is not statically linked.&lt;/pre&gt;なにやらLDAPを使わないようにしてみたら？的なアドバイスが出る。&lt;br /&gt;ただしサーバ管理者は俺じゃないのであきらめる、、、。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;とりあえず解決方法は、mysqlユーザになってやる！です。&lt;br /&gt;&lt;pre&gt;# su mysql -&lt;br /&gt;$ /usr/local/mysql/bin/mysql_install_db&lt;/pre&gt;これで難なくできちゃいました。&lt;br /&gt;またその後mysqlデーモンをrootで立ち上げようとすると&lt;br /&gt;&lt;pre&gt;# service mysql start&lt;br /&gt;Starting MySQL.Manager of pid-file quit without updating file [失敗]&lt;/pre&gt;とか出ちゃう。&lt;br /&gt;&lt;pre&gt;# /usr/local/mysql/bin/mysqld_safe &amp;&lt;br /&gt;Starting mysqld daemon with databases from /usr/local/mysql/var&lt;br /&gt;STOPPING server from pid file /usr/local/mysql/var/xxxxx.mysql.pid&lt;br /&gt;101020 10:45:20 mysqld ended&lt;br /&gt;&lt;br /&gt;[1] +done   ./bin/mysqld_safe&lt;/pre&gt;となぜか起動しない。&lt;br /&gt;起動スクリプトなど確認したが、そのスクリプトがうまく解読できない、、、。ソース読んでると意味不明の実装がされてたりするし、、&lt;br /&gt;&lt;br /&gt;これも&lt;br /&gt;&lt;pre&gt;# service mysql start --user=root&lt;br /&gt;または&lt;br /&gt;# /usr/local/mysql/bin/mysqld_safe --user=root &amp;&lt;/pre&gt;とやると起動できる。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;sennaのバグなのか、KVM上でのOSの問題なのか、LDAP認証の問題なのか引き続き調査しまぁぁぁぁぁす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-3240685906250527118?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/3240685906250527118/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=3240685906250527118&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3240685906250527118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3240685906250527118'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/10/mysql-senna.html' title='mysql + senna インストール'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-1196302876604673540</id><published>2010-10-15T12:43:00.004+09:00</published><updated>2010-10-15T12:49:38.537+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jqueryでチェックボックスの状態を取得する</title><content type='html'>どうも、俺＠お昼前です。&lt;br /&gt;&lt;br /&gt;jqueryでcheckboxの状態（チェックされているかどうか）を取得する方法めもです。&lt;br /&gt;&lt;pre&gt;$("#foo_checkbox").attr("checked");&lt;br /&gt;&lt;font color="steelblue"&gt;// または&lt;/font&gt;&lt;br /&gt;$("#foo_checkbox").is(":checked");&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ちなみに、チェックボックスにチェックを入れる場合は&lt;br /&gt;&lt;pre&gt;$("#foo_checkbox").attr("checked", "checked");&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;チェックボックスのチェックを外すには&lt;br /&gt;&lt;pre&gt;$("#foo_checkbox").attr("checked", "");&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇぇえぇっぇえぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-1196302876604673540?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/1196302876604673540/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=1196302876604673540&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1196302876604673540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1196302876604673540'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/10/jquery.html' title='jqueryでチェックボックスの状態を取得する'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-5826224958837663554</id><published>2010-09-15T14:40:00.004+09:00</published><updated>2010-09-30T18:44:37.928+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ZendFramework'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>zend frameworkでルーターの設定をiniファイルで行う</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;&lt;br /&gt;今日はZendFrameworkでルーティングの設定（Zend_Controller_Router_Route)を直接コードに書かずにiniファイルで行う設定方法の備忘録です。&lt;br /&gt;&lt;br /&gt;１）通常のルーティング&lt;br /&gt;&lt;pre&gt;$ vim configs/router.ini&lt;br /&gt;-------------------------------&lt;br /&gt;routes.default.type = "Zend_Controller_Router_Route"&lt;br /&gt;routes.default.route = ":controller/:action/*"&lt;br /&gt;routes.default.defaults.module = "&lt;i&gt;module_name&lt;/i&gt;" &lt;font color="steelblue"&gt;; モジュール名&lt;/font&gt;&lt;br /&gt;routes.default.defaults.controller = "index" &lt;font color="steelblue"&gt;; デフォルトコントローラ名&lt;/font&gt;&lt;br /&gt;routes.default.defaults.action = "index" &lt;font color="steelblue"&gt;; デフォルトアクション名&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;$ vim public/index.php&lt;br /&gt;-------------------------------&lt;br /&gt;$router = Zend_Controller_Front::getInstance()-&gt;getRouter();&lt;br /&gt;$config = new Zend_Config_Ini(APPLICATION_PATH . "/configs.router.ini");&lt;br /&gt;$router-&gt;addConfig($config, "routes");&lt;/pre&gt;これであれば&lt;br /&gt;http://koexuka.blogspot.com/foo/bar/&lt;br /&gt;というURLでアクセスのあった場合、「&lt;i&gt;module_name&lt;/i&gt;」モジュールの「foo」コントローラの「bar」アクションが呼ばれます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;２）ホスト名によるルーティング&lt;br /&gt;&lt;pre&gt;$ vim configs/router.ini&lt;br /&gt;--------------------------------&lt;br /&gt;&lt;font color="steelblue"&gt;; デフォルト&lt;/font&gt;&lt;br /&gt;routes.default.type = "Zend_Controller_Router_Route"&lt;br /&gt;routes.default.route = ":controller/:action/*"&lt;br /&gt;routes.default.defaults.module = "&lt;i&gt;module_name&lt;/i&gt;"&lt;br /&gt;routes.default.defaults.controller = "index" &lt;br /&gt;routes.default.defaults.action = "index" &lt;br /&gt;&lt;br /&gt;&lt;font color="steelblue"&gt;; 携帯用&lt;/font&gt;&lt;br /&gt;routes.mobile.type = "Zend_Controller_Router_Route_Hostname"&lt;br /&gt;routes.mobile.route = "m.koexuka.blogspot.com"&lt;font color="steelblue"&gt;; ホスト名はm&lt;/font&gt;&lt;br /&gt;routes.mobile.defaults.module = "mobile"&lt;font color="steelblue"&gt;; mobileモジュールへ&lt;/font&gt;&lt;br /&gt;routes.mobile.defaults.controller = "index" &lt;br /&gt;routes.mobile.defaults.action = "index" &lt;br /&gt;routes.mobile.chains.path.type = "Zend_Controller_Router_Route"&lt;br /&gt;routes.mobile.chains.path.route = ":controller/:action/*"&lt;br /&gt;routes.mobile.chains.path.defaults.controller = "index" &lt;br /&gt;routes.mobile.chains.path.defaults.action = "index"&lt;br /&gt;&lt;br /&gt;$ vim public/index.php&lt;br /&gt;-------------------------------&lt;br /&gt;$router = Zend_Controller_Front::getInstance()-&gt;getRouter();&lt;br /&gt;$config = new Zend_Config_Ini(APPLICATION_PATH . "/configs.router.ini");&lt;br /&gt;$router-&gt;addConfig($config, "routes");&lt;/pre&gt;これで&lt;br /&gt;http://m.koexuka.blogspot.com/foo/bar&lt;br /&gt;というURLでアクセスのあった場合、「mobile」モジュールの「foo」コントローラの「bar」アクションが呼ばれます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;設定ファイルを利用した方がよりスマートだと思います。&lt;br /&gt;&lt;br /&gt;以上でぇぇえぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-5826224958837663554?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/5826224958837663554/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=5826224958837663554&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/5826224958837663554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/5826224958837663554'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/09/zend-frameworkini.html' title='zend frameworkでルーターの設定をiniファイルで行う'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-3677196493411616883</id><published>2010-09-10T11:01:00.007+09:00</published><updated>2010-09-10T11:24:58.887+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ZendFramework'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>ZendFrameworkでモジュール別Bootstrapを用意すると全て実行されてしまう</title><content type='html'>どうも、俺＠始業です。&lt;br /&gt;忘れないうちにメモメモ。&lt;br /&gt;&lt;br /&gt;Zend Frameworkはモジュール別Bootstrap.phpを用意して利用すると、どのモジュールですべてのBootstrapクラスにある_initXX()メソッドが実行されてしまいます。&lt;br /&gt;&lt;br /&gt;モジュールの設定&lt;br /&gt;&lt;pre&gt;$ vim application.ini&lt;br /&gt;--------------------------------&lt;br /&gt;&lt;font color="green"&gt;resources.frontController.moduleDirectory =&lt;/font&gt; APPLICATION_PATH "/modules"&lt;br /&gt;&lt;font color="green"&gt;resources.modules[] =&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;fooモジュールとbarモジュールがあった場合は&lt;br /&gt;&lt;pre&gt;$ vim modules/foo/Bootstrap.php&lt;br /&gt;--------------------------------&lt;br /&gt;&lt;font color="green"&gt;class&lt;/font&gt; Foo_Bootstrap &lt;font color="green"&gt;extends&lt;/font&gt; Zend_Application_Module_Bootstrap {&lt;br /&gt;  &lt;font color="green"&gt;protected&lt;/font&gt; &lt;font color="magenta"&gt;function&lt;/font&gt; _initFoo() {&lt;br /&gt;    &lt;font color="steelblue"&gt;// 何らかの前処理&lt;/font&gt;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$ vim modules/bar/Bootstrap.php&lt;br /&gt;---------------------------------&lt;br /&gt;&lt;font color="green"&gt;class&lt;/font&gt; Bar_Bootstrap &lt;font color="green"&gt;extends&lt;/font&gt; Zend_Application_Module_Bootstrap {&lt;br /&gt;  &lt;font color="green"&gt;protected&lt;/font&gt; &lt;font color="magenta"&gt;function&lt;/font&gt; _initBar() {&lt;br /&gt;    &lt;font color="steelblue"&gt;// 何らかの処理&lt;/font&gt;&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;↑↑どこのモジュールからでも両方のメソッドが実行されてしまう。&lt;br /&gt;なんかモジュール毎にBootstrap置く意味がないですね。というかこれだったら&lt;br /&gt;application/Bootstra.php内にすべて処理を済ませてしまえば良いのです。&lt;br /&gt;&lt;br /&gt;なのでモジュールごとにBootstrapを実行させる方法をめも。&lt;br /&gt;※ココを参考にしました。&lt;a href="http://weierophinney.net/matthew/archives/234-Module-Bootstraps-in-Zend-Framework-Dos-and-Donts.html"&gt;Phly, boy, phly&lt;/a&gt;&lt;br /&gt;要は各Bootstrap内で、プラグインを登録しそこで処理を実行させちゃいなよ、YOU。ということです。&lt;br /&gt;&lt;pre&gt;$ vim modules/foo/Bootstrap.php&lt;br /&gt;--------------------------------&lt;br /&gt;&lt;font color="green"&gt;class&lt;/font&gt; Foo_Bootstrap &lt;font color="green"&gt;extends&lt;/font&gt; Zend_Application_Module_Bootstrap {&lt;br /&gt;  &lt;font color="green"&gt;protected&lt;/font&gt; &lt;font color="magenta"&gt;function&lt;/font&gt; _initFoo() {&lt;br /&gt;    &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;this&lt;/font&gt;-&gt;bootstrap("&lt;font color="red"&gt;FrontController&lt;/font&gt;");&lt;br /&gt;    &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;front&lt;/font&gt; = &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;this&lt;/font&gt;-&gt;getResource("&lt;font color="red"&gt;FrontController&lt;/font&gt;");&lt;br /&gt;    &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;front&lt;/font&gt;-&gt;registerPlugin(new My_Plugin_Foo());&lt;font color="steelblue"&gt; // ここでプラグイン登録&lt;/font&gt;&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;次にプラグインを作成します。&lt;br /&gt;&lt;pre&gt;$ vim My/Plugin/Foo.php&lt;br /&gt;--------------------------------&lt;br /&gt;&lt;font color="green"&gt;class&lt;/font&gt; My_Plugin_Foo &lt;font color="green"&gt;extends&lt;/font&gt; Zend_Controller_Plugin_Abstract {&lt;br /&gt;  &lt;font color="steelblue"&gt;/**&lt;br /&gt;   * @Override&lt;br /&gt;   */&lt;/font&gt;&lt;br /&gt;  &lt;font color="green"&gt;public&lt;/font&gt; &lt;font color="magenta"&gt;function&lt;/font&gt; dispatchLoopStartup(Zend_Controller_Requset_Abstract &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;req&lt;/font&gt;) {&lt;br /&gt;    if (&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;req&lt;/font&gt;-&gt;getModuleName() != "&lt;font color="red"&gt;foo&lt;/font&gt;") { &lt;font color="steelblue"&gt;// ちょっとアナログな感じ、、&lt;/font&gt;&lt;br /&gt;      &lt;font color="yellow"&gt;return&lt;/font&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;font color="steelblue"&gt;// ここに処理&lt;/font&gt;&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;これでOKです。&lt;br /&gt;barモジュールも同様にすれば良いです。&lt;br /&gt;また処理ごとにMy_Plugin_Foo_XXとか　My_Plugin_Foo_YYとかクラスを分けた方が分かりやすいと思います。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ただ、注意するのはモジュール内のBootstrapでプラグインを登録する方法だと、&lt;br /&gt;実際に処理が実行されるタイミングがルータが動作した後だったりするので、完全な意味での「前処理」が出来ない場合もあるので注意しましょう。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;では、次回はもう１つの方法をメモしときまぁぁす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-3677196493411616883?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/3677196493411616883/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=3677196493411616883&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3677196493411616883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3677196493411616883'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/09/zendframeworkbootstrap.html' title='ZendFrameworkでモジュール別Bootstrapを用意すると全て実行されてしまう'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-4868485264982765978</id><published>2010-09-08T14:05:00.015+09:00</published><updated>2010-09-08T20:46:19.088+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ZendFramework'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>zend frameworkでZend_Filterを設定かつZend_Layoutを使うと文字化け</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;&lt;br /&gt;タイトルの通り、zend framework（v1.10.8）でZend_Filterを使ってviewにフィルタをかけて（実際は絵文字変換）、さらにZend_Layoutを利用すると文字化けが発生してしまいました。&lt;br /&gt;&lt;br /&gt;Zend_Filterはこんな感じ（省略してます）&lt;br /&gt;&lt;pre&gt;&lt;font color="magenta"&gt;&amp;lt;?php&lt;/font&gt;&lt;br /&gt;&lt;font color="green"&gt;class&lt;/font&gt; My_View_Filter &lt;font color="green"&gt;implements&lt;/font&gt; Zend_Filter_Interface {&lt;br /&gt;  &lt;font color="green"&gt;public&lt;/font&gt; &lt;font color="magenta"&gt;function&lt;/font&gt; filter(&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;output&lt;/font&gt;) {&lt;br /&gt;    &lt;font color="yellow"&gt;return&lt;/font&gt; &lt;font color="aqua"&gt;mb_convert_encoding&lt;/font&gt;(&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;output&lt;/font&gt;, "&lt;font color="red"&gt;SJIS-win&lt;/font&gt;", "&lt;font color="red"&gt;UTF-8&lt;/font&gt;");&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;で、コントローラのinit()メソッドで&lt;br /&gt;&lt;pre&gt;&lt;font color="green"&gt;public&lt;/font&gt; &lt;font color="magenta"&gt;function&lt;/font&gt; init() {&lt;br /&gt;  &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;this&lt;/font&gt;-&gt;view-&gt;setFilterPath("&lt;font color="red"&gt;My/View&lt;/font&gt;", "&lt;font color="red"&gt;My_View_&lt;/font&gt;")-&gt;addFilter("Filter");&lt;br /&gt;}&lt;/pre&gt;としてフィルタをセットしています。&lt;br /&gt;レイアウトはapplication.iniの設定で&lt;br /&gt;&lt;pre&gt;&lt;font color="green"&gt;resources.layout.layout =&lt;/font&gt; "layout"&lt;br /&gt;&lt;font color="green"&gt;resources.layout.layoutPath =&lt;/font&gt; APPLICATION_PATH "/views/layouts"&lt;/pre&gt;としてレイアウトを有効にしています。&lt;br /&gt;&lt;br /&gt;これだと、どうやらそれぞれのviewスクリプトに対しフィルタがかかり、さらに全てのviewスクリプトを含んだlayout.phtmlでさらにフィルタがかかるという2重フィルタ処理で文字化けが起こっているようです。&lt;br /&gt;&lt;br /&gt;※このブログでも言及されていました。&lt;a href="http://born-clap.blogspot.com/2009/10/zendframework.html"&gt;骨折り損のくたびれ儲け::ZendFrameworkで携帯 文字化け対応&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;上記のブログと同じ現象なのでこれで解決かな？と思ったのですが、なぜかうまくいきません。&lt;br /&gt;１）独自のZend_Layout_Controller_Plugin_Layoutを拡張したクラスを作成&lt;br /&gt;&lt;pre&gt;&lt;font color="magenta"&gt;&amp;lt;?php&lt;/font&gt;&lt;br /&gt;&lt;font color="green"&gt;class&lt;/font&gt; My_Layout_Controller_Plugin_Layout &lt;font color="green"&gt;extends&lt;/font&gt; Zend_Layout_Controller_Plugin_layout {&lt;br /&gt;  &lt;font color="green"&gt;plubic&lt;/font&gt; &lt;font color="magenta"&gt;function&lt;/font&gt; postDispatch(Zend_Controller_Request_Abstract &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;request&lt;/font&gt;) {&lt;br /&gt;    &lt;font color="green"&gt;parent&lt;/font&gt;::postDispatch(&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;request&lt;/font&gt;);&lt;br /&gt;    &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;filter&lt;/font&gt; = &lt;font color="magenta"&gt;new&lt;/font&gt; My_View_Filter();&lt;br /&gt;    &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;this&lt;/font&gt;-&gt;getResponse()-&gt;setBody(&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;filter&lt;/font&gt;-&gt;filter(&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;this&lt;/font&gt;-&gt;getResponse()-&gt;getBody()));&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;２）application.iniに追記&lt;br /&gt;&lt;pre&gt;&lt;font color="green"&gt;resources.layout.pluginClass =&lt;/font&gt; "My_Layout_Controller_Plugin_Layout"&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;やり方が間違っているのか、、でも上のpostDispatch()メソッドで親クラスのを一度呼び出してるから文字化けするんじゃ？？とも思うのですが、、&lt;br /&gt;正しい方法があれば教えてください＞＜&lt;br /&gt;&lt;br /&gt;で、解決方法ですが、↑で作ったクラスなどはそのままにしておいてZend_View_Abstractクラスのrender()メソッドをちょこっと変更すればできます。&lt;br /&gt;&lt;pre&gt;&lt;font color="green"&gt;public&lt;/font&gt; &lt;font color="magenta"&gt;function&lt;/font&gt; render(&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;name&lt;/font&gt;) {&lt;br /&gt;-- 中略 --&lt;br /&gt;&lt;font color="steelblue"&gt;// return $this-&gt;_filter(ob_get_clean());&lt;/font&gt;&lt;br /&gt;  &lt;font color="yellow"&gt;return&lt;/font&gt; &lt;font color="aqua"&gt;ob_get_clean&lt;/font&gt;();&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Zend_View_Abstractクラスを拡張しても良いかもしれませんね。&lt;br /&gt;&lt;br /&gt;以上でぇぇす。&lt;br /&gt;&lt;br /&gt;-- 2010.09.08 追記 --&lt;br /&gt;Zend_Viewクラスを拡張したバージョンを作りました。&lt;br /&gt;まず拡張クラスを作ります。&lt;br /&gt;&lt;pre&gt;&lt;font color="magenta"&gt;&amp;lt;?php&lt;/font&gt;&lt;br /&gt;&lt;font color="green"&gt;class&lt;/font&gt; My_View &lt;font color="green"&gt;extends&lt;/font&gt; Zend_View {&lt;br /&gt;  &lt;font color="green"&gt;private&lt;/font&gt; &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;_file&lt;/font&gt; = &lt;font color="green"&gt;null&lt;/font&gt;;&lt;br /&gt;  &lt;font color="steelblue"&gt;// 一応&lt;/font&gt;&lt;br /&gt;  &lt;font color="green"&gt;private&lt;/font&gt; &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;_useViewStream&lt;/font&gt; = &lt;font color="red"&gt;false&lt;/font&gt;;&lt;br /&gt;  &lt;font color="green"&gt;private&lt;/font&gt; &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;_useViewStreamWrapper&lt;/font&gt; = &lt;font color="red"&gt;false&lt;/font&gt;;&lt;br /&gt;&lt;br /&gt;  &lt;font color="green"&gt;public&lt;/font&gt; &lt;font color="magenta"&gt;function&lt;/font&gt; render(&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;name&lt;/font&gt;) {&lt;br /&gt;    &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;this&lt;/font&gt;-&gt;_file = &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;this&lt;/font&gt;-&gt;_script(&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;name&lt;/font&gt;);&lt;br /&gt;    &lt;font color="aqua"&gt;unset&lt;/font&gt;(&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;name&lt;/font&gt;);&lt;br /&gt;&lt;br /&gt;    &lt;font color="aqua"&gt;ob_start&lt;/font&gt;();&lt;br /&gt;    &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;this&lt;/font&gt;-&gt;_run(&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;this&lt;/font&gt;-&gt;_file);&lt;br /&gt;    &lt;font color="yellow"&gt;return&lt;/font&gt; &lt;font color="aqua"&gt;ob_get_clean&lt;/font&gt;(); &lt;font color="steelblue"&gt;// ここは親クラスと違う&lt;/font&gt;&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;次はこの拡張Viewクラスを使うようindex.phpか、またはBootstrapに（※この例ではBootstrapを利用）&lt;br /&gt;&lt;pre&gt;&lt;font color="magenta"&gt;&amp;lt;?php&lt;/font&gt;&lt;br /&gt;&lt;font color="green"&gt;class&lt;/font&gt; Bootstrap &lt;font color="green"&gt;extends&lt;/font&gt; Zend_Application_Bootstrap_Bootstrap {&lt;br /&gt;  &lt;font color="green"&gt;protected&lt;/font&gt; &lt;font color="magenta"&gt;function&lt;/font&gt; _initView() {&lt;br /&gt;    &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;view&lt;/font&gt; = &lt;font color="magenta"&gt;new&lt;/font&gt; My_View(&lt;font color="green"&gt;array&lt;/font&gt;()); &lt;font color="steelblue"&gt;// コンストラクタの引数はViewに渡すオプション配列、またはZend_Config&lt;/font&gt;&lt;br /&gt;    &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;viewRenderer&lt;/font&gt; = Zend_Controller_Action_HelperBroker::getStaticHelper("ViewRenderer");&lt;br /&gt;    &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;viewRenderer&lt;/font&gt;-&gt;setView(&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;view&lt;/font&gt;);&lt;br /&gt;  }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;以上でーす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-4868485264982765978?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/4868485264982765978/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=4868485264982765978&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4868485264982765978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4868485264982765978'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/09/zend-frameworkzendfilterzendlayout.html' title='zend frameworkでZend_Filterを設定かつZend_Layoutを使うと文字化け'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-8681931205732054359</id><published>2010-09-07T18:16:00.002+09:00</published><updated>2010-09-07T18:25:44.821+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zsh'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>漢のzshでプロンプトに色をつける</title><content type='html'>どうも、俺＠もうちょいで定時です。&lt;br /&gt;&lt;br /&gt;最近書くネタがないので、.zshrcの設定でプロンプトに色をつける方法をメモっときます。&lt;br /&gt;&lt;pre&gt;$ vim ~/.zshrc&lt;br /&gt;---------------------------------------&lt;br /&gt;autoload colors&lt;br /&gt;colors&lt;br /&gt;&lt;br /&gt;PROMPT="%{${fg[yellow]}%}[%n]# %{${reset_color}%}" &lt;font color="steelblue"&gt;# 左側&lt;/font&gt;&lt;br /&gt;PROMPT2="%{${fg[yellow]}%}}-&gt;: %{${reset_color}%}"&lt;font color="steelblue"&gt;# 2行以上のプロンプト表示&lt;/font&gt;&lt;br /&gt;SPROMPT="%{${fg[yellow]}%}correct:%R -&gt; %r [n y a e]? %{${reset_color}%}"&lt;font color="steelblue"&gt;# 入力を間違えたときの表示&lt;/font&gt;&lt;br /&gt;RPROMPT="%{${fg[cyan]}%}[%~]%{${reset_color}%}"&lt;font color="steelblue"&gt;# 右側&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;これで色がつきますよー。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-8681931205732054359?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/8681931205732054359/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=8681931205732054359&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/8681931205732054359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/8681931205732054359'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/09/zsh.html' title='漢のzshでプロンプトに色をつける'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-4139945205758431077</id><published>2010-08-18T18:18:00.005+09:00</published><updated>2010-08-18T18:49:46.045+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>ローカルネットワーク内のサーバ状況を外部のサーバでMRTG監視する</title><content type='html'>どうも、俺＠連投です。&lt;br /&gt;&lt;br /&gt;監視サーバから直接接続できないローカルサーバの状況をMRTGで監視したい場合、ありますよね。&lt;br /&gt;その場合の対処方法についてメモです。&lt;br /&gt;&lt;br /&gt;イメージ的には&lt;br /&gt;【監視サーバ】→→インターネット→→【システムWEBサーバ(192.168.0.1)】→→ローカル→→【システムDBサーバ(192.168.0.2)】&lt;br /&gt;のような感じの場合です。&lt;br /&gt;今回は例としてローカル内のDBサーバのロードアベレージを取得するとします。&lt;br /&gt;&lt;br /&gt;まずDBサーバから定期的にLoadavg情報をWEBサーバへ転送するようにします。&lt;br /&gt;&lt;pre&gt;【DBサーバ】192.168.0.2&lt;br /&gt;# vim catch_loadavg.sh&lt;br /&gt;-----------------------&lt;br /&gt;awk '&lt;font color="red"&gt;{ print $1"\n"$2 }&lt;/font&gt;' /proc/loadavg &gt; db_loadavg &lt;font color="steelblue"&gt;# loadavg情報取得&lt;/font&gt;&lt;br /&gt;rsync /path/to/db_loadavg 192.168.0.1::module_name/path/to/savedir &lt;font color="steelblue"&gt;# rsyncでWEBサーバへ転送&lt;/font&gt;&lt;/pre&gt;これをcronにて5分毎に実行させます。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# crontab -e&lt;br /&gt;*/5 * * * * /path/to/catch_loadavg.sh&lt;/pre&gt;これでDB側は準備完了です。&lt;br /&gt;おそらくdb_loadavgというファイルには&lt;br /&gt;&lt;pre&gt;0.24&lt;br /&gt;0.18&lt;/pre&gt;のように、1行目は1分平均、2行目が5分平均のロードアベレージデータがあるはずです。&lt;br /&gt;&lt;br /&gt;次はWEBサーバ側です。&lt;br /&gt;まずrsyncの設定を&lt;br /&gt;&lt;pre&gt;# vim /etc/xinetd.d/rsync&lt;br /&gt;-------------------------------&lt;br /&gt;&lt;font color="steelblue"&gt;# default: off&lt;br /&gt;# description: The rsync server is a good addition to an ftp server, as it \&lt;br /&gt;#   allows crc checksumming etc.&lt;/font&gt;&lt;br /&gt;service rsync&lt;br /&gt;{&lt;br /&gt;    disable = no&lt;br /&gt;    socket_type     = stream&lt;br /&gt;    wait            = no&lt;br /&gt;    user            = root&lt;br /&gt;    server          = /usr/bin/rsync&lt;br /&gt;    server_args     = --daemon&lt;br /&gt;    log_on_failure  += USERID&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# vim /etc/rsyncd.conf&lt;br /&gt;--------------------------&lt;br /&gt;hosts allow = 192.168.0.0/24&lt;br /&gt;use chroot = false&lt;br /&gt;read only = false&lt;br /&gt;[module_name]&lt;br /&gt;uid = root&lt;br /&gt;gid = root&lt;br /&gt;path = /&lt;br /&gt;comment = some comment&lt;/pre&gt;こんな感じでしょう。xinetdを再起動します。&lt;br /&gt;&lt;pre&gt;# service xinetd restart&lt;/pre&gt;これで、DBサーバからロードアベレージデータファイルをrsyncにて受け取れるようになりました。&lt;br /&gt;&lt;br /&gt;次にsnmpdの設定です。&lt;br /&gt;まずはDBサーバのロードアベレージを表示するプログラムを作成します。1分平均のものと5分平均のもの2つ用意します。&lt;br /&gt;&lt;pre&gt;# vim /etc/snmp/db_loadavg_1avg.sh // pathは適当です&lt;br /&gt;-------------------------------&lt;br /&gt;&lt;font color="steelblue"&gt;#!/bin/sh&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;cd /etc/snmp&lt;br /&gt;cat /path/to/db_loadavg | awk '&lt;font color="red"&gt;NR==1 { print $1*100 }&lt;/font&gt;'&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;# vim /etc/snmp/db_loadavg_5avg.sh&lt;br /&gt;-------------------------------&lt;br /&gt;&lt;font color="steelblue"&gt;#!/bin/sh&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;cd /etc/snmp&lt;br /&gt;cat /path/to/db_loadavg | awk '&lt;font color="red"&gt;NR==2 { print $1*100 }&lt;/font&gt;'&lt;/pre&gt;これで2つ出来ました。&lt;br /&gt;&lt;br /&gt;次はsnmpd.confの設定です。&lt;br /&gt;&lt;pre&gt;# vim snmpd.conf&lt;br /&gt;---------------------------&lt;br /&gt;&lt;font color="steelblue"&gt;# 以下を追加&lt;/font&gt;&lt;br /&gt;exec db_loadavg_1avg /etc/snmp/db_loadavg_1avg.sh&lt;br /&gt;exec db_loadavg_5avg /etc/snmp/db_loadavg_5avg.sh&lt;/pre&gt;でsnmpdを再起動します。&lt;br /&gt;&lt;pre&gt;# service snmpd restart&lt;/pre&gt;これでとりあえずWEB側の設定も完了です。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;では監視サーバからデータが取得できるかどうか確認です。&lt;br /&gt;監視サーバ側から&lt;br /&gt;&lt;pre&gt;# snmpwalk -v 1 -c &lt;i&gt;community_name&lt;/i&gt; &lt;i&gt;webserver_host&lt;/i&gt; .1.3.6.1.4.1.2021.8.1.100.1&lt;br /&gt;# snmpwalk -v 1 -c &lt;i&gt;community_name&lt;/i&gt; &lt;i&gt;webserver_host&lt;/i&gt; .1.3.6.1.4.1.2021.8.1.100.2&lt;/pre&gt;これでデータが取得できればOKです。&lt;br /&gt;&lt;br /&gt;監視サーバのMRTGの設定ファイルに&lt;br /&gt;&lt;pre&gt;# vim /usr/local/mrtg-2/conf/foo.cfg&lt;br /&gt;-----------------------------------------------&lt;br /&gt;Target[&lt;font color="greenyellow"&gt;&lt;i&gt;webserver_host&lt;/i&gt;_db_load&lt;/font&gt;]: .1.3.6.1.4.1.2021.8.1.101.1&amp;.1.3.6.1.4.1.2021.8.1.101.2:&lt;i&gt;community_name&lt;/i&gt;@&lt;i&gt;webserver_host&lt;/i&gt;:&lt;br /&gt;MaxBytes[&lt;font color="greenyellow"&gt;&lt;i&gt;webserver_host&lt;/i&gt;_db_load&lt;/font&gt;]: 10000 &lt;br /&gt;Options[&lt;font color="greenyellow"&gt;&lt;i&gt;webserver_host&lt;/i&gt;_db_load&lt;/font&gt;]: gauge, absolute&lt;br /&gt;YLegend[&lt;font color="greenyellow"&gt;&lt;i&gt;webserver_host&lt;/i&gt;_db_load&lt;/font&gt;]: DB/LoadAvg&lt;br /&gt;ShortLegend[&lt;font color="greenyellow"&gt;&lt;i&gt;webserver_host&lt;/i&gt;_db_load&lt;/font&gt;]: %&lt;br /&gt;Legend1[&lt;font color="greenyellow"&gt;&lt;i&gt;webserver_host&lt;/i&gt;_db_load&lt;/font&gt;]: 1min CPU load avg &lt;br /&gt;Legend2[&lt;font color="greenyellow"&gt;&lt;i&gt;webserver_host&lt;/i&gt;_db_load&lt;/font&gt;]: 5min CPU load avg &lt;br /&gt;LegendI[&lt;font color="greenyellow"&gt;&lt;i&gt;webserver_host&lt;/i&gt;_db_load&lt;/font&gt;]: 1min CPU load avg &lt;br /&gt;LegendO[&lt;font color="greenyellow"&gt;&lt;i&gt;webserver_host&lt;/i&gt;_db_load&lt;/font&gt;]: 5min CPU load avg &lt;br /&gt;KMG[&lt;font color="greenyellow"&gt;&lt;i&gt;webserver_host&lt;/i&gt;_db_load&lt;/font&gt;]: %&lt;br /&gt;Title[&lt;font color="greenyellow"&gt;&lt;i&gt;webserver_host&lt;/i&gt;_db_load&lt;/font&gt;]: DB/Load Average&lt;/pre&gt;と、まぁこんな感じで、、&lt;br /&gt;&lt;br /&gt;あとはグラフが出てくれるのを気長に待つべし。&lt;br /&gt;&lt;br /&gt;以上でぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-4139945205758431077?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/4139945205758431077/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=4139945205758431077&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4139945205758431077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4139945205758431077'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/08/mrtg.html' title='ローカルネットワーク内のサーバ状況を外部のサーバでMRTG監視する'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-163125037936852503</id><published>2010-08-18T10:07:00.004+09:00</published><updated>2010-08-18T11:15:06.059+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>自作デーモンプログラムを走らせる</title><content type='html'>どうも、俺＠始業です。&lt;br /&gt;今日はむかーしドコかのブログにメモったものを書き移します。&lt;br /&gt;&lt;br /&gt;Linuxサーバにて自作プログラムをデーモンとして動かす方法についてです。&lt;br /&gt;今回は例として外部サーバから80000ポートにTCP接続があればそのサーバのロードアベレージを返すデーモンプログラムを作成します。&lt;br /&gt;&lt;br /&gt;まずはロードアベレージを返すプログラムを作成。&lt;br /&gt;&lt;pre&gt;# vim call_loadavg.sh&lt;br /&gt;&lt;font color="steelblue"&gt;#!/bin/sh&lt;/font&gt;&lt;br /&gt;cat /proc/loadavg | awk '&lt;font color="red"&gt;{ print $1 }&lt;/font&gt;'&lt;br /&gt;&lt;br /&gt;# chmod +x call_loadavg.sh&lt;/pre&gt;出来ました。&lt;br /&gt;&lt;br /&gt;これをデーモンに登録します。&lt;br /&gt;&lt;pre&gt;# vim /etc/services&lt;br /&gt;&lt;font color="steelblue"&gt;# 一番最終行にでも&lt;/font&gt;&lt;br /&gt;call_loadavg 80000/tcp &lt;font color="steelblue"&gt;# my_daemon&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;// 新規作成&lt;br /&gt;# vim /etc/xinetd.d/call_loadavg&lt;br /&gt;service call_loadavg&lt;br /&gt;{&lt;br /&gt;　disable = no&lt;br /&gt;　socket_type = stream&lt;br /&gt;　wait = no&lt;br /&gt;　user = root&lt;br /&gt;　protocol = tcp&lt;br /&gt;　server = /bin/sh&lt;br /&gt;　server_args = /path/to/call_loadavg.sh&lt;br /&gt;　log_on_failure += USERID&lt;br /&gt;　port = 80000&lt;br /&gt;&lt;font color="steelblue"&gt;# IP制限した場合は&lt;br /&gt;only_from = x.x.x.x&lt;/font&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;この項目は&lt;br /&gt;&lt;pre&gt;disable no...使用 yes...使用しない&lt;br /&gt;socket_type stream...ストリーム型 dgram...データグラム型 raw...IPへ直接制御が必要な場合&lt;br /&gt;wait yes...シングルスレッドで動作 no...マルチスレッドで動作&lt;br /&gt;user 実行ユーザ名&lt;br /&gt;protocol プロトコル&lt;br /&gt;server 実行プログラム名&lt;br /&gt;server_args 実行プログラムに渡される引数&lt;br /&gt;log_on_failure サーバ起動、終了時に出力するログの種類（複数組み合わせ可）&lt;br /&gt;　PID...プロセスID HOST...リモートホストアドレス USERID...リモートユーザのユーザID EXIT...サーバが終了したことを出力 DURATION...サービスセッションの時間&lt;br /&gt;port プログラムが動作するポート番号&lt;/pre&gt;などです。詳しくは&lt;a href="http://www.linux.or.jp/JM/html/xinetd/man5/xinetd.conf.5.html"&gt;http://www.linux.or.jp/JM/html/xinetd/man5/xinetd.conf.5.html&lt;/a&gt;にて。&lt;br /&gt;&lt;br /&gt;次にxinetdを再起動&lt;br /&gt;&lt;pre&gt;# service xinetd restart&lt;/pre&gt;以上でぇぇえす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-163125037936852503?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/163125037936852503/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=163125037936852503&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/163125037936852503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/163125037936852503'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/08/blog-post.html' title='自作デーモンプログラムを走らせる'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-541397174083640408</id><published>2010-08-04T18:01:00.003+09:00</published><updated>2010-08-04T18:10:03.662+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>postgresqlのクエリログ（スロウログ）を取得</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;&lt;br /&gt;以前にも&lt;a href="http://koexuka.blogspot.com/2009/02/postgresqlslow-log.html"&gt;postgresqlのslow-log::オデの日記&lt;/a&gt;と題してpostgresqlでSlowログを取得する方法を書いたのですが、&lt;br /&gt;この方法はsyslogを利用する方法だったので連携が難しいというか面倒というか、syslogの設定も変更する必要があったので、今回はpostgresqlだけでログを取得する方法についてメモします。&lt;br /&gt;&lt;br /&gt;PostgreSQLのバージョンは8.4.xです。（8.3～であれば共通なはず）&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# vim postgresql.conf&lt;br /&gt;&lt;font color="steelblue"&gt;# 以下を追加&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;log_destination = &lt;font color="red"&gt;'stderr'&lt;/font&gt;&lt;br /&gt;logging_collector = &lt;font color="red"&gt;'on'&lt;/font&gt;&lt;br /&gt;&lt;font color="steelblue"&gt;# ログの出力先ディレクトリ（postgresユーザで書込み権限あるように）&lt;/font&gt;&lt;br /&gt;log_directory = &lt;font color="red"&gt;'/usr/local/pgsql/data'&lt;/font&gt;&lt;br /&gt;&lt;font color="steelblue"&gt;# 出力ファイル名 (&lt;/font&gt;&lt;br /&gt;log_filename = &lt;font color="red"&gt;'postgresql_%Y%m%d%H%M_log'&lt;/font&gt;&lt;br /&gt;&lt;font color="steelblue"&gt;# ログが100KBになったらローテートする&lt;/font&gt;&lt;br /&gt;log_rotation_size = 100&lt;br /&gt;&lt;font color="steelblue"&gt;# ログを1日おきにローテート&lt;/font&gt;&lt;br /&gt;&lt;font color="steelblue"&gt;#log_rotation_age = 86400&lt;/font&gt;&lt;br /&gt;&lt;font color="steelblue"&gt;# 1000ミリ秒以上のクエリを出力（0の場合はすべてのクエリ）&lt;/font&gt;&lt;br /&gt;log_min_duration_statement = 1000&lt;/pre&gt;です。&lt;br /&gt;&lt;br /&gt;あとは&lt;br /&gt;&lt;pre&gt;postgres $ pg_ctl restart&lt;/pre&gt;と再起動します。&lt;br /&gt;&lt;br /&gt;以上どえぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-541397174083640408?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/541397174083640408/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=541397174083640408&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/541397174083640408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/541397174083640408'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/08/postgresql.html' title='postgresqlのクエリログ（スロウログ）を取得'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-2979888126337713725</id><published>2010-08-02T12:19:00.007+09:00</published><updated>2010-08-02T12:43:56.349+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='open flash chart'/><title type='text'>OpenFlashChartで折れ線グラフを描く</title><content type='html'>どうも、俺＠週明け仕事中です。&lt;br /&gt;&lt;br /&gt;今日はphpの便利なFlashグラフ作成ライブラリ&lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/"&gt;Open Flash Chart&lt;/a&gt;を使って折れ線グラフを描く方法をメモします。&lt;br /&gt;&lt;br /&gt;.swfファイルの配置などは割愛します。&lt;br /&gt;上記URLから一式ファイルを落として、open-flash-chart.swfをサーバへ置き、クライアント側からはjavascriptで&lt;br /&gt;&lt;pre&gt;&amp;lt;script src="swfobject.js" type="text/javascript"&gt;&amp;lt;/script&gt;&lt;br /&gt;swfobject.embledSWF("open-flash-chart.swf");&lt;/pre&gt;のように呼び出すだけです。&lt;br /&gt;&lt;br /&gt;では、折れ線グラフ（2本の折れ線）を作るためにサーバ側では&lt;br /&gt;&lt;pre&gt;&lt;font color="magenta"&gt;&amp;lt;?php&lt;/font&gt;&lt;br /&gt;$chart = new OFC_Chart();&lt;br /&gt;&lt;br /&gt;&lt;font color="steelblue"&gt;// １本目&lt;/font&gt;&lt;br /&gt;$line = new OFC_Charts_Line();&lt;br /&gt;$line-&gt;set_values(array(1,2,3));&lt;br /&gt;$line-&gt;set_width(2);&lt;br /&gt;$line-&gt;set_colour("#000000");&lt;br /&gt;$chart-&gt;add_element($line);&lt;br /&gt;&lt;br /&gt;&lt;font color="steelblue"&gt;// tool_tipを使う場合&lt;/font&gt;&lt;br /&gt;$dot = new OFC_Charts_Line_Dot();&lt;br /&gt;$dot-&gt;set_dot_size(3);&lt;br /&gt;$dot-&gt;set_halo_size(1);&lt;br /&gt;$dot-&gt;set_colour("#000000");&lt;br /&gt;$dot-&gt;set_tooltip("ここはツールチップ #val##x_label#");&lt;br /&gt;$line-&gt;set_default_dot_style($dot);&lt;br /&gt;&lt;font color="steelblue"&gt;&lt;br /&gt;/Charts/OFC_Charts_Line.phpに以下のメソッド追加&lt;br /&gt;function set_tooltip($tip) {&lt;br /&gt;    $this-&gt;tip = $tip;&lt;br /&gt;}&lt;br /&gt;function set_default_dot_style($style) {&lt;br /&gt;    $this-&gt;{"dot-style"} = $style;&lt;br /&gt;}&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="steelblue"&gt;// ２本目&lt;/font&gt;&lt;br /&gt;$line = new OFC_Charts_Line();&lt;br /&gt;$line-&gt;set_values(array(4,5,6));&lt;br /&gt;$line-&gt;set_width(2);&lt;br /&gt;$line-&gt;set_colour("#000000");&lt;br /&gt;$chart-&gt;add_element($line);&lt;br /&gt;&lt;br /&gt;&lt;font color="steelblue"&gt;// tool_tipを使う場合&lt;/font&gt;&lt;br /&gt;$dot = new OFC_Charts_Line_Dot();&lt;br /&gt;$dot-&gt;set_dot_size(3);&lt;br /&gt;$dot-&gt;set_halo_size(1);&lt;br /&gt;$dot-&gt;set_colour("#000000");&lt;br /&gt;$dot-&gt;set_tooltip("ここはツールチップ #val##x_label#");&lt;br /&gt;$line-&gt;set_default_dot_style($dot);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="steelblue"&gt;// Y軸&lt;/font&gt;&lt;br /&gt;$y = new OFC_Elements_Axis_Y();&lt;br /&gt;$y-&gt;set_range(0,100,10);&lt;font color="steelblue"&gt;// Y軸の幅&lt;/font&gt;&lt;br /&gt;$y-&gt;set_colour("#000000")&lt;br /&gt;$y-&gt;set_grid_colour("#cccccc");&lt;br /&gt;$chart-&gt;set_y_axis($y);&lt;br /&gt;&lt;br /&gt;&lt;font color="steelblue"&gt;// X軸&lt;/font&gt;&lt;br /&gt;$x_label = new OFC_Elements_Axis_X_Label_Set();&lt;br /&gt;$x_label-&gt;set_labels(array("その１", "その２"));&lt;br /&gt;$x_label-&gt;set_steps(1);&lt;br /&gt;$x_label-&gt;set_colour("#000000");&lt;br /&gt;&lt;br /&gt;$x = new OFC_Elements_Axis_X();&lt;br /&gt;$x-&gt;set_labels($x_label);&lt;br /&gt;$x-&gt;set_colour("#000000");&lt;br /&gt;$x-&gt;set_grid_colour("#cccccc");&lt;br /&gt;$x-&gt;set_range(0,null,null);&lt;br /&gt;&lt;br /&gt;$chart-&gt;set_x_axis($x);&lt;br /&gt;&lt;br /&gt;print $chart-&gt;toPrettyString();&lt;br /&gt;exit;&lt;br /&gt;&lt;/pre&gt;こんな感じです。&lt;br /&gt;&lt;br /&gt;詳細は公式を見てね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-2979888126337713725?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/2979888126337713725/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=2979888126337713725&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/2979888126337713725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/2979888126337713725'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/08/openflashchart.html' title='OpenFlashChartで折れ線グラフを描く'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-4163805204801358065</id><published>2010-07-15T19:59:00.002+09:00</published><updated>2010-07-15T20:09:02.914+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>apacheにmod_rewriteを追加する。</title><content type='html'>どうも、俺＠連続投稿です。&lt;br /&gt;&lt;br /&gt;apacheに組み込まれているモジュールを確認する場合は&lt;br /&gt;&lt;pre&gt;# httpd -l&lt;br /&gt;Compiled in modules:&lt;br /&gt;  core.c&lt;br /&gt;  mod_authn_file.c&lt;br /&gt;  mod_authn_default.c&lt;br /&gt;  mod_authz_host.c&lt;br /&gt;  mod_authz_groupfile&lt;br /&gt;...&lt;/pre&gt;で確認できます。今日は「やべっ！RewriteEngine使うためのmod_rewrite入ってねーじゃん！」という場合どうするかのメモです。&lt;br /&gt;&lt;br /&gt;まぁ、簡単なのはapacheを --enable-rewrite 追加して再インストールで良いのですが、再インストールできないような場合（例えばapacheを止められないような場合）。&lt;br /&gt;&lt;br /&gt;まず適当なDirを作成&lt;br /&gt;&lt;pre&gt;# mkdir /usr/local/apache2/my_dir&lt;/pre&gt;し、rewrite用のプログラムファイルを持ってきます。&lt;br /&gt;&lt;pre&gt;# find /usr/local/src/httpd-2.2.6/ -name "*rewrite*"&lt;br /&gt;/usr/local/src/httpd-2.2.6/modules/mappers/mod_rewrite.lo&lt;br /&gt;/usr/local/src/httpd-2.2.6/modules/mappers/libmod_rewrite.la&lt;br /&gt;/usr/local/src/httpd-2.2.6/modules/mappers/mod_rewrite.exp&lt;br /&gt;/usr/local/src/httpd-2.2.6/modules/mappers/.libs/libmod_rewrite.a&lt;br /&gt;/usr/local/src/httpd-2.2.6/modules/mappers/.libs/libmod_rewrite.la&lt;br /&gt;/usr/local/src/httpd-2.2.6/modules/mappers/.libs/mod_rewrite.o&lt;br /&gt;/usr/local/src/httpd-2.2.6/modules/mappers/mod_rewrite.o&lt;br /&gt;/usr/local/src/httpd-2.2.6/modules/mappers/mod_rewrite.c&lt;br /&gt;/usr/local/src/httpd-2.2.6/modules/mappers/NWGNUrewrite&lt;br /&gt;...&lt;/pre&gt;たくさん出てきます。&lt;br /&gt;ココで必要なのは&lt;br /&gt;「mod_rewrite_c」と「mod_rewirte.h」の２つです。（たぶん&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# cp /usr/local/src/httpd-2.2.6/modules/mappers/mod_rewrite.c /usr/local/apache2/my_dir&lt;br /&gt;# cp /usr/local/src/httpd-2.2.6/modules/mappers/mod_rewrite.h /usr/local/apache2/my_dir&lt;/pre&gt;します。&lt;br /&gt;&lt;br /&gt;次にビルドします。&lt;br /&gt;&lt;pre&gt;# cd /usr/local/apache2/my_dir&lt;br /&gt;# /usr/local/apache2/bin/apxs -c mod_rewrite.c&lt;/pre&gt;とすると&lt;br /&gt;&lt;pre&gt;# ls -la&lt;br /&gt;drwxr-xr-x    2 root     root         4096 Jul 15 18:54 .libs&lt;br /&gt;-rw-r--r--    1 root     root       154702 Jul 15 18:53 mod_rewrite.c&lt;br /&gt;-rw-r--r--    1 root     root         1340 Jul 15 18:53 mod_rewrite.h&lt;br /&gt;-rw-r--r--    1 root     root          822 Jul 15 18:54 mod_rewrite.la&lt;br /&gt;-rw-r--r--    1 root     root          324 Jul 15 18:54 mod_rewrite.lo&lt;br /&gt;-rw-r--r--    1 root     root       197344 Jul 15 18:54 mod_rewrite.o&lt;br /&gt;-rw-r--r--    1 root     root            0 Jul 15 18:54 mod_rewrite.slo&lt;/pre&gt;とたくさんファイルが出来上がります。&lt;br /&gt;次にインストールです。&lt;br /&gt;&lt;pre&gt; # /usr/local/apache2/bin/apxs -i -a -n rewrite mod_rewrite.la&lt;/pre&gt;完了です。&lt;br /&gt;&lt;br /&gt;あとはhttpd.confをいつものように編集すれば完了です。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇぇえぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-4163805204801358065?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/4163805204801358065/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=4163805204801358065&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4163805204801358065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4163805204801358065'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/07/apachemodrewrite.html' title='apacheにmod_rewriteを追加する。'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-351133262251226149</id><published>2010-07-15T19:53:00.002+09:00</published><updated>2010-07-15T19:58:45.311+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>postgrsql.8.4.xでcreatedb実行時に文字コードエラー</title><content type='html'>どうも、俺＠残業中です。&lt;br /&gt;&lt;br /&gt;postgresql.8.4系で&lt;br /&gt;&lt;pre&gt;$ createdb hoge_db -E UTF8&lt;br /&gt;createdb: database creation failed: ERROR: new encoding (UTF8) is incompatible with the encoding of the template database (EUC_JP)&lt;br /&gt;HINT: Use the same encoding as in the template database, or use template0 as template.&lt;/pre&gt;のエラーが出ました。&lt;br /&gt;&lt;br /&gt;これはinitdb時に文字コードをEUC-JPで作成したためUTF-8なデータベースが作成できないよ！というエラーです。ちなみにpostgresql8.4系から出るエラーだそうです。&lt;br /&gt;&lt;br /&gt;こんな時は、「Use the same encoding as in the template database, or use template0 as template」しましょう。&lt;br /&gt;つまり、template0のテンプレートデータベースを使ってcreatedbしましょう。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ createdb hoge_db -E UTF8 -T template0&lt;/pre&gt;これで出来るはずです。&lt;br /&gt;&lt;br /&gt;テンプレートデータベースとはなんじゃらほい？ですが、&lt;br /&gt;&lt;a href="http://www.postgresql.jp/document/pg802doc/html/manage-ag-templatedbs.html"&gt;PostgreSQL テンプレートデータベース&lt;/a&gt;に説明があります。&lt;br /&gt;template1というデータベースはデータベース作成時に元となるテンプレートで、initdbなどした初期設定の情報などが入っています。&lt;br /&gt;template0というデータベースは、初期設定のないテンプレートだそうです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ちゃんちゃん。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-351133262251226149?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/351133262251226149/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=351133262251226149&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/351133262251226149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/351133262251226149'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/07/postgrsql84xcreatedb.html' title='postgrsql.8.4.xでcreatedb実行時に文字コードエラー'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-3202787626241038515</id><published>2010-07-07T12:42:00.004+09:00</published><updated>2010-07-07T12:52:21.971+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='snmp'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>snmpで独自（特定）のプログラム実行結果を取得する</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;&lt;br /&gt;今日はsnmpで独自で作成したプログラムの実行結果を取得する方法についてメモです。&lt;br /&gt;snmpd.confに&lt;br /&gt;&lt;pre&gt;# vim snmpd.conf&lt;br /&gt;exec foo_program /usr/local/bin/php /etc/snmp/bin/foo.php&lt;br /&gt;exec bar_program /usr/local/bin/php /etc/snmp/bin/bar.php&lt;/pre&gt;とし、/etc/snmpd/bin以下に実行プログラムを書きます。&lt;br /&gt;2つ書いたのは、例えばMRTGでデータ取得する場合は2つのデータを必要とするからです。&lt;br /&gt;それぞれのプログラムは適当に&lt;br /&gt;&lt;pre&gt;&lt;font color="magenta"&gt;&amp;lt;?php&lt;/font&gt; &lt;font color="aqua"&gt;print&lt;/font&gt; 10. "&lt;font color="red"&gt;\n&lt;/font&gt;";&lt;/pre&gt;みたいにしておきます。&lt;br /&gt;&lt;br /&gt;この場合、snmpでは&lt;br /&gt;.1.3.6.1.4.1.2021.8.1.101.1　/etc/snmp/bin/foo.phpの実行結果&lt;br /&gt;.1.3.6.1.4.1.2021.8.1.101.2　/etc/snmp/bin/bar.phpの実行結果&lt;br /&gt;を取得できます。&lt;br /&gt;一番最後の「1」は、snmpd.confに書いた上からの順番です。&lt;br /&gt;&lt;br /&gt;ちなみに&lt;br /&gt;.1.3.6.1.4.1.2021.8.1.100.1　/etc/snmpd/bin/foo.phpの戻り値&lt;br /&gt;.1.3.6.1.4.1.2021.8.1.100.2　/etc/snmpd/bin/bar.phpの戻り値&lt;br /&gt;が取得できます。&lt;br /&gt;&lt;br /&gt;テストで&lt;br /&gt;&lt;pre&gt;# snmpwalk -v 1 &lt;i&gt;host_name&lt;/i&gt; -c &lt;i&gt;community_name&lt;/i&gt; .1.3.6.1.4.1.2021.8.1.101.1&lt;br /&gt;10&lt;br /&gt;# snmpwalk -v 1 &lt;i&gt;host_name&lt;/i&gt; -c &lt;i&gt;community_name&lt;/i&gt; .1.3.6.1.4.1.2021.8.1.101.2&lt;br /&gt;10&lt;/pre&gt;で確認してください。&lt;br /&gt;&lt;br /&gt;以上でええええええええええす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-3202787626241038515?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/3202787626241038515/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=3202787626241038515&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3202787626241038515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3202787626241038515'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/07/snmp.html' title='snmpで独自（特定）のプログラム実行結果を取得する'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-4494717334108642858</id><published>2010-07-06T16:01:00.003+09:00</published><updated>2010-07-06T16:54:49.063+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='postgressql'/><title type='text'>postgresqlで日付データをフォーマットさせる</title><content type='html'>どうも、俺＠一生懸命仕事中です。&lt;br /&gt;&lt;br /&gt;今日はpostgresqlで日付データをフォーマットして出力する方法についてメモです。&lt;br /&gt;例えばtimestamp型のカラムは&lt;br /&gt;&lt;pre&gt;select regist_date from &lt;i&gt;table_name&lt;/i&gt;&lt;br /&gt;    regist_date&lt;br /&gt;--------------------&lt;br /&gt; 2010-06-29 14:53:53&lt;br /&gt; 2010-06-29 15:07:03&lt;br /&gt; 2010-06-29 17:28:57&lt;br /&gt; 2010-07-01 17:07:55&lt;br /&gt; 2010-07-06 14:10:33&lt;/pre&gt;のような出力になるのですが、これを年月日の部分だけで切り取りたい場合。&lt;br /&gt;※（yyyy-mm-ddの部分だけ表示したい）&lt;br /&gt;&lt;br /&gt;そんな場合は&lt;br /&gt;&lt;pre&gt;select to_char(regist_date, 'yyyy/MM/dd') from &lt;i&gt;table_name&lt;/i&gt;&lt;br /&gt;    to_cahr&lt;br /&gt;----------------&lt;br /&gt; 2010/06/29&lt;br /&gt; 2010/06/29&lt;br /&gt; 2010/06/29&lt;br /&gt; 2010/07/01&lt;br /&gt; 2010/07/06&lt;/pre&gt;でも良いし、&lt;br /&gt;&lt;pre&gt;select date(regist_date) from &lt;i&gt;table_name&lt;/i&gt;&lt;br /&gt;    date&lt;br /&gt;----------------&lt;br /&gt; 2010-06-29&lt;br /&gt; 2010-06-29&lt;br /&gt; 2010-06-29&lt;br /&gt; 2010-07-01&lt;br /&gt; 2010-07-06&lt;/pre&gt;でも良いですよー。&lt;br /&gt;&lt;br /&gt;以上だよーーーん。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-4494717334108642858?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/4494717334108642858/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=4494717334108642858&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4494717334108642858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4494717334108642858'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/07/postgresql.html' title='postgresqlで日付データをフォーマットさせる'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-5910988559291392341</id><published>2010-06-28T10:50:00.003+09:00</published><updated>2010-06-28T11:01:00.902+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>apacheで「child pid xxxx exit signal File size limit exceeded (25)」エラーがでる</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;&lt;br /&gt;昨日とあるWEBサーバでページが表示されない事件が発生しました。&lt;br /&gt;色々調べていると、apacheのerror_logに題名の&lt;br /&gt;&lt;pre&gt;[notice] child pid 11737 exit signal File size limit exceeded (25)&lt;br /&gt;&lt;/pre&gt;のエラーが大量に、、、。&lt;br /&gt;&lt;br /&gt;何のこっちゃ！？でしたが、とりあえず何かのファイルサイズがでかすぎる！という意味みたい。&lt;br /&gt;ログファイルを見ていると、phpのエラーログが&lt;br /&gt;&lt;pre&gt;$ ls -l php_error_log&lt;br /&gt;-rw-r--r--  1 nobody root 2147483647 Jun 21 10:30 php_error_log&lt;/pre&gt;で止まっている。&lt;br /&gt;中身がとあるNOTICEレベルのエラーがずらーり。&lt;br /&gt;というわけで&lt;br /&gt;&lt;pre&gt;# mv php_error_log php_error_log.0 &amp;&amp; touch php_error_log &amp;&amp; chown nobody php_error_log&lt;/pre&gt;してapacheを再起動したら正常に稼働しはじめました。&lt;br /&gt;&lt;br /&gt;Linuxには2GBの制限問題というものがある、と初めて知りました。&lt;br /&gt;参考：&lt;a href="http://blog.livedoor.jp/cielo_cielo/archives/65189748.html"&gt;Linuxで2GBを超えるファイルを作れない::0と1の欠片&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;まぁ、単純にファイルを削除するとかファイル名を変えるとかで対応できますが、32BitのLinuxOSだと問題ありそうです。&lt;br /&gt;apacheのコンパイル時に&lt;br /&gt;&lt;pre&gt;# CFLAGS="-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" ./configure --prefix=/usr/local/apache2&lt;/pre&gt;とかやれば2GBの問題はなくなるそうです。&lt;br /&gt;参考：&lt;a href="http://saguradacommet.blogspot.com/2007/07/httpd2gb.html"&gt;httpdで2GBを超えるファイルのリクエストに対応する方法::サラダ(*)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇぇえす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-5910988559291392341?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/5910988559291392341/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=5910988559291392341&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/5910988559291392341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/5910988559291392341'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/06/apachechild-pid-xxxx-exit-signal-file.html' title='apacheで「child pid xxxx exit signal File size limit exceeded (25)」エラーがでる'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-1995952415607680500</id><published>2010-06-16T19:56:00.004+09:00</published><updated>2010-06-16T20:04:03.085+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQueryを使って別ウィンドウと連携</title><content type='html'>どうも、俺＠残業中です。&lt;br /&gt;&lt;br /&gt;今日はjqueryを使って別ウィンドウ（子ウィンドウ）と連携する方法についてメモメモです。&lt;br /&gt;&lt;br /&gt;仕様は親ウィンドウにあるインプットボックスに文字を入力すれば、その値を子ウィンドウに表示するものとします。&lt;br /&gt;テスト用に、まず親ウィンドウを開いた瞬間子ウィンドウを開くようにします。&lt;br /&gt;&lt;pre&gt;&lt;font color="steelblue"&gt;// 親ウィンドウ.js&lt;/font&gt;&lt;br /&gt;$(function() {&lt;br /&gt;  &lt;font color="steelblue"&gt;// 引数は開くファイル名、子ウィンドウ名、そのプロパティ&lt;/font&gt;&lt;br /&gt;  window.open("child.html", "child", "width=800,height=300");&lt;br /&gt;});&lt;/pre&gt;です。&lt;br /&gt;また親ウィンドウにインプットボックスを作ります。&lt;br /&gt;&lt;pre&gt;&lt;font color="steelblue"&gt;&amp;lt;!-- 親ウィンドウ.html --&gt;&lt;/font&gt;&lt;br /&gt;&amp;lt;input type="text" name="name" value=""&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;次に子ウィンドウ側のjavascriptで、親ウィンドウのインプットボックスに対しEventListenerを貼ります。&lt;br /&gt;&lt;pre&gt;&lt;font color="steelblue"&gt;// 子ウィンドウ.js&lt;/font&gt;&lt;br /&gt;$(function() {&lt;br /&gt;  window.opener.$("input").bind("keyup", view);&lt;br /&gt;});&lt;br /&gt;function view() {&lt;br /&gt;  $("body").html($(this).val());&lt;br /&gt;}&lt;/pre&gt;これだけです。&lt;br /&gt;&lt;br /&gt;javascriptのwindow.openerを使って親ウィンドウからの値を子ウィンドウへ渡します。&lt;br /&gt;&lt;br /&gt;以上、どえぇぇぇえぇえぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-1995952415607680500?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/1995952415607680500/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=1995952415607680500&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1995952415607680500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1995952415607680500'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/06/jquery.html' title='jQueryを使って別ウィンドウと連携'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-7099978236982566490</id><published>2010-06-09T18:43:00.007+09:00</published><updated>2010-06-09T18:51:46.403+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ZendFramework'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>zend frameworkでレスポンスヘッダを扱う</title><content type='html'>どうも、俺＠定時間際です。&lt;br /&gt;&lt;br /&gt;今日は前回「&lt;a href="http://koexuka.blogspot.com/2010/06/zendframeworkview.html"&gt;ZendFrameworkでViewを無効化する&lt;/a&gt;」のつづきのお話になるのですが、Viewのレンダリングを無効化しレスポンスヘッダを開発者の思うように返す方法についてめもめも。&lt;br /&gt;&lt;br /&gt;Zend_Controller_Actionの派生クラス内でレスポンスヘッダを変更する場合は&lt;br /&gt;&lt;pre&gt;&lt;font color="magenta"&gt;&amp;lt;?php&lt;/font&gt;&lt;br /&gt;$response = $this-&gt;getResponse();&lt;br /&gt;$response-&gt;setHeader("&lt;font color="red"&gt;Content-Type&lt;/font&gt;", "&lt;font color="red"&gt;image/gif&lt;/font&gt;"); &lt;font color="steelblue"&gt;// 例えば画像出力&lt;br /&gt;// $response-&gt;setRedirect("&lt;font color="red"&gt;http://google.co.jp&lt;/font&gt;", &lt;font color="red"&gt;302&lt;/font&gt;); // 例えばリダイレクト&lt;/font&gt;&lt;br /&gt;$response-&gt;sendResponse();&lt;/pre&gt;これ。&lt;br /&gt;&lt;br /&gt;やり方たくさんあるっぽいので、もっと便利な別の方法もできますね。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上。どぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-7099978236982566490?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/7099978236982566490/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=7099978236982566490&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/7099978236982566490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/7099978236982566490'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/06/zend-framework.html' title='zend frameworkでレスポンスヘッダを扱う'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-3010547807133347305</id><published>2010-06-03T17:35:00.002+09:00</published><updated>2010-06-03T17:54:58.026+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ZendFramework'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>ZendFrameworkでViewを無効化する</title><content type='html'>どうも、俺＠仕事中　今日2度目の投稿です。&lt;br /&gt;ZendFrameworkを使っていて、Viewを無効化（Viewレンダリングを無効煮する）方法についてめもめも。&lt;br /&gt;&lt;br /&gt;やりたい事は、ZendFrameworkで受け付けたリクエストを処理して別サイトへリダイレクトするだけのコントローラーを作る！というものです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Zend_Controller_Actionを継承したコントローラを作成し、init()メソッドで&lt;br /&gt;&lt;pre&gt;$rediretor = $this-&gt;_helper-&gt;getHelper("Redirector"); // リダイレクトに関する処理をまとめて行う。&lt;br /&gt;$redirector-&gt;setCode(302); // ステータスコードを302にセット&lt;br /&gt;$redirector-&gt;setExit(true); // リダイレクトの後exit();を行う。&lt;br /&gt;&lt;br /&gt;$this-&gt;_helper-&gt;getHelper("ViewRenderer")-&gt;setNeverRender(true); // viewのレンダリングを行わない。&lt;/pre&gt;のようにすれば、リダイレクトの処理とViewのレンダリング無効化を初期処理にて行えます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;詳しくは&lt;a href="http://framework.zend.com/manual/ja/zend.controller.actionhelpers.html"&gt;Zend Framework アクションヘルパー&lt;/a&gt;まで&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇぇす(´・ω・｀)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-3010547807133347305?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/3010547807133347305/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=3010547807133347305&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3010547807133347305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3010547807133347305'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/06/zendframeworkview.html' title='ZendFrameworkでViewを無効化する'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-3042470971295590948</id><published>2010-06-03T11:54:00.003+09:00</published><updated>2010-06-03T12:03:13.464+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>mysqlでログインできなくなった</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;今日は開発環境のmysqlサーバへログインできなくなってしまった場合の対処法です。&lt;br /&gt;&lt;br /&gt;rootログインも一般アカウントログインもできません。&lt;br /&gt;&lt;pre&gt;# mysql -u root&lt;br /&gt;Access denied for user: 'root@localhost' (Using password: NO)&lt;br /&gt;# mysql -u mysql_user&lt;br /&gt;Access denied for user: 'mysql_user@localhost' (Using password: NO)&lt;/pre&gt;もちろんパスワードの設定などもしていませんでした。&lt;br /&gt;&lt;br /&gt;権限テーブルで何か異常が発生してるのだろう、、と確認したいのですが、mysqlデータベースにすら接続できません。&lt;br /&gt;&lt;br /&gt;１）無理やりログインできるようにする&lt;br /&gt;mysqlを立ち上げる際に&lt;br /&gt;&lt;pre&gt;# mysqld_safe --skip-grant-tables &amp; &lt;/pre&gt;とやれば権限テーブルを無視してログインできます。&lt;br /&gt;&lt;pre&gt;mysql&gt; use mysql&lt;br /&gt;mysql&gt; select * from user;&lt;br /&gt;Empty set (0.00sec)&lt;/pre&gt;あじゃぱー！！&lt;br /&gt;userテーブルが空になっちょる！誰やー！？&lt;br /&gt;&lt;br /&gt;この状態で&lt;br /&gt;&lt;pre&gt;mysql&gt; grant all on *.* to root@localhost;&lt;/pre&gt;と打っても「--skip-grant-tablesオプション付けて起動してるからGRANTできひんでー」と怒られます。&lt;br /&gt;&lt;br /&gt;２）他のサーバからuserテーブルデータを持ってきた&lt;br /&gt;仕方がないので、他サーバで稼働中のuserテーブルデータをそのまま持ってきてdataディレクトリへ置きました。&lt;br /&gt;&lt;pre&gt;# cp user.MYD user.MYI user.frm /usr/local/mysql/data/mysql/&lt;/pre&gt;これで通常起動すれば普通に接続できるようになりました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;うむむ、--skip-grant-tablesオプションでログインできるようになったはいいけど、その後GRANT構文を放り込みたい場合はどうしたら良いのでしょう、、？&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇぇえぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-3042470971295590948?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/3042470971295590948/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=3042470971295590948&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3042470971295590948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3042470971295590948'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/06/mysql.html' title='mysqlでログインできなくなった'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-2713809324395019958</id><published>2010-05-19T19:33:00.004+09:00</published><updated>2010-05-19T19:41:57.023+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ZendFramework'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Zend Frameworkでモジュール単位でBootstrap.phpを使うとエラー（Warning）</title><content type='html'>どうも、俺＠残業中です。&lt;br /&gt;今日はZendFrameworkでモジュールディレクトリ直下にBootstrap.phpを設置するとエラーになる対処法です。&lt;br /&gt;&lt;br /&gt;ZFのバージョンは1.10.4です。&lt;br /&gt;&lt;br /&gt;モジュールディレクトリ下に設置したファイルは&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;class Module_Bootstrap extends Zend_Application_Module_Bootstrap {&lt;br /&gt;}&lt;/pre&gt;です。&lt;br /&gt;これだと&lt;br /&gt;&lt;pre&gt; Warning: include_once(FrontController.php) [function.include-once]: failed to open stream: No such file or directory in...&lt;/pre&gt;というエラーがでます。&lt;br /&gt;&lt;br /&gt;どうやらこれ、&lt;br /&gt;http://framework.zend.com/issues/browse/ZF-6658&lt;br /&gt;で上がっているようなバグらしいのですが、バージョン1.9で修正されたような事が書いてあるのです。&lt;br /&gt;あれ？俺は1.10使ってるけど、、、？&lt;br /&gt;で見てると&lt;br /&gt;http://framework.zend.com/issues/browse/ZF-7696&lt;br /&gt;に、&lt;pre&gt;Fixed in &lt;a href="http://framework.zend.com/code/changelog/Standard_Library?cs=22124"&gt;r22124&lt;/a&gt;&lt;/pre&gt;と書かれてます。&lt;br /&gt;&lt;br /&gt;それを参考に&lt;br /&gt;&lt;pre&gt;# vim Zend/Application/Bootstrap/BootstrapAbstract.php&lt;br /&gt;348             if (false !== $pluginName = $this-&gt;_loadPluginResource($plugin, $spec)) {&lt;br /&gt;349                 if (0 === strcasecmp($resource, $pluginName)) {&lt;br /&gt;350                     return $this-&gt;_pluginResources[$pluginName];&lt;br /&gt;351                 }&lt;br /&gt;352                 continue; &lt;font color="steelblue"&gt;// ここ追加&lt;/font&gt;&lt;/pre&gt;の352行目を追加してあげれば良いようです。（たぶん）&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-2713809324395019958?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/2713809324395019958/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=2713809324395019958&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/2713809324395019958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/2713809324395019958'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/05/zend-frameworkbootstrapphpwarning.html' title='Zend Frameworkでモジュール単位でBootstrap.phpを使うとエラー（Warning）'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-6921077623611437250</id><published>2010-05-14T14:46:00.007+09:00</published><updated>2010-05-14T15:45:01.278+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jqueryで自作クラス（プラグイン）を作成する</title><content type='html'>どうも、俺＠仕事一段落中です。&lt;br /&gt;今日は、前々から書こうと思っていたjQueryでの自作クラスの作り方について備忘録としてめもします。&lt;br /&gt;（jqueryでは、クラスとは言わずに「プラグイン」と言うそうです。以降、プラグインと記します）&lt;br /&gt;&lt;br /&gt;まず、ファイル命名規則についてですが基本的には&lt;br /&gt;&lt;pre&gt;jquery.&lt;i&gt;myplugin&lt;/i&gt;.js&lt;/pre&gt;とします。&lt;br /&gt;&lt;br /&gt;プラグインの基本構造は&lt;br /&gt;&lt;pre&gt;(function($) {&lt;br /&gt;    var val_1; // フィールド&lt;br /&gt;    var val_2; // フィールド&lt;br /&gt;    $.fn.myplugin = function(option) {&lt;br /&gt;        // 処理&lt;br /&gt;    }&lt;br /&gt;}) (jQuery);&lt;/pre&gt;こんな感じです。&lt;br /&gt;この例で行くと呼び出し側では&lt;br /&gt;&lt;pre&gt;$("div#plugin_test").myplugin({val1:"value1", val2:"value2"});&lt;/pre&gt;こんな感じになります。&lt;br /&gt;&lt;br /&gt;例えばすごく簡単ですが、&lt;br /&gt;ボタンをクリックする度に現在時刻をHTMLに表示し、テキストボックスに入力された文字をそのボタンへ表示するプラグインを作成してみます。&lt;br /&gt;&lt;br /&gt;１）呼び出し（html）側&lt;br /&gt;&lt;pre&gt;&amp;lt;head&gt;&lt;br /&gt;&amp;lt;script type="text/javascript" src="./js/jquery-1.4.2.js"&gt;&lt;br /&gt;&amp;lt;script type="text/javascript" src="./js/jquery.myplugin.js"&gt;&amp;lt;/script&gt;&lt;br /&gt;&amp;lt;/head&gt;&lt;br /&gt;&amp;lt;body&gt;&lt;br /&gt;&amp;lt;h1&gt;MYPLUGIN&amp;lt;/h1&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;input type="text" name="txt"&gt;&lt;br /&gt;&amp;lt;input type="button" name="btn" value="push"&gt;&lt;br /&gt;&lt;font color="steelblue"&gt;&amp;lt;!-- ここへ表示 --&gt;&lt;/font&gt;&lt;br /&gt;&amp;lt;div id="result"&gt;&amp;lt;/div&gt;&lt;br /&gt;&amp;lt;/body&gt;&lt;br /&gt;&amp;lt;/html&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&gt;&lt;br /&gt;$(function() {&lt;br /&gt;    &lt;font color="steelblue"&gt;// ボタンがクリックされたら&lt;/font&gt;&lt;br /&gt;    $("input[name=btn]").click(function() {&lt;br /&gt;        &lt;font color="steelblue"&gt;// id=resultへ時刻表示とテキストボックスの値をボタンへ表示させる&lt;/font&gt;&lt;br /&gt;        $("input[name=btn]").myplugin({dest:"result", value:$("input[name=tx]").val()});&lt;br /&gt;    });&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&gt;&lt;/pre&gt;こんな感じです。&lt;br /&gt;&lt;br /&gt;２）プラグイン（jquery）側&lt;br /&gt;&lt;pre&gt;(function($) {&lt;br /&gt;    var _option; &lt;font color="steelblue"&gt;// 値を保持するフィールド&lt;/font&gt;&lt;br /&gt;    var _dest;   &lt;font color="steelblue"&gt;// 時刻の表示先ID&lt;/font&gt;&lt;br /&gt;    var _value;  &lt;font color="steelblue"&gt;// テキストボックスの値&lt;/font&gt;&lt;br /&gt;    var _elem;   &lt;font color="steelblue"&gt;// ボタンエレメント&lt;/font&gt;&lt;br /&gt;    &lt;font color="steelblue"&gt;/**&lt;br /&gt;     * コンストラクタ的なもの&lt;br /&gt;     * option はhtml側から渡された引数オブジェクト&lt;br /&gt;     */&lt;/font&gt;&lt;br /&gt;    $.fn.increment = function(option) {&lt;br /&gt;            _option = $.extend({&lt;br /&gt;            _dest   : option.dest,  &lt;font color="steelblue"&gt;// 時刻表示先ID&lt;/font&gt;&lt;br /&gt;            _value  : option.value, &lt;font color="steelblue"&gt;// ボタン表示値&lt;/font&gt;&lt;br /&gt;            _elem   : this          &lt;font color="steelblue"&gt;// 表示させるボタンエレメント&lt;/font&gt;&lt;br /&gt;        }, option);&lt;br /&gt;&lt;br /&gt;        draw(); &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    function draw() {&lt;br /&gt;        &lt;font color="steelblue"&gt;// 日付を指定されたIDに表示させる&lt;/font&gt;&lt;br /&gt;        var date = new Date(); &lt;br /&gt;        $("#"+_option._dest).html(date.toGMTString());&lt;br /&gt;&lt;br /&gt;        &lt;font color="steelblue"&gt;// ボタンの表示を変更&lt;/font&gt;&lt;br /&gt;        _option._elem.val(_option._value);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}) (jQuery);&lt;/pre&gt;こうです。&lt;br /&gt;&lt;br /&gt;何となく理解できるでしょうか。。。&lt;br /&gt;ちょっと例が悪かったです、、実際にコードを書いて試してみて下さい。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇぇす(´・ω・｀)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-6921077623611437250?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/6921077623611437250/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=6921077623611437250&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6921077623611437250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6921077623611437250'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/05/jquery.html' title='jqueryで自作クラス（プラグイン）を作成する'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-5414009295054181189</id><published>2010-05-11T14:56:00.008+09:00</published><updated>2010-05-11T15:10:24.745+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>phpで「send of xx bytes failed with errno=32 Brokenpipe in xxxx」というエラーが出る</title><content type='html'>どうも、俺＠今日２度目の書込みです。&lt;br /&gt;さっき出ました。&lt;br /&gt;&lt;pre&gt;( ! ) Notice: fwrite() [function.fwrite]: send of 67 bytes failed with errno=32 Broken pipe in /usr/local/path/to/php/source/file.php on line 61&lt;/pre&gt;というエラー。&lt;br /&gt;&lt;br /&gt;該当箇所のソースは&lt;br /&gt;&lt;pre&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;written&lt;/font&gt; &lt;font color="yellow"&gt;=&lt;/font&gt; &lt;font color="aqua"&gt;fwrite&lt;/font&gt;&lt;font color="magenta"&gt;(&lt;/font&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;fp&lt;/font&gt;, &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;send_data&lt;/font&gt;&lt;font color="magenta"&gt;)&lt;/font&gt;;&lt;/pre&gt;です。&lt;br /&gt;&lt;br /&gt;どうやら、phpでソケット通信をする際に&lt;br /&gt;&lt;pre&gt; 1 &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;fp&lt;/font&gt; &lt;font color="yellow"&gt;=&lt;/font&gt; &lt;font color="aqua"&gt;fsockopen&lt;/font&gt;&lt;font color="magenta"&gt;(&lt;/font&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;host&lt;/font&gt;, &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;port&lt;/font&gt;&lt;font color="magenta"&gt;)&lt;/font&gt;;&lt;br /&gt; 2 &lt;font color="yellow"&gt;if&lt;/font&gt; &lt;font color="magenta"&gt;(&lt;/font&gt;&lt;font color="aqua"&gt;is_resource&lt;/font&gt;&lt;font color="magenta"&gt;(&lt;/font&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;fp&lt;/font&gt;&lt;font color="magenta"&gt;))&lt;/font&gt; &lt;font color="magenta"&gt;{&lt;/font&gt;&lt;br /&gt; 3     &lt;font color="aqua"&gt;fwrite&lt;/font&gt;&lt;font color="magenta"&gt;(&lt;/font&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;fp&lt;/font&gt;, &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;send_data&lt;/font&gt;&lt;font color="magenta"&gt;)&lt;/font&gt;;&lt;br /&gt; 4     &lt;font color="aqua"&gt;fclose&lt;/font&gt;&lt;font color="magenta"&gt;(&lt;/font&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;fp&lt;/font&gt;&lt;font color="magenta"&gt;)&lt;/font&gt;;&lt;br /&gt; 5 &lt;font color="magenta"&gt;}&lt;/font&gt;&lt;/pre&gt;という事をよくやるかと思いますが、3行目の時点で接続先サーバから切断された場合、上記のようなエラーが出るようです。&lt;br /&gt;この例で挙げたくらいのソースの実行速度で接続が切断されることは滅多にないと思います（というか防ぎようがない）が、一度接続したソケットポインタを使い回している場合などでは今回のエラーが発生する可能性がありますので、要注意(｀・ω・´)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上どぇぇぇぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-5414009295054181189?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/5414009295054181189/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=5414009295054181189&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/5414009295054181189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/5414009295054181189'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/05/phpsend-of-xx-bytes-failed-with-errno32.html' title='phpで「send of xx bytes failed with errno=32 Brokenpipe in xxxx」というエラーが出る'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-3262834414391904278</id><published>2010-05-11T11:49:00.003+09:00</published><updated>2010-05-11T12:06:19.045+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>httpd.confで HostnameLookups off が効かない</title><content type='html'>どうも俺＠仕事中です。&lt;br /&gt;今日はapacheの設定ファイルhttpd.confに&lt;br /&gt;&lt;pre&gt;HostnameLookups off&lt;/pre&gt;と書いているのにIP逆引きされてしまう場合の対処法について。&lt;br /&gt;&lt;br /&gt;解決法はズバリ、httpd.confや.htaccessまたはその他apacheの設定ファイルのどこかに&lt;br /&gt;&lt;pre&gt;allow from localhost&lt;/pre&gt;や&lt;pre&gt;allow from example.co.jp&lt;/pre&gt;などドメインを書いていたらそれを削除！です。&lt;br /&gt;&lt;br /&gt;または&lt;br /&gt;&lt;pre&gt;allow from 127.0.0.1 # localhost&lt;/pre&gt;などと同一行にコメントでドメインを書いている場合もそうみたいです。&lt;br /&gt;&lt;br /&gt;apacheのバージョンは2.2.8です。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ここに同じことが書かれてありました。&lt;br /&gt;&lt;a href="http://blog.dtpwiki.jp/dtp/2007/12/apachehostnamel_b43a.html"&gt;M.C.P.C.:APacheでHostnameLookups offでもログにホスト名が記録される場合&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;以上でえぇぇえぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-3262834414391904278?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/3262834414391904278/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=3262834414391904278&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3262834414391904278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3262834414391904278'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/05/httpdconf-hostnamelookups-off.html' title='httpd.confで HostnameLookups off が効かない'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-8926724443314685441</id><published>2010-04-22T17:09:00.009+09:00</published><updated>2010-04-23T10:43:41.843+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='open flash chart'/><title type='text'>OpenFlashChart(php ver5)をちょっとカスタマイズ</title><content type='html'>どうも、俺＠OpenFlashChartでグラフ作成中です。&lt;br /&gt;&lt;br /&gt;Flashを使ったキレイなグラフ作成ライブラリ&lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/"&gt;Open Flash Chart&lt;/a&gt;を使っています。&lt;br /&gt;pythonとかperlとかjspからも呼び出せて、キレイなグラフを描画してくれるのでかなり使えるやつです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;僕はphpを使ってるので、アーカイブを展開して「/php5-ofc-library」以下のファイルを使ってグラフを作っているのですが、どうもこれが未完成っぽい。&lt;br /&gt;未完成というより、「/php-ofc-library」以下にあるファイル（php4用）の方が色々充実しているみたいですね。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/stacked-bar-chart.php"&gt;積み上げ棒グラフ&lt;/a&gt;を作っているのですが、このサンプルにあるようにグラフ上部に凡例を出したいのに出せませんでした。&lt;br /&gt;※php4版ではすぐ出せました。&lt;br /&gt;&lt;br /&gt;というわけでphp5版の/OFC/Charts/Bar/OFC_Charts_Bar_Stack.phpをイジっちゃいましょう。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# vim /OFC/Charts/OFC_Charts_Bar.php&lt;br /&gt;// set_keys()メソッドを作成&lt;br /&gt;&lt;font color="magenta"&gt;function&lt;/font&gt; set_keys (&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;keys&lt;/font&gt;) &lt;font color="magenta"&gt;{&lt;/font&gt;&lt;br /&gt;  &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;this&lt;/font&gt;-&gt;keys = &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;keys&lt;/font&gt;;&lt;br /&gt;&lt;font color="magenta"&gt;}&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;# vim /OFC/Charts/Bar/OFC_Charts_Bar_Stack.php&lt;br /&gt;// OFC_Charts_Bar_Stack_Keyクラスを追加&lt;br /&gt;&lt;font color="green"&gt;class&lt;/font&gt; OFC_Charts_Bar_Stack_Key &lt;font color="magenta"&gt;{&lt;/font&gt;&lt;br /&gt;  &lt;font color="magenta"&gt;function&lt;/font&gt; OFC_Charts_Bar_Stack_Key(&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;color&lt;/font&gt;, &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;text&lt;/font&gt;, &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;font_size&lt;/font&gt;) &lt;font color="magenta"&gt;{&lt;/font&gt;&lt;br /&gt;    &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;this&lt;/font&gt;-&gt;colour = $&lt;font color="aqua"&gt;color&lt;/font&gt;;  // `colour`なことに注意&lt;br /&gt;    &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;this&lt;/font&gt;-&gt;text = $&lt;font color="aqua"&gt;text&lt;/font&gt;;&lt;br /&gt;    &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;this&lt;/font&gt;-&gt;font-size = $&lt;font color="aqua"&gt;font_size&lt;/font&gt;;&lt;br /&gt;  &lt;font color="magenta"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="magenta"&gt;}&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;呼び出し側では&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="magenta"&gt;&amp;lt;?php&lt;/font&gt;&lt;br /&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;bar_stack&lt;/font&gt; = &lt;font color="magenta"&gt;new&lt;/font&gt; OFC_Charts_Bar_Stack();&lt;br /&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;bar_stack&lt;/font&gt;-&gt;set_keys(&lt;br /&gt;  &lt;font color="green"&gt;array&lt;/font&gt; (&lt;br /&gt;    &lt;font color="magenta"&gt;new&lt;/font&gt; OFC_Charts_Bar_Stack_Key(&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;color&lt;/font&gt;, &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;text&lt;/font&gt;, &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;font_size&lt;/font&gt;),&lt;br /&gt;    &lt;font color="magenta"&gt;new&lt;/font&gt; OFC_Charts_Bar_Stack_Key(&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;color&lt;/font&gt;, &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;text&lt;/font&gt;, &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;font_size&lt;/font&gt;),&lt;br /&gt;    &lt;font color="magenta"&gt;new&lt;/font&gt; OFC_Charts_Bar_Stack_Key(&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;color&lt;/font&gt;, &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;text&lt;/font&gt;, &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;font_size&lt;/font&gt;)&lt;br /&gt;  )&lt;br /&gt;);&lt;/pre&gt;のようにしてやればOKです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;OpenFlashChart（php版）は、最後のtoString()メソッドやprettyString()メソッドでセットされた値を単にjson_encode()して吐き出しているだけ&lt;br /&gt;なので、どんな値をセットしてもjson形式でデータを出力してくれます。&lt;br /&gt;あとは、ライブラリに用意されているswfファイルが読み取ってFlashグラフを作成している、という訳です。&lt;br /&gt;&lt;br /&gt;ちゃんちゃん。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-8926724443314685441?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/8926724443314685441/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=8926724443314685441&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/8926724443314685441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/8926724443314685441'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/04/openflashchartphp-ver5.html' title='OpenFlashChart(php ver5)をちょっとカスタマイズ'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-3106246388295879950</id><published>2010-04-22T10:25:00.003+09:00</published><updated>2010-04-22T10:38:43.762+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>MySQLのデータをCSVで出力/入力</title><content type='html'>どうも、俺＠始業しましたです。&lt;br /&gt;&lt;br /&gt;ググればすぐ出てきますが、MySQLのデータを簡単にcsv（またはtsv）出力する方法のめもです。&lt;br /&gt;出力&lt;br /&gt;&lt;pre&gt;mysql&gt; SELECT * FROM table_name&lt;br /&gt;INTO OUTFILE "/tmp/out.csv"&lt;br /&gt;FIELDS TERMINATED BY ',';&lt;/pre&gt;これで、/tmp/out.csvというファイルに`table_name`テーブルのデータをカンマ区切りで出力できます。&lt;br /&gt;タブ区切りで、各項目を`"（ダブルクォート）`で囲む場合は、&lt;br /&gt;&lt;pre&gt;SELECT * FROM table_name&lt;br /&gt;INTO OUTFILE "/tmp/out.csv"&lt;br /&gt;FIELDS TERMINATED BY '\t'&lt;br /&gt;ENCLOSED BY '"';&lt;/pre&gt;と、ENCLOSED BY '"' を追加します。&lt;br /&gt;テーブルを結合した結果をcsv出力し、改行コードは`\r\n`にするには&lt;br /&gt;&lt;pre&gt;SELECT * FROM table_name&lt;br /&gt;INNER JOIN join_table ON table_name.f_key = join_table.id&lt;br /&gt;INTO OUTFILE "/tmp/out.csv"&lt;br /&gt;FIELDS TERMINATED BY '\t'&lt;br /&gt;ENCLOSED BY '"'&lt;br /&gt;LINES TERMINATED BY '\r\n';&lt;/pre&gt;と、LINES TERMINATED BY '\r\n'を追加します。&lt;br /&gt;&lt;br /&gt;次にデータを入力する方法です。&lt;br /&gt;これはmysqldumpで取得したデータをリストアするより高速に動作します。（たぶん）&lt;br /&gt;&lt;pre&gt;mysql&gt; LOAD DATA INFILE "/tmp/in.csv"&lt;br /&gt;FIELDS TERMINATED BY ',';&lt;/pre&gt;&lt;br /&gt;もちろんタブ区切りの場合は、&lt;br /&gt;&lt;pre&gt;LOAD DATA INFILE "/tmp/in.csv"&lt;br /&gt;FIELDS TERMINATED BY '\t';&lt;/pre&gt;になります。&lt;br /&gt;ダブルクォートや改行コードを指定してインポートする場合も、INTO OUTFILE構文のと同様です。&lt;br /&gt;&lt;br /&gt;ただ、クライアントマシンとMySQLマシンが別サーバで接続されている場合は、&lt;br /&gt;&lt;pre&gt;mysql&gt; LOAD DATA LOCAL INFILE "/tmp/in.csv"&lt;br /&gt;FIELDS TERMINATED BY ',';&lt;/pre&gt;と、`LOCAL`キーワードを指定します。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.1/ja/select.html"&gt;出力する方法&lt;/a&gt;&lt;br /&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.1/ja/load-data.html"&gt;入力する方法&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇぇえぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-3106246388295879950?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/3106246388295879950/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=3106246388295879950&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3106246388295879950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3106246388295879950'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/04/mysqlcsv.html' title='MySQLのデータをCSVで出力/入力'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-8223757722696102892</id><published>2010-04-06T23:27:00.003+09:00</published><updated>2010-04-06T23:55:17.723+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ZendFramework'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Zend_Db_Selectの便利な使い方</title><content type='html'>どうも、俺＠風呂上りです。&lt;br /&gt;&lt;br /&gt;今日はZend Frameworkで用意されているZend_Db_Selectクラスを使った便利な方法をメモします。&lt;br /&gt;ま、&lt;a href="http://framework.zend.com/manual/ja/zend.db.select.html"&gt;ZendFrameworkの公式&lt;/a&gt;にあるので、そちらを参考に！&lt;br /&gt;&lt;br /&gt;Zend Frameworkのコンポーネント達はそのフレームワークを利用せずとも、組み込めるように作られているので、そういう使い方もできますよ(´・ω・｀)&lt;br /&gt;&lt;br /&gt;インスタンスの生成は、&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$select = new Zend_Db_Select(Zend_Db_Adapter $db);&lt;/pre&gt;これでZend_Db_Selectのインスタンスが生成されます。&lt;br /&gt;&lt;br /&gt;Where句は、&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$select-&gt;where("id = ?", $id_param, Zend_Db::INT_TYPE);&lt;br /&gt;// WHERE id=$id_param&lt;/pre&gt;で作れます。&lt;br /&gt;続けて書けば、&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$select-&gt;where("id = ?", $id_param, Zend_Db::INT_TYPE);&lt;br /&gt;$select-&gt;where("name = ?", $name_param);&lt;br /&gt;// WHERE id=$id_param AND name='$name_param'&lt;/pre&gt;のようになり、&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$select-&gt;where("id = ?", $id_param, Zend_Db::INT_TYPE);&lt;br /&gt;$select-&gt;orWhere("name = ?", $name_param);&lt;br /&gt;// WHERE id=$id_param OR name='$name_param'&lt;/pre&gt;になります。&lt;br /&gt;&lt;br /&gt;Order by句は、&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$select-&gt;order("id");&lt;br /&gt;// ORDER BY id&lt;/pre&gt;や&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$select-&gt;order("id DESC");&lt;br /&gt;// ORDER BY id DESC&lt;/pre&gt;になります。&lt;br /&gt;&lt;br /&gt;Limit Offset句は、&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$select-&gt;limit(30, 10);&lt;br /&gt;// LIMIT 30 OFFSET 10 または LIMIT 30, 10&lt;/pre&gt;でできます。&lt;br /&gt;&lt;br /&gt;Group by句は、&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$select-&gt;group("id");&lt;br /&gt;// GROUP BY id&lt;/pre&gt;です。&lt;br /&gt;&lt;br /&gt;で、ここがとても感動したポイントですが、取得したカラムやテーブルの指定する方法は、&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$select-&gt;from("foo_table");&lt;br /&gt;// SELECT * FROM foo_table&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$select-&gt;from(array("foo" =&gt; "foo_table"), "id");&lt;br /&gt;// SELECT foo.id FROM foo_table AS foo&lt;/pre&gt;となるのです(´・ω・｀)&lt;br /&gt;カラムにエイリアス（別名）をつける場合は、&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$select-&gt;from(array("foo" =&gt; "foo_table"), array("id_aliase" =&gt; "id"));&lt;br /&gt;// SELECT foo.id AS id_aliase FROM foo_table AS foo&lt;/pre&gt;です。&lt;br /&gt;途中でカラムを追加するには、&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$select-&gt;from(array("foo" =&gt; "foo_table"), array("id_aliase" =&gt; "id"));&lt;br /&gt;$select-&gt;columns("name", "name_aliase");&lt;br /&gt;// SELECT foo.id AS id_aliase, foo.name AS name_aliase FROM foo_table AS foo&lt;/pre&gt;です。&lt;br /&gt;一気に大量のカラムを書きたい場合は、&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$select-&gt;from(array("foo" =&gt; "foo_table"), array("id", "name", "birthday", "address",....));&lt;/pre&gt;のようにします。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ということは、これらをまとめると、&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$select = new Zend_Db_Select(Zend_Db_Adapter $db);&lt;br /&gt;$select-&gt;from(array("foo" =&gt; "foo_table"), array("id", "name"));&lt;br /&gt;$select-&gt;where("id IN (". implode(",", $id_list).")");&lt;br /&gt;$select-&gt;order("id DESC");&lt;br /&gt;$select-&gt;limit(30, 10);&lt;br /&gt;// SELECT foo.id, foo.name FROM foo_table AS foo WHERE id IN (x,x,x,x,x) ORDER BY id DESC LIMIT 30 OFFSET 10;&lt;/pre&gt;のようになるわけです。&lt;br /&gt;&lt;br /&gt;これにZend_Db_Adapterを利用して、&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$result_set = $db-&gt;fetchAll($select);&lt;/pre&gt;とかやると、一発で配列でデータを取得できたり、&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$stmt = $db-&gt;query($select);&lt;br /&gt;while ($rs = $stmt-&gt;fetch()) {&lt;br /&gt;    // 処理&lt;br /&gt;}&lt;/pre&gt;のように1レコードずつデータ処理を行ったりできます。&lt;br /&gt;&lt;br /&gt;ちなみに、クエリ文字列を取得するには、&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$query = $select-&gt;__toString();&lt;/pre&gt;でできますし、Where句だけ取りたいという場合は&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$wheres = $select-&gt;getPart(Zend_Db_Select::WHERE);&lt;br /&gt;// where句すべてを配列で取得できるのであとで、implode()とかやれば使える&lt;/pre&gt;で取れます。&lt;br /&gt;&lt;br /&gt;いやぁ、超便利ーー(´・ω・｀)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-8223757722696102892?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/8223757722696102892/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=8223757722696102892&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/8223757722696102892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/8223757722696102892'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/04/zenddbselect.html' title='Zend_Db_Selectの便利な使い方'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-6355648742039266162</id><published>2010-03-12T14:04:00.002+09:00</published><updated>2010-03-12T14:11:01.880+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>今さらながらdigの使い方</title><content type='html'>こんにちわ、おれ＠花金仕事中です。&lt;br /&gt;ウキウキしますねー。&lt;br /&gt;&lt;br /&gt;今日はLinuxの「dig」コマンドについてメモです。&lt;br /&gt;digコマンドは、DNSの正引き逆引きを行う超便利コマンドです。&lt;br /&gt;&lt;br /&gt;例えばgoogle.co.jpの正引きをするには、&lt;br /&gt;&lt;pre&gt;shell&gt; dig google.co.jp&lt;br /&gt;&lt;br /&gt;; &lt;&lt;&gt;&gt; DiG 9.2.4 &lt;&lt;&gt;&gt; google.co.jp&lt;br /&gt;;; global options:  printcmd&lt;br /&gt;;; Got answer:&lt;br /&gt;;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 38283&lt;br /&gt;;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0&lt;br /&gt;&lt;br /&gt;;; QUESTION SECTION:&lt;br /&gt;;google.co.jp.                  IN      A&lt;br /&gt;&lt;br /&gt;;; ANSWER SECTION:&lt;br /&gt;google.co.jp.           1800    IN      A       72.14.203.104&lt;br /&gt;google.co.jp.           1800    IN      A       74.125.95.104&lt;br /&gt;google.co.jp.           1800    IN      A       74.125.91.104&lt;br /&gt;&lt;br /&gt;;; Query time: 63 msec&lt;br /&gt;;; SERVER: 192.168.60.1#53(192.168.60.1)&lt;br /&gt;;; WHEN: Fri Mar 12 14:06:35 2010&lt;br /&gt;;; MSG SIZE  rcvd: 78&lt;/pre&gt;こんな感じです。&lt;br /&gt;この「ANSWER SECTION」セクション内を見て&lt;br /&gt;google.co.jpは、&lt;br /&gt;72.14.203.104&lt;br /&gt;74.125.95.104&lt;br /&gt;74.125.91.104にヒモ付られているという事が分かります。&lt;br /&gt;&lt;br /&gt;逆引きをする場合は「-x」オプションを付けます。&lt;br /&gt;&lt;pre&gt;shell&gt; dig -x 74.125.91.104&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;MXレコードやNSレコードを調べる場合は、&lt;br /&gt;&lt;pre&gt;shell&gt; dig google.co.jp mx&lt;/pre&gt;のようにtypeを指定します。&lt;br /&gt;またネームサーバを指定する場合は、&lt;br /&gt;&lt;pre&gt;shell&gt; dig @a.dns.jp google.co.jp&lt;/pre&gt;のように「＠（アットマーク）ネームサーバ」を指定します。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上、でぇぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-6355648742039266162?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/6355648742039266162/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=6355648742039266162&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6355648742039266162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6355648742039266162'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/03/dig.html' title='今さらながらdigの使い方'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-6146712656781886878</id><published>2010-03-05T12:18:00.003+09:00</published><updated>2010-03-05T12:29:31.364+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><title type='text'>rubyでASCII-8BIT～のエラーがでる</title><content type='html'>どうも、俺＠仕事モヤモヤ中です。&lt;br /&gt;&lt;br /&gt;rubyでWEBアプリを作っている（僕の環境の場合はUTF-8のアプリ）と&lt;br /&gt;&lt;pre&gt;incompatible character encodings: ASCII-8BIT and UTF-8&lt;/pre&gt;とか&lt;br /&gt;&lt;pre&gt;"\\xE3" from ASCII-8BIT to UTF-8...&lt;br /&gt;Encoding::UndefinedConversionError&lt;/pre&gt;みたいなエラーが大量発生して泣きそうになっていました。&lt;br /&gt;&lt;br /&gt;ログの通り、文字コードに関するエラーなのですが、だいたい&lt;br /&gt;&lt;pre&gt;String.force_encoding("UTF-8")&lt;/pre&gt;で回避できます。&lt;br /&gt;&lt;br /&gt;特に僕の場合は、sqlite3を使っていたのですが、&lt;br /&gt;ruby-sqlite3モジュールでは、取得データを全てASCII－８BITで保持する実装になっているようで、&lt;br /&gt;&lt;a href="http://rubyist.g.hatena.ne.jp/edvakf/20090510/1241982054"&gt;Rubyで遊ぶよ　Rubyのsqlite3-rubyは必ず文字コードASCII-8BITとして返す&lt;/a&gt;&lt;br /&gt;ASCIIなバイト文字列をUTF-8にする際におかしなコードに引っかかっちゃってる系でエラーが出るようです。&lt;br /&gt;&lt;br /&gt;ruby-sqlite3の場合は、取得したデータをことごとく .force_encoding("UTF-8")すれば何とかなります。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ちなみに、rubyで文字コード対策としてマジックコメントというものがあります。&lt;br /&gt;&lt;pre&gt;#!/usr/local/bin/ruby&lt;br /&gt;# -*- coding: utf-8 -*-&lt;/pre&gt;とすれば、文字コードを判別して出力してくれます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上どえぇぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-6146712656781886878?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/6146712656781886878/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=6146712656781886878&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6146712656781886878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6146712656781886878'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/03/rubyascii-8bit.html' title='rubyでASCII-8BIT～のエラーがでる'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-1044898007428378365</id><published>2010-03-02T15:30:00.002+09:00</published><updated>2010-03-02T15:35:14.328+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>MySQL 実行中のスレッドをリアルタイム表示</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;&lt;br /&gt;今日はMySQLで実行中のスレッドを表示するコマンドの紹介です。&lt;br /&gt;&lt;pre&gt;mysql&gt; show processlist;&lt;br /&gt;+---------+-------+-------------------+---------+---------+------+-------+------------------+&lt;br /&gt;| Id      | User  | Host              | db      | Command | Time | State | Info             |&lt;br /&gt;+---------+-------+-------------------+---------+---------+------+-------+------------------+&lt;br /&gt;| 4416652 | mysql | xx.xxx.x.xx:54924 | dbname  | Sleep   |  361 |       | NULL             | &lt;br /&gt;| 4470098 | mysql | xx.xxx.x.xx:35214 | dbname  | Sleep   |    6 |       | NULL             | &lt;br /&gt;| 4470608 | root  | localhost         | NULL    | Query   |    0 | NULL  | show processlist | &lt;br /&gt;+---------+-------+-------------------+---------+---------+------+-------+------------------+&lt;br /&gt;&lt;/pre&gt;です。&lt;br /&gt;&lt;br /&gt;詳しくは、&lt;a href="http://dev.mysql.com/doc/refman/5.1/ja/show-processlist.html"&gt;My SQL 5.1 リファレンスマニュアル&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-1044898007428378365?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/1044898007428378365/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=1044898007428378365&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1044898007428378365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1044898007428378365'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/03/mysql.html' title='MySQL 実行中のスレッドをリアルタイム表示'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-6703067843646716800</id><published>2010-03-01T13:49:00.003+09:00</published><updated>2010-03-19T14:32:59.876+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>MySQLで「Too many connections」のエラー</title><content type='html'>どうも、俺＠週明け仕事中です。&lt;br /&gt;&lt;br /&gt;週末、とあるシステムでMySQLの「Too many connections」が多発する障害が発生しました。&lt;br /&gt;その時調べたメモです。&lt;br /&gt;&lt;br /&gt;このエラーは、「コネクションの数が多すぎてもう接続できないよー」というものです。&lt;br /&gt;MySQLの設定は&lt;br /&gt;&lt;pre&gt;mysql&gt; show global variables like '%max_connection%';&lt;br /&gt;+-----------------+-------+&lt;br /&gt;| Variable_name   | Value |&lt;br /&gt;+-----------------+-------+&lt;br /&gt;| max_connections | 100   | &lt;br /&gt;+-----------------+-------+&lt;/pre&gt;という状態です。&lt;br /&gt;デフォルト値が「100」なのだそうで、まず単純にコネクション最大数を増やします。&lt;br /&gt;&lt;pre&gt;mysql&gt; set global max_connections = 256;&lt;/pre&gt;コネクション数が増えるので、CPU負荷とメモリ使用量に注意が必要です。&lt;br /&gt;&lt;br /&gt;他に注目すべきは、&lt;br /&gt;&lt;pre&gt;mysql&gt; show status like '%threads_%';&lt;br /&gt;+------------------------+--------+&lt;br /&gt;| Variable_name          | Value  |&lt;br /&gt;+------------------------+--------+&lt;br /&gt;| Threads_cached         | 6      | &lt;br /&gt;| Threads_connected      | 4      | &lt;br /&gt;| Threads_created        | 140909 | &lt;br /&gt;| Threads_running        | 3      | &lt;br /&gt;+------------------------+--------+&lt;/pre&gt;うわー！エラいことなっとる！&lt;br /&gt;ここの項目の見方は、&lt;br /&gt;Threads_cached ... スレッドキャッシュでキャッシュされているスレッドの数。&lt;br /&gt;Threads_connected ... 現在生成されているスレッドの数。&lt;br /&gt;Threads_created ... 起動してから生成されたスレッドの数。この値が大きい場合はthread_cache_sizeの値を大きくした方が良いかも。&lt;br /&gt;Threads_running ... 現在動作中のスレッド数。&lt;br /&gt;&lt;br /&gt;と言うわけで、今回の件ではthread_cache_sizeの値を増やしておきます。&lt;br /&gt;&lt;pre&gt;mysql&gt; set global thread_cache_size = 64;&lt;/pre&gt;と、共にwait_timeoutの状況をチェック。&lt;br /&gt;&lt;pre&gt;mysql&gt; show global variables like 'wait_timeout%';&lt;br /&gt;+--------------------------+-------+&lt;br /&gt;| Variable_name            | Value |&lt;br /&gt;+--------------------------+-------+ &lt;br /&gt;| wait_timeout             | 28800 | &lt;br /&gt;+--------------------------+-------+&lt;/pre&gt;28800秒、つまり8時間に設定されているので、もう少し縮めて起きます。&lt;br /&gt;&lt;pre&gt;mysql&gt; set global wait_timeout = 3600;&lt;/pre&gt;1時間にしました。&lt;br /&gt;wait_timeoutは接続があってスレッドが生成され待機状態（アイドル状態）になって○秒経過したら接続を切るというもの。&lt;br /&gt;mysql_pconnect()やPDOでの持続的接続とかでも、wait_timeout秒数経過すると切断されます。（と、思う、、）&lt;br /&gt;ちなみに、wait_timeouをmy.cnfに設定する場合は、&lt;br /&gt;&lt;pre&gt;# vim /etc/my.cnf&lt;br /&gt;set-variable = wait_timeout = 3600&lt;/pre&gt;のようにするらしい。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;また経過監視します。以上どぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-6703067843646716800?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/6703067843646716800/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=6703067843646716800&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6703067843646716800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6703067843646716800'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/03/blog-post.html' title='MySQLで「Too many connections」のエラー'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-5553705203164678467</id><published>2010-02-25T11:31:00.008+09:00</published><updated>2010-02-25T12:52:19.215+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>[java]logback+slf4jでロギング</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;今日はlogbackを使ってログを取得する方法をメモします。&lt;br /&gt;※OS：CentOS 4.3&lt;br /&gt;※java：1.6.0_18&lt;br /&gt;&lt;br /&gt;ライブラリを以下から取得。&lt;br /&gt;Logback：http://logback.qos.ch/&lt;br /&gt;SLF4ｊ：http://www.slf4j.org/&lt;br /&gt;&lt;br /&gt;ダウンロードしたアーカイブを解凍して、&lt;br /&gt;slf4j-api-1.5.10.jar&lt;br /&gt;logback-core-0.9.18.jar&lt;br /&gt;logback-classic-0.9.18.jar&lt;br /&gt;をjavaのCLASSPATHに通します。&lt;br /&gt;&lt;br /&gt;では、サンプルソース。&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="fuchsia"&gt;import&lt;/font&gt; org.slf4.Logger;&lt;br /&gt;&lt;font color="fuchsia"&gt;import&lt;/font&gt; org.slf4j.LoggerFactory;&lt;br /&gt;&lt;br /&gt;&lt;font color="green"&gt;public class&lt;/font&gt; LogSample {&lt;br /&gt;    &lt;font color="green"&gt;private static&lt;/font&gt; Logger logger = LoggerFactory.getLogger(LogSample.class);&lt;br /&gt;&lt;br /&gt;    &lt;font color="green"&gt;public static&lt;/font&gt; void main(String[] args) {&lt;br /&gt;        logger.info(&lt;font color="red"&gt;"INFO"&lt;/font&gt;);&lt;br /&gt;        logger.debug(&lt;font color="red"&gt;"DEBUG"&lt;/font&gt;);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;で、設定ファイル（logback.xml）を作成します。これもCLASSPATHの通ったディレクトリへ設置します。&lt;br /&gt;&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8" ?&gt;&lt;br /&gt;&amp;lt;configuration&gt;&lt;br /&gt;  &amp;lt;!-- ファイル出力 --&gt;&lt;br /&gt;  &amp;lt;appender name="FILE_OUT" classs="ch.qos.logback.core.rolling.RollingFileAppender"&gt;&lt;br /&gt;    &amp;lt;File&gt;sample.log&amp;lt;/File&gt;&lt;br /&gt;    &amp;lt;layout class="ch.qos.logback.classic.PatternLayout"&gt;&lt;br /&gt;      &amp;lt;pattern&gt;%d{yyyy/MM/dd HH:mm:ss} %-5level [%thread] %class{0} %line : %msg %n&amp;lt;/pattern&gt;&lt;br /&gt;    &amp;lt;/layout&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;!-- 日付でローテート --&gt;&lt;br /&gt;    &amp;lt;rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"&gt;&lt;br /&gt;      &amp;lt;FileNamePattern&gt;sample.%d{yyyy_MM_dd}.log&amp;lt;/FileNamePattern&gt;&lt;br /&gt;    &amp;lt;/rollingPolicy&gt;&lt;br /&gt;  &amp;lt;/appender&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="steelblue"&gt;&lt;br /&gt;&lt;br /&gt;#    &amp;lt;!-- ファイルサイズでローテート --&gt;&lt;br /&gt;#    &amp;lt;appenderclass="ch.qos.logback.core.rolling.RollingFileAppender"&gt;&lt;br /&gt;#      &amp;lt;File&gt;sample.log&amp;lt;/File&gt;&lt;br /&gt;#    &amp;lt;layout class="ch.qos.logback.classic.PatternLayout"&gt;&lt;br /&gt;#      &amp;lt;pattern&gt;%d{yyyy/MM/dd HH:mm:ss} %-5level [%thread] %class{0} %line : %msg %n&amp;lt;/pattern&gt;&lt;br /&gt;#    &amp;lt;/layout&gt;&lt;br /&gt;#      &amp;lt;rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"&gt;&lt;br /&gt;#        &amp;lt;FileNamePattern&gt;sample.log.%i&amp;lt;/FileNamePattern&gt;&lt;br /&gt;#        &amp;lt;MinIndex&gt;1&amp;lt;/MinIndex&gt;&lt;br /&gt;#        &amp;lt;MaxIndex&gt;10&amp;lt;/MaxIndex&gt;&lt;br /&gt;#      &amp;lt;/rollingPolicy&gt;&lt;br /&gt;#      &amp;lt;triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"&gt;&lt;br /&gt;#        &amp;lt;MaxFileSize&gt;512MB&amp;lt;/MaxFileSize&gt;&lt;br /&gt;#      &amp;lt;/triggeringPolicy&gt;&lt;br /&gt;#    &amp;lt;/rollingPolicy&gt;&lt;br /&gt;#  &amp;lt;/appender&gt;&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;logger name="com.blogger.koexuka.app"&gt;&lt;br /&gt;      &amp;lt;level value="warn" /&gt;&lt;br /&gt;      &amp;lt;appender-ref ref="FILE_OUT" /&gt;&lt;br /&gt;    &amp;lt;/logger&gt;&lt;br /&gt;&lt;/pre&gt;以上どぇぇーす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-5553705203164678467?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/5553705203164678467/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=5553705203164678467&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/5553705203164678467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/5553705203164678467'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/02/javalogbackslf4j.html' title='[java]logback+slf4jでロギング'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-849269052032189545</id><published>2010-01-29T17:33:00.008+09:00</published><updated>2010-01-29T17:42:34.328+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ZendFramework'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Zend_Db_Table_Row::refresh()について</title><content type='html'>どうも、俺＠仕事中＠スノボ前です。&lt;br /&gt;&lt;br /&gt;今日久しぶりにZend_Framework案件でソース書いてて、抽象クラスZend_Db_Table_Row_Abstractの&lt;br /&gt;&lt;pre&gt;&lt;font color="green"&gt;protected&lt;/font&gt; &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;_cleanData&lt;/font&gt;&lt;br /&gt;&lt;font color="green"&gt;protected&lt;/font&gt; &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;_data&lt;/font&gt;&lt;/pre&gt;って「これわな～に？おいしいの？」と思ってました。&lt;br /&gt;&lt;br /&gt;オブジェクトに値をセットしてvar_dump($zend_db_table_row)してみると、両方のフィールドに同じ値がセットされています。&lt;br /&gt;公式にも詳しい説明がなかったのですが、&lt;br /&gt;どうやらこれは、DBからSELECTしてきたデータは「$_creanData」に、後でセットした値が「$_data」に入っているようです。&lt;br /&gt;で、&lt;br /&gt;&lt;pre&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;zend_db_table_row&lt;/font&gt;&lt;font color="yellow"&gt;-&gt;&lt;/font&gt;refresh()&lt;/pre&gt;メソッドを使ってrefresh()すると、$_dataフィールの値がリセットされて$_cleanDataになりました！&lt;br /&gt;&lt;br /&gt;つまり、フォームからユーザがデータを入力してエラーチェックした結果、エラーが存在して元に値に戻したいとき、refresh()メソッドで値を元に戻せちゃいます。&lt;br /&gt;なんて便利な！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上、どえぇぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-849269052032189545?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/849269052032189545/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=849269052032189545&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/849269052032189545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/849269052032189545'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/01/zenddbtablerowrefresh.html' title='Zend_Db_Table_Row::refresh()について'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-1316967377889483338</id><published>2010-01-23T14:29:00.007+09:00</published><updated>2010-01-23T15:25:36.654+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><title type='text'>rubyでロジックとビューの分離</title><content type='html'>どうも、俺＠rubyはじめました、です。&lt;br /&gt;Web系の仕事してて、これだけ「ruby」という単語を目にすることが多く「Ruby on railsを真似たフレームワークが・・」と耳にするのでちょっとカジっとかないと、という訳ではじめましたruby。&lt;br /&gt;個人的に「phpとperlとjavaしか知りません」だと対外的に格好つかないかなと思ったわけです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;で、まだまだ勉強し始めなのですが、&lt;br /&gt;WEBアプリを作る際にruby（RoRではない）でロジックとビューを分ける方法について。&lt;br /&gt;例えばphpでは、&lt;br /&gt;&lt;pre&gt;// ロジック側（logic.php）&lt;br /&gt;&amp;lt;?php&lt;br /&gt;$a = "foo";&lt;br /&gt;$b = "bar";&lt;br /&gt;&lt;br /&gt;require "view.tpl.php";&lt;/pre&gt;とロジックを書いておけば、ビューでは&lt;br /&gt;&lt;pre&gt;// ビュー側（view.tpl.php）&lt;br /&gt;&amp;lt;html&gt;&lt;br /&gt;&amp;lt;body&gt;&lt;br /&gt;$aの値は&lt;?=$a?&gt;です。&lt;br /&gt;$bの値は&lt;?=$b?&gt;です。&lt;/pre&gt;とできます。&lt;br /&gt;&lt;br /&gt;同じようなことをrubyでやるには、&lt;br /&gt;１）ヒアドキュメントを使う&lt;br /&gt;&lt;pre&gt;// ロジック側（logic.rb）&lt;br /&gt;a = "foo"&lt;br /&gt;b = "bar"&lt;br /&gt;&lt;br /&gt;print "Content-type:text/html\n\n"&lt;br /&gt;&lt;br /&gt;print &amp;lt;&amp;lt;__HTML_END__&lt;br /&gt;"&amp;lt;html&gt;&lt;br /&gt;&amp;lt;body&gt;&lt;br /&gt;$aの値は" + a + "です。&lt;br /&gt;$bの値は" + b + "です。"&lt;br /&gt;__HTML_END__&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;２）ERBを使う&lt;br /&gt;&lt;pre&gt;// ロジック側（logic.rb）&lt;br /&gt;require "erb"&lt;br /&gt;&lt;br /&gt;print "Content-type:text/html\n\n"&lt;br /&gt;&lt;br /&gt;a = "foo"&lt;br /&gt;b = "bar"&lt;br /&gt;tplFile = "view.tpl.html"&lt;br /&gt;erb = ERB.new(File.read(tplFile))&lt;br /&gt;erb.run&lt;/pre&gt;としてビュー側で&lt;br /&gt;&lt;pre&gt;// ビュー側（view.tpl.html）&lt;br /&gt;&amp;lt;html&gt;&lt;br /&gt;&amp;lt;body&gt;&lt;br /&gt;aの値は&amp;lt;%=a%&gt;です。&lt;br /&gt;bの値は&amp;lt;%=b%&gt;です。&lt;/pre&gt;とやります。&lt;br /&gt;&lt;br /&gt;というか、もっとスマートな方法あれば教えてください！&lt;br /&gt;もっと勉強します。。&lt;br /&gt;&lt;br /&gt;以上っっっっです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-1316967377889483338?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/1316967377889483338/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=1316967377889483338&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1316967377889483338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1316967377889483338'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/01/ruby.html' title='rubyでロジックとビューの分離'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-6622148081052225597</id><published>2010-01-21T17:42:00.003+09:00</published><updated>2010-01-21T17:46:42.676+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>vimで画面分割を移動する</title><content type='html'>どうも、俺＠仕事もうちょいです。&lt;br /&gt;今日はvimで画面分割して右にあるものを左へ、左へあるものを右へ、&lt;br /&gt;または上にあるものを下へ、上にあるものを右へ左へなどやる方法についてです。&lt;br /&gt;&lt;br /&gt;上下分割&lt;br /&gt;&lt;pre&gt;:sp&lt;/pre&gt;&lt;br /&gt;ファイルを指定して上下分割&lt;br /&gt;&lt;pre&gt;:sp [filename]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;左右分割&lt;br /&gt;&lt;pre&gt;:vsp&lt;/pre&gt;&lt;br /&gt;ファイルを指定して左右分割&lt;br /&gt;&lt;pre&gt;:vsp [filename]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;右の画面を左へ&lt;br /&gt;（右側の画面にフォーカスを合わせた状態で）&lt;br /&gt;&lt;pre&gt;Ctrl+w L&lt;/pre&gt;&lt;br /&gt;上の画面を下へ&lt;br /&gt;（上側の画面にフォーカスを合わせた状態で）&lt;br /&gt;&lt;pre&gt;Ctrl+w J&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;つまり画面を移動させるには、Ctrl+w　＆　viのキーバインドでOKなのです。&lt;br /&gt;H（左）J（下）K（上）L（右）&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-6622148081052225597?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/6622148081052225597/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=6622148081052225597&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6622148081052225597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6622148081052225597'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/01/vim.html' title='vimで画面分割を移動する'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-2760386847415116747</id><published>2010-01-19T12:21:00.002+09:00</published><updated>2010-01-19T13:01:17.615+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>apacheのRewriteEngine設定</title><content type='html'>こんにちわ、俺＠仕事中です。&lt;br /&gt;暇なんじゃないですよ。&lt;br /&gt;&lt;br /&gt;今日はApache（2.0.59）のRewrite設定でハマったのでメモメモ。&lt;br /&gt;&lt;br /&gt;Rewriteを有効にするには、apacheをインストールする時のconfigureオプションに&lt;br /&gt;&lt;pre&gt;--enable-rewrite&lt;/pre&gt;をつけてmakeし、&lt;br /&gt;httpd.conf（または.htaccess）に&lt;br /&gt;&lt;pre&gt;RewriteEngine On&lt;/pre&gt;を書きます。&lt;br /&gt;&lt;br /&gt;その後で「RewriteCond」と「RewriteRule」を書いてリダイレクトさせる条件やリダイレクト先などを書きます。&lt;br /&gt;&lt;pre&gt;RewriteCond [値] [条件]&lt;br /&gt;RewriteRule [URL正規表現] [Rewrite変換後]&lt;/pre&gt;RewriteCondは「ある条件を満たした場合にRewriteRuleを適用させる」という事をします。&lt;br /&gt;例えばUser-AgentにDoCoMoが含まれていた場合に、http://foo.com/val_a/val_b を http://foo.com?a=val_a&amp;b=val_bにRewriteさせるには、&lt;br /&gt;&lt;pre&gt;RewriteEngine On&lt;br /&gt;RewriteCond ${HTTP_USER_AGENT} DoCoMo&lt;br /&gt;RewriteRule /(.*)/(.*) ?a=$1&amp;b=$2&lt;/pre&gt;こんな感じです。（※未検証）&lt;br /&gt;&lt;br /&gt;${HTTP_USER_AGENT}のように、利用できる環境変数は他にも&lt;br /&gt;&lt;pre&gt;${HTTP_REFERER} ${HTTP_HOST} ${REMOTE_ADDR} ${SCRIPT_FILENAME} ${QUERY_STRING}&lt;/pre&gt;などなど多くあります。&lt;br /&gt;&lt;br /&gt;一般的にRewriteは&lt;br /&gt;http://foo.com/val_a/val_b/ というURLを http://foo.com/?a=val_a&amp;b=val_bというURLに書き換えるために利用される事が多い（SEO対策など）のですが、今回ハマったのが&lt;br /&gt;http://foo.com/val_a/?b=val_b というURLを http://foo.com?a=val_a&amp;b=val_bというURLに書き換えようとした時です。&lt;br /&gt;単純に、&lt;br /&gt;&lt;pre&gt;RewriteRule ^/(.*)/\?b=(.*) /$1/$2&lt;/pre&gt;のようにしたのですが全く反映されません。&lt;br /&gt;Rewriteログを取るために&lt;br /&gt;&lt;pre&gt;RewriteLog logs/rewrite_log&lt;br /&gt;RewriteLogLevel 3&lt;/pre&gt;とかやって見たのですが全然分かりませんでした。&lt;br /&gt;&lt;br /&gt;Rewirteは「？（クエスチョンマーク）」がURL中にあると、それ以降をQuery_Stringとしてちょん切ってしまうので、「？（クエスチョンマーク）」以降のURLは解釈されないようなのです。&lt;br /&gt;というので、上記のRewriteの場合は&lt;br /&gt;&lt;pre&gt;RewriteRule ^/(.*)/(.*) /?a=$1&amp;${QUERY_STRING}&lt;/pre&gt;として何とか対応しました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;いやー面倒でしたー。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-2760386847415116747?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/2760386847415116747/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=2760386847415116747&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/2760386847415116747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/2760386847415116747'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/01/apacherewriteengine.html' title='apacheのRewriteEngine設定'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-32990636313957434</id><published>2010-01-12T12:39:00.002+09:00</published><updated>2010-01-12T12:47:23.563+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>findコマンドで特定のファイル(ディレクトリ)を除外する</title><content type='html'>明けましておめでとう御座います。俺＠仕事中です。&lt;br /&gt;もう成人式も終わりましたね。&lt;br /&gt;&lt;br /&gt;さて今日は、「find」コマンドで特定のファイルやディレクトリを除外して検索する方法についてメモです。&lt;br /&gt;&lt;br /&gt;・自分のホームディレクトリ以下で、「/data」という名前のディレクトリは除外してファイルタイプがシンボリックリンクのものを探す。&lt;br /&gt;&lt;pre&gt;$ find ~/ -name data -prune -o -type l&lt;/pre&gt;ここに出てくる「-prune」というのが「除外する」というオプションです。&lt;br /&gt;１）-name data 「data」という名前のファイル（ディレクトリ）は除外&lt;br /&gt;２）-o または（-or と同意味）&lt;br /&gt;３）-type l シンボリックリンク&lt;br /&gt;という検索になります。&lt;br /&gt;&lt;br /&gt;-prune -o をセットでオプションに付けなければ意味がありません。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でーーす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-32990636313957434?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/32990636313957434/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=32990636313957434&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/32990636313957434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/32990636313957434'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2010/01/find.html' title='findコマンドで特定のファイル(ディレクトリ)を除外する'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-1972609800917781132</id><published>2009-12-25T15:45:00.003+09:00</published><updated>2009-12-25T16:27:23.605+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='postfix'/><title type='text'>postfixでVirtualアカウントの管理をMySQLで</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;今日はPostfix(2.5.5)のvirtual_mailbox_mapsについてです。&lt;br /&gt;しかもそれをMySQLで管理しちゃおう！という話です。&lt;br /&gt;&lt;br /&gt;そもそもvirtual_mailbox_mapsというのは、簡単に説明するとその名の通り&lt;br /&gt;そのサーバのアカウントにないアカウント（仮想アカウント）のメールをメールボックスに保存するというものです。&lt;br /&gt;今回はMySQLを利用しますので、postfix-2.5.5ソースをDLして、まず&lt;br /&gt;&lt;pre&gt;# tar zxvf postfix-2.5.5.tar.gz&lt;br /&gt;# cd postfix-2.5.5&lt;br /&gt;# make makefiles AUXLIBS='-L/usr/local/lib -L/usr/local/mysql/lib/mysql -lssl -lcrypto -lmysqlclient -lz -lm' CCARGS='-DHAS_MYSQL -I/usr/local/mysql/include/mysql -DUSE_TLS -I/usr/local/include -DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\"'&lt;/pre&gt;（パスは環境に合わせてね）のコマンドを打ちます。&lt;br /&gt;ここでlibmysqlclient.soが見つからないぜ！的なエラーが出る場合は、&lt;br /&gt;-L/usr/local/mysql/lib/mysqlのパスが正しいかどうか確認し、それも合っている場合は、&lt;br /&gt;&lt;pre&gt;# vim /etc/ld.so.conf.d/mysql.conf&lt;br /&gt;/usr/local/mysql/lib/mysql&lt;/pre&gt;を追加（パスは適宜合わせてね）。で、&lt;br /&gt;&lt;pre&gt;# ldconfig -v&lt;br /&gt;# make upgrade&lt;/pre&gt;でもう一度 make makefiles を打ちます。次に、&lt;br /&gt;&lt;pre&gt;# make &amp;&amp; make install（全てEnter)&lt;/pre&gt;でインストール完了です。&lt;br /&gt;次に、main.cfの編集です。&lt;br /&gt;&lt;pre&gt;# vim /etc/postfix/main.cf&lt;br /&gt;fallback_transport = virtual # ローカルに存在しないアカウント宛の処理&lt;br /&gt;virtual_mailbox_base = /usr/local/virtual # 適宜あわせてね&lt;br /&gt;virtual_mailbox_maps = /etc/postfix/virtual_mailbox_mysql&lt;br /&gt;virtual_uid_maps = static:10000&lt;br /&gt;virtual_gid_maps = static:1000&lt;/pre&gt;を追加します。&lt;br /&gt;&lt;br /&gt;続いてグループ、ユーザの作成。&lt;br /&gt;&lt;pre&gt;# groupadd -g 10000 vgroup&lt;br /&gt;# useradd -u 10000 -g vgroup -d /usr/local/virtual -s /sbin/nologin vuser&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;次は、virtual_mailbox_mysqlの設定。&lt;br /&gt;&lt;pre&gt;# vim /etc/postfix/virtual_mailbox_mysql&lt;br /&gt;hosts = localhost&lt;br /&gt;dbname = mailsystem&lt;br /&gt;user = mysql_user&lt;br /&gt;query = SELECT concat(name,'/') FROM mail_account WHERE active=1 AND domain='%d' AND name='%u'&lt;/pre&gt;&lt;br /&gt;で、これをhash化します。&lt;br /&gt;&lt;pre&gt;# postmap /etc/postfix/virtual_maibox_mysql&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;続いてMySQLの構築。今回はMySQLは自サーバで稼動しているものとします。&lt;br /&gt;&lt;pre&gt;# mysql -h localhost&lt;br /&gt;mysql&gt; create database mailsystem;&lt;br /&gt;mysql&gt; create table mail_account (&lt;br /&gt;id int not null auto_increment,&lt;br /&gt;name varchar(128) not null default '', # virtual_accountの名前&lt;br /&gt;password varchar(128) not null default '', # virtual_accountのPass&lt;br /&gt;domain varchar(128) not null default '', # サーバドメイン&lt;br /&gt;active tinyint(1) not null default 0, # 利用する/しないのフラグ&lt;br /&gt;primary key (id)&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;INSERT INTO mail_account (name, password,domain,active) values ('username','password','mydomain.jp',1);&lt;/pre&gt;テーブル操作権限等は適宜指定してください。&lt;br /&gt;&lt;br /&gt;では、postfix起動します。&lt;br /&gt;&lt;pre&gt;# /usr/sbin/postfix start&lt;/pre&gt;&lt;br /&gt;これで、MySQLに入れたアカウント宛のメールであれば、/usr/local/virtual以下へ配送されます。&lt;br /&gt;&lt;br /&gt;ちなみに、配送の確認をするには&lt;br /&gt;&lt;pre&gt;# postmap -a "username@mydomain.jp" mysql:/etc/postfix/virtual_mailbox_mysql&lt;/pre&gt;&lt;br /&gt;とやって、対象の結果（今回で言うと username/）が返って来ればOKです。&lt;br /&gt;何も表示されない場合は、何か間違えてます。&lt;br /&gt;&lt;br /&gt;めでたし、めでたし！お(・∀・)め(・∀・)で(・∀・)と(・∀・)う！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-1972609800917781132?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/1972609800917781132/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=1972609800917781132&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1972609800917781132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1972609800917781132'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/12/postfixvirtualmysql.html' title='postfixでVirtualアカウントの管理をMySQLで'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-432473116144596811</id><published>2009-12-16T14:33:00.004+09:00</published><updated>2009-12-16T14:54:57.729+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>PostgreSQL8.xで外部サーバから接続　めも</title><content type='html'>お久し、俺＠仕事中です。&lt;br /&gt;&lt;br /&gt;postgreSQL8.4.1を使ってて少しハマったのでメモφ(｀д´)ﾒﾓﾒﾓ...&lt;br /&gt;&lt;br /&gt;タイトルの通り、外部サーバ&amp;lt;192.168.0.11&gt;から自サーバ&amp;lt;192.168.0.10&gt;（ローカル接続）のpostgreSQLへ接続しようとしてできませんでした。&lt;br /&gt;&lt;pre&gt; $ telnet 192.168.0.10 5432&lt;br /&gt;Trying 192.168.0.10...&lt;br /&gt;telnet: connect to address 192.168.0.10: Connection refused&lt;/pre&gt;これはpostgreSQLのバージョン8以降からpostgresql.confに設定漏れがあったことが原因でした。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# vim $PGDATA/postgresql.conf&lt;br /&gt;------------------------------------------&lt;br /&gt;#listen_addresses = 'localhost'     # what IP address(es) to listen on;&lt;br /&gt;                    # comma-separated list of addresses;&lt;br /&gt;                    # defaults to 'localhost', '*' = all&lt;/pre&gt;これは、どのネットワークインターフェースアドレスで接続を許可するか、を設定する項目だそうです。&lt;br /&gt;デフォルトでは「localhost」になっているので、自サーバからの接続のみ許可となっているので&lt;br /&gt;&lt;pre&gt;listen_addresses = 'localhost,192.168.0.10'&lt;/pre&gt;とするとローカル接続の外部サーバから接続できます。&lt;br /&gt;全て許可する場合は&lt;br /&gt;&lt;pre&gt;listen_addresses = '*'&lt;/pre&gt;とします。&lt;br /&gt;&lt;br /&gt;インターフェースのアドレスを確認するのは、おなじみの&lt;br /&gt;&lt;pre&gt;# /sbin/ifconfig&lt;/pre&gt;でできますね。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でえええす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-432473116144596811?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/432473116144596811/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=432473116144596811&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/432473116144596811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/432473116144596811'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/12/postgresql8x.html' title='PostgreSQL8.xで外部サーバから接続　めも'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-2496263570715580427</id><published>2009-12-02T23:48:00.004+09:00</published><updated>2009-12-03T00:20:55.560+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>iptablesの設定メモ</title><content type='html'>こんばんわ、俺＠家で音楽鑑賞中です。&lt;br /&gt;&lt;br /&gt;今年も残り1ヶ月切ってしまいましたね。&lt;br /&gt;今年の元旦に神社で心に誓った目標の何割が達成できたでしょうか？&lt;br /&gt;ちなみに僕は10の目標のうち4しか達成できませんでしたよ｡･ﾟ･(ﾉε`)･ﾟ･｡ｳﾜｰﾝ&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;で、今日はiptablesの簡単な設定方法をメモします。&lt;br /&gt;解説サイトは山のようにあるのですが、結構みなさん複雑な事書かれているので&lt;br /&gt;チョチョイっと設定する人向けのメモです。&lt;br /&gt;&lt;br /&gt;まずは設定の確認。&lt;br /&gt;&lt;pre&gt;# iptables -L&lt;br /&gt;Chain INPUT (policy ACCEPT)&lt;br /&gt;target     prot opt source               destination         &lt;br /&gt;ACCEPT     all  --  localhost.localdomain  anywhere            &lt;br /&gt;ACCEPT     all  --  192.168.0.0/24      anywhere                               &lt;br /&gt;ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:http &lt;br /&gt;ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:omirr &lt;br /&gt;ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:smtp &lt;br /&gt;ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp-data &lt;br /&gt;ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ftp &lt;br /&gt;ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED &lt;br /&gt;REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable &lt;br /&gt;&lt;br /&gt;Chain FORWARD (policy ACCEPT)&lt;br /&gt;target     prot opt source               destination         &lt;br /&gt;ACCEPT     all  --  localhost.localdomain  anywhere            &lt;br /&gt;ACCEPT     all  --  192.168.0.0/24      anywhere            &lt;br /&gt;ACCEPT     all  --  xxx.xxx.xxx.xx/28     anywhere                      &lt;br /&gt;ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:tproxy &lt;br /&gt;ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED &lt;br /&gt;REJECT     all  --  anywhere             anywhere            reject-with icmp-port-unreachable &lt;br /&gt;&lt;br /&gt;Chain OUTPUT (policy ACCEPT)&lt;br /&gt;target     prot opt source               destination &lt;/pre&gt;一部のIPは伏せてあります。&lt;br /&gt;僕のテストサーバ、思ったより色々設定されてありましたｗ誰だこんなんしたやつｗ&lt;br /&gt;&lt;br /&gt;まぁ、大きく分けて3つあります。&lt;br /&gt;「Chain INPUT」・・・入ってくるパケットに関するもの。&lt;br /&gt;「Chain FORWARD」・・・転送されていくパケットに関するもの。&lt;br /&gt;「Chain OUTPUT」・・・出力されるパケットに関するもの。&lt;br /&gt;&lt;br /&gt;設定する順番は&lt;br /&gt;１）ポリシーを設定&lt;br /&gt;２）ルールを一旦削除（クリア）&lt;br /&gt;３）ルールを設定&lt;br /&gt;４）設定を保存&lt;br /&gt;５）iptables再起動&lt;br /&gt;です。&lt;br /&gt;&lt;br /&gt;ではまず１）ポリシーを設定。&lt;br /&gt;簡単なiptablesという事なのでINPUTは許可（ACCEPT）、FORWARDは破棄（DROP）、OUTPUTは許可（ACCEPT）と言う事にします。&lt;br /&gt;FORWARDは滅多な事じゃないと使わない（ルータにするとか）ですし、OUTPUTはサーバからの出力なので上記の方法で良いと思います。&lt;br /&gt;&lt;pre&gt;// 書式は iptables -P [チェイン] [ターゲット]&lt;br /&gt;// チェインのポリシーを指定のターゲットに設定するという意。&lt;br /&gt;# iptables -P INPUT ACCEPT&lt;br /&gt;# iptables -P FORWARD DROP&lt;br /&gt;# iptables -P OUTPUT ACCEPT&lt;/pre&gt;これでOK。&lt;br /&gt;&lt;br /&gt;次に２）ルールを一旦削除します。現在の設定を変更せずに追加とかした人はココやらなくても良いです。&lt;br /&gt;&lt;pre&gt;# iptables -F&lt;/pre&gt;OK。&lt;br /&gt;これで一旦設定を見てみると、&lt;br /&gt;&lt;pre&gt;# iptables -L&lt;br /&gt;Chain INPUT (Policy ACCEPT)&lt;br /&gt;target　　prot opt source　　　　　destination&lt;br /&gt;&lt;br /&gt;Chain FORWARD (Policy DROP)&lt;br /&gt;target　　prot opt source　　　　　destination&lt;br /&gt;&lt;br /&gt;Chain OUTPUT (Policy ACCEPT)&lt;br /&gt;target　　prot opt source　　　　　destination&lt;/pre&gt;になるはずです。&lt;br /&gt;&lt;br /&gt;次に３）ルールを設定。&lt;br /&gt;&lt;pre&gt;// 書式は iptables -A [チェイン] -p [プロトコル] -s [送信元] -j [ターゲット] --dport [ポート範囲の指定]&lt;br /&gt;// 他にオプションはたくさんあるけど、これくらい使えばとりあえずOK。&lt;br /&gt;# iptables -A INPUT -p tcp --dport 80 -j ACCEPT&lt;/pre&gt;と書けば、80番ポートに対するtcpプロトコルは通すよ！という意味です。ちなみに、&lt;br /&gt;&lt;pre&gt;# iptables -I INPUT 3 -p tcp --dport 80 -j ACCEPT&lt;/pre&gt;だと、INPUTチェインの上から3番目に、80番ポートに対するtcpプロトコルは通すルールを挿入！という意味です。&lt;br /&gt;さらには、&lt;br /&gt;&lt;pre&gt;# iptables -A INPUT -p tcp -s 192.168.0.0/28 --dport 80 -j ACCEPT&lt;/pre&gt;と書けば、INPUTチェインの80番ポートに対するtcpプロトコルの192.168.0.0/28からのパケットは通すぜ！という意味になります。&lt;br /&gt;まぁ、こんな感じでどんどんと&lt;br /&gt;&lt;pre&gt;# iptables -A INPUT -p tcp --dport 22 -j ACCEPT // ssh接続はACCEPT&lt;br /&gt;# iptables -A INPUT -p tcp --dport 110 -j ACCEPT // POPはACCEPT&lt;br /&gt;# iptables -A INPUT -p tcp --dport 25 -j ACCEPT // SMTPはACCEPT&lt;br /&gt;# iptables -A INPUT -p icmp -j ACCEPT // PINGはACCEPT&lt;br /&gt;# iptables -A INPUT -i lo -j ACCEPT // 自サーバからはACCEPT（-iはインターフェースの指定）&lt;br /&gt;# iptables -P INPUT DROP // 他の接続は全てDROP&lt;/pre&gt;とこんな感じです。&lt;br /&gt;&lt;br /&gt;次は４）設定を保存します。&lt;br /&gt;&lt;pre&gt;# service iptables save&lt;/pre&gt;これはサーバ再起動されたら設定がリセットされてしまうので、保存しておくのです。&lt;br /&gt;&lt;br /&gt;次に５）iptables再起動します。（念のために）&lt;br /&gt;&lt;pre&gt;# service iptables restart&lt;/pre&gt;OK！こんなもんです(´ﾟ艸ﾟ)∴&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ちなみにルールを設定する時に&lt;br /&gt;&lt;pre&gt;# iptables -A &lt;/pre&gt;と「-A」を多用しましたが、他にも&lt;br /&gt;&lt;pre&gt;# iptables -I [チェイン] 番号&lt;/pre&gt;で挿入。&lt;br /&gt;&lt;pre&gt;# iptables -R [チェイン] 番号&lt;/pre&gt;で書き換え（置換）&lt;br /&gt;&lt;pre&gt;# iptables -D [チェイン] 番号&lt;/pre&gt;で削除ができますので、あしからず。&lt;br /&gt;&lt;br /&gt;以上、おやすみー。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-2496263570715580427?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/2496263570715580427/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=2496263570715580427&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/2496263570715580427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/2496263570715580427'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/12/iptables.html' title='iptablesの設定メモ'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-4835830378743893188</id><published>2009-11-27T11:13:00.005+09:00</published><updated>2009-11-28T10:10:20.783+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>MySQLで最初に見るべきチューニング設定項目</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;わが社ではMySQL、PostgreSQLを良く使っている（というかほとんど）のですが、よくアクセス過多によるサーバチューニングをやっています。&lt;br /&gt;今回はMySQLサーバで負荷対策を行う際の「まず最初にココの設定だけは要Check It Now」というのをメモします。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# vim /etc/my.cnf&lt;br /&gt;または&lt;br /&gt;# mysqladmin variables&lt;br /&gt;または&lt;br /&gt;mysql&gt; show variables;&lt;br /&gt;&lt;/pre&gt;で、現在の設定の確認ができます。&lt;br /&gt;&lt;br /&gt;-- key_buffer_size&lt;br /&gt;&lt;pre&gt;mysql&gt; show variables like '%key_buffer%';&lt;/pre&gt;MyISAMエンジンテーブルのインデックスを保存するメモリバッファのサイズ。&lt;br /&gt;Key_read/Key_read_requestsでキーバッファミス率を算出し、0.01以下になるように。&lt;br /&gt;&lt;br /&gt;-- max_allowed_packet&lt;br /&gt;&lt;pre&gt;mysql&gt; show variables like '%max_allowed%';&lt;/pre&gt;通信時の1パケット最大サイズ。画像データなど大容量のデータをMySQLへ保存する際には大きくする。&lt;br /&gt;&lt;br /&gt;-- table_cache&lt;br /&gt;&lt;pre&gt;mysql&gt; show variables like '%table_cache%';&lt;/pre&gt;一度開いたMySQLのデータファイルポインタを保存しておくためのキャッシュ。二度目以降のテーブルへのアクセスを高速にする。つまりはサーバのディスクI/Oを減らせる。&lt;pre&gt;mysql&gt; show global status like '%Open_tables%'&lt;/pre&gt;の値が大きい場合はテーブルキャッシュの値を増やした方が良い場合がある。&lt;br /&gt;※バージョン5.1.xからはtable_open_sizeに変わってるかも！？&lt;br /&gt;&lt;br /&gt;-- sort_buffer_size&lt;br /&gt;&lt;pre&gt;mysql&gt; show variables like '%sort_buffer%';&lt;/pre&gt;ソートに利用されるメモリサイズ。Order ByとかGroup Byとかで使われる。もしsort_buffer_sizeが1Mでmax_connectionsが1000だった場合、メモリは最低でも1GB必要という事ですよ。&lt;br /&gt;&lt;br /&gt;-- read_buffer_size&lt;br /&gt;&lt;pre&gt;mysql&gt; show variables like '%read_buffer%';&lt;/pre&gt;テーブル読み込み時に利用されるメモリサイズ。INDEXを使わずフルスキャンされる場合に利用。そもそもINDEXを見直すべきでは？！&lt;br /&gt;&lt;br /&gt;-- read_rnd_buffer_size&lt;br /&gt;&lt;pre&gt;mysql&gt; show variables like '%read_rnd_buffer%';&lt;/pre&gt;テーブルをランダムに読み込む場合に使われるメモリサイズ。使用可能メモリより大きなテーブルでGroup By/Order Byをする際は大きめにしておく。ソート後のレコード読み取り速度を上げるかも。要はディスクI/Oの軽減。&lt;br /&gt;&lt;br /&gt;-- myisam_sort_buffer_size&lt;br /&gt;&lt;pre&gt;mysql&gt; show variables like '%myisam_sort_buffer%';&lt;/pre&gt;REPAIR TABLE / CREATE INDEX / ALTER INDEX 時に利用されるメモリサイズ。かなり頻度は低い。&lt;br /&gt;&lt;br /&gt;-- thread_cache_size&lt;br /&gt;&lt;pre&gt;mysql&gt; show variables like '%thread_cache%';&lt;/pre&gt;MySQLコネクションスレッドをプールする数。スレッドを破棄＆生成するコストを下げる。&lt;br /&gt;&lt;br /&gt;-- tmp_table_size&lt;br /&gt;&lt;pre&gt;mysql&gt; show variables like '%tmp_table_size%';&lt;/pre&gt;サブクエリなどで一時的に実行結果をテンポラリテーブルに保存されたときのメモリサイズ。このサイズを超えた場合、MySQLはディスクへ一時テーブルへ保存しディスクI/Oが発生してしまう。このサイズを指定した場合はmax_heap_table_sizeも同じ値に設定する。&lt;br /&gt;&lt;br /&gt;-- query_cache_size&lt;br /&gt;&lt;pre&gt;mysql&gt; show variables like '%query_cache%';&lt;/pre&gt;一度発行したクエリ実行結果をキャッシュしておき、二回目以降はクエリを発行することなくキャッシュから結果を返す。もちろん更新クエリなどが走った後はキャッシュはクリアされる。ちなみに&lt;pre&gt;mysql&gt; FLUSH QUERY CACHE;&lt;/pre&gt;でキャッシュを強制的にクリアできる。&lt;br /&gt;&lt;br /&gt;-- skip-name-resolve&lt;br /&gt;これは有名すぎますがDNS逆引きをしない。この設定をした場合、GRANT構文などでユーザを登録する際にもIP指定にする必要がある。&lt;br /&gt;&lt;br /&gt;my.cnfの設定は基本的に上記のものを見直します。&lt;br /&gt;もちろん細かい設定をする場合は、もっと詳細な設定を見直す必要があるのであくまで参考程度に。&lt;br /&gt;&lt;br /&gt;あとは、スローログを取得させる。&lt;br /&gt;&lt;pre&gt;slow_query_log=mysql-slow　// スローログを取得&lt;br /&gt;logn_query_time=1　// 1秒以上かかったクエリを取得&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;OPTIMIZE TABLE [table_name]を定期的にかける。&lt;br /&gt;&lt;pre&gt;mysql&gt; OPTIMIZE TABLE table_name;&lt;/pre&gt;更新や削除などが頻繁に行われているテーブルに対してやると効果絶大。デフラグを解消させる。postgreSQLで言うところのvacuumみたいなもの。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;あとは、サーバのメモリを増やすだとかサーバそのもののスペックを上げるだとか、アプリケーション側でのチューニングは必ず必要です。&lt;br /&gt;特にスローログに出ているクエリは見直す余地がかなりあると思うので、そちらのチューニングも大切に！&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-4835830378743893188?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/4835830378743893188/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=4835830378743893188&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4835830378743893188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4835830378743893188'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/11/mysql.html' title='MySQLで最初に見るべきチューニング設定項目'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-3661407449908418386</id><published>2009-11-16T11:15:00.005+09:00</published><updated>2009-11-17T11:18:09.344+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>linuxのssコマンドで利用中ポート一覧</title><content type='html'>こんちわ、俺＠仕事中です。&lt;br /&gt;&lt;br /&gt;ふと、ターミナル(zsh)で&lt;br /&gt;&lt;pre&gt;[user]$ sl&lt;/pre&gt;と打ってしまって&lt;br /&gt;&lt;pre&gt;correct:sl -&gt; ss [n y a e]?&lt;/pre&gt;と表示されて知ったのですがLinuxには「ss」というコマンドがあるみたいです。&lt;br /&gt;&lt;pre&gt;[user]$ whereis ss&lt;br /&gt;ss: /usr/sbin/ss /usr/include/ss /usr/share/ss&lt;/pre&gt;見つからない人は、yumで一発インストールできます。&lt;br /&gt;&lt;br /&gt;で、このコマンドなのですが、そのサーバが開いているポート一覧を表示してくれます。ちょうど&lt;br /&gt;&lt;pre&gt;[user]$ netstat -tpln&lt;/pre&gt;したのと同じような感じです。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;[user]$ ss -an&lt;br /&gt;State　　　　Recv-Q Send-Q　　　　Local Address:Port　　　　Peer Address:Port&lt;br /&gt;LISTEN　　　　0　　　0　　　　　　　　　　　　*:3333　　　　　　　　　　　*:*&lt;br /&gt;LISTEN　　　　0　　　0　　　　　　　　　　　　*:6666　　　　　　　　　　　*:*&lt;br /&gt;LISTEN　　　　0　　　0　　　　　　　　　　　　*:21　　　　　　　　　　　　*:*&lt;br /&gt;LISTEN　　　　0　　　0　　　　　　　　　　　　*:22　　　　　　　　　　　　*:*&lt;br /&gt;LISTEN　　　　0　　　0　　　　　　　　127.0.0.1:5431　　　　　　　　　　　*:*&lt;br /&gt;LISTEN　　　　0　　　0　　　　　　　　　　　　*:5432　　　　　　　　　　　*:*&lt;br /&gt;ESTAB 　　　　0　　　0　　　　　　192.168.60.215:22　　　　　192.168,.60.29:1515&lt;br /&gt;ESTAB 　　　　0　　　0　　　　　　192.168.60.215:22　　　　　192.168,.60.29:1764&lt;/pre&gt;と、こんな感じです。&lt;br /&gt;オプションもnetstatと似てます。&lt;br /&gt;&lt;pre&gt;[user]$ ss -h&lt;br /&gt;Usage: ss [ OPTIONS ]&lt;br /&gt;　　　 ss [ OPTIONS] [ FILTER]&lt;br /&gt;-n, --numeric don't resolve service names サービス名に変換せずにポート表示&lt;br /&gt;-a, --all dispaly all sockets 全てのソケットを表示&lt;br /&gt;-t, --tcp display only TCP sockets TCPプロトコルのソケットを表示&lt;br /&gt;-u, --udp display only UDP sockets UDPプロトコルのソケットを表示&lt;br /&gt;-4, --ipv4 display only IP version 4 sockets ipv4のIPでのみ表示&lt;br /&gt;-6, --ipv6 display only IP version 6 sockets ipv6のIPでのみ表示&lt;br /&gt;-r, --resolve resolve host names ホスト名を名前解決する&lt;/pre&gt;主なオプションはこんなもんでしょうか。&lt;br /&gt;&lt;br /&gt;以上でーーす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-3661407449908418386?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/3661407449908418386/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=3661407449908418386&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3661407449908418386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3661407449908418386'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/11/linuxss.html' title='linuxのssコマンドで利用中ポート一覧'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-5451945563996122543</id><published>2009-11-11T16:12:00.010+09:00</published><updated>2009-11-17T14:59:28.406+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jqueryでポップアップウインドウ</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;&lt;br /&gt;mixiのPC版で絵文字入力するときに「絵文字」アイコンをクリックするとポップアップが出て絵文字入力ってありますよね。&lt;br /&gt;今日はあんなポップアップの作り方の勉強です。&lt;br /&gt;&lt;br /&gt;まず表示部分。&lt;br /&gt;&lt;pre class="prettyprint"&gt;&amp;lt;html&gt;&lt;br /&gt;&amp;lt;title&gt;&lt;br /&gt;&amp;lt;script type="text/javascript" scr="js/jquery-1.3.2.js"&gt;&lt;br /&gt;&amp;lt!-- ドラッグできるように --&gt;&lt;br /&gt;&amp;lt;script type="text/javascript" scr="js/ui.core.js"&gt;&lt;br /&gt;&amp;lt!-- ドラッグできるように --&gt;&lt;br /&gt;&amp;lt;script type="text/javascript" scr="js/ui.draggable.js"&gt;&lt;br /&gt;&amp;lt;/title&gt;&lt;br /&gt;&amp;lt;body&gt;&lt;br /&gt;ポップアップ&lt;br /&gt;&amp;lt;hr&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt!-- ポップアップ --&gt;&lt;br /&gt;&amp;lt;div id="popup"&gt;&lt;br /&gt;ココにポップアップ表示&lt;br /&gt;&amp;lt;/div&gt;&lt;br /&gt;&amp;lt;!-- ポップアップ以外をクリックすれば、ポップアップが消えるように --&gt;&lt;br /&gt;&amp;lt;div id="delete"&gt;&amp;lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/body&gt;&lt;br /&gt;&amp;lt;/html&gt;&lt;/pre&gt;htmlはこんな感じにしておきます。&lt;br /&gt;&amp;lt;div id="popup"&gt;&amp;lt;/div&gt;の中にポップアップさせたい内容を書きます。&lt;br /&gt;&lt;br /&gt;次はCSS。&lt;br /&gt;&lt;pre class="prettyprint"&gt;div#popup {&lt;br /&gt;position: absolute; /* 移動できるように */&lt;br /&gt;z-index: 99; /* z-indexは高く */&lt;br /&gt;}&lt;br /&gt;div#delete {&lt;br /&gt;position: absolute; /* absoluteで！ */&lt;br /&gt;z-index: 0; /* div#popupより低く！ */&lt;br /&gt;display: none; /* 初期は非表示 */&lt;br /&gt;}&lt;/pre&gt;CSSはこんな感じ。&lt;br /&gt;&lt;br /&gt;ではjavascript部分(jQueryを使います）&lt;br /&gt;&lt;pre class="prettyprint"&gt;$(function() {&lt;br /&gt;  // パレットをclickでbind()しておく&lt;br /&gt;  $("div#popup").bind("click", $(this), popup);&lt;br /&gt;&lt;br /&gt;  // パレット以外の部分をクリックすると消えるように&lt;br /&gt;  $("div#delete").bind("click", function() {&lt;br /&gt;    $("div#popup").hide();  // パレットを非表示&lt;br /&gt;    $(this).hide();  // 自身も非表示&lt;br /&gt;  });&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;function popup(e) {&lt;br /&gt;  // パレットを表示&lt;br /&gt;  $("div#popup").css({"top":e.pageY-100,"left":e.pageX+50}).show().draggable();&lt;br /&gt;&lt;br /&gt;  // パレット以外の部分をクリックすると消す部分（mask）の処理&lt;br /&gt;  var height = $(document).height();&lt;br /&gt;  var width = $(document).width();&lt;br /&gt;  $("div#delete").css({"width":width,"height":height,"top":0,"left":0});&lt;br /&gt;  $("div#delete").show();&lt;br /&gt;}&lt;/pre&gt;こんな感じです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;簡単にサンプルを書きましたが、後はお好みで変えてやればOKです。&lt;br /&gt;ちなみに↑のサンプルソースは動作確認していませんので、もし間違いがあれば連絡くだされ；；&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でえぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-5451945563996122543?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/5451945563996122543/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=5451945563996122543&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/5451945563996122543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/5451945563996122543'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/11/jquery.html' title='jqueryでポップアップウインドウ'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-86582619060017051</id><published>2009-11-10T17:03:00.010+09:00</published><updated>2009-11-17T11:06:44.496+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>php5.3のクロージャー（無名関数）を使ってみる</title><content type='html'>どうも、俺＠猛仕事中です。&lt;br /&gt;&lt;br /&gt;新規案件にphp5.3.0を入れてみた。&lt;br /&gt;せっかくなので5.3からの新機能「Clouser（クロージャー）」を使ってみる。&lt;br /&gt;&lt;br /&gt;やりたい事は、絵文字データを内部コードに変換してDBへ保存し、それを表示する際に絵文字画像に変換して出力したいという事。&lt;br /&gt;絵文字画像というのは、&amp;lt;img src="xxx"&amp;gt;に変換するって事ね。&lt;br /&gt;※絵文字内部コードは[[MG:001]]～[[MG:999]]のフォーマット&lt;br /&gt;&lt;pre&gt;&lt;font color=fuchsia&gt;&amp;lt;?php&lt;/font&gt;&lt;br /&gt;&lt;font color=yellow&gt;1&lt;/font&gt; &lt;font color=steelblue&gt;// プログラムは適当に書き換えています。&lt;/font&gt;&lt;br /&gt;&lt;font color=yellow&gt;2&lt;/font&gt; &lt;font color=fuchsia&gt;function&lt;/font&gt; convertToImg($text) {&lt;br /&gt;&lt;font color=yellow&gt;3&lt;/font&gt;    &lt;font color=steelblue&gt;// 変換テーブルを配列で取得&lt;/font&gt;&lt;br /&gt;&lt;font color=yellow&gt;4&lt;/font&gt;    $emoji_map = file("emoji_map.txt");&lt;br /&gt;&lt;font color=yellow&gt;5&lt;/font&gt;&lt;br /&gt;&lt;font color=yellow&gt;6&lt;/font&gt;    $converted = preg_replace_callback("/\[\[MG:([0-9]{3})\]\]/",&lt;br /&gt;&lt;font color=yellow&gt;7&lt;/font&gt;        &lt;font color=fuchsia&gt;function&lt;/font&gt; ($match) use ($emoji_map) {&lt;br /&gt;&lt;font color=yellow&gt;8&lt;/font&gt;            if (isset($emoji_map[$match[1]])) {&lt;br /&gt;&lt;font color=yellow&gt;9&lt;/font&gt;                return "&amp;lt;img src='./img/emoji/".$emoji_map[$match1]].".gif'&amp;gt;";&lt;br /&gt;&lt;font color=yellow&gt;10&lt;/font&gt;           }&lt;br /&gt;&lt;font color=yellow&gt;11&lt;/font&gt;           &lt;font color=yellow&gt;return&lt;/font&gt; $match[0];&lt;br /&gt;&lt;font color=yellow&gt;12&lt;/font&gt;       },&lt;br /&gt;&lt;font color=yellow&gt;13&lt;/font&gt;       $text&lt;br /&gt;&lt;font color=yellow&gt;14&lt;/font&gt;   );&lt;br /&gt;&lt;font color=yellow&gt;15&lt;/font&gt;&lt;br /&gt;&lt;font color=yellow&gt;16&lt;/font&gt;   &lt;font color=yellow&gt;return&lt;/font&gt; $converted;&lt;br /&gt;&lt;font color=yellow&gt;17&lt;/font&gt; }&lt;/pre&gt;てな具合です。&lt;br /&gt;&lt;br /&gt;preg_replace_callback()関数の7行目～10行目までで無名関数を使っています。&lt;br /&gt;$text内で　/\[\[MG:([0-9]{3})\]\]/　にマッチした最初の([0-9]{3})を、配列$emoji_mapのキーに指定しています。&lt;br /&gt;&lt;br /&gt;使う事ないだろうと思っていた、preg_replace_callback()関数とクロージャーを使う事になるとは。。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上、自分でいろいろやってみてねー。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-86582619060017051?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/86582619060017051/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=86582619060017051&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/86582619060017051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/86582619060017051'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/11/php53.html' title='php5.3のクロージャー（無名関数）を使ってみる'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-2140063413843183944</id><published>2009-10-31T03:56:00.005+09:00</published><updated>2009-10-31T04:34:52.004+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ZendFramework'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Zend_Db_Adapter_Abstractを継承した拡張自作Adapter</title><content type='html'>どうも、俺＠遊び帰宅です。&lt;br /&gt;眠いっす。&lt;br /&gt;&lt;br /&gt;Zend Frameworkを使ってWebアプリケーションを作ってて&lt;br /&gt;「あー、DBへのクエリのログ取りたいなー」ってよくあると思います。&lt;br /&gt;特にトランザクションの発生するクエリに関しては、Webプログラマとしては必需品だと思います。&lt;br /&gt;&lt;br /&gt;方法はすべてのXXController内でクエリを発行する度に&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;// Zend_Db_Adapter_Abstractでクエリ発行&lt;br /&gt;$adapter-&gt;query("INSERT INTO foo_table (column) VALUES ('value')");&lt;br /&gt;&lt;br /&gt;// Zend_Db_Profiler&lt;br /&gt;$profiler = $adapter-&gt;getProfiler();&lt;br /&gt;$queries = $profiler-&gt;getQueryProfiles(Zend_Db_Profiler::INSERT);&lt;br /&gt;if (is_array($queries)) {&lt;br /&gt;    foreach ($queries as $query) {&lt;br /&gt;        file_put_contents($filename, $query-&gt;getQuery());&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;と、簡単なサンプルを書くとこんな感じでしょうか。&lt;br /&gt;&lt;br /&gt;ただ、これだとクエリを発行する度にZend_Db_Profilerを生成し、ログを取得しなければなりません。&lt;br /&gt;面倒くさいです。&lt;br /&gt;&lt;br /&gt;そんな面倒くさがりな貴方にはZend_Db_Adapter_Abstractを継承した自作クラスを作成することをオススメします。&lt;br /&gt;例えばPostgreSQLを使っている場合は&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;/**&lt;br /&gt; * Zend_Db_Adapter_Pdo_Pgsqlを継承した自作アダプター&lt;br /&gt; */&lt;br /&gt;class MyPdoPgsql extends Zend_Db_Adapter_Pdo_Pgsql {&lt;br /&gt;    /**&lt;br /&gt;     * @Override&lt;br /&gt;     */&lt;br /&gt;    public function insert($table, array $bind) {&lt;br /&gt;        // 略 Zend_Db_Adapter_Pdo_Pgsql::insert()と同じ処理&lt;br /&gt;&lt;br /&gt;        // Zend_Db_Profilerでログる&lt;br /&gt;        $profiler = $adapter-&gt;getProfiler();&lt;br /&gt;        $queries = $profiler-&gt;getQueryProfiles(Zend_Db_Profiler::INSERT);&lt;br /&gt;        if (is_array($queries)) {&lt;br /&gt;            foreach ($queries as $query) {&lt;br /&gt;                file_put_contents($filename, $query-&gt;getQuery());&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * @Override&lt;br /&gt;     */&lt;br /&gt;    public function update($table, array $bind, $where) {&lt;br /&gt;        // 略 Zend_Db_Adapter_Pdo_Pgsql::update()と同じ処理&lt;br /&gt;&lt;br /&gt;        // Zend_Db_Profilerでログる&lt;br /&gt;        $profiler = $adapter-&gt;getProfiler();&lt;br /&gt;        $queries = $profiler-&gt;getQueryProfiles(Zend_Db_Profiler::UPDATE);&lt;br /&gt;        if (is_array($queries)) {&lt;br /&gt;            foreach ($queries as $query) {&lt;br /&gt;                file_put_contents($filename, $query-&gt;getQuery());&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public function delete($table, $where = '') {&lt;br /&gt;        // 以下同じ&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;このようにinsert/update/deleteメソッドにログ処理を書いてZend_Db_Adapterの子クラスを作成します。&lt;br /&gt;&lt;br /&gt;あとはindex.php内の処理でZend_Db_Adapter_Abstractを生成するときに&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$db = new MyPdoPgsql($options);&lt;br /&gt;Zend_Db_Table_Abstract::setDefaultAdapter($db);&lt;/pre&gt;のようにデフォルトアダプターをセットしておけば、全てOK！！&lt;br /&gt;&lt;br /&gt;基本的にZend FrameworkのクエリはZend_Db_Adapter_Abstractを経由して発行されるので、あとは自動でログを取ってくれます。&lt;br /&gt;他にもトランザクションや例外処理も全てこの中に書けば、面倒なことを書かずに済みますね。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上、面倒くさがり屋さんへ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-2140063413843183944?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/2140063413843183944/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=2140063413843183944&amp;isPopup=true' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/2140063413843183944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/2140063413843183944'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/10/zenddbadapteradapter.html' title='Zend_Db_Adapter_Abstractを継承した拡張自作Adapter'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-4079200533948568094</id><published>2009-10-22T10:06:00.006+09:00</published><updated>2009-10-22T10:21:17.035+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>phpで三項演算子の注意点</title><content type='html'>どうも、俺＠始業です。&lt;br /&gt;別に暇なわけじゃないですよ。&lt;br /&gt;&lt;br /&gt;今日はphpで三項演算子を利用した際の注意点をメモります。&lt;br /&gt;三項演算子は例えば&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$a = 1;&lt;br /&gt;// 三項演算子&lt;br /&gt;echo $a == 1 ? "$aは1です。" : "$aは1ではありません。";&lt;/pre&gt;と書くと、出力は&lt;br /&gt;&lt;pre&gt;$aは1です。&lt;/pre&gt;となります。&lt;br /&gt;書き方は&lt;br /&gt;&lt;pre&gt;(式) ? 真の場合 : 偽の場合&lt;/pre&gt;です。&lt;br /&gt;三項演算子は短く条件分岐を書くことができるので、phpでプログラムを書いた際のView側などで利用できます。&lt;br /&gt;&lt;br /&gt;で、&lt;br /&gt;三項演算子を入れ子（ネスト）にした場合、php三項演算子ならではの注意点があります。&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;$a = 1;&lt;br /&gt;// 三項演算子&lt;br /&gt;echo $a == 1 ? "$aは1です。" : $a == 2 ? "$aは2です。" : "$aは1でも2でもありません。";&lt;/pre&gt;とすると、プログラマーは&lt;br /&gt;&lt;pre&gt;$aは1です。&lt;/pre&gt;と出力されると予想します。&lt;br /&gt;ところがドッコイこの結果は&lt;br /&gt;&lt;pre&gt;$aは2です。&lt;/pre&gt;と出力されてしまいます。危ないですねー。&lt;br /&gt;理由は&lt;a href="http://docs.php.net/manual/ja/language.operators.comparison.php#language.operators.comparison.ternary"&gt;PHPマニュアル＠三項演算子&lt;/a&gt;にあるように、phpの三項演算子は左から右へ評価の順が移っていくので、上の例でいくと&lt;br /&gt;１）$a == 1 が評価されtrue&lt;br /&gt;２）"$aは1です。"をechoしようとする&lt;br /&gt;３）（１）で評価されたtrueが次の $a == 2で評価されtrue&lt;br /&gt;４）"$aは2です。"をechoする。&lt;br /&gt;という流れになるみたいです。たぶん、、。&lt;br /&gt;&lt;br /&gt;要は（３）で$a == 2 が評価されるときに（１）で評価された結果(true)を持ち越してしまうみたいです。&lt;br /&gt;&lt;br /&gt;というわけで、どうしても三項演算子を利用して入れ子をしたい場合は&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;echo $a == 1 ? "$aは1です。" : ($a == 2 ? "$aは2です。" : "$aは1でも2でもありません。");&lt;/pre&gt;と書きましょう。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上ーー。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-4079200533948568094?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/4079200533948568094/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=4079200533948568094&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4079200533948568094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/4079200533948568094'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/10/php.html' title='phpで三項演算子の注意点'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-3268110438149820570</id><published>2009-10-07T10:32:00.004+09:00</published><updated>2009-10-07T10:39:09.513+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><title type='text'>PostgreSQLでコマンドラインから直接クエリ実行</title><content type='html'>おはようございます、俺＠朝礼後です。&lt;br /&gt;&lt;br /&gt;今日はPostgreSQLでコマンドラインで直接クエリを実行する方法をメモります。&lt;br /&gt;説明が難しいのですが、「コマンドラインから直接」というのは&lt;br /&gt;&lt;pre&gt;$ psql foo_database&lt;br /&gt;psql&gt; SELECT * FROM bar;&lt;/pre&gt;というのではなく、&lt;br /&gt;postgresqlサーバへログインせずにクエリ発行、結果取得という意味です。&lt;br /&gt;（※内部的にはpostgresqlログインしてるのかもやけど、、、）&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;やり方は、&lt;br /&gt;&lt;pre&gt;$ psql -c 'SELECT * FROM bar' foo_database&lt;/pre&gt;です。&lt;br /&gt;ちなみに&lt;br /&gt;&lt;pre&gt;$ psql -c 'SELECT * FROM bar' -o output_file foo_database&lt;/pre&gt;とやると、&lt;br /&gt;output_fileへクエリ結果を出力します。&lt;br /&gt;&lt;br /&gt;ついでにMySQLでは&lt;br /&gt;&lt;pre&gt;$ mysql -e 'SELECT * FROM bar' foo_database&lt;/pre&gt;で直接クエリを実行できます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上どぇぇぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-3268110438149820570?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/3268110438149820570/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=3268110438149820570&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3268110438149820570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3268110438149820570'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/10/postgresql.html' title='PostgreSQLでコマンドラインから直接クエリ実行'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-6495339757131454903</id><published>2009-09-16T23:26:00.006+09:00</published><updated>2009-09-17T00:10:20.186+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>MySQLのALTER TABLE構文のまとめ</title><content type='html'>こんばんわ、俺＠家でまったり中です。&lt;br /&gt;今日は、プログラマがよく使うであろうMySQL(ver5.x)のALTER TABLE構文についてメモします。&lt;br /&gt;ALTER TABLE構文はMySQLのテーブルの構造を変更する時に使います。&lt;br /&gt;&lt;br /&gt;1)カラムを追加&lt;br /&gt;&lt;pre&gt;mysql&gt; ALTER TABLE [テーブル名] ADD COLUMN [カラム名] [型] [制約] [FIRST | AFTER カラム名]&lt;/pre&gt;最後の[FIRST|AFTER カラム名]はなくてもOK。&lt;br /&gt;例：&lt;pre&gt;msql&gt; ALTER TABLE table_name ADD COLUMN name VARCHAR(64) NOT NULL DEFAULT ''&lt;/pre&gt;&lt;br /&gt;2)カラムを削除&lt;br /&gt;&lt;pre&gt;mysql&gt; ALTER TABLE [テーブル名] DROP COLUMN [カラム名]&lt;/pre&gt;&lt;br /&gt;3)テーブル名変更&lt;br /&gt;&lt;pre&gt;mysql&gt; ALTER TABLE [テーブル名] RENAME TO [新テーブル名]&lt;/pre&gt;&lt;br /&gt;4)カラムの型を変更&lt;br /&gt;&lt;pre&gt;mysql&gt; ALTER TABLE [テーブル名] MODIFY [カラム名] [型] [制約]&lt;br /&gt;または&lt;br /&gt;mysql&gt; ALTER TABLE [テーブル名] CHANGE COLUMN [カラム名] [新カラム名] [型] [制約]&lt;/pre&gt;&lt;br /&gt;5)カラム名を変更&lt;br /&gt;&lt;pre&gt;mysql&gt; ALTER TABLE [テーブル名] CHANGE COLUMN [カラム名] [新カラム名]&lt;/pre&gt;&lt;br /&gt;6)インデックスを追加&lt;br /&gt;&lt;pre&gt;mysql&gt; ALTER TABLE [テーブル名] ADD INDEX [インデックス名] ([カラム名,...])&lt;br /&gt;または&lt;br /&gt;mysql&gt; CREATE INDEX [インデックス名] ON [テーブル名] ([カラム名,...])&lt;/pre&gt;&lt;br /&gt;7)インデックスを削除&lt;br /&gt;&lt;pre&gt;mysql&gt; ALTER TABLE [テーブル名] DROP INDEX [インデックス名]&lt;br /&gt;または&lt;br /&gt;mysql&gt; DROP INDEX [インデックス名] ON [テーブル名]&lt;/pre&gt;&lt;br /&gt;8)AUTO_INCREMENTの値を変更&lt;br /&gt;&lt;pre&gt;mysql&gt; ALTER TABLE [テーブル名] AUTO_INCREMENT = [値]&lt;/pre&gt;&lt;br /&gt;9)テーブルの使用しているエンジン(ENGINE)を変更&lt;br /&gt;&lt;pre&gt;mysql&gt; ALTER TABLE [テーブル名] ENGINE = [ENGINE名]&lt;/pre&gt;&lt;br /&gt;10)テーブルのデフォルト文字セットを変更&lt;br /&gt;&lt;pre&gt;mysql&gt; ALTER TABLE [テーブル名] DEFAULT CHARSET = [文字コード名]&lt;/pre&gt;&lt;br /&gt;11)デフォルト値を変更&lt;br /&gt;&lt;pre&gt;mysql&gt; ALTER TABLE [テーブル名] ALTER COLUMN [カラム名] SET DEFAULT [デフォルト値]&lt;/pre&gt;&lt;br /&gt;12)デフォルト値を削除&lt;br /&gt;&lt;pre&gt;mysql&gt; ALTER TABLE [テーブル名] ALTER COLUMN [カラム名] DROP DEFAULT&lt;/pre&gt;&lt;br /&gt;詳しくは&lt;a href="http://dev.mysql.com/doc/refman/5.1/ja/alter-table.html"&gt;MySQL::5.1マニュアル ALTER TABLE構文&lt;/a&gt;をば。&lt;br /&gt;&lt;br /&gt;以上どぇぇぇぇーす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-6495339757131454903?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/6495339757131454903/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=6495339757131454903&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6495339757131454903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/6495339757131454903'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/09/mysqlalter-table.html' title='MySQLのALTER TABLE構文のまとめ'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-374093857274773079</id><published>2009-09-09T14:19:00.009+09:00</published><updated>2009-09-10T11:00:21.968+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='mmeasure'/><title type='text'>mmeasureのインストール</title><content type='html'>どうも、俺＠仕事中、2度目の投稿です。&lt;br /&gt;決して暇な訳ではありませんよ。&lt;br /&gt;&lt;br /&gt;mmeasureのインストールについて覚書き。&lt;br /&gt;インストールは至って簡単シンプルです。&lt;br /&gt;まずは&lt;a href="http://mmeasure.sourceforge.jp/"&gt;mmeasure project&lt;/a&gt;からソースをダウンロード。2009年9月9日時点でのバージョンは1.0.7でした。&lt;br /&gt;&lt;br /&gt;次に解凍&lt;br /&gt;&lt;pre&gt;# tar zxvf mmeasure-1.0.7.tar.gz&lt;/pre&gt;出てきたディレクトリを/usr/local下（デフォルト）へ移動&lt;br /&gt;&lt;pre&gt;# mv mmeasure/ /usr/local&lt;br /&gt;# cd /usr/local/mmeasure&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;perlのモジュールをインストールします。&lt;br /&gt;cpanについては&lt;a href="http://koexuka.blogspot.com/2009/04/cpan.html"&gt;オデの日記＠cpanモジュール&lt;/a&gt;を見てね。&lt;br /&gt;&lt;pre&gt;# cpan install Socket&lt;br /&gt;# cpan install DBI // ←MySQLを起動させてないとダメっぽい&lt;br /&gt;# cpan install Jcode&lt;br /&gt;# cpan install DBD::mysql // ←ココでずっこける&lt;/pre&gt;RRDsモジュールはrrdtoolをインストールすればOKの模様。&lt;br /&gt;&lt;pre&gt;# wget 'http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.0.x/rrdtool-1.0.49.tar.gz'&lt;br /&gt;# tar zxvf rrdtool-1.0.49.tar.gz&lt;br /&gt;# rrdtool-1.0.49&lt;br /&gt;# ./configure&lt;br /&gt;# make&lt;br /&gt;# make install // ←ついでにrrdtoolインスト&lt;br /&gt;# cd /usr/local/src/rrdtool-1.0.x/perl-shared&lt;br /&gt;# perl Makefile.PL&lt;br /&gt;# make &amp;&amp; make install&lt;/pre&gt;で、DBD::mysqlですが、何をどう頑張ってもインストールできませんでした。&lt;br /&gt;同じくインストールできなかったけど、頑張ればインストできた人がいれば解決方法を教えて下さい。&lt;br /&gt;とりえずyumで&lt;br /&gt;&lt;pre&gt;# yum install perl-DBD-MySQL&lt;/pre&gt;で何とかインスト。&lt;br /&gt;&lt;br /&gt;設定ファイルを修正&lt;br /&gt;&lt;pre&gt;# cp mmeasure_template.conf mmeasure.conf&lt;br /&gt;# vim mmeasure.conf&lt;/pre&gt;で、この設定ファイルを色々変更します。デフォルトの設定ファイルには間違いもあるので必ず修正します。&lt;br /&gt;&lt;pre&gt;&lt;font color="steelblue"&gt;#------------------&lt;br /&gt;#   MySQL&lt;br /&gt;#------------------&lt;/font&gt;&lt;br /&gt;MYSQL_HOST=[MySQLのIP]&lt;br /&gt;MYSQL_USER=mmeasure # あとでmmeasureユーザを追加します。&lt;br /&gt;MYSQL_PASSWORD=password # 接続パスワード&lt;br /&gt;MYSQL_PORT=3306&lt;br /&gt;MYSQL_SOCKET=/tmp/mysql.sock&lt;br /&gt;MYSQL_SLOW_QUERY_LOG="/usr/local/mysql/var/mysql-slow" # スローログのPATH。ない場合はコメントアウトで&lt;br /&gt;&lt;font color="steelblue"&gt;#------------------&lt;br /&gt;#    Mail&lt;br /&gt;#------------------&lt;/font&gt;&lt;br /&gt;MAIL_HOST=foo.com # 自サーバホスト名&lt;br /&gt;MAIL_FROM=info@foo.com # 実在するアカウントで！&lt;br /&gt;MAIL_TO=bar@tohost.com&lt;br /&gt;&lt;font color="steelblue"&gt;#MAIL_CC= # いらん！&lt;/font&gt;&lt;br /&gt;&lt;font color="steelblue"&gt;#MAIL_BCC= # いらん！&lt;/font&gt;&lt;br /&gt;MAIL_SUBJECT="alert" # メールの件名を適当に。&lt;br /&gt;&lt;font color="steelblue"&gt;#------------------&lt;br /&gt;#    Pathes&lt;br /&gt;#------------------&lt;/font&gt;&lt;br /&gt;PATH_RRDTOOL="/usr/local/rrdtool-1.0.49/bin/rrdtool" # パスが違う場合は修正&lt;br /&gt;&lt;font color="steelblue"&gt;#------------------&lt;br /&gt;#    Web setting&lt;br /&gt;#------------------&lt;/font&gt;&lt;br /&gt;WEBDIR="$PATH_MEASURE/web/images/graphs" # /imagesを追加！&lt;br /&gt;WIDTH_SMALL="200"   # 追加！&lt;br /&gt;HEIGHT_SMALL="100"  # 追加！&lt;br /&gt;WIDHT_LARGE="400"   # 追加！&lt;br /&gt;HEIGHT_LARGE="100"  # 追加！&lt;/pre&gt;&lt;br /&gt;次にMySQLサーバにmmeasureユーザの追加です。僕の環境ではローカル接続の別サーバにMySQLがあったので&lt;br /&gt;&lt;pre&gt;# mysql -h 192.168.0.2 -u mysql&lt;br /&gt;mysql&gt; GRANT ALL ON *.* to mmeasure@192.168.0.1 indentified by 'password';&lt;br /&gt;mysql&gt; SET password FOR mmeasure@192.168.0.1 = old_password('password'); // ←MySQL4.1以前の互換&lt;br /&gt;mysql&gt; FLUSH PRIVILEGES;&lt;/pre&gt;でOK。一応接続テストもしておく。&lt;br /&gt;&lt;pre&gt;# mysql -h 192.168.0.2 -u mmeasure -p&lt;br /&gt;Enter password: パスワード入力&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;次に、MySQLのデータを取るために./mmeasure/daemon/data-mysql/read-data.plを修正します。ココはだいぶハマったのですが、クエリ回数、クエリ比率などを表示するために変更するべきです。&lt;br /&gt;&lt;pre&gt;# vim ./mmeasure/daemon/data-mysql/read-data.pl&lt;br /&gt; &lt;font color="yellow"&gt;50     my&lt;/font&gt; &lt;font color="aqua"&gt;%status&lt;/font&gt; = select_2column( &lt;font color="aqua"&gt;$db&lt;/font&gt;, &lt;font color="red"&gt;"show global status"&lt;/font&gt; ); # globalを追加&lt;/pre&gt;&lt;br /&gt;あと、僕の場合ですが、mmeasure.errでアラートメール送信時のエラーが出まくっていたのでメール送信処理部分をコメントアウトしました。アラートはNAGIOSとかで監視してるので、、、。&lt;br /&gt;&lt;pre&gt;# vim ./mmeasure/daemon/daemon-mmeasure.pl&lt;br /&gt; &lt;font color="yellow"&gt;224&lt;/font&gt; &lt;font color="steelblue"&gt;#                   alerter_sendmail( $conf{ 'MAIL_HOST' },&lt;/font&gt; &lt;br /&gt; &lt;font color="yellow"&gt;225&lt;/font&gt; &lt;font color="steelblue"&gt;#                       $conf{ 'MAIL_TO' }, $conf{ 'MAIL_FROM' },&lt;/font&gt; &lt;br /&gt; &lt;font color="yellow"&gt;226&lt;/font&gt; &lt;font color="steelblue"&gt;#                       $conf{ 'MAIL_SUBJECT' }, $alert_message,&lt;/font&gt; &lt;br /&gt; &lt;font color="yellow"&gt;227&lt;/font&gt; &lt;font color="steelblue"&gt;#                       $conf{ 'MAIL_CC' }, $conf{ 'MAIL_BCC' } );&lt;/font&gt;&lt;/pre&gt;なんでエラーが出るのか謎です。時間があるときに調査します。分かる方いたら教えてください＞＜&lt;br /&gt;エラー内容&lt;br /&gt;&lt;pre&gt;# vim ./mmeasure/daemon/log/mmeasure.err&lt;br /&gt; &lt;font color="yellow"&gt;52&lt;/font&gt; RCPT command failure(Bad file descriptor)... at ../library/mailer.pl line 93.&lt;br /&gt; &lt;font color="yellow"&gt;53&lt;/font&gt; print() on closed filehandle SH at ../library/mailer.pl line 127 (#1)&lt;br /&gt; &lt;font color="yellow"&gt;54&lt;/font&gt;     (W closed) The filehandle you're printing on got itself closed sometime&lt;br /&gt; &lt;font color="yellow"&gt;55&lt;/font&gt;     before now.  Check your control flow.&lt;br /&gt; &lt;font color="yellow"&gt;56&lt;/font&gt;&lt;br /&gt; &lt;font color="yellow"&gt;57&lt;/font&gt; readline() on closed filehandle SH at ../library/mailer.pl line 128 (#2)&lt;br /&gt; &lt;font color="yellow"&gt;58&lt;/font&gt;     (W closed) The filehandle you're reading from got itself closed sometime&lt;br /&gt; &lt;font color="yellow"&gt;59&lt;/font&gt;     before now.  Check your control flow.&lt;br /&gt; &lt;font color="yellow"&gt;60&lt;/font&gt;&lt;br /&gt; &lt;font color="yellow"&gt;61&lt;/font&gt; Use of uninitialized value in substitution (s///) at ../library/mailer.pl line&lt;br /&gt; &lt;font color="yellow"&gt;62&lt;/font&gt;     205 (#3)&lt;br /&gt; &lt;font color="yellow"&gt;63&lt;/font&gt;     (W uninitialized) An undefined value was used as if it were already&lt;br /&gt; &lt;font color="yellow"&gt;64&lt;/font&gt;     defined.  It was interpreted as a "" or a 0, but maybe it was a mistake.&lt;br /&gt; &lt;font color="yellow"&gt;65&lt;/font&gt;     To suppress this warning assign a defined value to your variables.&lt;br /&gt; &lt;font color="yellow"&gt;66&lt;/font&gt;&lt;br /&gt; &lt;font color="yellow"&gt;67&lt;/font&gt;     To help you figure out what was undefined, perl tells you what operation&lt;br /&gt; &lt;font color="yellow"&gt;68&lt;/font&gt;     you used the undefined value in.  Note, however, that perl optimizes your&lt;br /&gt; &lt;font color="yellow"&gt;69&lt;/font&gt;     program and the operation displayed in the warning may not necessarily&lt;br /&gt; &lt;font color="yellow"&gt;70&lt;/font&gt;     appear literally in your program.  For example, "that $foo" is&lt;br /&gt; &lt;font color="yellow"&gt;71&lt;/font&gt;     usually optimized into "that " . $foo, and the warning will refer to&lt;br /&gt; &lt;font color="yellow"&gt;72&lt;/font&gt;     the concatenation (.) operator, even though there is no . in your&lt;br /&gt; &lt;font color="yellow"&gt;73&lt;/font&gt;     program.&lt;br /&gt; &lt;font color="yellow"&gt;74&lt;/font&gt;&lt;br /&gt; &lt;font color="yellow"&gt;75&lt;/font&gt; Use of uninitialized value in pattern match (m//) at ../library/mailer.pl line&lt;br /&gt; &lt;font color="yellow"&gt;76&lt;/font&gt;     130 (#3)&lt;br /&gt; &lt;font color="yellow"&gt;77&lt;/font&gt; print() on closed filehandle SH at ../library/mailer.pl line 132 (#1)&lt;br /&gt; &lt;font color="yellow"&gt;78&lt;/font&gt; DATA command failure(Bad file descriptor)... at ../library/mailer.pl line 134.&lt;br /&gt; &lt;font color="yellow"&gt;79&lt;/font&gt; print() on closed filehandle SH at ../library/mailer.pl line 143 (#1)&lt;br /&gt; &lt;font color="yellow"&gt;80&lt;/font&gt; readline() on closed filehandle SH at ../library/mailer.pl line 144 (#2)&lt;br /&gt; &lt;font color="yellow"&gt;81&lt;/font&gt; Use of uninitialized value in pattern match (m//) at ../library/mailer.pl line&lt;br /&gt; &lt;font color="yellow"&gt;82&lt;/font&gt;     146 (#3)&lt;br /&gt; &lt;font color="yellow"&gt;83&lt;/font&gt; print() on closed filehandle SH at ../library/mailer.pl line 148 (#1)&lt;br /&gt; &lt;font color="yellow"&gt;84&lt;/font&gt; Body &amp; header send failure(Bad file descriptor)... at ../library/mailer.pl line 150.&lt;br /&gt; &lt;font color="yellow"&gt;85&lt;/font&gt; print() on closed filehandle SH at ../library/mailer.pl line 156 (#1)&lt;/pre&gt;&lt;br /&gt;次はApacheにAliasを作ります。&lt;br /&gt;&lt;pre&gt;# vim /usr/local/apache2/conf/httpd.conf&lt;br /&gt;&lt;font color="aqua"&gt;Alias&lt;/font&gt; /mmeasure &lt;font color="red"&gt;"/usr/local/mmeasure/web"&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;# /usr/local/apache2/bin/apachectl restart&lt;/pre&gt;&lt;br /&gt;ではデーモンの起動！&lt;br /&gt;&lt;pre&gt;# ./mmeasure/daemon/mmeasure.sh start&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;以上～！あとはチューニングアドバイスを信じるも信じないもアナタ次第！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-374093857274773079?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/374093857274773079/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=374093857274773079&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/374093857274773079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/374093857274773079'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/09/mmeasure.html' title='mmeasureのインストール'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-9055195505719947220</id><published>2009-09-09T11:58:00.002+09:00</published><updated>2009-09-09T12:11:09.662+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>MySQLで再起動せずに設定変更</title><content type='html'>こんちわ、俺＠仕事中です。&lt;br /&gt;周知の事実すぎるかもしれませんが、MySQLの設定（通常はmy.cnfに書かれてあるもの）を再起動せずに変更する方法について。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;mysql&gt; SET GLOBAL &lt;変数名&gt;=&lt;値&gt;&lt;br /&gt;または&lt;br /&gt;mysql&gt; SET @@global.&lt;変数名&gt;=&lt;値&gt;&lt;/pre&gt;で設定を変更できます。&lt;br /&gt;例えば、query_cache_sizeを1MBに変更する場合&lt;br /&gt;&lt;pre&gt;mysql&gt; SET GLOBAL query_cache_size=1048576;&lt;/pre&gt;&lt;br /&gt;で変更できます。&lt;br /&gt;&lt;br /&gt;変更後は必ずmy.cnfの値を変更する事を忘れずに！じゃないと、MySQLがいつか再起動した後元に戻っちゃいますよー。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上どぇ～す。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-9055195505719947220?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/9055195505719947220/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=9055195505719947220&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/9055195505719947220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/9055195505719947220'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/09/mysql.html' title='MySQLで再起動せずに設定変更'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-7069725908344297198</id><published>2009-09-08T10:26:00.003+09:00</published><updated>2009-09-08T10:32:02.589+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Linuxで"-"ハイフンから始まるファイルの削除</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;今日は滅多に起こりえない"-"ハイフンから始まるファイルの削除について。&lt;br /&gt;&lt;br /&gt;そもそもハイフンから始まるファイルを作成する事はないと思います。&lt;br /&gt;&lt;pre&gt;$ touch -a&lt;br /&gt;touch: file arguments missing&lt;br /&gt;Try `touch --help' for more information.&lt;/pre&gt;&lt;br /&gt;ただ、vimでファイルを修正中などに&lt;br /&gt;&lt;pre&gt;:w -a&lt;/pre&gt;などとタイプミスすると、「-a」というファイルが出来上がってしまいます。&lt;br /&gt;&lt;pre&gt;$ ls -l&lt;br /&gt;total 64&lt;br /&gt;-rw-r--r--    1 user group    0 Sep  8 10:29 -a&lt;/pre&gt;&lt;br /&gt;これを頑張って削除しよとしても&lt;br /&gt;&lt;pre&gt;$ rm -a&lt;br /&gt;rm: invalid option -- a&lt;br /&gt;Try `rm --help' for more information.&lt;br /&gt;$ rm "-a"&lt;br /&gt;rm: invalid option -- a&lt;br /&gt;Try `rm --help' for more information.&lt;br /&gt;$ rm \-a&lt;br /&gt;rm: invalid option -- a&lt;br /&gt;Try `rm --help' for more information.&lt;/pre&gt;削除できません。&lt;br /&gt;&lt;br /&gt;そんな時は"--"ハイフン二つ付けて&lt;br /&gt;&lt;pre&gt;$ rm -- -a&lt;/pre&gt;とすれば削除できちゃうよ！&lt;br /&gt;というお話。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-7069725908344297198?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/7069725908344297198/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=7069725908344297198&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/7069725908344297198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/7069725908344297198'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/09/linux.html' title='Linuxで&quot;-&quot;ハイフンから始まるファイルの削除'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-7856620648418717262</id><published>2009-09-01T20:08:00.003+09:00</published><updated>2009-09-01T23:20:39.960+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>MySQLのCASE構文</title><content type='html'>どうも、俺＠残業中です。&lt;br /&gt;忘れないために備忘録。&lt;br /&gt;&lt;br /&gt;MySQLはCASE構文が使えるようになっています。&lt;br /&gt;&lt;pre&gt;mysql&gt; SELECT CASE WHEN 1=1 THEN 'true' ELSE 'FALSE' end;&lt;br /&gt;+--------------------------------------------+&lt;br /&gt;| case when 1=1 then 'true' else 'false' end |&lt;br /&gt;+--------------------------------------------+&lt;br /&gt;| true                                       |&lt;br /&gt;+--------------------------------------------+&lt;br /&gt;1 row in set (0.00 sec)&lt;/pre&gt;となります。&lt;br /&gt;&lt;br /&gt;構文は&lt;br /&gt;&lt;pre&gt;CASE WHEN &lt;条件式&gt; THEN &lt;真の場合&gt; ELSE &lt;偽の場合&gt; END;&lt;/pre&gt;です。&lt;br /&gt;&lt;br /&gt;応用して、例えば別テーブル（B）に自テーブル（A）を参照しているカラム（a_id）があり、BテーブルがAテーブルを参照しているデータを`refered`として取得する場合は&lt;br /&gt;&lt;pre&gt;mysql&gt; SELECT&lt;br /&gt;  CASE WHEN a_id&gt;0 THEN 'refered' ELSE 'no refered' END&lt;br /&gt;FROM A INNER JOIN B ON A.id=B.a_id;&lt;/pre&gt;で取得できます。&lt;br /&gt;&lt;br /&gt;さらに拡張して、AテーブルのデータがBテーブルに参照されていた場合に、Aテーブルの`refered`カラムを`refered`、そうでない場合を`no refered`と更新したい場合は&lt;br /&gt;&lt;pre&gt;mysql&gt; UPDATE A INNER JOIN B ON A.id=B.a_id&lt;br /&gt;  SET refered= CASE WHEN a_id &gt; 0 THEN 'refered' ELSE 'no refered' END;&lt;/pre&gt;のように、MySQLのUPDATE文＋JOIN句でできます。&lt;br /&gt;&lt;br /&gt;以上どえす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-7856620648418717262?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/7856620648418717262/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=7856620648418717262&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/7856620648418717262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/7856620648418717262'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/09/mysqlcase.html' title='MySQLのCASE構文'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-1276560039104063653</id><published>2009-08-20T18:24:00.005+09:00</published><updated>2009-08-20T21:21:31.145+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><title type='text'>MySQL5.1でfederatedエンジンを有効にする</title><content type='html'>こんにちわ、俺＠仕事中です。&lt;br /&gt;MySQL5.1.3のFederatedエンジンでハマりました（汗&lt;br /&gt;&lt;br /&gt;MySQL5.1でfederatedエンジンを有効にするには、configureオプションで&lt;br /&gt;&lt;pre&gt;# ./configure --with-plugins=max&lt;br /&gt;または&lt;br /&gt;# ./configure --with-plugins=federated&lt;br /&gt;または&lt;br /&gt;# ./configure --with-plugin-federated&lt;/pre&gt;としなければなりません。&lt;br /&gt;詳しくは&lt;br /&gt;&lt;pre&gt;# ./configure --help&lt;/pre&gt;で。&lt;br /&gt;&lt;br /&gt;上記でインストールしたのですが、&lt;br /&gt;&lt;pre&gt;# mysql&lt;br /&gt;mysql&gt; show engines;&lt;br /&gt;+------------+---------+--------------+------+------------+&lt;br /&gt;| Engine     | Support | Transactions | XA   | Savepoints |&lt;br /&gt;+------------+---------+--------------+------+------------+&lt;br /&gt;| MRG_MYISAM | YES     | NO           | NO   | NO         | &lt;br /&gt;| CSV        | YES     | NO           | NO   | NO         | &lt;br /&gt;| FEDERATED  | NO      | NULL         | NULL | NULL       | &lt;br /&gt;| MyISAM     | DEFAULT | NO           | NO   | NO         | &lt;br /&gt;| MEMORY     | YES     | NO           | NO   | NO         | &lt;br /&gt;+------------+---------+--------------+------+------------+&lt;br /&gt;5 rows in set (0.00 sec)&lt;/pre&gt;あれ？&lt;br /&gt;&lt;pre&gt;mysql&gt; show plugins;&lt;br /&gt;+------------+----------+----------------+---------+---------+&lt;br /&gt;| Name       | Status   | Type           | Library | License |&lt;br /&gt;+------------+----------+----------------+---------+---------+&lt;br /&gt;| binlog     | ACTIVE   | STORAGE ENGINE | NULL    | GPL     | &lt;br /&gt;| partition  | ACTIVE   | STORAGE ENGINE | NULL    | GPL     | &lt;br /&gt;| CSV        | ACTIVE   | STORAGE ENGINE | NULL    | GPL     | &lt;br /&gt;| FEDERATED  | DISABLED | STORAGE ENGINE | NULL    | GPL     | &lt;br /&gt;| MEMORY     | ACTIVE   | STORAGE ENGINE | NULL    | GPL     | &lt;br /&gt;| MyISAM     | ACTIVE   | STORAGE ENGINE | NULL    | GPL     | &lt;br /&gt;| MRG_MYISAM | ACTIVE   | STORAGE ENGINE | NULL    | GPL     | &lt;br /&gt;+------------+----------+----------------+---------+---------+&lt;br /&gt;7 rows in set (0.00 sec)&lt;/pre&gt;と、うんこな結果に。&lt;br /&gt;&lt;br /&gt;configureオプションを色々と変えて試してみてもダメ。さらにMySQLはmakeに結構な時間がかかるので、いちいち試してもいられない。&lt;br /&gt;&lt;br /&gt;という事で「ウンコー！」と叫びながら、mysqldを起動する際に&lt;br /&gt;&lt;pre&gt;# service mysqld start --federated&lt;/pre&gt;とやると、federatedエンジンが有効になりました。&lt;br /&gt;&lt;br /&gt;configureオプションは&lt;br /&gt;&lt;pre&gt;# ./configure --with-plugins=max&lt;br /&gt;または&lt;br /&gt;# ./configure --with-plugins=federated&lt;br /&gt;または&lt;br /&gt;# ./configure --with-plugin-federated&lt;/pre&gt;でOKでし。&lt;br /&gt;&lt;br /&gt;以上でええす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-1276560039104063653?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/1276560039104063653/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=1276560039104063653&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1276560039104063653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/1276560039104063653'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/08/mysql51federated.html' title='MySQL5.1でfederatedエンジンを有効にする'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-2154478992943081455</id><published>2009-08-19T18:50:00.003+09:00</published><updated>2009-08-19T19:14:40.702+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='openssl'/><title type='text'>opensslを使って秘密鍵と証明書の作成</title><content type='html'>どうも、俺＠仕事中。今日3度目の投稿です。&lt;br /&gt;&lt;br /&gt;linuxのopensslを使って秘密鍵とサーバ証明書を作成する場面に出くわしたのでメモります。&lt;br /&gt;&lt;br /&gt;まず適当なディレクトリ作成&lt;br /&gt;&lt;pre&gt;# mkdir /etc/ssl&lt;br /&gt;# cd /etc/ssl&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;サーバの秘密鍵を作成&lt;br /&gt;&lt;pre&gt;# openssl genrsa -out server.key 1024&lt;/pre&gt;&lt;br /&gt;署名要求書の作成&lt;br /&gt;&lt;pre&gt;# openssl req -new -key server.key -out server.csr&lt;br /&gt;----------&lt;br /&gt;Country Name (2 letter code) [GB]:JP　　// 国名&lt;br /&gt;State or Province Name (full name) [Berkshire]:Osaka　　// 県名&lt;br /&gt;Locality Name (eg, city) [Newbury]:Osaka　　// 市&lt;br /&gt;Organization Name (eg, company) [My Company Ltd]:XX.company　　// 会社名、所属組織名&lt;br /&gt;Organizational Unit Name (eg, section) []:develop　　// 会社の所属先&lt;br /&gt;&lt;font color=yellow&gt;Common Name (eg, your name or your server's hostname) []&lt;/font&gt;:koexuka.blogspot.com　　// サーバのホスト名&amp;nbsp;&lt;font color=red&gt;この値は超重要&lt;/font&gt;&lt;br /&gt;Email Address []:info@koexuka.blogspot.com　　// メアド&lt;br /&gt;A challenge password []:　　// パスワードいらなければそのままEnter&lt;br /&gt;An optional company name []:　　// これもEnter &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;通常はココで生成されたserver.csrをベリサインとかに送ってサイト証明書を発行してもらうのですが、今回はその処理も自サーバで行います。&lt;br /&gt;&lt;br /&gt;では、自サーバが認証局となったつもりで認証局の秘密鍵を作成します。&lt;br /&gt;&lt;pre&gt;# openssl genrsa -out ca.key 1024&lt;/pre&gt;&lt;br /&gt;認証局の証明書を作成します。&lt;br /&gt;&lt;pre&gt;# openssl req -new -x509 -days 3650 -key ca.key -out ca.crt&lt;br /&gt;----------&lt;br /&gt;Country Name (2 letter code) [GB]:JP&lt;br /&gt;State or Province Name (full name) [Berkshire]:Osaka&lt;br /&gt;Locality Name (eg, city) [Newbury]:Osaka&lt;br /&gt;Organization Name (eg, company) [My Company Ltd]:XX.company&lt;br /&gt;Organizational Unit Name (eg, section) []:develop&lt;br /&gt;&lt;font color=yellow&gt;Common Name (eg, your name or your server's hostname) []&lt;/font&gt;:www.koexuka.blogspot.com&lt;br /&gt;　　// &lt;font color=red&gt;ココが上で要求証明書を作成したときのホスト名と違う必要があります&lt;/font&gt;&lt;br /&gt;Email Address []:info@koexuka.blogsport.com&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;これで認証局側の鍵(ca.key)と証明書(ca.crt)ができました。&lt;br /&gt;&lt;br /&gt;認証局となったつもりは終わって、通常のサーバに戻ります。&lt;br /&gt;シリアルを作成します。&lt;br /&gt;&lt;pre&gt;# echo 01 &gt; serial.txt&lt;/pre&gt;&lt;br /&gt;認証局証明書付き自サーバ証明書の作成&lt;br /&gt;&lt;pre&gt;# openssl x509 -CA ca.crt -CAkey ca.key -CAserial serial.txt -req -days 3650 -in server.scr -out server.crt&lt;/pre&gt;これで自サーバ証明書(server.crt)ができました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;めでたし、めでたし！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-2154478992943081455?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/2154478992943081455/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=2154478992943081455&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/2154478992943081455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/2154478992943081455'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/08/openssl.html' title='opensslを使って秘密鍵と証明書の作成'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-53126284383887653</id><published>2009-08-19T17:19:00.003+09:00</published><updated>2009-08-19T17:31:44.491+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='dovecot'/><title type='text'>dovecotで'Support not compiled in for passdb drive 'pam''が出る</title><content type='html'>こんちわ、俺＠また仕事中です。&lt;br /&gt;dovecotを入れて起動させたら、タイトルの通り&lt;br /&gt;&lt;pre&gt;Aug 19 17:02:01 dovecot: Info: Dovecot v1.2.4 starting up (core dumps disabled)&lt;br /&gt;Aug 19 17:02:01 auth(default): Fatal: Support not compiled in for passdb driver 'pam'&lt;br /&gt;Aug 19 17:02:01 dovecot: Fatal: Auth process died too early - shutting down&lt;/pre&gt;というエラーが発生しました。&lt;br /&gt;&lt;br /&gt;OSはCentOS5.3&lt;br /&gt;dovecotはdovecot-1.2.4です。&lt;br /&gt;&lt;br /&gt;エラー内容は、適当和訳すると「passdbドライバーの'pam'は、コンパイルをサポートしていません？」みたいな感じか。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;$ /usr/local/sbin/dovecot --build-options&lt;/pre&gt;と打ってみると&lt;br /&gt;&lt;pre&gt;Build options: ioloop=epoll notify=inotify ipv6 openssl&lt;br /&gt;Mail storages: cydir dbox maildir mbox raw shared&lt;br /&gt;SQL drivers:&lt;br /&gt;Passdb: checkpassword passwd passwd-file shadow&lt;br /&gt;Userdb: nss passwd passwd-file prefetch static&lt;/pre&gt;とあったので、&lt;br /&gt;&lt;pre&gt;$ vim /usr/local/etc/dovecot.conf&lt;/pre&gt;でdovecot.confを開き&lt;br /&gt;&lt;pre&gt;#passdb pam {　　// passdb pamの行をコメントアウト&lt;br /&gt;passdb shadow {　　// passdb shadowに書き換え&lt;/pre&gt;でちゃんと起動しました。&lt;br /&gt;↑はコメントアウトだけでも良いですね。&lt;br /&gt;&lt;br /&gt;英語力のなさを感じました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-53126284383887653?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/53126284383887653/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=53126284383887653&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/53126284383887653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/53126284383887653'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/08/dovecotsupport-not-compiled-in-for.html' title='dovecotで&apos;Support not compiled in for passdb drive &apos;pam&apos;&apos;が出る'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-7930274038026447997</id><published>2009-08-19T10:20:00.004+09:00</published><updated>2009-08-19T10:29:12.725+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>`ls`コマンドでの色についてメモ</title><content type='html'>こんにちわ、俺＠仕事中です。&lt;br /&gt;今日はLinuxサーバのターミナルで&lt;br /&gt;&lt;pre&gt;$ ls --color&lt;/pre&gt;した時の色の設定についてメモします。&lt;br /&gt;&lt;br /&gt;色表示はデフォルトでは「/etc/DIR_COLORS」に書かれているものを読み込んで決めている（？）そうなのですが、たまにサーバによって「いつもと色がちゃうやないか！」て事があります。&lt;br /&gt;&lt;br /&gt;気にしない人はそれでも良いのですが、&lt;br /&gt;気になる人はログインユーザの~/.bashrc（または~/.tcshrc）に&lt;br /&gt;&lt;pre&gt;$ vim ~/.bashrc&lt;br /&gt;LS_COLORS='色の設定いろいろ'&lt;br /&gt;export LS_COLORS&lt;/pre&gt;を書けばよかです。&lt;br /&gt;&lt;br /&gt;LS_COLORSの内容は&lt;br /&gt;&lt;pre&gt;$ dircolos -b&lt;/pre&gt;したものをコピペでOKです。&lt;br /&gt;※-bオプションはBシェル用。-cオプションはCシェル用。&lt;br /&gt;&lt;br /&gt;拡張子毎の色設定や、ファイルタイプ毎の色設定が可能です。&lt;br /&gt;例えば、通常ファイルの色を白にする場合は&lt;br /&gt;&lt;pre&gt;fi=00:&lt;/pre&gt;です。&lt;br /&gt;ディレクトリの色を文字色黒、背景色緑にする場合は&lt;br /&gt;&lt;pre&gt;di=30;42:&lt;/pre&gt;です。&lt;br /&gt;拡張子tarの色を太い赤文字にする場合は&lt;br /&gt;&lt;pre&gt;*.tar=01;31:&lt;/pre&gt;です。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;以上でぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-7930274038026447997?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/7930274038026447997/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=7930274038026447997&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/7930274038026447997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/7930274038026447997'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/08/ls.html' title='`ls`コマンドでの色についてメモ'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-3031357671102298073</id><published>2009-08-05T11:23:00.007+09:00</published><updated>2009-08-05T11:31:22.152+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>sshでログインできない</title><content type='html'>俺＠仕事中です。&lt;br /&gt;今日はインストール直後のサーバにSSHログイン出来なかった場合の起こりうるミスについてメモります。&lt;br /&gt;※実際おこりました、、。&lt;br /&gt;&lt;br /&gt;サーバ側の/var/log/messagesに&lt;br /&gt;&lt;pre&gt;# less /var/log/messages&lt;br /&gt;Aug  5 11:14:17 data1 sshd(pam_unix)[15652]: authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=xxx-xxx-xxx-x.yyy.yy-yyyyy.yy.jp  user=foouser&lt;br /&gt;Aug  5 11:14:30 data1 sshd(pam_unix)[15654]: authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=xxx-xxx-xxx-x.yyy.yy-yyyyy.yy.jp  user=foouser&lt;br /&gt;Aug  5 11:14:56 data1 sshd(pam_unix)[15657]: authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=xxx-xxx-xxx-x.yyy.yy-yyyyy.yy.jp  user=foouser&lt;/pre&gt;&lt;br /&gt;/var/log/secureに&lt;br /&gt;&lt;pre&gt;# less /var/log/secure&lt;br /&gt;Aug  5 11:14:17 data1 sshd[15652]: User foouser not allowed because not listed in AllowUsers&lt;/pre&gt;が出てる時。&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# vim /etc/ssh/sshd_config&lt;br /&gt;AllowUsers allowedusername foouser # ←foouserを追加&lt;/pre&gt;して&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;# service sshd reload&lt;/pre&gt;したらログインできます。&lt;br /&gt;&lt;br /&gt;以上どぇぇぇす。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-3031357671102298073?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/3031357671102298073/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=3031357671102298073&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3031357671102298073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/3031357671102298073'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/08/ssh.html' title='sshでログインできない'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-330482920020173059</id><published>2009-08-04T15:48:00.005+09:00</published><updated>2009-08-06T14:20:46.422+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>rsyncの設定（rsyncd.confなど）</title><content type='html'>どうも、俺＠仕事中です。&lt;br /&gt;今日は超基本中の基本ですが、rsyncの設定・使い方についてメモります。&lt;br /&gt;&lt;br /&gt;rsyncはほとんどのLinuxに標準でインストールされている、ファイル転送用？コマンドです。&lt;br /&gt;オプションも色々用意されていて、バックアップやミラーリングなどに便利です。&lt;br /&gt;&lt;a href="http://www.infoscience.co.jp/technical/rsync/"&gt;http://www.infoscience.co.jp/technical/rsync/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;僕の利用しているLinuxディストリはCentOs4.7です。&lt;br /&gt;rsyncコマンドはインストールされているものとします。&lt;br /&gt;&lt;br /&gt;rsyncデーモン側（rsyncd）で/etc/rsyncd.confという設定ファイルを作成します。&lt;br /&gt;&lt;pre&gt;# vim /etc/rsyncd.conf&lt;br /&gt;----------------&lt;br /&gt;hosts allow = 127.0.0.1 192.168.1.0/24 // ←許可するrsyncクライアントIP&lt;br /&gt;hosts deny = * // ←拒否するrsyncクライアントIP　＊は全て&lt;br /&gt;use chroot = false // ←chrootするかどうか。trueの場合は `path = /PATH`で指定したパスでchrootする&lt;br /&gt;read only = false // ←read-onlyにするかどうか。trueの場合はクライアント側からのアップロードができない&lt;br /&gt;[my_module_name] // ←モジュール名 モジュール毎に細かい設定をする場合&lt;br /&gt;uid = nobody // ←モジュールでのユーザ名&lt;br /&gt;gid = nobody // ←モジュールでのグループ名&lt;br /&gt;path = / // ←デフォルトのパス&lt;br /&gt;comment = this is comment. // ←コメント&lt;/pre&gt;で、rsyncdを再起動します。&lt;br /&gt;&lt;pre&gt;# service xinetd restart&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;では、実際にrsyncコマンドを使う場合は&lt;br /&gt;&amp;lt;サーバA&amp;gt;クライアントIP（192.168.1.1）&lt;br /&gt;&amp;lt;サーバB&amp;gt;デーモンIP（192.168.1.2）&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;サーバA&lt;br /&gt;$ rsync -avz /home/from/data/ 192.168.1.2::my_module_name/home/to/data/&lt;/pre&gt;&lt;br /&gt;でサーバA(/home/from/data)からサーバB(/home/to/data)へファイルが転送されます。&lt;br /&gt;書式は&lt;br /&gt;&lt;pre&gt;$ rsync [OPTION] 転送元PATH 転送先IP:[:モジュール名]転送先PATH&lt;/pre&gt;です。&lt;br /&gt;ちなみにサーバAで&lt;br /&gt;/home/from/data/とするのと/home/from/dataとするので動作が違うので要注意です。&lt;br /&gt;&lt;br /&gt;/home/from/data/（スラッシュあり）の場合は、/data内のファイルだけが&lt;br /&gt;/home/from/data（スラッシュなし）の場合は、/data内のファイルと/dataディレクトリ自体が&lt;br /&gt;転送の対象となります。&lt;br /&gt;&lt;br /&gt;以上どぇぇ～す。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-330482920020173059?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/330482920020173059/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=330482920020173059&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/330482920020173059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/330482920020173059'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/08/rsyncrsyncdconf.html' title='rsyncの設定（rsyncd.confなど）'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2069020994556954437.post-9102824150703130087</id><published>2009-07-31T15:26:00.018+09:00</published><updated>2009-08-01T03:54:30.359+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ZendFramework'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><title type='text'>Zend_Db_Tableでリレーションの作成</title><content type='html'>どうも俺＠仕事中です。&lt;br /&gt;相変わらずZendFramework使っています。多分11月くらいまで。。。&lt;br /&gt;今日はZend_Db_Tableでリレーション（テーブル間の関連）を表す方法をメモします。&lt;br /&gt;&lt;br /&gt;サンプルDB（MySQL）として、スレッド型掲示板を作ります。&lt;br /&gt;&lt;pre&gt;CREATE TABLE user (&lt;br /&gt;　id INTEGER AUTO_INCREMENT PRIMARY KEY,&lt;br /&gt;　name&lt;br /&gt;);&lt;br /&gt;CREATE TABLE thread (&lt;br /&gt;　id INTEGER AUTO_INCREMENT PRIMARY KEY,&lt;br /&gt;　user_id INTEGER,&lt;br /&gt;  body TEXT&lt;br /&gt;);&lt;br /&gt;CREATE TABLE reply (&lt;br /&gt;　id INTEGER AUTO_INCREMENT PRIMARY KEY,&lt;br /&gt;　user_id INTEGER,&lt;br /&gt;　thread_id ITNEGER,&lt;br /&gt;　body TEXT&lt;br /&gt;);&lt;/pre&gt;&lt;br /&gt;リレーションは大まかに&lt;br /&gt;user←thread←reply&lt;br /&gt;という感じです。&lt;br /&gt;replyテーブルはuser_idを持ちます。&lt;br /&gt;&lt;br /&gt;この場合のZend_Db_Tableは&lt;br /&gt;&lt;pre&gt;&lt;font color="fuchsia"&gt;&amp;lt;?php&lt;/font&gt;&lt;br /&gt;&lt;font color="lime"&gt;class&lt;/font&gt; User &lt;font color="lime"&gt;extends&lt;/font&gt; Zend_Db_Table &lt;font color="fuchsia"&gt;{&lt;/font&gt;&lt;br /&gt;　&lt;font color="lime"&gt;protected&lt;/font&gt; &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;_dependentTables&lt;/font&gt; &lt;font color="yellow"&gt;=&lt;/font&gt; &lt;font color="lime"&gt;array&lt;/font&gt;&lt;font color="fuchsia"&gt;(&lt;/font&gt;&lt;br /&gt;　　　　"Thread","Reply"&lt;font color="fuchsia"&gt;)&lt;/font&gt;;　// ThreadクラスとReplyクラスに参照されている&lt;br /&gt;&lt;font color="fuchsia"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="lime"&gt;class&lt;/font&gt; Thread &lt;font color="lime"&gt;extends&lt;/font&gt; Zend_Db_Table &lt;font color="fuchsia"&gt;{&lt;/font&gt;&lt;br /&gt;　&lt;font color="lime"&gt;protected&lt;/font&gt; &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;_dependentTables&lt;/font&gt; &lt;font color="yellow"&gt;=&lt;/font&gt; &lt;font color="lime"&gt;array&lt;/font&gt;&lt;font color="fuchsia"&gt;(&lt;/font&gt;&lt;br /&gt;　　　　"Reply"&lt;font color="fuchsia"&gt;)&lt;/font&gt;;　// Replyクラスに参照されている&lt;br /&gt;　protected &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;_referenceMap&lt;/font&gt; &lt;font color="yellow"&gt;=&lt;/font&gt; &lt;font color="lime"&gt;array&lt;/font&gt;&lt;font color="fuchsia"&gt;(&lt;/font&gt;&lt;br /&gt;　　　　"User" &lt;font color="yellow"&gt;=&gt;&lt;/font&gt; &lt;font color="lime"&gt;array&lt;/font&gt;&lt;font color="fuchsia"&gt;(&lt;/font&gt;　// Userクラスを参照している(`Usre`は何でも可)&lt;br /&gt;　　　　　　　　"columns" &lt;font color="yellow"&gt;=&gt;&lt;/font&gt; &lt;font color="lime"&gt;array&lt;/font&gt;&lt;font color="fuchsia"&gt;(&lt;/font&gt;"user_id"&lt;font color="fuchsia"&gt;)&lt;/font&gt;,　// user_idが外部キー&lt;br /&gt;　　　　　　　　"refTableClass" &lt;font color="yellow"&gt;=&gt;&lt;/font&gt; "User",　// 参照先クラス名はUser&lt;br /&gt;　　　　　　　　"refColumns" &lt;font color="yellow"&gt;=&gt;&lt;/font&gt; &lt;font color="lime"&gt;array&lt;/font&gt;&lt;font color="fuchsia"&gt;(&lt;/font&gt;"id"&lt;font color="fuchsia"&gt;)&lt;/font&gt;,　// 参照先のキーはid&lt;br /&gt;　　　　　　　　"onDelete" &lt;font color="yellow"&gt;=&gt;&lt;/font&gt; &lt;font color="lime"&gt;self&lt;/font&gt;&lt;font color="yellow"&gt;::&lt;/font&gt;RESTRICT,　// Userが削除されてもThreadは削除しない&lt;br /&gt;　　　　　　　　"onUpdate" &lt;font color="yellow"&gt;=&gt;&lt;/font&gt; &lt;font color="lime"&gt;self&lt;/font&gt;&lt;font color="yellow"&gt;::&lt;/font&gt;CASCADE　// Userが更新されたらThreadmo更新する&lt;br /&gt;　　　　　　　　&lt;font color="fuchsia"&gt;)&lt;/font&gt;&lt;br /&gt;　　　　&lt;font color="fuchsia"&gt;)&lt;/font&gt;;&lt;br /&gt;&lt;font color="fuchsia"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="lime"&gt;class&lt;/font&gt; Reply &lt;font color="lime"&gt;extends&lt;/font&gt; Zend_Db_Table &lt;font color="fuchsia"&gt;{&lt;/font&gt;&lt;br /&gt;　&lt;font color="lime"&gt;protected&lt;/font&gt; &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;_referenceMap&lt;/font&gt; &lt;font color="yellow"&gt;=&lt;/font&gt; &lt;font color="lime"&gt;array&lt;/font&gt;&lt;font color="fuchsia"&gt;(&lt;/font&gt;&lt;br /&gt;　　　　"User" &lt;font color="yellow"&gt;=&gt;&lt;/font&gt; &lt;font color="lime"&gt;array&lt;/font&gt;&lt;font color="fuchsia"&gt;(&lt;/font&gt;&lt;br /&gt;　　　　　　　　"columns" &lt;font color="yellow"&gt;=&gt;&lt;/font&gt; &lt;font color="lime"&gt;array&lt;/font&gt;&lt;font color="fuchsia"&gt;(&lt;/font&gt;"user_id"&lt;font color="fuchsia"&gt;)&lt;/font&gt;,&lt;br /&gt;　　　　　　　　"refTableClass" &lt;font color="yellow"&gt;=&gt;&lt;/font&gt; "User",&lt;br /&gt;　　　　　　　　"refColumns" &lt;font color="yellow"&gt;=&gt;&lt;/font&gt; &lt;font color="lime"&gt;array&lt;/font&gt;&lt;font color="fuchsia"&gt;(&lt;/font&gt;"id"&lt;font color="fuchsia"&gt;)&lt;/font&gt;,&lt;br /&gt;　　　　　　　　"onDelete" &lt;font color="yellow"&gt;=&gt;&lt;/font&gt; &lt;font color="lime"&gt;self&lt;/font&gt;&lt;font color="yellow"&gt;::&lt;/font&gt;RESTRICT,&lt;br /&gt;　　　　　　　　"onUpdate" &lt;font color="yellow"&gt;=&gt;&lt;/font&gt; &lt;font color="lime"&gt;self&lt;/font&gt;&lt;font color="yellow"&gt;::&lt;/font&gt;CASCADE&lt;br /&gt;　　　　　　　　&lt;font color="fuchsia"&gt;)&lt;/font&gt;,&lt;br /&gt;　　　　"Thread" &lt;font color="yellow"&gt;=&gt;&lt;/font&gt; &lt;font color="lime"&gt;array&lt;/font&gt;&lt;font color="fuchsia"&gt;(&lt;/font&gt;&lt;br /&gt;　　　　　　　　"columns" &lt;font color="yellow"&gt;=&gt;&lt;/font&gt; &lt;font color="lime"&gt;array&lt;/font&gt;&lt;font color="fuchsia"&gt;(&lt;/font&gt;"thread_id"&lt;font color="fuchsia"&gt;)&lt;/font&gt;,&lt;br /&gt;　　　　　　　　"refTableClass" &lt;font color="yellow"&gt;=&gt;&lt;/font&gt; "Thread",&lt;br /&gt;　　　　　　　　"refColumns" &lt;font color="yellow"&gt;=&gt;&lt;/font&gt; &lt;font color="lime"&gt;array&lt;/font&gt;&lt;font color="fuchsia"&gt;(&lt;/font&gt;"id"&lt;font color="fuchsia"&gt;)&lt;/font&gt;,&lt;br /&gt;　　　　　　　　"onDelete" &lt;font color="yellow"&gt;=&gt;&lt;/font&gt; &lt;font color="lime"&gt;self&lt;/font&gt;&lt;font color="yellow"&gt;::&lt;/font&gt;CASCADE,&lt;br /&gt;　　　　　　　　"onUpdate" &lt;font color="yellow"&gt;=&gt;&lt;/font&gt; &lt;font color="lime"&gt;self&lt;/font&gt;&lt;font color="yellow"&gt;::&lt;/font&gt;CASCADE&lt;br /&gt;　　　　　　　　&lt;font color="fuchsia"&gt;)&lt;/font&gt;&lt;br /&gt;　　　　&lt;font color="fuchsia"&gt;)&lt;/font&gt;;&lt;br /&gt;&lt;font color="fuchsia"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;となります。&lt;br /&gt;要は&lt;br /&gt;&lt;pre&gt;&lt;font color="lime"&gt;protected&lt;/font&gt; &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;_dependentTables&lt;/font&gt; &lt;font color="yellow"&gt;=&lt;/font&gt; &lt;font color="lime"&gt;array&lt;/font&gt;&lt;font color="fuchsia"&gt;()&lt;/font&gt;;&lt;/pre&gt;で参照してきているクラス名&lt;br /&gt;&lt;pre&gt;&lt;font color="lime"&gt;protected&lt;/font&gt; &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;_referenceMap&lt;/font&gt; &lt;font color="yellow"&gt;=&lt;/font&gt; &lt;font color="lime"&gt;array&lt;/font&gt;&lt;font color="fuchsia"&gt;()&lt;/font&gt;;&lt;/pre&gt;で参照しているクラス名&lt;br /&gt;を記す事になります。&lt;br /&gt;&lt;br /&gt;ではUserオブジェクトから参照されているThread（またはReply）を取得するには&lt;br /&gt;&lt;pre&gt;&lt;font color="fuchsia"&gt;&amp;lt;?php&lt;/font&gt;&lt;br /&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;thread_rowset&lt;/font&gt; &lt;font color="yellow"&gt;=&lt;/font&gt; &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;user&lt;/font&gt;&lt;font color="lime"&gt;-&gt;&lt;/font&gt;findDependentRowset&lt;font color="fuchsia"&gt;(&lt;/font&gt;"Thread"&lt;font color="fuchsia"&gt;)&lt;/font&gt;;&lt;br /&gt;または&lt;br /&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;thread_rowset&lt;/font&gt; &lt;font color="yellow"&gt;=&lt;/font&gt; &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;user&lt;/font&gt;&lt;font color="lime"&gt;-&gt;&lt;/font&gt;findThread&lt;font color="fuchsia"&gt;()&lt;/font&gt;;&lt;/pre&gt;となります。&lt;br /&gt;&lt;br /&gt;Relpyオブジェクトから参照しているUser（またはThread）を取得するには&lt;br /&gt;&lt;pre&gt;&lt;font color="fuchsia"&gt;&amp;lt;?php&lt;/font&gt;&lt;br /&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;user&lt;/font&gt; &lt;font color="yellow"&gt;=&lt;/font&gt; &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;reply&lt;/font&gt;&lt;font color="lime"&gt;-&gt;&lt;/font&gt;findParentRow&lt;font color="fuchsia"&gt;(&lt;/font&gt;"User"&lt;font color="fuchsia"&gt;)&lt;/font&gt;;&lt;br /&gt;または&lt;br /&gt;&lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;user&lt;/font&gt; &lt;font color="yellow"&gt;=&lt;/font&gt; &lt;font color="yellow"&gt;$&lt;/font&gt;&lt;font color="aqua"&gt;reply&lt;/font&gt;&lt;font color="lime"&gt;-&gt;&lt;/font&gt;findParentUser&lt;font color="fuchsia"&gt;()&lt;/font&gt;;&lt;/pre&gt;となります。&lt;br /&gt;&lt;br /&gt;ん～、ZendFrameworkなかなかイイねー。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2069020994556954437-9102824150703130087?l=koexuka.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://koexuka.blogspot.com/feeds/9102824150703130087/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2069020994556954437&amp;postID=9102824150703130087&amp;isPopup=true' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/9102824150703130087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2069020994556954437/posts/default/9102824150703130087'/><link rel='alternate' type='text/html' href='http://koexuka.blogspot.com/2009/07/zenddbtable.html' title='Zend_Db_Tableでリレーションの作成'/><author><name>ちひろ＠WEB</name><uri>http://www.blogger.com/profile/05360062972472036149</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
