2006年5月31日水曜日

USEN光(ギャオ)が来た!


4月に導入が決定していたUSENのギャオ光がとうとう開通した!



有線ギャオ光



4月初旬にUSENから「遅くとも4月末には開通しますよ」という連絡があったんですが、一ヶ月遅れでようやく開通。
ま、工事の遅れとかあったんでしょう。特に気にしてません。



さっそく繋ごう!



。。。



と思ったんですが、うまくいかない。



モデムに直でPCを繋ぐとうまくいくんだけど、ルーターを介するとダメ。でも、原因はすぐわかりました。



うちはギャオ光マンションVDSLタイプなんですが、このタイプはフレッツADSLのようなPPPoE方式でなく、DHCPで各家庭にIPが割り振られるタイプ。なのでルーターの設定を「自動設定 - DHCP」というのに変更する必要があるのでした。



ちなみにうちで使ってるルーターはLinkSysのBEFSR41C-JPという製品。 すでに購入してから4年くらい経つと思うんですが、まだまだ現役バリバリ。めちゃくちゃ重宝してます。



で、DHCPにしたら無事接続できました。



ブロードバンドスピードテストで計測してみたら、下りで5MBくらい。まあこんなもんかな。
フレッツADSLのときが1~2MBくらいだったので体感で少しだけ早くなった感じです。



そんな感じで、まだ導入して1日しか経っていませんが、今のところ特に問題なし。快適です。



今回の乗換えでは月額1000円くらいの節約になるので、それが一番うれしい。
浮いたお金で回らないお寿司でも食べにいこうかな。

2006年5月30日火曜日

メールアドレスのリストからPC/携帯のアドレスを取り出す


エクセルでやってもいいんですが、SQLのほうが手っ取り早いので、やってみました。



1.テーブルを作る




CREATE TABLE EMAIL_T (
  email_address varchar(255) NOT NULL,
  email_type varchar(10) NOT NULL,
);




2.データ投入



phpMyAdminのインポート機能を使う



3.SQL実行




select
 email_address,
 case when email_address like '%docomo.ne.jp' then 'mobile'
   when email_address like '%.ezweb.ne.jp' then 'mobile'
   when email_address like '%.vodafone.ne.jp' then 'mobile'
 else 'pc' end as pc_or_mobile
from
EMAIL_T




毎回selectしてもいいですが、カラムにpcかmobileかの種別を入れておくと、後々楽になると思います。




update EMAIL_T
 set email_type = case when email_address like '%docomo.ne.jp' then 'mobile'
        when email_address like '%.ezweb.ne.jp' then 'mobile'
        when email_address like '%.vodafone.ne.jp' then 'mobile'
      else 'pc' end




 

トラックバック送信テストフォーム


トラックバック送信のテストをする時用に、ちょっと便利なツールを作ってみました。



トラックバック送信テストフォーム



我ながら、なかなか便利です。
そう頻繁に使うようなものでもないけど、トラックバックのテストをするときにこれを使えば効率よくテストできると思います。

2006年5月19日金曜日

英数字のみのトラックバックを弾く(スパム対策)


TBスパムがどんどん増えてきて、1日100件くらい来るようになってしまった。(TдT;)

というわけで、最近はやり(?)の「英数字のみのトラックバックを弾く」というのを導入しました。



http://blog.matake.jp/archives/mt32_trackbacks.html

こちらのサイトを参考に、ソースにちょこっと手を加えるだけ。あっという間に導入完了。
英語だけのTBと日本語も含むTBを送信してテストし、うまく動くのを確認しました。

とりあえず、これでしばらく様子を見ようと思います。

2006年5月17日水曜日

画像認証コード生成ライブラリ(PEAR::Text_CAPTCHA)

ここ最近、会員登録やログインのフォームなどでよく見かけるようになった「この画像に表示されている文字を入力してください」というやつ(ぐにゃぐにゃっとなってる画像)を生成するPEARのライブラリ。それがこのText_CAPTCHAだ。

とりあえず今のところ使う予定はないんだけど、将来間違いなくお世話になると思うので、備忘録として残しておきます。

http://pear.php.net/package/Text_CAPTCHA
http://blog.poyo.jp/archives.php/categ-1/year-2005/month-1/id-1106990727
http://cl.pocari.org/2006-01-31-1.html
http://www.doyouphp.jp/sample/sample_others_captcha.shtml

2006年5月16日火曜日

MS SQL Serverで日付型の形式を「yyyy-mm-dd」に変換する


