<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2japanesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>独断と偏見の何でもレビュー</title>
	
	<link>http://dogmap.jp</link>
	<description>暇人による、暇人の為の何でもレビューもしくは日常メモ。 since Feb. 27, 2005</description>
	<lastBuildDate>Fri, 27 Jan 2012 14:55:22 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://dogmap.jp/feed/" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/dogmap" /><feedburner:info uri="dogmap" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by/2.0/</creativeCommons:license><image><link>http://dogmap.jp/</link><url>http://dogmap.jp/wp-content/uploads/imgs/dogmap_logo.jpg</url><title>dogmap logo</title></image><feedburner:feedFlare href="http://paipo.jp/bookmarklet/?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdogmap" src="http://www.feedburner.jp/fb/i/subscribe_paipo.gif">Paipo???</feedburner:feedFlare><feedburner:feedFlare href="http://add.my.yahoo.co.jp/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdogmap" src="http://i.yimg.jp/i/jp/my/addtomy/standard_bb.gif">myyahoo???</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdogmap" src="http://www.newsgator.com/images/ngsub1.gif">NewsGator Online???</feedburner:feedFlare><feedburner:feedFlare href="http://feedpath.jp/feedreader/feeds_add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdogmap" src="http://feedpath.jp/common/images/sub_feedpath.gif">feedpath???</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/dogmap" src="http://www.bloglines.com/images/sub_modern11.gif">Bloglines???</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fdogmap" src="http://buttons.googlesyndication.com/fusion/add.gif">Google???</feedburner:feedFlare><feedburner:feedFlare href="http://r.hatena.ne.jp/append/http://feeds.feedburner.com/dogmap" src="http://r.hatena.ne.jp/images/addto_w.gif">???RSS???</feedburner:feedFlare><feedburner:feedFlare href="http://reader.livedoor.com/subscribe/http://feeds.feedburner.com/dogmap" src="http://image.reader.livedoor.com/img/banner/91_17_1.gif">Livedoor???????</feedburner:feedFlare><feedburner:feedFlare href="http://reader.goo.ne.jp/web/bookmarklet.html?,,http%3A%2F%2Ffeeds.feedburner.com%2Fdogmap" src="http://reader.goo.ne.jp/web/img/addwebrss.gif">goo RSS???????</feedburner:feedFlare><item>
		<title>Codeigniter の言語クラスで gettext を使えるようにする</title>
		<link>http://feedproxy.google.com/~r/dogmap/~3/ExmS96bymPk/</link>
		<comments>http://dogmap.jp/2012/01/27/gettext-extension-of-ci_lang-library/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 14:49:05 +0000</pubDate>
		<dc:creator>をかもと</dc:creator>
				<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[Codeigniter]]></category>
		<category><![CDATA[gettext]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://dogmap.jp/?p=2685</guid>
		<description>最近、ちょっと訳あって Codeigniter をいじってます。 すでに PHP が分かっていれば、学習コストも低く、直感的に使えるんでなかなか良いっすよ。 Codeigniter で、国際化するために用意されてる言語ク &amp;#8230; &lt;a href="http://dogmap.jp/2012/01/27/gettext-extension-of-ci_lang-library/"&gt;続きを読む &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
			<content:encoded><![CDATA[<p>最近、ちょっと訳あって <a href="http://codeigniter.jp/" title="Codeigniter">Codeigniter</a> をいじってます。<br />
すでに PHP が分かっていれば、学習コストも低く、直感的に使えるんでなかなか良いっすよ。</p>
<p>Codeigniter で、国際化するために用意されてる<a href="http://codeigniter.jp/user_guide_ja/libraries/language.html" title="言語クラス">言語クラス</a>ですが、通常は以下のようにして使います。</p>
<p>application/language ディレクトリに各言語のサブフォルダ(例:japanese)を用意する。</p>
<p>その中に _lang.php (例:error_lang.php) というファイルを作成して、連想配列 $lang にテキストをセットする。</p>
<pre>$lang['language_key'] = "実際に表示されるメッセージ";</pre>
<p>Controller で言語ファイルを読み込む。</p>
<pre>$this->lang->load('filename');</pre>
<p>lang オブジェクトの line メソッドか、lang() 関数で、キーを指定してテキストを取得する。</p>
<pre>$message = $this->lang->line('language_key');
// または
echo lang('language_key');</pre>
<p>ただ、これだとキーとの対比とか、メンテナンスがめんどくさいので、できれば .mo ファイル作って gettext() で処理したい所です。<br />
<span id="more-2685"></span></p>
<p>幸い Codeigniter は、<a href="http://codeigniter.jp/user_guide_ja/general/core_classes.html" title="コアシステムクラスの作成">コアシステムクラスを簡単に拡張</a>できます。<br />
っつうわけで、言語クラス CI_Lang を拡張して gettext で言語リソースを扱えるようにしてみました。</p>
<p>まず、以下の内容で application/core/MY_Lang.php を作成します。</p>
<pre>&lt;?php  if (!defined(&#039;BASEPATH&#039;)) exit(&#039;No direct script access allowed&#039;);
/**
 * Code Igniter Gettext Extension library
 *
 * This Library overides the original CI&#039;s language class. Needs the  $config[&#039;language&#039;] variable set as ja_JP or en_EN or fr_FR ...
 *
 * @package       Gettext Extension
 * @author        wokamoto
 * @copyright     Copyright (c) 2012
 * @license       http://www.gnu.org/licenses/lgpl.txt
 * @link
 * @version       Version 0.1
 * @since         2012 January, 27th
 */

// ------------------------------------------------------------------------

class MY_Lang extends CI_Lang {

	private $gettext_language;
	private $gettext_codeset;
	private $gettext_domain;
	private $gettext_path;

	/**
	 * The constructor initialize the library
	 *
	 * @return MY_Lang
	 */
	function __construct() {
		parent::__construct();
	}

	/**
	 * This method overides the original load method. Its duty is loading the domain files by config or by default internal settings.
	 *
	 * @access	public
	 * @param	string	$userlang	the language, set as ja_JP or it_IT or en_EN or fr_FR ...
	 * @param	string	$codeset	the codeset, set as UTF-8 or EUC ...
	 * @return	bool
	 */
	public function load_gettext( $textdomain = false, $userlang = false, $codeset = false, $path = false ) {
		$config =&amp; get_config();

		$this-&gt;gettext_language = $userlang ? $userlang : $config[&#039;language&#039;];
		$this-&gt;gettext_codeset  = $codeset ? $codeset : $config[&#039;charset&#039;];
		$this-&gt;gettext_domain   = $textdomain ? $textdomain : $this-&gt;gettext_domain;
		$this-&gt;gettext_path     = $path ? $path : APPPATH.&#039;language/locale&#039;;

		/* put env and set locale */
		putenv(&quot;LANG={$this-&gt;gettext_language}&quot;);
		setlocale(LC_ALL, $this-&gt;gettext_language);

		/* bind text domain */
		bindtextdomain($this-&gt;gettext_domain, $this-&gt;gettext_path);
		bind_textdomain_codeset($this-&gt;gettext_domain, $this-&gt;gettext_codeset);
		textdomain($this-&gt;gettext_domain);

		return  true;
	}

	/**
	 * Fetch a single line of text from the language array
	 *
	 * @access	public
	 * @param	string	$line the original string to translate
	 * @param	array	$params the plural parameters
	 * @return	string	translated
	 */
	public function line($line = &#039;&#039;, $params = FALSE)
	{
		if ( $params !== FALSE || FALSE === ($value = parent::line($line)) )
			$value = $this-&gt;_trans( $line, $params );

		return $value ? $value : $line;
	}

	/**
	 *  Plural forms added by Tchinkatchuk
	 *  http://www.codeigniter.com/forums/viewthread/2168/
	 */

	/**
	 * The translator method
	 *
	 * @access	private
	 * @param	string	$original the original string to translate
	 * @param	array	$aParams the plural parameters
	 * @return	string	translated
	 */
	private function _trans( $original, $aParams = false ) {
		if ( !isset($this-&gt;gettext_domain) )
			return false;

		if ( $aParams &amp;&amp; isset($aParams[&#039;plural&#039;]) &amp;&amp; isset($aParams[&#039;count&#039;]) ) {
			$sTranslate = ngettext($original, $aParams[&#039;plural&#039;], $aParams[&#039;count&#039;]);
			$sTranslate = $this-&gt;replaceDynamically($sTranslate, $aParams);
		} else {
			$sTranslate = gettext( $original );
			if ( is_array($aParams) &amp;&amp; count($aParams) ) {
				$sTranslate = $this-&gt;replaceDynamically($sTranslate, $aParams);
			}
		}

		return $sTranslate;
	}

	/**
	 * Allow dynamic allocation in traduction
	 *
	 * @access	private
	 * @param	string	$sString
	 * @return	string
	 */
	private function replaceDynamically($sString) {
		$aTrad = array();
		for ( $i=1, $iMax = func_num_args(); $i&lt;$iMax; $i++) {
			$arg = func_get_arg($i);
			if (is_array($arg)) {
				foreach ($arg as $key =&gt; $sValue) {
					$aTrad[&#039;%&#039;.$key] = $sValue;
				}
			} else {
				$aTrad[&#039;%&#039;.$key] = $arg;
			}
		}

		return strtr($sString, $aTrad);
	}
}</pre>
<p>そんで、application/language ディレクトリに、以下のようにファイルを言語リソースを配置。<br />
language<br />
&nbsp;+ locale<br />
&nbsp;&nbsp;+ ja_JP   (ロケール: ja_JP or en_EN or fr_FR &#8230;)<br />
&nbsp;&nbsp;&nbsp;+ LC_MESSAGES<br />
&nbsp;&nbsp;&nbsp;&nbsp;- lang.mo<br />
&nbsp;&nbsp;&nbsp;&nbsp;- lang.po</p>
<p>これを、実際に使う時は以下のようにします。</p>
<p>Controller で言語ファイルを読み込む。</p>
<pre>$this->lang->load_gettext('lang', 'ja_JP');</pre>
<p>※第一引数は textdomain、第二引数はロケール。</p>
<p>後は、同じように使えます。</p>
<pre>$message = $this->lang->line('Hello World!');
// または
echo lang('Hello World!');</pre>
<p>WordPress で慣れてるんで gettext 使いたいすよね。</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dogmap?a=ExmS96bymPk:rESme5OCI3Q:s9VDnicYSUo"><img src="http://feeds.feedburner.com/~ff/dogmap?i=ExmS96bymPk:rESme5OCI3Q:s9VDnicYSUo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=ExmS96bymPk:rESme5OCI3Q:_ezEcGVEzUU"><img src="http://feeds.feedburner.com/~ff/dogmap?i=ExmS96bymPk:rESme5OCI3Q:_ezEcGVEzUU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=ExmS96bymPk:rESme5OCI3Q:2V2C0W9ye1I"><img src="http://feeds.feedburner.com/~ff/dogmap?i=ExmS96bymPk:rESme5OCI3Q:2V2C0W9ye1I" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=ExmS96bymPk:rESme5OCI3Q:OAQBO0PjnPA"><img src="http://feeds.feedburner.com/~ff/dogmap?d=OAQBO0PjnPA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=ExmS96bymPk:rESme5OCI3Q:spdCosxkSQE"><img src="http://feeds.feedburner.com/~ff/dogmap?d=spdCosxkSQE" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dogmap/~4/ExmS96bymPk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dogmap.jp/2012/01/27/gettext-extension-of-ci_lang-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://dogmap.jp/2012/01/27/gettext-extension-of-ci_lang-library/" />
	<feedburner:origLink>http://dogmap.jp/2012/01/27/gettext-extension-of-ci_lang-library/</feedburner:origLink></item>
		<item>
		<title>Akismet にコメント投稿者の URL を削除する新機能</title>
		<link>http://feedproxy.google.com/~r/dogmap/~3/mkkxbP1YJvU/</link>
		<comments>http://dogmap.jp/2012/01/13/akismet-adds-easy-link-removal-button/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 01:02:06 +0000</pubDate>
		<dc:creator>をかもと</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Akismet]]></category>
		<category><![CDATA[WordPress Plugin]]></category>

		<guid isPermaLink="false">http://dogmap.jp/?p=2678</guid>
		<description>WordPress の SPAM コメント対策プラグイン Akismet に便利な新機能が追加されました。 ダッシュボードのコメント一覧を見ると分かるんですが、コメント投稿者の URL 右横に小さい「x」アイコンが表示さ &amp;#8230; &lt;a href="http://dogmap.jp/2012/01/13/akismet-adds-easy-link-removal-button/"&gt;続きを読む &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
			<content:encoded><![CDATA[<p><a href="http://static.dogmap.jp/2012/01/akismet-removal-button.png" title="Akismet removal button" rel="lightbox"><img src="http://static.dogmap.jp/2012/01/akismet-removal-button-320x151.png" alt="Akismet removal button" title="Akismet removal button" width="320" height="151" class="alignright size-medium wp-image-2679" border="0" align="right" /></a>WordPress の SPAM コメント対策プラグイン <a href="http://wordpress.org/extend/plugins/akismet/" title="WordPress &gt; Akismet « WordPress Plugins">Akismet</a> に便利な新機能が追加されました。<br />
ダッシュボードのコメント一覧を見ると分かるんですが、コメント投稿者の URL 右横に小さい「x」アイコンが表示されていると思います。<br />
これをクリックすることで、コメント投稿者情報から簡単に URL を削除することができます。<br />
これは、Akismet ver.2.5.4 で追加されたようです。中々、素敵な機能追加ですね。<br />
ちょっと感動したので、勢いでエントリ。<br />
<cite>via. <a href="http://www.wptavern.com/akismet-2-5-4-adds-easy-link-removal-button" title="Akismet 2.5.4 Adds Easy Link Removal Button">Akismet 2.5.4 Adds Easy Link Removal Button</a></cite></p>
<p>ちなみにスクリーンショットに表示されている国旗・OS・ブラウザのアイコンは、僕の作ったプラグイン <a href="http://dogmap.jp/2009/04/14/commenters-info/" title="Commenters Info : dogmap.jp">Commenters Info</a> を導入すると表示されるようになります。<br />
こちらも地味に便利ですよ。ダウンロードは下記から。<br />
<a href="http://wordpress.org/extend/plugins/commenters-info/" title="WordPress &gt; Commenters Info « WordPress Plugins">WordPress &gt; Commenters Info « WordPress Plugins</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dogmap?a=mkkxbP1YJvU:OFx-rqqXF6w:s9VDnicYSUo"><img src="http://feeds.feedburner.com/~ff/dogmap?i=mkkxbP1YJvU:OFx-rqqXF6w:s9VDnicYSUo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=mkkxbP1YJvU:OFx-rqqXF6w:_ezEcGVEzUU"><img src="http://feeds.feedburner.com/~ff/dogmap?i=mkkxbP1YJvU:OFx-rqqXF6w:_ezEcGVEzUU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=mkkxbP1YJvU:OFx-rqqXF6w:2V2C0W9ye1I"><img src="http://feeds.feedburner.com/~ff/dogmap?i=mkkxbP1YJvU:OFx-rqqXF6w:2V2C0W9ye1I" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=mkkxbP1YJvU:OFx-rqqXF6w:OAQBO0PjnPA"><img src="http://feeds.feedburner.com/~ff/dogmap?d=OAQBO0PjnPA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=mkkxbP1YJvU:OFx-rqqXF6w:spdCosxkSQE"><img src="http://feeds.feedburner.com/~ff/dogmap?d=spdCosxkSQE" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dogmap/~4/mkkxbP1YJvU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dogmap.jp/2012/01/13/akismet-adds-easy-link-removal-button/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://dogmap.jp/2012/01/13/akismet-adds-easy-link-removal-button/" />
	<feedburner:origLink>http://dogmap.jp/2012/01/13/akismet-adds-easy-link-removal-button/</feedburner:origLink></item>
		<item>
		<title>Nginx + memcached で WordPress をキャッシングしてみる</title>
		<link>http://feedproxy.google.com/~r/dogmap/~3/InpQ8vn3RyQ/</link>
		<comments>http://dogmap.jp/2012/01/12/wordpress-nginx-memcached/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 19:02:54 +0000</pubDate>
		<dc:creator>をかもと</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[サイト運営]]></category>
		<category><![CDATA[memcached]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://dogmap.jp/?p=2675</guid>
		<description>Nginx + memcached が気になったので試してみました。元ネタは、下記です。 CakePHPとnginx+memcachedで手軽にキャッシュを活用する &amp;#8211; Shin x blog Nginx で &amp;#8230; &lt;a href="http://dogmap.jp/2012/01/12/wordpress-nginx-memcached/"&gt;続きを読む &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
			<content:encoded><![CDATA[<p><a href="http://nginx.org/" title="nginx"><img src="http://static.dogmap.jp/2012/01/nginx.gif" alt="nginx" title="nginx" width="150" height="150" class="alignright size-full wp-image-2676" border="0" align="right" /></a>Nginx + memcached が気になったので試してみました。元ネタは、下記です。<br />
<a href="http://www.1x1.jp/blog/2010/04/cakephp_nginx_memcached.html" title="CakePHPとnginx+memcachedで手軽にキャッシュを活用する - Shin x blog">CakePHPとnginx+memcachedで手軽にキャッシュを活用する &#8211; Shin x blog</a><br />
<br />
Nginx では、<a href="http://wiki.nginx.org/NginxHttpMemcachedModule" title="HttpMemcachedModule">HttpMemcachedModule</a> を用いることで memcached にキャッシュがあれば、それをそのままレスポンスとして返すことができます。<br />
ただし memcached に保存するキャッシュデータは、アプリケーション側で生成してやらなければなりません。<br />
<br />
一方、WordPress では advanced-cache.php というドロップインを作成することでキャッシュデータの制御を行うことができるので、これを作って url をキーとしたキャッシュデータを memcached に保存し、これを Nginx の HttpMemcachedModule に使わせてみました。<br />
<span id="more-2675"></span></p>
<h3>WordPress で memcached にキャッシュする</h3>
<p>まずは、こんな感じで advanced-cache.php を作ってみます。</p>
<pre>&lt;?php
/*
* MemCached に Cache する advanced-cache.php
*
*/

// memcached server name &amp; port
if ( !defined(&#039;MC_MEMCACHED_SERVER&#039;) )
	define(&#039;MC_MEMCACHED_SERVER&#039;, &#039;localhost&#039;);
if ( !defined(&#039;MC_MEMCACHED_SERVER_PORT&#039;) )
	define(&#039;MC_MEMCACHED_SERVER_PORT&#039;, 11211);

// cache data expires (sec.)
if ( !defined(&#039;MC_MEMCACHED_EXPIRES&#039;) )
	define(&#039;MC_MEMCACHED_EXPIRES&#039;, 600);

// cache data compress
if ( !defined(&#039;MC_MEMCACHED_COMPRESS&#039;) )
	define(&#039;MC_MEMCACHED_COMPRESS&#039;, false); // or MEMCACHE_COMPRESSED

class AdvancedMemCache {
	const   PLUGIN_NAME = &#039;AdvancedMemcache&#039;;
	private $memcache;
	private $scheme = &#039;http://&#039;;
	private $user_agent;

	function __construct() {
		if ( isset($_SERVER[&quot;HTTPS&quot;]) &amp;&amp; strtolower($_SERVER[&#039;HTTPS&#039;]) == &quot;on&quot; )
			$this-&gt;scheme = &#039;https://&#039;;
		$this-&gt;user_agent =
			isset($_SERVER[&quot;HTTP_USER_AGENT&quot;])
			? $_SERVER[&quot;HTTP_USER_AGENT&quot;]
			: &#039;&#039;;
	}

	public function is_cache() {
		if ( $this-&gt;is_cache_agent() || $this-&gt;is_user_logged_in() || $this-&gt;is_commenter() || $this-&gt;rejected_user_agents() )
			return false;
		else
			return true;
	}

	public function output_content($url = &#039;&#039;) {
		$response = $this-&gt;get_content($url);
		foreach ( $response[&#039;headers&#039;] as $val ) {
			@header( $val );
		}
		echo $response[&#039;body&#039;];
	}

	private function get_content($url = &#039;&#039;) {
		if ( empty($url) )
			$url = $this-&gt;scheme.$_SERVER[&quot;HTTP_HOST&quot;].$_SERVER[&quot;REQUEST_URI&quot;];

		if ( !isset($this-&gt;memcache) )
			$this-&gt;memcache_init();

		if ( ($response = $this-&gt;memcache_get($url)) === false ) {
			$response = $this-&gt;remote_get($url);
			if ( !isset($response[&#039;headers&#039;]) )
				$response[&#039;headers&#039;] = array();
			if ( isset($response[&#039;body&#039;]) &amp;&amp; !empty($response[&#039;body&#039;]) &amp;&amp; $this-&gt;cache_control($response[&#039;headers&#039;]) ) {
				$cache_create = gmdate(&quot;D, d M Y H:i:s&quot;) . &#039; GMT&#039;;
				$response[&#039;body&#039;] .= &quot;\n&lt;!-- cache created at {$cache_create} --&gt;&quot;;
				$this-&gt;memcache_set($url, $response);
			}
		}

		return $response;
	}

	private function cache_control($headers) {
		$cached = true;
		foreach ($headers as $header){
			if ( preg_match(&#039;/^(expires: |cache-control: |pragma: )/i&#039;,$header) ) {
				$cached = false;
				break;
			}
		}
		return $cached;
	}

	private function is_cache_agent() {
		if ( isset($_SERVER[&#039;HTTP_X_CACHE_AGENT&#039;]) &amp;&amp; $_SERVER[&#039;HTTP_X_CACHE_AGENT&#039;] == self::PLUGIN_NAME )
			return true;
		return false;
	}

	private function is_user_logged_in() {
		$is_user_logged_in = false;
		foreach ($_COOKIE as $key =&gt; $val ) {
			if ( preg_match(&#039;/^(wordpress_logged_in_|wordpress_|wordpressuser_)/&#039;, $key) ) {
				$is_user_logged_in = true;
				break;
			}
		}
		return $is_user_logged_in;
	}

	private function is_commenter() {
		$is_commenter = false;
		foreach ($_COOKIE as $key =&gt; $val ) {
			if ( preg_match(&#039;/^comment_author_/&#039;, $key) ) {
				$is_commenter = true;
				break;
			}
		}
		return $is_commenter;
	}

	private function rejected_user_agents() {
		if ( preg_match(&#039;/^&#039;.preg_quote(self::PLUGIN_NAME. &#039;/&#039;).&#039;/i&#039;, $this-&gt;user_agent) )
			return true;
		return false;
	}

	private function memcache_init() {
		$this-&gt;memcache = memcache_connect(MC_MEMCACHED_SERVER, MC_MEMCACHED_SERVER_PORT);
	}

	private function memcache_get( $url ) {
		$response = array( &#039;headers&#039; =&gt; array(), &#039;body&#039; =&gt; &#039;&#039; );
		if ( ($response[&#039;headers&#039;] = $this-&gt;memcache-&gt;get(&#039;headers-&#039;.$url)) === false )
			return false;
		if ( ($response[&#039;body&#039;] = $this-&gt;memcache-&gt;get($url)) === false )
			return false;
		return $response;
	}

	private function memcache_set($url, $val) {
		$this-&gt;memcache-&gt;set(&#039;headers-&#039;.$url, $val[&#039;headers&#039;], MC_MEMCACHED_COMPRESS, MC_MEMCACHED_EXPIRES);
		$this-&gt;memcache-&gt;set($url, $val[&#039;body&#039;], MC_MEMCACHED_COMPRESS, MC_MEMCACHED_EXPIRES);
	}

	private function parse_str($string, &amp;$array) {
		parse_str($string, $array);
		if ( get_magic_quotes_gpc() )
			$array = stripslashes_deep( $array );
	}

	private function parse_args($args, $defaults = &#039;&#039;) {
		if ( is_object($args) )
			$r = get_object_vars($args);
		elseif ( is_array($args) )
			$r =&amp; $args;
		else
			$this-&gt;parse_str($args, $r);

		if ( is_array($defaults) )
			return array_merge($defaults, $r);
		return $r;
	}

	private function remote_get($url, $args = array()) {
		$defaults = array(&#039;method&#039; =&gt; &#039;GET&#039;);
		$args = $this-&gt;parse_args($args, $defaults);
		if ( !isset($args[&#039;headers&#039;]) )
			$args[&#039;headers&#039;] = array();
		$args[&#039;headers&#039;][&#039;X-Cache-Agent&#039;]   = self::PLUGIN_NAME;

		return $this-&gt;request($url, $args);
	}

	private function request($url, $args = array()) {
		$defaults = array(
			&#039;method&#039; =&gt; &#039;GET&#039;,
			&#039;user-agent&#039; =&gt; self::PLUGIN_NAME.&#039;; &#039;.$this-&gt;scheme.$_SERVER[&#039;HTTP_HOST&#039;],
			&#039;headers&#039; =&gt; array(),
		);

		// Pre-parse for the HEAD checks.
		$args = $this-&gt;parse_args($args);

		// stream context create
		$args = $this-&gt;parse_args($args, $defaults);
		$opts = array( &#039;http&#039; =&gt; array(
			&#039;method&#039;     =&gt; $args[&#039;method&#039;] ,
			&#039;user-agent&#039; =&gt; $args[&#039;user-agent&#039;] ,
			) );
		$header = &quot;User-Agent: {$args[&#039;user-agent&#039;]}\r\n&quot;;
		foreach ( $args[&#039;headers&#039;] as $key =&gt; $val ) {
			$header .= &quot;{$key}: {$val}\r\n&quot;;
		}
		$opts[&#039;http&#039;][&#039;header&#039;] = $header;
		$context = stream_context_create($opts);

		$content = file_get_contents($url, false, $context);
		return array(
			&#039;headers&#039; =&gt; $http_response_header,
			&#039;body&#039;    =&gt; $content,
			);
	}
}

$advanced_memcache = new AdvancedMemCache();
if ( $advanced_memcache-&gt;is_cache() ) {
	$advanced_memcache-&gt;output_content();
	die();
}</pre>
<p>※実験用に作った簡易的なモノなんで、このままでは正常に動作しないかもしれません。実環境では使わない方が良いと思うよ。</p>
<p>これで memcached 上に url をキーとしたキャッシュデータが無い場合は、キャッシュデータを取得して保存してくれるはずです。<br />
このままでも、一応 memcached にキャッシュデータが有る場合は、WordPress がキャッシュデータからレスポンスしてくれます。</p>
<h3>Nginx + memcached</h3>
<p>次に nginx.conf を、こんな感じで設定します。</p>
<pre># バックエンド
upstream backends {
    server 127.0.0.1:8080;
}

http {
    #(snip)

    server {
        #(snip)

        location / {
            # POSTはそのままバックエンドへ
            if ($request_method = POST) {
                proxy_pass http://backend;
                break;
            }

            # memcachedにキャッシュがあればキャッシュを
            # 無ければバックエンドへ
            set $memcached_key "$scheme://$host$request_uri$is_args$args";
            memcached_pass     127.0.0.1:11211;
            default_type       "text/html; charset=utf-8";
            add_header         "X-Advance-Cache" "cached";
            error_page         404 502 = @fallback;
        }

        location @fallback {
            proxy_pass         http://backend;
        }
    }
}</pre>
<p><cite>via. <a href="http://www.1x1.jp/blog/2010/04/cakephp_nginx_memcached.html" title="CakePHPとnginx+memcachedで手軽にキャッシュを活用する - Shin x blog">CakePHPとnginx+memcachedで手軽にキャッシュを活用する &#8211; Shin x blog</a></cite></p>
<p>これで memcached 上に url をキーとしたデータがあれば、それを nginx が直接レスポンスとして返してくれます。</p>
<h3>パフォーマンス</h3>
<p>さくらのVPS512 上にインストールした WordPress で ab -n 1000 -c 100 で計測してみました。<br />
ネットワークによるボトルネックを排除するため ab は同一サーバ上で実行。<br />
advanced-cache.php 無し(通常）と、advanced-cache.php 有り(WordPress がキャッシュデータを返す)、advanced-cache.php + Nginx memcached(Nginx が直接キャッシュデータを返す)の３パターンで計測しています。</p>
<table class="border_on" style="font-size: 80%;">
<thead>
<tr>
<th>構成</th>
<th>Requests per second</th>
<th></th>
<tr>
</thead>
<tbody>
<tr>
<td>advanced-cache.php 無し</td>
<td>13.85</td>
<td>100%</td>
<tr>
<tr>
<td>advanced-cache.php 有り</td>
<td>882.83</td>
<td>6374%</td>
<tr>
<tr>
<td>advanced-cache.php + Nginx memcached</td>
<td>2059.78</td>
<td>14872%</td>
<tr>
</tbody>
</table>
<p>圧倒的じゃ無いか <img src="http://static.dogmap.jp/images/wp-includes/smilies/icon_razz.gif" alt=":-P" class="wp-smiley" title=":-P" /> </p>
<h3>問題点</h3>
<p>ただ、ちょっと問題があって、このままの設定だと memcached のデータを直でレスポンスとして返してしまうので、gzip 圧縮転送とかできないんすよね。<br />
あと、ここに例示した advanced-cache.php だと Ktai Style とかで UA ごとに表示を切り替えているサイトに対応できなかったり、ログイン時にも memcached にキャッシュが有る場合は、非ログイン時に表示されるモノが表示されたり&#8230;<br />
まぁ、今回のは実験用の簡易的な実装ということで。</p>
<p>これらの問題点も、きちんと advanced-cache.php を作り込んで、nginx の設定を追い込めば対応可能だと思いますよ。</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dogmap?a=InpQ8vn3RyQ:EnrYmJGlsME:s9VDnicYSUo"><img src="http://feeds.feedburner.com/~ff/dogmap?i=InpQ8vn3RyQ:EnrYmJGlsME:s9VDnicYSUo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=InpQ8vn3RyQ:EnrYmJGlsME:_ezEcGVEzUU"><img src="http://feeds.feedburner.com/~ff/dogmap?i=InpQ8vn3RyQ:EnrYmJGlsME:_ezEcGVEzUU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=InpQ8vn3RyQ:EnrYmJGlsME:2V2C0W9ye1I"><img src="http://feeds.feedburner.com/~ff/dogmap?i=InpQ8vn3RyQ:EnrYmJGlsME:2V2C0W9ye1I" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=InpQ8vn3RyQ:EnrYmJGlsME:OAQBO0PjnPA"><img src="http://feeds.feedburner.com/~ff/dogmap?d=OAQBO0PjnPA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=InpQ8vn3RyQ:EnrYmJGlsME:spdCosxkSQE"><img src="http://feeds.feedburner.com/~ff/dogmap?d=spdCosxkSQE" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dogmap/~4/InpQ8vn3RyQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dogmap.jp/2012/01/12/wordpress-nginx-memcached/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://dogmap.jp/2012/01/12/wordpress-nginx-memcached/" />
	<feedburner:origLink>http://dogmap.jp/2012/01/12/wordpress-nginx-memcached/</feedburner:origLink></item>
		<item>
		<title>WordPress on PHP5.4.0 RC4 + APC</title>
		<link>http://feedproxy.google.com/~r/dogmap/~3/3or8aH84ipU/</link>
		<comments>http://dogmap.jp/2012/01/03/wordpress-on-php5-4rc04-apc/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 04:25:31 +0000</pubDate>
		<dc:creator>をかもと</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[サイト運営]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[PHP5.4]]></category>
		<category><![CDATA[パフォーマンス]]></category>

		<guid isPermaLink="false">http://dogmap.jp/?p=2669</guid>
		<description>明けましておめでとうございます。本年も、よろしくお願いいたします。 さて、パフォーマンスアップしたと噂の PHP 5.4 系。 WordPress も、ちゃんと動くんかいな？と思って試してみました。 使用しているプラグイ &amp;#8230; &lt;a href="http://dogmap.jp/2012/01/03/wordpress-on-php5-4rc04-apc/"&gt;続きを読む &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
			<content:encoded><![CDATA[<p>明けましておめでとうございます。本年も、よろしくお願いいたします。</p>
<p><a href="http://static.dogmap.jp/2012/01/b0efef96bac078f71e022ef0e3a83a9c.png" title="スクリーンショット（2012-01-03 11.15.50）" rel="lightbox"><img src="http://static.dogmap.jp/2012/01/b0efef96bac078f71e022ef0e3a83a9c-320x238.png" alt="スクリーンショット（2012-01-03 11.15.50）" title="スクリーンショット（2012-01-03 11.15.50）" width="320" height="238" class="alignright size-medium wp-image-2670" border="0" align="right" /></a>さて、パフォーマンスアップしたと噂の PHP 5.4 系。<br />
WordPress も、ちゃんと動くんかいな？と思って試してみました。<br />
使用しているプラグインによっては問題が出てくるかもですが、とりあえずデフォルト状態の WordPress 3.3 + TwentyEleven では問題なさそうです。<br />
あと、このサイトで使ってるプラグインでも問題は発生しなかったようです。<br />
<br />
ちなみにこのサイトで使ってるプラグインの一覧は以下の URL で見ることができます。<br />
<a href="http://dogmap.jp/plugins/3/">http://dogmap.jp/plugins/3/</a><br />
<span id="more-2669"></span></p>
<p>でまぁ、テスト用に借りてるさくらのVPS512(CentOS 5.6 64bit版) に WordPress 入れて ab で簡単にベンチを取ってみた訳なんですが、こんな感じになりました。<br />
素の状態と APC 入れた状態で、それぞれベンチ取りました。リバースプロキシとかは入れてないです。<br />
Web サーバは Nginx + php-fpm で構築、ネットワークがボトルネックにならないように localhost へのアクセスで計測しました。</p>
<p>テストに使った PHP 5.4 のビルドオプションは、こんな感じ。</p>
<pre>--prefix=/usr/local/php5.4 \
--enable-mbstring \
--with-mysql --with-pdo-mysql --with-mysqli \
--enable-pcntl \
--enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx \
--with-openssl \
--with-pcre-regex \
--with-zlib \
--with-mhash \
--with-xsl \
--with-mcrypt \
--with-pear \
--with-gd --enable-gd-native-ttf \
--enable-intl \
--enable-exif \
--enable-ftp \
--without-unixODBC \
--disable-posix \
--disable-sysvmsg \
--disable-sysvshm \
--disable-sysvsem \
--disable-debug</pre>
<p>まずは、APC とか有効にしていない状態の PHP 5.3.8 と 5.4.0 RC4 での WordPress トップページへのアクセスの ab 結果。</p>
<p>PHP 5.3.8</p>
<pre>$ ab -n 100 -c 10 http://localhost/
Server Software:        nginx
Server Hostname:        localhost
Server Port:            80

Document Path:          /
Document Length:        6182 bytes

Concurrency Level:      10
Time taken for tests:   12.521301 seconds
Complete requests:      100
Failed requests:        86
   (Connect: 0, Length: 86, Exceptions: 0)
Write errors:           0
Total transferred:      638985 bytes
HTML transferred:       618285 bytes
Requests per second:    7.99 [#/sec] (mean)
Time per request:       1252.130 [ms] (mean)
Time per request:       125.213 [ms] (mean, across all concurrent requests)
Transfer rate:          49.84 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.2      0       1
Processing:   465 1214 922.9   1103    9930
Waiting:      464 1208 919.3   1102    9891
Total:        465 1214 922.9   1103    9930

Percentage of the requests served within a certain time (ms)
  50%   1103
  66%   1177
  75%   1268
  80%   1303
  90%   1403
  95%   1459
  98%   3078
  99%   9930
 100%   9930 (longest request)</pre>
<p>PHP 5.4.0 RC4</p>
<pre>$ ab -n 100 -c 10 http://localhost/
Server Software:        nginx
Server Hostname:        localhost
Server Port:            80

Document Path:          /
Document Length:        6186 bytes

Concurrency Level:      10
Time taken for tests:   10.539823 seconds
Complete requests:      100
Failed requests:        93
   (Connect: 0, Length: 93, Exceptions: 0)
Write errors:           0
Total transferred:      638963 bytes
HTML transferred:       618263 bytes
Requests per second:    9.49 [#/sec] (mean)
Time per request:       1053.982 [ms] (mean)
Time per request:       105.398 [ms] (mean, across all concurrent requests)
Transfer rate:          59.11 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.5      0       3
Processing:   370 1030 658.3    869    5196
Waiting:      369 1029 658.3    869    5196
Total:        371 1030 658.3    869    5196

Percentage of the requests served within a certain time (ms)
  50%    869
  66%   1007
  75%   1042
  80%   1112
  90%   1401
  95%   2310
  98%   4186
  99%   5196
 100%   5196 (longest request)</pre>
<p>「Requests per second」が 7.99 [#/sec] から 9.49 [#/sec] に改善されてますね。２割弱のスピードアップ。</p>
<p>次に APC を有効にした場合のパフォーマンスチェック。<br />
64bit版 CentOS に PHP 5.4 入れた場合は、pecl から APC をインストールすると正常に動作しなかったので、trunk 版の APC をインストールして確認しました。<br />
trunk 版 APC のビルド＆インストール方法は、下記URLを参考にしてください。<br />
<a href="http://palma-seo.com/content/installing-apc-dev-on-centos-5-4-64-bit" title="Installing APC from beta/alpha development onto centOS 5.4 64 bit dual core | Drupal SEO and Website Solutions By Peter Christopher of Hilo, Hawaii">Installing APC from beta/alpha development onto centOS 5.4 64 bit dual core</a></p>
<p>PHP 5.3.8 with APC</p>
<pre>$ ab -n 100 -c 10 http://localhost/
Server Software:        nginx
Server Hostname:        localhost
Server Port:            80

Document Path:          /
Document Length:        6182 bytes

Concurrency Level:      10
Time taken for tests:   8.223347 seconds
Complete requests:      100
Failed requests:        85
   (Connect: 0, Length: 85, Exceptions: 0)
Write errors:           0
Total transferred:      639018 bytes
HTML transferred:       618318 bytes
Requests per second:    12.16 [#/sec] (mean)
Time per request:       822.335 [ms] (mean)
Time per request:       82.233 [ms] (mean, across all concurrent requests)
Transfer rate:          75.88 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   1.1      0       6
Processing:   154  792 249.6    797    1954
Waiting:      153  792 249.6    796    1952
Total:        156  793 249.4    797    1956

Percentage of the requests served within a certain time (ms)
  50%    797
  66%    899
  75%    915
  80%    935
  90%   1071
  95%   1163
  98%   1413
  99%   1956
 100%   1956 (longest request)</pre>
<p>PHP 5.4.0 RC4 with APC</p>
<pre>$ ab -n 100 -c 10 http://localhost/
Server Software:        nginx
Server Hostname:        localhost
Server Port:            80

Document Path:          /
Document Length:        6184 bytes

Concurrency Level:      10
Time taken for tests:   4.913902 seconds
Complete requests:      100
Failed requests:        76
   (Connect: 0, Length: 76, Exceptions: 0)
Write errors:           0
Total transferred:      639024 bytes
HTML transferred:       618324 bytes
Requests per second:    20.35 [#/sec] (mean)
Time per request:       491.390 [ms] (mean)
Time per request:       49.139 [ms] (mean, across all concurrent requests)
Transfer rate:          126.99 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       2
Processing:   161  478 129.9    460     862
Waiting:      160  476 129.8    455     862
Total:        161  478 129.9    460     862

Percentage of the requests served within a certain time (ms)
  50%    460
  66%    500
  75%    520
  80%    528
  90%    659
  95%    819
  98%    844
  99%    862
 100%    862 (longest request)</pre>
<p>7割近くも改善されてることが分かると思います。</p>
<p>PHP 5.4 の正式版公開楽しみすなぁ。</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dogmap?a=3or8aH84ipU:ikI5dMR4uDI:s9VDnicYSUo"><img src="http://feeds.feedburner.com/~ff/dogmap?i=3or8aH84ipU:ikI5dMR4uDI:s9VDnicYSUo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=3or8aH84ipU:ikI5dMR4uDI:_ezEcGVEzUU"><img src="http://feeds.feedburner.com/~ff/dogmap?i=3or8aH84ipU:ikI5dMR4uDI:_ezEcGVEzUU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=3or8aH84ipU:ikI5dMR4uDI:2V2C0W9ye1I"><img src="http://feeds.feedburner.com/~ff/dogmap?i=3or8aH84ipU:ikI5dMR4uDI:2V2C0W9ye1I" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=3or8aH84ipU:ikI5dMR4uDI:OAQBO0PjnPA"><img src="http://feeds.feedburner.com/~ff/dogmap?d=OAQBO0PjnPA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=3or8aH84ipU:ikI5dMR4uDI:spdCosxkSQE"><img src="http://feeds.feedburner.com/~ff/dogmap?d=spdCosxkSQE" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dogmap/~4/3or8aH84ipU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dogmap.jp/2012/01/03/wordpress-on-php5-4rc04-apc/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://dogmap.jp/2012/01/03/wordpress-on-php5-4rc04-apc/" />
	<feedburner:origLink>http://dogmap.jp/2012/01/03/wordpress-on-php5-4rc04-apc/</feedburner:origLink></item>
		<item>
		<title>2011年の人気記事トップ10</title>
		<link>http://feedproxy.google.com/~r/dogmap/~3/4J-TCcfNtx0/</link>
		<comments>http://dogmap.jp/2011/12/27/popular-entries-2011/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 07:55:56 +0000</pubDate>
		<dc:creator>をかもと</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[お知らせ]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://dogmap.jp/?p=2668</guid>
		<description>msng さんの記事にインスパイアされてエントリ。 dogmap.jp で、この1年で良く読んでもらった記事をあげてみます。 ページビュー上位10記事だと1番アクセスがあったのは、去年どころか2007年のこの記事になっち &amp;#8230; &lt;a href="http://dogmap.jp/2011/12/27/popular-entries-2011/"&gt;続きを読む &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
			<content:encoded><![CDATA[<p><a href="http://www.msng.info/archives/2011/12/popular-entries-2011.php" title="2011年の人気記事トップ10 - 頭ん中">msng さんの記事</a>にインスパイアされてエントリ。<br />
dogmap.jp で、この1年で良く読んでもらった記事をあげてみます。</p>
<p>ページビュー上位10記事だと1番アクセスがあったのは、去年どころか2007年の<a href="http://dogmap.jp/2007/12/22/jquerylightpopjs/" title="jQuery.lightpop.js : dogmap.jp">この記事</a>になっちゃうんですが、今年書いた記事にしぼって10件ほど。</p>
<p>全体的に WordPress の高速化の話題が多いです。<br />
僕の興味もそっちに向いてたんで、そっち系の記事が多かったからですね。<br />
<span id="more-2668"></span></p>
<ol>
<li>
<h4><a href="http://dogmap.jp/2011/02/08/wordpress-nginx/" title="WordPress サイトに nginx を導入する : dogmap.jp">WordPress サイトに nginx を導入する</a></h4>
<p><a href="http://www.amazon.co.jp/%E3%83%8F%E3%82%A4%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9HTTP%E3%82%B5%E3%83%BC%E3%83%90-Nginx%E5%85%A5%E9%96%80-Clement-Nedelcu/dp/4048702270%3FSubscriptionId%3DAKIAIU4DT5KBIGKR6XJQ%26tag%3Ddogmatismandp-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4048702270" title="Amazon で商品の詳細を確認する"><img src="http://ecx.images-amazon.com/images/I/51xpswg%2BkkL._SL75_.jpg" alt="ハイパフォーマンスHTTPサーバ Nginx入門" align="right" title="ハイパフォーマンスHTTPサーバ Nginx入門" /></a>今年の話題は、バックエンドの WordPress 高速化が多かったすね。<br />
スピーカとして参加した2つの WordCamp でも、その辺話させてもらいました。<br />
Nginx 可愛いよ、Nginx。</li>
<li>
<h4><a href="http://dogmap.jp/2011/05/13/jquery-checkbox/" title="jQuery で checkbox が check されてるか調べる : dogmap.jp">jQuery で checkbox が check されてるか調べる</a></h4>
<p><a href="http://www.amazon.co.jp/jQuery%E3%82%AF%E3%83%83%E3%82%AF%E3%83%96%E3%83%83%E3%82%AF-jQuery-Community-Experts/dp/4873114683%3FSubscriptionId%3DAKIAIU4DT5KBIGKR6XJQ%26tag%3Ddogmatismandp-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4873114683" title="Amazon で商品の詳細を確認する"><img src="http://ecx.images-amazon.com/images/I/51dVUV4c1KL._SL75_.jpg" alt="jQueryクックブック" align="right" title="jQueryクックブック" /></a>意外と、地味なこんな記事が2位にランクイン。<br />
みんな jQuery 好きなのね。
</li>
<li>
<h4><a href="http://dogmap.jp/2011/05/12/vps-security/" title="VPS 借りたら、せめてこれくらいはやっとけというセキュリティ設定 : dogmap.jp">VPS 借りたら、せめてこれくらいはやっとけというセキュリティ設定</a></h4>
<p><a href="http://www.amazon.co.jp/Linux%E3%82%B5%E3%83%BC%E3%83%90%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3-%E3%83%9E%E3%82%A4%E3%82%B1%E3%83%AB%E3%83%BBD-%E3%83%90%E3%82%A6%E3%82%A2%E3%83%BC/dp/4873111498%3FSubscriptionId%3DAKIAIU4DT5KBIGKR6XJQ%26tag%3Ddogmatismandp-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4873111498" title="Amazon で商品の詳細を確認する"><img src="http://ecx.images-amazon.com/images/I/51B46JJ7BYL._SL75_.jpg" alt="Linuxサーバセキュリティ" align="right" title="Linuxサーバセキュリティ" /></a>VPS 安くなったから、ほいほい借りる人が増えてきてるけど、セキュリティにだけは気をつけてね。<br />
ここに書いてあるのは最低限のことです。<br />
一番大事なのは、情報収集だよ。
</li>
<li>
<h4><a href="http://dogmap.jp/2011/03/18/wordpress-relative-url/" title="WordPress で URL をすべて相対 URL にする方法 : dogmap.jp">WordPress で URL をすべて相対 URL にする方法</a></h4>
<p><a href="http://www.amazon.co.jp/10%E6%97%A5%E3%81%A7%E3%81%8A%E3%81%BC%E3%81%88%E3%82%8B-WordPress-%E5%85%A5%E9%96%80%E6%95%99%E5%AE%A4-%EF%BC%BBWordPress-3-x%E5%AF%BE%E5%BF%9C%EF%BC%BD/dp/4798123129%3FSubscriptionId%3DAKIAIU4DT5KBIGKR6XJQ%26tag%3Ddogmatismandp-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4798123129" title="Amazon で商品の詳細を確認する"><img src="http://ecx.images-amazon.com/images/I/61C1NclEl9L._SL75_.jpg" alt="10日でおぼえる WordPress 入門教室 ［WordPress 3.x対応］" align="right" title="10日でおぼえる WordPress 入門教室 ［WordPress 3.x対応］" /></a>手っ取り早くパッと変更する方法です。<br />
ただ ob_start() 使ってるんで、使ってるプラグインによっては上手く動かないかもです。</li>
<li>
<h4><a href="http://dogmap.jp/2011/01/18/facebook-ogp-meta-tag/" title="Facebook の OGP (Open Graph Protocol）用のメタタグを出力する : dogmap.jp">Facebook の OGP (Open Graph Protocol）用のメタタグを出力する</a></h4>
<p><a href="http://www.amazon.co.jp/facebook-%E3%83%99%E3%83%B3%E3%83%BB%E3%83%A1%E3%82%BA%E3%83%AA%E3%83%83%E3%82%AF/dp/4903853853%3FSubscriptionId%3DAKIAIU4DT5KBIGKR6XJQ%26tag%3Ddogmatismandp-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4903853853" title="Amazon で商品の詳細を確認する"><img src="http://ecx.images-amazon.com/images/I/41Eenq33gYL._SL75_.jpg" alt="facebook" align="right" title="facebook" /></a>今年は Facebook とかソーシャルメディア流行りましたね。<br />
SNS も楽しいけど、ブログと連携させるともっと楽しいと思うよ。</li>
<li>
<h4><a href="http://dogmap.jp/2011/07/07/nginx-lsyncd-wordpress-loadbalancer/" title="Nginx + lsyncd で WordPress を負荷分散させる : dogmap.jp">Nginx + lsyncd で WordPress を負荷分散させる</a></h4>
<p>これも Nginx の話題すね。<br />
ここには書いて無いけど、複数台構成の WordPress で、キャッシュやなんかを同期させるのは結構大変です。</li>
<li>
<h4><a href="http://dogmap.jp/2011/11/15/mintty/" title="mintty を使えるようにする : dogmap.jp">mintty を使えるようにする</a></h4>
<p>mintty 良いっすね、Windows のターミナルエミュレータはずっと TeraTerm Pro 使ってたんですが、今ではすっかり mitty 派です。</li>
<li>
<h4><a href="http://dogmap.jp/2011/05/10/nginx-ssl/" title="nginx で ssl 設定をする : dogmap.jp">nginx で ssl 設定をする</a></h4>
<p>おー、またしても Nginx。<br />
Nginx もシェアを伸ばしてきたみたいだし、人気高いすなぁ。</li>
<li>
<h4><a href="http://dogmap.jp/2011/02/04/wordpress-varnish/" title="WordPress サイトに Varnish を導入する : dogmap.jp">WordPress サイトに Varnish を導入する</a></h4>
<p>リバースプロキシなら Varnish もあるで。</li>
<li>
<h4><a href="http://dogmap.jp/2011/02/15/feed-json/" title="WordPress で JSON 形式のデータを吐き出すプラグイン Feed JSON : dogmap.jp">WordPress で JSON 形式のデータを吐き出すプラグイン Feed JSON</a></h4>
<p>今年は、公式プラグインディレクトリに新規プラグインを公開した数は少なかったかもです。<br />
でも、今見たら全部で21になってるのね。<br />
<a href="http://profiles.wordpress.org/users/wokamoto/profile/public/" title="wokamoto | Profile |WP Profiles">wokamoto | Profile |WP Profiles</a></li>
</ol>
<p>今年は、これで記事納めかもです。来年も、よろしくお願いします。</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dogmap?a=4J-TCcfNtx0:RwT09mXCcLk:s9VDnicYSUo"><img src="http://feeds.feedburner.com/~ff/dogmap?i=4J-TCcfNtx0:RwT09mXCcLk:s9VDnicYSUo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=4J-TCcfNtx0:RwT09mXCcLk:_ezEcGVEzUU"><img src="http://feeds.feedburner.com/~ff/dogmap?i=4J-TCcfNtx0:RwT09mXCcLk:_ezEcGVEzUU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=4J-TCcfNtx0:RwT09mXCcLk:2V2C0W9ye1I"><img src="http://feeds.feedburner.com/~ff/dogmap?i=4J-TCcfNtx0:RwT09mXCcLk:2V2C0W9ye1I" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=4J-TCcfNtx0:RwT09mXCcLk:OAQBO0PjnPA"><img src="http://feeds.feedburner.com/~ff/dogmap?d=OAQBO0PjnPA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=4J-TCcfNtx0:RwT09mXCcLk:spdCosxkSQE"><img src="http://feeds.feedburner.com/~ff/dogmap?d=spdCosxkSQE" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dogmap/~4/4J-TCcfNtx0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dogmap.jp/2011/12/27/popular-entries-2011/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://dogmap.jp/2011/12/27/popular-entries-2011/" />
	<feedburner:origLink>http://dogmap.jp/2011/12/27/popular-entries-2011/</feedburner:origLink></item>
		<item>
		<title>公式プラグインページにヘッダ画像を追加</title>
		<link>http://feedproxy.google.com/~r/dogmap/~3/EbX6-lw6CWE/</link>
		<comments>http://dogmap.jp/2011/12/26/plugin-authors-more-control-over-their-plugin-pages/#comments</comments>
		<pubDate>Mon, 26 Dec 2011 11:23:09 +0000</pubDate>
		<dc:creator>をかもと</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Plugin Directory]]></category>

		<guid isPermaLink="false">http://dogmap.jp/?p=2664</guid>
		<description>Been giving a lot of thought to how to give plugin authors more control over their plugin pages. In WordPress  &amp;#8230; &lt;a href="http://dogmap.jp/2011/12/26/plugin-authors-more-control-over-their-plugin-pages/"&gt;続きを読む &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
			<content:encoded><![CDATA[<blockquote><p>Been giving a lot of thought to how to give plugin authors more control over their plugin pages. In WordPress custom headers have been hugely beneficial in people’s ability to make a theme their own without having to be a designer. (And designers can make them really sing.)</p>
<p><cite>via. <a href="http://wpdevel.wordpress.com/2011/12/21/been-giving-a-lot-of-thought-to-how/" title="Been giving a lot of thought to how &laquo; WordPress Development Updates">Been giving a lot of thought to how&#8230; &laquo; WordPress Development Updates</a></cite></p></blockquote>
<p><a href="http://static.dogmap.jp/2011/12/hello-claudia.png" title="hello-claudia" rel="lightbox"><img src="http://static.dogmap.jp/2011/12/hello-claudia-160x116.png" alt="hello-claudia" title="hello-claudia" width="160" height="116" class="alignright size-thumbnail wp-image-2665" border="0" align="right" /></a>最近 WordPress 公式プラグインディレクトリのデザイン変更があったんですが、それに伴ってヘッダ画像を追加することができるようになりました。<br />
ヘッダ画像を追加すると以下のリンクのようになります。<br />
<a href="http://wordpress.org/extend/plugins/hello-claudia/" title="WordPress &gt; Hello Claudia &laquo; WordPress Plugins">WordPress &gt; Hello Claudia &laquo; WordPress Plugins</a><br />
<a href="http://wordpress.org/extend/plugins/head-cleaner/" title="WordPress &gt; Head Cleaner &laquo; WordPress Plugins">WordPress &gt; Head Cleaner &laquo; WordPress Plugins</a><br />
<br />
結構、良い感じですね。<br />
<span id="more-2664"></span></p>
<p>やり方は簡単で</p>
<ol>
<li>プラグイン登録用の subversion ディレクトリのルートに assets というディレクトリを作る</li>
<li>その中に 幅 772px, 高さ 250px で jpeg か、png で画像ファイルを保存する<br />
（画像ファイル名は banner-772&#215;250.(jpg|png) 固定）</li>
<li>コミットする</li>
</ol>
<p>だけです。</p>
<p>15分くらい待てば、WordPress 公式プラグインディレクトリの当該ページに反映されるらしいですよ。<br />
今まで、作ったプラグインにもバナーを着けちゃおう。</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dogmap?a=EbX6-lw6CWE:RCiTi7ATE3E:s9VDnicYSUo"><img src="http://feeds.feedburner.com/~ff/dogmap?i=EbX6-lw6CWE:RCiTi7ATE3E:s9VDnicYSUo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=EbX6-lw6CWE:RCiTi7ATE3E:_ezEcGVEzUU"><img src="http://feeds.feedburner.com/~ff/dogmap?i=EbX6-lw6CWE:RCiTi7ATE3E:_ezEcGVEzUU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=EbX6-lw6CWE:RCiTi7ATE3E:2V2C0W9ye1I"><img src="http://feeds.feedburner.com/~ff/dogmap?i=EbX6-lw6CWE:RCiTi7ATE3E:2V2C0W9ye1I" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=EbX6-lw6CWE:RCiTi7ATE3E:OAQBO0PjnPA"><img src="http://feeds.feedburner.com/~ff/dogmap?d=OAQBO0PjnPA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=EbX6-lw6CWE:RCiTi7ATE3E:spdCosxkSQE"><img src="http://feeds.feedburner.com/~ff/dogmap?d=spdCosxkSQE" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dogmap/~4/EbX6-lw6CWE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dogmap.jp/2011/12/26/plugin-authors-more-control-over-their-plugin-pages/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://dogmap.jp/2011/12/26/plugin-authors-more-control-over-their-plugin-pages/" />
	<feedburner:origLink>http://dogmap.jp/2011/12/26/plugin-authors-more-control-over-their-plugin-pages/</feedburner:origLink></item>
		<item>
		<title>WordPress をとにかく速くする  (WordPress Advent Calendar 2011 20日目)</title>
		<link>http://feedproxy.google.com/~r/dogmap/~3/z0zYmAwjUFA/</link>
		<comments>http://dogmap.jp/2011/12/20/wordpress-advent-calendar-2011-day-20/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 01:00:59 +0000</pubDate>
		<dc:creator>をかもと</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[サイト運営]]></category>
		<category><![CDATA[Advent Calendar]]></category>
		<category><![CDATA[チューニング]]></category>

		<guid isPermaLink="false">http://dogmap.jp/?p=2660</guid>
		<description>12月25日まで毎日ブログをつないでいく WordPress Advent Calendar 2011、20日目担当 @wokamoto です。 @mypacecreator さんに引き継いでいただきました！ドキドキ。  &amp;#8230; &lt;a href="http://dogmap.jp/2011/12/20/wordpress-advent-calendar-2011-day-20/"&gt;続きを読む &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
			<content:encoded><![CDATA[<p>12月25日まで毎日ブログをつないでいく <a href="http://atnd.org/events/22823" title="WordPress Advent Calendar 2011 : ATND">WordPress Advent Calendar 2011</a>、20日目担当 <a href="https://twitter.com/wokamoto" title="wokamoto (wokamoto) は Twitter を利用しています">@wokamoto</a> です。<br />
<a href="https://twitter.com/#!/mypacecreator" title="Kさん（Kei Nomura） (mypacecreator) は Twitter を利用しています">@mypacecreator</a> さんに引き継いでいただきました！ドキドキ。<br />
そんな、@mypacecreator さんのエントリはこちら。<br />
<a href="http://mypacecreator.net/blog/archives/1393" title="3大「WordPressに慣れていない人がやってしまいがちだけど、こっちのほうがいいのになぁ」って思うこと | マイペースクリエイターの覚え書き">3大「WordPressに慣れていない人がやってしまいがちだけど、こっちのほうがいいのになぁ」って思うこと</a></p>
<p>去年は PHP Advent Calendar に参加して「<a href="http://dogmap.jp/2010/12/16/php-advent-calendar-2010-day-16/" title="匿名関数と無名関数 (PHP Advent Calendar 2010 16日目) : dogmap.jp">匿名関数と無名関数 (PHP Advent Calendar 2010 16日目)</a>」って記事を書いたんですが、今年は WordPress Advent Calendar に参加します！</p>
<p>そんなわけで、(一部の)みんな大好き WordPress のハイパフォーマンスチューニングの話題。<br />
このサイト <a href="http://dogmap.jp/" title="dogmap.jp">dogmap.jp</a> で行っている施策について書きますね。<br />
<span id="more-2660"></span></p>
<h3>バックエンドの高速化</h3>
<p><a href="http://nginx.org/" title="nginx"><img src="http://static.dogmap.jp/2011/02/nginx-logo-160x41.png" alt="nginx" title="nginx" width="160" height="41" class="alignright size-thumbnail wp-image-2450" border="0" align="right" /></a>このサイトは Amazon EC2 東京リージョンのマイクロインスタンス1台で稼動しています。<br />
使用できるメモリ量が613MBとやや少なめなため、Web サーバは軽量高速で定評のある <a href="http://nginx.org/" title="nginx news">Nginx</a> を採用しています。<br />
<br />
Nginx は Apache のようにリクエストの処理をスレッドで行わず、非同期のアーキテクチャーを用いるイベントループモデルを採用しています。<br />
そのため、多数のリクエストがきた場合に実行スタックをコピーする必要があるスレッドモデルのサーバと違い、1プロセスでリクエストを処理できるため、メモリ消費量が極端に少なくてすむという利点があります。<br />
なんで Nginx って、そんなに速いの？ってのは、以下の記事を読むとわかり易いです。<br />
<a href="http://sakuratan.biz/archives/4582" title="さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法（ベンチマーク付き） | さくらたんどっとびーず">さくらVPSとnginxリバースプロクシで最速WordPressブログを作る方法（ベンチマーク付き） | さくらたんどっとびーず</a></p>
<p>このサイトでは WordPress が動的に生成するコンテンツについては Nginx のリバースプロキシキャッシュを利用して配信しています。<br />
そこで問題になってくるのが、新規投稿時にキャッシュファイルを生成しなおすことなんですが、それには <a href="http://wordpress.org/extend/plugins/nginx-proxy-cache-purge/" title="WordPress &gt; Nginx Proxy Cache Purge « WordPress Plugins">Nginx Proxy Cache Purge</a> プラグインを使っています。<br />
他にも、さらに高機能な <a href="http://wordpress.org/extend/plugins/nginx-manager/" title="WordPress &gt; NGINX Manager « WordPress Plugins">NGINX Manager</a> って、プラグインもありますね。<br />
こっちは、キャッシュパージしたログを管理画面から見ることができます。<br />
Nginx に ngx_cache_purge モジュールを組み込んでおいて、これらのプラグインを使えば安心ですね。</p>
<p><img src="http://static.dogmap.jp/2011/12/php-med-trans.png" alt="PHP" title="PHP" width="95" height="51" class="alignright size-full wp-image-2663" border="0" align="right" />PHP は <a href="http://sourceforge.net/projects/eaccelerator/" title="eAccelerator | Free Development software downloads at SourceForge.net">eAccelerator</a> を使って、中間コードをキャッシュすることにより、高速化させています。<br />
PHP アクセラレータとしては、他にも <a href="http://pecl.php.net/package/APC" title="PECL :: Package :: APC">APC</a> も有名ですが、僕は好みでこっちを使ってます。<br />
eAccelerator 可愛いよ、eAccelerator。</p>
<p><a href="http://www.percona.com/" title="percona"><img src="http://static.dogmap.jp/2011/11/percona-160x72.png" alt="percona" title="percona" width="160" height="72" class="alignright size-thumbnail wp-image-2646" border="0" align="right" /></a>MySQL サーバとしては <a href="http://www.percona.com/" title="Percona - Experts in MySQL, InnoDB, and LAMP Performance">Percona</a> を使ってます。<br />
Percona は MySQL の派生プロダクトで、公式ビルドには含まれていない人気のあるパッチを追加したものです。<br />
高負荷時の InnoDB のパフォーマンスを向上してくれるパッチなんかが含まれています。<br />
WordPress が使用しているテーブルのデータベースエンジンは InnoDB に変更済み。<br />
関連記事表示に <a href="http://wordpress.org/extend/plugins/yet-another-related-posts-plugin/" title="WordPress &gt; Yet Another Related Posts Plugin « WordPress Plugins">Yet Another Related Posts Plugin</a> (YARPP) を使用してる場合は、wp_posts だけは MyISAM を使いましょう。<br />
# YARPP を導入すると post_title と post_content に FULLTEXT インデックスが張られちゃうので、InnoDB にできないため。<br />
あと <a href="http://mysqltuner.pl/mysqltuner.pl" title="mysqltuner.pl">mysqltuner.pl</a> を使って、パラメータチューニングしたりしてますね。</p>
<p>さらにオブジェクトキャッシュ(Object Cache)のバックエンドとして、<a href="http://wordpress.org/extend/plugins/memcached/" title="WordPress &gt; Memcached Object Cache « WordPress Plugins">Memcached Object Cache</a> も採用しています。<br />
オブジェクトキャッシュとは、生成に負荷のかかる複雑なデータベースクエリなどをキャッシュするための仕組みですが、通常1セッション中でしか有効になりません。<br />
ただし Memcached Object Cache などのドロップインを使用することで、このオブジェクトキャッシュされたデータを memcached 上に保存しておき、永続的に使うことができます。<br />
これにより、大幅に MySQL サーバへのクエリ発行数を低減する事ができ、パフォーマンスを向上させることが可能なのです。素晴らしい！<br />
オブジェクトキャッシュされたデータを削除したりするには、<a href="http://wordpress.org/extend/plugins/wp-cache-inspect/" title="WordPress &gt; WP Cache Inspect « WordPress Plugins">WP Cache Inspect</a> ってプラグインが便利です。<br />
現在、キャッシュされてるデータの統計を表示したりもできます。</p>
<p>「ドロップイン」って何？って思った方は、こちらを参照してください。ドロップインは特殊なプラグインのことですが、色々デキまっせ。<br />
<a href="http://dogmap.jp/2010/06/03/wp-30-dropins/" title="WordPress 3.0 プラグイン管理画面の「追加機能」 : dogmap.jp">WordPress 3.0 プラグイン管理画面の「追加機能」</a></p>
<p>併せて、翻訳ファイル ja.mo の読み込みをオブジェクトキャッシュにキャッシュするプラグイン <a href="http://wordpress.org/extend/plugins/mo-cache/" title="WordPress &gt; MO Cache « WordPress Plugins">MO Cache</a> も利用しています。<br />
MO Cache については WordPress Advent Calendar 2011 の10日目で <a href="https://twitter.com/m4i" title="m4i (m4i) は Twitter を利用しています">@m4i</a> さんが、詳しく解説してくれてますね。<br />
<a href="http://m4i.hatenablog.com/entry/2011/12/10/000407" title="WordPress をたった3分で3倍高速化する方法 [MO Cache] - カワイイはつくれる">WordPress をたった3分で3倍高速化する方法 [MO Cache] &#8211; カワイイはつくれる</a><br />
同じコンセプトのプラグインで、<a href="https://twitter.com/jim0912" title="hitoshi omagari (jim0912) は Twitter を利用しています">@jim0912</a> さんがリリースしている <a href="http://www.warna.info/archives/1447/" title="WordPressの実行時間を短縮させる「001 Prime Strategy Translate Accelerator」 | Simple Colors">001 Prime Strategy Translate Accelerator</a> ってのも有るんですが、こっちはキャッシュデータをファイルか APC の共有メモリに保存するタイプです。<br />
僕とこでは APC 使ってないので、Memcached Object Cache にキャッシュデータを置いておける MO Cache を使わせてもらいました。</p>
<h3>フロントエンドの高速化</h3>
<p>フロントエンドの高速化は、自作のプラグイン <a href="http://wordpress.org/extend/plugins/head-cleaner/" title="WordPress &gt; Head Cleaner « WordPress Plugins">Head Cleaner</a> を利用しています。<br />
このプラグインでは、以下のことができます。</p>
<ul>
<li>&lt;head&gt; 内の要素の並べ替え</li>
<li>JavaScript, CSS のミニファイと結合</li>
<li>HTML ソース全体から、コメント・改行・連続した空白を消去(パラノイアモード)</li>
<li>OGP タグの挿入</li>
</ul>
<p>当サイトのソースを見てもらえばわかるのですが、とんでもないことになっていると思います。</p>
<p>あわせて</p>
<ul>
<li>テキストファイルの gzip 圧縮転送</li>
<li>静的ファイル(css, js, 画像&#8230;)に有効期限を設定 (Expired ヘッダを付加)</li>
</ul>
<p>等も行っています。</p>
<p><a href="https://www.cloudflare.com/" title="CloudFlare"><img src="http://static.dogmap.jp/2011/12/cloudflare-160x105.png" alt="CloudFlare" title="CloudFlare" width="160" height="105" class="alignright size-thumbnail wp-image-2661" border="0" align="right" /></a>また、静的ファイルについてはドメインを static.dogmap.jp に設定し、さらにそれを無料の CDN <a href="https://www.cloudflare.com/" title="Home | CloudFlare | The web performance &amp; security company">CloudFlare</a> から配送するように設定してあります。<br />
CloudFlare を導入するためにはドメインの DNS サーバー情報を書き換える必要があるため、「サイトを運営するドメインの管理者であること」が必須条件になりますが、WordPress を独自ドメインで運用してる人なら問題無いですよね？<br />
導入については、以下の記事が参考になるでしょう。<br />
<a href="http://blog.sinap.jp/2011/06/cdn-cloudflare.html" title="今すぐ使える！CDN ~はじめてのCloudFlare（クラウドフレア）導入~ - SINAPlog">今すぐ使える！CDN ~はじめてのCloudFlare（クラウドフレア）導入~ &#8211; SINAPlog</a></p>
<p>アクセス数そんな多くないブログなのに、色々頑張ってるわけですね。</p>
<p>明日は <a href="https://twitter.com/naonyan_taicho" title="隊長＼(^o^)／ (naonyan_taicho) は Twitter を利用しています">@naonyan_taicho</a> さんです、よろしく！</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dogmap?a=z0zYmAwjUFA:O6wusTKwiSI:s9VDnicYSUo"><img src="http://feeds.feedburner.com/~ff/dogmap?i=z0zYmAwjUFA:O6wusTKwiSI:s9VDnicYSUo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=z0zYmAwjUFA:O6wusTKwiSI:_ezEcGVEzUU"><img src="http://feeds.feedburner.com/~ff/dogmap?i=z0zYmAwjUFA:O6wusTKwiSI:_ezEcGVEzUU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=z0zYmAwjUFA:O6wusTKwiSI:2V2C0W9ye1I"><img src="http://feeds.feedburner.com/~ff/dogmap?i=z0zYmAwjUFA:O6wusTKwiSI:2V2C0W9ye1I" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=z0zYmAwjUFA:O6wusTKwiSI:OAQBO0PjnPA"><img src="http://feeds.feedburner.com/~ff/dogmap?d=OAQBO0PjnPA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=z0zYmAwjUFA:O6wusTKwiSI:spdCosxkSQE"><img src="http://feeds.feedburner.com/~ff/dogmap?d=spdCosxkSQE" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dogmap/~4/z0zYmAwjUFA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dogmap.jp/2011/12/20/wordpress-advent-calendar-2011-day-20/feed/</wfw:commentRss>
		<slash:comments>51</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://dogmap.jp/2011/12/20/wordpress-advent-calendar-2011-day-20/" />
	<feedburner:origLink>http://dogmap.jp/2011/12/20/wordpress-advent-calendar-2011-day-20/</feedburner:origLink></item>
		<item>
		<title>Amazon EC2 マイクロインスタンスに移行</title>
		<link>http://feedproxy.google.com/~r/dogmap/~3/VE63uLKXas0/</link>
		<comments>http://dogmap.jp/2011/12/13/amazon-ec2-micro-instance/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 05:56:59 +0000</pubDate>
		<dc:creator>をかもと</dc:creator>
				<category><![CDATA[サイト運営]]></category>
		<category><![CDATA[Amazon EC2]]></category>

		<guid isPermaLink="false">http://dogmap.jp/?p=2659</guid>
		<description>仕事で Amazon EC2 使うことが増えてきたこともあって、このサイトのサーバも Amazon EC2 のマイクロインスタンスに移行しました。 移行作業自体は、簡単。 新サーバに Nginx, PHP, MySQL  &amp;#8230; &lt;a href="http://dogmap.jp/2011/12/13/amazon-ec2-micro-instance/"&gt;続きを読む &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
			<content:encoded><![CDATA[<p>仕事で Amazon EC2 使うことが増えてきたこともあって、このサイトのサーバも Amazon EC2 のマイクロインスタンスに移行しました。<br />
移行作業自体は、簡単。</p>
<ul>
<li>新サーバに Nginx, PHP, MySQL をインストール</li>
<li>現行サーバから rsync で WordPress フォルダの内容を全て新サーバにコピー</li>
<li>現行サーバの MySQL でテーブルをロックしてから /var/lib/mysql/ 以下を全部 tar で固めて、新サーバにコピー</li>
<li>/etc/my.cnf, /etc/php.ini, /etc/nginx/ 等の設定ファイルをコピー</li>
<li>ローカルPCの hosts 変更して確認取れたら DNS 変更</li>
</ul>
<p>の5ステップです。<br />
以下、メモがてら作業ログを書いておきます。<br />
VPS &#8211; VPS 間での WordPress のお引越しの参考になれば幸いです。<span id="more-2659"></span><br />
<h3>新サーバに Nginx, PHP, MySQL をインストール</h3>
<p>これは、今までも当ブログで何度か書いてますね。</p>
<ul>
<li><a href="http://dogmap.jp/2011/05/12/vps-security/" title="VPS 借りたら、せめてこれくらいはやっとけというセキュリティ設定 : dogmap.jp">VPS 借りたら、せめてこれくらいはやっとけというセキュリティ設定</a></li>
<li><a href="http://dogmap.jp/2010/12/11/lighttpd-php-5-3-mysql-5-1/" title="さくらVPSに lighttpd + PHP 5.3 + MySQL 5.1 をインストール : dogmap.jp">さくらVPSに lighttpd + PHP 5.3 + MySQL 5.1 をインストール</a></li>
<li><a href="http://dogmap.jp/2011/11/22/percona-mysql/" title="Percona MySQL をさくらのVPSで使う : dogmap.jp">Percona MySQL をさくらのVPSで使う</a></li>
<li><a href="http://dogmap.jp/2011/04/15/nginx-1-0-0-available/" title="nginx 1.0.0 が出てます : dogmap.jp">nginx 1.0.0 が出てます</a></li>
<li><a href="http://dogmap.jp/2011/11/15/ngx_cache_purge/" title="Nginx に cache purge モジュールを追加する : dogmap.jp">Nginx に cache purge モジュールを追加する</a></li>
</ul>
<p>今回は、素の MySQL ではなく <a href="http://www.percona.com/software/" title="Software - Percona">Percona MySQL</a> を使ってみました。</p>
<h3>現行サーバから rsync で WordPress フォルダの内容を全て新サーバにコピー</h3>
<p>rsync を使えば、WordPress のソースを一括でコピーするのは簡単です。<br />
まずは、以下を参考にして新サーバに ~/.ssh/config を用意しておきます。<br />
<a href="http://dogmap.jp/2011/10/27/ssh_config/" title="ssh 接続を簡単にする ~/.ssh/config : dogmap.jp">ssh 接続を簡単にする ~/.ssh/config</a></p>
<p>そんで rsync で WordPress の入ってるフォルダごとファイル同期。<br />
WordPress は /var/www/vhosts/ って所に入れてるんで、新サーバで以下のようにして同期します。</p>
<pre>$ rsync -avz --delete -e ssh oldserver:/var/www/vhosts/ /var/www/vhosts/</pre>
<h3>現行サーバの MySQL でテーブルをロックしてから /var/lib/mysql/ 以下を全部 tar で固めて、新サーバにコピー</h3>
<p>まずは、現行サーバでの作業。<br />
/var/lib/mysql/ 以下をコピーするに当たって、作業中に DB に変更が加えられないようにロックします。</p>
<pre>$ mysql -u root -p
Enter password:
　：
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.05 sec)

mysql> quit
Bye</pre>
<p>/var/lib/mysql/ 以下を tar で固めます。</p>
<pre>$ cd /var/lib/mysql/
$ sudo tar cpfz /tmp/mysql-snapshot.tar.gz ./
tar: ./mysql.sock: ソケットは無視します</pre>
<p>テーブルをアンロックしておきます。</p>
<pre>$ mysql -u root -p
Enter password:
　：
mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye</pre>
<p>次に新サーバでの作業。<br />
scp で /tmp/mysql-snapshot.tar.gz を取ってきます。</p>
<pre>$ scp oldserver:/tmp/mysql-snapshot.tar.gz /tmp/
mysql-snapshot.tar.gz                                             100%   19MB   1.6MB/s   00:12</pre>
<p>MySQL が動いているなら停止してから、mysql-snapshot.tar.gz を /var/lib/mysql/ に展開。<br />
バイナリログやエラーログは、必要ないので削除します。</p>
<pre>$ sudo /sbin/service mysqld stop
mysqld を停止中:                                           [  OK  ]
$ cd /var/lib/mysql/
$ sudo rm -fr *
$ sudo tar zxvf /tmp/mysql-snapshot.tar.gz
$ sudo rm -f mysqld-bin.*
$ rm /tmp/mysql-snapshot.tar.gz</pre>
<p>MySQL を起動後、アンロックします。</p>
<pre>$ sudo /sbin/service mysqld start
mysqld を起動中:                                           [  OK  ]
$ mysql -u root -p
Enter password:
　：
mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye</pre>
<p>これで MySQL のデータ移行は終了。<br />
一応 mysql コマンドとか、phpMyAdmin とかで中身を確認しておいてください。</p>
<h3>/etc/my.cnf, /etc/php.ini, /etc/nginx/ 等の設定ファイルをコピー</h3>
<p>scp とか rsync とか好きな方法で、現行サーバからコピーしてくれば良いよ。<br />
設定ファイルコピー後に設定を反映させるために mysqld とか nginx とか php-fpm とか httpd とか、再起動するのを忘れずに。</p>
<h3>ローカルPCの hosts 変更して確認取れたら DNS 変更</h3>
<p>Mac の hosts は /private/etc/hosts にあるので、ターミナルで</p>
<pre>$ sudo vi /private/etc/hosts</pre>
<p><cite>via. <a href="http://www.msng.info/archives/2008/12/mac_hosts.php" title="Mac で hosts を変更する方法 - 頭ん中">Mac で hosts を変更する方法 &#8211; 頭ん中</a></cite></p>
<p>linux なら /etc/hosts 。<br />
Windows XP なら c:\windows\system32\drivers\etc\hosts 。Vista と 7 は、知らん。</p>
<p>例えば、新サーバの IP アドレスが 10.1.2.30 で、サイトが blog.example.com なら、以下を追加しましょう。</p>
<pre>10.1.2.30  blog.example.com</pre>
<p>変更できたらブラウザで動作確認しましょう。</p>
<h3>まとめ</h3>
<p>別に Amazon EC2 に限った話ではないですね。</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dogmap?a=VE63uLKXas0:9BE7iwCpH_E:s9VDnicYSUo"><img src="http://feeds.feedburner.com/~ff/dogmap?i=VE63uLKXas0:9BE7iwCpH_E:s9VDnicYSUo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=VE63uLKXas0:9BE7iwCpH_E:_ezEcGVEzUU"><img src="http://feeds.feedburner.com/~ff/dogmap?i=VE63uLKXas0:9BE7iwCpH_E:_ezEcGVEzUU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=VE63uLKXas0:9BE7iwCpH_E:2V2C0W9ye1I"><img src="http://feeds.feedburner.com/~ff/dogmap?i=VE63uLKXas0:9BE7iwCpH_E:2V2C0W9ye1I" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=VE63uLKXas0:9BE7iwCpH_E:OAQBO0PjnPA"><img src="http://feeds.feedburner.com/~ff/dogmap?d=OAQBO0PjnPA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=VE63uLKXas0:9BE7iwCpH_E:spdCosxkSQE"><img src="http://feeds.feedburner.com/~ff/dogmap?d=spdCosxkSQE" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dogmap/~4/VE63uLKXas0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dogmap.jp/2011/12/13/amazon-ec2-micro-instance/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://dogmap.jp/2011/12/13/amazon-ec2-micro-instance/" />
	<feedburner:origLink>http://dogmap.jp/2011/12/13/amazon-ec2-micro-instance/</feedburner:origLink></item>
		<item>
		<title>WordCamp Tokyo 2011 に行ってきました</title>
		<link>http://feedproxy.google.com/~r/dogmap/~3/lzj3XYqKguk/</link>
		<comments>http://dogmap.jp/2011/11/27/wordcamp-tokyo-2011/#comments</comments>
		<pubDate>Sun, 27 Nov 2011 14:59:33 +0000</pubDate>
		<dc:creator>をかもと</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[旅]]></category>
		<category><![CDATA[身辺雑記]]></category>
		<category><![CDATA[WordCamp]]></category>
		<category><![CDATA[WordCamp Tokyo]]></category>

		<guid isPermaLink="false">http://dogmap.jp/?p=2652</guid>
		<description>2011年11月28日に楽天タワーで行われた WordCamp Tokyo 2011 に行ってきました。 今回は、大曲さんと一緒にテクニカルトラックの担当をやらせていただきました。 あと、テクニカルトラックで、「Word &amp;#8230; &lt;a href="http://dogmap.jp/2011/11/27/wordcamp-tokyo-2011/"&gt;続きを読む &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
			<content:encoded><![CDATA[<p><a href="http://static.dogmap.jp/2011/11/wordcamptokyo.jpg" title="WordCamp Tokyo 2011" rel="lightbox"><img src="http://static.dogmap.jp/2011/11/wordcamptokyo-160x120.jpg" alt="WordCamp Tokyo 2011" title="WordCamp Tokyo 2011" width="160" height="120" class="alignright size-thumbnail wp-image-2653" border="0" align="right" /></a>2011年11月28日に楽天タワーで行われた <a href="http://2011.tokyo.wordcamp.org/" title="WordCamp Tokyo 2011">WordCamp Tokyo 2011</a> に行ってきました。<br />
今回は、<a href="http://www.warna.info/">大曲さん</a>と一緒にテクニカルトラックの担当をやらせていただきました。<br />
あと、テクニカルトラックで、「<a href="http://2011.tokyo.wordcamp.org/2011/11/21/speaker_wokamoto/">WordPress ハイパフォーマンスチューニング Reloaded</a>」ってセッションやったり、Twitter 担当とかやったり。<br />
今回、まだ公式発表されていないですが 800 人くらいの来場者があったようです。スゴいですね。</p>
<p>今回のセッションの資料は、以下で公開してます。<a href="http://dogmap.jp/2011/09/11/word-camp-kobe-2011/">神戸の時</a>と、そんなには変わりません。<br />
<a href="http://dogmap.jp/wctokyo2011/">WordPress ハイパフォーマンス チューニング Reloaded</a><br />
※ カーソルキー左右で、スライド送りできます。(deck.js を使用して、スライド作りました。)<br />
<span id="more-2652"></span></p>
<p><a href="http://plasticdreams.org/">あかさん</a>とか、<a href="http://another.maple4ever.net/">ひろまさ</a>さんとか会えたり、<a href="http://draftbeer.jp/">タカバシさん</a>にプリンセスホールドしてもらったり。<br />
楽しかったっす。</p>
<p>セッションでもちらっと紹介したんですが、現在こもりさんと一緒に「ハイパフォーマンス WordPress サイト」みたいな感じの本を書いてます。<br />
予定では年明けに出るはず&#8230;頑張ります。</p>
<a href="http://maps.google.com/maps?f=q&amp;hl=ja&amp;geocode=&amp;q=35.60795593232208,139.7500178217888&amp;ie=UTF8&amp;ll=35.60795593232208,139.7500178217888&amp;t=h&amp;z=17&amp;t=n&amp;maptype=G_NORMAL_MAP" title="東京都品川区東品川４丁目１３"><img src="http://maps.google.com/staticmap?markers=35.60795593232208,139.7500178217888,red&amp;zoom=17&amp;size=400x200&amp;key=ABQIAAAAdkdXbSzAaW3Z-fZ0VLiA-BTNLsTCkgAHG6R1rGrc2jhIZmfrTxQ-ueNTQFYw3AGOgb5OImln4sk1QA&amp;hl=ja" alt="東京都品川区東品川４丁目１３" title="東京都品川区東品川４丁目１３" /></a>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dogmap?a=lzj3XYqKguk:HVSJemSh97U:s9VDnicYSUo"><img src="http://feeds.feedburner.com/~ff/dogmap?i=lzj3XYqKguk:HVSJemSh97U:s9VDnicYSUo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=lzj3XYqKguk:HVSJemSh97U:_ezEcGVEzUU"><img src="http://feeds.feedburner.com/~ff/dogmap?i=lzj3XYqKguk:HVSJemSh97U:_ezEcGVEzUU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=lzj3XYqKguk:HVSJemSh97U:2V2C0W9ye1I"><img src="http://feeds.feedburner.com/~ff/dogmap?i=lzj3XYqKguk:HVSJemSh97U:2V2C0W9ye1I" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=lzj3XYqKguk:HVSJemSh97U:OAQBO0PjnPA"><img src="http://feeds.feedburner.com/~ff/dogmap?d=OAQBO0PjnPA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=lzj3XYqKguk:HVSJemSh97U:spdCosxkSQE"><img src="http://feeds.feedburner.com/~ff/dogmap?d=spdCosxkSQE" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dogmap/~4/lzj3XYqKguk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dogmap.jp/2011/11/27/wordcamp-tokyo-2011/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://dogmap.jp/2011/11/27/wordcamp-tokyo-2011/" />
	<feedburner:origLink>http://dogmap.jp/2011/11/27/wordcamp-tokyo-2011/</feedburner:origLink></item>
		<item>
		<title>WordCamp Tokyo 2011 でしゃべってきます</title>
		<link>http://feedproxy.google.com/~r/dogmap/~3/iUBdqzyU7_8/</link>
		<comments>http://dogmap.jp/2011/11/24/to-speak-at-wordcamp-tokyo-2011/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 00:41:14 +0000</pubDate>
		<dc:creator>をかもと</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[WordCamp]]></category>
		<category><![CDATA[WordCamp Tokyo]]></category>

		<guid isPermaLink="false">http://dogmap.jp/?p=2649</guid>
		<description>そういえば、すっかり書くのを忘れてたんですが、11月27日(日)に、品川シーサイド楽天タワー2号館で開催される WordCamp Tokyo 2011 で、なんかしゃべってきます。 すいません、中身は WordCamp  &amp;#8230; &lt;a href="http://dogmap.jp/2011/11/24/to-speak-at-wordcamp-tokyo-2011/"&gt;続きを読む &lt;span class="meta-nav"&gt;&amp;#8594;&lt;/span&gt;&lt;/a&gt;</description>
			<content:encoded><![CDATA[<p><a href="http://2011.tokyo.wordcamp.org/2011/11/21/speaker_wokamoto/" title="スピーカー｜wokamoto | WordCamp Tokyo 2011"><img src="http://static.dogmap.jp/2011/11/wctokyo-speaker.png" alt="wctokyo-speaker" title="wctokyo-speaker" width="180" height="150" class="alignright size-full wp-image-2650" border="0" align="right" /></a>そういえば、すっかり書くのを忘れてたんですが、11月27日(日)に、品川シーサイド楽天タワー2号館で開催される <a href="http://2011.tokyo.wordcamp.org/" title="WordCamp Tokyo 2011 | 2011年11月27日(日) 品川シーサイド 楽天タワー2号館">WordCamp Tokyo 2011</a> で、<a href="http://2011.tokyo.wordcamp.org/2011/11/21/speaker_wokamoto/" title="スピーカー｜wokamoto | WordCamp Tokyo 2011">なんかしゃべってきます</a>。<br />
すいません、中身は <a href="http://dogmap.jp/2011/09/07/to-speak-at-wordcamp-kobe-2011/" title="WordCamp KOBE 2011 でしゃべってきます : dogmap.jp">WordCamp KOBE 2011</a> の時と同じです。<br />
2ヶ月くらいで同じテーマだと、違うことしゃべれと言われても厳しいすなぁ。申し訳ない。<br />
# 私事ですが、あれやこれやで立て込んでまして&#8230;ゴニョゴニョ。<br />
# 立て込んでる理由は、そのうち公表します。<br />
<br />
今回の WordCamp は、なんかチケット登録数が1,200くらいまで、いってしまったとか。<br />
会場が楽天タワーだとか、エライことになってます。<br />
まぁ、<a href="http://2011.tokyo.wordcamp.org/timetable/" title="タイムテーブル | WordCamp Tokyo 2011">タイムテーブル</a>見てもらえばわかりますが、僕のセッションは人気のありそうなセッションの裏番組なんで気負わずにいけます。<br />
他のセッションは満員で立ち見場所も無い！とか言う哀しい状況に陥った人は、休憩がてら聞きに来て下さい！</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/dogmap?a=iUBdqzyU7_8:4KuDfEf9SA8:s9VDnicYSUo"><img src="http://feeds.feedburner.com/~ff/dogmap?i=iUBdqzyU7_8:4KuDfEf9SA8:s9VDnicYSUo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=iUBdqzyU7_8:4KuDfEf9SA8:_ezEcGVEzUU"><img src="http://feeds.feedburner.com/~ff/dogmap?i=iUBdqzyU7_8:4KuDfEf9SA8:_ezEcGVEzUU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=iUBdqzyU7_8:4KuDfEf9SA8:2V2C0W9ye1I"><img src="http://feeds.feedburner.com/~ff/dogmap?i=iUBdqzyU7_8:4KuDfEf9SA8:2V2C0W9ye1I" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=iUBdqzyU7_8:4KuDfEf9SA8:OAQBO0PjnPA"><img src="http://feeds.feedburner.com/~ff/dogmap?d=OAQBO0PjnPA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/dogmap?a=iUBdqzyU7_8:4KuDfEf9SA8:spdCosxkSQE"><img src="http://feeds.feedburner.com/~ff/dogmap?d=spdCosxkSQE" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/dogmap/~4/iUBdqzyU7_8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://dogmap.jp/2011/11/24/to-speak-at-wordcamp-tokyo-2011/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://dogmap.jp/2011/11/24/to-speak-at-wordcamp-tokyo-2011/" />
	<feedburner:origLink>http://dogmap.jp/2011/11/24/to-speak-at-wordcamp-tokyo-2011/</feedburner:origLink></item>
	</channel>
</rss>

