May 25, 2006

Microsoft Word 2007 beta 2からの投稿テスト

どいつもこいつもマクブクマクブク泡吹いててキニクワネエ、じゃなくて(!)、超重要なMicrosoft Office 2007のbeta 2が公開されたことにあまり言及していない。特にMicrosoft Word 2007 beta 2(Microsoft Office Word 2007 製品情報)には、AtomAPIやXMLRPC(MetaWebLog)で主要なブログシステムへの投稿ができるようになっているのに、試してみたという記事すら目にしないのはどうしたことだ。

…と思ったので、試してみた。

まず、ファイルメニューが見つからない…と思ったらこの左上のアイコンがファイルメニューらしい。ただの飾りかと思った…。というか、このホーム、挿入、ページレイアウトっていうのも従来のコマンドディレクトリ選択式のメニューではなく、Contextual Menuになっているわけだね。これはこれで正しいUIで、編集コンテキストごとに選択できるコマンドが制限されて分かりやすいと言える。

気を取り直して、ファイルメニュー→発行→ブログを選択する。

ここまで辿り着くのが大変なだけで後は難しくない。アカウントの管理ウインドウから他のAtomAPI/XMLRPCクライアントアプリケーションと同様に設定するだけなので設定方法は省略する。後は普通にWord上で文章を編集して「発行」するだけ。Wordが大得意な人にとっては便利かもしれない。生成するHTMLも割ときれいなものだと言えるし。

ちなみにAPIとして「Atom」を選択すると失敗するというか登録できない。bloggerだと問題なくアカウント登録・投稿できるのでMovable Typeの実装の問題だと思われる。「MetaWebLog」を試してみるとすんなりうまく行った、というかこれがそのテスト投稿。

今のところ、添付画像やカテゴリーのハンドリングがよく分からない。Word上で画像を貼り付けてポストするとその部分だけ抜け落ちる(上の画像はMovable Typeの管理画面からアップロードしたもの)。Picture Upload用のURLを設定するオプションもあるのでftpかWebDAVで何とかするのかもしれない。カテゴリーについては設定する方法がない。

May 21, 2006

Captcha Plugin公開

CAPTCHA™テストを使った簡単なアンチコメントスパムプラグインを作ったので公開しておきます。

Captcha_Plugin - ogawa - CAPTCHA(TM)テストによる簡単なアンチコメントスパムを実現するプラグイン。 - Google Code

このプラグインは、以下のように、コメント時に大抵の人間には容易に解答できるがプログラムでは簡単に解けないようなテストを課すことで(この場合はSecure Codeを入力させることで)、spambotを排除するという仕組みを実現します。

Movable Typeで同様の機能を実現する方法としては、SCode - Movalog Plugins - TracCAPTCHA によるコメントスパム対策 - Open MagicVox.netが知られています。

Captcha Pluginがこれらと異なるのは、セッションごとに(つまりはコメントフォームが表示されるごとに)Javascriptを使って新しいCAPTCHAテストを生成するということと、各CAPTCHAテストに有効期限が設定されていることです。ですから、単純なbot攻撃に加えて、「人間が解いて、botが攻撃する」タイプのbot攻撃にも有効ではないかと思われます。

また、セッションごとに新しいテストを生成するということは、テストの生成が十分に軽量に行える保証が必要です。このため、テスト生成を行うCGIスクリプトcaptcha_js.cgiは簡単なものに留めて、あえてMTアプリケーションにしていません。MTアプリとして作ると、プラグインの設定画面での設定内容を処理に利用できるとか、中間ストレージにMTのフレームワークを利用できるとか可用性の点で大いにメリットがある反面、ブートストラップやDBアクセスのオーバーヘッドが無視できないものとなります。

ちなみにSCode Pluginは、テスト画像を作るCGIプログラムをMTアプリとして実現しており、その上毎セッションまったく同じ画像を返すにも関わらず、GDモジュールを使って毎回画像を生成していてキャッシュすらしません。それもなんだかなあ…。

May 16, 2006

最終兵器にはならないけど…

Ogawa::Buzz: AutoIPBan Plugin公開

