2009年10月22日木曜日

一括してファイルの文字コードを検出する方法



Windows環境でファイルを操作し、Linux環境へファイルをアップロードする時に


意図せず、Shift_JIS ファイルをアップして文字化けしてしまったことありませんか?


実行時に簡単に分かる箇所ならテストすれば気がつきますが


アスキーコードだけで書かれた関数やクラスのファイルだったりすると、


エンコード問題が出ることは少ないので見落としがちです。


いちいちファイルを開いて確認するのは大変なので、一括して文字コードを確認する方法がないかと調べていたらありました。


以下のコマンドでOK。



find -name '*.php' | xargs nkf --guess


ファイル名と文字コードの一覧が表示されます。





ちなみに、一括して文字コードを変換することもできます。



# UTF-8 に変換
find -name '*.php' | xargs nkf --overwrite -w

# EUC-JP に変換
find -name '*.php' | xargs nkf --overwrite -e





【参考】 文字コード変換コマンドnkfの使い方まとめ





2009年9月8日火曜日

suPHPの設定でうまく動作しない時



【環境】


CentoOS5.3


Apache2.2.8


mod_suphp-0.7.0-1.el5.rf





最近、suPHPのセットアップをした時に、


過去に正しく設定した内容と同じ内容で設定したのに


InternetServerErrorがでて、エラーログに



SecurityException in Application.cpp:511: Unknown Interpreter: php


と出ていました。


問題になりそうな箇所が見当たらないので


Googleで調べていると、根拠はよく分からないのですが


/etc/suphp.conf の以下の部分を変更しろとのこと。。。



suphp.conf

[handlers]
;Handler for php-scripts
;x-httpd-php=php:/usr/bin/php-cgi
x-httpd-php="php:/usr/bin/php-cgi"

;Handler for CGI-scripts
;x-suphp-cgi=execute:!self
x-suphp-cgi="execute:!self"



ダブルクォーテーションで囲むとうまくかもね。とあったので


試してみたら、その通りちゃんと動きました。


過去には囲まなくても動作する環境もあったので


バージョン依存の問題かもしれません。





2009年9月4日金曜日

nanapiにレシピを書いてみた



ちょっと登録してみた勢いで書いてしまいました。





右回り、左回りが簡単に分かる方法


http://r.nanapi.jp/191/





たくさんのパスワードを覚えるレシピ


http://r.nanapi.jp/185/





意外とこういうサービスって無かったので、斬新で面白いです。


書いた人が、どういう評価されるか楽しいのがいいですし


活動に応じてレベルアップするのもいいですね。





また、ちょっと絵が描けたりして、レシピにボリュームを持たせられるところが


コンテンツ作るほうとしては気合が入っていい。


そのうち驚くほど大作が作られるかも。





「上手に絵を描く方法」みたいなタイトルで、


順を追って経過のわかる絵が何枚も綴られそうだな。





DELL PowerConnect2748 スイッチ



DELL スイッチの選び方


http://www.sssg.org/blogs/naoya/archives/1201#


こちらの記事を読んで



ほぼ仕様は同じだが、一番大きな違いに CLI(コマンドラインインターフェース)のサポートの違いがある。CLI を使うと、スイッチの各ポートの状態を把握しているのでよくあるといわれているスイッチのあるポートが故障しているか事前にチェックすることができるのが多い。値段はすこし高いが、この機能のサポートでインフラの中でもかなり重要なスイッチの故障が検出できるのはとても大きい。ミッションクリティカルなシステムには、PowerConnect 5448 を使った方が安心だろう。



ミッションクリティカルの場合は PowerConnect 5448 のほうがよいのか。。。


スイッチが故障したことはないので、あまりその辺は考慮していなかったなぁ。





ノンインテリジェントスイッチの PowerConnect 2748を何となく選んで使っていました。


転送量とか、ポートの数とかの数字は見てたつもりですが


仕様の比較ってのは結構適当だったきがします。


値段が何で違うかってそれなりの理由があるもんですね。(あたりまえか。。。)





2009年9月3日木曜日

採用面接



8月上旬から、FindJobでプログラマー、デザイナー、ディレクターなどの募集をして


100名ほど募集がきました。


いやはや、面接は難しい。


とりあえず、もらったメールの中から3分の1くらいまでに絞って、


1日に5人ずつくらい面接しているんだけど、メールの印象だけじゃぜんぜんわからない。


話をしていても、なかなかこれはいい人材だと思える人はそういるもんじゃない。


本格的に人材採用に取り組んだのはこれが初めてなのでちょっと苦労しています。


特にひどい人は、Webシステムの会社ってことを知らずに来たり、履歴書を持ってこなかったり


面接に来てるのに自己アピールが無かったり、


