hirohama.mtで“Movable Type”タグの付いているブログ記事

Movable TypeからBloggerへの引越を検討中。

以前は、Six Apart作成のMovable Typeとその派生サービスか、Automatic作成のWordpressだけがブログの本流で、それ以外は邪道だと考えていたたのだけど、もはや、アメブロでもLivedoorブログでも、どこでもいいかなあ、と。

今使っているMTはバージョン4で、既にリリースされている最新のバージョン5では、ブログの管理体系が変わるので、バージョンアップに時間と手間がかかりそう。
カスタマイズしたCSSとか、インストールしたアドオン、その他諸々をきれいにバージョンアップするのはさらに時間がかかりそう。
で、時間を消費したくないので、引越を検討中。

無料で使えて、自分とは無関係な広告が表示されずに、Google AdSenseやAmazonアソシエイトが使えて、すぐにはなくならなそうなサービス、、、というと、Google Bloggerに行き着いた。

ドメインはもう少し使えるので、そのまま。

http://blog.hirohama.biz/

最近は、Twitterを「各種Web上の個人活動のサマリー」としても使いつつある。

それと言うのも、FriendFeed経由で、全ての行動をTwitterへPushすることができるから。

図にするとこんな感じ。

現在利用しているオンラインサービスの相関図

FriendFeedは、たまに調子が悪くなることもあるので完全には信頼できないけど、まあまあ順調に稼働している模様。

この「各種更新情報」に加えて、「つぶやき」も適当に織り交ぜているので、どこかにTwitterのログは保存しておきたい。

で、今はブログのサイドバーにだけ配置しているAction Streamsのページを、「サンプルテンプレート」からコピー&ペーストして2ページ作ってみた。

hirohama.mt

hirohama.mt


下のページを参考に、Twitterだけ表示してみた。

<mt:ActionStreams> (MTActionStreams) | MovableType.org - Home of the MT Community


service (optional)

The ID of the service from which to show actions. Service IDs are the keys used in their service definitions; for example, Twitter's ID is twitter, and Delicious' ID is delicious.

For services with multiple streams, limiting only by service without a stream will list all actions from all of those streams. For example, service="flickr" will list both Flickr photos and Flickr favorites.

久しぶりに、ectoを立ち上げてみた。

DSC_8089

このバージョンでは、MTのタグに対応したんだっけ?と思いきや、やっぱりtechnoratiのタグだった。
flickr helperが動かなかったけど、以下のサイトを参考にして、Flickr Helperを参考にして、アドオンをアップデートしたら動いた。
mersy's lab - ectoでFlickr Helper

やっぱり、ブラウザで直接書くのが良いのかな。

MacJournalからテスト投稿してみる。

以前購入したectoが、アップデートを放置されて、よくわからない会社に買収されて、最近はiPhoneアプリに注力しているようで、、、

せっかくectoのWindows版とMac版の両方購入したのだけど、失敗だったかな?
残念。

MacJournalでも、Movable Typeのタグには対応していない様子だなあ。。。

先日、久し振りにデザインを変更した勢いで、「一括ブログコメントシステム」を入れてみた。

DISQUS | Turn Blog Comments into a Webwide Discussion with a Powerful Comment System入れようかな、とちょっと考えたあとで、「まあ機能的に大差ない、あるいは劣っていたとしても、とりあえず純正にしておこうかな。」という軽いノリで、こちらにしておいた。

TypePad Connect Beta を開始 | MovableType.jp

TypePad - TypePad Connect Beta - Home

以前のコメントは表示しつつ。

「自分のコメントへの返信」があった時にメールが届くのは便利かも知れない。

R0013043
GR Digital 手持ち!

ようやく、このブログのデザインを元に戻した。

1.リキッドレイアウトへの変更

こちらを参考にして、リキッドレイアウトへ変更した。

サイドバー固定幅・メイン可変幅のリキッドレイアウト - tatzulog

2.色の変更

やっぱり「白と黒」が落ち着く。
何か「さし色」があってもいいけど、とりあえずは「白と黒」

3.引用文

引用文は、点線で。

4.その他

フッター変更したり、AdSenseの色も白黒に変更したり。

5.ついでにトラックバック対策

Coreserverの管理画面で「アクセス状況」を見てみたら、やけに付加が高くて、「リアルタイム状況」で確認すると、、、トラックバックスパムが来襲していた。

Movable Typeトラックバックスパム対策 mt-tb.cgiのリネーム | モリタ電器を参考にして、対策を施してみた。

デザインの元は、SixApartで用意している「Unity-Blue」。

参考資料:CSSはよくわからないので、この書籍を参考にした。

「標準のスタイルシートをカスタマイズする」時に、非常に重宝した。
全スタイルに、解説が載っていたので。


11/27追記
6.トップページには、二件目以降のエントリーはタイトルだけに変更した。

7.プラグインiMTのせいで管理画面の表示がおかしかったので、削除した。

11/30追記
8.トップページのサイドバーにある「Action Streams」で、flickr画像を表示させた。

