<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>TechTalk @ ppmz</title>
    <link rel="alternate" type="text/html" href="http://tech.ppmz.com/" />
    <link rel="self" type="application/atom+xml" href="http://tech.ppmz.com/atom.xml" />
   <id>tag:tech.ppmz.com,2008://1</id>
    <link rel="service.post" type="application/atom+xml" href="http://www.ppmz.com/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1" title="TechTalk @ ppmz" />
    <updated>2008-03-10T05:36:42Z</updated>
    <subtitle>テクな話題を説くと解く。そのココロは？</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 3.2</generator>
 
<entry>
    <title>XML-RPC経由でブログに画像を含んだエントリを投稿する方法</title>
    <link rel="alternate" type="text/html" href="http://tech.ppmz.com/2008/03/xmlrpc_1.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ppmz.com/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=89" title="XML-RPC経由でブログに画像を含んだエントリを投稿する方法" />
    <id>tag:tech.ppmz.com,2008://1.89</id>
    
    <published>2008-03-10T05:29:13Z</published>
    <updated>2008-03-10T05:36:42Z</updated>
    
    <summary>MovableType、Blogger、ココログとかのメジャーなブログは、XML-RPC APIを使うことによってプログラム的にエントリを投稿したりできます。 画像を投稿する関数も用意されているのですが、この二つを組み合わせて使うことによって画像を含んだエントリをプログラム的に投稿することができます。 結構シンプルな感じではありますが、何カ所か躓いた箇所があるので記録のために残しておきます。...</summary>
    <author>
        <name>Pju</name>
        
    </author>
            <category term="Web" />
    
    <content type="html" xml:lang="en" xml:base="http://tech.ppmz.com/">
        <![CDATA[<p>MovableType、Blogger、ココログとかのメジャーなブログは、XML-RPC APIを使うことによってプログラム的にエントリを投稿したりできます。
画像を投稿する関数も用意されているのですが、この二つを組み合わせて使うことによって画像を含んだエントリをプログラム的に投稿することができます。
結構シンプルな感じではありますが、何カ所か躓いた箇所があるので記録のために残しておきます。</p>
]]>
        <![CDATA[<h2>プログラムの流れ</h2>

<ol>
<li>ブログのページ(大抵はトップページ？)からRSDのあるURLを取得する。</li>
<li>RSDを読み込み、対象のブログがどのAPIに対応しているのか、Blog IDは何か、APIエントリポイントとなるURLはどこなのかをRSDから抜き出す</li>
<li>上で得られた情報を基に、そのブログが対応するAPIに沿った形でXML-RPCリクエストを送出する。</li>
<li>返事もXMLで帰ってくるので、それを解釈し適切に処理する。</li>
</ol>

<h2>躓いた箇所</h2>
<h3>blog IDって？</h3>
<p>MovableTypeのようなブログスクリプトはスクリプト１つのインストレーションを使って、複数のブログを作成、管理することができますが、こういったブログはXML-RPCのAPIエントリポイントが共通になります。その場合、どのブログに対して処理を行いたいのかという区別をするために各ブログに対して一意に決まるIDが必要になりますが、それがblog IDです。</p>
<p>このblog IDは基本的にはRSDの中に記述があります。ブログの管理画面から参照できるかはブログスクリプト次第だと思うので不明です。</p>

<h3>Can't use an undefined value as an ARRAY reference at ...てなエラーメッセージがサーバから帰ってきてしまいます。</h3>
<p>送出しているXML-RPCのXML文が、well-formedでないと思います。以下の点を確認してみてください。</p>
<ul>
<li>params以下の子要素は全てparamになっていますか？structや他のスカラ要素は、param<b>s</b>の子要素ではなくてparamの子要素でなくてはいけません。</li>
<li>struct要素はwell-formedですか？struct要素の持ちうる子要素は複数のmemberだけで、member要素はそれぞれname要素とvalue要素を持っていなければなりません。</li>
<li>エスケープしなければいけない文字はきちんとエスケープしましたか？送出メッセージはXMLなので、<などの文字はエスケープされていないとXMLの誤解釈の原因になります。</li>
</ul>

<h3>正しいパスワードを入れているはずなのにユーザ認証が通りません。</h3>
<p>ブログスクリプトにもよりますが、ブログの管理画面に入るためのパスワードとXML-RPC APIの認証時に使うパスワードが別に用意されている場合があります。これは恐らく、XML-RPCで認証情報を送出する際に平文になっているため危ない、という判断なのだろうとは思いますが…。</p>

<h3>画像はどうやって投稿するんですか？</h3>
<p>metaWeblog.newMediaObjectメソッドを使って、画像ファイルをまずサーバに送ります。正常に完了すると画像ファイルのアドレスが返ってきますので、そのパスをエントリ内のimgタグで参照してあげます。</p>

</ul>

<h2>参考にしたページ</h2>
<dl>
<dt><a href="http://lowlife.jp/yasusii/stories/9.html">XML-RPC 仕様書</a></dt><dd>XML-RPC Specificationの日本語訳です。このページを読めば、XML-RPCメッセージがどのような構造になっているべきかが分かります。</dd>
<dt><a href="http://www.na.rim.or.jp/~tsupo/program/blogTool/mt_xmlRpc.html">Movable Type で使える XML-RPC API</a></dt><dd>MovableTypeマニュアル日本語訳から、XML-RPC API絡みの内容のみを抜粋したもの。各メソッドのシグネチャが分かります。</dd>
<dt><a href="http://nakamura.or.tv/cgi/mt/archives/000775.html">RSD(Really Simple Discovery)</a></dt><dd>RSDの簡単な説明があります。</dd>
<dt><a href="http://www.tizag.com/xmlTutorial/">XML Tutorial(英語)</a></dt><dd>その名の通り、XMLの解説があります。</dd>
<dt><a href="http://ja.wikipedia.org/wiki/ISO_8601">ISO 8601 - Wikipedia</a></dt><dd>XML-RPC内での日時表記フォーマットであるISO8601の説明があります。</dd>
<dt><a href="http://community.livejournal.com/lj_clients/213738.html">XML-RPC: getchallenge: Can't use an undefined value as an ARRAY reference（英語、掲示板）</a></dt><dd>上でも紹介した、ハマってしまうエラーメッセージについてのディスカッションがありました。</dd>
</dl>]]>
    </content>
