2006年11月20日月曜日

「Windowsはフォーマットを完了できませんでした」というエラーが出る


楽天で買った激安USBメモリ(512MB)がおかしくなってしまいました。



買った当日は普通に使えてたんですが、翌日、再度使おうとするとエラーが。
USBポートにUSBメモリを差し込むと認識はするんですが、アクセスすると「フォーマットしてください」と言われてしまいます。大して大事なデータは入れてなかったので指示に従ってフォーマットしようとするものの「Windowsはフォーマットを完了できませんでした」というエラーが出てしまってフォーマットができない。どういうことだ??




コマンドプロンプトからchkdskしてみると、「RAWデバイスではchkdskは使えません」みたいな感じのことを言われました。よくわからないけど、なんだかやばそうな雰囲気。。



ここで「Windowsはフォーマットを完了できませんでした」でググってみたところ、フロッピーディスクやハードディスクで同じような症状が報告されている。どうやらフォーマットが物理的におかしいらしいです。



HDDでの事例だったんですが、Disk Formatterというソフトを使えば物理フォーマットができるというので、さっそく試してみます。
http://buffalo.jp/download/driver/hd/format.html



インストールして起動し、USBメモリを選択。「物理フォーマットもする」をチェックしてフォーマットを実行すると、2分くらいでフォーマットが完了しました。
このままだとFAT16になってるようなので、マイコンピュータからUSBメモリをFAT32でフォーマット。すると今度はフォーマットが成功し、普通にデータの入出力ができるようになりました。ふぅ。



買った早々にぶっ壊れたかなー、と思って心配でしたが、復活して良かったです。めでたしめでたし。

2006年11月11日土曜日

apache2にmod_deflateを導入


mod_deflateを導入しました。
概要や導入方法は下記が参考になります。
http://www.atmarkit.co.jp/flinux/rensai/apache2_04/apache04a.html



上記ページの通りにapacheを再コンパイル、インストール。設定をして再起動。。。



IEからアクセスしてみると、体感で少し速くなってる気がします。
そしてdeflateのログを見ても圧縮されてる様子。
また、



http://www.port80software.com/support/p80tools



↑で調べてみても「is gziped.」と出ます。う~ん、意外とスンナリ導入できたなぁ。



、、、と思ったんですが、困ったことにhtmlの圧縮はされてるけれど、cssやrdf、xmlが圧縮されていません。
cssやrdf、xmlって意外とアクセスが多いので、これはぜひとも圧縮したいところ。というわけで設定を見直します。



httpd.confをいじっては試し、いじっては試し、、、で動作を確認していくと、@ITに書いてある設定方法がおかしいことがわかりました。



http://d.hatena.ne.jp/kudzu/20060720/1153412166



↑こちらのページでも指摘していますが、「SetEnv gzip-only-text/html 1」があると、「AddOutputFilterByType」で個別に圧縮対象のContent-Typeを指定してもすべてかき消され、text/htmlだけしか圧縮されなくなるようです。




いろいろ試してみましたが、正解はここに書いてある通り。
http://cvs.apache.jp/svn/httpd-docs/2.0/manual/mod/mod_deflate.xml.ja



「せっかちな人向けの簡単な設定例」をそのまんま使えばOKです。
最終的にこんな感じにしました。



<IfModule mod_deflate.c>
DeflateCompressionLevel 5
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/rdf+xml

#DeflateFilterNote Input instream
#DeflateFilterNote Output outstream
#DeflateFilterNote Ratio ratio
#LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%) %{User-agent}i' deflate
#CustomLog logs/deflate_log deflate
</IfModule>