とか作っておきながらなんですが、どうもねえ…。

昨日の時点で約7000件のトラックバックスパムがやってきて、うち約6000件はリジェクト、250件はスロットリングされ、残りの700件強がやはりJunk Folderに溜まっていくご様子…。結果として9割方リジェクトできているのだからいいじゃないかとはちょっと思えませんね。なんかくじけそうです。

対SPAM最終兵器“Junk slowdown”!! : 亜細亜ノ蛾 - Weblog

やっぱりこっちの方が素直で有効っぽいです。スクリプトの途中でスリープさせるのはあまり意味がないかと思いますが。そのままだと芸がないので私はCで超簡単なマルチスレッドプログラムを書いて済ませてみました。

さて、ここからが本題。

教えてエロいえらいひと
コメント・トラックバックCGIのリネームとMT.cfg・.htaccessの変更を、同時に行ってくれるスクリプトがあれば、週一くらいで実行すると万全なのですが。

ってことなのですが、基本的に「スクリプトで」mt-config.cgiを更新するのはあまりお勧めしません。代わりと言ってはなんですが、定期的にmt-config.cgiのCommentScriptとTrackbackScriptを変更し、再構築するだけで済むようにするには以下のようにするとよいです。

まず、mt-comments.cgi, mt-tb.cgiは予想しにくいでたらめな名前に変更しておきます。ここでは、仮にmt-comment-detarame.cgi, mt-tb-detarame.cgiとします。

次にmt-config.cgiのCommentScript, TrackbackScriptにスクリプト名を設定します。ここで設定する名前は、mt-comment-detarame.cgiなどにリライトされるので、ファイルとして実際に存在している必要はありません。また、mt-comment-detarame.cgiなどとは異なった名前の方がよいでしょう。例えば、mt-comments-nospam.cgi, mt-tb-nospam.cgiとか日付を使った名前とか。

最後に、以下のようなテンプレートを作り、出力するファイル名にはフルパスでMTがインストールされているディレクトリの.htaccessを指定します(例: /home/hoge/.../mt/.htaccess)。また、インデックス・テンプレートと同時に再構築されるようにしておくとよいでしょう(このテンプレートは絶対にダイナミックパブリッシングにしてはいけません)。

RewriteEngine on
RewriteRule ^<$MTCommentScript$>(.*)$ mt-comments-detarame.cgi$1 [L]
RewriteRule ^<$MTTrackbackScript$>(.*)$ mt-tb-detarame.cgi$1 [L]
RewriteRule ^(mt-comments|...)\.cgi$ /hoge/sand-trap.php [L]

すでに.htaccessに何かを指定しているのであればその内容も含めます。また、Movable TypeからMTディレクトリに書き込めるようにパーミッションを設定しておく必要があります。それが済んだらこのテンプレートを再構築して正しく.htaccessが生成できることを確認してください。

確認できたらすべてのアーカイブ、インデックスを再構築して終わりです。以降は、定期的にmt-config.cgiのCommentScriptとTrackbackScriptを変更し、再構築するだけで済みます。

…というのは全部実際には試さずに書いています。

May 13, 2006

AutoIPBan Plugin公開

あまりのトラックバックスパムの多さに堪えかねて、Movable TypeのIPBanListをもっともっと活用するためのプラグインを作ったので公開しておきます。このプラグインでは、トラックバックスロットリングの対象となったIPアドレスを自動的にIPBanListに追加したり、Junk Folderのトラックバックの送信元IPアドレスを一括してIPBanListに追加したりすることができます。

また、IPBanListの情報にテンプレートからアクセスする手段も提供しているので、.htaccessをMovable Typeで生成してIPBanListに含まれるホストからは一切トラックバックやコメントできないようにすることも可能です。

詳しくは以下参照。

AutoIPBan_Plugin - ogawa - Google Code

スパマーはいい感じにばらけたIPアドレスを使ってトラックバックを打ってくるので、効果のほどはいまいちかもしれません。OneHourMaxPings, OneDayMaxPingsを小さめに設定しておけばより高い効果が得られます。が、正常なトラックバックがIPBanList入りする恐れが多少増します。

