<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>spanstyle::monolog</title>
    <link rel="alternate" type="text/html" href="http://monolog.spanstyle.com/" />
    <link rel="self" type="application/atom+xml" href="http://monolog.spanstyle.com/atom.xml" />
    <id>tag:monolog.spanstyle.com,2005-04-27://1</id>
    <updated>2010-06-25T09:04:35Z</updated>
    <subtitle>恵比寿駅近くにIT関連の会社を作ってIT関連の仕事をはじめた人のブログ</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.22-ja</generator>

<entry>
    <title>【注意】Mooter フリー検索が改ざんされています</title>
    <link rel="alternate" type="text/html" href="http://monolog.spanstyle.com/2009/12/mooter.html" />
    <id>tag:monolog.spanstyle.com,2009://1.449</id>

    <published>2009-12-25T19:43:54Z</published>
    <updated>2010-06-25T09:04:35Z</updated>

    <summary>追記：下記の改ざんは、2009/12/30の時点で解消されました  Twitte...</summary>
    <author>
        <name>ishii</name>
        <uri>http://monolog.spanstyle.com/</uri>
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://monolog.spanstyle.com/">
        <![CDATA[<p><strong>追記：下記の改ざんは、2009/12/30の時点で解消されました</strong></p>

<p><a href="http://twitter.com/ishiiyoshinori/status/7040217737">Twitterにも書きました</a>が、大事なことなのでブログにも書いておきます。</p>

<p>現在、Mooterというサイトで提供されているブログパーツ「Mooterフリー検索」に含まれるJavascriptのコードが改ざんされており、このコードを含むサイトを<strong>閲覧するだけで</strong>Adobe Reader および Adobe Acrobatのゼロデイ攻撃を引き起こすPDFファイルをダウンロードしてしまいます。</p>

<p>配布ページは以下URLになりますが、この配布ページ自体にも該当コードが含まれているため、安易にアクセスすると非常に危険です。</p>

<p>ttp://tools.mooter.co.jp/searchbox.html</p>

<p>これは以下サイトで解説されているものと同じと思われます。対策方法も記載されているので、一読の上、対応をお願いします。</p>

<p><a href="http://www.so-net.ne.jp/security/news/view.cgi?type=2&no=2106">新手の正規サイト改ざんでAdobe Readerのゼロデイ攻撃～今すぐ対策を</a></p>

<p>ちなみに僕はまんまと感染しました。明日はOS入れ替え作業です。。。</p>]]>
        
    </content>
</entry>

<entry>
    <title>symfonyでカスタムバリデータを使ってフィルタを実装する</title>
    <link rel="alternate" type="text/html" href="http://monolog.spanstyle.com/2009/12/symfony-filter.html" />
    <id>tag:monolog.spanstyle.com,2009://1.448</id>

    <published>2009-12-02T07:19:34Z</published>
    <updated>2009-12-02T08:52:17Z</updated>

    <summary>  昨日、ついにsymfonyの1.4がリリースされましたね。1.0同様、3年間...</summary>
    <author>
        <name>ishii</name>
        <uri>http://monolog.spanstyle.com/</uri>
    </author>
    
        <category term="PHP" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sfform" label="sfForm" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sfvalidatorstringkana" label="sfValidatorStringKana" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="symfony" label="symfony" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://monolog.spanstyle.com/">
        <![CDATA[<p><img alt="symfony the world" src="http://monolog.spanstyle.com/2009/12/02/symfony.png" width="450" height="170" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;border:1px solid #ccc" /></p>

<p>昨日、ついに<a href="http://www.symfony-project.org" target="_blank">symfony</a>の1.4がリリースされましたね。1.0同様、3年間の Long Term Support ということで、今後しばらくは1.4で落ち着くのかなぁ。。。と感じてるところです。</p>

<p>さて、symfonyでフォーム（sfForm）を作っていて常々感じるのは、POSTされたデータをそのままバリデートするのではなく、せめて<strong>mb_convert_kanaでフィルタ（正規化）した後にバリデートしたい</strong>、ということです。PEARのHTML_QuickFormでいうところのapplyFilter()の機能ですね。</p>

<p>ただしsfFormには上記のようなフィルタ機能がありません。そのため、私は既存のsfValidatorStringを継承して以下のカスタムバリデータを使ってます。symfony 1.2 で動作確認していますが、コードを見る限りでは1.3, 1.4でも問題なく使えるはずです。</p>]]>
        <![CDATA[<h2>サンプルコード</h2>
<h3>sfValidatorStringKana.class.php</h3>
<pre name="code" class="php">
&lt;?php
 
/*
 * This file is part of the symfony package.
 * (c) Fabien Potencier &lt;fabien.potencier@symfony-project.com&gt;
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
 
/**
 * sfValidatorStringKana validates a multibyte string.
 *
 * @package    symfony
 * @subpackage validator
 * @author     Yoshinori Ishii &lt;ishii.yoshinori@itra.jp&gt;
 * @version    SVN: $Id$
 */
class sfValidatorStringKana extends sfValidatorString
{
  /**
   * Configures the current validator.
   *
   * Available options:
   *
   *  * convert_option: Convert option for mb_convert_kana()
   *
   * @param array $options   An array of options
   * @param array $messages  An array of error messages
   *
   * @see sfValidatorString
   */
  protected function configure($options = array(), $messages = array())
  {
    parent::configure($options, $messages);
 
    $this-&gt;setOption('trim', true);
    $this-&gt;addOption('convert_option', 'asKV');
  }
 
  /**
   * @see sfValidatorBase
   */
  public function clean($value)
  {
    if ($this-&gt;hasOption('convert_option')) {
        $value = mb_convert_kana($value, $this-&gt;getOption('convert_option'), $this-&gt;getCharset());
    }
 
    return parent::clean($value);
  }
}
</pre>

<p>上記のコードをsfValidatorStringKana.class.phpとしてlib/以下にファイルを配置すればインストールは完了です。</p>

<p>フォームクラスからの呼び出し方は以下のサンプルの通り、sfValidatorStringとほぼ同じです。convert_optionはmb_convert_kanaの第2引数に渡す変換オプションです（デフォルトで'asKV'が設定されています）。</p>

<h3>呼び出し方サンプル</h3>
<pre name="code" class="php">
$form-&gt;setValidators(array(
    'name' =&gt; new sfValidatorStringKana(array(
        'min_length' =&gt; 4,
        'max_length' =&gt; 50,
        'convert_option' =&gt; 'asKV', // mb_convert_kanaの変換オプション
    )),
));
</pre>

<h2>clean()をオーバーライドした理由</h2>
既存のバリデータを見る限り、<strong>カスタムバリデータでオーバーライドされるべきメソッドはdoClean()</strong>なんですが、このクラスではdoClean()ではなくclean()をオーバーライドしています。

<p>あえてclean()をオーバーライドした理由は、sfValidatorBase::clean()で行われるデフォルトのバリデーション（trimや必須チェック）の前にフィルタリングを行いたかったからです。</p>

<p>例えば全角スペースのみを含む文字列がPOSTされた場合、doClean()をオーバーライドしただけだと、trimと必須チェックをすり抜けてしまうため、フィルタの意味を成さなくなってしまうのです。ここのところ、文字だとちょっとわかりづらいので、図でまとめてみました↓</p>

<h3>doClean()をオーバーライドしたとき</h3>
<a href="http://monolog.spanstyle.com/assets_c/2009/12/doclean-38.html" onclick="window.open('http://monolog.spanstyle.com/assets_c/2009/12/doclean-38.html','popup','width=491,height=598,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://monolog.spanstyle.com/assets_c/2009/12/doclean-thumb-450x548-38.png" width="450" height="548" alt="doclean.png" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px; border:1px solid #ccc" /></a>

<h3>clean()をオーバーライドしたとき</h3>
<a href="http://monolog.spanstyle.com/assets_c/2009/12/clean-35.html" onclick="window.open('http://monolog.spanstyle.com/assets_c/2009/12/clean-35.html','popup','width=736,height=582,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://monolog.spanstyle.com/assets_c/2009/12/clean-thumb-450x355-35.png" width="450" height="355" alt="clean.png" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px; border:1px solid #ccc" /></a>

<p>他にも使いまわしがききそうなカスタムバリデータを作ってる方がいらっしゃったら、コメントなどで教えてもらえるととてもうれしいです。</p>]]>
    </content>
