2011年7月アーカイブ

MovableTypeにおいて、アーカイブマッピングを途中で変更すると悲劇が起こります。

特にパーマリンクにおいて、「_」(アンダースコア)と「-」(ハイフン)を共存させるのか、「-」のみで統一するのかは、一番最初に決めたルールから変更してはいけません。
UbuntuからSSHでDTIのVPSサーバに接続しようとしたら下記のエラーが発生。
PTY allocation request failed on channel 0id
write error: Bad file descriptor
DTIのVPSサーバで "yum" コマンドを叩いたらこんなエラーが出ました。
puttyからDTIのVPSサーバにログインしようとしたらこんなエラーが出た。

はじめに



あなたはLinuxを使えますか?


3年前まではWindowsと秀丸しか使えなかった私が、今ではLinux + Screen + Emacs + zsh でバリバリ開発できるようになりました。
ノートPCにcoLinuxを入れて、寝ても覚めてもLinux、カフェでも電車でもLinux、そんな生活です。

coLinuxを使うことでLinuxの上達速度が圧倒的に速くなります。

Webサーバ(Apache)のアクセスログを解析したことはありますか?

本格的にやろうとすると、いろいろ大がかりなツールを入れたり、Google Analyticsを導入したり、なかなか大変ですよね。
これから紹介するAnalogを使うと、1コマンドでサクッと解析できます。
WF型開発にとらわれすぎたTiDDのアンチパターン #tiddという記事が素晴らしかったので、心に響いた部分を要約してみる。
coLinuxでバックアップを取るのは非常に簡単です。
仮想マシンの実態は単体ファイルなので、これをコピーして別の場所に保管するだけです。
cofsという仕組みを使うとcoLinux ⇔ Windows間で簡単にファイル共有することができます。
わかりやすく説明すると、coLinux側から、Windowsのマイドキュメントにアクセスしてファイルを編集したりできるようになります。
catコマンドはファイルを「表示」するコマンドだと思われていますが、実はファイルを編集(追記)できるんです。
ご存じでしたか?

viやEmacsなどのエディタを使いたくないときには、意外と重宝します。

[foo@www ~]$ cat << EOF > /tmp/hello
> hello
> world !
> ←編集が終わったら Ctr + d を押す。
> [foo@www ~]$ cat /tmp/hello
hello
world !
下記の手順で作業します。

coLinuxサービス停止

coLinuxサービス解除

coLinuxアンインストール

アンインストールは、coLinuxをインストールしたフォルダにある "Uninstall.exe"を使います。

※アンインストールしても仮想イメージファイルは削除されないので安心してください。
もしあなたがLinux初心者で、自宅サーバもしくは趣味でVPSサーバを使っていて、/etc/resolv.conf に何を書けばいいかわからなかったら、

とりあえず
nameserver 8.8.8.8
この秘密の呪文を書けばおk!
この記事は [coLinuxインストール完全マニュアル]ネットワークの設定をする の続きです。

Windowsサービスとして登録する

coLinuxをWindowsのサービス(デーモン、常駐ソフトともいう)として登録しましょう。
これをやれば、coLinuxがWindowsのバックグラウンドで動くようになり、空気のようにふるまってくれるので非常に快適です。

やり方は簡単で、コマンドプロンプトを起動して下記のように入力します。
ApacheのVirtualHostの1件目がそのサーバの「デフォルト」バーチャルホストになることは知っていいたのですが、
いまいちその「デフォルト」の活用方法がわかっていませんでした。

今日、それを理解しました。
MovableTypeでブログを構築すると、画面のフッターにデフォルトで "Powered by Movable Type Pro" という文字が入ります。

この "Powered by"は必ず入れないといけないのか?
調べてみました。
Pear::PagerでgetLinksが生成するリンクURLは、デフォルトではGET/POSTで送信したパラメータがそのまま埋め込まれる仕様になっています。

例えば画面のURLが
http://example.com/?action=foo
だとすると、その画面内のページャリンクのURLは、
http://example.com/?action=foo&pageID=1
のようになります。

さてここでページャリンクのURLを "action=foo" ではなく "action=bar" に変更したい場合、どうすればよいでしょうか?

この記事は、[coLinuxインストール完全マニュアル]ネットワークの設定をする の補足です。

coLinux側からpingしても反応がないことがあります。
root@colinux:~# ping 192.168.100.1
connect: Network is unreachable 
その場合に"service networking restart" してみると何やらエラーが出ます。
root@colinux:~# service networking restart
 * Reconfiguring network interfaces...