こちらを参考にして。
memo(というか下書き):ActionStreamsでサムネイル表示 - Vox

9.カテゴリーアーカイブで、エントリーが一件だけ表示になっていたので、2件目以降はタイトルが表示されるように変更。

したつもりが、「月別アーカイブ」にも適用されてしまう。

Related Entries in Movable Type | Devloungeを参考にして、「関連記事 (Related Entries)」を表示させてみた。

プラグイン無しで、あっという間に完成。

同じタグを付けているエントリーをずらっと並べてくれる。

R0012212

だけど、Entryを「ブログ記事」って訳すのは、いくら初心者から「エントリーでは紛らわしい」というクレームがあったとしても、違う気がするなあ。>KNKさん。


昨日は夕日がやけにきれいだったのでオフィス近くから撮影してみた。

R0012210

最近週末はパソコンをあまりいじらない健康的な生活が続いていたのだけど、先日パソコンの前で待機する必要があったので、暇つぶしにこのブログに手を加えた。

・Movable Type 4.0から4.1へアップグレード
・ウィジェットを作成:参考:http://www.movabletype.jp/documentation/versionup/mt4_to_mt41.html
・ウィジェットを利用:「デザイン > テンプレート > テンプレートモジュール」で「サイドバー(2カラム)」を修正。
・2004/8以前の旅行記を「ページ」でちょっとだけ作っていたので、サイドバーに追加。
・適当にウィジェットをいじった。
・Style Catcherでスタイル変更。
・Action Streamsプラグインのインストールと、ウィジェットの設定。:ウィジェット用にそのまま貼り付けられるコードは、ZIPファイルの奥にあった。

うううむ。いい暇つぶしになった。

ウィジェットマネージャは、サイドバーなどを部品化できて、ドラッグアンドドロップで簡単に順番を変えられて、いいかも。

Movable Type 4.1にアップグレードして、re-buildに必要な時間が短縮されたような気がしないでもない。

デザインとかスタイルシートの変更は、また今度暇なときにでも。

どうもコメントできないみたいなので匿名オンリーにしてみた。このブログ。

elsewhere
とりあえずココに入れてみた。
この機会に、Movable Type 4.1の日本語版を、新規に、英語モードでセットアップしてみた。

ちょっと楽しい。

が、初回以外は、Rebuild Indexes:Enable rebuildingと設定していても、ブラウザからのRebuildだけでは、更新してくれないっぽいなあ。

coreserver.jpはcron使えるので、tools/run-periodic-tasksを、登録しておいた。

参考:
TechCrunch Japanese アーカイブ » SixApart、MovableTypeに「Action Streams」プラグインを提供―これは上出来

Building Action Streams - MovableType.org - Home for the MT Community

Six Apart - News and Events: Time for Action: What We're Opening Next

WebSig24/7 MT4分科会 第1回イベント「WebSig24/7 2007年秋 MT4の日 」が終了しました。 (WebSig24/7)

mixi経由で知った勉強会。
この手のものは今まで参加したことが無かったので、どんなものなのかと、完全に素人として参加してきた。
99%趣味で、1%仕事モードで。

ちなみに、運営の方々は、完全にボランティアで、ご苦労様でした。

koikikukanさんのプレゼン1時間

サイトから、どこかの演奏家さんが趣味でパソコンやっているのかと思いきや、IT業界の人だったとは。
「人前でこんな形で話すのは初めて」とのことだったけど、非常に理路整然と、さくさくとスライドを進めていき、画面キャプチャもすごくきれいで、初めてとは思えなかった。

MT4にしてからは、自分でデフォルトのスタイルシートを元に少しずつカスタマイズしていこうとしているけど、MT3の時は、koikikukanさんのテンプレートを、ほぼそのまま使わせて頂いていた。

また、膨大な数のコメントにもきちんとレスされていて、人柄がしのばれる。

グループに分かれて個別作業

junnamaさんのグループで、個別作業
完全な初心者だったので、自分の課題をちゃんと考えていかなかったが、その場でイロイロと質問させて頂いた。

懇親会

皆さん仕事でMT使ってる方が多くて、まさにMTは「エコシステム」(MySQL ABが良く使う用語)を形成しているな、というのが感想。
無料、もしくは安価に使えるCMSとしては、非常にメジャーになってきている。

ただ、ページを静的に作成するのってどうよ、という議論は、「適材適所」と言うのがよくある回答だけど、もはや「動的」が正解でしょう。どう考えても。MTも近いうちに「動的」になるでしょう。

iPhone向けインターフェイスiMTを使ってNOKIA E61からポストしてみるテスト

[PCから追記]
入れたプラグインがコレ。
iMT - iPhone Interface for Movable Type | Plugin Directory | movabletype.org
/mt/plugins/iMT/iMT.pl
の80行目あたりを変更して、とりあえずOperaからアクセスすると、iPhone用の管理画面にいくようにしてみた。
PCではOpera使わないし、NOKIA E61ではOpera Mini使っているので。

