« 2007年07月 | メイン | 2007年09月 »

2007年08月 アーカイブ

2007年08月31日

Googleが技術者を募集中らしいので。

Googleが技術者を募集中らしいので、腕に自慢の方はぜひGoogleに応募して広告の質を判定してAdWords広告の事前審査を行うアルゴリズムを開発してください!

Google AdSense広告が酷い件

でも70万円くらいならAdSenseで稼げるらしいのでGoogleに応募するよりAdSenseで稼いだ方が賢いかも :-P

で、このページに表示される広告は何でしょうね? 教えて! Googleさん。

カテゴリー: 駄文・雑文

Excelで作ったリストをMovable Typeに放り込むとっても簡単な方法。

ウチの会社で作成したサイトは全部MTで作ってんじゃねぇの? と思われているかもしれませんが、もちろんそんなこたぁありません。

但し昔っからCMS的なサイトの制作を行っていて、「よくこんな小世帯でこんだけのボリュームのサイト作ってんね!?」と言われる答えの一つは「自動化」なわけです。徹夜でガシガシHTMLコーディングってのがWeb屋のイメージなのかもしれませんが、ウチは徹夜はしません。

面接の際に意外によく聞かれるんですけど「徹夜はありますか?」って、世間のWeb屋はどんなんやねん、って思いますよ。

あ、一応答えは「年2回」って答えてます。実際は2回ないけどね。まぁ1回あるかないか。ただ、徹夜になるってことは誰かが何かミスした時しかあり得ないですが、まぁ人間だもの、ミスもあるさっ。

のっけから話それまくりですが、来月こんなイベントがあるそうなのでちょっと前フリというか、ウチでよくやる方法についてちょっと晒してみる(わりと普通なのかなぁ)。

まぁ実際はMTのAPIでもって詳細なカテゴリの関連づけとかブログの切り分けとかテンプレートのインポートとか色々やるわけですが、MT4でエクスポート/インポート形式がちょっとだけ進化したので(ファイル名なんかを引き継げるようになった)、Excelで作成したデータをもとにMTのエクスポート形式のファイルを生成して読み込むって方法が簡単なので紹介したい(もちろん、MT4のバックアップのフォーマットのXMLを気合いを入れて作るって方法もあるよ)。

まず、ExcelとかOpenOfficeとか何でもいいけれどスプレッドシートを作成できるソフトウェアでマスターデータを作る。構造は何でもいいけど、この例ではページのタイトル, カテゴリ, ファイル名, テキスト, 追記なんかを各セルに入力。

Excelでマスタデータを作る

保存形式を「テキスト(タブ区切り)」にして保存。

スクリプトはこんな感じ


#!/usr/bin/perl -w

$fp = $ARGV[0];

open(FH, $fp);
while(<FH>){
    my $line = $_;
    my @datas = split(/¥t/, $line);
    my $html = &_read_tmpl($datas[0], $datas[1], $datas[2], $datas[3], $datas[3]);
    print $html;
}
close(FH);

sub _read_tmpl {
    my ($title, $cat, $basename, $excerpt, $text, $text_more) = @_;
return <<"MT_TMPL_HTML";

--------
AUTHOR: junnama
TITLE: $title
BASENAME: $basename
STATUS: Publish
ALLOW COMMENTS: 1
CONVERT BREAKS: __default__
ALLOW PINGS: 0
PRIMARY CATEGORY: $cat
CATEGORY: $cat
DATE: 08/30/2007 00:00:00 PM
-----
BODY:
$text
-----
EXTENDED BODY:
$text_more
-----
EXCERPT:

-----
KEYWORDS:

-----

MT_TMPL_HTML
}

Macだったらターミナルから引数にマスタ、出力をファイルに指定して実行。WindowsだとActivePerlを入れておく必要があるけど。


perl ./tsv2mt.pl master.tsv > mt_html.txt

生成されたテキストをMTからインポートすればOK。ね、簡単でしょ? コツ、という程じゃないけど、カテゴリは英数文字で指定しておくとカテゴリーのbasenameがこれになってくれる(インポートした後にカテゴリー名とbasenameの関連づけを行う必要があるのだけど、これこそMTのAPIを使えばチョチョイと作れる)。

つまり、ここで書いたことのひとつの具体的な事例ね。

ということで、このエントリーをよく読んでから、以下のエントリーを読むと幸せになれるかも(笑)。

カテゴリー: MovableType, Web制作・ビジネス, プログラミング

2007年08月30日

RebuildAt1stView(Beta) ハイブリッド・パブリッシング対応版。

先日来のProNetミーティングや開発者向けカンファレンスで 上ノ郷谷さんがしきりに「ハイブリッド・パブリッシング」と言っていたのでRebuildAt1stViewをハイブリッド・パブリッシングに対応させてみた。これで、テンプレート毎に「インデックス等、頻繁にアクセスされるページは静的生成」その他のページは「最初のリクエストがあった時点で再構築」という使い分けが可能になります。さぁ、再構築の新しい選択肢を今すぐキミも体験してみよう! とかなんとか。

テンプレートの設定オプション

ダウンロード(Ver.0.2)

以下、プラグインがどうこうというよりもMT4のお作法で書き直しつつ新しいフィーチャーを取り入れてみたいということでメモ的なエントリーになりますが。

オブジェクトの拡張もコールバックも「それ、Registryで」