</entry>
<entry>
    <title>Feed Access Control: RSS/Atomでのrobots.txt</title>
    <link rel="alternate" type="text/html" href="http://tech.ppmz.com/2006/08/feed_access_control.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ppmz.com/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=57" title="Feed Access Control: RSS/Atomでのrobots.txt" />
    <id>tag:tech.ppmz.com,2006://1.57</id>
    
    <published>2006-08-04T02:47:15Z</published>
    <updated>2007-12-23T02:09:10Z</updated>
    
    <summary>Bloglines.comが提唱するRSS2.0/Atomフィードの拡張書式の仕様を訳してみました。</summary>
    <author>
        <name>Pju</name>
        
    </author>
            <category term="Web" />
    
    <content type="html" xml:lang="en" xml:base="http://tech.ppmz.com/">
        個人的な内容で、特定の人たちにのみ向けて書いているブログが、検索エンジンで引っかかる…そんな現状を改善しようと、Bloglines.comがRSS2.0/Atomフィードの拡張書式を提唱しています。
発想自体は、robots.txtの検索エンジン弾きと同じことをRSS/Atomフィードでもできるようにしよう、という事らしいです。
        <![CDATA[<h2>Feed Access Control の書式</h2>
以下は<a href="http://www.bloglines.com/about/specs/fac-1.0">Feed Access Control RSS and ATOM</a>の翻訳です。
<blockquote>
<h3>ネームスペース宣言</h3>
Feed Access Control RSS and Atom のネームスペースは次のように定義されます。
<p><code>http://www.bloglines.com/about/specs/fac-1.0</code></p>
例えば、
<p><code>
   &lt;rss version="2.0" xmlns:access="http://www.bloglines.com/about/specs/fac-1.0"&gt;
</code></p>
あるいはAtomの場合、
<p> <code>
   &lt;feed xmlns="http://www.w3.org/2005/Atom" xmlns:access="http://www.bloglines.com/about/specs/fac-1.0"&gt;
</code></p>
のようになります。

<h3><code>&lt;access:restriction&gt;</code>要素</h3>

<code>&lt;rss&gt;</code>または<code>&lt;feed&gt;</code>の子要素です。これらはフィードの再配布制限を示すのに使われます。'relationship'アトリビュートは、フィードがアクセスを「許可」あるいは「拒否」するかを示すのに使われます。
アクセスを「許可」するということは、フィードがサーチエンジンを含む他の公共ソースに再配布される可能性がある事を意味します。アクセスを許可するには、
<code>
    &lt;access:restriction relationship="allow" /&gt;
</code>
のようにして下さい。
アクセスを「拒否」するということは、フィードがサーチエンジンを含む他の公共ソースに再配布されるべきではない事を意味します。アクセスを拒否するには、
<code>
    &lt;access:restriction relationship="deny" /&gt;
</code>
のようにして下さい。
標準ではrelationshipはアクセスを許可します。しかし、もしフィードが現在「拒否」に設定されている場合、そのフィードを再登録（訳注：検索エンジンなどに）するためには、relationshipを明示的に「許可」に設定する必要があります（単純にフィードから削除するだけではアクセスを再び許可するには十分ではありません）。

<h3>フィードの例</h3>

<h4>RSS の例</h4>
<pre>
&lt;rss version="2.0" xmlns:access="http://www.bloglines.com/about/specs/fac-1.0"&gt;
  &lt;access:restriction relationship="allow" /&gt;
  &lt;channel&gt;
    &lt;title&gt;Bloglines | News&lt;/title&gt;
    &lt;link&gt;http://www.bloglines.com&lt;/link&gt;
    &lt;item&gt;
      &lt;title&gt;Ping Away, Bloggers&lt;/title&gt;
      &lt;description&gt;Hello World&lt;/description&gt;
      &lt;pubDate&gt;Fri, 28 Apr 2006 12:03:11 PDT&lt;/pubDate&gt;
      &lt;guid&gt;http://www.bloglines.com/about/news#103&lt;/guid&gt;
    &lt;/item&gt;
  &lt;/channel&gt;
&lt;/rss&gt;
</pre>

<h4>Atom の例</h4>
<pre>
&lt;feed xmlns="http://www.w3.org/2005/Atom" xmlns:access="http://www.bloglines.com/about/specs/fac-1.0"&gt;
  &lt;access:restriction relationship="allow" /&gt;
  &lt;title&gt;Bloglines | News&lt;/title&gt; 
  &lt;link href="http://www.bloglines.com"/&gt;
  &lt;updated&gt;2006-04-28T19:03:11Z&lt;/updated&gt;
  &lt;entry&gt;
    &lt;title&gt;Ping Away, Bloggers&lt;/title&gt;
    &lt;link href="http://www.bloglines.com/about/news#103"/&gt;
    &lt;id&gt;http://www.bloglines.com/about/news#103&lt;/id&gt;
    &lt;updated&gt;2006-04-28T19:03:11Z&lt;/updated&gt;
    &lt;summary&gt;Hello World&lt;/summary&gt;
  &lt;/entry&gt;
&lt;/feed&gt;
</pre>
</blockquote>

<p>bloglines.comのサービスは既にこの拡張フィードを解釈する機能が実装されているそうです。その他にも、大手検索エンジンなどがこの件に関してbloglines.comに問い合わせをしているらしいので、そのうち検索エンジンもこの拡張書式を解釈するようになるかもしれません。</p>

<p>参考ページ:
<ul>
<li><a href="http://www.bloglines.com/about/news#116">Bloglines Proposed Feed Access Standard - Part II</a></li>
<li><a href="http://www.bloglines.com/about/news#114">Feed Access Control Standard for RSS and ATOM</a></li>
<li><a href="http://www.bloglines.com/about/specs/fac-1.0">Feed Access Control RSS and ATOM</a></li>
<li><a href="http://www.techcrunch.com/2006/08/01/bloglines-will-block-your-feed-from-search/">Bloglines wants to block private feeds from search</a></li>
<li><a href="http://jp.techcrunch.com/archives/bloglines-will-block-your-feed-from-search/">Bloglines、検索からプライベートフィードを外す基準を提案</a></li>
</ul>
</p>]]>
    </content>
