PHPList: 空メールのアドオンがあるらしい

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

PHPListでケータイ対応する方法を調査中。
空メールで購読、解除ができるアドオンがあることを発見!

Blank_Mail公開します。PHPListで空メール

これすごいんじゃないの!?と思って試してみようとしたのだけれど、やっぱりというか、共用サーバでは無理みたいである。エイリアスを使って特定ユーザ宛に届いたメールをプログラムに渡して処理するんだけれど、CoreServerは受信メールを自動ではプログラムに渡せない。ここらへんがCoreServerの限界なんじゃないのかなと思うんだけれど…。

ソースを改造してPOP3で受信して処理するようにすればできるんだろうけど、それって即時返信じゃないからなぁ…。CRONでやるにしてもタイムラグがあるし。。。それでもいいんなら、できそうだけどなぁ。。。


WordPress:Ktai StyleとPHPList Form Integration

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

ちょっとメモ代わりに。
WordPressで、Ktai Styleプラグインを使ってPHPList Form Integrationプラグインのフォームを出そうとしたら、出なかった。理由は、PHPList Form Integrationでフォームを出すときのコードがショートコードとかじゃなくてHTMLのコメントを使っているので(<!–phplist form–>というもの)Ktai Styleのどこかで消されているようだ。

ちなみに試した各プラグインのバージョンは以下の通り。

  • Ktai Style: 1.74
  • PHPList Form Integration: 1.7

根本的な解決方法かどうかはわからないけれど、
最も簡単だと思われる解決策は、以下の通りかなと。

# /plugins/phplist-form-integration/phplist.phpの最後のほう
# phplist_callbackの呼び出し優先順位を99にしない
//add_filter('the_content', 'phplist_callback', 99);
add_filter('the_content', 'phplist_callback');

要は、Ktai Styleによって<!–phplist form–>が削除される前にphplist_callbackを実行するように修正すればいいんじゃないかということです。これで、携帯で見たときにもメルマガ購読フォームが表示されましたし、購読登録できました。


PHP:cURLでBasic認証

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

WordPressのPHPList Form Integrationプラグインを使って、メールアドレス確認なしでメルマガ購読許可できるように設定していたのに、できていなかった。だがPHPList自体には入力したメールアドレスは登録されている。一体何故だ?と思ったら、Basic認証のせいだった。

実は、Basic認証があると登録すらされないので、上の話はBasic認証対応してたのだけど、cURLが2回通信するのに、最初のPHPListにログインする通信でBasic認証してなかった!2回目の通信は成功していたのだけど、1回目の通信が失敗していたからログインできていないせいで一般ユーザからの登録扱いとなり、身元不明扱いになっていた。完全にミスってたなぁ。

$username = 'ユーザ名';
$password = 'パスワード';
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);
// curlによるその他のオプション設定・通信は省略

コツコツと…

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

最近仕事のほうでも使えそうなWordPressのプラグインを家でコツコツ作っています。世の中の流れが激流のように速く感じるようになってしまって悩んでいましたが、自分ができることはそれほど大きくはない。だったらコツコツと地道にできることをやっていたら、自分なりにでかいことできるんじゃないかなと思って、ゆっくり取り組んでます。

情報化社会になって、雑音も多くて無駄な情報に時間を吸い取られてしまうという世の中になってるなぁと技術者としては感じてしまいます。情報のアンテナを磨き続ける人が強いのか、、、しかし案外、情報のアンテナが弱い人のほうが幸せに見えたりするから不思議なもので、情報を追い求めてばかりだと、人生を情報収集という時間に食いつぶされてしまう。リアルタイム性と人と人との立場的な距離を縮めることができたツイッターとかは本当にすごいなぁと思う反面、マスコミが騒ぎすぎてるせいか、情報化社会がすごいことだと洗脳されてるんじゃないかとか思うようにもなってます。

イノベーションが起きて(もしくは恣意的にそのように振舞われて)、周りがどう騒ごうとも、やるべきことをしっかりやってたら、それでいいんだと思う。自分のスキルや知識は裏切らない。上辺だけにならないように気をつけていきたいものです。

今回のWordPressのプラグインは、結構需要があるんじゃないかと思うので、コツコツ作って、そこそこのところまでできたら公開したいなぁと思います。頑張るぞ!!