検索機能をトップ画面右上に貼付けた。
Google Co-opを使って、本当に簡単に検索機能が実現できた。
大げさじゃなくて、10分ほどで。

検索結果も、このサイトのデザインと合うように。
検索対象は、このブログだけじゃなくて、もう一つのブログと、wikiも合わせて、まとめて検索。

楽しい。

予定通り4.0が公開されたので、ここもアップグレードした。
私の環境では、上書きではアップグレードできず。

一回目:データベースそのまま、ファイルもそのままで上書きしてアップグレード→アップグレードスクリプトがうまく動かずに失敗
二回目:データベースそのまま、ファイルをまっさらな状態にして、アップグレード→成功

となったのだけど、そろそろテンプレートとかスタイルシートとかも整理したかったので、この機会に整理した。
3.xでは普通に使えていたMTSubCategoriesがメインページで使えなくなっていたり、4.0のタグリファレンスが未だ整備されていなかったり、とアレだったのでアップグレードでは無くてクリーンインストールしてみた。

三回目:データベースもまっさらなものを用意して、クリーンインストールしてから、記事をインポート

MTの機能でエクスポート/インポートしたので、category_idなどが変わったり、categoryの親子関係が崩れたりしたけど、良い機会なのでcategoryの代わりにtagを利用することにした。

まっさらな状態から、やったこと。

  • ヘッダーへGoogle AnalyticsとAcceessAnalyzerのコード追加
  • feedburner用にfeed生成と、.htaccessを配置
  • php化と生成するファイル名の変更
  • Google Sitemaps用のxmlファイル作成→確認したら、Errorになっていた。Specを見るとFormatは問題無さそうだったのだけで、xmlnsのURIだけが微妙に変わっていたので、修正。
参考:http://e-club3.hyperposition.com/seoblog/searchengine/20061116220542.html
http://www.sitemaps.org/protocol.php

  • デザインの変更
    • スタイルシートの変更。直接修正するのでは無くてhirohama_themeを作成してimportして上書き。こんなことしているのは、いつでも戻せるように。
    • サイドバー(3カラム)テンプレートをカスタマイズ。
  • 「修正」リンクの追加
あとは気が向いたら少しずつ変えていこうかと。


やっぱりアップグレードは要注意。


少なくとも、3.xでサポートしていたタグは、少なくともそのまま動くようにしてほしかった。タグリファレンスは未だできてないし。

http://www.movabletype.jp/documentation/

テンプレート・タグ リファレンス (Movable Type 4 対応のものは現在編集中です)
http://www.movabletype.org/documentation/appendices/tags/toplevelcategories.html

このページからMTSubCategoriesをクリックすると、Page Not Foundだし。


と、アップグレードでは色々あるけど、4.0自体はいい感じに進化してますよ。

ちゃーんとモジュール化されて、カスタマイズが簡単になったし、管理画面も今まで以上に使いやすくなった。

これでWordPressの長所はほぼ網羅したし、タグが標準でサポートされているのはうれしい。

Rebuild時の負荷も、それなりのホスティングサーバーを選べばそのままで問題無いし、あるいは自分でダイナミックパブリッシングにするのもアリ。

個人的にはおすすめ。

エントリーが増えると、異様に検索速度が遅くなるMovable Type

R0011593

ためしにローカルの、エントリーが20~30の環境で"myisam"と検索してみると、「検索ボタン」を押すだけで、こんなにクエリを発行する。