これでcssやjs、rdf、xmlなども圧縮されて転送されるようになりました。モチロン、gifやjpgなどの画像は圧縮されません。
あと、ブラウザごとに細かく設定しようかとも思いましたが、面倒なのでやめました(^-^A



mod_deflate、とりあえず今のところは軽快に動いているようです。手軽に導入できて回線リソースの節約になるので、時間のある人は試してみるといいかもしれません。

2006年11月7日火曜日

PEARのPagerクラスを使う


「前へ 1 2 3 4 5 6 7 8 9 10 次へ」



↑こういう感じのページナビゲーション、いわゆるページング処理を手軽に実装できるのがPEAR::Pagerです。実際使ってみたんですが、かなり便利です。



基本的な使い方は「pear pager」などでググると有用なページがいくつも見つかるのでそちらを参考にするといいと思います。というよりもむしろ実際に試して体で覚えるのがいいと思います。すごく簡単なので。



ちなみにこのページング処理、検索エンジン対策としてPATH_INFOにも対応できるといいな、、、って思っていたら、やってる方がいました。



http://project-p.jp/halt/anubis/blog_show/469



こちらを参考に実装してみました。



<?php

/*** pager.php ***/

//PATH_INFOから現在のページを取得
$tpath = explode("/", $_SERVER['PATH_INFO']);
array_shift($tpath);
if($tpath[0]){ $current_page = $tpath[0]; }else{ $current_page = 1; }


require('Pager/Pager.php');
require('Smarty/Smarty.class.php');

$smarty = new Smarty;
$smarty->template_dir = './smarty/template';
$smarty->compile_dir  = './smarty/template_c';


//ページング処理
$params = array(
    "perPage" => 5,
    "totalItems" => 100,
    'mode' => 'Sliding',
    'delta' => 2,
    'path' => 'http://localhost/pager/',
    'currentPage' => $current_page,
    'fileName' => '%d',
    'append' => false,
    'altPrev' => '前のページ',
    'altNext' => '次のページ',
    'altPage' => 'ページ',
    'firstPageText' => '最初',
    'altFirst' => '最初',
    'lastPageText' => '最後',
    'altLast' => '最後',
    'extraVars' => array("a" => 1),
    'showAllText' => 'show all',
    'importQuery' => true
    );
$pager = Pager::factory($params);
$navi = $pager->getLinks();
$smarty->assign("pageNavi",$navi['all']);

$smarty->display("pager.tpl");

?>



{** pager.tpl **}

<html>
<body>

{$pageNavi}

</body>
</html>


実は extraVars とか、いまいち動作がよく分からない変数があるんですが、その辺はあまり深く追求せずに使ってます。こういうのは自作しないでライブラリ使ったほうが絶対いいので、一度試してみる価値はあると思います。

2006年11月1日水曜日

MySQLのvarchar型はwhereやorderでは大文字小文字を区別しない


php+mysqlのウェブアプリ開発をしてて、where句でIDの検索をしても大文字小文字が区別されずに検索されてしまうことに気付きました。で、調べてみたところそういう仕様なんだそうです。全然知らなかった。。



http://www.physalis.net/ss/space/blog/5;jsessionid=C508160EDC0E3E5E1752A8EADA04D819



ふーむ、まったく知らなかった。



ちなみに解決策はvarchar型にbinary属性を指定すること。phpMyAdmin(2.7)だと「表示する」って項目のセレクトボックスにあります。こいつを選択してやればbinary属性付加が完了。検索で大文字小文字の違いが区別されるようになります。

2006年10月26日木曜日

patchコマンドでパッチを適用する


誰もが当たり前のように使っているpatchコマンド。分かってるようで実は意外と分かってなかったりします。

http://x68000.q-e-d.net/~68user/unix/pickup?patch

こちらのページでpatchコマンドの使い方、つまりパッチ適用のやり方が丁寧に説明されており、参考になります。


それとpatchコマンドはWindowsでも使えます。その解説は下記のページが参考になります。



http://www.koikikukan.com/archives/2006/01/22-235056.php

それからこちらのサイトではpatchコマンドでよく使われる「-p」オプションについても詳しく説明されています。

http://www.koikikukan.com/archives/2006/02/17-235135.php

2006年10月20日金曜日

MySQLチューニングアドバイスツール「mMeasure」


こちらのブログ記事で、MySQLのチューニングアドバイスツール「mMeasure」というものがあることを知りました。



http://www.multiburst.net/project-multiburst/archives/2006/07/31/1119.php




MySQLは仕事でも個人でもバリバリ使ってるのでさっそく導入してみました。



インストール方法は上記のページで詳しく解説されているので割愛します。



インストールは無事完了し、早速稼動開始。



mMeasureが生成するウェブページではMySQLの設定情報や負荷状況がグラフにて分かりやすく見ることができ、また設定と負荷に応じたチューニングのアドバイスも表示されます。



それから1日1回、チューニングアドバイスメールがmMeasureから自動で送信されます。
たとえばこんな感じ。



--------------------------------------



【最大接続率】 6.00 %
 最大接続数に対してmax_connectionsの設定が大きすぎます。



【テーブルキャッシュ使用率】 100.00 %
 table_cacheのサイズを増やすことで性能が改善します。



--------------------------------------




これまでmy.cnfの値をいじることは何度かありましたが、それが果たして正しいのかどうかまで調べるに至っていませんでした。それをmMeasureがやってくれるので、これはすごく助かります。(mMeasureのアドバイスは絶対に正しい、というわけではありませんが)



ウェブアプリのパフォーマンスが悪いなぁ、と感じている方、MySQLのチューニングをやってみたいと思う方、mMeasureを使ってみるといいかもしれません。

2006年10月19日木曜日

Zend Optimizerを導入した


もともと有償だった(と思う)Zend Optimizerが、いつの間にか無償になっていました。調べてみるとかなり手軽に導入できるようなので、早速導入してみます。



具体的な手順は他のサイトが詳しいので割愛します。ていうかむちゃくちゃカンタンです。インストールは対話形式だし。あっという間に導入完了です。
さらに、ご丁寧にもインストーラーがapacheの再起動までやってくれちゃいます。



インストールが完了したので、さっそくチェック。
phpinfoを見ると、powered byのとこに「 with Zend Optimizer v3.0.1, Copyright (c) 1998-2006, by Zend Technologies」が追加されてる。また、Configureの項にも「Zend Optimizer」が追加されてるのを確認。どうやらうまく導入できたようです。



早速、Zend Optimizerの効果のほどを体感してみます。
自分のサイトはほぼすべてのページがphpだったり、htmlにphpを埋め込んであるため「最大で40%の高速化が見込める」というZend Optimizerが機能すれば体感速度はかなり速くなるはず。。。というわけで、自分のサイト内を徘徊してみます。




・・・速くなってる。気がする。。。




そのとき同時にアクセスしてる人数とか、ネットワークの調子とか、いろんな要素が介在するのでZend Optimizerがどのくらい効果があったのかははっきりは分かりません^-^; でも結構速くなってる気がします。(こういう場合、Apache benchとかで導入前・導入後で測定したりすればいいんだろうか?)




何はともあれ、特に害もないようですし、手軽なのでphp使ってる人はぜひ導入するといいと思います。



 




P.S.
ローカルにもZend Optimizer入れてみよう。っと思ってxamppで動いてるphpに組み込もうと思ったんですが、既にデフォルトで入ってました。php.iniのZend Optimizer関連の設定のコメントアウトをはずすだけです。
ついでにeAccelerator(これも高速化のモジュール)などもxampp標準で入ってるみたいです。うーん、xamppすごい。



 



参考ページ:
http://www.zend.co.jp/
http://vine.1-max.net/zend.html
http://gigazine.net/index.php?/news/comments/20060701_loadavarage_battle/