SQLサーバーにて、日付型のカラムから値を取り出すと

「05 15 2006 6:00PM」

というような形式で値が出てくることがある。これが非常に迷惑。
「yyyy-mm-dd」形式でないとアプリケーション側での扱いに困るのだ。

これってWindows自体の時計の設定に依存してたような記憶があるんだけど、とりあえず今回はSQLで日付形式を変換した。

こんな感じ。




select
   *,
   convert(varchar,REGIDATE,120) as REGIDATE 
   from TABLE;




120というのはODBC標準形式。つまり「yyyy-mm-dd hh:mi:ss」だ。
地域別に数字があるので、お好みで使い分けましょう。(あまり使う機会もないと思うけど。。)

2006年5月11日木曜日

HTML_QuickFormのsetConstants()


setDefault()を使うとデフォルト値の固定ができる。
これは前から知っていたんだが、setConstants()を使うと値を完全に固定できるようだ。



使い方はsetDefault()とまったくおなじ。



$form->setConstants(array("field_name" => "value"));



「具体的にどんな使い方があるんだ?」といわれてもすぐには出てこないんですが、覚えておけば将来きっと役に立つはず。。

2006年5月10日水曜日

mb_convert_encodingのautoが効かない


$value = mb_convert_encoding($value, 'UTF-8', 'auto');



とやってもうまく文字コードが変換されない。でも、



$value = mb_convert_encoding($value, 'UTF-8', 'EUC-JP,SJIS,ASCII,JIS');



という具合に、直接文字コードを指定してやれば機能する。



うーむ、どうしてだろう。
で、偶然php.iniを眺めていたとき、



mbstring.detect_order = auto



がコメントアウトされているのに気がついた。



「もしかして、このコメントアウトをはずせばいいのか。。?」



と思ってやってみたら、autoが動くようになりました。うーむ、全然気がつかなかった。

Windows,apache,php,MS SQL Server2005の環境での注意事項


やったのは、「Windows+Apache2+php5」と「Windows+MS SQL Server2005」の接続です。
手順をすべて書くとかなり長くなるので、ポイントだけ押さえ、キーワードを交えてメモしておきます。



とりあえず全部インストールされている状態で、パスは自分の環境にあわせて読みかえてください。




◆httpd.conf



httpd.conf にLoadModuleを追加する



LoadModule php5_module d:/php5/php5apache2.dll



あと、もちろんAddTypeも追加。



それと下記の記述を入れておくとphp.iniの設置場所を変更することが可能。



PHPIniDir D:/php5




◆php.ini



extension=php_mbstring.dll
extension=php_mssql.dll



コメントをはずす



mssql.secure_connection をOffにする(OffでダメだったらOnも試す)




◆ntwdblib.dll



※ここ一番重要



http://webzila.com/dll/1/ntwdblib.zip



↑ここからntwdblib.dllをダウンロードし、解凍してc:\windows\system32 と d:\php5 の両方にコピー。

2006年5月9日火曜日

PEAR::DBでDSNを配列で設定する


DSNの指定は、下記のようにやるのが簡単。




$DSN = "mysql://root:root_pass@localhost/dbname";




ただ、この形式だとパスワードに「@」が入っているとうまく接続できずに困ってしまう。そんなときは配列で指定してあげると回避できます。




$DSN = array(
    'phptype'  => 'mysql,
    'username' => 'root',
    'password' => 'root_pass',
    'hostspec' => 'localhost',
    'database' => 'dbname',
);


2006年5月3日水曜日

トラックバックスパム対策?


最近、ブログスパムが多い。特にトラックバックスパムが。
このkawama.jpにも一日20~30件くらいのトラックバックスパムがあり、いちいち消すのがメンドクサイ。サーバーにも負荷がかかるし、本当に困る。
期待された、mt3.2で新たに実装されたスパムフィルターもイマイチ使えないし、いまのところこれといった解決策がないのが現状。

そんな感じでkawama.jpはスパムに悩まされているんですが、なぜか司馬遼太郎を読むにはぜんぜんスパムがこない。
違いといえば、トラックバックURLの表示の方法くらいだ。kawama.jpではURLをそのまま表示しているのだが、司馬遼太郎を読むではURLをフォームのinputフィールドに入れて表示している。
特に手間もかからないし、ダメもとでkawama.jpもinputフィールドを使うようにしてみました。
こんな感じです。



変更前
<p class="techstuff">トラックバックURL:<br /> <$MTEntryTrackbackLink$></p>


 ↓↓↓