SIOCSIFADDR: No such device
eth0: ERROR while getting interface flags: No such device                       
SIOCSIFNETMASK: No such device                                                  
eth0: ERROR while getting interface flags: No such device                       
Failed to bring up eth0.
さらに"ifonconfig -a"してみると、eth0がなくて代わりにeth1やeth2やeth5が出現してたりします。 その場合、下記の方法で解決できます。
前回の記事 [coLinuxインストール完全マニュアル]coLinux上でUbuntuを起動してみる の続きです。

coLinuxのネットワーク設定はほんのちょっとだけ難しいですが、慣れればたいしたことないです。
これさえ乗り越えれば、素晴らしいLinuxとオープンソースの世界があなたを待っています。
いっしょに乗り越えていきましょう!
MT5に対応したAssetHandlerプラグインを導入してみました。
一個ずつちまちま画像をアップロードするのと比べてすごい便利ですね!
これで管理画面での画像アップロードの苦行から開放されそうです。

AssetHandlerとは何か?

よく忘れるのでメモ。

相対URLの基点は、下記のようにbaseタグで設定することができます。
<base href="http://example.com/subdirectory/" target="_self">
こうすると、以降このHTML文書内では"subdirectory"が相対URLの基点になります。

例えば、
<base href="http://example.com/subdirectory/" target="_self">
<link rel="stylesheet" href="styles.css" type="text/css" />
と書くと、(このHTMLファイル自体の保存場所がどの階層であろうとも)
"http://example.com/subdirectory/styles.css"
が読み込まれます。

[MySQL]UnixTimeをDateTime型に変換する方法

| カテゴリ:
日時データが、UnixTime(Unixエポックタイム, epoch time)の数値として保存されている場合に、それをDateTime型に変換する方法です。

例として、下記のようなint型のカラムがあったとします。
+---------------+
| starttime     |
+---------------+
|    1187015526 |
|    1187024827 |
|    1187099887 |
|    1311443077 |
|    1311443081 |
+---------------+
さて前回の記事「[MovableType]「自動保存」されたブログ記事のデータはどこに保存されているのか?」で、「自動保存」された記事のデータはmt_sessionテーブルのsession_dataに保存されているのがわかりました。
ところがこのデータがまた厄介なのです。
前から謎だったのですが、今日ついに突き止めました。
MovableTypeで「自動保存」されたデータは、mt_sessionテーブルに保存されています。
公式ドキュメントにちゃんと解説があった。
MT::session 概要
任意の一時データを保存します。sessionという名前は、Movable Type が保存する一時データが投稿者のセッション情報しかなかった時代の名残りです。
MovableTypeにおいて、「自動保存」で保存された記事内容はどうやらmt_sessionテーブルに保存されているようなので、mt_sessionテーブルの中身を調べてみた。

注記

BuildTimeプラグインはMT5.1では正しく動きません。
MT5.1の環境に入れると、ブログ記事一覧などで「通信エラー (200)」というエラーが出ます。
これは、AjaxのレスポンスのJSONコードの末尾に"3.1234"のような余計な数字が入ってしまうからです。
したがって以下の記事はマネしないようにお願いします。
参考程度にお読みください。
前回の記事 [MovableType]管理画面の記事編集ツールバーでオリジナルボタンを追加する方法 の応用編です。

昔あったプラグイン「EntityRefButton」(私は使ったことないですが)とほぼ同じ機能をするボタンです。
MT 5.12で動作確認済みです。
MovableTypeの記事編集画面には、「太字にする」「引用開始」「箇条書きリスト」などのボタンがあって、これを使うことで、リンクをはったり<li>タグで囲んだりというのが簡単にできるようになっています。

mt-toolbar.png

これを「ツールバー」と呼びます。
(いわゆるWYSIWYGエディタというやつです。)
この「ツールバー」、実は簡単に自作ボタンを追加することができるんです。
ちょっとした手間で管理画面がめちゃくちゃ便利になりますので、ぜひ試してみてください。
Perlでクラス名を調べるには下記のようにします。
print ref $obj;

オブジェクトのクラス名を調べるサンプルコード

use strict;
use CGI;