</entry>

<entry>
    <title>Twitterの「これはいい画像ですね！」のUIを3分で実装してみる</title>
    <link rel="alternate" type="text/html" href="http://monolog.spanstyle.com/2009/11/twitter-hentai.html" />
    <id>tag:monolog.spanstyle.com,2009://1.447</id>

    <published>2009-11-18T08:17:20Z</published>
    <updated>2009-12-09T16:38:48Z</updated>

    <summary>Twitterの「これはいい画像ですね！」のUIをカンタンなコードで実装してみます。</summary>
    <author>
        <name>ishii</name>
        <uri>http://monolog.spanstyle.com/</uri>
    </author>
    
        <category term="XHTML+CSS" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="css" label="css" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="html" label="HTML" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="jquery" label="jQuery" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="twitter" label="Twitter" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="これはいい画像ですね！" label="これはいい画像ですね！" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="変態！" label="変態！" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://monolog.spanstyle.com/">
        <![CDATA[<p><img alt="これはいい画像ですね！" src="http://monolog.spanstyle.com/2009/11/18/twitterui.png" width="450" height="170" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;border:1px solid #ccc" /></p>

<p><a href="http://twitter.com/" target="_blank">Twitter</a>アカウントを持っている人なら一度は見ているであろう、設定完了画面で出てくる「ありがとう。設定を保存しました」や「これはいい画像ですね！」のUI。</p>

<p>ページ表示時に<strong>ベロン</strong>と出てきて、一定時間が経過したらスルスルと消えていく例のアレですが、ユーザへの通知手段として非常にわかりやすいなあと思いませんでしたか？ためしてみたら意外とカンタンに実装できたので、実装方法をまとめてみます。</p>]]>
        <![CDATA[<h2>用意するもの</h2>

<ul>
	<li><a href="http://jquery.com/" target="_blank">jQuery</a></li>
	<li><a href="http://plugins.jquery.com/project/Timer" target="_blank">jQueryのtimerプラグイン</a></li>
</ul>

<p>今回は jQuery 1.3.2 と timer プラグイン 0.1.0 を使いました。timerプラグインは1.1.xもしくは1.2.xに対応してるよ<strong>「It's for jQuery (1.1.x and 1.2.x)」</strong>と記載されていましたが、1.3.2でも問題なく動作しました。</p>

<h2>動作デモ</h2>
まずは実際のコードをご覧ください。

<p><strong><a href="/2009/11/18/index.html" target="_blank">「これはいい画像ですね！」動作デモ</a></strong></p>

<h2>コード解説</h2>
動作しましたか？それでは解説です。

<h3>HTML</h3>

<p>通知したい部分のブロック要素を&lt;body&gt;タグの直下に配置します。このときブロック要素（#notification）に直接メッセージを書くのではなく、内部ブロック要素（.message）にメッセージを入れるほうが細かいレイアウトがしやすいのでオススメです。</p>

<pre name="code" class="html">
（略）
&lt;/head&gt;
&lt;body&gt;
&lt;div id=&quot;notification&quot;&gt;
&lt;p class=&quot;message&quot;&gt;これはいい画像ですね！&lt;/p&gt;
&lt;/div&gt;
&lt;div id=&quot;wrapper&quot;&gt;
（略）
</pre>

<h3>CSS</h3>

<p>通知したい部分のブロック要素は、display:none;が設定されているのがミソです。</p>

<pre name="code" class="css">
#notification {
  display: none;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  background: #eee;
}
#notification .message {
  width: 880px;
  margin: 0 auto;
  padding: 15px 10px;
  font-size: 140%;
}
</pre>

<h3>Javascript</h3>

<p><strong>読み込みが完了した直後に表示→一定期間そのまま→再度非表示</strong> は以下のコードで。</p>

<pre name="code" class="javascript">
// 読み込み完了直後に実行
$(document).ready(function(){
	notification('#notification');
});
// メッセージ通知を表示
function notification(element)
{
	$(element).slideDown('fast');
	$.timer(5000, function(timer){
		$(element).slideUp('fast');
		timer.stop();
	});
}
</pre>

<p>おさらいすると、以下のような流れです。</p>

<ol>
	<li>$(document).ready() で読み込み直後にnotification()を呼ぶ</li>
	<li>$(element).slideDown() で非表示になっている#notification を<strong>ベロン</strong>と表示</li>
	<li>$.timer() で5秒間静止</li>
	<li>$(element).slideUp() で再度非表示</li>
</ol>

<p>※$(document).ready() の部分は &lt;body&gt;タグのonloadイベントを代用しても動作すると思います。</p>

<p>ひょっとしたら3分かからずに実装できてしまうので、ぜひお試しを。</p>

<h2>Twitterアカウントあります</h2>
<a href="http://bit.ly/2u53QN" target="_blank">Twitterアカウント</a>持ってますので、もしよければフォローしてください。]]>
    </content>
</entry>