変更後
<p class="techstuff">トラックバックURL: <input type="text" name="tburl" size="45" value="<$MTEntryTrackbackLink$>" onfocus="this.select()" /> </p>





これでしばらく様子を見てみます。
古い記事はスパムDBに入ってしまっていると思うのでどうにもなりませんが、新しい記事にスパムが来るかどうか、チェックしてみようと思います。




追記:2006/05/11

この記事を書いたあと、ほどなくして司馬遼太郎を読むにもスパムが来るようになってしまいました。
つまり、効果ナッシングということです。とほほ。。(TдT;)

2006年5月2日火曜日

MTの再構築が重い!てか途中で止まる。


会社で使ってるmtのバージョンを3.17から3.2にあげたら、再構築が劇的に重くなった。



topコマンドで見てみたらロードアベレージが15!!超高負荷状態だ。mt.cgiのSIZEは1600Mになってる!!



調べてみたところ、どうやらmt3.2はmt3.17に比べて再構築がハンパなく重くなっているそうだ。3.2のリビルド時のメモリ使用量は、3.171の約10倍なんだとか。。。
そして、BerkeleyDBをつかってる場合はさらに重くなるらしい。うちの環境にそのまんま当てはまる。。。



で、ググって見たら同じ問題で困っている方が大勢いらっしゃった。いきなり10倍になったら、そりゃみんな困るよね。



とりあえずの対処法として、mt-config.cgiの「EntriesPerRebuild」の設定値をデフォルトの「40」から「10」に下げてみる。
こんな感じ↓




EntriesPerRebuild 10




さっそく再構築する。再構築の小窓とtopコマンドの両方を見てチェックする。



「再構築中 エントリー: 1 - 10 ...」 同時にmt.cgiのSIZEが増えていく。10M、50MB、100MB、300、600、、、



小窓が自動リロードされ、「再構築中 エントリー: 11 - 20 ...」になる。topコマンドのmt.cgiのSIZEがリセット。そしてまたSIZEが増え始める。。



これの繰り返し。遅いけど、なんとか再構築終わるか。
この調子で「再構築中 エントリー: 161 - 170 ...」くらいまで来た。が、topコマンドを見てみたらmt.cgiのSIZEがまたもや1600MBに!!どうやら固まってしまったようだ。10個ずつにしたのに、それでもダメか。とほほ。。。



ここで、いさぎよくBerkeleyDBはあきらめる。MySQLへ移行しよう!



MySQL移行に向けて、再度ググってみる。mt標準の「mt-db2sql.cgi」だとトラックバックデータが参照できないエラーがあるらしいので、Googleで見つけた「mt-db-convert.cgi」というのを使ってみた。さっそく走らせてみる。





SQLエラーが発生しました: You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near '2005-10-10 12:53:30', NULL, '2006-05-02 12:08:32', NULL)' at li




という、意味不明のエラーで止まる。どうやら「MT::Log」のところで止まっているようだ。
ログなんていらないや、ってことで「mt-db-convert.cgi」の32行目「MT::Log」を消したら通った。




続いて、別のエラーに遭遇。今度はテンプレートのところだ。




SQLエラーが発生しました: You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near '\'さん。コメントしてください。 (<a href=\"<$MTRem




探してみたら、個別エントリアーカイブのテンプレートに該当の文字があった。これも不要なので該当の箇所を全部削除。そしたらここも通った。




以上で移行完了。ふぅ。
とりあえず「EntriesPerRebuild」を「20」にして再構築をかけてみたが、そんなに負荷も高くならずに無事完了した。いやぁ、よかったよかった。




しかし、ここまでmtが重いのは正直困りものだ。
実は3年くらい前、仕事で韓国製のCMSを触っていたことがあり、そのときもCMSの高機能化と記事数の増加に比例してHTMLの出版時間が長くなるという問題が発生していた。そのときは、



・ヘッダやフッタなど、共通部品はSSIを使う
rebuild支援ツールを自作して使う



など、運用でなんとか乗り切って(ごまかして?)いたのだけれど、結局それも根本的な解決にはならない。



この問題は静的HTML型CMSの宿命だと思うのだが、mtはこの問題を克服できるんだろうか。。
シックスアパート社はバージョン3.3で何らかの手を打ってくると思いますが、いったいどんな手法になるのか。ちょっと楽しみにしてます。



 



今回お世話になったサイト:
http://www.ec-blog.com/05/000061.html
http://www.ec-blog.com/04movable_type/000060.html
http://as-is.net/wiki/MT_Database_Converter/ja