/usr/local/mysql/bin/mysqld, Version: 5.0.42-enterprise-gpl-log (MySQL Enterprise Server (GPL)). started with:
Tcp port: 3309 Unix socket: /tmp/mysql4.sock
Time Id Command Argument
070719 18:23:47 1 Connect mt@localhost on mt4
1 Query set autocommit=1
1 Query SELECT config_id
FROM mt_config
1 Query SELECT config_id, config_data
FROM mt_config
WHERE (config_id IN ('1'))
1 Query show variables like "character_set_database"
1 Query SET NAMES utf8
1 Query SELECT author_id
FROM mt_author
WHERE (author_name = 'hirohama') AND (author_type = '1')
1 Query SELECT author_id, author_api_password, author_can_create_blog, author_can_view_log, author_created_by, author_created_on, author_email, author_entry_prefs, author_external_id, author_hint, author_is_superuser, author_meta, author_modified_by, author_modified_on, author_name, author_nickname, author_password, author_preferred_language, author_public_key, author_remote_auth_token, author_remote_auth_username, author_status, author_text_format, author_type, author_url
FROM mt_author
WHERE (author_id IN ('1'))
1 Query SELECT session_id
FROM mt_session
WHERE (session_kind = 'US') AND (session_id = 'xxxxx')
1 Query SELECT session_id, session_data, session_email, session_kind, session_name, session_start
FROM mt_session
WHERE (session_id IN ('xxxxx'))
1 Query SELECT session_id
FROM mt_session
WHERE (session_kind = 'UA') AND (session_name = '1')
1 Query SELECT session_id, session_data, session_email, session_kind, session_name, session_start
FROM mt_session
WHERE (session_id IN ('ooooo'))
1 Query SELECT 1 FROM mt_session
WHERE (session_id = 'yyyyy')
1 Query UPDATE mt_session SET
session_start = 'zzzzz'
WHERE (session_id = 'yyyyy')
1 Query SELECT blog_id, blog_allow_anon_comments, blog_allow_comment_html, blog_allow_commenter_regist, blog_allow_comments_default, blog_allow_pings, blog_allow_pings_default, blog_allow_reg_comments, blog_allow_unreg_comments, blog_archive_path, blog_archive_tmpl_category, blog_archive_tmpl_daily, blog_archive_tmpl_individual, blog_archive_tmpl_monthly, blog_archive_tmpl_weekly, blog_archive_type, blog_archive_type_preferred, blog_archive_url, blog_autodiscover_links, blog_autolink_urls, blog_basename_limit, blog_cc_license, blog_children_modified_on, blog_convert_paras, blog_convert_paras_comments, blog_created_by, blog_created_on, blog_custom_dynamic_templates, blog_days_on_index, blog_description, blog_email_new_comments, blog_email_new_pings, blog_entries_on_index, blog_file_extension, blog_google_api_key, blog_internal_autodiscovery, blog_is_dynamic, blog_junk_folder_expiry, blog_junk_score_threshold, blog_language, blog_manual_approve_commenters, blog_meta, blog_moderate_pings, blog_moderate_unreg_comments, blog_modified_by, blog_modified_on, blog_mt_update_key, blog_name, blog_old_style_archive_links, blog_ping_blogs, blog_ping_google, blog_ping_others, blog_ping_technorati, blog_ping_weblogs, blog_remote_auth_token, blog_require_comment_emails, blog_sanitize_spec, blog_server_offset, blog_site_path, blog_site_url, blog_sort_order_comments, blog_sort_order_posts, blog_status_default, blog_use_comment_confirmation, blog_welcome_msg, blog_words_in_excerpt
FROM mt_blog
WHERE (blog_id = '1')
LIMIT 1
1 Query INSERT INTO mt_log
(log_author_id, log_blog_id, log_category, log_class, log_created_by, log_created_on, log_ip, log_level, log_message, log_metadata, log_modified_by, log_modified_on)
VALUES ('1', '1', 'straight_search', 'search', '1', '2007-07-19 09:23:47', '127.0.0.1', '1', '検索: myisam', NULL, NULL, '2007-07-19 09:23:47')
1 Query SELECT entry_id
FROM mt_entry
WHERE (entry_status = '2') AND (entry_blog_id IN ('1'))
ORDER BY entry_authored_on DESC
1 Query SELECT entry_id, entry_allow_comments, entry_allow_pings, entry_atom_id, entry_author_id, entry_authored_on, entry_basename, entry_blog_id, entry_category_id, entry_class, entry_convert_breaks, entry_created_by, entry_created_on, entry_excerpt, entry_keywords, entry_modified_by, entry_modified_on, entry_pinged_urls, entry_status, entry_tangent_cache, entry_template_id, entry_text, entry_text_more, entry_title, entry_to_ping_urls, entry_week_number
FROM mt_entry
WHERE (entry_id IN ('48','47','46','45','44','43','42','40','39','38','37','36','35','34','33','32','31','30','29','28','27','26','25','24','22','21','20','19','18','17','15','14','13','12','11','10','9','8','7','5','4','3'))
070719 18:23:48 1 Query SELECT template_id
FROM mt_template
WHERE (template_blog_id = '1') AND (template_type = 'search_results')
1 Query SELECT template_id, template_blog_id, template_build_dynamic, template_created_by, template_created_on, template_identifier, template_linked_file, template_linked_file_mtime, template_linked_file_size, template_meta, template_modified_by, template_modified_on, template_name, template_outfile, template_rebuild_me, template_text, template_type
FROM mt_template
WHERE (template_id IN ('15'))
1 Query SELECT template_id
FROM mt_template
WHERE (template_name = 'Header') AND (template_type = 'custom') AND (template_blog_id = '1')
1 Query SELECT template_id, template_blog_id, template_build_dynamic, template_created_by, template_created_on, template_identifier, template_linked_file, template_linked_file_mtime, template_linked_file_size, template_meta, template_modified_by, template_modified_on, template_name, template_outfile, template_rebuild_me, template_text, template_type
FROM mt_template
WHERE (template_id IN ('28'))
1 Query SELECT template_id
FROM mt_template
WHERE (template_identifier = 'base_stylesheet') AND (template_type = 'index') AND (template_blog_id = '1')
1 Query SELECT template_id, template_blog_id, template_build_dynamic, template_created_by, template_created_on, template_identifier, template_linked_file, template_linked_file_mtime, template_linked_file_size, template_meta, template_modified_by, template_modified_on, template_name, template_outfile, template_rebuild_me, template_text, template_type
FROM mt_template
WHERE (template_id IN ('5'))
1 Query SELECT template_id
FROM mt_template
WHERE (template_identifier = 'theme_stylesheet') AND (template_type = 'index') AND (template_blog_id = '1')
1 Query SELECT template_id, template_blog_id, template_build_dynamic, template_created_by, template_created_on, template_identifier, template_linked_file, template_linked_file_mtime, template_linked_file_size, template_meta, template_modified_by, template_modified_on, template_name, template_outfile, template_rebuild_me, template_text, template_type
FROM mt_template
WHERE (template_id IN ('1'))
1 Query SELECT template_id
FROM mt_template
WHERE (template_identifier = 'hirohama_stylesheet') AND (template_type = 'index') AND (template_blog_id = '1')
1 Query SELECT template_id
FROM mt_template
WHERE (template_name = 'hirohama_stylesheet') AND (template_type = 'index') AND (template_blog_id = '1')
1 Query SELECT template_id, template_blog_id, template_build_dynamic, template_created_by, template_created_on, template_identifier, template_linked_file, template_linked_file_mtime, template_linked_file_size, template_meta, template_modified_by, template_modified_on, template_name, template_outfile, template_rebuild_me, template_text, template_type
FROM mt_template
WHERE (template_id IN ('59'))
1 Query SELECT template_id
FROM mt_template
WHERE (template_name = 'Entry Summary') AND (template_type = 'custom') AND (template_blog_id = '1')
1 Query SELECT template_id, template_blog_id, template_build_dynamic, template_created_by, template_created_on, template_identifier, template_linked_file, template_linked_file_mtime, template_linked_file_size, template_meta, template_modified_by, template_modified_on, template_name, template_outfile, template_rebuild_me, template_text, template_type
FROM mt_template
WHERE (template_id IN ('19'))
1 Query SELECT templatemap_id
FROM mt_templatemap
WHERE (templatemap_is_preferred = '1') AND (templatemap_archive_type = 'Individual') AND (templatemap_blog_id = '1')
1 Query SELECT templatemap_id, templatemap_archive_type, templatemap_blog_id, templatemap_file_template, templatemap_is_preferred, templatemap_template_id
FROM mt_templatemap
WHERE (templatemap_id IN ('6'))
1 Query SELECT template_id
FROM mt_template
WHERE (template_name = 'Entry Metadata') AND (template_type = 'custom') AND (template_blog_id = '1')
1 Query SELECT template_id, template_blog_id, template_build_dynamic, template_created_by, template_created_on, template_identifier, template_linked_file, template_linked_file_mtime, template_linked_file_size, template_meta, template_modified_by, template_modified_on, template_name, template_outfile, template_rebuild_me, template_text, template_type
FROM mt_template
WHERE (template_id IN ('25'))
1 Query SELECT COUNT(*)
FROM mt_comment
WHERE (comment_visible = '1') AND (comment_entry_id = '46')
1 Query SELECT trackback_id
FROM mt_trackback
WHERE (trackback_entry_id = '46')
1 Query SELECT trackback_id, trackback_blog_id, trackback_category_id, trackback_created_by, trackback_created_on, trackback_description, trackback_entry_id, trackback_is_disabled, trackback_modified_by, trackback_modified_on, trackback_passphrase, trackback_rss_file, trackback_title, trackback_url
FROM mt_trackback
WHERE (trackback_id IN ('45'))
1 Query SELECT COUNT(*)
FROM mt_tbping
WHERE (tbping_visible = '1') AND (tbping_tb_id = '45')
1 Query SELECT COUNT(*)
FROM mt_comment
WHERE (comment_visible = '1') AND (comment_entry_id = '43')
1 Query SELECT trackback_id
FROM mt_trackback
WHERE (trackback_entry_id = '43')
1 Query SELECT trackback_id, trackback_blog_id, trackback_category_id, trackback_created_by, trackback_created_on, trackback_description, trackback_entry_id, trackback_is_disabled, trackback_modified_by, trackback_modified_on, trackback_passphrase, trackback_rss_file, trackback_title, trackback_url
FROM mt_trackback
WHERE (trackback_id IN ('42'))
1 Query SELECT COUNT(*)
FROM mt_tbping
WHERE (tbping_visible = '1') AND (tbping_tb_id = '42')
1 Query SELECT COUNT(*)
FROM mt_comment
WHERE (comment_visible = '1') AND (comment_entry_id = '40')
1 Query SELECT trackback_id
FROM mt_trackback
WHERE (trackback_entry_id = '40')
1 Query SELECT trackback_id, trackback_blog_id, trackback_category_id, trackback_created_by, trackback_created_on, trackback_description, trackback_entry_id, trackback_is_disabled, trackback_modified_by, trackback_modified_on, trackback_passphrase, trackback_rss_file, trackback_title, trackback_url
FROM mt_trackback
WHERE (trackback_id IN ('39'))
1 Query SELECT COUNT(*)
FROM mt_tbping
WHERE (tbping_visible = '1') AND (tbping_tb_id = '39')
1 Query SELECT COUNT(*)
FROM mt_comment
WHERE (comment_visible = '1') AND (comment_entry_id = '38')
1 Query SELECT trackback_id
FROM mt_trackback
WHERE (trackback_entry_id = '38')
1 Query SELECT trackback_id, trackback_blog_id, trackback_category_id, trackback_created_by, trackback_created_on, trackback_description, trackback_entry_id, trackback_is_disabled, trackback_modified_by, trackback_modified_on, trackback_passphrase, trackback_rss_file, trackback_title, trackback_url
FROM mt_trackback
WHERE (trackback_id IN ('37'))
1 Query SELECT COUNT(*)
FROM mt_tbping
WHERE (tbping_visible = '1') AND (tbping_tb_id = '37')
1 Query SELECT COUNT(*)
FROM mt_comment
WHERE (comment_visible = '1') AND (comment_entry_id = '35')
1 Query SELECT trackback_id
FROM mt_trackback
WHERE (trackback_entry_id = '35')
1 Query SELECT trackback_id, trackback_blog_id, trackback_category_id, trackback_created_by, trackback_created_on, trackback_description, trackback_entry_id, trackback_is_disabled, trackback_modified_by, trackback_modified_on, trackback_passphrase, trackback_rss_file, trackback_title, trackback_url
FROM mt_trackback
WHERE (trackback_id IN ('34'))
1 Query SELECT COUNT(*)
FROM mt_tbping
WHERE (tbping_visible = '1') AND (tbping_tb_id = '34')
1 Query SELECT COUNT(*)
FROM mt_comment
WHERE (comment_visible = '1') AND (comment_entry_id = '30')
1 Query SELECT trackback_id
FROM mt_trackback
WHERE (trackback_entry_id = '30')
1 Query SELECT trackback_id, trackback_blog_id, trackback_category_id, trackback_created_by, trackback_created_on, trackback_description, trackback_entry_id, trackback_is_disabled, trackback_modified_by, trackback_modified_on, trackback_passphrase, trackback_rss_file, trackback_title, trackback_url
FROM mt_trackback
WHERE (trackback_id IN ('29'))
1 Query SELECT COUNT(*)
FROM mt_tbping
WHERE (tbping_visible = '1') AND (tbping_tb_id = '29')
1 Query SELECT COUNT(*)
FROM mt_comment
WHERE (comment_visible = '1') AND (comment_entry_id = '27')
1 Query SELECT trackback_id
FROM mt_trackback
WHERE (trackback_entry_id = '27')
1 Query SELECT trackback_id, trackback_blog_id, trackback_category_id, trackback_created_by, trackback_created_on, trackback_description, trackback_entry_id, trackback_is_disabled, trackback_modified_by, trackback_modified_on, trackback_passphrase, trackback_rss_file, trackback_title, trackback_url
FROM mt_trackback
WHERE (trackback_id IN ('26'))
1 Query SELECT COUNT(*)
FROM mt_tbping
WHERE (tbping_visible = '1') AND (tbping_tb_id = '26')
1 Query SELECT COUNT(*)
FROM mt_comment
WHERE (comment_visible = '1') AND (comment_entry_id = '26')
1 Query SELECT trackback_id
FROM mt_trackback
WHERE (trackback_entry_id = '26')
1 Query SELECT trackback_id, trackback_blog_id, trackback_category_id, trackback_created_by, trackback_created_on, trackback_description, trackback_entry_id, trackback_is_disabled, trackback_modified_by, trackback_modified_on, trackback_passphrase, trackback_rss_file, trackback_title, trackback_url
FROM mt_trackback
WHERE (trackback_id IN ('25'))
1 Query SELECT COUNT(*)
FROM mt_tbping
WHERE (tbping_visible = '1') AND (tbping_tb_id = '25')
1 Query SELECT COUNT(*)
FROM mt_comment
WHERE (comment_visible = '1') AND (comment_entry_id = '19')
1 Query SELECT trackback_id
FROM mt_trackback
WHERE (trackback_entry_id = '19')
1 Query SELECT trackback_id, trackback_blog_id, trackback_category_id, trackback_created_by, trackback_created_on, trackback_description, trackback_entry_id, trackback_is_disabled, trackback_modified_by, trackback_modified_on, trackback_passphrase, trackback_rss_file, trackback_title, trackback_url
FROM mt_trackback
WHERE (trackback_id IN ('18'))
1 Query SELECT COUNT(*)
FROM mt_tbping
WHERE (tbping_visible = '1') AND (tbping_tb_id = '18')
1 Query SELECT COUNT(*)
FROM mt_comment
WHERE (comment_visible = '1') AND (comment_entry_id = '10')
1 Query SELECT trackback_id
FROM mt_trackback
WHERE (trackback_entry_id = '10')
1 Query SELECT trackback_id, trackback_blog_id, trackback_category_id, trackback_created_by, trackback_created_on, trackback_description, trackback_entry_id, trackback_is_disabled, trackback_modified_by, trackback_modified_on, trackback_passphrase, trackback_rss_file, trackback_title, trackback_url
FROM mt_trackback
WHERE (trackback_id IN ('9'))
1 Query SELECT COUNT(*)
FROM mt_tbping
WHERE (tbping_visible = '1') AND (tbping_tb_id = '9')
1 Query SELECT COUNT(*)
FROM mt_comment
WHERE (comment_visible = '1') AND (comment_entry_id = '8')
1 Query SELECT trackback_id
FROM mt_trackback
WHERE (trackback_entry_id = '8')
1 Query SELECT trackback_id, trackback_blog_id, trackback_category_id, trackback_created_by, trackback_created_on, trackback_description, trackback_entry_id, trackback_is_disabled, trackback_modified_by, trackback_modified_on, trackback_passphrase, trackback_rss_file, trackback_title, trackback_url
FROM mt_trackback
WHERE (trackback_id IN ('7'))
1 Query SELECT COUNT(*)
FROM mt_tbping
WHERE (tbping_visible = '1') AND (tbping_tb_id = '7')
1 Query SELECT template_id
FROM mt_template
WHERE (template_name = 'Footer') AND (template_type = 'custom') AND (template_blog_id = '1')
1 Query SELECT template_id, template_blog_id, template_build_dynamic, template_created_by, template_created_on, template_identifier, template_linked_file, template_linked_file_mtime, template_linked_file_size, template_meta, template_modified_by, template_modified_on, template_name, template_outfile, template_rebuild_me, template_text, template_type
FROM mt_template
WHERE (template_id IN ('22'))
1 Query SELECT template_id
FROM mt_template
WHERE (template_name = 'Sidebar') AND (template_type = 'custom') AND (template_blog_id = '1')
1 Query SELECT template_id, template_blog_id, template_build_dynamic, template_created_by, template_created_on, template_identifier, template_linked_file, template_linked_file_mtime, template_linked_file_size, template_meta, template_modified_by, template_modified_on, template_name, template_outfile, template_rebuild_me, template_text, template_type
FROM mt_template
WHERE (template_id IN ('24'))
1 Query SELECT DISTINCT tag_id, tag_name
FROM mt_tag, mt_objecttag
WHERE (tag_is_private = '0') AND (objecttag_blog_id IN ('1')) AND (objecttag_object_datasource = 'entry') AND (tag_id = objecttag_tag_id)
ORDER BY tag_name ASC
1 Query SELECT tag_id, tag_is_private, tag_n8d_id, tag_name
FROM mt_tag
WHERE (tag_id IN ('8','16','6','13','10','11','17'))
1 Query SELECT COUNT(*), objecttag_tag_id
FROM mt_entry, mt_objecttag
WHERE (entry_status = '2') AND (entry_class = 'entry') AND (entry_blog_id IN ('1')) AND (objecttag_blog_id IN ('1')) AND (objecttag_object_datasource = 'entry') AND (entry_id = objecttag_object_id)
GROUP BY objecttag_tag_id
1 Query SELECT template_id
FROM mt_template
WHERE (template_identifier = 'atom') AND (template_type = 'index') AND (template_blog_id = '1')
1 Query SELECT template_id, template_blog_id, template_build_dynamic, template_created_by, template_created_on, template_identifier, template_linked_file, template_linked_file_mtime, template_linked_file_size, template_meta, template_modified_by, template_modified_on, template_name, template_outfile, template_rebuild_me, template_text, template_type
FROM mt_template
WHERE (template_id IN ('7'))
1 Quit