</entry>
<entry>
    <title>PHPでweblogUpdates.ping その6: 初期版の完成</title>
    <link rel="alternate" type="text/html" href="http://tech.ppmz.com/2006/08/phpweblogupdatesping_6_1.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ppmz.com/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=56" title="PHPでweblogUpdates.ping その6: 初期版の完成" />
    <id>tag:tech.ppmz.com,2006://1.56</id>
    
    <published>2006-08-03T05:04:51Z</published>
    <updated>2006-08-03T06:03:06Z</updated>
    
    <summary>更新Pingを利用して複数ブログの更新情報一覧を生成するPHPスクリプトの公開。</summary>
    <author>
        <name>Pju</name>
        
    </author>
            <category term="BlogUpdatePing" />
            <category term="PHP" />
    
    <content type="html" xml:lang="en" xml:base="http://tech.ppmz.com/">
        <![CDATA[<p>更新Pingを利用して複数ブログの更新情報一覧を生成するPHPスクリプトの初期版ができたので、ひとまずここに公開します。コードの改善点、セキュリティホールなどあったらご一報ください。なお、ライセンスはGPL version2です。<br />
実際に動いているバージョンは<a href="http://www.ppmz.com/">ppmz.comのトップページ</a>、更新情報の欄をご覧ください。</p>]]>
        <![CDATA[<h3>ダウンロード</h3>
<a href="http://tech.ppmz.com/download/pingtracker/pingUpdateTracker-0.1.zip">phpPingUpdateTracker version 0.1</a>

<h3>システム要件</h3>
<ul>
<li>PHP4以上が動作しているサーバ</li>
<li>PEARがインストール・設定されているサーバ</li>
<li>DBは使っていません。</li>
</ul>

<h3>インストール方法</h3>
<ol>
<li>include.phpを設定する。</li>
<ul>
   <li>$numOfLog: 過去何件の更新情報を保持するかを指定します。これを超える分の更新情報は古いものから順に削除されます。</li>
   <li>$logpath: 更新情報のデータファイルのサーバ上での絶対パスを指定します。相対パスを指定すると動かない機能があるのでご注意ください。</li>
  <li>$constraint: pingの第二引数に必ず含まれていなければならない文字列を指定します。ここにあなたのサイトのドメインを指定する事によって、第三者からのPingをブロックすることができます。</li>
   <li>$isConstraint: 上で指定した制限を有効にするかどうかを指定します。この値がfalseの場合は、$constraintの値に関わらず、全ての有効なPingを受け付けます。</li>
</ul>
<li>アップロード</li>
<ul>
   <li>全てのファイルを同じフォルダに入れて(RPC2とかにするとそれっぽいかもしれません)サイトにアップロードします。</li>
   <li>更新情報のデータファイル(標準ではpingLog.dat)はPHPが書き込める状態になっている必要があるので、パーミッションを766などにしておいて下さい。</li>
</ul>
<li>出力先の設定</li>
<ul>
   <li>更新情報を表示したいファイルで、printLog.phpをインクルードして下さい。以下は一例です。インクルードする際のパスはインストールされている環境に合わせて変更して下さい。特に関数を呼び出す必要はありません。</li>
</ul>
</ol>]]>
    </content>
</entry>
<entry>
    <title>PHPでweblogUpdates.ping その5: 更新情報処理の実装</title>
    <link rel="alternate" type="text/html" href="http://tech.ppmz.com/2006/08/phpweblogupdatesping_5.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ppmz.com/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=55" title="PHPでweblogUpdates.ping その5: 更新情報処理の実装" />
    <id>tag:tech.ppmz.com,2006://1.55</id>
    
    <published>2006-08-03T03:30:46Z</published>
    <updated>2006-08-03T04:49:15Z</updated>
    
    <summary>一番難しいと思っていたネットワーク通信周りがいともあっさり片付いてしまったので、受信した情報を処理してHTMLを生成する部分を次に実装します。 weblogUpdates.pingには、必ず２つの情報(更新されたブログのタイトルと、そのブログのURL)が含まれていて、他２つの引数は任意なので、今回の実装では任意の引数は無視して、確実に含まれている情報のみを利用しようと思います。...</summary>
    <author>
        <name>Pju</name>
        
    </author>
            <category term="BlogUpdatePing" />
            <category term="PHP" />
    
    <content type="html" xml:lang="en" xml:base="http://tech.ppmz.com/">
        <![CDATA[<p>一番難しいと思っていたネットワーク通信周りがいともあっさり片付いてしまったので、受信した情報を処理してHTMLを生成する部分を次に実装します。<br />
weblogUpdates.pingには、必ず２つの情報(更新されたブログのタイトルと、そのブログのURL)が含まれていて、他２つの引数は任意なので、今回の実装では任意の引数は無視して、確実に含まれている情報のみを利用しようと思います。</p>]]>
        <![CDATA[<p>実際の処理自体は、ごく基本的なファイルI/Oと配列の処理ばかりなので、処理の流れを説明してもしょうがない（というか面白くない…コードを見てもらえれば一目瞭然なので）ので、ここは一つ、JavaプログラマがPHPでプログラムを書いた時に引っかかるかな、と思われる点、つまりは自分がつまずいた点をリストしていきたいと思います。完成品のコード自体は次回に公開します。</p>

<ul>
 <li>PHPでは、全ての関数のスコープはグローバルになる。参考：<a href="http://www.php.net/manual/ja/language.functions.php">PHP: 関数 - Manual</a></li>
 <li>関数の外で定義された変数は、関数の中から自動的にアクセス可能にならない。グローバル変数を関数内で使うには、global キーワードを使って変数を関数内部で再定義する必要がある。参考：<a href="http://www.php.net/manual/ja/language.variables.scope.php">PHP: 変数のスコープ - Manual</a></li>
 <li>Javaで言う所の array.length は count($array)てな感じになる。</li>
 <li>Javaでの、クラスのメンバを呼ぶ際のドット(例：System.out.println)は、PHPでは->になる。</li>
 <li>PHPにはパッケージの概念がないらしい。</li>
 <li>日本語を直接コード内にリテラルとして書く場合は、ダブルクォートではなくシングルクォートで囲まないとパーサが文句を垂れる。</li>
 <li>XHTMLの中でPHPをインラインで呼ぶ場合、xml宣言はPHPのechoなりprintなりを使って書き出してやらないとパーサが文句を垂れる。参考: <a href="http://sb.xrea.com/archive/index.php/t-4625.html">XREA SUPPORT BOARD - Xhtml で Php。</a></li>
 <li>サーバの設定によっては、Header may not contain more than a single header, new line detected. in どうたらこうたら、というエラーを吐く場合がある。そんな時はおもむろに、スクリプトの始めに<code>error_reporting(0);</code>と書いてエラー出力を切ってやればいい。参考：<a href="http://japan.nucleuscms.org/bb/viewtopic.php?t=502&">Nucleus(JP)フォーラム :: トピックを表示 - pingサーバを作りたい</a></li>
 <li>string内に特定の文字列があるかどうかを判定したい場合は、strpos()を使って、返り値がfalseかどうかを見る。参考：<a href="http://www.php.net/manual/ja/function.strpos.php">PHP: strpos - Manual</a></li>
</ul>

<p>コーディング中にいろいろ調べているうちに、結構いろんな人がPingサーバを作ってるらしい事も分かりました。まぁ車輪の再発明になってしまいましたが、自分としてはいい練習になってるので良しとしましょう。次回は完成品の公開です。</p>]]>
    </content>