<entry>
    <title>Firefox で swfobject の Flash が動作しない原因は Page Speed 1.3 だった</title>
    <link rel="alternate" type="text/html" href="http://monolog.spanstyle.com/2009/10/firefox-swfobject-pagespeed.html" />
    <id>tag:monolog.spanstyle.com,2009://1.446</id>

    <published>2009-10-14T12:29:16Z</published>
    <updated>2009-10-20T02:43:22Z</updated>

    <summary>  ベタ書きされたFlashなら表示されるのに、 なぜかswfobject.em...</summary>
    <author>
        <name>ishii</name>
        <uri>http://monolog.spanstyle.com/</uri>
    </author>
    
        <category term="Firefox" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="firefox" label="Firefox" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="swfobject" label="swfobject" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://monolog.spanstyle.com/">
        <![CDATA[<p><img alt="swfobject.png" src="http://monolog.spanstyle.com/assets_c/2009/10/swfobject-thumb-450x170-27.png" width="450" height="170" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;border:1px solid #ccc" /></p>

<p>ベタ書きされたFlashなら表示されるのに、 なぜかswfobject.embedSWF() で埋め込んだFlashが表示できなくなった。</p>

<p>セーフモードなら問題なく表示されるので、40個以上入ってるアドオンをしらみつぶしに調べてみたら。。。<a href="http://code.google.com/p/page-speed/" target="_blank">Page Speed</a>、おまえだったのか。</p>

<p>どうやらFirefox 3.5.3 / Firebug 1.4.3 / Page Speed 1.3 の組み合わせで<strong>Flashコンテンツが表示されない</strong>というバグが発生する模様。<br />
</p>]]>
        <![CDATA[<p>Google Code 上では該当の<a href="http://code.google.com/p/page-speed/issues/detail?id=140">Defectチケットが発行されてる</a>ようなので、いきなりFlashが読めなくなってなんで！？とあたふたしてる人はじゃんじゃん★マークをつければ早く直してくれるんだきっとそうだそうにちがいない。</p>

<p>しばらくYSlow使うか。。。</p>

<p><strong>2009/10/20 追記</strong></p>

<p>とか書いてから、24時間後にはすでにチケットがClosed になってました。Page Speedのバージョンも1.3.0.1 にあがったみたいです。ためしにバージョンアップしてみたところ、swfobject 動きました！ありがとうございます＞中の人</p>]]>
    </content>
</entry>

<entry>
    <title>システムから削除したユーザのcrontabをきちんと削除する、たった一つの方法</title>
    <link rel="alternate" type="text/html" href="http://monolog.spanstyle.com/2009/08/var-spool-cron-hoge.html" />
    <id>tag:monolog.spanstyle.com,2009://1.445</id>

    <published>2009-08-20T07:00:12Z</published>
    <updated>2009-08-20T07:16:56Z</updated>

    <summary>rootのcrontabを変更したので、動作確認のために /var/log/cr...</summary>
    <author>
        <name>ishii</name>
        <uri>http://monolog.spanstyle.com/</uri>
    </author>
    
        <category term="Linuxサーバ" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://monolog.spanstyle.com/">
        <![CDATA[<p>rootのcrontabを変更したので、動作確認のために /var/log/cron を眺めていたら以下のようなログが出てきた。</p>

<pre name="code" class="html">
Aug 20 11:03:01 hostname crond[2883]: ([削除したユーザ名]) ORPHAN (no passwd entry)
</pre>

<p><br />
<strong>ORPHAN ＝ 孤児</strong></p>

<p>という意味らしく、どうやらユーザは存在しないけどcrontabが残ってるよ、という意味のようだ。動作はしないだろうけど、なんだか気持ちが悪い。この対処方法としては</p>

<p><strong>/var/spool/cron/[削除したユーザ名]のファイルを削除する。</strong> </p>

<p>これだけでいいよ。</p>

<p></p>]]>
        
    </content>
</entry>

<entry>
    <title>Firefox で Google Analytics の日付変更が突然できなくなった時の解決方法</title>
    <link rel="alternate" type="text/html" href="http://monolog.spanstyle.com/2009/02/firefox-google.html" />
    <id>tag:monolog.spanstyle.com,2009://1.444</id>

    <published>2009-02-03T15:24:34Z</published>
    <updated>2009-02-03T17:49:05Z</updated>

    <summary>Firefox で Google Analytics の日付検索ができなくなった時の解決方法。</summary>
    <author>
        <name>ishii</name>
        <uri>http://monolog.spanstyle.com/</uri>
    </author>
    
        <category term="Firefox" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ウェブシステム開発" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="firefox" label="Firefox" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="googleanalytics" label="Google Analytics" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="tips" label="Tips" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="アドオン" label="アドオン" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://monolog.spanstyle.com/">
        <![CDATA[<p>なんでじゃ...<br />
いちいち IE Tab で切り替えないと使えないだなんて、ひどいよ...</p>

<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a rel="lightbox" title="Firefoxを使うだけで驚きの白さに" href="http://monolog.spanstyle.com/2009/02/04/analytics.png"><img alt="analytics.png" src="http://monolog.spanstyle.com/assets_c/2009/02/analytics-thumb-450x189-16.png" width="450" height="189" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px; border:2px solid #999" /></a></span>

<p>ある日突然日付変更が使えなくなったため、ヒマを見つけてはボチボチ情報収集してたんですが有効な手がかりが得られず。でも、こちらのブログでようやく解決方法が見つかりました！</p>

<p><a href="http://bebow6.blogspot.com/2009/01/firefoxgoogle-analytics.html" target="_blank">Be bow 6 α: FirefoxでGoogle Analyticsの期間の選択ができなくなったときの対処方法</a></p>]]>
        <![CDATA[<p>この記事によれば、どうやらウェブページのスクリーンショットを撮るためのアドオン「<a href="http://pearlcrescent.com/products/pagesaver/" target="_blank">Pearl Crescent Page Saver Basic 2.0.1</a>」が悪さをしてた模様。さらに手元のPCで試してみたところ、アドオンを無効にせずとも解決することができました。</p>

<h2>実はチェックを外すだけでもOKぽい</h2>

<p>Firefoxから[ツール]→[アドオン]→[Pearl Crescent Page Saver Basic 2.0.1]→[設定]と進み、</p>

<p><strong>「Webページの読み込み時にFlashのコンテンツも取得」にチェックを入れてOKボタン</strong>を押し、再度Google Analytics を読み込めば正常に出てくるようになりました！わーパチパチ。</p>

<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a rel="lightbox" title="「Webページの読み込み時にFlashのコンテンツも取得」のチェックをはずす。" href="http://monolog.spanstyle.com/2009/02/04/pagesaver.png"><img alt="pagesaver.png" src="http://monolog.spanstyle.com/assets_c/2009/02/pagesaver-thumb-450x466-18.png" width="450" height="466" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></span>

<p>2009/01/14に最新バージョンの2.0.1が出たようですが、おそらくこのバージョンにアップデートすると同じ現象が起こってしまうのではないかと思います。</p>

<p><strong>このチェック項目はデフォルトでOffになってる</strong>ため、同じような境遇に悩んでる方は非常に少ないと思いますが、</p>

<ul>
	<li>Firefoxを使っている</li>
	<li>Google Analyticsをよく見ている</li>
	<li>Pearl Crescent Page Saverを使ってよくスクリーンショットを撮っている</li>
</ul>

<p>のいずれにも該当する方は、一度設定を見直してみたほうがよいかもです。</p>

<p>※チェック入れといたほうが、Flashも取り込めてラクなんだけどな...</p>]]>
    </content>
</entry>