MT4ではデータベースのテーブルの拡張がとても簡単になっています。Hack-a-thonの時にFujimotoさんが「簡単だよ!」って言っていたので (早速公開された「カテゴリーとフォルダを並べ替えるプラグイン(MT4専用)」でも使われています。

今回はmt_templateテーブルを拡張してテンプレート毎に静的再構築、RebuildAt1stView対象を設定できるようにするフラグ「template_rebuild_at」フィールドを追加しました。

拡張の仕方は本当に簡単。Pluginを->newする時に「schema_version」を指定して「init_registry」で拡張するテーブル名、フィールド名とタイプを指定するだけです。

コールバックのところもこれまでは、


MT->add_callback('MT::App::CMS::AppTemplateSource.edit_template',9 ,$plugin, ¥&_ rebuld_option);

とか書いていましたがMT4では「init_registry」の中で指定します。

この他に、タグの追加や__modeの追加も「init_registry」。init_registryがMT4対応プラグイン作成のキモ? かもしれません。

ということで、RebuildAt1StViewのinit_registryはこんな感じ。


sub init_registry {
    my $plugin = shift;
    $plugin->registry({
        object_types => {
            'template' => {
                'rebuild_at' => 'integer',
            },
        },
        callbacks => {
            'build_file_filter'
                => ¥&_build_file_filter,
            'MT::App::CMS::template_source.edit_template'
                => ¥&_rebuld_option,
            'MT::App::CMS::template_param.edit_template'
                => ¥&_rebuild_flag,
        },
   });
}

日本語版のドキュメント充実にも期待していますが、当面はここでMT4の新しいお作法? のお勉強が可能です。

カテゴリー: MovableType

2007年08月29日

「写真の中の明治・大正−国立国会図書館所蔵写真帳から−東京編」。

本日、国立国会図書館のウェブサイトで「写真の中の明治・大正−国立国会図書館所蔵写真帳から−東京編」が公開されました。国立国会図書館の所蔵する明治・大正期の資料の中から、著名な建築物や観光名所など東京の風景写真約500点を選んで紹介するもので、アルファサードが制作を担当しました。

写真の中の明治・大正−国立国会図書館所蔵写真帳から−東京編

様々な切り口(カテゴリーや地図)で情報にたどり着けるわけですが、Flashを使った地図からの移動においても出来る限り1ページ1URLの形なるように構成されていること、JavaScriptを用いて現在位置(パンくず)表示を閲覧ルート毎に動的に変化すること、Flashが閲覧できない/JavaScriptがOFFの環境でも閲覧に支障がないように配慮されていること(Flashの地図の代替で通常のイメージマップ、等)、最大幅を指定したリキッドレイアウト等、細かなディテールにもこだわったサイトになっています。

このブログを見ている人は同業の制作業界の人が多いと思いますが、そのあたりのディテールにもぜひ注目してもらえればと思います。

カテゴリー: Web制作・ビジネス

2007年08月28日

RebuildAt1stView(Beta) MT4専用全アーカイブ対応版。

最新版はこちらから。

ハイブリッド・パブリッシング(アーカイブ毎に設定できるように)に対応しました!

関連エントリー

概要

通常の再構築は一切行わず「最初にそのページへのアクセスがあった時」に再構築(静的HTMLファイルを生成)を行います。

ダイナミックパブリッシングによる再構築の負荷軽減と静的生成による閲覧時の負荷軽減の両方のメリットを享受できる方式です。

Greg Packer's Publishingの世界へようこそ!

先日のHack-a-thon の後に話していた中でRebuildAt1stViewの話が出ていたのとOgawaさんにも釣られて? いただいたので、ちょっとやってみる。

さて、junnamaさんの再構築に関するエフォートの中で一番示唆に富んでいる(と私が思う)のは、実はRebuildAt1stViewである。

但しTheSchwartz::Jobのみをバックグラウンドかcronジョブで実行するような仕組みのところとか排他処理のところとかはまだやっていない。BackgroundRebuilderをMT4向けの単純なTheSchwartz::Jobのバックグランド処理版で実装したいとは思っていて、このあたりの組み合わせが「再構築」対策の一つの方向性になればと思う。だから、これはまだ途中段階のサンプル。 動作については一切無保証です。改造等はご自由にどうぞ。

MT4対応/全アーカイブ対応/インデックスアーカイブの再構築オプション

今回は、MT4正規版でエラーになっていたらしいのでそのあたりをふまえて全面的に書き直し+全アーカイブ対応とした。以前よりずっとシンプルなものになった。DBの拡張もなし。

  • RebuildAt1stView フォルダをpluginsフォルダにアップロード。
  • 各ブログの「公開」の設定は「すべてのテンプレートを静的に構築する」(画像の通り)。
  • 設定はブログ毎の「プラグインの設定」→「RebuildAt1stView」から行う。個別テンプレート毎の設定はまだできないが、「アーカイブ・テンプレート」のみを対象とすることが出来るようになった(チェックを入れるとインデックス・テンプレートは再構築の際に通常通りファイルが生成される)。

公開の設定

ブログ→プラグインの設定

  • 同梱されている _htaccess のパス情報を環境にあわせて修正し、.htaccessにリネームしてドキュメントルートに設置する。

Options -Indexes
ErrorDocument 404 /mt/plugins/RebuildAt1stView/RebuildAt1stView.cgi
ErrorDocument 403 /mt/plugins/RebuildAt1stView/RebuildAt1stView.cgi

ダウンロード

このプラグインが有効な状態での「再構築」とは即ち「ファイルを削除」することです。 全再構築を行うと生成されているファイルは (設定によりインデックスアーカイブを除いて) すべて削除されます。もちろん見かけ上の再構築処理は非常に軽くて速い。

また新規にエントリーを作成してもファイルは生成されませんし、エントリーを更新したり削除した場合、本来更新されるべきファイルは削除され、最初にそのページへリクエストがあった時点で再構築されファイルシステムに書き出されます。

カテゴリー: MovableType

2007年08月27日

本質を見よ、思考停止するな、頭使え、流されるな。

mixiの擁護をするつもりもないし、なに真面目に反応してんだよオっさんって自分で思わないでもないけれど。

もうちょっと考えて書こうぜってことと、安易にブクマしないでくれ、ということが言いたい。

* ちなみに、こっち↓のエントリーで書かれていることは正論だと思う。

普段から意識して考えていればこれがOvertureのリスティングとかGoogle AdSense広告の種のものであることは直感的にわかると思う。というか僕の頭の中ではそう思った (どうやらこのケースはOvertureらしい)。

問題の本質はOvertureやGoogleが広告の審査をまともにしていないことにある。これまでにも感じるところは何度か書いたが。

関連するエントリー

* このブログ自身ににAdSense広告貼っておいて何を? というツッコミが来るのは覚悟の上で書くが、少なくとも僕は表示させたくない種類の広告はマメにフィルタリングしている。

Googleは検索で稼いでいるのではなく広告で稼いでいる。ところが検索のスパムには過反応するが広告のスパム (スパムというべきかどうかわからないが、少なくとも明らかに根拠の無い広告、見る人を騙しにかかる広告をそう呼ぶことにする) に対してはまったく寛容である。

フィルタリングをまめにしているとご丁寧にこんな感じでアドバイスをいただける。

システムでお客様のサイトを確認しましたところ、下記の方法を実行することでより多くの収益を獲得いただける可能性があります。
フィルタにより、サイトの収益となる広告が除外される可能性があります。

いや、収益じゃなくて道義的な問題を考えているのだし、僕のエントリーが「不労所得」とマッチングするとGoogleは判断しているのかね? どんなアルゴリズムだよ。

* 今回はOvertureの話でGoogleを引き合いに出して恐縮だが、Google AdSenseで、「アドセンスで○○万円稼ぐ」とかいう広告が平気で出ているわけだ。ちゃんと審査しているの? だいたい「○○万円稼ぐ」方法とか実体験を明らかにしたらその時点で規約違反じゃねぇのか?

本題に戻る。「内部」って一体何を指すのだ?

本題に戻ると、先のエントリーで (* 太字強調は筆者)

mixiに通報しても消えない情報商材販売業者の謎があきらかに

「あきらかに」の根拠を問いたい。「あきらかに」というにはあまりにお粗末な内容じゃねぇか。これを「釣り」というのか? で、皆釣られていると。

と思っていた矢先、内部からこんな情報が飛び出した。

「内部」って何の内部なのか? 読者は国語のテストだと思って考えていただきたい。

Q.このエントリーの「内部からこんな情報が飛び出した。」における「内部」が何を指していると考えられるか? 以下の3つから選択せよ。

  1. 「ホームページを作る人のネタ帳」と「2ちゃんねる」の運営主体が同じ。よって、「ホームページを作る人のネタ帳」の内部である「2ちゃんねる」のことを指す。
  2. 「mixi」と「2ちゃんねる」の運営主体が同じ。よって、「mixi」の内部である「2ちゃんねる」のことを指す。
  3. スレッド主が「mixi」の内部の人であり、このスレはmixiの内部告発スレッドであることを指す。

どれも指さないんじゃね? 少なくとも僕なら出題者にケチつけるよ。どれも違ってるぜって。少なくともどれも「根拠」がない。

「mixiに通報しても消えない情報商材販売業者の謎」と言うけれども「mixiに通報しても消えない情報商材販売業者」ってのが本当にあったのかはっきり書かれていないし、通報したという経緯も書かれていないように見える。

この問題の本質はWeb2.0的なネット広告におけるの審査の甘さ、そして「インターネットにおいてはその情報が正しいかどうかを自分自身が考えて判断しなければならない」ってのは「広告」においても同じであって、ネット広告配信者は「検索結果に責任も負わないし、広告の真偽にも責任を負わない」というところにあるのではないのか? そしてそれを誰も問題にしないのは何故か? mixiは怪しいけどOvertureとかGoogleはそんなことないよねってのが君たち (誰に言っているのかわかんねぇけど) の思考なのか?

そして、検証もせずに話題になりそうな「ネタ」を簡単に取り上げる著名ブロガーと著名ブログのエントリーを簡単に鵜呑みにするブックマーカー。そして皮肉にもそのブログとブックマークページ等に表示される「スパム広告」たち。

少なくとも2大検索エンジンのスパム解析・検出技術が「広告審査」に活用されない限り、あるいは「広告」という収益に依存しているからといってどんなスポンサーでも無条件に受入れているような事実があるのだとしたらこのモデルが破綻するのも時間の問題じゃないだろうか? そしてそうならないようにするためにはユーザーが正しい判断をして「そんな広告相手にしない」こと、あるいは「信頼性低くて使い物にならなくね?」という声をあげて行くこと。そして強力な対抗メディアを誰かが作って既存メディアに喧嘩を売って行くことが必要ではない?

だから、mixiに対して言うべきところがあるとしたら、そういったアカウントは規約違反だし削除すべきじゃね? ということと、少なくとも広告で収益を得ているのであれば、規約と矛盾する広告くらいはフィルタリングすべきじゃね? ということくらいである。それは「やっぱりグルだった?」という問題とは根本的に異なる。

まとめ

  • ネタになりそうだからといって検証も根拠も無く記事をポストするのはやめてくれ
  • 著名ブログだからといって内容鵜呑みにしてブクマしないでくれ
  • リスティング広告、検索連動広告はちゃんと審査して少しは信頼性を高めてくれ

ということで、繰り返し言おう。

本質を見よ、思考停止するな、頭使え、流されるな。

カテゴリー: 駄文・雑文

2007年08月26日

Movable Type 4 Hack-a-thon。

Hack-a-thon(1) Hack-a-thon(2) Hack-a-thon(3) Hack-a-thon(4)

まずはじめに言っておく。

  • 僕は怖い人ではありません。いたって陽気な大阪のオっさんです。
  • 立ち位置はスーツです。でも昨日はハッカーの日だったのでスーツを脱いで行きました(何か裸で行ったみたいやな...)。
  • MT歴は一年ほどです。
  • 女子高生に負けない速度で携帯メールが打てるというのは嘘です。
  • ブログを書いたりMTプラグインを書くのはモテるためです。モテるためにMTを選んだのです。WPよりはモテるかなぁ〜っていうのが真実ですって嘘だよ。
  • Hack-a-thon っていうよりむしろ Mac-a-thon みたいやなって思ってましたというのは本当です。

あーいう場[謎]で名刺交換する時の名刺なんやけど、ブログのキャプチャ入れておくといいんじゃないかなぁと思います。もしくは名刺渡すときにブログ名を言いあうのです。

- こんにちは、「Web2.0言うな!」
- あ、こんにちは、「ヒビノアワ」!

あのときこんなコメント入れやがったあいつがこいつか! とかしつこくトラックバック飛ばしやがって重いんだよゴルァとか色んな複雑な感情が微妙な空気を醸し出してくれること間違いなしですって嘘だよ :p

えーなんだかいつもまとまらないブログで恐縮ですが、面白かったので今度大阪でやりませんか Hack-a-thon。ベストプレゼンテーターには特別に串カツのソース二度づけを許可しますとかなんとか。

ちなみに昨日の成果は年度別アーカイブ (Ogawaさんのコード見てお勉強とついでにカッとなって年度の開始月設定できるようにしちゃったよ) とHyper Estraierを使った検索。MTの管理画面から検索のインデックスを更新したりエントリーの追加や削除と連動してインデックスを自動で更新するプラグイン。公開するの? って聞かれたけど...一応メシのタネなんで、、っていうか仕事しないでブログとかプラグインとかばっかり書いてるYo! ウチの社長! って言われないようにしたいのでご興味のある方はウチの会社の方へ問い合わせください。

カテゴリー: MovableType

2007年08月25日

MTでページやエントリーの並び替えとか。

今日はHack-a-thon。午前中のお題はできたので (っていうかやろうと思ってたのにOgawaさんが書いちゃったのでコード読みながらごにょごにょしてた) 、次は何をやるかなぁ。とりあえずページやエントリーの並べ替えかなぁ。検索かなぁ...

エントリーとかページとかカテゴリーとかブログとかの並べ替えをってのはCMSには必須かと思う訳ですが、とりあえず考え方だけ。

エントリーやページに単純に番号を振るってのでもいいんですが、エントリーやページが複数カテゴリーに属する場合とか、それぞれの中で順番制御できた方がいいなぁということで。

  • ソート順を複数定義できるようにする
  • そのために、ソート順のグループを作って名前を付けられるようにする
  • 名前を定義するテーブルとソート順を定義するテーブルを作る(mt_categoryとmt_placementの関係みたいに
  • 並び替えはエントリー、ページ、カテゴリー、ブログに対応させる

そいうことで、こんな感じのテーブルかなぁ。インターフェースがかなり面倒だな。ってかMT4の場合、バックエンドよりViewの実装の方が大変な気がする。半日じゃできなさそうなので、今日はフロント部の拡張方法について把握するとしよう。

mt_sortgroup
sortgroup_idobjectのID(一意)int(11)
sortgroup_blog_idブログのIDint(11)
sortgroup_group_nameソート順グループの名前varchar(255)
sortgroup_object_type(blog|category|entry|page)varchar(25)

mt_sourtnum
sourtnum_idobjectのID(一意)int(11)
sourtnum_blog_idブログのIDint(11)
sourtnum_numberソート順int(11)
sourtnum_object_type(blog|category|entry|page)varchar(25)
sourtnum_object_idオブジェクトのIDint(11)

カテゴリー: MovableType

ハッカソン。

はくばん

SixApartさんにおじゃましてます。

カテゴリー: MovableType, モブログ

2007年08月24日

MTOS (Movable Typeオープンソース) は10月?

残念ながらMovableTypeのオープンソース版が出るのは今年の終わり頃になるようだ。

ちょwwwまて! 聞いてねーし! (笑)

気にならないかと言えば嘘になるけど、憶測なのかソースの根拠な記事なのかわからん書き方せんといて欲しいわ。

ということで、MTOSウォッチャーの Junnama Noda です。「開発者向けカンファレンス」でMTOSはいつ出ますか? なんて質問はしない程度に空気読めるヲっさんです。で、恒例? のmovabletype.org/opensource/ ウォッチング。

MTOSについて

Welcome to MTOSのコメント欄より (一部抜粋*)

* 訳には誤りが含まれているかもしれません。

Smitthi
August 17, 2007 2:08 PM

Hi Byrne,

Would I be able to modify MTOS into other languages such as Chinese or Thai?
and when MTOS will actually come out , next month?
Thanks
S

Byrne、やぁ。
私が、他の言語(例えば中国語またはタイ語)にMTOSを修正することができますか? MTOSは実際いつリリースなの? 来月かな?
Thanks
S

(中略)

Mike
August 21, 2007 12:26 PM

So does '3Q' mean September 31, 2007? Are you on target? Or is this slipping to some time in 2008?

第三クオーターが意味するのは2007年9月31日ですか? (訳者注: 9/31ってありえないし!) 現状狙い通りですか? それとも2008年になりそうですか?

Byrne Reese
August 21, 2007 12:30 PM

I really hate committing to dates until I am 100% certain, but I can confidently say that MTOS will be released in 2007. It may not be released by September 2007 however. As of right now, October 2007 seems like a more realistic release date.

100%確信が持てるまで、私は日付に縛られるのが本当に嫌いなんです。しかし私はMTOSが2007年にリリースされると自信をもって言うことができます。但し2007年9月までにリリースされないかもしれません。現状では2007年10月が現実的なリリース日と言えるかもしれません。

わりとどうでも良い追記

ところで「開発者向けカンファレンス」でほんまに「ブログ」っていう言葉聞かなかったな。MTはブログじゃないよ。ブログだと思ってると損するよ。

カテゴリー: MovableType

Movable Type 開発者向けカンファレンス。

どんな話だったかというと、こんな話だった。

Plugin MT4 registry Component Core.pm MT::Template Brad Choate Entry.pm Hack-a-thon 夢がひろがりんぐ Transformer Elephant Love ステッカー T-シャツ 大阪弁 Category.pm Asset OpenID ExtensibleArchives MTSetVar MTSetVarBlock TheSchwartz Auth Stats Widget Dashboard eq if else until lt gt le ge like MT5 mod_perl2 Dynamic Hybrid Ben Trott module Bookmark 正規表現 CustomField Amazon Flash XML DOM 自重

今日のひとこと

もしMT4に拡張できない部分があったとしたら、それはバグだ。

by Brad Choate


明日はHack-a-thon!

カテゴリー: MovableType

MT4専用「年度」アーカイブ用プラグイン。

MT4専用「年度」アーカイブ用プラグイン。

何をフックにして再構築するか迷ったんですが、結局インターフェイス作るのが面倒ってこともあって、インデックス・アーカイブにタグ<$MTRebuildBusinessYearArchives$>としておくとアーカイブ再構築の際に同時に再構築されるようにしました(直感的じゃねぇですが勘弁してください)。突っ込みとか改造とか歓迎。

プラグインの設定

plugins/にフォルダごとアップロードして「プラグイン」設定で年度の初めの月(デフォルトは4月)を指定。

プラグイン設定

「年」アーカイブテンプレートの作成

「デザイン」→「テンプレート」→「アーカイブテンプレート」(ブログ記事リスト)を作成。名称は「busuiness_year」(名称は固定)。

テンプレートの作成

アーカイブマッピングの設定

*このテンプレートは通常は再構築されません。

アーカイブマッピングの設定

年度別アーカイブを再構築するには、どこかインデックス・アーカイブに<$MTRebuildBusinessYearArchives$>を指定。このインデックスアーカイブが再構築されるタイミングで年度別アーカイブが生成されます。

カテゴリー: MovableTypeプラグイン

続きを読む "MT4専用「年度」アーカイブ用プラグイン。" »

2007年08月23日

MTはブログじゃないぜ。

もしこれらの欠点が受け入れられれば、MT4はブログプラットフォームとして生き残っていくことができるだろう。しかし受け入れられなければ、少なくともしばらくの間は、プラットフォームのアプリとしてはワードプレスや別のプラットフォームに太刀打ちすることができないだろう。

なるほど。

どっちにしても、それはもはやブログではないような気が。初めてブログを作るなら、MTもWPもどっちもあり得ない選択肢だよ。はじめてブログを開設する顧客に勧めるのはWPでもMTでもないね。MT4が逆の方向(めちゃめちゃシンプルな方向性)を目指したら面白かったのになぁ、と個人的には思う。

でもね、そんなことはどうでもいいんだな。僕はMTを使う。MTの本質はブログなんかじゃなくて、Webでやりたいことを実現するための「Web application framework」なんだな。WordPressは残念ながらそうじゃない。

僕にとってのWebはビジネスで、彼ら(6A)にとってのWebもビジネスで、それでいいじゃない。結局はプロとして、何ができるかじゃね。

カテゴリー: MovableType

2007年08月22日

Movable Type4で「年度別」アーカイブ。

「MovableTypeな夏。」で書いたように、今週末に開発者向けカンファレンス(8月24日)とMovable Type 4 Hack-a-thon(8月25日)があって参加する予定なんだけど、色々忙しくてMT4をいぢくったりソース読む時間がないので、ちょっと助走というか頭の体操がてらに「年度別アーカイブ」が作れないかやってみた (&ProNetミーティングで質問したんだけど「ごにょごにょ...今度開発者向けMtgとかHack-a-thonとかありますので...」ってな回答だったので!)。

使い捨て気味のプログラムですがさらしておきますね。文字通り年度別アーカイブを作れるかどうかやってみよう! ってなことで書いたもの。IR系のウェブサイトなんかだと必須だもの。

MT4からは「年」アーカイブが作れる...ということは年度もできるかも!?

「デザイン」→「テンプレート」→「アーカイブテンプレート」→「ブログ記事リスト」で「新しいアーカイブマッピングを作成」、種類「年別」を選択。

年別アーカイブマッピングの設定

コードは以下。エラー処理も最構築(スタティックなファイルの書き出し)も何もないし4月〜3月決めうち! だけど許してね。うまくいったら来週あたりプラグインになってるかも...なってるかな? なってるといいね(誰?)


#!/usr/bin/perl -w

my $MTDIR;
use strict;
BEGIN {
	if ( $0 =~ m!(.*[/¥¥])! ) {
		$MTDIR = $1;
	} else {
		$MTDIR = './';
	}
	unshift @INC, $MTDIR . './lib';
	unshift @INC, $MTDIR . './extlib';
}

use MT;
use MT::TemplateMap;
use MT::Template;

my $mt = MT->new(Config => $MTDIR.'./mt-config.cgi');

use CGI;
my $q = new CGI;
my $at = 'Yearly';
my $year = $q->param('year');
my $blog_id = $q->param('blog_id');
my $start = $year.'040100000';
my $end = $year+1;
$end .='0331235959';

my $tmap = MT::TemplateMap->load(
                        {	blog_id => $blog_id,
                            archive_type => $at,
                            is_preferred => 1
                        },);
my $blog = MT::Blog->load({ id => $blog_id });
my $template = MT::Template->load({id => $tmap->template_id});
my $page_tmpl = $template->text;
my $ctx = MT::Template::Context->new;
$ctx->stash('blog', $blog);
$ctx->stash('blog_id', $blog_id);
$ctx->{current_archive_type} = $at;
$ctx->{archive_type} = $at;
$ctx->{current_timestamp} = $start;
$ctx->{current_timestamp_end} = $end;
my $build = MT::Builder->new;
my $tokens = $build->compile($ctx, $page_tmpl);
my $html = $build->build($ctx, $tokens);
print "content-type: text/html; charset=utf-8¥n¥n";
print $html;

http://localhost/mt/f_year.cgi?blog_id=1&year=2006

ってな具合にアクセスすると...出来てるっぽいな。

うまくいったら来週あたりプラグインになってるかも...なってるかな? なってるといいね(しつこい!?)

カテゴリー: MovableType

MT3のエクスポート,インポートで basename (パーマリンク) を引き継ぐ方法。

つまりMT3からMT4へ移行する時に、データベースのアップグレードじゃなくてエクスポート/インポート機能を使って移行したかったので (だって、せっかくだから「まっさら」にしたいじゃん)。

MT3.xの場合、エクスポート/インポート機能を使ってブログを移行すると エントリーの (カテゴリーも) basename が引き継がれません。つまり「パーマリンク」が変わってしまう。

何のための「パーマリンク」やねん! ってことで basename を引き継いで移行する方法を書いておく(さっきローカルのMT4にこのブログをエクスポート/インポートした。だってテストとかプラグイン開発とかするのにエントリー空っぽじゃなんだかやりにくいし)。

手順は以下の通り。

  • もしエントリーの「使っていないフィールド」があれば、そのフィールドに basename フィールドの値を移す。
  • 「使っていないフィールド」がなければ、どっかのフィールドにHTMLのコメントとかにしてbasename フィールドの値を突っ込む。
  • エクスポート/インポートする。
  • エクスポートインポートした方のブログで、別の場所に突っ込んだ basename を basenameフィールドに突っ込む。
  • いらなくなった basename を削除する。

このブログでは「使っていないフィールド」が無かったので、以下のようなスクリプトを書いた(MTフォルダに置いて実行)。


#!/usr/bin/perl -w

my $MTDIR;
use strict;
BEGIN {
    if ( $0 =~ m!(.*[/¥¥])! ) {
        $MTDIR = $1;
    } else {
        $MTDIR = './';
    }
    unshift @INC, $MTDIR . './lib';
    unshift @INC, $MTDIR . './extlib';
}

use MT;
my $mt = MT->new(Config => $MTDIR.'./mt-config.cgi');

my $iter = MT::Entry->load_iter({blog_id=>1});
while (my $entry = $iter->()) {
    my $basename = '<!--basename['.$entry->basename.']-->';
    my $text = $entry->text.$basename;
    $entry->text($text);
    $entry->save or die $entry->errstr;
    print $basename;
    print "¥n";
}

エクスポート/インポート後、以下のスクリプトを走らせる(whileの中身だけ書くね)。


while (my $entry = $iter->()) {
    my $text = $entry->text;
    my $pick_basename = $1 if {$text=~/<!¥-¥-basename¥[(.*?)¥]¥-¥->/};
    $text =~ s/<!¥-¥-basename¥[.*?¥]¥-¥->//;
    $entry->text($text);
    $entry->basename($pick_basename);
    $entry->save or die $entry->errstr;
    print $pick_basename;
    print "¥n";
}

ついでに、元のブログの方も entry_text フィールドに追加したコメントを削除。


while (my $entry = $iter->()) {
    my $text = $entry->text;
    $text =~ s/<!¥-¥-basename¥[.*?¥]¥-¥->//;
    $entry->text($text);
    $entry->save or die $entry->errstr;
}

アーカイブマッピングの関係で、カテゴリーの basename を引き継ぐ必要がある場合は、上記の方法と同時に以下の処理を行えばOK。

  • カテゴリ名をカテゴリーの description にHTMLのコメントで突っ込む(上記エントリーのやり方と同じ)。
  • カテゴリー名をカテゴリーの basename にする。
  • インポート/エクスポート後に元に戻す。

あ、一応やる場合はデータベースのバックアップとっておくってのと、自己責任だからね!

カテゴリー: MovableType

2007年08月21日

MacBook+MAMP+Movable Type4。

この週末に色々? あるので、MT4をローカル環境にインストールした。以前初期不良? で修理に出していたMacBook黒が帰ってきてからずいぶん経っているので、ほぼまっさらの状態からインストールしたのでメモ。

MAMPのダウンロード

インストールはフォルダごとコピーして起動するだけ。

/etc/hostsの編集

ローカルのテストでもドメインネーム風? でやりたい。


$sudo vi /etc/hosts

127.0.0.1       mt4local.alfasado.net

MAMPのApacheポートを80番に変更

Mac標準のWeb共有とぶつかるのでWeb共有はオフにする。


sudo vi /Applications/MAMP/conf/apache/httpd.conf
# 291,351行目
Listen 80
ServerName localhost:80

MAMPを再起動。

MTの設置

とりあえずは、http://mt4local.alfasado.net/mt とする。

ダウンロードしたMT4を /Applications/MAMP/htdocs/mt に設置。このままではmt/以下CGIが有効にならないので、.htaccessを置く。


sudo vi /Applications/MAMP/htdocs/mt/.htaccess
Options -Indexes
Options +ExecCGI
AddType application/x-httpd-cgi .cgi

これで、http://mt4local.alfasado.net/mt/mt-check.cgiで環境設定確認画面が表示されるようになる。

モジュール関係

モジュール関係は基本CPANから。ImageMagickはFinkを利用してインストール。

* DBD::mysql のところだけメモしておく。


cpan> install DBD::mysql

エラーが出てそのままではインストールできないので、


cd ~/.cpan/build/DBD-mysql-4.005

sudo perl Makefile.PL --cflags=-I/Applications/MAMP/Library/include/mysql --mysql_config=/Applications/MAMP/Library/bin/mysql_config
sudo perl -pi -e's/MACOSX/env MACOSX/' Makefile
sudo make
sudo make install

データベースの作成

MAMPにはPHPMyAdminが含まれているので、とりあえずDBを適当な名前を付けて作成するだけ。

ウィザードから作成

あとは http://mt4local.alfasado.net/mt/mt.cgi を叩いてウィザードから設定。MySQLのポートは8889、ソケットは /Applications/MAMP/tmp/mysql/mysql.sock

まぁ...簡単とは言いがたいですが設定完了。これで開発関係を再開できます!

カテゴリー: MovableType

インターネットはからっぽの洞窟。

たまには普通に書評なぞ。といっても古い本だけど(たまたま今日読み返した)。

この本が書かれたのは1996年。既に10年以上前のものである。著者のクリフォード・ストールは天文学者なのだが、ローレンス・バークレー研究所にいた時にハッカー(当時の表現)の追跡のおかげでネットワークセキュリティの専門家と言われるようになる。この時の事件については彼の最初の著書「カッコウはコンピューターに卵を産む(上) (下)」に書かれており、この本は世界的なベストセラーとなった。

エントリーの標題の「インターネットはからっぽの洞窟 (原題 : Silicon Snake Oil -- Second thoughts on the Information Highway)」はストールの2冊目の著書である。

この本(日本語訳 : 倉骨 彰氏)のカバーにはこうある。

インターネットで仕事が変わり、社会が変わり、世界が変わる−でも、本当にそうなんだろうか?

題名からも分かる通り、当時の既に過剰とも言えるインターネットブームに対して負の側面を当時のネットワークの「ヘビーユーザー」であった著者が指摘したものだ。

もちろん10年以上も前のことであるから彼の主張や当時懸念されていたことの多くは現状解消されている。インターネットでのショッピング(決済)や優秀な検索エンジンの登場、書籍を探すのも随分簡単になった。

ところが、ネットワークについて無知な学者が書いたインターネット悲観論ではないがゆえに現在のネット社会について示唆的な記述が多く見られる。

実は何ら解決していないのが現在のインターネット社会じゃないか、という見方もできる(そういう表現が多くある)。

僕はたまたま今日埃っぽい本棚からこれを取り出してそれこそ10年ぶりにぱらぱらと読んでみた。以下少しだけ引用する。

モデムにご主人をとられてしまったジェニーが教えてくれた。(中略)「でも、デービットに比べたらまだましかもね。彼、私の友達なんだけど、毎晩3時間もネットワークするようになっちゃって。奥さんもいい人で夫婦仲も良かったんだけど、彼をネットワークにとられたと感じて離婚しちゃったのよ。」

誰でも意見を自由に発表できるというのは本当だが、ネットワークでは誰もがいっぺんに好き勝手なことを言いはじめるから、真面目な議論などかすんでしまう。

ネットワークユーザーの中には極端な意見を述べる人が多く(中略) まともな議論になかなか発展しなかったりする。

(中略)

まともに始まった対話が、フレイムウォー (侮辱合戦、誹謗中傷合戦) にまで発展してしまう割合は驚くほど高いのだ。

コンピューター自体の演算速度は速くなっているのに、プログラムの実行速度は遅くなっているのも解せない。

その他にもジャンクメールの話とか、メールが増えすぎたがフィルター使うと大切なメールまでフィルタリングされたりしないか気が気じゃない話とか、ネットワークや電子メールをコピー&ペーストした論文に質の高いものがあるのだろうか、とか...

結局のところ、インターネットとはいっても根本のところでは何も進歩してないんじゃないかと思うような指摘が多くあって、楽しめるというのもおかしな話だが、結構考えさせられる。

ことインターネットについて言えば10年前に書かれた未来予測を読む価値はあまりないように僕自身感じるけれど、この本については (特に) 若いIT/Web業界の人は読んでおいて損はあるまい。送料はともかくユーズド (amazon) なら安いものだし。

カテゴリー: 書評など

2007年08月20日

Googleはそろそろ広告についてもスパム対策を行ったらどうか?

ただし、最近はアフィリエイト狙いなのか、単にキーワードばかり羅列しただけの「スパムブログ」が多く引っかかって閉口しています。 Technorati による検索結果の方がスパム数は少ないけど、ヒットするエントリが少ないから単純に Technorati の方が優秀という訳にもいかないし。

テクノラティは結構マメにスパムを排除していると思う(感覚的なものですけどね)。どこまで機械化されているのかわからんですが。

テクノラティのブログランクを見ているとそんな感じがする。順位は相対的なものなので上下するのはあたりまえだろうが、リンクされているブログの数やリンクの数がわりとマメに増「減」しているのだ。

テクノラティのランキング

いずれにしてもスパムブログ対策ってのは昨今の重要テーマであることは間違いない。検索エンジンのノイズ、トラックバックノイズ、コメントノイズ、ブックマークノイズ、そしてもちろんスパムメール、ウェブ/インターネットは雑音だらけである。

そして、サービス提供者はCaptchaを導入し、視覚障害者はサービスを利用できなく(あるいは極端にしづらく) なっていく。

「イタチごっこ的な対策ではない何か」はあるのか?

多分そんなものは無いのだろう。ただ、スパムを解析するアルゴリズムの研究とそれを突破するアルゴリズムの研究とかは置いておいて別の方法も考えてみたらどうか。

例えば「スパマーの収入源を元から絶つ」方法。

例えばGoogleにとって「スパムブログを検索結果から排除する」行為と「スパムブログに貼られたAdSenseのアカウントを剥奪する」行為のどちらが有効な手段だろうか?

*収益とユーザーの批判を気にしたら、まぁ後者の方法はとれないんでしょうけどね。

また、サイトに表示される広告の質も疑問である。

  • ミク○ィで毎月○○円稼ぐ方法
  • 携帯アフェリで月○○○円稼ぐ
  • 元ニートが○○○円稼いだ方法とは?
  • アド○ンスで○○万円稼ぐ

で、あんまり露骨なのは嫌なのでフィルタリングする。するとGoogleからご丁寧にメッセージが来る。

システムでお客様のサイトを確認しましたところ、下記の方法を実行することでより多くの収益を獲得いただける可能性があります。
フィルタにより、サイトの収益となる広告が除外される可能性があります。

Googleは間違いなく各種スパムを排除する優秀なアルゴリズムをもっている企業であろう。ところがGoogle自身の収益源である「広告」においてその真偽性や質によるフィルタリングはかけられていないようだ。

別にスパム云々ではないケースだが、以前広告 (内容は公共的なもの) をGoogle、Overtureに出稿した時、GoogleはノーチェックでパスしたがOvertureのチェックは結構厳しかった。

アフェリエイトにしてもAdWordsにしても、審査を厳しくして違反行為を取り締まることにこそ重点を置くべきでないのだろうか? そっちの方が余程効果がありそうなものだ。

もちろん、Googleが「ミク○ィで毎月○○円稼ぐ」広告をユーザーの利益につながる広告であると本気で思っているのであれば話は別だが。

それとも本当に「自作自演なのだろうか?」

...などというエントリーに広告を貼付けると一体どんな広告が表示されるのだろうかね?

カテゴリー: 駄文・雑文

2007年08月19日

違う、我々が欲しいのは電源が長持ちして熱くならない携帯電話だ!

違う、我々が欲しいのは電源が長持ちして熱くならない携帯電話だ。

「ワンセグ」なんて要らなくね? 重さとか大きさが倍だっていいぜ! これ本音。他にも、

違う、我々が欲しいのは「題名」と「内容」と「投稿ボタン」だけのシンプルなブログソフトだ。

とか、「シンプルさ」を追求するところからヒット商品やサービスが生まれるかもしれない。

カテゴリー: 駄文・雑文

Movable Type4で商用CMS並みの多機能CMSを作っちゃえ!

Movable Type4をベースにしてウェブサイト制作・運用のための高機能CMSを開発しよう

Movable Typeを利用したサイト制作やウェブアプリ開発なんかをこの1年くらいでかなりやってきたのですが、これまでは社内でサイト制作のための色々な独自のプラグインとかCMSテンプレートとかを作って使っていました。MT4がリリースされたこと、当社内に色々なノウハウが蓄積されて来たこと、当面受注済みの案件でMTを使う方針になっているものが少なからずあることから、『MT4をターゲットにした「高機能CMS」を作ろう』プロジェクトが社内で進行中です。

完成したあかつきには、当社内で制作する各案件で使う他、公開しちゃっていいじゃない! 的なものは一部公開するかもしれませんし、ニーズがあればパッケージで販売するかもしれません。MTOSが出た際には、MTOSベースの何かとしてリリースするかもしれません。

で、どうせ作るのだったらいっそ「そのプロセスを公開して、こんなものが欲しいとかそんな意見があれば吸い上げてみたら面白いんじゃね? 僕たちのような制作現場の制作者のニーズを集めてこそ良いものが作れるんやし」という考えで、今社内MLでやりとりしている内容をオープンにしちゃいます。

このやり取りの中で出てくる「PowerCMS」というのが当社の社内で使っていたMT3.3用の(非公開の)プラグインセットです。フィールドの拡張やエントリーの並び順制御、エントリーの複製とかエントリーのひな形を作れたり承認フローが組み込まれています。

以下のエントリーでキャプチャとか一部見られます。

ちなみに、携帯(モブログ)完全対応とか高速全文検索なんかは基本既に出来ているので話題に上がっていません。

まずは僕から社内MLに投げた一通のメール

>各位

野田です。お疲れさまです。

MTベースで作成するCMS系案件が今後増えて来ます。というか、意図的にそういう営業というか情報発信を行っているせいですけど。

すべてをゴリゴリ開発するのはいかにも効率が悪いよな。
そこで、以前から話していたように、「マークアップエンジニア=MVCのV担当」相当のスキルと知識があればCMSが顧客向けにカスタマイズできるプラグインセット(以前作成していたPowerCMSプラグインのMT4向けさらに強化されたもの)を作りたいと思います。

そこで、

  • まずはどんな機能が制作者として欲しいのか
  • どんな機能があればクライアントは喜ぶのか
  • どんなものだったら他の製品と比較して優位性があるのか
  • どんなものだったら当社の優勢性が活きるのか

についてまずはアイデアフラッシュをメールベースでやりとりしたいと思います。

PowerCMSにあった機能としては、

  • フィールドの分割
  • エントリーのテンプレート化機能
  • 承認フロー
  • エントリーやカテゴリーのソート機能(Drag&Dropは欲しいところ)
  • アップロードしたファイルの管理(エントリーとの関連付け、公開・非公開の設定)
  • エントリーのプレビュー機能

今後欲しいもの

  • 「付箋」機能(修正指示とかを付けられる)
  • 簡易スケジューラー(以前**の案件で作った施設予約・管理みたいなインターフェイスで各スタッフのスケジュール共有ができるもの)
  • 完璧なファイル管理(アップロードしたファイルだけでなく、再構築で吐き出されたファイルも管理できる)
  • (機能ではないが)高速化のためのソリューション
  • 認証付きページが簡単に作れるインターフェイス
  • 複数ブログの連携(同時再構築)機能
  • エントリー以外のプレビュー(インデックスアーカイブとか日付/カテゴリーアーカイブもプレビューできる)
  • 年度別アーカイブ
  • 各ブログへの掲示板やメーリングリスト機能
  • 簡単なファイルアップロード
  • より賢いWYSIWYG

できればファイルアップロードや並べ替えはAjaxだけじゃなくてFlexとかを使ってFlashによってすごく使いやすいものにしたらどうかなぁ。

まずは各人が欲しいものをMLベースでやりとりしましょう。


以下、各スタッフが思い思いに好きなことを


地味な機能ですが

<MTIfPageDirectory directory="foo"></MTIfPageDirectory>
<MTIfPageParentDirectory directory="bar"></MTIfPageDirectory>

のようなタグが欲しいです。
エントリーではなくページを作成するときにカテゴリーが存在しないため、
テンプレートの分岐はタグを使用することになります。
タグはエントリーとも紐付いてしまうので、
できれば特定のディレクトリで分岐できるテンプレートタグがあると便利かと思
います。
また、「親ディレクトリが○○の場合」の分岐もあると便利かと思います。
(Alfasadoのサイトはタグで分岐しています。)


ひとまず一つ希望です。

・簡単なファイルアップロード
に含まれているかもしれませんが、
画像などのファイルアップロードを複数同時にできるとすごく便利だと思います。
それも、一つ一つ「参照」で選ぶのではなくて
がばっと選択してドラッグドロップできるのがいいと思います。
(FTPと同じくらいの使い勝手)


例えば**様の案件などでは「イントラでの知識の蓄積と共有」がテーマとして大きな比重を占めていることもあり、掲示板という路線で行くわけですが、これに関連し、ユーザ個々人が参考になった掲示板の発言をワンクリックでどこかにとっておく機能があれば、少なくともこのテーマ上では役に立つような気がします。

googleの「メモをとる」に相当する機能です。
google上ではクリックミス以外でこの機能に関わったことはありませんが、いちいち掲示板を見に行って、過去に見た発言を探したり、エディタにコピペしてローカルに保存するよりは手間が省けると思います。
もちろん、個々人が判別され、とったメモを閲覧するマイページが存在することが前提となりますが…


PowerCMSでも、「エントリーテンプレート」ってありましたけど、エントリーのひな形を視覚的にサムネイル一覧から選択して新規投稿とかできると良いですよね。

他に、「付箋」や「並び替え順」**さん指摘の「ファイルアップロード」の件で欲しいのは「Drag&Drop」ですよね。

特にファイルのアップロードについては、現実的にブラウザのセキュリティ制限等から難しいところがあります。

そこで、

・アップロードはZipアーカイブ等で一時ディレクトリに一括アップする
・ブラウザ上でエクスプローラーっぽいインターフェイスでDrag&Dropで登録していく

というような発想でできないでしょうか。


ところで、やっぱ、アクセス解析は要るでしょうねぇ...


加えて、検索ログビューアがついていれば
ユーザの挙動の把握については完璧ですね。

**の案件で使っているHyperEstraierのように、**さんの**にログを吐き出させて、検索結果のアンカーにパラメータをつけてクリックログをとるような感じで。


ないとすごく不便とかそういったものではないですが、DreamweaverやFlashのActionscript欄のように、入力しているタグの属性を補完して
くれる機能が欲しいです。

エントリー内容のエディタで<a まで打ったら、<a [href=]のようにツールチップで出てきて、タブやエンターで選択してで補完できるものです。

タグ全部を打つのが、間違ったり面倒くさかったりするので、個人的にあったら便利かなあと思います。


さて、何か欲しいものありますか?

とまぁ、こんな感じでまずは好きなことを言いあっています。一応全員が何らかの役割を担うということで担当割り振りは済んでいます。

さて、もし何か「こんなものがあれば便利なのに!」ってなことがあれば、コメントなりトラックバックなりブクマなりで列挙してもらえればいいかなぁ。もちろんやるかどうかの判断はあくまでウチの都合なんですけど。

カテゴリー: MovableType

2007年08月18日

Nakedがじわじわ?来てるので。