</entry>
<entry>
    <title>PHPでweblogUpdates.ping その4: XML-RPCインターフェイス部の実装</title>
    <link rel="alternate" type="text/html" href="http://tech.ppmz.com/2006/08/phpweblogupdatesping_4_xmlrpc.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ppmz.com/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=54" title="PHPでweblogUpdates.ping その4: XML-RPCインターフェイス部の実装" />
    <id>tag:tech.ppmz.com,2006://1.54</id>
    
    <published>2006-08-03T02:51:02Z</published>
    <updated>2006-08-03T03:28:43Z</updated>
    
    <summary>PHPとPEARを使って、実際にweblogUpdates.ping(更新Ping)を受け取って処理するサーバを実装します。今回はXML-RPCインターフェイス部分の実装です。</summary>
    <author>
        <name>Pju</name>
        
    </author>
            <category term="BlogUpdatePing" />
            <category term="PHP" />
    
    <content type="html" xml:lang="en" xml:base="http://tech.ppmz.com/">
        <![CDATA[<p>大体の構想も固まったので、いよいよコーディングに入りたいと思います。XML-RPCを簡単に扱えるモジュールがないかな、とGoogleで検索していたら、とても役に立つ（というかまさにズバリ）というページ、その名も<a href="http://www.s-m-l.org/dev/php_xml_rpc.html">PHPとPEARでXML-RPC</a>を見つけました。このページに簡単なサーバとクライアントの実装例があったので、基本的な部分はこれを拝借する事にしました。</p>]]>
        <![CDATA[<p>といっても実際にはあまりやる事はなく、関数のシグネチャであるsample.sumAndDifferenceとなっている部分をweblogUpdates.pingに書き換えれば、基本的には更新pingを受け取るサーバは出来上がり…ってこんな簡単で良いんでしょうかね。まぁもちろんレスポンスの部分や、実際に受け取った情報の処理はまた別にしなければいけませんが、これだけの作業でサーバの外部とのインターフェイスを担当する部分は完了です。実際のコードはこんな感じです(クライアント、サーバ共に<a href="http://www.s-m-l.org/dev/php_xml_rpc.html">PHPとPEARでXML-RPC</a>に掲載の物の改変)。<br />
<pre><br />
<?php<br />
require_once("XML/RPC.php");<br />
require_once("XML/RPC/Server.php");<br />
$GLOBALS['XML_RPC_defencoding'] = "UTF-8";</p>

<p>function pingReceived ($params) {<br />
    global $XML_RPC_erruser; <br />
    $p1 = $params->getParam(0);<br />
    $p2 = $params->getParam(1);<br />
    $name = $p1->scalarval(); //ブログ名<br />
    $url = $p2->scalarval(); //ブログのURL<br />
    //受信情報の処理はこの辺に…。<br />
    $value = new XML_RPC_Value("Thanks for the ping.", "string");<br />
    return new XML_RPC_Response($value);<br />
}</p>

<p>$s = new XML_RPC_Server(array("weblogUpdates.ping" => array("function" => "pingReceived")));<br />
?><br />
</pre></p>

<p>ちなみに、同じサイトのクライアントスクリプトの関数シグネチャをweblogUpdates.pingに書き換えて、第一引数にブログのタイトル、第二引数にブログのURLを入れてやれば、更新ping送信用のスクリプトの出来上がりです。コードはこんな感じです。<br />
<pre><br />
<?php<br />
require_once("XML/RPC.php");<br />
$GLOBALS['XML_RPC_defencoding'] = "UTF-8";</p>

<p>$xmlrpc_host = "http://www.yahoo.co.jp"; //送信先ホスト<br />
$xmlrpc_path = "/RPC2"; //送信先パス<br />
$c = new XML_RPC_client( $xmlrpc_path, $xmlrpc_host, 80 );</p>

<p>//引数の一覧を作成<br />
$params = array(<br />
            new XML_RPC_Value( 'ppmz.com', 'string' )<br />
            ,new XML_RPC_Value( "http://www.ppmz.com/", 'string' )<br />
);</p>

<p>//メッセージの作成<br />
$message = new XML_RPC_Message('weblogUpdates.ping',$params);</p>

<p>//メッセージ送信<br />
$response = $c->send($message);</p>

<p>//応答の処理 - 正常時とエラー時<br />
if (!$response->faultCode()) {<br />
	print $response->serialize();<br />
}else{<br />
    print "Fault Code:   " . $response->faultCode()   . "<br>";<br />
    print "Fault Reason: " . $response->faultString() . "<br>";<br />
}<br />
?><br />
</pre></p>

<p><br />
次回は受け取った情報を処理する部分を実装しようと思います。</p>]]>
    </content>