こっちも何を聞いたらその人のことが分かるのか悩んでおります。


基本的に


1.情熱やガッツがあること


2.夢ややりたい事があること


3.素直であること


4.Webが好きなこと


5.いい仲間と仕事がしたいと思っていること


おおむね、上記のようなことが前提になるのですが


意外と5条件をクリアーしている人っていないんです。


スキルとかできることは、ある程度もらったメールや


職歴を見れば分かるので、人間味のある部分をやっぱり見たいなぁって気になります。


数十分の面接ですべてが分かるわけ無いので、その人間性の片鱗だけでも伝われば


こっちもその気になるんですけどね。なかなか気の利いたアピールは無いですね。


面白い、いい人に来てほしいなぁ。


明日もまだ面接の予定なのでわが社の希望の星が見つかりますように!





2009年8月6日木曜日

PHPからRsyncを実行する時にはまったこと



PHPの exec , system 関数を使って、直接コマンドを実行することができます。


これをうまく使えば、PHP単体では実現しにくいことを


他のアプリと連携して実行することができます。


そんなわけで、ためしにWebのインターフェイスからボタンを押すと


サーバ上のファイルのバックアップをとるように、PHPからRsyncを実行させようとした時の話です。


下準備として、実行するRsyncを手打ちでまず実行できるか確認します。



# サーバ上の /xxx/xxxx/ のファイルをローカルの /xxx/xxxx/ に同期させると考えます。

rsync -auv -e ssh xxxx@example.com:/xxx/xxxx/ /xxx/xxxx/



※ssh を利用するためパスワードを入力せずに接続できるよう公開認証キーの設定をしておく


(この設定は、ネットでもたくさん情報ありますのでそちらをご覧ください)








上記の手打ちの rsync コマンドは難なく実行できたので


PHPから同様のコマンドを実行するようにして見ます。






system('rsync -auv -e ssh xxxx@example.com:/xxx/xxxx/ /xxx/xxxx/')








自信たっぷりに実行してみたのですが


ものの見事に、うまく動作できずはまってしまいました。





ポイントは2点、パーミッションパスです。





まず、パーミッションに関しては、PHPからrsyncを実行するので当然ユーザはhttpdの実行者(apache)になります。


先ほどsshをパスワードなしで接続できる設定をしたのは、apache ではなく他のユーザアカウントでした。


apacheでパスワードなしの設定をしても良いのですがその場合にrsyncでファイルを同期したときの所有者が


apache になってしまい都合が悪いです。





ユーザアカウント hogehoge とかで実行したいですね。


そこで、PHPをApacheのモジュールではなく、CGI経由で実行するようにします。


phpには、mod_suphp というCGI経由で実行するためのモジュールがあるのでインストールします。


(mod_suphpのインストール方法は割愛します)


インストールができたら、phpinfo() などで Server APIを確認します。CGI/FastCGI と出ていたら設定OKです。


suphpの設定が多少難易度が高いかもしれません。





次に、rsync の実行する際のパスです。


PHPのexec ,system 関数は、どうもそのままだと絶対パスで表記する必要があるらしく


上記のコマンドは、以下のようにする必要があります。sshのほうも絶対パスです。


(何か環境変数的なパラメータを初期化すればいけるのかもしれませんが。。。)



system('/usr/bin/rsync -auv -e /usr/bin/ssh xxxx@example.com:/xxx/xxxx/ /xxx/xxxx/')








このことがわからず四苦八苦したため、かなり時間のロスをしまいました。


知っていればどうってことないのですが、知らない場合はひたすらレスポンスが真っ白で何も値が返ってこない地獄を見ます。


(もう少し、エラー的なメッセージを表示させてくれたら助かるのに。。。)





たまにしかこういうプログラムは書かないから、


何度も同じ穴にはまりそう。


一応、備忘録として書き留めておくけど


書いたこと忘れたら意味ないよなぁ。。。。





2009年4月20日月曜日

Text_Wiki_MediaWiki パッケージのParse/Table.phpの修正



PEARのText_Wiki_MediaWiki に含まれる Parse/table.php の一部分を修正



var $regexRows = '#(?:^(\||!)-|\G)(.*?)^(.*?)(?=^(?:\|-|!-|\z))#msi';

var $regexRows = '#(?:^(\||!)-|\G)(.*?)^(.*?)(?=^(?:\|-|!-|\z)|$)#msi';



行の終端が、文字列の終端の場合に、うまく タグに変換されていなかったので


正規表現を修正しました。


PEAR Text_Wiki_MediaWiki の Parser は、だいぶ更新されていないみたいで


WikiPediaのデータをそのままParseしても、ちゃんと表示されない場合が多い。