2006-05-14追記:

SpamLookupの振り分け結果を活用できるようにコメント・トラックバック一覧から簡単にスパマーのIPアドレスをIPBanListに追加できるようにしました。

また、テンプレートからIPBanListにアクセスできるようにMTIPBanListコンテナタグ、MTIPBanListIPタグを追加しました。以下のようなテンプレートを使って.htaccessを生成しておくと、スパムIPアドレスをアクセス禁止にできるでしょう。

Order allow,deny
allow from all
<MTIPBanList>
deny from <$MTIPBanListIP$>
</MTIPBanList>

May 10, 2006

汎用的かつ拡張可能な機能を持ち、かつ洗練されたユーザインターフェースって

「汎用的かつ拡張可能な機能を持ち、かつ洗練されたユーザインターフェース」とか言ってると、また自己反映計算の亡霊が…。亡霊じゃないか…。

subtechグループ - Bulknews::Subtech - Web API と MVC

LDR ハックが画期的なのは、デベロッパーがM+Cを利用してVを作るんじゃなく、Vを利用してCを実装することで、Mは自分の好きなものを使えるってこと。LDR のサービスが提供しているイカした View を利用させてもらうわけ。もちろん、Ajax (XMLHttpRequest) と GM があるからこれができる。Controller は LDR API を再実装、Model は Plagger でとってこれるものならなんでもいい。

ControllerがLDR APIを実装する必要があるということは、ViewがControllerを制約するということだ。別の言い方をすれば、LDRはピュアViewではなく、実はControllerの機能を一部包含していて、実(Remote)Controllerとの間のインタフェースがLDR APIなのだとも言える。Google Homepage APIも同様で、ユーザはControllerを記述できるが、それはAPIに束縛されると同時に、記述の解釈実行はView側Controllerの役割となる。

で、私が思うのは、結局のところ、こういう構造というのは柔軟なというか使いやすいアプリケーションの実現という点で優れていないのではないかということだ。例えばGoogle Homepage上でメールの読み書きはしにくいし、LDR上でブログの更新はしたくない。なぜなら、Google Homepageはサービスの入口としてのアクセシビリティにおいて、LDR UIはリストの集合のような構造データを閲覧したり簡易な操作を行ったりという操作性において、それぞれ優れているに過ぎないから。つまりは、ユーザインタフェースとアプリのドメインは不可分だから。

とは言うものの、アプリのドメインが制約されるとしても、適用可能なアプリは無数にあるだろうという観測には賛成したい。確かにPlaggerは重要なpracticesであった。Web版インタフェースビルダで汎用的かつ拡張可能なインタフェース部品をレイアウトできてそれぞれの操作的意味も定義できて何でもできるんだぜー、俺って宇宙一、という話よりはかなりゴールが近いところにあるし、おそらくは短期的にはgeek満足度も高いだろう。

でもそれがWebアプリケーションとして目指すべき方向性なのかどうかについては、断定を躊躇してしまう。GNU EmacsでメールもWebもコード・ドキュメント書きもデバッグも済ますという古くからの素朴なアプローチが、90年代までは割と(パイが圧倒的に小さかったこともあって)受け入れられていたものの、近年ではそれほどでもないことにもついつい思いを馳せてしまわないでもない。ああもちろん、GNU Emacsのようなポジションを狙うWeb UIというのはgeekのおもちゃ箱として面白いのは確かだね、Plagger同様。

yohei-y:weblog: 次の話

思うにこれからの Web サービスは三つに分離するのではないか。ひとつは Amazon S3 や Google Base や Flickr やはてなブックマークのようなデータストア提供サービス。二つ目は OpenID/Typekey 認証やはてブの件数取得 API や SimpleAPI のような機能提供サービス。そして三つ目が今回の LDR のような UI 提供サービス。

なんかしちめんどくさい分類だなと思った。機能提供サービスのうち、Authentication以外のサービスは、データストア提供サービスに分類してしまえると思った。例えば、ブックマークや天気などのstateを取り出すサービスは、「システムユーザ」がストアした情報をある形式で参照できるサービスであると言える。また、データを変換するサービスは、「ユーザ」がデータをストアすることができ、そのデータを変換された形式で参照するためのビューを提供するサービスであると言える。