</entry>
<entry>
    <title>PHPでweblogUpdates.ping その3: 設計</title>
    <link rel="alternate" type="text/html" href="http://tech.ppmz.com/2006/08/phpweblogupdateping_3.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ppmz.com/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=53" title="PHPでweblogUpdates.ping その3: 設計" />
    <id>tag:tech.ppmz.com,2006://1.53</id>
    
    <published>2006-08-03T01:16:23Z</published>
    <updated>2006-08-03T02:50:38Z</updated>
    
    <summary>weblogUpdates.pingをPHPで実装する際の、おおざっぱな設計を考えてみました。</summary>
    <author>
        <name>Pju</name>
        
    </author>
            <category term="BlogUpdatePing" />
            <category term="PHP" />
    
    <content type="html" xml:lang="en" xml:base="http://tech.ppmz.com/">
        <![CDATA[<p>weblogUpdates.pingの仕様は大体理解したので、次はアプリケーションの設計に移ります。どうやらXML-RPCの部分は既製品のモジュールが使えそうなので、プログラム自体のサイズはそう大きくはならないでしょうが、全体を大雑把にどう分けるのか、という部分は考えておきたいと思います。</p>]]>
        <![CDATA[<h3>モジュールとその機能</h3>
<ul>
 <li>Ping受信モジュール: weblogUpdates.pingを受信して、応答する部分。</li>
 <li>Ping情報保存・管理モジュール: 受け取った情報をディスクなりDBなりに保存して、古い物の破棄あるいはアーカイブをする部分。</li>
 <li>HTML出力モジュール: 保存されたPing情報を解釈して、適切なHTMLを生成する部分。</li>
</ul>

<h3>実装に関する備考</h3>
<ul>
<li>Ping情報は、最新n件だけ保存するようにして、古い物から破棄する予定なので、情報を保存しておく媒体にわざわざDBを使わなくてもファイルで十分だと思う。</li>
<li>ファイルに書き込む書式は、XMLを使おうかとも思ったが、何も5行3列の情報をわざわざXMLにエンコードして、それをまたデコードしなくても、と思ったので今回はパス。デリミタで区切った独自書式に決定。</li>
<li>最終的にトップページにどういった形で表示するか、という部分で２方式考えついた。一つはpingを受信するごとに静的なindex.htmを生成するやり方で、もう一つはトップページをリクエストの度に動的に生成するやり方。今の所I/Oがボトルネックになるほどのアクセスはないし、汎用性やメンテナンス性が高い方が良いので後者を採用。</li>
</ul>]]>
    </content>
</entry>
<entry>
    <title>PHPでweblogUpdates.ping その2: 更新Pingの仕様を研究</title>
    <link rel="alternate" type="text/html" href="http://tech.ppmz.com/2006/08/phpweblogupdateping_2_ping.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ppmz.com/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=52" title="PHPでweblogUpdates.ping その2: 更新Pingの仕様を研究" />
    <id>tag:tech.ppmz.com,2006://1.52</id>
    
    <published>2006-08-01T22:19:55Z</published>
    <updated>2006-08-03T06:11:27Z</updated>
    
    <summary>更新Pingが実際にどういう風に送られて、どういう処理をされるべきなのかについてのリサーチ。</summary>
    <author>
        <name>Pju</name>
        
    </author>
            <category term="BlogUpdatePing" />
            <category term="PHP" />
    
    <content type="html" xml:lang="en" xml:base="http://tech.ppmz.com/">
        <![CDATA[<p>更新Pingを処理するサーバを自前で作ってみよう企画の第二弾、今回は更新Pingの仕様、どういった動作が期待されているのかという事の研究です。とりあえず基本的にHTTPで何か送って、それに対して返事が来る、という部分は知っていましたが、実際にサーバを書くとなるともう少し詳しい仕様が必要になるので、調べてみました。</p>]]>
        <![CDATA[<h3>わかった事</h3>
<ul>
 <li>プロトコルはXML-RPC。通信自体はHTTP(TCP:80)、POSTリクエスト。XML-RPC規格に沿ったXMLファイルがPOSTされてくる。</li>
 <li>更新Pingは、どうやら正式にはweblogUpdates.pingという名前らしい。仕様書は<a href="http://www.xmlrpc.com/weblogsCom">Weblogs.Com XML-RPC interface</a>(英語)。</li>
 <li>XML-RPC = Remote Procedure Call written in XML。要するにリモートの環境で処理(Procedure)を呼び出す(Call)のに必要な情報を、特定のXML形式に沿って書いてHTTP POSTで送りましょう、という規格。JavaにはRMI(Remote Method Invocation)なんてのがあるけども、それと似たようなものだろうか。</li>
 <li>ただ、仕様書を読んだ限りでは、送られてくるのがコレで、返事がコレ、という事しか決まってなくて、受け取った物で何をするかは別に自由っぽい。</li>
 <li>リモートで実行される関数のシグネチャは次の通り：<code>weblogUpdates.ping (weblogname, weblogurl, changesurl=weblogurl, categoryname="none") returns struct</code>。引数の一覧は次の通り:
   <ol>
     <li>weblogname: String型、必須。ブログの名前を示す。</li>
     <li>weblogurl:  String型、必須。ブログのURLを示す。</li>
     <li>cangesurl:  String型、任意。変更を確認する際に読みにいくべきURL(ブログのトップURLと最新記事の載るページが違う場合に使うのかな？)。</li>
     <li>categoryname:  String型、任意。仕様書を読んだ限り、この値がどういう意味でのカテゴリなのかが明確に示されていなかったので、用途不明。</li>
   </ol>
 </li>
 <li><a href="http://isnot.jp/?p=XML-RPC%A1%F8%B9%B9%BF%B7Ping%A4%CE%C1%F7%BF%AE">XML-RPC§更新Pingの送信</a>によると、weblogUpdates.extendedPingというRPC名を使う場合は第3,4引数は必須で、第4引数にはカテゴリ名<em>またはRSS,RDF,AtomフィードのURL</em>が入るらしい。カテゴリとURLを混ぜるとは、なんともいい加減な仕様だ…。</li>
 <li>weblogUpdates.pingは、純粋に更新通知を受け取るだけの仕組みなので、更新された記事のタイトルやURLは送信されてくる情報には含まれていない。これらの情報を取得するには、更新通知のPingが送られてきてから、サーバが該当のブログのフィードの種類を自動判別して、RSSなりAtomなりを解釈して持ってくるしかない(アルェ？)。</li>
</ul>

<p>…どうやら、weblogUpdates.pingそのものは非常に貧弱なプロトコルのようです。まぁ更新情報を通知するだけのプロトコルという事を考えるとそれも仕方ないですかね。さしあたってはping受け取りと同時にRSSを読みにいって云々はまた後ほどの実装ということにして、ごく最低限の、更新されたブログの名前とURLを取得する、という部分から実装しようかな、と思います。</p>

<h3>参考にしたページ</h3>
<ul>
 <li><a href="http://www.xmlrpc.com/weblogsCom">Weblogs.Com XML-RPC interface</a></li>
 <li><a href="http://isnot.jp/?p=XML-RPC%A1%F8%B9%B9%BF%B7Ping%A4%CE%C1%F7%BF%AE">XML-RPC§更新Pingの送信</a></li>
 <li><a href="http://blog.bulknews.net/mt/archives/001197.html">weblogUpdates.ping の拡張メモ</a></li>
 <li><a href="http://hail2u.net/blog/blog/rss_ping.html">RSS Ping</a></li>
</ul>]]>
    </content>