my $obj = CGI->new;
print ref $obj,"\n"; # => 'CGI'
index.phpやIndex.cgiを実行したい場合に、
http://example.com/index.php
というURLを短縮して、
http://example.com/
のようにディレクトリ名でindex.phpやindex.cgiを実行するテクニックを紹介します。
この記事は、[coLinuxインストール完全マニュアル]Ubuntuの仮想イメージファイルを取得するの続きです。
前回は、Ubuntuのイメージファイルをダウンロードして解凍するとこまでやりました。
さてcoLinuxをインストールしたら、いよいよお待ちかね、Ubuntuを導入してみましょう。
coLinuxを使いこなすには、7zipが必須です。
具体的には、Linuxの仮想イメージファイルを解凍するのに使います。
7zipは簡単にインストールできるのでやってみましょう。(1~2分で終わります)
CGIスクリプトで必ず書く1行。
よく忘れるのでメモ。
「論理的思考の放棄」という衝撃的な記事を読んでから、私は「どうやったらこれを実践できるのか」と真剣に考えるようになりました。
それほどあの記事はインパクトがありました。

今日ふと、これと似た別の記事を見つけました。
有名なポール・グレアムのエッセーです。
XML-RPCでブログ記事を投稿するときにはmetaWeblog.newPostというメソッドを使います。
パラメータの5番目の項目で"publish"というフラグがあります。

ほとんどの日本語解説サイトでは"0:非公開, 1:公開"と解説されているのですがこれは間違いです。

XML-RPCを使ってMovableTypeに投稿する(PHP版)
Movable Type で使える XML-RPC API

正しくは、"0:再構築しない, 1:再構築する"です。
こちらの記事が正しいです。

[ThinkIT] 第2回:XML-RPCを利用したWeb API (1/2)

なぜこれに気づいたかというと、実行してみればわかります。
おまけに、MTのソースコード(XMLRPCServer.pm)を見ていたらコメントがありました。

MovableType5.12のXMLRPCServer.pm 356行目あたり。

    ## In 2.1 we changed the behavior of the $publish flag. Previously,
    ## it was used to determine the post status. That was a bad idea.
    ## So now entries added through XML-RPC are always set to publish,
    ## *unless* the user has set "NoPublishMeansDraft 1" in mt.cfg, which
    ## enables the old behavior.
(意訳)
バージョン2.1において、我々はこの'publish'フラグの挙動を変更しました。
以前は、このフラグは記事のステータスを決めるために使われていました。
しかしこれは悪いアイデアでした。
なので今はXRML-RPCから投稿された全ての記事は常に公開されます。
(ただし、mt.cfgで"NoPublishMeansDraft 1"に設定されている場合は古い挙動になります。)

私自身もこれまで間違った認識で間違った記事を書いてしまったので、全部直さないといけませんね。
失礼いたしました。

追記

既に同じ趣旨の記事を書いてる方がいらっしゃいました。
私の検索力が足りなかったようです。

MT XMLRPC metaWeblog.newPostのpublish属性
MTのmetaWeblog.newPost()にはまる
いわゆるUnixの"フィルタ"というやつです。
パイプでつなげて使うときに便利です。

CLI環境で使うときに便利です。
使いたいときに意外とすぐ思い出せない。
<?php
$data = file_get_contents("php://stdin");
PerlのRPC::XML::Clientモジュールを使えば、MovableTypeのカテゴリ一覧を取得することができます。
PerlのXMLRPC::Liteモジュールを使えば、MovableTypeに簡単に記事を投稿することができます。
重たい管理画面にログインしなくて済むので非常に快適です。
XMLRPC::Liteを使って、MovableTypeのmt-xmlrpc.cgiにブログ記事を投稿しようとしたら、表題のエラーが出ました。

原因と対処法

原因はXMLRPC::Liteのバグのようです。
dankogai氏が解決方法をブログに書いておられます。

その通りにやったらうまく動きました。
ありがとうございました。
前回の続きです。

記事本文中でHTMLタグなどを書きたい場合は、実体参照に変換してやる必要があります。
なぜなら、タグ<>をそのまま書いてしまうとXMLタグと認識されて文法エラーになるからです。

LinuxのPOSTコマンドを使うと、どこからでもMovableTypeの記事を投稿できます。

MovableTypeの管理画面の重さに嫌気がさして、管理画面を使わずに記事投稿する方法を模索しているDQNEOです。
こんにちわ。

LinuxのPOSTコマンドを使うと、リモートサーバ上のMovableTypeに記事を投稿できます。

XMLRPCを使って投稿するテスト。
参考
http://www.na.rim.or.jp/~tsupo/program/blogTool/mt_xmlRpc.html#w11
http://nomano.shiwaza.com/tnoma/blog/archives/001538.html

PerlでMovableTypeのカテゴリ一覧を取得する方法

事前にXMLRPC::LiteというCPANモジュールをインストールした上で、下記コードを実行します。
Gmailのショートカットキーが使えない場合は、下記の2点を確認しましょう。