PHP:WordPressのプラグインでsession_start()

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

WordPressでsession_start()するのを、読み込みページ用関数が呼ばれた先頭でやっていたら、エラーが出ていた。あかんやん。タイミング的には確かに、もうページ表示してる途中だから、どこかでechoされてたらアウトなわけです。ということは、session_start()するタイミングは、initだ!

add_action('init', 'hoge_session_start');
function hoge_session_start(){
  session_start();
}

これでエラー出なくなった。


PHP:PHPListをCORESERVERで動かす

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

メルマガをWordPressでできないか?ということについて、以前に調査していたのだが、やりたいことに該当する方法ではなかったので、オープンソースのメルマガ発行ソフトのPHPListを使うことにしようかと思って調査したのでメモ。ちなみにWordPressとPHPListを繋ぐPHPList Form Integrationというプラグインがあるのでこれを使う予定。

参考にさせていただいたサイト

ではいきまーす。

  1. まずはここからPHPListの日本語化されたものをダウンロード。
    http://www.d-ip.jp/download/pivot/entry.php?id=14
  2. ダウンロードしたファイルを解凍し、public_html直下にあるlistsディレクトリをWordPressと同じディレクトリに入れる。
  3. lists/config/config.phpを修正する。インストールするデータベース名、データベースユーザ名、パスワードなどを修正。ここはWordPressと同じものでOK!!あとPLUGIN_ROOT_DIRが原因でエラーが出てたので、コメントアウトしておいた(この辺りはよくわかってない)。TESTの値も0にしておく(そうしないとメール送れないので。後で0にしてもよい。)
  4. PHPがsafe modeで動いてると問題があるかもね!というメッセージが出続けるので、CGIモードで動かすために、lists/admin/.htaccessに以下を追加する。
    AddHandler application/x-httpd-phpcgi .php
  5. CGIモードで動くとphp.iniの情報が変わってしまうので、独自に設定するためにlists/admin/以下にphp.iniを作成する。
    magic_quotes_gpc              = On
    register_globals              = Off
    session.auto_start            = Off
    mbstring.http_input           = pass
    mbstring.http_output          = pass
    mbstring.encoding_translation = Off
    # /tmp以下にセッションファイルが作れないというエラーが出たので、
    # 自分のディレクトリ直下にtmpを生成しておくこと
    session.save_path = "/virtual/********/tmp"
    
  6. http://自分のWordPressのドメイン/lists/admin/にアクセスし、PHPListをインストールする。
  7. 管理者のパスワードを変えておく。
  8. インストールが問題なく終わったら、サンプルでインストールされているリスト(メルマガのこと)をアクティブにしておく(WordPressのプラグイン経由でPHPListを使うため)。
  9. CORESERVERのcronを使ってメルマガ配信するために、シェルスクリプトを作成する。名前はphplist.shとした。
    #!/bin/sh
    wget -q -O - 'http://自分のWordPressのドメイン/lists/admin/index.php?page=processqueue&login=管理者名&password=パスワード' >/dev/null
    

    このファイルは/virtual/********/phplist.shに置いた。実行権限を与えておくこと(705)。

  10. CORESERVERのcronに/virtual/********/phplist.shを登録する。
    普通のサーバのcronならば、

    */15 * * * * /virtual/********/phplist.sh
    

    でよいと思うのだが、CORESERVERでは分に入力できる文字列が2文字までみたいなので、*/15と入力できなかった!やっていいのかどうかはわからないが、4行分使って、

    0 * * * *  /virtual/********/phplist.sh
    15 * * * *  /virtual/********/phplist.sh
    30 * * * *  /virtual/********/phplist.sh
    45 * * * *  /virtual/********/phplist.sh
    

    と設定しておいた。
    これで15分毎にチェックされ、キューに入っているメルマガが15分毎に配信されるはず。

さっきまで試していたことなので、だいたい合っているはず。

WordPressのプラグインであるPHPList Form Integration
の設定については後でまた書きたいと思う。