</entry>
<entry>
    <title>PHPでweblogUpdates.ping その1: どんな物を作るのか(Objective)</title>
    <link rel="alternate" type="text/html" href="http://tech.ppmz.com/2006/08/phpweblogupdateping_1_objectiv.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ppmz.com/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=51" title="PHPでweblogUpdates.ping その1: どんな物を作るのか(Objective)" />
    <id>tag:tech.ppmz.com,2006://1.51</id>
    
    <published>2006-08-01T17:08:48Z</published>
    <updated>2006-08-03T02:49:58Z</updated>
    
    <summary>更新Pingサーバの実装にあたって、まずは、達成すべきゴールと現状の整理から始めます。</summary>
    <author>
        <name>Pju</name>
        
    </author>
            <category term="BlogUpdatePing" />
            <category term="PHP" />
    
    <content type="html" xml:lang="en" xml:base="http://tech.ppmz.com/">
        <![CDATA[<p>敵を知り己を知らば百戦してなお危うからず、とはかの有名な「孫子」からの引用ですが、まずプログラムを書くにあたってどんなプログラムを書こうとしているのかを明確にしておく必要があると思うので、ブレインストームがてら、現状整理をしつつ要件を書き出していこうかと思います。</p>]]>
        <![CDATA[<h3>さしあたって実現したいこと：</h3>
<ul>
 <li>自サイト内の複数ブログの更新情報を一元的にサイトトップに表示したい。</li>
 <li>PHPを習得したい。</li>
 <li>将来の機能拡張に容易に対応できるような設計にしたい。</li>
</ul>

<h3>現状：</h3>
<ul>
 <li>サイト内には、MovableTypeで管理されているブログと、WordPressで管理されているブログが混在している。</li>
 <li>PHPのプログラムを書いた経験は特に無し。</li>
 <li>Webプログラム全般を書いた経験もなし。PostとGetの違いもよく知らない。</li>
 <li>スタンドアロンのJavaアプリケーションならそれなりに経験あり(といっても実務経験ではない)。</li>
 <li>アップデートの際に手間が増えるので、ブログスクリプトを直接いじることはしたくない。＝ブログスクリプト既存の機能のみでなんとかする。</li>
 <li>更新Pingは、記事がアップされたときにMTやWPが送るもの、という認識。</li>
</ul>

<p>とまぁ現状こんな感じです。これを踏まえて、何をすべきか、というリストを作ってみます。</p>

<h3>ToDo:</h3>
<ul>
 <li>更新Pingの仕様を理解する。</li>
 <li>PHPの基礎も理解すべき…だが基本的には習うより慣れろ</li>
 <li>仕様と、要件を理解した上でのプログラムの設計</li>
 <li>コーディング</li>
 <li>テスト、そしてリリース</li>
</ul>

<p>てなわけで、とりあえずは上のToDoに従ってやっていきたいと思います。</p>]]>
    </content>
</entry>
<entry>
    <title>暇だからPHPでも勉強してみるよ</title>
    <link rel="alternate" type="text/html" href="http://tech.ppmz.com/2006/08/php.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ppmz.com/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=50" title="暇だからPHPでも勉強してみるよ" />
    <id>tag:tech.ppmz.com,2006://1.50</id>
    
    <published>2006-08-01T14:52:41Z</published>
    <updated>2006-08-01T17:03:55Z</updated>
    
    <summary>仕事が無いのをいいことに家でダラダラ過ごすのもあまり宜しくないので、これを良い機会としてPHPでも習得してみようかなと思ったわけです。</summary>
    <author>
        <name>Pju</name>
        
    </author>
            <category term="BlogUpdatePing" />
            <category term="PHP" />
    
    <content type="html" xml:lang="en" xml:base="http://tech.ppmz.com/">
        <![CDATA[<p>現在休職（求職）中なわけですが、仕事が無いのをいいことに家でダラダラ過ごすのもあまり宜しくないので、これを良い機会として一つ新しいプログラミング言語を習得してみようかなと思ったわけです。<br />
同時進行でサイトの再構成も行っているのですが、その際にある機能を実行するスクリプトが必要になって、その機能を満たすスクリプトがどうやらあまりフリーで出回ってないようなので、じゃぁ自分で作ってみようかね、と。</p>]]>
        <![CDATA[<p>どんなスクリプトかというと、まぁブログのPingサーバ(受信側)です。自分は複数ブログ（ブログスクリプトを使っているという意味において）を持っているのですが、今のところ、それらの更新情報を一カ所でみられるページってのが存在しないんですね。それなのでそういう機能を実現するにはどういった仕組みが一番かな、と考えたらPingサーバだったわけです。<br />
まぁそういうわけで、PHPに関してはズブの素人な訳ですが、とりあえず他の言語の経験はあるのである程度はなんとかなるかな、と楽観的に考えて、まずはPingサーバ規格の仕様書探しから始めようかと思います。</p>]]>
    </content>