<entry>
    <title>PHP5.2.8 で Mojavi3 を動作させた際に出るWarning対処方法まとめ</title>
    <link rel="alternate" type="text/html" href="http://monolog.spanstyle.com/2009/02/php528-mojavi3.html" />
    <id>tag:monolog.spanstyle.com,2009://1.443</id>

    <published>2009-02-03T05:36:01Z</published>
    <updated>2009-02-05T09:58:38Z</updated>

    <summary>PHP5.2.8でMojavi3を動作させた時のWarning対処方法</summary>
    <author>
        <name>ishii</name>
        <uri>http://monolog.spanstyle.com/</uri>
    </author>
    
        <category term="PHP" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mojavi" label="Mojavi" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="warning" label="Warning" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="バグ" label="バグ" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://monolog.spanstyle.com/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;">
<a rel="lightbox" title="PHP5.2.8 で Mojavi3 を動作させた際に出るWarning対処方法まとめ" href="http://monolog.spanstyle.com/2009/02/05/php5.2.8-warning.png"><img alt="php5.2.8-warning.png" src="http://monolog.spanstyle.com/assets_c/2009/02/php5.2.8-warning-thumb-450x80-25.png" width="450" height="80" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;border:2px solid #999" /></a></span>

<p>PHP5.2.8 にバージョンアップしたら、 Mojavi3 で警告が出るようになりました。</p>

<p><strong>Warning: fclose() [function.fclose]: 37 is not a valid stream resource in \path\to\mojavi\config\ConfigCache.class.php on line 408</strong></p>

<p>今回はこれを抑制する方法。</p>]]>
        <![CDATA[<p>コードを見てみると、mojavi\config\ConfigCache.class.phpで<strong>opendir()で取得したハンドルをfclose()で閉じようとしている</strong>のが原因だったので、fclose()をclosedir()に修正するだけでOKです。Sean Kerr 氏の凡ミス？</p>

<h2>修正箇所その1</h2>

<pre name="code" class="php:firstline[263]">
        // close file pointer
        fclose($fp);
</pre>

<p>↓</p>

<pre name="code" class="php:firstline[263]">
        // close file pointer
        closedir($fp);
</pre>

<h2>修正箇所その2</h2>

<pre name="code" class="php:firstline[407]">
            // close file pointer
            fclose($fp);
</pre>

<p>↓</p>

<pre name="code" class="php:firstline[407]">
            // close file pointer
            closedir($fp);
</pre>

<p>キャッシュファイルの生成時と消去時とで関数が異なるため、修正箇所は2箇所になりますが、どちらも直しておけば問題ないです。手元の環境ではPHP5.2.6までは問題なく動作してましたが、PHP5.2.8にバージョンアップしたとたんにWarningを吐くようになりました（コチラの方が動作としては正しい）。</p>

<p>Mojavi3で動いてるシステムはまだあると思いますが、PHPをバージョンアップしたらフレームワーク内からWarningが出た、という時は参考にしてみるといいかもです。</p>

<p>ああ、いっそsymfonyでリプレースしたいなぁ...</p>]]>
    </content>
</entry>

<entry>
    <title>マウス操作でカンタンに判定、色彩センステスト</title>
    <link rel="alternate" type="text/html" href="http://monolog.spanstyle.com/2009/01/post-76.html" />
    <id>tag:monolog.spanstyle.com,2009://1.442</id>

    <published>2009-01-29T08:50:17Z</published>
    <updated>2009-01-29T10:06:55Z</updated>

    <summary>Munsell Hue Test（マンセルヒューテスト） なるものがあるらしいで...</summary>
    <author>
        <name>ishii</name>
        <uri>http://monolog.spanstyle.com/</uri>
    </author>
    
        <category term="そのほか" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="センス" label="センス" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ツール" label="ツール" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="テスト" label="テスト" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="デザイナ" label="デザイナ" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="色彩感覚" label="色彩感覚" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://monolog.spanstyle.com/">
        <![CDATA[<p><a href="http://www.spectralcolor.com/game/huetest_kiosk" target="_blank">Munsell Hue Test（マンセルヒューテスト）</a> なるものがあるらしいですよ。</p>

<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a title="Munsell Hue Test（マンセルヒューテスト）" rel="lightbox" href="http://monolog.spanstyle.com/2009/01/29/Munsell%20Hue%20Test0.png"><img alt="Munsell Hue Test0.png" src="http://monolog.spanstyle.com/assets_c/2009/01/Munsell Hue Test0-thumb-450x238-11.png" width="450" height="238" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></span>

<p>こんな感じにランダムに並んだ色のセルを、マウスのドラッグ＆ドロップで色の順番に合わせて配置換えをするだけ。終了後に「Score Test」ボタンを押せば、自分がどれだけ正しく配置できたか（もしくは間違っていたか）を教えてくれます。点数は0点に近づけば近づくほどいいみたいです。</p>]]>
        <![CDATA[<p><strong>詳しい説明や使い方はコチラ</strong><br />
<a href="http://trend.gyao.jp/internet/entry-3723.html" target="_blank">誰でもカンタンに自分の"色彩感覚"をチェックできるWEBサイト</a><br />
<a href="http://mbdb.jp/?eid=1212" target="_blank">Munsell Hue Test─あなたの色彩感覚をテストする話題のサイト</a></p>

<h2>モニタによって全然違うテスト結果が！</h2>

<p>気になるテスト結果は・・・</p>

<p><strong>1回目</strong><br />
デュアルディスプレイのメインモニタで実施し、<strong>16点</strong>。「お、俺デザイナじゃないし、別にいいんだもんね！」とちょっと言い訳してみる。</p>

<p><strong>2回目</strong><br />
デュアルディスプレイのサブモニタで実施し、<strong>0点</strong>。小さくガッツポーズ。</p>

<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a title="Munsell Hue Test（マンセルヒューテスト）" rel="lightbox" href="http://monolog.spanstyle.com/2009/01/29/Munsell%20Hue%20Test.png"><img alt="Munsell Hue Test.png" src="http://monolog.spanstyle.com/assets_c/2009/01/Munsell Hue Test-thumb-450x224-13.png" width="450" height="224" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></span>

<h2>モニタを変えてテストしてみてわかったこと</h2>

<p>どちらも同じ条件かつ同じ型番のモニタ（LG製L206WTQ-BF、色設定はいじったことなし）なのに、1回目と2回目を比較すると<strong>2回目の方が色の差異がはるかにわかりやすかった</strong>。</p>

<p>1回目のときは「あ...これどっちかな？」と悩む場面が多かったけど、2回目のときは「これは明らかに右に置くべきじゃね？」というのがわかったし、そもそも悩む回数がかなり少なかった。</p>

<p>「安物モニタは色表現の個体差が大きい」というのは聞いたことがあったけど、「普通に見えてれば安いのでいいんじゃね？」という性格なもので、正直なところ今まで気にしたことはなかった。だけど、こうやって数値化してくれたおかげで初めて「ホホーやっぱ安物は安物なんだねぇ」とあらためて実感することができたので、ちょっとうれしい。</p>

<p>ここまでわかりやすく見せられてしまうと、このサイトを『デザイナさんの質を定量評価するためのツール』として使う企業が出てきてもおかしくないんじゃないかな。</p>]]>
    </content>