PHP:MBFpdfでバグ!!["]が出力できない

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

MBFpdfでバグを発見した!!バージョンは1.0b。
["](ダブルクォーテーション)が出力できないというものだ。

$l+=$ascii ? $cw[$c] : $hwkana ? 500 : 1000;

上のソースの$cw[$c]の$cにダブルクォーテーションが入ってるのだが、
undefined index ” と言われてしまう…。
そこで、$cwをprint_rで表示してみたら、
array(…,[\"] => 500, …);
という記述を発見。ダブルクォーテーションあるけれど、バックスラッシュでエスケープされてるじゃないか!?まあこれが正しいと仮定した場合、$cw["]は定義されていないわけだから、$cが["]の場合、$c = ‘\”‘;にしてしまえばいいんじゃないかと思ったので、mbfpdf.phpに手を入れることを決意!!

MBMultiCellメソッドを修正。

//Get next character
$c=$s[$i];
// 以下3行を追加
if($c === '"'){
	$c = '\"';
}

その後、MBWriteメソッドを修正。
行番号は、上記の作業後なので、この付近と思ってください。

//Get next character
$c=$s[$i];
// 以下3行を追加
if($c === '"'){
	$c = '\"';
}

こうしたところ、ダブルクォーテーションがPDFファイルに出力できた。


やりたいことのリストラを行おう

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

最近、なんだか意味なく気持ちが焦ってしまい、逆に何事にも手を付けられずにいるなぁと思う。焦っても仕方がない。まぁ、それは十分わかっているのだけれど、なんだろう、周りがどんどん結婚していったり、同世代の人の転職話を聞いたりするからだろうか。自分は今のままでいいのか?と自問自答する。やっぱり『やりがい』を求めているからこそ、こういうことを感じるんだと思う。

技術を追い求めなければならないという強迫観念にかられてしまっている気がする。IT業界は流れが速いので、余計にそう思うのかもしれない。反面、自分が使うような技術でないことまで追いかけてしまったり、流行に惑わされてしまうというのは、学習の分散が起こってしまい、これがストレスになっているのかなぁと最近は思う。どれも面白そうであり、やってみたいが、時間と体力とリソース(マシンと金)には限界があるので、工夫をしながらやってみないといかん。

特に、時間。考える時間は大事なのに、考え過ぎて行動できていないということでは、単なる時間の浪費だ。考えた結果、やらないということだったらそれでもいいが、何度も蒸し返してしまわないようにしたい。蒸し返していいのは時間があまってるときだけ。24時間という限られたリソースをリストラしていきたい。

最近は物事に優先順位をつけられてないなぁと思った。
優先順位をつけて行動していこうと思う。


JavaScript:parseInt(”08″)の罠

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

JavaScriptの関数parseIntには、罠が仕掛けられていた。
具体的には、”08″, “09″のような値に対して処理を行うと8進数として捉えてしまうというものだ。
その結果、文字列08, 09はparseIntすると0が返ってきた。

なので、10進数で処理させるためには第二引数で10を指定する必要がある。

// 例 1桁の場合
var a1 = parseInt("8"); // a1 = 8
var b1 = parseInt("8", 10); // b1 = 8

// 例 2桁の場合
var a2 = parseInt("08"); // a2 = 0
var b2 = parseInt("08", 10); // b2 = 8

先頭に0が付くときにしか顕在化しないので、なかなか気付かないものだ。


XenServer: Mondo Rescueでp2vにはintel-VT必須?

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

会社のサーバで仮想環境の構築をXenServerを使ってやっているのだけれど、物理サーバを仮想サーバに変換するためにMondo Rescueを使って移行しようとしたら、エラーが出た。

XenServer – HVM is required for this operation

Citrix XenServer/エラー「XenServer – HVM is required for this operation」によると、intel-VTがないから無理っぽいようなエラーらしい。

今回使おうとしていたサーバはDELL PowerEdge SC440で、CPUがPentium E2180という、デュアルコアだけどVTをサポートしていないタイプのCPUだったので、どうも無理っぽい。1年以上前の格安サーバだから仕方ないか。メモリだけは潤沢に8GBも積んだのだが。VTないのでできないと報告したら、ひょっとしたらCeleron E3200を買ってもらえるかもしれないことに。というか、やろうとしていることがVTいるんだから、買ってもらえないと前に進めないよ!