</entry>
<entry>
    <title>英語版 WindowsXP で日本語を使う方法</title>
    <link rel="alternate" type="text/html" href="http://tech.ppmz.com/2006/05/_windowsxp.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ppmz.com/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=15" title="英語版 WindowsXP で日本語を使う方法" />
    <id>tag:tech.ppmz.com,2006://1.15</id>
    
    <published>2006-05-04T15:38:46Z</published>
    <updated>2006-05-04T16:04:44Z</updated>
    
    <summary>概要 WindowsXPで日本語のサポートを有効にするには、日本語の文字コード変換テーブルと日本語フォント、日本語入力システム(IME)をインストールし、非Unicodeソフトウェア用の文字コードセットを日本語に設定します。 手順 Control Panelを開きます。 Regional and Language Options を開きます。 Languageタブを開きます。 Supplemental language support の項にある、Install files for East Asian languages のチェックをオンにします。 Advanced タブを開きます。 Code page coversion tables の項に含まれている、Japaneseと書いてある全ての選択肢のチェックをオンにします。 同じタブ内の、Language for non-Unicode programsの項にあるプルダウンボックスで、Japanese を選択します。 OK ボタンを押して、Regional and Language Options を閉じます。 再起動します。以上で完了です。...</summary>
    <author>
        <name>Pju</name>
        
    </author>
            <category term="Windows" />
    
    <content type="html" xml:lang="en" xml:base="http://tech.ppmz.com/">
        <![CDATA[<h3>概要</h3>
<p>WindowsXPで日本語のサポートを有効にするには、日本語の文字コード変換テーブルと日本語フォント、日本語入力システム(<acronym title="Input Method Editor">IME</acronym>)をインストールし、非Unicodeソフトウェア用の文字コードセットを日本語に設定します。</p>

<h3>手順</h3>
<ol>
<li>Control Panelを開きます。</li>
<li>Regional and Language Options を開きます。</li>
<li>Languageタブを開きます。</li>

<p><li>Supplemental language support の項にある、Install files for East Asian languages のチェックをオンにします。</li><br />
<li>Advanced タブを開きます。</li><br />
<li>Code page coversion tables の項に含まれている、Japaneseと書いてある全ての選択肢のチェックをオンにします。</li><br />
<li>同じタブ内の、Language for non-Unicode programsの項にあるプルダウンボックスで、Japanese を選択します。</li><br />
<li>OK ボタンを押して、Regional and Language Options を閉じます。</li><br />
<li>再起動します。以上で完了です。</li></p>

</ol>
<h3>補足</h3>
<p>記憶を頼りに書いたので、ひょっとしたら何ステップか抜けているかもしれません。手順の抜けを発見した方は、webmaster@ppmz.comまでご一報ください。</p>

<p>同様の方法で、東アジアの言語（中国語、韓国語）を扱うように設定できるかもしれませんが、試していないので不明です。</p>
]]>
        
    </content>
</entry>
<entry>
    <title>Quartz 2D Extreme - Tiger</title>
    <link rel="alternate" type="text/html" href="http://tech.ppmz.com/2006/05/quartz_2d_extreme_tiger.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ppmz.com/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=11" title="Quartz 2D Extreme - Tiger" />
    <id>tag:tech.ppmz.com,2006://1.11</id>
    
    <published>2006-05-04T15:34:16Z</published>
    <updated>2006-05-04T16:04:44Z</updated>
    
    <summary>What&apos;s Quartz 2D Extreme New feature of Tiger, hardware accleretation of GUI that is disabled by default. How to enable Install Development tools(Xcode2,etc), if not installed Go to Spotlight, type in quartz debug Start Quartz Debug Tool - Enable Quartz...</summary>
    <author>
        <name>Pju</name>
        
    </author>
            <category term="MacOSX" />
    
    <content type="html" xml:lang="en" xml:base="http://tech.ppmz.com/">
        <![CDATA[<h3>What's Quartz 2D Extreme</h3>
<p>New feature of Tiger, hardware accleretation of GUI that is disabled by default.</p>
<h3>How to enable</h3>
<ol>
    <li>Install Development tools(Xcode2,etc), if not installed</li>
    <li>Go to Spotlight, type in quartz debug</li>
    <li>Start Quartz Debug</li>
    <li>Tool - Enable Quartz 2D Extreme</li>
    <li>Force quit Quartz Debug</li>
    <li>If you check the Graphics/Display section of System Profiler, "Quartz 2D Extreme: Supported" entry should be added. If not, your GPU is not compatible with Quartz 2D Extreme.</li>
</ol>]]>
        
    </content>
</entry>
<entry>
    <title>Firefox optimized for G4 processor</title>
    <link rel="alternate" type="text/html" href="http://tech.ppmz.com/2006/05/firefox_optimized_for_g4_proce.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ppmz.com/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=10" title="Firefox optimized for G4 processor" />
    <id>tag:tech.ppmz.com,2006://1.10</id>
    
    <published>2006-05-04T15:33:36Z</published>
    <updated>2006-05-04T16:04:44Z</updated>
    
    <summary>The Firefox Community Edition, G4 optimized builds provides a package of Mozilla Firefox that is optimized for Mac G4 processor. I am currently using Firefox CE[Aviary/OS X] PowerPC 7450. If you are not sure which G4 you are using, open...</summary>
    <author>
        <name>Pju</name>
        
    </author>
            <category term="MacOSX" />
    
    <content type="html" xml:lang="en" xml:base="http://tech.ppmz.com/">
        <![CDATA[<p><a href="http://homepage.mac.com/krmathis/">The Firefox Community Edition, G4 optimized builds</a> provides a package of Mozilla Firefox that is optimized for Mac G4 processor. I am currently using Firefox CE[Aviary/OS X] PowerPC 7450. If you are not sure which G4 you are using, open terminal, type machine, press enter.</p>]]>
        
    </content>
