| 登録日時▼ 更新日時 |
内容 | |
|---|---|---|
| 詳細編集 | 2011/12/30 17:10 | EncodeMIMEHeader - 全ての文字を1行76バイト以内にMIMEヘッダエンコードする.mailfilterに続きNTTドコモの「メール使いホーダイ」ネタ第3弾。 ケータイからFacebookに投稿したいけど、Facebookの投稿用メールアドレス宛に送信しても反映されるのはメールの件名に書いた分だけで、メール本文は無効なのです。ぼくのケータイは件名が30バイトまでしか対応していない古いタイプなので、これでは短い文章しか投稿できない! なので本文を件名に埋めて投稿用メールアドレス宛に再送信するプログラムを作ったのですが、Encode::MIME::Headerでエンコードした文字列がFacebook側でうまくデコードされなかったのです。どうやら$especialsで定義されている文字が含まれているとうまくいかない。 いろいろ考えた結果、RFCを満たさんけどもう全部エンコードしてしまおうと、でも守れるところは守ろうと1行は76バイト以内に収めるエンコードモジュールを作りました。 概要use EncodeMIMEHeader qw( encode_MIME_header );Subject: =?UTF-8?B?6aOf5Y2T44Gu6Zu754Gv44CB6Zu755CD44GM5YiH44KM44Gf44Gu?=
=?UTF-8?B?44GnIExFRCDjgavlpInjgYjjgb7jgZfjgZ/vvIFBbWF6b24g44GnIDEsNzQ1?= =?UTF-8?B?IOWGhiB4IDMg54Gv44CB54ax44GP44Gq44GP44Gm5piO44KL44GV44KC5Y2B?= =?UTF-8?B?5YiG44CC6Imv44GE44Gn44GZ77yB?= ソース |
| 詳細編集 | 2011/7/9 11:20 | Waftで304 Not Modifiedを出力するコード最近いろいろなプログラムで使い回している、Waftで304 Not Modifiedを出力するためのコード。本体に組み込もうかなぁ。 sub Waft::not_modified_since {使い方は以下のとおり。directメソッド等の中で呼び出して、戻り値が真なら処理を終了させます。引数にコンテンツの更新日時をUNIX time(time関数で得られる形式)で指定してください。 sub __default__direct { |
| 詳細編集 | 2011/7/3 0:18 | .mailfilterでケータイへの転送メールを一部制限(さくらのレンタルサーバを使用)NTTドコモの「メール使いホーダイ」を契約したので、メールだけはパケット代を気にせずケータイで送受信できるようになりました。PCで使っているメールもケータイに転送設定しておくと便利♪ではありますが、メールアドレスをWebにさらしているために迷惑メールがハンパない訳で、これが全部ケータイに転送されるととっても困ります。 メールサーバ内でSpamAssassinが動いてくれているので、これを使ってケータイへの転送を振り分けてみます。SpamAssassinが迷惑メールの程度をX-Spam-Levelで示してくれる(「*」が多いほど迷惑メールである可能性が高い)ので、まずその程度を決めてみました。 .mailfilterに以下を設定。 if ( ! ( /^X-Spam-Level: \*{3,}/ ) )これでめでたく迷惑メールでないメールだけがケータイに転送されるようになりました。 の、はずだったのですが、それでも次々に転送されてくる迷惑メール。どのメールも、件名に「=?koi8-r?B?~」とケータイでデコードされないMIME。koi8-rってどこ?(ロシア、でした。)このメールだけはX-Spam-Levelが3以上にならないので、仕方なく個別に転送を拒否します。 if ( ! ( /^X-Spam-Level: \*{3,}/ || /^Subject: =\?koi8-r\?B\?/ ) )ひとまずこれに落ち着きました。 しばらく経って、少し変更。 なので、メールを転送する時にenvelope sender、いわゆる送信元(Envelope-FromやSenderとも)を変更する事にしました。 if ( ! ( /^X-Spam-Level: \*{3,}/ || /^Subject: =\?koi8-r\?B\?/ ) )直接ケータイのメールアドレスを指定して転送させるのではなく、メールをsendmailに渡してケータイに送信させます。その際にsendmailの-fオプションで送信元のメールアドレス、つまりエラーメールの送信先とするメールアドレスを指定します。 これで、配送エラーが発生した場合のエラーメールは、元の送信者に送信される事なく、指定した送信元メールアドレス宛に届くようになりました。(指定するケータイのメールアドレスを存在しないメールアドレスに変えて試してみると確認できます。)メールのループが発生しないよう、送信元メールアドレスには転送設定をしない別のメールアドレスを指定しましょう。 |
| 詳細編集 | 2011/6/10 10:18 | メールをトリガーに任意のPerlスクリプトを実行する(さくらのレンタルサーバを使用)ケータイのパケット定額サービスの料金は数千円とまだまだ高く契約を躊躇してしまいます。でも外出中にネットにつなげられるとやっぱり便利ですよね。 ひとまず、メールを受信してPerlスクリプトを実行するところまでをざーっと作ってみました。 1. スクリプトファイルをサーバに置く末尾のスクリプトをサーバに置いてください。これ以降、以下の条件で記載するので適宜読みかえてくださいね。 アカウント名 : ACCOUNT
スクリプトファイルを置く場所: /home/ACCOUNT/www/bin/ スクリプトのファイル名 : run.pl メールアドレス : run 安全のため、http経由では実行できないよう、スクリプトファイルを置く場所には以下のよう設定しましょう。.htaccessでアクセス制限しておくとより安心です。 % chmod 700 /home/ACCOUNT/www/bin run.plには実行フラグを付与します。 % chmod +x /home/ACCOUNT/www/bin/run.pl 2. run()の中に任意の処理を書くrun.pl先頭部のrunサブルーチンの中に、実行したい処理を書いてください。第1引数にメールの件名、第2引数にメールの本文が渡されます。 3. メールアドレスを作成するサーバコントロールパネルでrunというメールアドレスを作成してください。 4. .mailfilterを作成する作成したメールアドレスに.mailfilterを設定します。 % vi /home/ACCOUNT/MailBox/run/.mailfilter 以下の内容を記述してください。 if ( (1) )if文で囲んだのは、サーバコントロールパネルからメールの設定変更をしても内容が上書きされないようにするためです。それをしないのであれば、toの行だけでも良いと思います。 あと、ファイルモードを600にしないといけません。 % chmod 600 /home/ACCOUNT/MailBox/run/.mailfilter ※この.mailfilterの設定が重要なのですが、公式な機能では無いと思いますので、行う場合は自己責任の下でお願いします。設定方法は「さくらのレンタルサーバ非公式FAQ」を参考にしました。感謝です! メール < Wiki | さくらのレンタルサーバ非公式FAQ
http://faq.sakuratan.com/wiki/wiki.cgi?%a5%e1%a1%bc%a5%eb#i37 ※でも、カスタマーセンターから.mailfiterに関する回答の引用があったり、あと実際に公式のFAQにも.mailfilterの記載があったり、と実は公式な機能なのかもしれません。 5. 完了!これで、run宛にメールを送信したらrun.plが実行されます。 スクリプト#!/usr/bin/perl |
| 詳細編集 | 2011/6/9 5:35 | 正規表現の先読みと後読みを使いこなすPerlにはルックアラウンドアサーション(lookaround assertion)という4つの正規表現拡張があります。肯定の先読み・否定の先読み・肯定の後読み・否定の後読みの4つです。 (?=...) : 肯定の先読み
(?!...) : 否定の先読み (?<=...): 肯定の後読み (?<!...): 否定の後読み これらの使い方を紹介します。 例えば、HTMLのタグとタグの間の空白文字をs///演算子で全て取り除きます。 $html =~ s/>\s+</></g; # ルックアラウンドを使わないと書けます。少し読みにくくなるので、Perlベストプラクティスで書きます。 $html =~ s{ > \s+ < }{><}gxms; # ルックアラウンドを使わない。Perlベストプラクティスの書き方となります。 ですが、置き換える必要のない山カッコまで置き換えるのはスマートではないですよね? 直前に左山カッコが現れる位置を肯定の後読みでマッチさせて、直後に右山カッコが現れる位置を肯定の先読みでマッチさせる事で、山カッコを置き換えず、空白文字だけを置き換える(ここでは取り除く)対象にできます。 $html =~ s{ (?<= > ) \s+ (?= < ) }{}gxms; # ルックアラウンドを使うただ、これではファイル先頭もしくは末尾に空白文字がある場合にそれを取り除く事ができません。 $html =~ s{ (?: \A | (?<= > ) ) \s+ (?: (?= < ) | \z ) }{}gxms;と長くなってしまいます。 否定の後読みおよび否定の先読みと文字クラスの否定を使うと、以下のようにもっとシンプルに表現できます。 $html =~ s{ (?<! [^>] ) \s+ (?! [^<] ) }{}gxms;これは、 (?<![^>]): 直前に右山カッコ以外の文字は現れない
(?![^<]) : 直後に左山カッコ以外の文字は現れない という表現になり、つまり、 (?<![^>]): 直前に右山カッコが現れる、もしくは文字が無い
(?![^<]) : 直後に左山カッコが現れる、もしくは文字が無い という意味になるためです。おもしろいですね! |
| 詳細編集 | 2010/9/29 11:02 | Synergyが動作しない場合はVisual C++のランタイムをインストールする素のWindows XP SP3にSynergyをインストールしても動作せず。Visual C++のランタイムをインストールしたら動作するようになりました。 ダウンロードの詳細 : Visual C++ 2008 SP1 再頒布可能パッケージ (x86)
http://www.microsoft.com/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=ja |
| 詳細編集 | 2010/8/29 7:03 | Windows 7 でユーザーのプロファイルを初期化する 1. 再起動 2. 対象ユーザー以外のユーザーでログイン 3. C:\Users\<対象ユーザー> を削除 4. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\<対象ユーザーの SID> を削除 |
| 詳細編集 | 2010/6/6 14:30 | Tokyo Cabinet + Starmanで住所検索高速なKVSであるTokyo Cabinetと高速なWebサーバStarmanを試してみたいなぁ、と思い、Ajaxを使った簡単な住所検索アプリを作ってみました。 ※wataさんが、Tokyo Cabinetの後継のKyoto Cabinetを紹介されています。 Kyoto Cabinet + Starmanで住所検索 ...を試してみた - ワタブログ
http://wata-jp.ldblog.jp/archives/1652876.html 1. PlackとStarmanをインストールCPANでPlackとStarmanをインストールします。 % sudo cpan Plack % sudo cpan Starman 2. Tokyo CabinetとPerl用APIをインストールソースパッケージとPerl用APIをダウンロードします。 データベースマネージャ Tokyo Cabinet
http://1978th.net/tokyocabinet/ tokyocabinet-1.4.45.tar.gz
perlpkg/tokyocabinet-perl-1.33.tar.gz まずはTokyo Cabinetのインストール。私の環境(Ubuntu 9.10)ではbzlib.hが不足してたので、先にlibbz2-devをインストールしておきました。 % tar xzvf tokyocabinet-1.4.45.tar.gz % cd tokyocabinet-1.4.45 % ./configure --prefix=/usr/local/tokyocabinet % make % sudo make install 次にPerl用APIをインストールします。 % tar xzvf tokyocabinet-perl-1.33.tar.gz % cd tokyocabinet-perl-1.33 % PATH=$PATH:/usr/local/tokyocabinet/bin perl Makefile.PL % make % make test % sudo make install 3. KEN_ALL.tchを作成住所検索の情報となる郵便番号データを日本郵便のサイトからダウンロードします。“読み仮名データの促音・拗音を小書きで表記しないもの”の“全国一括”のken_all.lzhです。 郵便番号データダウンロード - 日本郵便
http://www.post.japanpost.jp/zipcode/download.html これを展開したKEN_ALL.CSVから、以下のスクリプトを使ってTokyo Cabinetのハッシュデーベースファイルを作ります。今回作る住所検索アプリでは郵便番号を1桁入力した時点から候補を表示するようにしたいので、1桁~7桁のパターン毎に10個までの候補を記録しておきます。テーブルデータベースを使うともっとスマートに構成できそう? #!/usr/bin/perl4. PSGIを作成住所検索アプリとなるプログラムをPSGI仕様で作成します。こちらもtieを使いました。 5. PSGIを起動してブラウザでアクセス作成したPSGIをStarmanで起動します。デフォルトのポート5000でWebサーバとして動作します。これで準備完了です。 % starman ken_all.psgi ブラウザからWebサーバにアクセスします。ローカルホストであればURLはhttp://localhost:5000/です。テキスト入力欄に数値を入力すると、その下に瞬時に住所が表示されます。速い! |
| 詳細編集 | 2010/5/8 13:24 | “「rel="canonical"」で自分自身のURLを示すのは良い手法”「rel="canonical"」で自分自身のURLを示すのは良い手法? 悪い手法? | Web担当者Forum
http://web-tan.forum.impressrd.jp/e/2010/04/19/7785
|
| 詳細編集 | 2010/5/5 20:21 | LFshell - PerlとJavaScriptで動くシェルライクなインターフェース
|
玉城 勇二 気ままにでもなるべく正確に、人に迷惑をかけないよう心がけて書いています。ご意見・ご感想は管理者のページからメッセージ送信してください。お待ちしています。