予想に反してSELECT ...WHERE LIKE...が見つからないので、いったんアプリ側に該当部分を引っ張ってきて、PERLで文字列比較しているのでしょう。

もしそうだとすると、MySQL+Senna入れて、クエリをちょっと書き直して終わり、と簡単にはいかなそう。

1000件くらいのデータだったら、部分一致検索でも、絶対現状よりも早い。


おそらく、ボトルネックはMySQL Serverでは無いので、以下。


案1:すぐに思いつくのは、Google用にsitemap作成して、ちゃんと巡回してもらって、Googleのサイト内検索を利用する方法。
他力本願だけど、一番簡単で一番確実。

Google用sitemapは、作成済み、登録済みだったので、このページの右上にGoogleサイト内検索を一時的につけてみました。

ちなみに、Google Co-opでもっとさりげなく検索窓を付ける事ができるらしい。
Movable Type の検索を Google Co-op に切り替え:Jay's Room


案2:mt-search.cgiの代わりにPHPを作成して、MySQL Serverを直接検索しにいかせる。
可能であればMySQL+Sennaで。
(mt-search.cgiを使う)「タグ」や「タグクラウド」などを利用していないのであれば、十分考慮に値するかと。


案3:今日のMovable Type:Ajaxを利用したMT用超高速検索システムはスゴすぎる!: 世界中の1%の人々へ
こんなエントリーを発見。
はやい!やはすぎる!!!