</entry>

<entry>
    <title>1.5TBのハードディスク買うた</title>
    <link rel="alternate" type="text/html" href="http://monolog.spanstyle.com/2009/01/15tb.html" />
    <id>tag:monolog.spanstyle.com,2009://1.441</id>

    <published>2009-01-17T17:30:52Z</published>
    <updated>2009-01-17T18:01:55Z</updated>

    <summary>現時点で最高容量、1.5TB（1TB=1024GB）のハードディスク Barra...</summary>
    <author>
        <name>ishii</name>
        <uri>http://monolog.spanstyle.com/</uri>
    </author>
    
        <category term="日記" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="hdd" label="HDD" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="pc" label="PC" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="windows" label="windows" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="容量" label="容量" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://monolog.spanstyle.com/">
        <![CDATA[<p>現時点で最高容量、1.5TB（1TB=1024GB）のハードディスク <a href="http://kakaku.com/item/05302015939/">Barracuda 7200.11 ST31500341AS</a> をゲットしましたぞ。</p>

<p>日々増え続けているISOファイルを、ようやくこれで1台にまとめることができることができる。うれしいなあ。</p>

<p>1.5TBだと、実際に使える容量はこんな感じになるのかな？</p>

<p>1.5TB x ( 1000 x 1000 x 1000 x 1000 ) ÷ ( 1024 x 1024 x 1024 x1024 )<br />
 ≒ 1.364T<br />
<strong> ≒ 1364GB</strong></p>

<p>って、えええええ！！！<br />
実質136Gも足りなくなっちゃうのかぁ～～<br />
<strong>今使ってるHDD容量1個分と同じだけ減る</strong>と思うと、なんか複雑...</p>

<p>※なぜ容量が減るかについては↓参照</p>

<p><a href="http://www.zqwoo.jp/sak_bfqa/show_c/BUFF307">ハードディスク容量の計算方法</a></p>]]>
        
    </content>
</entry>