May 9, 2006

Google vs 霞ヶ関(≠霞が関)

Google マップが「霞関」は認識できるが、「霞関」は認識できないのは、私の中ではとてもとても有名な事実だ。

例えば、

Google マップ - 東京都千代田区霞関3-3-1

は、「東京都千代田区丸の内3丁目3−1」の地点を表示する。

ん?

いったい何が起きているのか想像してみよう。まず「東京都千代田区霞ヶ関3-3-1」の「霞ヶ関」がうまくパーズできないので、前方最長一致で「東京都千代田区」を地名、「3-3-1」を丁・番・号と認識する。しかる後に「東京都千代田区○○3-3-1」という住所にマッチする地点を検索する。このとき、○○には、丸の内、大手町、内幸町、有楽町、霞が関、麹町などなど千代田区の町名が入るわけだ。検索した結果、最初に(あるいは唯一)マッチするのが「丸の内」で、それゆえ「東京都千代田区丸の内3丁目3−1」の地点が表示される。という現象なのではないだろうか。

この推測どおりだとすると、丁・番・号を変えることでもう少し遊べそうなことに気がつくだろう。

Google マップ - 東京都千代田区霞ヶ関3-3-3 → 三崎町らしいねどうも

Google マップ - 東京都千代田区霞ヶ関3-3-5 → 靖国のそばだったようだ

Google マップ - 東京都千代田区霞ヶ関3-3 → 紀尾井町かー

Google マップ - 東京都千代田区霞ヶ関2-1 → やっぱ北の丸公園だよね、うんうん

というわけで、「Google」と「霞ヶ関」を戦わせてみよう。

2007-01-12追記:
気がついたら修正されていたようだ。

May 8, 2006

Youtubeなどのムービーをダウンロードするトイブックマークレット

Youtube, Google, iFilm, Metacafe, DailyMotion, Myspaceなどの映像ファイルをダウンロードしてくれるVideo Downloaderというサービスがあります。

Download videos from Youtube, Google, iFilm, Metacafe, DailyMotion, Music.

…あるのですが、別にFirefox ExtensionじゃなくてBookmarkletでいいじゃん、その方が対応しているブラウザも多いしー、と思ったので適当に作ってみました。もう誰か作っていたらスマソ。

Video Downloader

上のリンクをToolbarなどにドラッグ&ドロップしておけば、YoutubeなどのページからいつでもVideo Downloader経由でムービーをダウンロードできます。Video Downloaderが頑張って対応サイトを増やせば増やすほど、このブックマークレットが使い物になる局面が増えます。完璧に他力本願です。

念のため、YoutubeなどではFLV形式のデータしか取得できませんから、通常のPCやiPodなどで再生するには別途FLVプレイヤーかFLVコンバーターが必要になります。このあたりのツールに関しては以下の記事が詳しいです。

【ちょいろぐ!~個人ニュースサイト的小ネタブログ~】 | 【Tips】YouTubeもGoogleVideoもiFilmもMyspaceも(あとGyaoも)、片っ端からDLして任意の形式に変換する方法&iPodに入れてみる!

ちなみに私はFirefoxユーザですが、extensionsがあまり好きではありません。あろうことか、Greasemonkeyもインストールしていません。ブラウザ以外のコンポーネントをアップデートするのは面倒だし、ブラウザに変調を来たしたときに原因がextensionsにあるのかどうか分からないのも癪だし。一つでもインストールするextensionsを減らすことは、私にとっては正義なのです。

May 2, 2006

先生、最近トラックバックスパムがひどいんです。

なんだかここのところ、トラックバックスパムが異常に多い。

一日平均250件くらいずつSpamLookupにはじかれて、Junk Folderに溜まっていっているご様子。

一方でMovable Type 3.2には同一IPアドレスからのトラックバックの受信をスロットリングする機能もある。一時間あたりOneHourMaxPingsの値(デフォルトでは10)以上の同一IPアドレスからのトラックバック、一日あたりOneDayMaxPingsの値(デフォルトでは50)以上の同一IPアドレスからのトラックバックはリジェクトされ、SpamLookupの対象にすらならない。