案4:WiSE MT: ブログ検索パッケージ | WiSE | 製品情報
有料だと、こんなのもあるらしいけど、お金払わなくてもなんとかなりそう。


結構FAQのようで、皆さんイロイロ工夫しているようです。

ちゃんと調べると、回答は見つかりそうです。


案5:mt-search.cgiをmod_cacheで超高速化する!! - Ogawa::Memoranda:ベンチマークでキャッシュの有効性を確認していて、キャッシュを有効にするとかなり高速化するらしい。

これは十分考慮に値しそうじゃない?


と思ったらこんなチェンジログもあるので、4.0ではなおっているカモ知れない。
私が借りているホスティング環境では、それほどはやく無かったけれども。
movabletype.org: Movable Type 4.0 Beta Change Log

47890: Apply Search.pm utf-8 patch by Ben

FIXED: Users reported from way back in MT3.x that public blog search was slow. This resulted from a UTF-8 encoding problem that has now been fixed.

DRBDの記事目当てで購入したWeb+DBマガジンに載っていたFirebugはかなり強力。

Firebug :: Firefox Add-ons
おかげで、かなーーーりスタイルシートのカスタマイズが簡単になりました。

もうひとつ、Aptana: The Web IDEも単体で動作するフリーのツールが紹介されていた。こちらは未だ使ってないけど。