<entry>
    <title>jpMailPluginをsymfony1.1.5に対応してみた（暫定）</title>
    <link rel="alternate" type="text/html" href="http://monolog.spanstyle.com/2008/11/symfon.html" />
    <id>tag:monolog.spanstyle.com,2008://1.440</id>

    <published>2008-11-25T12:34:02Z</published>
    <updated>2008-11-25T13:46:37Z</updated>

    <summary>symfony1.1.xで動作するjpMailPluginの配布（暫定）</summary>
    <author>
        <name>ishii</name>
        <uri>http://monolog.spanstyle.com/</uri>
    </author>
    
        <category term="PHP" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="jpmailplugin" label="jpMailPlugin" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="phpmailer" label="PHPMailer" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="symfony" label="symfony" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="メール" label="メール" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://monolog.spanstyle.com/">
        <![CDATA[<p>そろそろ本格的に symfony を...と勉強を始めて2日目。情報を漁っていくうちにメール周りがだいぶ面倒くさいことを知ったので、勉強がてら<a href="http://develop.ddo.jp/new-tech/php/framework/symfony/plugin/jpmailplugin">おやぢ組さんの jpMailPlugin</a> に手を入れてみました。<br />
</p>]]>
        <![CDATA[<h2>調べた結果わかったこと</h2>

<ul>
	<li>今後は<a href="http://phpmailer.codeworxtech.com/">PHPMailer</a>でなく<a href="http://www.swiftmailer.org/">Swift Mailer</a>に切り替わっていく → <a href="http://groups.google.com/group/symfony-devs/browse_thread/thread/b268c40c574d1402">MLのログ</a></li>
	<li>jpMailPluginは<a href="http://d.hatena.ne.jp/brtRiver/20081120/1227176973">symfony1.1.5に対応してないっぽい＆これから作ろうとしてる</a></li>
	<li>sfMailerを使う場合はsettings.ymlのcompat_10をonにしないとだめ</li>
	<li>sfMailerを使うとcontroller::sendEmail()でエラーログを吐く。なんか気持ち悪い</li>
	<li>sfMailerを使うとメール送りたいだけなのにHTTPヘッダが出てる。なんか気持ち悪い</li>
</ul>

<h2>調べた結果予想できたこと</h2>

<blockquote>
<em><strong>"俺たちはSwift Mailerが使いたいんじゃない、PHPMailerが使いたいんだ"</strong></em>

<p><br />
<big><em><strong>"俺たちはSwift Mailerが使いたいんじゃない、PHPMailerが使いたいんだ"</strong></em></big></p>

<p><br />
<big><big><em><strong>"俺たちはSwift Mailerが使いたいんじゃない、PHPMailerが使いたいんだ"</strong></em></big></big><br />
</blockquote></p>

<p>...symfonyのメール周りで悩んでる（日本語圏の）人の多くが思っていそうだった。</p>

<h2>目標にしたこと</h2>

<ul>
	<li>慣れてるsfMailer / PHPMailerが使える</li>
	<li>compat_10がoffでも使える</li>
	<li>controller::sendEmail()でエラーログを吐かない</li>
	<li>HTTPヘッダは出さない</li>
</ul>

<p>ということで、おやぢ組さんの jpMailPlugin をベースにsymfony1.1.5に対応して作ってみたプラグインはこちら。パッケージ方法がよくわからないので、とりあえずアーカイブで。</p>

<p><br />
<span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://monolog.spanstyle.com/2008/11/25/jpMailPlugin.zip">jpMailPlugin.zip</a></span></p>

<p></p>

<p>※制限事項として、<strong>メール処理を一つのモジュールに集約した場合しか動作確認してない</strong>というのがあります。</p>

<p>以下、アプリケーション名を<em>frontend</em>、メール関連モジュールを<em>mail</em>としてざっくり解説してみます。</p>

<h2>インストール方法</h2>

<p>plugins以下にjpMailPluginディレクトリを作って展開。</p>

<h2>設定方法</h2>

<h3>apps/<em>frontend</em>/config/factories.yml に以下を追記</h3>

<pre name="code" class="html:nocontrols">
all:
  controller:
    class: sfFrontWebJpMailController
</pre>

<h3>apps/<em>frontend</em>/modules/<em>mail</em>/config/module.ymlに以下を追記</h3>

<pre name="code" class="html:nocontrols">
all:
  is_internal: on　　← 必要であればこれも
  view_class: jpMail
</pre>

<h3>apps/<em>frontend</em>/modules/<em>mail</em>/config/view.yml に以下を追記</h3>

<pre name="code" class="html:nocontrols">
all:
  has_layout:     off
</pre>

<h2>呼び出し側</h2>

<h3>アクション（apps/<em>frontend</em>/modules/<em>default</em>/actions/actions.class.php）</h3>

<pre name="code" class="php:nocontrols">
public function executeIndex($request)
{
  $this->getController()->sendEmail('mail', 'index');
}
</pre>

<h2>呼び出される側</h2>

<h3>アクション（apps/<em>frontend</em>/modules/<em>mail</em>/actions/actions.class.php）</h3>

<pre name="code" class="php:nocontrols">
public function executeIndex($request)
{
  $this->hoge = 'ほげ～';
  $this->mail = new jpMail;
  $this->mail->initialize();
  $this->mail->setFrom('info@example.com', '山田 太郎');
  $this->mail->setSubject('お問い合わせありがとうございました');
  $this->mail->addAddress('info@example.net', '山田 花子');
}
</pre>

<h3>テンプレート(apps/<em>frontend</em>/modules/<em>mail</em>/templates/indexSuccess.php)</h3>

<pre name="code" class="php:nocontrols">
メール本文がここに。
変数が使える。
&lt;?php echo $hoge ?&gt;
パーシャルも。
&lt;?php include_partial('signature') ?&gt;
</pre>

<h2>内容物の解説</h2>

<h3>jpMailPlugin/config/config.php</h3>

<p>$sf_symfony_lib_dir/plugins/sfCompat10Plugin/confg/config.php から必要そうな箇所だけ持ってきました。</p>

<pre name="code" class="php:nocontrols">
&lt;?php
// register config handler for config/mailer.yml files
sfProjectConfiguration::getActive()-&gt;getConfigCache()-&gt;registerConfigHandler('modules/*/config/mailer.yml', 'sfDefineEnvironmentConfigHandler', array('prefix' =&gt; 'sf_mailer_', 'module' =&gt; 'yes'));
</pre>

<h3>jpMailPlugin/config/mailer.yml</h3>

<p>おなじみのmailer.yml。apps/<em>frontend</em>/modules/<em>mail</em>/config/mailer.ymlでオーバーライドできます。</p>

<pre name="code" class="php:nocontrols">
default:
  deliver:           on
  mailer:            smtp
  domain:            localhost.localdomain
  hostname:          localhost
  port:              25
  username:          ''
  password:          ''
  wordwrap:          0
  .headers:
    priority:        3
    content_type:    text/plain
    charset:         iso-2022-jp
    encoding:        7bit
</pre>

<p><br />
<h3>jpMailPlugin/lib/controller/sfFrontWebJpMailController.class.php</h3></p>

<p>sfFrontWebController から sendEmail() だけオーバーライドしました。</p>

<ul>
	<li>エラーログを吐かない（infoログを吐く）</li>
	<li>HTTPヘッダを出さない</li>
</ul>

<p>に対応してます。</p>

<p>2つめのやつが厄介でしたが、sfWebResponseを見る限りではメール送信処理中のみsf_testをtrueにすればHTTPヘッダが出ないようなので、トリッキーですがgetPresentationFor() の間だけsf_testをtrueに設定するようにしてみました。</p>

<p>根本的な解決策はmailモジュールのときだけresponseオブジェクトをsfWebResponse以外のものに変えることでは？と思いはしたものの、factories.ymlでモジュールごとにresponseオブジェクトを変える方法がわからず...そもそもモジュールごとに変えられるような設計じゃないような気も...</p>

<pre name="code" class="php:nocontrols">
&lt;?php
/**
 *
 * @package    jpMail.plugin
 * @subpackage controller
 * @author     Yoshinori Ishii &lt;ishii.yoshinori@itra.jp&gt;
 */
class sfFrontWebJpMailController extends sfFrontWebController
{
  /**
   * Sends and email.
   *
   * This methods calls a module/action with the sfMailView class.
   *
   * @param  string  $module  A module name
   * @param  string  $action  An action name
   *
   * @return string The generated mail content
   *
   * @see sfMailView, getPresentationFor(), sfController
   */
  public function sendEmail($module, $action)
  {
    if (sfConfig::get('sf_logging_enabled'))
    {
      $this-&gt;dispatcher-&gt;notify(new sfEvent($this, 'application.log', array('sendEmail method called')));
    }
    $sf_test = sfConfig::get('sf_test');
    sfConfig::set('sf_test', true);
    $retval = $this-&gt;getPresentationFor($module, $action);
    sfConfig::set('sf_test', $sf_test);
    return $retval;
  }
}
</pre>

<h3>jpMailPlugin/lib/vendor/phpmailer/*</h3>

<p>PHPMailerがゴソっと入っています。class.pop3.phpはいらないかな...</p>

<h3>jpMailPlugin/lib/view/jpMailView.class.php</h3>

<p>symfony1.1.5の $sf_symfony_lib_dir/plugins/sfCompat10Plugin/lib/view/sfMailView.class.php の 'sfMail' を 'jpMail' に変えてコメントをいじりました。</p>

<h3>jpMailPlugin/lib/jpMail.class.php</h3>

<p>jpMailPluginのものをそのまま持ってきました。</p>

<h3>jpMailPlugin/lib/sfMail.class.php</h3>

<p>$sf_symfony_lib_dir/plugins/sfCompat10Plugin/lib/sfMail.class.php のものをそのまま持ってきました。</p>

<h2>お願い</h2>

<p>個人的には<strong>jpMailPluginの新バージョンの元ネタにでもなったらいいな</strong>と思っています。が、ライセンス的なものを全く考慮せずにいろんなところからコードを持ってきているので、コレやっちゃダメなどとご指摘いただけると助かります。</p>

<p>また、symfonyの作法的にNGだろ、という事をやってましたら教えて頂けると助かります。</p>]]>
    </content>
</entry>

<entry>
    <title>SSL証明書発行時に毎回調べるOpenSSLの3コマンド</title>
    <link rel="alternate" type="text/html" href="http://monolog.spanstyle.com/2008/11/sslopenssl.html" />
    <id>tag:monolog.spanstyle.com,2008://1.439</id>

    <published>2008-11-20T12:16:32Z</published>
    <updated>2008-11-20T12:46:34Z</updated>

    <summary>秘密鍵の生成（パスフレーズ不要版含む）とCSRの発行コマンドは、調べる→忘れるを...</summary>
    <author>
        <name>ishii</name>
        <uri>http://monolog.spanstyle.com/</uri>
    </author>
    
        <category term="Linuxサーバ" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ウェブシステム開発" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="apache" label="apache" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="csr" label="CSR" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="https" label="HTTPS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="linux" label="Linux" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="openssl" label="OpenSSL" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ssl" label="SSL" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ssl証明書" label="SSL証明書" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="リファレンス" label="リファレンス" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="秘密鍵" label="秘密鍵" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://monolog.spanstyle.com/">
        <![CDATA[<p>秘密鍵の生成（パスフレーズ不要版含む）とCSRの発行コマンドは、調べる→忘れるを繰り返しているのでメモ。</p>

<p>事前準備として、秘密鍵とCSRとSSL証明書を入れるディレクトリを作っておく。</p>

<pre name="code" class="html:nocontrols">
$ su -
# cd /usr/share/ssl
# mkdir {key,csr,crt}
</pre>

<p></p>]]>
        <![CDATA[<h2>秘密鍵の生成</h2>

<h3>パスフレーズが必要な秘密鍵の生成</h3>

<p>とりあえずコレ作らないとはじまらないです。</p>

<pre name="code" class="html:nocontrols">
# openssl genrsa -des3 -out ./key/hostname.key 1024
Generating RSA private key, 1024 bit long modulus
..++++++
..........++++++
e is 65537 (0x10001)
Enter pass phrase for ./key/hostname.key: ←パスフレーズ入力
Verifying - Enter pass phrase for ./key/hostname.key: ←パスフレーズ入力
</pre>

<h3>パスフレーズが不必要な秘密鍵の生成</h3>

<p>Apacheとかで使う。ご利用は計画的に。</p>

<pre name="code" class="html:nocontrols">
# openssl rsa -in ./key/hostname.key -out ./key/hostname.nopassword.key
Enter pass phrase for ./key/hostname.key: ←パスフレーズ入力
writing RSA key
</pre>

<h2>CSRの生成</h2>

<p>秘密鍵で設定したパスフレーズを入力する必要あり。</p>

<pre name="code" class="html:nocontrols">
# openssl req -new -key ./key/hostname.key -out ./csr/hostname.csr
Enter pass phrase for ./key/hostname.key: ←パスフレーズ入力
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:Tokyo
Locality Name (eg, city) [Newbury]:Shibuya-ku
Organization Name (eg, company) [My Company Ltd]:Hoge Inc.
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:www.example.com
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
</pre>

<p><strong>Common Name の箇所は、SSL証明書を発行したいドメイン名ではなく、FQDN名を入れる。うっかりすると使い物にならない証明書を発行してしまうこともあるので注意。</strong></p>

<p>無事SSL証明書が発行されたら、crtディレクトリに入れる。必要であれば中間証明書も入れちゃっていいのではないかと。</p>]]>
    </content>
</entry>

<entry>
    <title>SyntaxHighlighter の記述方法と注意点のまとめ</title>
    <link rel="alternate" type="text/html" href="http://monolog.spanstyle.com/2008/11/syntaxhighlight.html" />
    <id>tag:monolog.spanstyle.com,2008://1.438</id>

    <published>2008-11-20T10:24:50Z</published>
    <updated>2008-11-20T13:04:52Z</updated>

    <summary>設置方法じゃなくて記述方法のまとめ。いちいち覚えてらんないのは歳をとったからなの...</summary>
    <author>
        <name>ishii</name>
        <uri>http://monolog.spanstyle.com/</uri>
    </author>
    
        <category term="XHTML+CSS" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ウェブシステム開発" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="html" label="HTML" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="movabletype" label="MovableType" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="syntaxhighlighter" label="SyntaxHighlighter" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="リファレンス" label="リファレンス" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://monolog.spanstyle.com/">
        <![CDATA[<p>設置方法じゃなくて記述方法のまとめ。いちいち覚えてらんないのは歳をとったからなのかなぁ...</p>

<h2>基本形</h2>

<p>&lt;pre&gt;、もしくは&lt;textarea&gt;で。</p>

<h3>&lt;pre&gt;の場合</h3>

<pre name="code" class="html">
&lt;pre name="code" class="html"&gt;
... some code here ...
&lt;/pre&gt;
</pre>

<h3>&lt;textarea&gt;の場合</h3>

<pre name="code" class="html">
&lt;textarea name="code" class="html"&gt;
... some code here ...
&lt;/textarea&gt;
</pre>
]]>
        <![CDATA[<h2>ハイライトする言語の指定</h2>
どの言語でハイライトするかをclass="html"などと指定する。
オフィシャルドキュメントはこちら
<a href="http://code.google.com/p/syntaxhighlighter/wiki/Languages">http://code.google.com/p/syntaxhighlighter/wiki/Languages</a>

<h2>表示方法変更</h2>

<p>classにコロン（：）区切りで指定すれば、表示内容を変更できます。</p>

<h3>nogutter</h3>
左側の行番号が非表示になります。

<pre name="code" class="html:nogutter">
&lt;pre name="code" class="html:nogutter"&gt;
... some code here ...
&lt;/pre&gt;
</pre>

<h3>nocontrols</h3>
上部コントローラ（「view plain」「copy to clipboard」「print」「?」）が消えます。</strong>スッキリ見えるのでオススメかも！</strong>

<pre name="code" class="html:nocontrols">
&lt;pre name="code" class="html:nocontrols"&gt;
... some code here ...
&lt;/pre&gt;
</pre>

<h3>collapse</h3>
デフォルトで閉じた状態で表示します。上部コントローラに追加された「＋ expand source」で開きます。長いコードを垂れ流す時に使えるけど、パッと見でわかりづらいかも。

<pre name="code" class="html:collapse">
&lt;pre name="code" class="html:collapse"&gt;
... some code here ...
&lt;/pre&gt;
</pre>

<p>※nocontrolsとcollapseを同時に使うと何も表示されないので注意</p>

<h3>firstline[value]</h3>
行番号の開始位置がvalueで指定した値に変わります。長いコードを抜粋するときに使うかな。

<pre name="code" class="html:firstline[10]">
&lt;pre name="code" class="html:firstline[10]"&gt;
... some code here ...
&lt;/pre&gt;
</pre>

<h3>showcolumns</h3>
列番号を表示します。使い道は...？

<pre name="code" class="html:showcolumns">
&lt;pre name="code" class="html:showcolumns"&gt;
... some code here ...
&lt;/pre&gt;
</pre>

<p>表示方法変更に関するオフィシャルドキュメントはこちら<br />
<a href="http://code.google.com/p/syntaxhighlighter/wiki/Configuration">http://code.google.com/p/syntaxhighlighter/wiki/Configuration</a></p>

<h2>注意点</h2>

<h3>実体参照に変換セヨ</h3>
&lt;pre&gt;、もしくは&lt;textarea&gt;内のコードは全て実体参照に変換すること。変換サイトはたくさんあるので<a href="http://www.google.co.jp/search?hl=ja&q=HTML%E5%AE%9F%E4%BD%93%E5%8F%82%E7%85%A7%E5%A4%89%E6%8F%9B&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=&aq=f&oq=">ググる</a>。

<h3>MovableTypeだったらコード内に空行を入れない</h3>
エントリのフォーマットに「改行を変換」が指定されていた場合、&lt;pre&gt;、もしくは&lt;textarea&gt;内に空行があった場合、意図しない&lt;br /&gt;が入ったりしてキモい。

<h3>MovableTypeだったら開始タグと終了タグの前後に空行を1つ入れる</h3>
エントリのフォーマットに「改行を変換」が指定されていた場合、&lt;pre&gt;、もしくは&lt;textarea&gt;の前後に2つ以上の空行があった場合、意図しない&lt;br /&gt;が入ったりしてキモい。前後に1つずつの空行を入れるとキレイに変換してくれるようだ。
]]>
    </content>
</entry>

<entry>
    <title>ロリポップで拡張子htmlのままSSIを使う方法</title>
    <link rel="alternate" type="text/html" href="http://monolog.spanstyle.com/2008/11/htmlssi.html" />
    <id>tag:monolog.spanstyle.com,2008://1.437</id>

    <published>2008-11-18T08:15:05Z</published>
    <updated>2009-02-06T12:49:40Z</updated>

    <summary>.htaccess に   AddHandler server-parsed ....</summary>
    <author>
        <name>ishii</name>
        <uri>http://monolog.spanstyle.com/</uri>
    </author>
    
        <category term="Linuxサーバ" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="ウェブシステム開発" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="htaccess" label=".htaccess" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="apache" label="Apache" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="linux" label="Linux" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="php" label="PHP" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ssi" label="SSI" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ロリポップ" label="ロリポップ" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://monolog.spanstyle.com/">
        <![CDATA[<p>.htaccess に</p>

<pre name="code" class="html:nocontrols">
AddHandler server-parsed .html
</pre>

<p>って書く。</p>

<p>使えないと思いこんでたから、擬似的にSSIを読み込むPHPスクリプト書いたばかりだってのによう...</p>]]>
        
    </content>
</entry>

<entry>
    <title>VistaPrintの無料名刺作成サービスとバックエンド商品について</title>
    <link rel="alternate" type="text/html" href="http://monolog.spanstyle.com/2008/01/vistaprint.html" />
    <id>tag:monolog.spanstyle.com,2008://1.434</id>

    <published>2008-01-23T15:05:19Z</published>
    <updated>2008-01-23T18:15:02Z</updated>

    <summary>先日Amazonで書籍を注文した際、VistaPrintという会社で250枚のカ...</summary>
    <author>
        <name>ishii</name>
        <uri>http://monolog.spanstyle.com/</uri>
    </author>
    
        <category term="日記" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="vistaprint" label="VistaPrint" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ゴム印" label="ゴム印" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ビジネスモデル" label="ビジネスモデル" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="メール" label="メール" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="名刺" label="名刺" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="激安" label="激安" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="無料" label="無料" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://monolog.spanstyle.com/">
        <![CDATA[<p>先日Amazonで書籍を注文した際、VistaPrintという会社で250枚のカラー名刺を無料で作成できますよ、ゴム印だって90％OFFでお買い得ですよ、というDMが同封されていた。</p>

<p><strong>無料だから</strong> とつい気軽に試してみたくなる気持ちはわかるけど、名刺、ゴム印ともに明らかに利益度外視の価格設定。利益を出すことが目的ではなく、集客（=顧客リスト作成）のみを目的とした<a href="http://sennryakuman.main.jp/2006/04/post_75.html" target="_blank">フロントエンド商品</a>で、注文したら色々なバックエンド商品（社名から察するに印刷関係のサービス?）をお勧めしてくるんだろうなあと想像していた。</p>

<p>だけど社名でググってみたら「連日胡散臭いメールが来るようになった」というのが見つかったので、以下のようなビジネスモデルなんだろうか、と勝手に想像。</p>]]>
        <![CDATA[<ol><li>無料名刺やゴム印で集客</li><li>メールアドレスのリストを作成</li><li>(一方で）企業に対してメールマガジンを広告媒体として売り込み</li><li>そのリストにメールマガジンを配信</li><li>企業側から広告費をいただく</li></ol>

<p>気になる商品の品質については、（オンライン注文ならではの仕様制限こそあれど）決して否定的な意見だけではないみたいなので、安く作りたい人にとっては何の問題もないと思う。</p>

<p>だけど、今のところウェブシステムの品質（セッション処理あたりにバグがあるみたい）やプロセス料（＝原価？）といった理解しづらい追加発生料金への説明不足、日本市場へのローカライズ対応（紙のサイズとか納期とか）などの点で問題があるみたいなので、ここらへんが気になる人はもうちょっと様子見しといたほうがよさげな感じがします。</p>

<p>営利企業がやってることなんだから、「無料」や「激安」の裏には必ずといっていいほどバックエンド商品が待ちかまえていることを肝に銘じておきましょう。</p>

<p>それでもVistaPrintが気になる方は、コチラからどうぞ。</p>

<div style="text-align: center;"><a href="http://px.a8.net/svt/ejp?a8mat=1BP8JQ+12P73M+3VG+TSBE9" target="_blank">
<img border="0" width="100" height="60" alt="" src="http://www29.a8.net/svt/bgt?aid=080119430065&amp;wid=001&amp;eno=01&amp;mid=s00000000502005003000&amp;mc=1" /></a>
<img border="0" width="1" height="1" src="http://www15.a8.net/0.gif?a8mat=1BP8JQ+12P73M+3VG+TSBE9" alt="" /></div>

<p><strong>参考：</strong></p>

<ul>
	<li><a href="http://ameblo.jp/arurururu/entry-10053576565.html">『 VistaPrint 』って大丈夫なの？</a></li>
	<li><a href="http://d.hatena.ne.jp/yaneurao/20071212">【詐欺】VistaPrintはインチキサイトか？【まがい】</a></li>
	<li><a href="http://bretagne.air-nifty.com/anne_de_bretagne/2007/12/post_f3d4.html">VistaPrintの無料お試し名刺</a></li>
	<li><a href="http://hid.cocolog-nifty.com/emptylot/2007/11/vistaprint_9a83.html">Vistaprintで注文した名刺がやってきた。</a></li>
</ul>]]>
    </content>
</entry>

<entry>
    <title>MTOS の nightly build 怖い</title>
    <link rel="alternate" type="text/html" href="http://monolog.spanstyle.com/2008/01/mtos-nightly.html" />
    <id>tag:monolog.spanstyle.com,2008://1.433</id>

    <published>2008-01-18T20:40:23Z</published>
    <updated>2008-01-18T21:14:22Z</updated>

    <summary>MT3.2のころにはなかった「ウェブページ」を書いてみたのに全然反映してくれない...</summary>
    <author>
        <name>ishii</name>
        <uri>http://monolog.spanstyle.com/</uri>
    </author>
    
        <category term="日記" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="movabletype" label="MovableType" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ずんこ様" label="ずんこ様" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://monolog.spanstyle.com/">
        <![CDATA[<p>MT3.2のころにはなかった「ウェブページ」を書いてみたのに全然反映してくれない（Page Not Foundになる）。「おかしいな？」と思い、今日の nightly build （MTOS-4.1-en-release-29-r1274-20080118.tar.gz）で上書きしてみたらちゃんと出るようになった。</p>

<p>上書きアップグレードの影響を確認してみたところ、「Calendar」や「Creative Commons」といった英語記述のウィジェットが増殖してしまった模様。（もちろん日本語記述の「カレンダー」「クリエイティブ・コモンズ」ウィジェットも存在してる）</p>

<p>「完成度の高いMovableTypeをベースにしてるんだから、 nightly build でも問題ないでしょ」とタカをくくってインストールしてしまったけど、その代償として意図せず人柱になっていたようだ。他にも気づかないところで何かが起こっていそうで、ちょっと怖い。</p>

<p><a href="http://zblog.spanstyle.com">大勢の隠れファンが確認されているずんこ様のブログ</a>も一緒にアップグレードしなかったのが不幸中の幸いだった。</p>]]>
        
    </content>
</entry>

</feed>