</entry>
<entry>
    <title>Mail.app 2.0 (Tiger付属版）の送信メールの文字コード</title>
    <link rel="alternate" type="text/html" href="http://tech.ppmz.com/2006/05/mailapp_20_tiger.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ppmz.com/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=9" title="Mail.app 2.0 (Tiger付属版）の送信メールの文字コード" />
    <id>tag:tech.ppmz.com,2006://1.9</id>
    
    <published>2006-05-04T15:32:49Z</published>
    <updated>2006-05-04T16:04:44Z</updated>
    
    <summary>Abstract MacOSX10.4(Tiger)付属のメールソフトMail.app バージョン2.0を英語が標準の環境で使うと、送信されるメールのエンコーディングがSubject, bodyともにUTF-8になってしまう問題の対策法 Fix for problem with Mail.app version 2.0 (comes with MacOSX 10.4 Tiger) sending Japanese email in UTF-8 by default. 手順 Terminal を開く。 以下のコマンドを実行defaults write com.apple.mail NSPreferredMailCharset &quot;ISO-2022-JP&quot; Procedure Open Terminal. Execute command below.defaults write com.apple.mail NSPreferredMailCharset...</summary>
    <author>
        <name>Pju</name>
        
    </author>
            <category term="MacOSX" />
    
    <content type="html" xml:lang="en" xml:base="http://tech.ppmz.com/">
        <![CDATA[<h3>Abstract</h3>
<p>MacOSX10.4(Tiger)付属のメールソフトMail.app バージョン2.0を英語が標準の環境で使うと、送信されるメールのエンコーディングがSubject, bodyともにUTF-8になってしまう問題の対策法 </p>
<p>Fix for problem with Mail.app version 2.0 (comes with MacOSX 10.4 Tiger) sending Japanese email in UTF-8 by default.</p>

<h3>手順</h3>
<ol>
    <li>Terminal を開く。</li>
    <li>以下のコマンドを実行<br /><code>defaults write com.apple.mail NSPreferredMailCharset "ISO-2022-JP"</code></li>
</ol>

<h3>Procedure</h3>
<ol>
    <li>Open Terminal.</li>
    <li>Execute command below.<br /><code>defaults write com.apple.mail NSPreferredMailCharset "ISO-2022-JP"</code></li>
</ol>

<h3>参考 / Reference </h3>
<p><a href="http://discussions.info.apple.co.jp/WebX?128@832.34pJadqhYyc.0@.efd7768">Apple Support Discussions 標準エンコーディングの設定は？</a></p>
]]>
        
    </content>
</entry>
<entry>
    <title>How to make hidden harddrive volume on Tiger</title>
    <link rel="alternate" type="text/html" href="http://tech.ppmz.com/2006/05/how_to_make_hidden_harddrive_v.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ppmz.com/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=8" title="How to make hidden harddrive volume on Tiger" />
    <id>tag:tech.ppmz.com,2006://1.8</id>
    
    <published>2006-05-04T15:32:01Z</published>
    <updated>2006-05-04T16:04:44Z</updated>
    
    <summary>Requirement MacOSX 10.4 &quot;Tiger&quot; is installed Developer tools are installed (i.e. &quot;Developer&quot; directory exists) Let&apos;s say you want to set the harddrive volume called Backup to be hidden/invisible. In order to do that, execute following command. /Developer/Tools/SetFile -a V /Volumes/Backup/...</summary>
    <author>
        <name>Pju</name>
        
    </author>
            <category term="MacOSX" />
    
    <content type="html" xml:lang="en" xml:base="http://tech.ppmz.com/">
        <![CDATA[<h4>Requirement</h4>
<ul>
    <li>MacOSX 10.4 "Tiger" is installed</li>
    <li>Developer tools are installed (i.e. "Developer" directory exists)</li>
</ul>
<p></p>
<p>Let's say you want to set the harddrive volume called Backup to be hidden/invisible. In order to do that, execute following command.</p>
<pre>
/Developer/Tools/SetFile -a V /Volumes/Backup/
</pre>

<h3>Tiger における隠しドライブの作り方</h3>
<h4>必須条件</h4>
<ul>
    <li>MacOSX 10.4 "Tiger" がインストールされていること</li>
    <li>デベロッパーツールがインストールされていること（つまり、"Developer"ディレクトリが存在していること)</li>
</ul>
<p>Backupという名前のバーティションが存在すると仮定して、これを見えないようにしたい場合には、以下のコマンドをターミナルから実行してください。</p>
<pre>
/Developer/Tools/SetFile -a V /Volumes/Backup/
</pre>]]>
        
    </content>
</entry>
<entry>
    <title>特定ボリュームのインデックス作成を無効にする (Prevent a particular volume from being indexed)</title>
    <link rel="alternate" type="text/html" href="http://tech.ppmz.com/2006/05/_prevent_a_particular_volume_f.html" />
    <link rel="service.edit" type="application/atom+xml" href="http://www.ppmz.com/cgi-bin/mt/mt-atom.cgi/weblog/blog_id=1/entry_id=7" title="特定ボリュームのインデックス作成を無効にする (Prevent a particular volume from being indexed)" />
    <id>tag:tech.ppmz.com,2006://1.7</id>
    
    <published>2006-05-04T15:30:56Z</published>
    <updated>2006-05-04T16:04:44Z</updated>
    
    <summary>管理者権限のあるユーザでログインして、Terminalを起動して以下のコマンドを実行する (volumename は該当するボリューム名に置換)。 Login as administrator and execute the following command through terminal (replace &quot;volumename&quot; with appropriate volume name). $ sudo su # mdutil -i off /Volumes/volumename...</summary>
    <author>
        <name>Pju</name>
        
    </author>
            <category term="MacOSX" />
    
    <content type="html" xml:lang="en" xml:base="http://tech.ppmz.com/">
        <![CDATA[<p>管理者権限のあるユーザでログインして、Terminalを起動して以下のコマンドを実行する (volumename は該当するボリューム名に置換)。<br />
Login as administrator and execute the following command through terminal (replace "volumename" with appropriate volume name).</p>

<p>$ sudo su<br />
# mdutil -i off /Volumes/volumename</p>]]>
        
    </content>
</entry>

</feed> 