参考:Dreamweaverの代わりになるフリーソフト「Aptana」 - GIGAZINE

今までWordPressと比べて七面倒くさかったカスタマイズが若干簡単になった(ヘッダー、フッターなどがモジュール化されていた)り、リッチテキストエディタが付いていたり。
WordPressの長所を、ほぼ実装したのじゃないかな。(まだ試してないけど静的ページの作成、カスタマイズの簡単さなども。)

ベータ版がほぼ毎週アップされていて、約束どおり7月に最終版が出そうな勢い。

とりあえず4.0のβは別の場所で稼働中。

オープンソース版を公開したのを機会に、日本以外のユーザが戻ってくれると良いですねえ。

R0011524

数年前に海外ではライセンス改編を機会に、MTからWPへ大量にユーザが流れたとのこと。

私はMovable Type の落日を読んでいたのだけど、最近小粋空間: Movable Type が WordPress に負けた本当の理由にて当時の状況を詳しく追っています。

この二つの記事およびサイトはオススメ。

SixApartさんとは仕事で接点があるので、動向は気になります。

といっても、同じ会社で。

xrea.comでずっと使ってるサーバが重くなったので、最新のサーバへ引越し

s3x(MySQL 3.2x) → s28x(MySQL 5.1.x)

引越し先のサーバで、「サーバー間コピー」という機能を使って、ファイルをそのままコピーしてもらう。