正確には「一日あたり」ではなく、「(ThrottleSeconds×4000+1)秒間」が正しい。ThrottleSecondsのデフォルト値は20なので80001秒(<86400秒=一日)となる。

いったいどれくらいリジェクトされているのかと思ってログを吐くように細工しておいたら、約一日で750件を超えていることが判明。

合わせて約1000件か……おまいらの情熱はどこからくるのか、と。

ちなみにOneHourMaxPingsでリジェクトされたのが約100件に対し、OneDayMaxPingsでリジェクトされたのが約650件。後者の値を絞るのが効果がありそう。

ThrottleSeconds, OneHourMaxPings, OneDayMaxPingsはすべてmt-config.cgiで設定できるよ。

May 1, 2006

MapUp: Trackback / Atom-enabled Google Map

Google Maps API v2の練習がてら、MapUpっての作ってみました。

MapUp: Trackback/Atom-enabled Google Map

MapUpは、Google Maps APIを使って実現された、トラックバックを送りつけられる地図です。この地図では指定された地点の近辺に対して送信されたトラックバックを地図上にマーカー表示します。

また、指定された地点の近辺に対して送信されたトラックバックをリストしたAtom Feedを取得することもできるので、このFeed URLをRSS/Atomリーダーなどに登録して定点観測できます。ALPSMAP baseでも同じことができますが、そこは「ありもの」でも割と簡単に実現できるということで。

説明がどうにも分かりにくい!と思いますが、噛み砕いて言うと、

  • 「http://as-is.net/maps/mapup.cgi/coords/緯度,経度」をトラックバックURLに指定してトラックバックPingを送信できるよ。
  • すると、「http://as-is.net/maps/mapup.cgi/coords/緯度,経度?view=html」で表示されるマップに、送信したトラックバックに対応するマーカーが表示されるよ。他の人が近所にトラックバックしたのも一緒に表示されるので情報の共有ができるよ。
  • 「http://as-is.net/maps/mapup.cgi/coords/緯度,経度」というURLをRSS/Atomリーダーに登録しておくと、他の人が近辺にトラックバックしたことが自動的に通知されるので便利だよ。

ってことです。うーん分かりにくいですかね。

で、以下は少しadvancedな説明。

MapUpは緯度、経度のペアで示される「地点」リソース(便宜的にcoordsURLと呼ぶ)、「トラックバックアイテム」リソース(便宜的にitemURLと呼ぶ)に対するREST風のインタフェースを備えています。

coordsURL

coordsURLは以下のような形式を採ります。

http://as-is.net/maps/mapup.cgi/coords/緯度,経度

このcoordsURLに対するGET, POSTリクエストで「地点」リソースに対する操作が行えます。

  • ある地点の近辺に送信されたトラックバックを閲覧するには、coordsURLに対してGETリクエストを行います。戻り値はAtom Feedとして出力されます。
  • また、coordsURLに「?view=html」というオプションを指定すると、このAtom FeedをGoogle Mapsを使って描画して表示します。ブラウザなどで閲覧する場合にはこのURLを指定すればよいということです。例: http://as-is.net/maps/mapup.cgi/coords/35.658586,139.745450?view=html
  • ある地点にトラックバックを送信するには、上記のURLに対してPOSTリクエストを行います。BlogツールのトラックバックURLに上記のフォーマットのURLを指定するだけでよいということです。

itemURL

itemURLは以下のような形式を採ります。

http://as-is.net/maps/mapup.cgi/item/ID

このitemURLに対するGET(取得), POST(更新), DELETE(削除)リクエストなどで「トラックバックアイテム」リソースに対する操作が行えるようになる予定です。今のところろくに実装していません。

2006-05-09追記: 少しはリクエストがあるようなので開発版をsubversionで公開しておきます。

コマンドラインから取得:

$ svn co http://ogawa.googlecode.com/svn/trunk/MapUp MapUp

ブラウザでぶらぶら取得:

http://ogawa.googlecode.com/svn/trunk/MapUp

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com