<?xml version="1.0" encoding="utf-8" standalone="no"?><feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Rewish]]></title>
  <subtitle type="html"><![CDATA[僕の個人的なほーむぺーじです。]]></subtitle>
  <link href="https://rewish.jp/atom.xml" rel="self"/>
  <link href="https://rewish.jp/"/>
  <updated>2022-11-20T17:23:55+09:00</updated>
  <id>https://rewish.jp</id>

  <author>
    <name>rewish</name>
  </author>


  <xhtml:meta content="noindex" name="robots" xmlns:xhtml="http://www.w3.org/1999/xhtml"/><entry>
    <title type="html"><![CDATA[HP ProLiant MicroServerにUbuntuを入れてNASを構築]]></title>
    <link href="https://rewish.jp/blog/tech/build_nas_with_microserver"/>
    <updated>2014-04-28T00:00:00+09:00</updated>
    <id>/blog/tech/build_nas_with_microserver</id>

    <summary type="html"><![CDATA[HP ProLiant MicroServerにUbuntu Serverを入れてNASを構築する方法を紹介。]]></summary>
    <content type="html" xml:base="https://rewish.jp/blog/tech/build_nas_with_microserver"><![CDATA[<p><a href="http://www.amazon.co.jp/gp/product/B00HJ2FAMA/ref=as_li_ss_tl?ie=UTF8&amp;camp=247&amp;creative=7399&amp;creativeASIN=B00HJ2FAMA&amp;linkCode=as2&amp;tag=rewish-22">HP ProLiant MicroServer Turion II NEO N54L</a>に、Ubuntu Serverを入れてNASを構築したので、わりと久しぶりのブロギング。</p>

<h2 id="section">取り付け</h2>

<p>大まかな部分は<a href="http://kowloonet.org/memo/tech/ms_hw_setup.html">HP Microserverの組み上げ - インフラ検証覚書</a>が写真付きで分かりやすい。</p>

<h3 id="section-1">メモリ</h3>

<p>メモリの取り付けというか、マザーボードを外すのがそれなりに面倒くさいので、メモリの増設なども含め、マザーボードに対してやるべきことはまとめてやっておくのが良さそう。</p>

<p><a href="http://www.amazon.co.jp/gp/product/B002T3JN0Y/ref=as_li_ss_tl?ie=UTF8&amp;camp=247&amp;creative=7399&amp;creativeASIN=B002T3JN0Y&amp;linkCode=as2&amp;tag=rewish-22">Kingston 4GB×2枚組 KVR1333D3E9SK2/8G</a></p>

<h3 id="hdd">HDD</h3>

<p>ハードディスクの取り付けはスーパー楽。蓋のところに固定用のネジが付いてるのが面白い。シャレオツ。</p>

<p>2TBまでしか認識しないようなので、2TB*2のRAID1で組んでみた。ちなみにRAIDはUbuntuのソフトウェアRAID。</p>

<p><a href="http://www.amazon.co.jp/gp/product/B008P56QTG/ref=as_li_ss_tl?ie=UTF8&amp;camp=247&amp;creative=7399&amp;creativeASIN=B008P56QTG&amp;linkCode=as2&amp;tag=rewish-22">WD Red 3.5inch IntelliPower 2.0TB 64MBキャッシュ SATA3.0 WD20EFRX</a></p>

<h3 id="remote-access-card-rac">Remote Access Card (RAC)</h3>

<p>サーバをそんなに遠くには置かないので、買うかどうか悩んだけど買って正解、大正解。</p>

<p>LANケーブルを繋げばWebブラウザから操作が可能になるので、モニタやキーボードを繋ぐ必要がない。後述するVirtual Media機能も素晴らしい。</p>

<p>MicroServerに給電を始めればRACにアクセスできるようになる。初期設定ではDHCPでIPを取得するので、その辺は適当に設定するのがいいでしょうね。</p>

<p><a href="http://www.amazon.co.jp/gp/product/B0081CQSK0/ref=as_li_ss_tl?ie=UTF8&amp;camp=247&amp;creative=7399&amp;creativeASIN=B0081CQSK0&amp;linkCode=as2&amp;tag=rewish-22">HP ProLiant MicroServer用 リモートアクセスカード</a></p>

<h2 id="os">OSをインストール</h2>

<p>光学ドライブが無いので普通にやるとそれなりに面倒くさいが、RACのVirtual Media機能を使えばISOイメージでインストールできる。</p>

<ol>
  <li>MicroServerに給電開始！（まだ起動はしない）</li>
  <li>RACの管理メニューからvKVM &amp; vMediaへ移動</li>
  <li>VM Viewerを起動</li>
  <li>Add ImageでOSのISOを追加</li>
  <li>MicroServerの電源を入れてOSをインストール</li>
</ol>

<p>インストールの操作もRACのKVM Viewer上で行える。</p>

<h2 id="section-2">その後</h2>

<p>OSがインストールできれば、あとはいつもどおりのUbuntuなので、NetatalkやSambaを入れてファイルサーバを構築すれば、NASとしての要件は満たせる。</p>

<p>ファイルサーバの他、MediaTombでDLNAサーバを構築したり、Jenkinsでおっさんを構築したり、様々な選択肢があるのも自作サーバの利点と言えるでしょう！</p>
]]></content>
  </entry>

  <entry>
    <title type="html"><![CDATA[指定した背景画像をx秒毎に切り替えるjQueryプラグイン]]></title>
    <link href="https://rewish.jp/blog/releases/jquery_bg_switcher"/>
    <updated>2013-07-30T00:00:00+09:00</updated>
    <id>/blog/releases/jquery_bg_switcher</id>

    <summary type="html"><![CDATA[img要素ではなく背景画像(background-image)を入れ替えるプラグイン.]]></summary>
    <content type="html" xml:base="https://rewish.jp/blog/releases/jquery_bg_switcher"><![CDATA[<p>img要素ではなく背景画像（background-image）を切り替えるjQueryプラグインです。</p>

<p>2013年7月29日にバージョン0.4.0をリリースしました。一から書きなおして、切り替え方法など色々改善しているので、良ければ使ってみてください。</p>

<h2 id="section">ダウンロード</h2>

<p><a href="https://raw.github.com/rewish/jquery-bgswitcher/master/jquery.bgswitcher.js">jquery.bgswitcher.js</a></p>

<p>開発リポジトリは<a href="https://github.com/rewish/jquery-bgswitcher">rewish/jquery-bgswitcher · GitHub</a></p>

<h3 id="section-1">依存ライブラリ</h3>

<p>jQuery 1.7.x以上が必要です。</p>

<h3 id="section-2">ライセンス</h3>

<p>MIT License</p>

<h2 id="section-3">主な機能</h2>

<ul>
  <li>エフェクト付きの背景切り替え</li>
  <li>切り替えの制御（開始/停止/リセット）</li>
  <li>ファイル名の連番自動読み込み</li>
  <li>画像のプリロード</li>
</ul>

<h2 id="section-4">デモ</h2>

<p><a href="http://rewish.github.io/jquery-bgswitcher/">Demo - jQuery.BgSwitcher</a></p>

<h2 id="section-5">使用方法</h2>

<div class="highlight"><pre><code class="html"><span class="nt">&lt;div</span> <span class="na">class=</span><span class="s">&quot;box&quot;</span><span class="nt">&gt;</span>
  <span class="nt">&lt;p&gt;</span>Lorem ipsum dolor sit amet.<span class="nt">&lt;/p&gt;</span>
<span class="nt">&lt;/div&gt;</span>
</code></pre></div>

<div class="highlight"><pre><code class="js"><span class="nx">$</span><span class="p">(</span><span class="s2">&quot;.box&quot;</span><span class="p">).</span><span class="nx">bgswitcher</span><span class="p">({</span>
  <span class="nx">images</span><span class="o">:</span> <span class="p">[</span><span class="s2">&quot;pic1.jpg&quot;</span><span class="p">,</span> <span class="s2">&quot;pic2.jpg&quot;</span><span class="p">,</span> <span class="s2">&quot;pic3.jpg&quot;</span><span class="p">],</span>
  <span class="p">...</span> <span class="err">その他の設定</span> <span class="p">...</span>
<span class="p">});</span>
</code></pre></div>

<h2 id="section-6">設定</h2>

<table>
  <thead>
    <tr>
      <th>キー</th>
      <th>型</th>
      <th>初期値</th>
      <th>説明</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>images</td>
      <td>Array</td>
      <td>[]</td>
      <td>切り替える背景画像を配列で指定</td>
    </tr>
    <tr>
      <td>interval</td>
      <td>number</td>
      <td>5000</td>
      <td>切り替えの間隔</td>
    </tr>
    <tr>
      <td>start</td>
      <td>boolean</td>
      <td>true</td>
      <td><code>$.fn.bgswitcher(config)</code>をコールした時に切り替えを開始する</td>
    </tr>
    <tr>
      <td>loop</td>
      <td>boolean</td>
      <td>true</td>
      <td>切り替えをループする</td>
    </tr>
    <tr>
      <td>shuffle</td>
      <td>boolean</td>
      <td>false</td>
      <td>背景画像の順番をシャッフルする</td>
    </tr>
    <tr>
      <td>effect</td>
      <td>string</td>
      <td>fade</td>
      <td>エフェクトの種類</td>
    </tr>
    <tr>
      <td>duration</td>
      <td>number</td>
      <td>1000</td>
      <td>エフェクトの時間</td>
    </tr>
    <tr>
      <td>easing</td>
      <td>string</td>
      <td>swing</td>
      <td>エフェクトのイージング</td>
    </tr>
  </tbody>
</table>

<h2 id="section-7">エフェクトの種類</h2>

<h3 id="section-8">組み込みのエフェクト</h3>

<ul>
  <li>fade</li>
  <li>blind</li>
  <li>clip</li>
  <li>slide</li>
  <li>drop</li>
  <li>hide（エフェクト無し）</li>
</ul>

<h3 id="section-9">エフェクトを追加する</h3>

<p>まず、<code>$.BgSwitcher.switchHandlers</code>にエフェクト関数を追加します。</p>

<div class="highlight"><pre><code class="js"><span class="c1">// 第一引数でエフェクト用の要素を受け取れます。</span>
<span class="nx">$</span><span class="p">.</span><span class="nx">BgSwitcher</span><span class="p">.</span><span class="nx">switchHandlers</span><span class="p">.</span><span class="nx">extraSlide</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">$el</span><span class="p">)</span> <span class="p">{</span>
  <span class="nx">$el</span><span class="p">.</span><span class="nx">animate</span><span class="p">({</span><span class="nx">right</span><span class="o">:</span> <span class="o">-</span><span class="nx">$el</span><span class="p">.</span><span class="nx">width</span><span class="p">()},</span> <span class="k">this</span><span class="p">.</span><span class="nx">config</span><span class="p">.</span><span class="nx">duration</span><span class="p">,</span> <span class="k">this</span><span class="p">.</span><span class="nx">config</span><span class="p">.</span><span class="nx">easing</span><span class="p">);</span>
<span class="p">};</span>
</code></pre></div>

<p>つぎに、追加したエフェクト名を指定します。</p>

<div class="highlight"><pre><code class="js"><span class="nx">$</span><span class="p">(</span><span class="s2">&quot;.box&quot;</span><span class="p">).</span><span class="nx">bgswitcher</span><span class="p">({</span>
  <span class="nx">images</span><span class="o">:</span> <span class="p">[</span><span class="s2">&quot;pic1.jpg&quot;</span><span class="p">,</span> <span class="s2">&quot;pic2.jpg&quot;</span><span class="p">,</span> <span class="s2">&quot;pic3.jpg&quot;</span><span class="p">],</span>
  <span class="nx">effect</span><span class="o">:</span> <span class="s2">&quot;extraSlide&quot;</span>
<span class="p">});</span>
</code></pre></div>

<h2 id="section-10">メソッドの呼び出し</h2>

<p>jQuery UI Widgetライクのメソッドコールをサポートしています。</p>

<div class="highlight"><pre><code class="js"><span class="nx">$</span><span class="p">(</span><span class="s2">&quot;.box&quot;</span><span class="p">).</span><span class="nx">bgswitcher</span><span class="p">(</span><span class="s2">&quot;メソッド名&quot;</span><span class="p">);</span>
</code></pre></div>

<p>上記の方法で様々なメソッドをコールすることができます。</p>

<table>
  <thead>
    <tr>
      <th>メソッド名</th>
      <th>説明</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>start</td>
      <td>切り替えを開始</td>
    </tr>
    <tr>
      <td>stop</td>
      <td>切り替えを停止</td>
    </tr>
    <tr>
      <td>toggle</td>
      <td>切り替えの開始/停止をトグル</td>
    </tr>
    <tr>
      <td>reset</td>
      <td>切り替えを最初の状態に戻す</td>
    </tr>
    <tr>
      <td>next</td>
      <td>次の切り替えへ</td>
    </tr>
    <tr>
      <td>prev</td>
      <td>前の切り替えへ</td>
    </tr>
    <tr>
      <td>destroy</td>
      <td>BgSwitcherを破棄</td>
    </tr>
  </tbody>
</table>

<h2 id="section-11">サポート情報</h2>

<p>不具合の報告や要望は<a href="https://github.com/rewish/jquery-bgswitcher/issues">Issues</a>にお願いします。</p>

]]></content>
  </entry>

  <entry>
    <title type="html"><![CDATA[WordPressにEmmetを導入するプラグイン「WP Emmet」]]></title>
    <link href="https://rewish.jp/blog/releases/wp_emmet"/>
    <updated>2013-07-07T00:00:00+09:00</updated>
    <id>/blog/releases/wp_emmet</id>

    <summary type="html"><![CDATA[WordPressの管理画面でEmmetを使えるようにするプラグインをリリース。]]></summary>
    <content type="html" xml:base="https://rewish.jp/blog/releases/wp_emmet"><![CDATA[<p>Zen Codingの次期バージョンである<a href="http://emmet.io/">Emmet</a>を、WordPressの管理画面に導入するプラグインを作りました。つまり以前作った<a href="wp_zen_coding">WP Zen-Coding</a>の後継プラグインです。</p>

<p>バージョン0.2からはオプションで<a href="http://codemirror.net/">CodeMirror</a>にも対応しているので、CodeMirrorを導入する目的でも使えます。たぶん。</p>

<!--more-->

<h2 id="section">ダウンロード</h2>

<p><a href="http://downloads.wordpress.org/plugin/wp-emmet.zip">WP Emmet</a> - 0.2.x</p>

<p>開発リポジトリは<a href="https://github.com/rewish/wp-emmet">rewish/wp-emmet</a>です。</p>

<h2 id="section-1">ライセンス</h2>

<p>GPLv2 or later</p>

<h2 id="emmet">Emmetの設定</h2>

<p>設定は【設定】メニューの【Emmet】より行えます。</p>

<p>【コードカラーリング】を有効にすると各textareaにCodeMirrorが適用されます。</p>

<h2 id="section-2">サポート情報</h2>

<p>不具合の報告や要望は<a href="https://github.com/rewish/wp-emmet/issues">Issues</a>にお願いします。</p>

<h2 id="section-3">おすすめ</h2>

<ul>
  <li><a href="http://kojika17.com/2012/09/zen-coding-next-emmet.html">Zen-Codingの次期バージョン、Emmet について｜Web Design KOJIKA17</a></li>
</ul>
]]></content>
  </entry>

  <entry>
    <title type="html"><![CDATA[WordPressのはてな記法プラグイン「WP Hatena Notation」]]></title>
    <link href="https://rewish.jp/blog/releases/wp_hatena_notation"/>
    <updated>2013-06-17T00:00:00+09:00</updated>
    <id>/blog/releases/wp_hatena_notation</id>

    <summary type="html"><![CDATA[WordPressにはてな記法を導入するプラグイン「WP Hatena Notation」をリリース！]]></summary>
    <content type="html" xml:base="https://rewish.jp/blog/releases/wp_hatena_notation"><![CDATA[<p><a href="http://d.hatena.ne.jp/">はてなダイアリー</a>でおなじみのはてな記法。慣れるとさくさく記事が書けてなかなか良いので、PHPのはてな記法パーサ<a href="https://github.com/anatoo/HatenaSyntax">HatenaSyntax</a>を利用してWordPressのプラグインを作ってみました。</p>

<p>手軽に導入できるので、はてな記法が大好きなWordPressユーザーはぜひ使ってみてください。</p>

<!-- more -->

<h2 id="section">ダウンロード</h2>

<p><a href="http://downloads.wordpress.org/plugin/wp-hatena-notation.zip">WP Hatena Notation</a> - 2.0.x</p>

<p>開発リポジトリは<a href="https://github.com/rewish/wp-hatena-notation">rewish/wp-hatena-notation</a>です。</p>

<h2 id="section-1">ライセンス</h2>

<p>GPLv2 or later</p>

<h2 id="section-2">サポートする記法</h2>

<p>使用可能な記法についてはHatenaSyntaxに依存しています。詳しくは<a href="http://nimpad.jp/hatenasyntax/%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E8%A8%98%E6%B3%95">サポートする記法 - HatenaSyntaxマニュアル</a>を参照してください。</p>

<p>キーワード記法については <em>タグページへのリンク</em> となります。</p>

<h2 id="section-3">はてな記法の設定</h2>

<p>【設定】メニューの【はてな記法】から設定を変更できます。</p>

<h3 id="section-4">バージョン2.0未満から利用している場合</h3>

<p>無効日指定のオプションはバージョン2.0から廃止しました。代わりに記事単位ではてな記法の使用/不使用を選択できる機能を追加しています。</p>

<p>2.0未満で無効日の指定をおこなっていた場合、アップデート時に指定日以前の記事を自動で不使用設定にします。</p>

<p>2.0系で不都合がある場合は<a href="http://downloads.wordpress.org/plugin/wp-hatena-notation.1.4.1.zip">旧バージョン（1.4.1）</a>をご利用下さい。</p>

<h2 id="section-5">サポート情報</h2>

<p>不具合報告やご要望は<a href="&#109;&#097;&#105;&#108;&#116;&#111;:&#114;&#101;&#119;&#105;&#115;&#104;&#046;&#111;&#114;&#103;&#064;&#103;&#109;&#097;&#105;&#108;&#046;&#099;&#111;&#109;">メール</a>や<a href="https://github.com/rewish/wp-hatena-notation/issues">Issues</a>などからいただければ幸いです。</p>
]]></content>
  </entry>

  <entry>
    <title type="html"><![CDATA[Macの言語を日本語以外にするとIllustratorが起動しない問題]]></title>
    <link href="https://rewish.jp/blog/misc/mac_ai_lang"/>
    <updated>2013-03-07T00:00:00+09:00</updated>
    <id>/blog/misc/mac_ai_lang</id>

    <summary type="html"><![CDATA[Macの言語設定を日本語以外（英語など）にしているとAdobe Illustratorが起動しない問題を華麗に解決する方法]]></summary>
    <content type="html" xml:base="https://rewish.jp/blog/misc/mac_ai_lang"><![CDATA[<p>Macで言語設定を日本語以外（英語など）にしているとAdobe Illustratorが正常に起動してくれない問題があって、Adobe Illustratorを使うときは毎回日本語に戻して使っていた。</p>

<p>しかし、これはどう考えても面倒くさすぎて鼻血が出ちゃいそうなので、<strong>アプリ起動時の言語を個別に指定</strong>して問題解決を図る。</p>

<!-- more -->

<h2 id="section">問題の解決方法</h2>

<p>Macにはアプリ起動時の言語を個別に設定する方法が標準で用意されている。素晴らしい。</p>

<p>やり方はターミナルを起動して以下のコマンドを打つだけ。</p>

<div class="highlight"><pre><code class="bash">defaults write com.adobe.illustrator AppleLanguages <span class="s1">&#39;(&quot;ja&quot;)&#39;</span>
</code></pre></div>

<p>以後、Adobe Illustratorは日本語で起動するようになる。素晴らしい。</p>
]]></content>
  </entry>

  <entry>
    <title type="html"><![CDATA[ビッグウェーブな冷やし中華始めました]]></title>
    <link href="https://rewish.jp/blog/misc/site_ver_4"/>
    <updated>2013-03-06T00:00:00+09:00</updated>
    <id>/blog/misc/site_ver_4</id>

    <summary type="html"><![CDATA[サイトのリニューアル（Version 4）]]></summary>
    <content type="html" xml:base="https://rewish.jp/blog/misc/site_ver_4"><![CDATA[<p>feeds.feedburner.jpが死んだからかどうかは分かりませんが、なんだかんだで長期間放置していたブログを新たに作り直しました。</p>

<p><a href="1st_post">初代冷やし中華</a>からもうすぐ6年。時の流れの早さにビビリすぎて文章を書くのが億劫ですが、簡単に変更内容をまとめます。</p>

<h2 id="feed">Feed</h2>

<p>前述の通りfeeds.feedburner.jpが死んだので、代わりに<a href="/atom.xml">atom.xml</a>を使うのがナウいです。</p>

<p><a href="http://feeds.feedburner.com/rewish">feeds.feedburner.com</a>は生きているので、そっちを既に使っている場合は別にナウくないです。</p>

<h2 id="jekyll">Jekyll</h2>

<p>ビッグウェーブに乗っとく系男子なので、HTMLのジェネレータに今流行りのJekyllを採用してみました。Jekyllの良さについては僕が語るまでもないですが、とりあえずRuby楽しいです。</p>

<p>自作のJekyllプラグインを含むソースコード一式はGitHubで公開していますので、何かあればPull Requestしてください。ありがとうございます。</p>

<p><a href="https://github.com/rewish/rewish.jp">rewish/rewish.jp · GitHub</a></p>

<h2 id="nginx">Nginx</h2>

<p>Jekyllを使う場合はGitHub Pagesを使うことが多いですが、今回は主にURL的な理由で自前のサーバで動かすことにしました。</p>

<p>WebサーバにはNginxを採用。というか他で既に使ってたので相乗り。結果的に色々良かったのでまた後日まとめられたらいいのにな。</p>

<h2 id="section">ドメイン</h2>

<p>今までrewish.orgとrewish.jpのドメインを別々に使用していましたが、作り直しを機にrewish.jp一本に絞ることにしました。</p>

<p>メールは両方受信可能です。ただ、ドメイン使用料は.JPの方が高いので、rewish.jpに送る方がお得感があります。</p>

<h2 id="section-1">最後に</h2>

<p>他にも色々あったような気がしますが、とりあえず形になって良かったです。あでゅー。</p>
]]></content>
  </entry>

  <entry>
    <title type="html"><![CDATA[Macでマウスの加速を完全に切る方法]]></title>
    <link href="https://rewish.jp/blog/misc/cursorsense"/>
    <updated>2012-08-31T00:00:00+09:00</updated>
    <id>/blog/misc/cursorsense</id>

    <summary type="html"><![CDATA[Macでマウスの加速を完全に切るツール「カーソルセンス」の紹介]]></summary>
    <content type="html" xml:base="https://rewish.jp/blog/misc/cursorsense"><![CDATA[<p>Macでマウスを使うときに違和感を感じている人って結構多いと思うんですよ。違和感の原因は加速なんですけど、Mac標準のマウス設定では切ることができません。</p>

<p>そんな厄介な加速を完全に切るナイスなツールを類まれなググり力で発見しました。</p>

<p><a href="http://plentycom.jp/cursorsense/">カーソルセンス</a></p>

<p>僕は加速度0.001, 速度1700にしてスーパー快適人生を送っています。</p>

<p>テンションが上がったので久しぶりにブログを書いてみました。あでゅー。</p>
]]></content>
  </entry>

  <entry>
    <title type="html"><![CDATA[@5509にDMを送れるMacアプリを作りました]]></title>
    <link href="https://rewish.jp/blog/releases/dm09"/>
    <updated>2011-12-14T00:00:00+09:00</updated>
    <id>/blog/releases/dm09</id>

    <summary type="html"><![CDATA[Twitterでは数字アカウントにDMが送れない問題があるので、@5509にDMを送信する専用アプリを開発/公開。]]></summary>
    <content type="html" xml:base="https://rewish.jp/blog/releases/dm09"><![CDATA[<p>Twitterのscreen_nameが数字だけだと「d screen_name」としてもDMが送れないらしいですね。jQueryな彼（@<a href="http://twitter.com/5509">5509</a>）もそんな数字アカウントの1人です。</p>

<p>てな訳で、@5509にDMを送るためだけのMacアプリを作ったので公開します。</p>

<!-- more -->

<h2 id="section">ダウンロード</h2>

<p><a href="files/dm09/DM09.zip">DM09.app</a> - Version 0.1.1</p>

<h2 id="section-1">作った理由</h2>

<p>Objective-Cが書きたかっただけとかそんなんじゃないです。</p>

<h2 id="section-2">裏技</h2>

<p><del datetime="2011-12-14T09:35:43+00:00">×ボタンを押すとメインウインドウが行方不明になります。</del></p>

<p>Version 0.1.1で使えなくなりました。残念。</p>

<h2 id="section-3">謝辞</h2>

<ul>
  <li><a href="http://code.google.com/p/oauthconsumer/">OAuthConsumer</a> - OAuthライブラリ</li>
  <li><a href="https://sites.google.com/site/yorufukurou/">夜フクロウ</a> - OAuth部分のUI及び実装(公開されていないので推測ですが)</li>
  <li><a href="http://twitter.com/hiloki">ひろきんぐ隊長</a> - アイコン作成</li>
</ul>

<p>ありがとうございました。</p>
]]></content>
  </entry>

  <entry>
    <title type="html"><![CDATA[Herokuを利用したナントカstagramの作り方]]></title>
    <link href="https://rewish.jp/blog/tech/heroku_nantokastagram"/>
    <updated>2011-04-15T00:00:00+09:00</updated>
    <id>/blog/tech/heroku_nantokastagram</id>

    <summary type="html"><![CDATA[Herokuを利用してナントカstagramを作る方法をザックリ紹介。]]></summary>
    <content type="html" xml:base="https://rewish.jp/blog/tech/heroku_nantokastagram"><![CDATA[<p>先週の水曜日に@<a href="https://twitter.com/hiloki">hiloki</a>と一緒に作った <a href="http://shiba.heroku.com/">Shibastagram - 柴犬たくさん、しばすたぐらむ</a> というモフモフ系癒しWebをリリースしました。</p>

<p>スクロールすると柴犬がモリモリ出てきて無限に癒されるナイスWeb。</p>

<p>今回はソースコード自体を公開し、Shibastagramのチワワ版「<a href="http://chihua.heroku.com/">chihuastagram - チワワたくさん、チワスタグラム</a>」を作りながら、ナントカstagramの作り方を紹介したいと思います。</p>

<p>※記事中のChihuaやChihuastagramは自分のナントカstagramに合わせて読み替えて下さい。</p>

<!-- more -->

<h2 id="section">準備</h2>

<p>早速いってみましょう。</p>

<p>注意) 以下の内容はMac環境を前提としています。UNIX/Linux系のOSを使ってる人は問題無いと思いますが、Windowsの人はRubyやRubyGemsなど必要なモノを別途インストールする必要があります。あと全部ターミナルで作業です。</p>

<h3 id="heroku">Herokuを使う準備</h3>

<p><a href="http://heroku.com/">Heroku (ハーオークー/ヘロク)</a>は最近流行のPaaS。DeployにGitを使っているのが特徴でしょうか。Rubyアプリケーションを簡単に動かせるのでRubyistを使いまくってるらしい。</p>

<p>ユーザ登録を済ませた後、以下のコマンドを実行してherokuコマンドをインストールします。</p>

<div class="highlight"><pre><code class="bash">sudo gem install heroku
</code></pre></div>

<h3 id="gem">必要なGemライブラリをインストール</h3>

<p>以下のコマンドを打てばきっと大体OK！</p>

<div class="highlight"><pre><code class="bash">sudo gem install instagram
sudo gem install activerecord
sudo gem install json
sudo gem install sqlite3
sudo gem install sinatra
sudo gem install haml
</code></pre></div>

<h3 id="git">Gitをインストール</h3>

<p>とりあえずGitが無いと始まりません。</p>

<p>Gitのインストール方法とか書き出したら大変なことになるので、調べるか、お近くのプログラマーさんに質問するのが良いと思います。GitHubでリポジトリを作ると表示されるチュートリアル的なモノもオススメ。</p>

<h2 id="section-1">各種設定</h2>

<h3 id="shibastagram">Shibastagramのソースコードを入手</h3>

<p>Chihuastagramの元となるソースコードを入手します。</p>

<p><a href="https://github.com/rewish/Shibastagram">rewish/Shibastagram - GitHub</a></p>

<p>上記のリポジトリを<strong>forkしてからclone</strong>する。</p>

<div class="highlight"><pre><code class="bash">git clone git://github.com/ユーザー名/Shibastagram.git chihuastagram
</code></pre></div>

<p>cloneし終わったら対象ディレクトリに移動しておく。</p>

<div class="highlight"><pre><code class="bash"><span class="nb">cd </span>chihuastagram
</code></pre></div>

<h3 id="heroku-1">Herokuにアプリケーションを作成</h3>

<p>以下のコマンドを打つと自動でHerokuのアプリが作成される。アプリ名.heroku.comみたいなドメインになる。</p>

<div class="highlight"><pre><code class="bash">heroku create アプリ名
</code></pre></div>

<p>初めての場合はHerokuに登録したメールアドレスとパスワードを入力してって言われるので入力してください。</p>

<h3 id="instagram-apiclient-id">Instagram APIのClient IDを取得</h3>

<p>まず<a href="http://instagr.am/developer/">http://instagr.am/developer/</a>にログインする。アカウントが無ければ作る。</p>

<p><a href="http://instagr.am/developer/manage/">http://instagr.am/developer/manage/</a>から<strong>Register a New Client</strong>を選択してクライアントを追加する。</p>

<p>追加したら<strong>CLIENT ID</strong>というのが出てくるので、<code>config/environment.rb</code>のCLIENT_IDのところに貼り付ける。</p>

<div class="highlight"><pre><code class="ruby"><span class="c1"># Client ID</span>
<span class="no">CLIENT_ID</span> <span class="o">=</span> <span class="s1">&#39;こぴぺぺぺぺぺぺたり&#39;</span>
</code></pre></div>

<h3 id="section-2">取得したい写真のタグを設定</h3>

<p>どんな方法で柴犬の画像を集めてるの的な質問があったけど、<a href="http://bijostagram.com/">Bijostagram</a>とは違って、写真に付いてるタグで検索してるだけです。</p>

<p>目的のタグを<code>config/environment.rb</code>のTARGET_TAGSに追加していく。複数のタグを指定できますが、増やしすぎるといっぱいアクセスして取得時間が長くなります。</p>

<div class="highlight"><pre><code class="ruby"><span class="c1"># Target tags [&#39;shiba&#39;, &#39;shibainu&#39;, &#39;shibadog&#39;, &#39;shibas&#39;]</span>
<span class="no">TARGET_TAGS</span> <span class="o">=</span> <span class="o">[</span><span class="s1">&#39;chihuahua&#39;</span><span class="p">,</span> <span class="s1">&#39;chiwawa&#39;</span><span class="o">]</span>
</code></pre></div>

<h2 id="section-3">ローカルでテスト実行</h2>

<p>アプリのルートディレクトリで以下のコマンドを打ってみる。</p>

<div class="highlight"><pre><code class="bash">ruby application.rb
</code></pre></div>

<p><a href="http://localhost:4567/">http://localhost:4567/</a>にアクセスするとそれっぽいモノが見えます。</p>

<p>動いているのが確認出来たら<strong>Ctrl + C</strong>を押してコマンドを終了させます。</p>

<h3 id="section-4">データベースの設定</h3>

<p><code>config/database.yml.default</code>をコピーして<code>config/database.yml</code>を作成。</p>

<p>デフォルトではSQLite3を使うようになっていますが、MySQLなどを使いたい場合は設定を変更して下さい。この設定はローカルのみで有効です。</p>

<p>データベースの設定が完了したら以下のコマンドを実行してテーブルを作る。</p>

<div class="highlight"><pre><code class="bash">rake db:migrate
</code></pre></div>

<h3 id="instagram">Instagramのデータを取得</h3>

<p>以下のコマンドを実行すると、指定したタグのデータを取得し始めます。</p>

<div class="highlight"><pre><code class="bash">rake hh:update
</code></pre></div>

<p>終わったらもう一度ruby application.rbしてブラウザで確認。完全に自分用ならココで終わっても問題無いですね。</p>

<h2 id="section-5">カスタマイズ</h2>

<p>HTMLは<code>views</code>ディレクトリの中にあるファイルを適当にイジる。</p>

<p>他は雰囲気で感じ取って適当に修正して下さい。</p>

<h2 id="section-6">デプロイ</h2>

<p>Herokuにアプリケーションを配備します。deploy自体はGitでpushするだけなので凄くシンプル。</p>

<h3 id="section-7">最初に1回だけ実行するコマンド</h3>

<p>最初に一回だけ以下のコマンドを実行して、Heroku側にmasterブランチを作るのと、データベースのマイグレーション、データ取得を行います。</p>

<div class="highlight"><pre><code class="bash">git push heroku master
heroku rake db:migrate
heroku rake hh:update
</code></pre></div>

<h3 id="section-8">2回目以降に実行するコマンド</h3>

<p>2回目以降は単純にpushするだけで変更が反映される。</p>

<div class="highlight"><pre><code class="bash">git push heroku
</code></pre></div>

<h3 id="section-9">動作確認</h3>

<p>直接 http://アプリ名.heroku.com/ にアクセスするか、以下のコマンドを叩く。</p>

<div class="highlight"><pre><code class="bash">heroku open
</code></pre></div>

<h2 id="cron">Cronの設定</h2>

<p>Herokuの無料版ではCronを一日一回しか回せないので、設定した時間毎にURLを叩いてくれる<a href="http://www.cron-job.org/cgi-bin/cronweb">cron-job.org</a>を利用して定期的にデータ取得処理を実行します。データ取得用のURLを勝手に叩かれても困るので、Tokenを設定してそれが一致しない場合はURL自体を無効化する感じです。</p>

<p>以下のコマンドでトークン文字列が表示されるのでメモる。</p>

<div class="highlight"><pre><code class="bash">rake hh:token
</code></pre></div>

<p>メモったトークン文字列を<code>config/environment.rb</code>のCRON_TOKENに貼り付ける。</p>

<div class="highlight"><pre><code class="ruby"><span class="c1"># Cron token</span>
<span class="no">CRON_TOKEN</span> <span class="o">=</span> <span class="s1">&#39;トークン文字列ペタリ&#39;</span>
</code></pre></div>

<dl>
  <dt>実際にcron-job.orgで叩くURL</dt>
  <dd>http://アプリ名.heroku.com/tasks/update?token=トークン文字列</dd>
</dl>

<p>cron-job.orgの設定については <a href="http://designblog.ecstudio.jp/tool/twitter-bot-memo.html"> プログラミングできないデザイナーでも制作できるTwitter bot 制作メモ - EC studio デザインブログ</a>が参考になると思います。</p>

<p>回すタイミングは取得内容によりますが、1時間〜2時間に一回くらいで大丈夫じゃないでしょうか。</p>

<p>以上です。</p>

<ul>
  <li><a href="http://shiba.heroku.com/"> Shibastagram - 柴犬たくさん、しばすたぐらむ </a></li>
  <li><a href="http://chihua.heroku.com/">chihuastagram - チワワたくさん、チワスタグラム</a></li>
</ul>
]]></content>
  </entry>

  <entry>
    <title type="html"><![CDATA[SubversionのリポジトリをGitで扱う]]></title>
    <link href="https://rewish.jp/blog/tech/git_svn"/>
    <updated>2011-03-10T00:00:00+09:00</updated>
    <id>/blog/tech/git_svn</id>

    <summary type="html"><![CDATA[GitでSubversionのリポジトリを扱えるようにするコマンドgit-svnの使い方。]]></summary>
    <content type="html" xml:base="https://rewish.jp/blog/tech/git_svn"><![CDATA[<p>svnコマンドはログが見づらいし、コミットしたらリモートにソッコーで飛んで行くし、Gitに慣れた僕には凄く扱いづらい。てことでgit-svnネタです。</p>

<p>一年くらい前からずっと下書き状態だったのを思い出したので公開。他にもコレ系の記事は沢山あるけど自分用のメモとして。ね。</p>

<!-- more -->

<h2 id="svn">svnリポジトリからチェックアウト</h2>

<p>いつものcloneコマンドにsvnを付けるだけ。</p>

<div class="highlight"><pre><code class="bash">git svn clone -s http://svn.example.com/Project_Name/
</code></pre></div>

<p>-sオプションを付けると、svnリポジトリが <em>trunk</em> 、 <em>branches</em> 、 <em>tags</em> のような、お馴染みの構造だよって言うのをgitに教えられる。教えておくと、ブランチやタグがgitのリモートブランチとして扱えるようになるので便利。</p>

<p>また、 <em>trunk</em> 、 <em>branches</em> 、 <em>tags</em> の名称が一般的なモノとは異なる場合は、</p>

<div class="highlight"><pre><code class="bash">git svn clone http://svn.example.com/Project_Name/ -T trunkの名前 -b branchesの名前 -t tagsの名前
</code></pre></div>

<p>のように、-T、-b、-tオプションを付ければOK。</p>

<h2 id="section">コードを書く</h2>

<p>ファイルの追加や、ローカルへのコミットはいつものgitコマンドが使える。</p>

<div class="highlight"><pre><code class="bash">git add .
git commit -m <span class="s2">&quot;first commit&quot;</span>
</code></pre></div>

<p>ローカルブランチも切り放題。</p>

<div class="highlight"><pre><code class="bash">git branch ticket1
git checkout ticket1
</code></pre></div>

<p>や、</p>

<div class="highlight"><pre><code class="bash">git checkout -b ticket1
</code></pre></div>

<p>など。</p>

<h2 id="svn-1">svnリポジトリにコミット</h2>

<p>git pushのような勢いで。</p>

<div class="highlight"><pre><code class="bash">git svn dcommit
</code></pre></div>

<h2 id="svn-2">svnリポジトリの更新を取り込む</h2>

<p>svn updateのようなノリで。</p>

<div class="highlight"><pre><code class="bash">git svn rebase
</code></pre></div>

<p>ノリとか関係無いしって場合はfetchしてからmergeする。</p>

<div class="highlight"><pre><code class="bash">git svn fetch
git merge trunk
</code></pre></div>

<p>確認してからmergeできるので、こちらの方が安全かな。</p>

<h2 id="svn-3">svnリポジトリにタグやブランチを作成</h2>

<p>タグ、ブランチ共に、いつものコマンドにsvnを付けるだけ。</p>

<div class="highlight"><pre><code class="bash">git svn tag v0.1
git svn branch v1.0
</code></pre></div>

<h2 id="svnignore">svn:ignoreを取り込む</h2>

<p>無視するファイルの設定をgitに取り込むには、git svn show-ignoreの結果を.git/info/excludeに書き込むのが楽。</p>

<div class="highlight"><pre><code class="bash">git svn show-ignore &gt;&gt; .git/info/exclude
</code></pre></div>

<p>また、下記のコマンドを使えば自動で.gitignoreが作成される。svnリポジトリに.gitignoreは似合わないな、って場合は上記の方法でやるのが良さそう。</p>

<div class="highlight"><pre><code class="bash">git svn create-ignore
</code></pre></div>

<h2 id="section-1">認証情報</h2>

<p>認証情報は <code>~/.subversion/auth/svn.simple/</code> 内のファイルに保存されている。デフォルトの設定ではパスワードも平分で保存されるので、<code>~/.subversion/config</code>を書き換えてパスワードを保存しないようにする。</p>

<div class="highlight"><pre><code class="bash">vi ~/.subversion/config
</code></pre></div>

<div class="highlight"><pre><code class="bash"><span class="o">[</span>auth<span class="o">]</span>
store-passwords <span class="o">=</span> no
</code></pre></div>

<p>設定が終ったら<code>~/.subversion/auth/svn.simple/</code>内の該当ファイルを手動で削除する。</p>

<p>認証時に毎回パスワード打たないとダメだけど、パスワードが平文で保存される気持ち悪さに比べたらまだマシかな。</p>

<h2 id="section-2">属性設定</h2>

<p>git-svnからは属性の設定が出来ないっぽい？</p>

<h2 id="git">リポジトリごとGitにしちゃう</h2>

<p><a href="https://github.com/nirvdrum/svn2git">svn2git</a>で変換してGitのリポジトリにpushすればGitリポジトリに早変わり！</p>

<h2 id="section-3">おわり</h2>

<p>svnリポジトリとやり取りするコマンドを除けば、ほぼ普通のgitと変わらないですね。</p>
]]></content>
  </entry>

  <entry>
    <title type="html"><![CDATA[CakePHPのコンソールで初期データのインポート/エクスポート]]></title>
    <link href="https://rewish.jp/blog/releases/cakephp_data_shell"/>
    <updated>2011-02-28T00:00:00+09:00</updated>
    <id>/blog/releases/cakephp_data_shell</id>

    <summary type="html"><![CDATA[CakePHPのコンソールからデータのインポート/エクスポートが行えるようになるShellクラス。]]></summary>
    <content type="html" xml:base="https://rewish.jp/blog/releases/cakephp_data_shell"><![CDATA[<p>開発用のデータをチームで共有する仕組みがデフォルトでは無いっぽかったので、CakePHPのコンソールを使って、初期データのインポート/エクスポートを行うShellクラスを書いてみました。</p>

<p>仕組みは単純で、テーブルに入っているデータをCakePHPで扱えるデータ(Array)にして保存し、保存したデータをsaveメソッドを使って保存すると言った感じです。</p>

<!-- more -->

<h2 id="section">インストール</h2>

<p>コードはGitHubに置いていますので、<code>git clone</code>またはダウンロードして下さい。</p>

<p><a href="https://github.com/rewish/CakePHP-DataShell">CakePHP-DataShell</a></p>

<p>ダウンロードしたコードを、CakePHPのアプリケーションルート(appなど)以下に<code>venders/shells/data.php</code>をコピーすればインストールは完了。</p>

<h2 id="section-1">使い方</h2>

<p>仕組み上、まずはテーブルにデータを入力した方がスムーズです。</p>

<h3 id="section-2">エクスポート</h3>

<p>全てのテーブルのデータをエクスポートする場合は以下のようにする。</p>

<div class="highlight"><pre><code class="bash">cake data <span class="nb">export</span>
</code></pre></div>

<p>特定のテーブルのみエクスポートする場合は、<strong>モデル名</strong>または<strong>テーブル名</strong>を指定する。</p>

<div class="highlight"><pre><code class="bash">cake data <span class="nb">export </span>User
cake data <span class="nb">export </span>users
</code></pre></div>

<h3 id="section-3">インポート</h3>

<p>全てのデータをインポートする場合は以下のようにする。</p>

<div class="highlight"><pre><code class="bash">cake data import
</code></pre></div>

<p>特定のテーブルのみインポートする場合は、<strong>モデル名</strong>または<strong>テーブル名</strong>を指定する。</p>

<div class="highlight"><pre><code class="bash">cake data import User
cake data import users
</code></pre></div>
]]></content>
  </entry>

  <entry>
    <title type="html"><![CDATA[Skypeがおかしくなったらshared.xmlを削除すると大体直る]]></title>
    <link href="https://rewish.jp/blog/misc/skype_shared_xml"/>
    <updated>2011-01-24T00:00:00+09:00</updated>
    <id>/blog/misc/skype_shared_xml</id>

    <summary type="html"><![CDATA[Skypeのshared.xmlを削除する方法をWindows版とMac版それぞれ紹介。]]></summary>
    <content type="html" xml:base="https://rewish.jp/blog/misc/skype_shared_xml"><![CDATA[<p>皆さん、Skypeの画面共有機能使ってますか。ある日、僕のSkypeで画面共有が出来なくなりました。それどころかビデオ通話すら出来ません。困った。</p>

<p>でね、タイトルで答え全部言っちゃってますが、最終的にはSkypeのプロファイルディレクトリにあるshared.xmlを消したら直ったわけですよ。</p>

<p>shared.xmlについて調べてみると、他の不具合の場合でもコレが原因であることが多いみたいなので、お手元のSkypeがおかしくなった場合は是非一度試して見て下さい。</p>

<p>以下、shared.xmlの消し方をWindows・Macそれぞれ簡単に書いてみます。</p>

<!-- more -->

<h2 id="windows">Windowsの場合</h2>

<ol>
  <li>Skypeを終了する</li>
  <li><kbd>Windowsキー</kbd> + <kbd>Rキー</kbd>を押す</li>
  <li><code>%APPDATA%\Skype</code>と入力しEnterを押す</li>
  <li><strong>shared.xml</strong>をリネームまたは削除する</li>
  <li>Skypeを起動する</li>
  <li>不具合直ってるやったー</li>
</ol>

<h2 id="mac">Macの場合</h2>

<ol>
  <li>Skypeを終了する</li>
  <li>Finderを開く</li>
  <li><kbd>shift</kbd> + <kbd>command</kbd> + <kbd>Gキー</kbd>を押す</li>
  <li><code>~/Library/Application Support/Skype</code>と入力しEnterを押す</li>
  <li><strong>shared.xml</strong>をリネームまたは削除する</li>
  <li>Skypeを起動する</li>
  <li>不具合直ってるやったー</li>
</ol>

<p>ね？簡単でしょ？</p>
]]></content>
  </entry>

  <entry>
    <title type="html"><![CDATA[こんにちは、フリーランス]]></title>
    <link href="https://rewish.jp/blog/misc/hello_freelance"/>
    <updated>2010-11-02T00:00:00+09:00</updated>
    <id>/blog/misc/hello_freelance</id>

    <summary type="html"><![CDATA[2010年11月1日より個人事業主になりました。な報告。]]></summary>
    <content type="html" xml:base="https://rewish.jp/blog/misc/hello_freelance"><![CDATA[<p>10月末に開業届けを提出して11月1日付けで個人事業主になりました。</p>

<p>経緯としては、6月末で3年間勤めていた会社を退職し、紆余曲折を経てフリーランスとして活動することに決めました。大事な部分を端折った気がしますが、大体そんな感じです。</p>

<p>ちなみに屋号は <strong>Rewish (レウィッシュ)</strong>。名刺も作り直す予定なので、既に名刺交換させていただいた方には、改めてお渡ししたいと思います。</p>

<h2 id="section">できること</h2>

<p>今後どういった方向へ行くかは分かりませんが、</p>

<ul>
  <li>フロントエンド（JavaScriptもりもり）</li>
  <li>サーバサイド（Railsとかやりたい）</li>
  <li>iPhoneアプリ（Objective-C書きたい）</li>
</ul>

<p>辺りでお困りの際は是非ご相談下さい！</p>

<h2 id="section-1">連絡先</h2>

<p>レスポンスが早い順です。</p>

<dl>
  <dt>Skype</dt>
  <dd>rewish.org</dd>
  <dt>Twitter</dt>
  <dd>@<a href="https://twitter.com/rewish">rewish</a></dd>
  <dt>Mail</dt>
  <dd>info@rewish.jp</dd>
</dl>

<p>それでは皆さん、今後ともよろしくお願いします。</p>
]]></content>
  </entry>

  <entry>
    <title type="html"><![CDATA[ソーシャルブックマークの情報を取得するWPプラグイン「WP SBM Info」]]></title>
    <link href="https://rewish.jp/blog/releases/wp_sbm_info"/>
    <updated>2010-09-10T00:00:00+09:00</updated>
    <id>/blog/releases/wp_sbm_info</id>

    <summary type="html"><![CDATA[ソーシャルブックマークのカウントやコメントを取得するWordPressのプラグイン.]]></summary>
    <content type="html" xml:base="https://rewish.jp/blog/releases/wp_sbm_info"><![CDATA[<p>先日作った<a href="php_services_sbm_info">Services_SBM_Info</a>を利用して、ソーシャルブックマークのカウントやコメントを取得するWordPressのプラグインを作ってみました。</p>

<p>対応サービスや取得できる情報についてはServices_SBM_Infoと同じです。</p>

<!-- more -->

<h2 id="section">ライブラリについて</h2>

<p>URLに対するソーシャルブックマークの情報を取得するWordPressプラグインです。</p>

<h3 id="section-1">ダウンロード</h3>

<p><a href="http://downloads.wordpress.org/plugin/wp-sbm-info.zip">wp-sbm-info.zip</a> - v0.1.0</p>

<h3 id="section-2">ライセンス</h3>

<p>GNU General Public License</p>

<h3 id="sbm">取得できるSBMの情報</h3>

<ul>
  <li>ブックマーク数</li>
  <li>ブックマーク数の単位 (user/users/tweet/tweets)</li>
  <li>ブックマーク数のランク (色の変わるブックマーク数に応じたランク)</li>
  <li>ブックマークコメント (Deliciousを除く)</li>
  <li>エントリーページのURL</li>
  <li>追加ページのURL</li>
</ul>

<h3 id="sbm-1">対応しているSBMサービス</h3>

<ul>
  <li><a href="http://b.hatena.ne.jp/">はてなブックマーク</a></li>
  <li><a href="http://www.delicious.com/">Delicious</a></li>
  <li><a href="http://clip.livedoor.com/">livedoorクリップ</a></li>
  <li><a href="http://buzzurl.jp/">Buzzurl</a></li>
  <li><a href="http://twitter.com/">Twitter</a></li>
</ul>

<h2 id="section-3">オプション</h2>

<p>【設定】メニューの【WP SBM Infoの設定】でオプションを設定できます。</p>

<dl>
  <dt>有効にするサービス</dt>
  <dd>チェックしたサービスを取得します。</dd>
  <dt>キャッシュの有効期限</dt>
  <dd>指定時間経過後、APIデータを再取得します。</dd>
  <dt>バックグラウンド実行</dt>
  <dd>APIデータの取得をバックグラウンドで行います。CGIモードで動いている場合のみ。</dd>
  <dt>Proxy</dt>
  <dd>APIデータの取得にProxyを使います。</dd>
</dl>

<h2 id="section-4">使い方</h2>

<h3 id="section-5">個別ページ(ポスト、ページ)で使用する場合</h3>

<div class="highlight"><pre><code class="php"><span class="cp">&lt;?php</span>
<span class="nv">$info</span> <span class="o">=</span> <span class="nx">sbm_info_all</span><span class="p">();</span>
<span class="c1">// $infoに配列が入るのでprint_r($info);などで確認して下さい。</span>

<span class="c1">// foreachとprintfを使った例</span>
<span class="k">foreach</span> <span class="p">(</span><span class="nv">$info</span> <span class="k">as</span> <span class="nv">$name</span> <span class="o">=&gt;</span> <span class="nv">$c</span><span class="p">)</span> <span class="p">{</span>
	<span class="nb">printf</span><span class="p">(</span><span class="s1">&#39;&lt;li class=&quot;%s&quot;&gt;[追加](%s) [%s%s](%s)&lt;/li&gt;&#39;</span><span class="p">,</span>
		<span class="nv">$name</span><span class="p">,</span> <span class="nv">$c</span><span class="p">[</span><span class="s1">&#39;add_url&#39;</span><span class="p">],</span> <span class="nv">$c</span><span class="p">[</span><span class="s1">&#39;entry_url&#39;</span><span class="p">],</span> <span class="nv">$c</span><span class="p">[</span><span class="s1">&#39;rank&#39;</span><span class="p">],</span> <span class="nv">$c</span><span class="p">[</span><span class="s1">&#39;count&#39;</span><span class="p">],</span> <span class="nv">$c</span><span class="p">[</span><span class="s1">&#39;unit&#39;</span><span class="p">]);</span>
<span class="p">}</span>
<span class="cp">?&gt;</span><span class="x"></span>
</code></pre></div>

<h3 id="homeurl">Homeなど個別ページ以外のURLを取得する場合</h3>

<div class="highlight"><pre><code class="php"><span class="cp">&lt;?php</span>
<span class="nv">$url</span> <span class="o">=</span> <span class="s1">&#39;http://example.com/&#39;</span><span class="p">;</span>
<span class="nv">$title</span> <span class="o">=</span> <span class="s1">&#39;Example Web Page&#39;</span><span class="p">;</span>
<span class="nx">sbm_info_execute</span><span class="p">(</span><span class="nv">$url</span><span class="p">,</span> <span class="nv">$title</span><span class="p">);</span>
<span class="nv">$info</span> <span class="o">=</span> <span class="nx">sbm_info_all</span><span class="p">(</span><span class="nv">$url</span><span class="p">,</span> <span class="nv">$title</span><span class="p">);</span>
<span class="c1">// $infoの情報を適当に使う</span>
<span class="cp">?&gt;</span><span class="x"></span>
</code></pre></div>

<h2 id="section-6">定義されている関数</h2>

<p>引数を省略して実行すると、$urlは<code>get_permalink()</code>、$titleは<code>get_the_title()</code>の値がそれぞれ代入されます。</p>

<dl>
  <dt>sbm_info_execute($url = null, $title = null)</dt>
  <dd>APIからデータを取得します。ポスト及びページ以外で使用する場合に使います。</dd>
  <dt>sbm_info_all($url = null, $title = null)</dt>
  <dd>全ての情報を取得します。</dd>
  <dt>sbm_info_count($url = null)</dt>
  <dd>ブックマーク数を取得します。</dd>
  <dt>sbm_info_unit($url = null)</dt>
  <dd>ブックマーク数の単位を取得します。</dd>
  <dt>sbm_info_rank($url = null)</dt>
  <dd>ブックマーク数のランクを取得します。</dd>
  <dt>sbm_info_comments($url = null)</dt>
  <dd>ブックマークコメントを取得します。</dd>
  <dt>sbm_info_entry_url($url = null)</dt>
  <dd>ブックマークのエントリーページURLを取得します。</dd>
  <dt>sbm_info_add_url($url = null)</dt>
  <dd>ブックマークの追加ページURLを取得します。</dd>
</dl>

<h2 id="section-7">更新履歴</h2>

<dl>
  <dt>2010-10-26 - v0.1.4</dt>
  <dd>APIデータの取得に失敗した場合、情報がリセットされる問題を修正。</dd>
  <dt>2010-09-13 - v0.1.3</dt>
  <dd>同時アクセスがあった場合、executeが複数走る問題を修正。</dd>
  <dt>2010-09-12 - v0.1.2</dt>
  <dd>bugfix</dd>
  <dt>2010-09-10 - v0.1.1</dt>
  <dd>Proxy対応</dd>
  <dt>2010-09-09 - v0.1.0</dt>
  <dd>公開</dd>
</dl>
]]></content>
  </entry>

  <entry>
    <title type="html"><![CDATA[ソーシャルブックマークの情報を取得するPHPライブラリ「Services_SBM_Info」]]></title>
    <link href="https://rewish.jp/blog/releases/php_services_sbm_info"/>
    <updated>2010-09-08T00:00:00+09:00</updated>
    <id>/blog/releases/php_services_sbm_info</id>

    <summary type="html"><![CDATA[URLに対するソーシャルブックマークの情報を取得するライブラリ「Services_SBM_Info」の概要と使い方。]]></summary>
    <content type="html" xml:base="https://rewish.jp/blog/releases/php_services_sbm_info"><![CDATA[<p>URLに対するソーシャルブックマークの情報を取得するライブラリを<a href="http://openpear.org/">Openpear</a>で公開しています。</p>

<p><a href="http://openpear.org/package/Services_SBM_Info">Services_SBM_Info - Openpear</a></p>

<p>と言う報告だけでは何なので、概要と使い方を書いてみます。</p>

<!-- more -->

<h2 id="section">ライブラリについて</h2>

<p>URLに対するソーシャルブックマーク(以下SBM)の情報を取得するPHP(PEAR)ライブラリです。</p>

<h3 id="section-1">ライセンス</h3>

<p>New BSD License</p>

<h3 id="section-2">依存ライブラリ</h3>

<ul>
  <li>HTTP_Request2</li>
</ul>

<h3 id="sbm">取得できるSBMの情報</h3>

<ul>
  <li>ブックマーク数</li>
  <li>ブックマーク数の単位 (user/users)</li>
  <li>ブックマーク数のランク (色の変わるブックマーク数に応じたランク)</li>
  <li>ブックマークコメント</li>
  <li>エントリーページのURL</li>
  <li>追加ページのURL</li>
</ul>

<h3 id="sbm-1">対応しているSBMサービス</h3>

<ul>
  <li><a href="http://b.hatena.ne.jp/">はてなブックマーク</a> (Hatena)</li>
  <li><a href="http://www.delicious.com/">Delicious</a> (Delicious)</li>
  <li><a href="http://clip.livedoor.com/">livedoorクリップ</a> (Livedoor)</li>
  <li><a href="http://buzzurl.jp/">Buzzurl</a> (Buzzurl)</li>
  <li><a href="http://twitter.com/">Twitter</a> (Twitter)</li>
</ul>

<h2 id="section-3">インストール</h2>

<h3 id="pear">PEARコマンドを使う場合</h3>

<div class="highlight"><pre><code class="bash">pear channel-discover openpear.org
pear install --alldeps openpear/Services_SBM_Info-beta
</code></pre></div>

<h3 id="svn">SVNでチェックアウトする場合</h3>

<p>直接チェックアウトする場合はinclude pathに注意して下さい。</p>

<div class="highlight"><pre><code class="bash">svn co http://svn.openpear.org/Services_SBM_Info/trunk/src Services_SBM_Info
</code></pre></div>

<h2 id="section-4">使い方</h2>

<h3 id="section-5">基本的な使い方</h3>

<div class="highlight"><pre><code class="php"><span class="cp">&lt;?php</span>
<span class="c1">// ライブラリ読み込み</span>
<span class="k">require_once</span> <span class="s1">&#39;Services/SBM/Info.php&#39;</span><span class="p">;</span>

<span class="c1">// コンストラクタ</span>
<span class="c1">// 第一引数にURL、第二引数にページタイトル、</span>
<span class="c1">// 第三引数に取得するSBMサービスを指定可能 (初期値は&#39;Hatena,Delicious&#39;)</span>
<span class="nv">$SBMInfo</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Services_SBM_Info</span><span class="p">(</span><span class="s1">&#39;http://example.net/&#39;</span><span class="p">,</span> <span class="s1">&#39;Example Web Page&#39;</span><span class="p">,</span> <span class="s1">&#39;Hatena,Delicious,Livedoor&#39;</span><span class="p">);</span>

<span class="c1">// 実行 (APIからデータを取得)</span>
<span class="nv">$SBMInfo</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">();</span>

<span class="c1">// 有効サービスの全SBM情報を配列で取得 (コメントを除く)</span>
<span class="nb">print_r</span><span class="p">(</span><span class="nv">$SBMInfo</span><span class="o">-&gt;</span><span class="na">getAll</span><span class="p">());</span>

<span class="c1">// コメントを含めたい場合は第一引数にtrueを渡す</span>
<span class="nb">print_r</span><span class="p">(</span><span class="nv">$SBMInfo</span><span class="o">-&gt;</span><span class="na">getAll</span><span class="p">(</span><span class="k">true</span><span class="p">));</span>
</code></pre></div>

<h3 id="urlsbm">URL、ページタイトル、SBMサービスを後で指定する</h3>

<p>複数のURLの情報を連続して取得する場合に便利。</p>

<div class="highlight"><pre><code class="php"><span class="cp">&lt;?php</span>
<span class="c1">// ライブラリ読み込み</span>
<span class="k">require_once</span> <span class="s1">&#39;Services/SBM/Info.php&#39;</span><span class="p">;</span>

<span class="c1">// コンストラクタの引数は省略可能</span>
<span class="nv">$SBMInfo</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Services_SBM_Info</span><span class="p">;</span>

<span class="c1">// URLをセット</span>
<span class="nv">$SBMInfo</span><span class="o">-&gt;</span><span class="na">setUrl</span><span class="p">(</span><span class="s1">&#39;http://example.com/&#39;</span><span class="p">);</span>

<span class="c1">// ページタイトルをセット</span>
<span class="nv">$SBMInfo</span><span class="o">-&gt;</span><span class="na">setTitle</span><span class="p">(</span><span class="s1">&#39;Example Web Page&#39;</span><span class="p">);</span>

<span class="c1">// SBMサービスをセット</span>
<span class="nv">$SBMInfo</span><span class="o">-&gt;</span><span class="na">setServices</span><span class="p">(</span><span class="k">array</span><span class="p">(</span><span class="s1">&#39;hatena&#39;</span><span class="p">,</span> <span class="s1">&#39;delicious&#39;</span><span class="p">,</span> <span class="s1">&#39;livedoor&#39;</span><span class="p">,</span> <span class="s1">&#39;buzzurl&#39;</span><span class="p">));</span>
<span class="c1">// or</span>
<span class="nv">$SBMInfo</span><span class="o">-&gt;</span><span class="na">setServices</span><span class="p">(</span><span class="s1">&#39;hatena,delicious,livedoor,buzzurl&#39;</span><span class="p">);</span>

<span class="c1">// セットしたら必ずexecute</span>
<span class="nv">$SBMInfo</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">();</span>

<span class="c1">// 有効サービスの全SBM情報を配列で取得 (コメントを除く)</span>
<span class="nb">print_r</span><span class="p">(</span><span class="nv">$SBMInfo</span><span class="o">-&gt;</span><span class="na">getAll</span><span class="p">());</span>
</code></pre></div>

<h3 id="sbm-2">SBM情報を個別に取得する</h3>

<p>引数に何も入れずに実行すると、SBMサービスの名前をキーにした配列が取得できます。</p>

<div class="highlight"><pre><code class="php"><span class="cp">&lt;?php</span>
<span class="k">require_once</span> <span class="s1">&#39;Services/SBM/Info.php&#39;</span><span class="p">;</span>
<span class="nv">$SBMInfo</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Services_SBM_Info</span><span class="p">(</span><span class="s1">&#39;http://example.net/&#39;</span><span class="p">,</span> <span class="s1">&#39;Example Web Page&#39;</span><span class="p">);</span>
<span class="nv">$SBMInfo</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">();</span>

<span class="c1">// ブックマーク数</span>
<span class="k">echo</span> <span class="nv">$SBMInfo</span><span class="o">-&gt;</span><span class="na">getCount</span><span class="p">();</span>

<span class="c1">// ブックマーク数の単位</span>
<span class="k">echo</span> <span class="nv">$SBMInfo</span><span class="o">-&gt;</span><span class="na">getUnit</span><span class="p">();</span>

<span class="c1">// ブックマーク数のランク</span>
<span class="k">echo</span> <span class="nv">$SBMInfo</span><span class="o">-&gt;</span><span class="na">getRank</span><span class="p">();</span>

<span class="c1">// エントリーページのURL</span>
<span class="k">echo</span> <span class="nv">$SBMInfo</span><span class="o">-&gt;</span><span class="na">getEntryUrl</span><span class="p">();</span>

<span class="c1">// 追加ページのURL</span>
<span class="k">echo</span> <span class="nv">$SBMInfo</span><span class="o">-&gt;</span><span class="na">getAddUrl</span><span class="p">();</span>

<span class="c1">// ブックマークコメント</span>
<span class="nb">print_r</span><span class="p">(</span><span class="nv">$SBMInfo</span><span class="o">-&gt;</span><span class="na">getComments</span><span class="p">());</span>
</code></pre></div>

<p>引数にSBMサービス名を入れると、個別に値を取得できます。</p>

<div class="highlight"><pre><code class="php"><span class="x">require_once &#39;Services/SBM/Info.php&#39;;</span>
<span class="x">$SBMInfo = new Services_SBM_Info(&#39;http://example.net/&#39;, &#39;Example Web Page&#39;);</span>
<span class="x">$SBMInfo-&gt;execute();</span>

<span class="x">// はてなブックマークのブックマーク数</span>
<span class="x">echo $SBMInfo-&gt;getCount(&#39;hatena&#39;);</span>

<span class="x">// はてなブックマークのブックマーク数の単位</span>
<span class="x">echo $SBMInfo-&gt;getUnit(&#39;hatena&#39;);</span>

<span class="x">// はてなブックマークのブックマーク数のランク</span>
<span class="x">echo $SBMInfo-&gt;getRank(&#39;hatena&#39;);</span>

<span class="x">// はてなブックマークのエントリーページのURL</span>
<span class="x">echo $SBMInfo-&gt;getEntryUrl(&#39;hatena&#39;);</span>

<span class="x">// はてなブックマークの追加ページのURL</span>
<span class="x">echo $SBMInfo-&gt;getAddUrl(&#39;hatena&#39;);</span>

<span class="x">// はてなブックマークのブックマークコメント</span>
<span class="x">print_r($SBMInfo-&gt;getComments(&#39;hatena&#39;));</span>
</code></pre></div>

<h3 id="section-6">0.3.0で追加した機能</h3>

<p>API取得に失敗した場合、例外を投げるようになったので、エラーログを記録するファイルの指定とAPI取得に失敗したサービスを取得するメソッドを追加しました。</p>

<div class="highlight"><pre><code class="php"><span class="cp">&lt;?php</span>
<span class="k">require_once</span> <span class="s1">&#39;Services/SBM/Info.php&#39;</span><span class="p">;</span>
<span class="nv">$SBMInfo</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Services_SBM_Info</span><span class="p">(</span><span class="s1">&#39;http://example.net/&#39;</span><span class="p">,</span> <span class="s1">&#39;Example Web Page&#39;</span><span class="p">);</span>

<span class="c1">// エラーを記録したい場合はファイルのパスを指定</span>
<span class="nv">$SBMInfo</span><span class="o">-&gt;</span><span class="na">setErrorLog</span><span class="p">(</span><span class="s1">&#39;./sbm_info_error.log&#39;</span><span class="p">);</span>

<span class="nv">$SBMInfo</span><span class="o">-&gt;</span><span class="na">execute</span><span class="p">();</span>

<span class="c1">// API取得に失敗したサービスを配列で取得</span>
<span class="nb">print_r</span><span class="p">(</span><span class="nv">$SBMInfo</span><span class="o">-&gt;</span><span class="na">getFailedServices</span><span class="p">());</span>
</code></pre></div>
]]></content>
  </entry>

  <entry>
    <title type="html"><![CDATA[VirtualBoxでLinuxな開発環境を作る]]></title>
    <link href="https://rewish.jp/blog/tech/virtualbox_install"/>
    <updated>2010-08-20T00:00:00+09:00</updated>
    <id>/blog/tech/virtualbox_install</id>

    <summary type="html"><![CDATA[VirtualBoxにCentOS5をインストールした後の設定やWindows向けの小ネタなど。]]></summary>
    <content type="html" xml:base="https://rewish.jp/blog/tech/virtualbox_install"><![CDATA[<p>今までLinux環境が必要な開発ではVMware Playerを使っていましたが、ちょっと開発環境の見直しも兼ねてVertualBoxを試して見ました。</p>

<p>今回はVirtualBox-3.2.8-64453-Winをインストールしましたが、基本的な流れやメリット等は<a href="http://d.hatena.ne.jp/p4life/20090413/1239624784">VirtualBox 2.2 と CentOS 5.3 でローカル開発環境 - もやし日記</a>とほぼ同じなので、詳しいインストール手順はそちらを参照して下さい。</p>

<!-- more -->

<h2 id="section">仮想マシンの作成</h2>

<p>こんな感じで作成しました。</p>

<dl>
  <dt>名前</dt>
  <dd>CentOS5</dd>
  <dt>オペレーティング システム</dt>
  <dd>Linux</dd>
  <dt>バージョン</dt>
  <dd>Red Hat</dd>
  <dt>メインメモリのサイズ</dt>
  <dd>512MB</dd>
  <dt>ハードディスク ストレージ タイプ</dt>
  <dd>固定サイズのストレージ</dd>
  <dt>サイズ</dt>
  <dd>5GB</dd>
</dl>

<p>ホストOSがWindowsの場合、断片化を防ぐため固定サイズのストレージにしておくのが良い。</p>

<p>OSはCentOS5.5をネットインストールしました。</p>

<h2 id="section-1">共有フォルダの設定</h2>

<p>「開発環境でsambaとかマジ無いわ」な感じなので共有フォルダを有効にします。</p>

<h3 id="guest-additions">Guest Additionsのインストール</h3>

<p>まず、メニューの【デバイス】から【Guest Additionsのインストール】を選択。</p>

<p>CD-ROMとして読み込まれるのでディレクトリにマウントする。</p>

<div class="highlight"><pre><code class="bash">mkdir /mnt/cdrom
mount -r /dev/cdrom /mnt/cdrom
</code></pre></div>

<p>マウントしたら<code>VBoxLinuxAdditions-x86.run</code>を実行する。</p>

<p>gcc、make、kernel-devel辺りが必要なので、入っていなければ入れておく。</p>

<div class="highlight"><pre><code class="bash">yum install gcc make kernel-devel
/mnt/cdrom/VBoxLinuxAdditions-x86.run
</code></pre></div>

<p>インストールが終ったらCD-ROMをアンマウントしておく。</p>

<div class="highlight"><pre><code class="bash">umount /mnt/cdrom
</code></pre></div>

<h3 id="section-2">共有するフォルダを指定</h3>

<p>メニューの【デバイス】から【共有フォルダ】を選択。</p>

<p>表示されるダイアログボックスの右側＋アイコンをクリックするか<kbd>Insertキー</kbd>を押す。</p>

<dl>
  <dt>フォルダのパス</dt>
  <dd>ホストOS側の共有フォルダのパス。</dd>
  <dt>フォルダ名</dt>
  <dd>ゲストOS側の共有フォルダ名。マウントする際に使用。</dd>
  <dt>読み込み専用</dt>
  <dd>ファイルの書き込みを拒否する。</dd>
  <dt>永続化する</dt>
  <dd>VirtualBoxを終了しても設定を消さない。チェック！</dd>
</dl>

<p>この設定はそんなに難しくは無いと思います。</p>

<h3 id="section-3">共有フォルダをマウント</h3>

<p>ファイルシステムのタイプを<code>vboxsf</code>にし、デバイスに先ほどのフォルダ名を指定、対象ディレクトリを/mnt/フォルダ名にしてマウント。</p>

<div class="highlight"><pre><code class="bash">mkdir /mnt/フォルダ名
mount -t vboxsf フォルダ名 /mnt/フォルダ名
</code></pre></div>

<p>ゲストOSを再起動しても自動でマウントするようにしたい場合は、/etc/rc.localなんかにマウントコマンドを記述すると良いかも。</p>

<h2 id="windows">Windows向けの小ネタ</h2>

<h3 id="section-4">仮想マシンを一発起動</h3>

<p>仮想マシンを起動する時、イチイチVertualBox.exeを起動して仮想マシンを選択して起動するのは面倒なので、ショートカットを作って一発で起動するようにしておく。</p>

<p>具体的には、VirtualBox.exeの起動オプションに <strong>-startvm 仮想マシン名</strong> を指定する。</p>

<div class="highlight"><pre><code class="bat">path\to\VirtualBox.exe -startvm CentOS<span class="m">5</span>
</code></pre></div>

<p>こんな感じでショートカットを作ればOK。簡単ですね。便利ですね。</p>

<h3 id="vertualbox">VertualBoxをタスクトレイに入れる</h3>

<p><a href="vmware_player_trayzer">TrayzerでVMware Playerをタスクトレイに入れてスッキリ</a>で紹介したTrayzerを使ってVirtualBoxをタスクトレイに入れました。</p>

<p>設定方法はVMware Playerと同じです。</p>
]]></content>
  </entry>

  <entry>
    <title type="html"><![CDATA[ものすごい勢いでロールオーバーするjQueryプラグイン「jDTRollover」]]></title>
    <link href="https://rewish.jp/blog/releases/jdtrollover"/>
    <updated>2010-06-18T00:00:00+09:00</updated>
    <id>/blog/releases/jdtrollover</id>

    <summary type="html"><![CDATA[ロールオーバーしているのが一目瞭然！ものすごい勢いでロールオーバーするjQueryプラグイン。]]></summary>
    <content type="html" xml:base="https://rewish.jp/blog/releases/jdtrollover"><![CDATA[<p>画像のロールオーバーを実装する方法は数多く存在しますが、ロールオーバーしてるのかしてないのかよく分からないモノが多いですよね。多いです。</p>

<p>そんな悩みはサクッと解決しちゃいたい！そんなアナタのために、ものすごい勢いでロールオーバーするjQueryプラグインを作りました。</p>

<p><a href="jquery_rollover">input要素にも使えるjQueryのロールオーバープラグイン</a>との互換性もバッチリなので、プラグインのファイルを差し替えるだけで動作します。</p>

<!-- more -->

<h2 id="section">ダウンロードとデモ</h2>

<p><a href="http://jdtplugins.googlecode.com/svn/trunk/jdtrollover/jdtrollover.js">jdtrollover.js</a></p>

<p><a href="http://jdtplugins.googlecode.com/svn/trunk/jdtrollover/example.html">デモを見る</a></p>

<h2 id="section-1">導入方法</h2>

<h3 id="jqueryjdtrollover">1. jQueryとjDTRolloverを読み込む</h3>

<div class="highlight"><pre><code class="html"><span class="nt">&lt;script </span><span class="na">src=</span><span class="s">&quot;jquery.js&quot;</span><span class="nt">&gt;&lt;/script&gt;</span>
<span class="nt">&lt;script </span><span class="na">src=</span><span class="s">&quot;jdtrollover.js&quot;</span><span class="nt">&gt;&lt;/script&gt;</span>
</code></pre></div>

<h3 id="section-2">2. 実行する</h3>

<p><code>$()</code> で対象にする要素を指定します。アンカーの中にある画像を指定するのが一般的ですね。</p>

<div class="highlight"><pre><code class="js"><span class="nx">jQuery</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">$</span><span class="p">)</span> <span class="p">{</span>
  <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;a img&#39;</span><span class="p">).</span><span class="nx">jdtRollover</span><span class="p">();</span>

  <span class="c1">// 以下の指定方法にも対応！最高の互換性！</span>
  <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;a img&#39;</span><span class="p">).</span><span class="nx">rollover</span><span class="p">();</span>
<span class="p">});</span>
</code></pre></div>

<h2 id="section-3">オプション</h2>

<dl>
  <dt>第一引数</dt>
  <dd>ロールオーバー画像に付けるsuffix。デフォルトは<code>_on</code>だ。</dd>
  <dt>第二引数</dt>
  <dd>勢い。1か2くらいにしないと正常に動作しない。</dd>
</dl>

<h2 id="section-4">注意</h2>

<p>わりと喋ります。</p>
]]></content>
  </entry>

  <entry>
    <title type="html"><![CDATA[スムーズにスクロールしないjQueryプラグイン「jDTScroll」]]></title>
    <link href="https://rewish.jp/blog/releases/jdtscroll"/>
    <updated>2010-06-11T00:00:00+09:00</updated>
    <id>/blog/releases/jdtscroll</id>

    <summary type="html"><![CDATA[普通のスムーススクロールがスムーズに感じられる、スムーズにスクロールしないjQueryプラグイン。]]></summary>
    <content type="html" xml:base="https://rewish.jp/blog/releases/jdtscroll"><![CDATA[<p>ページ内リンクでスクロールをスムースにするスクリプトは良くありますが、アレってもっとスムーズにスクロール出来ないのかなーとか思いますよね。僕は思います。</p>

<p>もっとスムーズにするのは僕には難しいので、普通のスムーススクロールがスムーズに感じられるように、スムーズにスクロールしないjQueryプラグインを作りました。</p>

<!-- more -->

<h2 id="section">ダウンロードとデモ</h2>

<p><a href="http://jdtplugins.googlecode.com/svn/trunk/jdtscroll/jdtscroll.js">jdtscroll.js</a></p>

<p><a href="http://jdtplugins.googlecode.com/svn/trunk/jdtscroll/example.html">デモを見る</a></p>

<h2 id="section-1">導入方法</h2>

<h3 id="jqueryjdtscroll">1. jQueryとjDTScrollを読み込む</h3>

<div class="highlight"><pre><code class="html"><span class="nt">&lt;script </span><span class="na">src=</span><span class="s">&quot;jquery.js&quot;</span><span class="nt">&gt;&lt;/script&gt;</span>
<span class="nt">&lt;script </span><span class="na">src=</span><span class="s">&quot;jdtscroll.js&quot;</span><span class="nt">&gt;&lt;/script&gt;</span>
</code></pre></div>

<h3 id="section-2">2. 実行する</h3>

<p><code>$()</code> で対象にする要素を指定します。ページ内リンクなのでフラグメント識別子が付いてるっぽいアンカーを指定するのがいいですね。</p>

<div class="highlight"><pre><code class="js"><span class="nx">jQuery</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">$</span><span class="p">)</span> <span class="p">{</span>
  <span class="nx">$</span><span class="p">(</span><span class="s1">&#39;a[href^=&quot;#&quot;]&#39;</span><span class="p">).</span><span class="nx">jdtScroll</span><span class="p">();</span>
<span class="p">});</span>
</code></pre></div>

<h2 id="section-3">オプション</h2>

<dl>
  <dt>第一引数</dt>
  <dd>スクロールアニメーションの速度を指定。</dd>
  <dt>第二引数</dt>
  <dd>良く見つけましたね。これは隠し引数です。</dd>
</dl>

<h2 id="section-4">注意</h2>

<p>たまに喋ります。</p>
]]></content>
  </entry>

  <entry>
    <title type="html"><![CDATA[記事保存時にリンク先のタイトルを取得するWordPressプラグイン]]></title>
    <link href="https://rewish.jp/blog/releases/wp_title_fetcher"/>
    <updated>2010-04-22T00:00:00+09:00</updated>
    <id>/blog/releases/wp_title_fetcher</id>

    <summary type="html"><![CDATA[a要素にhref属性を設定し、テキストを空にした状態で保存すると、リンク先のタイトルを自動で取得するWordPressプラグイン。]]></summary>
    <content type="html" xml:base="https://rewish.jp/blog/releases/wp_title_fetcher"><![CDATA[<p>はてな記法の<code>[URL:title]</code>のような機能を提供するプラグインです。</p>

<p>はてな記法プラグインのように独自のDBテーブルにタイトルを保存するのでは無く、記事の内容を直接書き換えるタイプなので一応注意して下さい。</p>

<p>あと、ブックマークレット使えよとか言わないで下さい。</p>

<!-- more -->

<h2 id="section">ライブラリについて</h2>

<p>a要素にhref属性を設定し、テキスト部分を空にして保存すると、リンク先のタイトルを自動で取得し挿入します。href以外の属性が在る場合でも他の属性を残しつつ処理を行います。</p>

<h3 id="section-1">ダウンロード</h3>

<p><a href="http://downloads.wordpress.org/plugin/titlefetcher.zip">titlefetcher.zip</a> - v0.1.0</p>

<h3 id="section-2">ライセンス</h3>

<p>MIT License</p>

<h2 id="section-3">使い方</h2>

<ol>
  <li><a href="http://downloads.wordpress.org/plugin/titlefetcher.zip">titlefetcher.zip</a>をダウンロード</li>
  <li>zipを解凍して<code>wp-content/plugins</code>にディレクトリごとコピー</li>
  <li>【プラグイン】メニューの【インストール済み】から<strong>TitleFetcher</strong>を有効化。</li>
</ol>

<p>あとは記事を書く時に</p>

<div class="highlight"><pre><code class="html"><span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">&quot;http://example.com/&quot;</span><span class="nt">&gt;&lt;/a&gt;</span>
</code></pre></div>

<p>のようにテキスト部分を空にして保存すると</p>

<div class="highlight"><pre><code class="html"><span class="nt">&lt;a</span> <span class="na">href=</span><span class="s">&quot;http://example.com/&quot;</span><span class="nt">&gt;</span>Example Web Page<span class="nt">&lt;/a&gt;</span>
</code></pre></div>

<p>のようにリンク先のタイトルが自動で挿入されます。</p>
]]></content>
  </entry>

  <entry>
    <title type="html"><![CDATA[CSSの@importを動的に1ファイルにまとめて圧縮するPHPのクラス「CSS_DynamicCompressor」]]></title>
    <link href="https://rewish.jp/blog/releases/css_dynamic_compressor"/>
    <updated>2010-04-21T00:00:00+09:00</updated>
    <id>/blog/releases/css_dynamic_compressor</id>

    <summary type="html"><![CDATA[@importを自動で解析して連結・圧縮するPHPのクラス「CSS_DynamicCompressor」の使い方]]></summary>
    <content type="html" xml:base="https://rewish.jp/blog/releases/css_dynamic_compressor"><![CDATA[<p>CSSを小分けにして<strong>@import</strong>で読み込んで管理している方も多いかと思いますが、これではHTTPリクエストがファイルの数だけ発生して、パフォーマンス的に良くありません。</p>

<p><a href="http://googlewebmastercentral.blogspot.com/2010/04/using-site-speed-in-web-search-ranking.html">Googleがページの表示速度を検索結果に反映する</a>とか言い出したりもしているので、これはもうリクエスト数を減らすしか無いですね！</p>

<p>でも手動でファイルを一つ一つ連結するのはとても面倒です！と言うわけで、そんな面倒な作業を自動でやってくれるPHPのクラスを書いてみました。</p>

<!-- more -->

<h2 id="section">ライブラリについて</h2>

<p><strong>@import</strong>で複数のファイルを読み込んでいるCSSを、動的に解析し、連結・圧縮を行います。また、表示する際に<strong>Last-Modified</strong>や<strong>Expires</strong>などのHTTPヘッダーを送出したり、<strong>gzip圧縮</strong>を行うなど、リクエストを出来るだけ軽減できるようにしています。</p>

<h3 id="section-1">ダウンロード</h3>

<p><a href="http://github.com/rewish/CSS_DynamicCompressor">CSS_DynamicCompressor</a></p>

<h3 id="section-2">ライセンス</h3>

<p>MIT License</p>

<h2 id="section-3">使い方</h2>

<p>以下の4つの使い方を想定しています。環境に合わせて最良の方法を選択して下さい。</p>

<p>以下の例の前提条件として、<code>@import</code> を使用しているファイルの名前は<code>import.css</code>とします。</p>

<h3 id="modrewrite">mod_rewriteを使う</h3>

<p>既存のHTMLを書き換えずに導入することが出来ます。</p>

<p>以下のようにCSSを読み込んでいる場合は、</p>

<div class="highlight"><pre><code class="html"><span class="nt">&lt;link</span> <span class="na">rel=</span><span class="s">&quot;stylesheet&quot;</span> <span class="na">href=</span><span class="s">&quot;/css/import.css&quot;</span><span class="nt">&gt;</span>
</code></pre></div>

<p>/css/ディレクトリに、<code>CSS_DynamicCompressor.php</code>・<code>css.php</code>・<code>.htaccess</code>をコピーすればOKです。</p>

<p>動かない場合は、.htaccessやmod_rewriteが使えない可能性があります。</p>

<h3 id="cssphp">拡張子.cssでPHPを実行する</h3>

<p>mod_rewrite同様、既存のHTMLを書き換える必要はありませんが、若干作業が増えます。</p>

<p>設定方法はサーバーによって異なるので、不明な場合はサーバー管理者に問い合わせて下さい。</p>

<div class="highlight"><pre><code class="bash"><span class="c"># .cssでPHPを実行する設定の一例</span>
AddHandler application/x-httpd-php .php .css
</code></pre></div>

<p>以下のようにCSSを読み込んでいる場合は、</p>

<div class="highlight"><pre><code class="html"><span class="nt">&lt;link</span> <span class="na">rel=</span><span class="s">&quot;stylesheet&quot;</span> <span class="na">href=</span><span class="s">&quot;/css/import.css&quot;</span><span class="nt">&gt;</span>
</code></pre></div>

<p><code>import.css</code>を<code>_import.css</code>など適当にリネーム。</p>

<p><code>CSS_DynamicCompressor.php</code>・<code>css.php</code>を/css/ディレクトリにコピーして、<code>css.php</code>の以下の部分を編集して下さい。</p>

<div class="highlight"><pre><code class="php"><span class="x">//-&gt;setTarget(&#39;import.css&#39;)</span>
<span class="x">↓</span>
<span class="x">-&gt;setTarget(&#39;_import.css&#39;)</span>
</code></pre></div>

<p>編集した後、<code>css.php</code>を<code>import.css</code>にリネームすればOKです。</p>

<h3 id="linkphp">link要素で直接PHPを読み込む</h3>

<p><code>CSS_DynamicCompressor.php</code>・<code>css.php</code>を/css/ディレクトリにコピーして、link要素で<code>css.php</code>を読み込むだけ。</p>

<div class="highlight"><pre><code class="html"><span class="nt">&lt;link</span> <span class="na">rel=</span><span class="s">&quot;stylesheet&quot;</span> <span class="na">href=</span><span class="s">&quot;/css/css.php&quot;</span><span class="nt">&gt;</span>
</code></pre></div>

<h3 id="section-4">キャッシュファイルをそのまま読み込む</h3>

<p><code>CSS_DynamicCompressor.php</code>・<code>css.php</code>を/css/ディレクトリにコピーしてブラウザから/css/css.phpにアクセスして書き出されるファイルをlink要素で普通に読み込む。</p>

<div class="highlight"><pre><code class="html"><span class="nt">&lt;link</span> <span class="na">rel=</span><span class="s">&quot;stylesheet&quot;</span> <span class="na">href=</span><span class="s">&quot;/css/_cache.css&quot;</span><span class="nt">&gt;</span>
</code></pre></div>

<p>書き出されるキャッシュファイルの名前を変更したい場合は<code>css.php</code>を編集。</p>

<div class="highlight"><pre><code class="php"><span class="x">//-&gt;setCache(&#39;_cahce.css&#39;)</span>
<span class="x">↓</span>
<span class="x">-&gt;setCache(&#39;hoge.css&#39;)</span>
</code></pre></div>

<p>この方法のメリットは、PHP5が動けばほぼ確実に使えること、静的ファイルなので若干軽いと言うことですが、キャッシュ関連のHTTPヘッダーやgzip圧縮などは、サーバーの設定に依存します。</p>

<h2 id="section-5">各種設定</h2>

<p><code>CSS_DynamicCompressor::getInstance()</code>でインスタンスを取得して、メソッドチェーンで設定を記述する事が出来ます。<code>-&gt;setHoge('fuga')</code>みたいな感じですね。</p>

<p>設定のひな形は<code>css.php</code>に記述してありますので、参考にしながら色々試してみて下さい。</p>

<table>
  <thead>
    <tr>
      <th>メソッド</th>
      <th>説明</th>
      <th>初期値</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>setCharset</td>
      <td>文字コードを指定</td>
      <td>UTF-8</td>
    </tr>
    <tr>
      <td>setTarget</td>
      <td>@importしているファイルの名前を指定</td>
      <td>import.css</td>
    </tr>
    <tr>
      <td>setCache</td>
      <td>キャッシュファイルの名前を指定</td>
      <td>_cache.css</td>
    </tr>
    <tr>
      <td>setExpireDay</td>
      <td>Expiresヘッダーに付与する日数（X日後）</td>
      <td>30日後</td>
    </tr>
    <tr>
      <td>setDirectory</td>
      <td>CSSのディレクトリをフルパスで指定</td>
      <td><code>$CWD</code></td>
    </tr>
    <tr>
      <td>setCSSFiles</td>
      <td>CSSファイルを配列で指定</td>
      <td>空</td>
    </tr>
    <tr>
      <td>setBaseUrl</td>
      <td>File listのベースURL</td>
      <td>空</td>
    </tr>
  </tbody>
</table>

<p>圧縮のみ実行したい場合は<code>-&gt;compression();</code>を、圧縮から表示までを一括で実行したい場合は<code>-&gt;display();</code>を最後に呼んで下さい。</p>

<h2 id="section-6">注意点</h2>

<p>PHPにファイルの書き込み権限が無い場合、キャッシュファイルが書き出されません。その場合は、ディレクトリのパーミッションを変更したり、キャッシュファイルを予め作成してパーミッションを変更しておくなどの対策を行ってください。</p>

<p>※キャッシュが無い場合、毎回圧縮処理を行うのでちょっと重たいです。</p>
]]></content>
  </entry>


</feed>