MyISAMにもかかわらずデータベースのファイルはコピーしてくれないので、phpMyAdminからエクスポートして、そのまま喰わす。

ちゃんと入っているようなのだけど、Movable Typeの管理画面から見ると文字化けしてしまうので、mt-configに下の二行を追記
---
SQLSetNames 1
PublishCharset utf-8
---

今回のサーバー引越しでは、DNSも(自動で)書き換えたので、外からは何も変わっていないように見える。
とりあえず、MTのリビルド時のエラーが少なくなることを期待。


ついでに、仕事のメモ用に4.0 Betaをインストールしてみた。
Pagesなど、今までWordPressにしか無かった静的ページの管理もできたり、テンプレートが部品化されていたり、書きかけのものを自動保存してくれたり、と良い感じです。

以前飲み会の時に、この業界じゃない人はあまりRSSリーダー使っていないようだったので、紹介。
クライアントにインストールするものは、一人で何台もパソコン持っている場合に不便なので割愛。

-----
1. Google Reader
http://www.google.com/reader/view/

使いやすいです。オススメ。

2. Livedoor Reader
http://reader.livedoor.com/

Google Reader登場前は、一番人気だった模様。ショートカットがかなり使えるらしい。今もGoogle Readerと人気を二分する様子。

3. Bloglines
http://www.bloglines.com/

アメリカ、日本での老舗

4. News Gator
http://www.newsgator.com/

アメリカではかなりメジャー。日本ではあまり。Online版、Outlook版、クライアントにインストールするバージョンとでfeedを自動同期してくれるので便利。

5. Feedpath
http://feedpath.jp/feedpath/index.csp

未だサイボウズだった頃に個人的興味のため、リリース前の説明会に行ったのだけど(<a href="http://www.hirohama.biz/mt/archives/2006/02/01-095504.php">KH Weblog: Feedpath説明会(定員:25名)参加とNews Alloy</a>)、期待が大きかった分だけちょっと肩すかしを喰らった。

-----

私はずっとNews Gator使ってたのだけど、先日Google Readerをメインにしました。
携帯電話からも読めるし、Googleのトップページに入れてしまうのが意外と便利なので。

Movable Type + MySQLの組み合わせで使うとき、MT側ではデフォルトでキャラクタセットを指定しない。
そのため、ついついMySQL Server側で(サーバー全体に適用される)default-character-set=cp932とMySQL Serverの起動オプションまたは設定ファイル(my.cnf)で指定したくなるのだが、実はPublishCharsetとSQLSetNamesを指定することでSET NAMESを発行してくれる。

Search

アーカイブ