coLinux本体をWindowsにインストールするのは簡単な作業です。
全然難しくないので気軽に挑戦してみましょう。

ここでは、2011/7/7時点での最新版であるcoLinux0.7.9をインストールします。
解説はWindowsXPマシンで行いますが、Windows7などでも手順はほぼ同じです。

それではレッツトライ!
昔の記事ですが、最近はじめて読みました。
大変衝撃的な内容でした。

論理的思考の放棄

私なりに要約してみました。

MovableTypeの初心者のうちは、「カテゴリ」のみ使うことをオススメします。

いろいろ触ってみて、下記の結論にたどり着きました。
MySQLをコマンドラインで使うときは、ページャ(pager)機能を使うと死ぬほど便利です。
MovableType(5.12)の管理画面が非常に遅いのが最近の悩みです。

ただ「遅い遅い」と言ってるだけでは何も始まらないので、実際に計測してみました。

[MovableType]「テーマ」とは何か

| カテゴリ:

「テーマ」によって実現できること

今日の勇気付けられた話

| カテゴリ:
ちなみに私のskype仲間にYoutubeの創業メンバーをよく知ってるやつがいるんですが、嫉妬によるバイアスがあることは否定しませんが、そいつが言うにはYoutubeの創業メンバーって大して優秀じゃないらしいですよ、プレイヤーとしても経営者としても。あの事業内容だって、別に壮大なビジョンがあって始めたわけじゃなくて、フツーにこういうサービスあったら面白いなあと思ってやったら偶然ヒットして、必死に目の前の問題(アクセス負荷やら著作権侵害問題とか)と戦ってたら、気が付いたら世界最大級のWebサービスになってたっていう。
http://anond.hatelabo.jp/20110703201811

本当の話かどうかはわかりませんが、なんだか勇気がわいてきました。

自分のMobableTypeのmt_entryテーブルの中身がどうなっているかを調べてみました。

あくまで自分のケースなので、他のケースでもうこうなっているとは限りません。
ちなみに私はほとんどMTをカスタマイズしておらず、ブログも1つしか運営していません。
私と同じような使い方をしている場合は、同じようなデータになっていると想像できます。
MovableTypeには、「ブログ記事」と「ウェブページ」という似たような物体があります。
これらがデータベース上にどのように格納されているのでしょうか?

MySQLのテーブル定義をHTMLに変換して出力するツール

[mysql]テーブル定義書をhtml出力するという記事が素晴らしかったので、私の方でシェルスクリプトを改良してみました。

MovableType5.12のDBテーブル定義一覧

| カテゴリ:
MovableType5.12のBテーブル定義一覧です。
DBはMySQLです。
何かのお役にたてばと思い、作成してみました。

MovableType5.12のDBテーブル一覧

| カテゴリ:

MySQLからテーブル一覧を出力してみました。
なんと46個ものテーブルがあります!

MovableTypeでHTML実体参照に変換してくれるプラグイン「EntityRefButton」がMT5.2で動きませんでした。

「Perlは多少書けるし、いっちょう直してやるか!」と直す気まんまんで腕まくりして、プラグインのソースコードやらMovableTypeのドキュメントやらをのぞいてみたのですが、さっぱりわからずあえなく挫折。
orz

あきらめかけたところに救世主あらわる!

Gitの読み方は「ぎっと」
Githubの読み方は「ぎっとはぶ」

いま知りました。
いままで「じっと」と呼んでました。。。

全角数字を半角数字に変換するJavscriptの関数です。
このコードはHTMLからは完全に独立していて、1つの関数としているので、再利用しやすいかと思います。

| カテゴリ:

<meta http-equiv="content-type" content="text/html; charset=utf-8" >

UTF8のHTMLファイルを書くときは、headタグ内に必ずこのmetaタグを入れましょう。
Webの世界では、今後は間違いなくUTF8が主流になります。

MovableTypeでHTMLファイルなどをアップロードできない場合の対処法

MovableType5.1で、HTMLファイルなどを管理画面からアップロードしようとするとエラーが出ます。
Google Chromeに備わっているHTML5のlocalStorage機能を使うと、Javascriptのデータをブラウザに保存することができます。
保存した情報は、ブラウザを閉じても保持されます。

使い方は超簡単で、"localStorage"というオブジェクトにプロパティと値を保存するだけです。

人気記事

このアーカイブについて

このページには、2011年7月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2011年6月です。

次のアーカイブは2011年8月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

最近の人気記事