<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Webプログラマー＋WebデザイナーなZARU日記</title>
    <link rel="alternate" type="text/html" href="http://blog.tofu-kun.org/" />
    <link rel="self" type="application/atom+xml" href="http://blog.tofu-kun.org/atom.xml" />
    <id>tag:blog.tofu-kun.org,2009-10-14://1</id>
    <updated>2010-04-23T09:03:21Z</updated>
    <subtitle>生涯プログラマーを目指して頑張るZARUのお仕事メモ＋日記。主にPHP/Ruby/JavaScript/Webデザイン/写真/音楽/日記について書いています。</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/" version="4.261">Movable Type Commercial</generator>

<entry>
    <title>ブログを移転しました</title>
    <link rel="alternate" type="text/html" href="http://blog.tofu-kun.org/091110104931.php" />
    <id>tag:blog.tofu-kun.org,2009://1.390</id>

    <published>2009-11-10T01:49:31Z</published>
    <updated>2010-04-23T09:03:21Z</updated>

    <summary>長らく放置気味だった当ブログをいったん閉鎖し、新しくブログをスタートしました。z...</summary>
    <author>
        <name>zaru</name>
        
    </author>
    
        <category term="日記" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tofu-kun.org/">
        <![CDATA[長らく放置気味だった当ブログをいったん閉鎖し、新しくブログをスタートしました。<div><a href="http://zaru.tofu-kun.org/">zaru blog http://zaru.tofu-kun.org/</a></div><div>です。</div><div>こちらの方で、Web系の話題をエントリしていきたいと思います。</div><div>当ブログ自体は、更新はしませんが過去エントリを残しておきます。</div>]]>
        
    </content>
</entry>

<entry>
    <title>Objective-CのコマンドラインでHello World!</title>
    <link rel="alternate" type="text/html" href="http://blog.tofu-kun.org/080804163125.php" />
    <id>tag:blog2.tofu-kun.org,2008://1.389</id>

    <published>2008-08-04T07:31:25Z</published>
    <updated>2009-10-14T02:38:43Z</updated>

    <summary>けっこう時間が経ってしまいましたが、Objective-Cの勉強をぼちぼち始めま...</summary>
    <author>
        <name>zaru</name>
        
    </author>
    
        <category term="Objective-C" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tofu-kun.org/">
        <![CDATA[<p>けっこう時間が経ってしまいましたが、Objective-Cの勉強をぼちぼち始めました。iPhoneの実機も手に入ったし、Macアプリでも作りたいものがモヤモヤと湧いてきたしで。とりあえずプログラミング言語の手習いとしては王道のHello Worldを表示させることに。しかもコマンドラインで。</p>
<p>GUIアプリケーションはCocoaのお陰で非常に簡単に作れるのはサンプルチュートリアルで体感したのですが、ちょっとした実験や勉強用のプログラムで、Interface Builderをいじくるのは面倒だったのでコマンドラインをチョイス（こうやってInterface Builderの勉強が遅れるという）。</p>
<p>続きを読むでHello Worldスクリプト。</p>]]>
        <![CDATA[<h2>まずXcodeで、新規プロジェクトを作成する</h2>
<p>普通にMacアプリケーションを作るのであれば</p>
<ul>
    <li>「新規プロジェクト」→「Application」→「Cocoa Application」</li>
</ul>
<p>を選択するのだけど、今回はコマンドラインで作りたかったので、</p>
<ul>
    <li>「新規プロジェクト」→「Command Line Utility」→「Foundation Tool」</li>
</ul>
<p>を選択。</p>
<p>適当に保存ディレクトリとプロジェクト名を入力して準備完了。今回は「HelloWorld1」というプロジェクト名に。</p>

<h2>ソースを開く</h2>
<p>「HelloWorld1.m」というソースファイルがあるので、それを開くと実はすでにHello Worldが表示出来るサンプルコードが入っていたりする。が、いったんそれを消して教科書通りに自分で打ち込んでみる。</p>
<pre class="prettyprint">
#include &lt;Foundation/NSObject.h&gt;
#include &lt;stdio.h&gt;

@interface HelloWorld : NSObject
- (void) hello;
@end

@implementation HelloWorld

- (void) hello{
  printf("Hello World.\n");
}

@end

int main(int argc, char **argv){
  id obj = [HelloWorld alloc];
  [obj hello];
  
  return 0;
}
</pre>
<p>もうね、一つ一つのコードの意味を調べていったらキリがなかったので、これはこうゆうものだと今は流しておくことにした。作っているうちに理解が進むと…いいなぁ。ほとんどC言語と一緒なので分かりやすいといえば分かりやすいけど、そもそもC言語自体を勉強したのが数年以上前でその間、いっさい使っていなかったので忘れたに等しい。</p>
<p>こいつを「ビルドして進行」すると、~/HelloWorld1/build/Release/HelloWorld1 というバイナリが出来るので、ターミナルで ./HelloWorld1 と実行すると「Hello World.」と表示される。</p>
<h2>いちいちターミナルで実行するのが面倒なので</h2>
<p>Xcodeのメニュー「実行」→「ターミナル」（ショートカット：コマンド＋シフト＋R）でXcode内にターミナルが表示されて、そこにコンパイルから実行結果まで表示することができるのでお手軽。</p>
<p>次回は、標準入力を使ったHello Worldを作ってみよう。</p>]]>
    </content>
</entry>

<entry>
    <title>ブログ通信簿やってみました</title>
    <link rel="alternate" type="text/html" href="http://blog.tofu-kun.org/080728155633.php" />
    <id>tag:blog2.tofu-kun.org,2008://1.388</id>

    <published>2008-07-28T06:56:33Z</published>
    <updated>2009-10-14T02:38:42Z</updated>

    <summary>goo ラボのブログ通信簿というWebサービスがあったのでさっそくやってみました...</summary>
    <author>
        <name>zaru</name>
        
    </author>
    
        <category term="WEBサイト・サービス" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tofu-kun.org/">
        <![CDATA[<p>goo ラボのブログ通信簿というWebサービスがあったのでさっそくやってみました。</p>
<div class="imageBox">
<p><img src="/images/tushinbo_img.rb.png" alt="ブログ通信簿" /></p>
</div>
<p>うわぁぁ…</p>
<p>年齢が41歳って！41歳って！！</p>
<blockquote>
<p>もう少し頻繁に書いてみませんか。</p>
</blockquote>
<p>すいません＞＜</p>
<p>でもフリーター目指すのはどうかと思います＞＜</p>]]>
        
    </content>
</entry>

<entry>
    <title>CakePHPで3キャリア携帯の絵文字を表示する</title>
    <link rel="alternate" type="text/html" href="http://blog.tofu-kun.org/080715194417.php" />
    <id>tag:blog2.tofu-kun.org,2008://1.387</id>

    <published>2008-07-15T10:44:17Z</published>
    <updated>2009-10-14T02:38:42Z</updated>

    <summary>CakePHPで携帯サイトを構築していくのに必須な絵文字。CakePHPじゃなく...</summary>
    <author>
        <name>zaru</name>
        
    </author>
    
        <category term="CakePHP" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tofu-kun.org/">
        <![CDATA[<p>CakePHPで携帯サイトを構築していくのに必須な絵文字。CakePHPじゃなくても必須な絵文字ですが、必須なのにけっこうややこしくて手を出すのが面倒くさいので、今まで逃げ回っていましたが、そうもいかない時期になってきたのでちょっと作ってみました。</p>
<p>CakePHPじゃなくてもカスタマイズすれば使えますが、基本的にはCakePHPのコンポーネントとして使うように設計しました。データベースを使って全絵文字を取得する方法なのでパフォーマンスはあまり宜しくないです…。どなたかCakePHPらしい使い方で、なおかつパフォーマンスの優れた方法をご存知であればご教授くださいませ。</p>
<p>それでは、続きを読むで。</p>]]>
        <![CDATA[<h2>仕様</h2>
<ul>
    <li>DoCoMo / au / Softbank 3キャリア対応 252絵文字</li>
    <li>PCからのアクセスの場合は、DoCoMoの絵文字を画像化して表示</li>
    <li>端末の振り分けはUser-Agent</li>
</ul>
<p>DoCoMoとau、Softbankの絵文字の互換性を持たせていますが、一番絵文字の少ないDoCoMoに合わせてあります。</p>
<p>また、それでも対応する絵文字の存在しないものはだいたいテキストを表示するようにしています。そこら辺は、データを編集すればカスタマイズが可能なので、ご自由にどうぞ。</p>

<h2>インストール方法</h2>
<p>以下のZIPファイルをダウンロードしてください。</p>
<ul>
    <li><a href="http://tofu-kun.org/script/cakeemoji.zip">cakeemoji.zip</a></li>
</ul>
<h3>内容物</h3>
<ul>
    <li>/controllers
    <ul>
        <li>emoji_controller.php</li>
        <li>/components
        <ul>
            <li>emoji.php</li>
        </ul>
        </li>
    </ul>
    </li>
    <li>emoji_datas.sql</li>
    <li>/models
    <ul>
        <li>emoji_data.php</li>
    </ul>
    </li>
    <li>/views
    <ul>
        <li>/emoji
        <ul>
            <li>index.thtml</li>
        </ul>
        </li>
    </ul>
    </li>
    <li>/webroot
    <ul>
        <li>/images
        <ul>
            <li>/emoji</li>
        </ul>
        </li>
    </ul>
    </li>
</ul>
<p>色々入っていますが、必要なのは<strong>/components/emoji.php</strong>と<strong>emoji_datas.sql</strong>と<strong>/images/emoji/*</strong>の3つです。</p>
<p>それ以外のファイルは、サンプルファイルなので、いちいちコントローラを作るのが面倒な人は利用してみてください。たぶん動きます。</p>
<h3>emoji_datasテーブルの作成</h3>
<p>絵文字のデータを格納しているテーブルを作成します。phpMyAdminか、直接SQLを実行してデータをインポートしてください。emoji_datas というテーブル名にしていますが、適宜名前を付け替えても大丈夫です。</p>
<h3>コントローラの作成</h3>
<p>emoji.php を components に配置したら、コントローラを作成します。</p>
<pre class="prettyprint">
$emojiData = $this->EmojiData->findAll();
$this->set('emoji',$this->Emoji->EmojiData($emojiData));
</pre>
<p>こんな感じで、emoji_datas からデータを取得して、コンポーネントの Emoji->EmojiData に渡して $emoji としてビューに出力しています。これだけで終わりです。</p>
<h3>ビューでの表示</h3>
<p>ビュー側では、渡された絵文字データを絵文字ID指定して表示すれば各キャリア／端末に合った形で出力します。</p>
<pre class="prettyprint">
echo $emoji['1'];
echo $emoji['15'];
</pre>
<h2>絵文字対応表</h2>
<p>どの数字を指定すればいいの？ってな時のために対応表を置いておきます。基本的にDoCoMoに合わせているので、DoCoMoの絵文字番号と一致しています。</p>
<table>
<tr><th>ID</th><th>画像</th><th>説明</th></tr>
<tr><td>1</td><td><img src="/images/emoji/E63E.gif" alt="絵文字" /></td><td>晴れ</td></tr>
<tr><td>2</td><td><img src="/images/emoji/E63F.gif" alt="絵文字" /></td><td>曇り</td></tr>
<tr><td>3</td><td><img src="/images/emoji/E640.gif" alt="絵文字" /></td><td>雨</td></tr>
<tr><td>4</td><td><img src="/images/emoji/E641.gif" alt="絵文字" /></td><td>雪</td></tr>
<tr><td>5</td><td><img src="/images/emoji/E642.gif" alt="絵文字" /></td><td>雷</td></tr>
<tr><td>6</td><td><img src="/images/emoji/E643.gif" alt="絵文字" /></td><td>台風</td></tr>
<tr><td>7</td><td><img src="/images/emoji/E644.gif" alt="絵文字" /></td><td>霧</td></tr>
<tr><td>8</td><td><img src="/images/emoji/E645.gif" alt="絵文字" /></td><td>小雨</td></tr>
<tr><td>9</td><td><img src="/images/emoji/E646.gif" alt="絵文字" /></td><td>牡羊座</td></tr>
<tr><td>10</td><td><img src="/images/emoji/E647.gif" alt="絵文字" /></td><td>牡牛座</td></tr>
<tr><td>11</td><td><img src="/images/emoji/E648.gif" alt="絵文字" /></td><td>双子座</td></tr>
<tr><td>12</td><td><img src="/images/emoji/E649.gif" alt="絵文字" /></td><td>蟹座</td></tr>
<tr><td>13</td><td><img src="/images/emoji/E64A.gif" alt="絵文字" /></td><td>獅子座</td></tr>
<tr><td>14</td><td><img src="/images/emoji/E64B.gif" alt="絵文字" /></td><td>乙女座</td></tr>
<tr><td>15</td><td><img src="/images/emoji/E64C.gif" alt="絵文字" /></td><td>天秤座</td></tr>
<tr><td>16</td><td><img src="/images/emoji/E64D.gif" alt="絵文字" /></td><td>蠍座</td></tr>
<tr><td>17</td><td><img src="/images/emoji/E64E.gif" alt="絵文字" /></td><td>射手座</td></tr>
<tr><td>18</td><td><img src="/images/emoji/E64F.gif" alt="絵文字" /></td><td>山羊座</td></tr>
<tr><td>19</td><td><img src="/images/emoji/E650.gif" alt="絵文字" /></td><td>水瓶座</td></tr>
<tr><td>20</td><td><img src="/images/emoji/E651.gif" alt="絵文字" /></td><td>魚座</td></tr>
<tr><td>21</td><td><img src="/images/emoji/E652.gif" alt="絵文字" /></td><td>スポーツ</td></tr>
<tr><td>22</td><td><img src="/images/emoji/E653.gif" alt="絵文字" /></td><td>野球</td></tr>
<tr><td>23</td><td><img src="/images/emoji/E654.gif" alt="絵文字" /></td><td>ゴルフ</td></tr>
<tr><td>24</td><td><img src="/images/emoji/E655.gif" alt="絵文字" /></td><td>テニス</td></tr>
<tr><td>25</td><td><img src="/images/emoji/E656.gif" alt="絵文字" /></td><td>サッカー</td></tr>
<tr><td>26</td><td><img src="/images/emoji/E657.gif" alt="絵文字" /></td><td>スキー</td></tr>
<tr><td>27</td><td><img src="/images/emoji/E658.gif" alt="絵文字" /></td><td>バスケットボール</td></tr>
<tr><td>28</td><td><img src="/images/emoji/E659.gif" alt="絵文字" /></td><td>モータースポーツ</td></tr>
<tr><td>29</td><td><img src="/images/emoji/E65A.gif" alt="絵文字" /></td><td>ポケットベル</td></tr>
<tr><td>30</td><td><img src="/images/emoji/E65B.gif" alt="絵文字" /></td><td>電車</td></tr>
<tr><td>31</td><td><img src="/images/emoji/E65C.gif" alt="絵文字" /></td><td>地下鉄</td></tr>
<tr><td>32</td><td><img src="/images/emoji/E65D.gif" alt="絵文字" /></td><td>新幹線</td></tr>
<tr><td>33</td><td><img src="/images/emoji/E65E.gif" alt="絵文字" /></td><td>車（セダン）</td></tr>
<tr><td>34</td><td><img src="/images/emoji/E65F.gif" alt="絵文字" /></td><td>車（ＲＶ）</td></tr>
<tr><td>35</td><td><img src="/images/emoji/E660.gif" alt="絵文字" /></td><td>バス</td></tr>
<tr><td>36</td><td><img src="/images/emoji/E661.gif" alt="絵文字" /></td><td>船</td></tr>
<tr><td>37</td><td><img src="/images/emoji/E662.gif" alt="絵文字" /></td><td>飛行機</td></tr>
<tr><td>38</td><td><img src="/images/emoji/E663.gif" alt="絵文字" /></td><td>家</td></tr>
<tr><td>39</td><td><img src="/images/emoji/E664.gif" alt="絵文字" /></td><td>ビル</td></tr>
<tr><td>40</td><td><img src="/images/emoji/E665.gif" alt="絵文字" /></td><td>郵便局</td></tr>
<tr><td>41</td><td><img src="/images/emoji/E666.gif" alt="絵文字" /></td><td>病院</td></tr>
<tr><td>42</td><td><img src="/images/emoji/E667.gif" alt="絵文字" /></td><td>銀行</td></tr>
<tr><td>43</td><td><img src="/images/emoji/E668.gif" alt="絵文字" /></td><td>ＡＴＭ</td></tr>
<tr><td>44</td><td><img src="/images/emoji/E669.gif" alt="絵文字" /></td><td>ホテル</td></tr>
<tr><td>45</td><td><img src="/images/emoji/E66A.gif" alt="絵文字" /></td><td>コンビニ</td></tr>
<tr><td>46</td><td><img src="/images/emoji/E66B.gif" alt="絵文字" /></td><td>ガソリンスタンド</td></tr>
<tr><td>47</td><td><img src="/images/emoji/E66C.gif" alt="絵文字" /></td><td>駐車場</td></tr>
<tr><td>48</td><td><img src="/images/emoji/E66D.gif" alt="絵文字" /></td><td>信号</td></tr>
<tr><td>49</td><td><img src="/images/emoji/E66E.gif" alt="絵文字" /></td><td>トイレ</td></tr>
<tr><td>50</td><td><img src="/images/emoji/E66F.gif" alt="絵文字" /></td><td>レストラン</td></tr>
<tr><td>51</td><td><img src="/images/emoji/E670.gif" alt="絵文字" /></td><td>喫茶店</td></tr>
<tr><td>52</td><td><img src="/images/emoji/E671.gif" alt="絵文字" /></td><td>バー</td></tr>
<tr><td>53</td><td><img src="/images/emoji/E672.gif" alt="絵文字" /></td><td>ビール</td></tr>
<tr><td>54</td><td><img src="/images/emoji/E673.gif" alt="絵文字" /></td><td>ファーストフード</td></tr>
<tr><td>55</td><td><img src="/images/emoji/E674.gif" alt="絵文字" /></td><td>ブティック</td></tr>
<tr><td>56</td><td><img src="/images/emoji/E675.gif" alt="絵文字" /></td><td>美容院</td></tr>
<tr><td>57</td><td><img src="/images/emoji/E676.gif" alt="絵文字" /></td><td>カラオケ</td></tr>
<tr><td>58</td><td><img src="/images/emoji/E677.gif" alt="絵文字" /></td><td>映画</td></tr>
<tr><td>59</td><td><img src="/images/emoji/E678.gif" alt="絵文字" /></td><td>右斜め上</td></tr>
<tr><td>60</td><td><img src="/images/emoji/E679.gif" alt="絵文字" /></td><td>遊園地</td></tr>
<tr><td>61</td><td><img src="/images/emoji/E67A.gif" alt="絵文字" /></td><td>音楽</td></tr>
<tr><td>62</td><td><img src="/images/emoji/E67B.gif" alt="絵文字" /></td><td>アート</td></tr>
<tr><td>63</td><td><img src="/images/emoji/E67C.gif" alt="絵文字" /></td><td>演劇</td></tr>
<tr><td>64</td><td><img src="/images/emoji/E67D.gif" alt="絵文字" /></td><td>イベント</td></tr>
<tr><td>65</td><td><img src="/images/emoji/E67E.gif" alt="絵文字" /></td><td>チケット</td></tr>
<tr><td>66</td><td><img src="/images/emoji/E67F.gif" alt="絵文字" /></td><td>喫煙</td></tr>
<tr><td>67</td><td><img src="/images/emoji/E680.gif" alt="絵文字" /></td><td>禁煙</td></tr>
<tr><td>68</td><td><img src="/images/emoji/E681.gif" alt="絵文字" /></td><td>カメラ</td></tr>
<tr><td>69</td><td><img src="/images/emoji/E682.gif" alt="絵文字" /></td><td>カバン</td></tr>
<tr><td>70</td><td><img src="/images/emoji/E683.gif" alt="絵文字" /></td><td>本</td></tr>
<tr><td>71</td><td><img src="/images/emoji/E684.gif" alt="絵文字" /></td><td>リボン</td></tr>
<tr><td>72</td><td><img src="/images/emoji/E685.gif" alt="絵文字" /></td><td>プレゼント</td></tr>
<tr><td>73</td><td><img src="/images/emoji/E686.gif" alt="絵文字" /></td><td>バースデー</td></tr>
<tr><td>74</td><td><img src="/images/emoji/E687.gif" alt="絵文字" /></td><td>電話</td></tr>
<tr><td>75</td><td><img src="/images/emoji/E688.gif" alt="絵文字" /></td><td>携帯電話</td></tr>
<tr><td>76</td><td><img src="/images/emoji/E689.gif" alt="絵文字" /></td><td>メモ</td></tr>
<tr><td>77</td><td><img src="/images/emoji/E68A.gif" alt="絵文字" /></td><td>ＴＶ</td></tr>
<tr><td>78</td><td><img src="/images/emoji/E68B.gif" alt="絵文字" /></td><td>ゲーム</td></tr>
<tr><td>79</td><td><img src="/images/emoji/E68C.gif" alt="絵文字" /></td><td>ＣＤ</td></tr>
<tr><td>80</td><td><img src="/images/emoji/E68D.gif" alt="絵文字" /></td><td>ハート</td></tr>
<tr><td>81</td><td><img src="/images/emoji/E68E.gif" alt="絵文字" /></td><td>スペード</td></tr>
<tr><td>82</td><td><img src="/images/emoji/E68F.gif" alt="絵文字" /></td><td>ダイヤ</td></tr>
<tr><td>83</td><td><img src="/images/emoji/E690.gif" alt="絵文字" /></td><td>クラブ</td></tr>
<tr><td>84</td><td><img src="/images/emoji/E691.gif" alt="絵文字" /></td><td>目</td></tr>
<tr><td>85</td><td><img src="/images/emoji/E692.gif" alt="絵文字" /></td><td>耳</td></tr>
<tr><td>86</td><td><img src="/images/emoji/E693.gif" alt="絵文字" /></td><td>手（グー）</td></tr>
<tr><td>87</td><td><img src="/images/emoji/E694.gif" alt="絵文字" /></td><td>手（チョキ）</td></tr>
<tr><td>88</td><td><img src="/images/emoji/E695.gif" alt="絵文字" /></td><td>手（パー）</td></tr>
<tr><td>89</td><td><img src="/images/emoji/E696.gif" alt="絵文字" /></td><td>右斜め下</td></tr>
<tr><td>90</td><td><img src="/images/emoji/E697.gif" alt="絵文字" /></td><td>左斜め上</td></tr>
<tr><td>91</td><td><img src="/images/emoji/E698.gif" alt="絵文字" /></td><td>足</td></tr>
<tr><td>92</td><td><img src="/images/emoji/E699.gif" alt="絵文字" /></td><td>くつ</td></tr>
<tr><td>93</td><td><img src="/images/emoji/E69A.gif" alt="絵文字" /></td><td>眼鏡</td></tr>
<tr><td>94</td><td><img src="/images/emoji/E69B.gif" alt="絵文字" /></td><td>車椅子</td></tr>
<tr><td>95</td><td><img src="/images/emoji/E69C.gif" alt="絵文字" /></td><td>新月</td></tr>
<tr><td>96</td><td><img src="/images/emoji/E69D.gif" alt="絵文字" /></td><td>やや欠け月</td></tr>
<tr><td>97</td><td><img src="/images/emoji/E69E.gif" alt="絵文字" /></td><td>半月</td></tr>
<tr><td>98</td><td><img src="/images/emoji/E69F.gif" alt="絵文字" /></td><td>三日月</td></tr>
<tr><td>99</td><td><img src="/images/emoji/E6A0.gif" alt="絵文字" /></td><td>満月</td></tr>
<tr><td>100</td><td><img src="/images/emoji/E6A1.gif" alt="絵文字" /></td><td>犬</td></tr>
<tr><td>101</td><td><img src="/images/emoji/E6A2.gif" alt="絵文字" /></td><td>猫</td></tr>
<tr><td>102</td><td><img src="/images/emoji/E6A3.gif" alt="絵文字" /></td><td>リゾート</td></tr>
<tr><td>103</td><td><img src="/images/emoji/E6A4.gif" alt="絵文字" /></td><td>クリスマス</td></tr>
<tr><td>104</td><td><img src="/images/emoji/E6A5.gif" alt="絵文字" /></td><td>左斜め下</td></tr>
<tr><td>105</td><td><img src="/images/emoji/E6CE.gif" alt="絵文字" /></td><td>phoneto</td></tr>
<tr><td>106</td><td><img src="/images/emoji/E6CF.gif" alt="絵文字" /></td><td>mailto</td></tr>
<tr><td>107</td><td><img src="/images/emoji/E6D0.gif" alt="絵文字" /></td><td>faxto</td></tr>
<tr><td>108</td><td><img src="/images/emoji/E6D1.gif" alt="絵文字" /></td><td>iモード</td></tr>
<tr><td>109</td><td><img src="/images/emoji/E6D2.gif" alt="絵文字" /></td><td>iモード（枠付き）</td></tr>
<tr><td>110</td><td><img src="/images/emoji/E6D3.gif" alt="絵文字" /></td><td>メール</td></tr>
<tr><td>111</td><td><img src="/images/emoji/E6D4.gif" alt="絵文字" /></td><td>ドコモ提供</td></tr>
<tr><td>112</td><td><img src="/images/emoji/E6D5.gif" alt="絵文字" /></td><td>ドコモポイント</td></tr>
<tr><td>113</td><td><img src="/images/emoji/E6D6.gif" alt="絵文字" /></td><td>有料</td></tr>
<tr><td>114</td><td><img src="/images/emoji/E6D7.gif" alt="絵文字" /></td><td>無料</td></tr>
<tr><td>115</td><td><img src="/images/emoji/E6D8.gif" alt="絵文字" /></td><td>ID</td></tr>
<tr><td>116</td><td><img src="/images/emoji/E6D9.gif" alt="絵文字" /></td><td>パスワード</td></tr>
<tr><td>117</td><td><img src="/images/emoji/E6DA.gif" alt="絵文字" /></td><td>次項有</td></tr>
<tr><td>118</td><td><img src="/images/emoji/E6DB.gif" alt="絵文字" /></td><td>クリア</td></tr>
<tr><td>119</td><td><img src="/images/emoji/E6DC.gif" alt="絵文字" /></td><td>サーチ（調べる）</td></tr>
<tr><td>120</td><td><img src="/images/emoji/E6DD.gif" alt="絵文字" /></td><td>ＮＥＷ</td></tr>
<tr><td>121</td><td><img src="/images/emoji/E6DE.gif" alt="絵文字" /></td><td>位置情報</td></tr>
<tr><td>122</td><td><img src="/images/emoji/E6DF.gif" alt="絵文字" /></td><td>フリーダイヤル</td></tr>
<tr><td>123</td><td><img src="/images/emoji/E6E0.gif" alt="絵文字" /></td><td>シャープダイヤル</td></tr>
<tr><td>124</td><td><img src="/images/emoji/E6E1.gif" alt="絵文字" /></td><td>モバＱ</td></tr>
<tr><td>125</td><td><img src="/images/emoji/E6E2.gif" alt="絵文字" /></td><td>1</td></tr>
<tr><td>126</td><td><img src="/images/emoji/E6E3.gif" alt="絵文字" /></td><td>2</td></tr>
<tr><td>127</td><td><img src="/images/emoji/E6E4.gif" alt="絵文字" /></td><td>3</td></tr>
<tr><td>128</td><td><img src="/images/emoji/E6E5.gif" alt="絵文字" /></td><td>4</td></tr>
<tr><td>129</td><td><img src="/images/emoji/E6E6.gif" alt="絵文字" /></td><td>5</td></tr>
<tr><td>130</td><td><img src="/images/emoji/E6E7.gif" alt="絵文字" /></td><td>6</td></tr>
<tr><td>131</td><td><img src="/images/emoji/E6E8.gif" alt="絵文字" /></td><td>7</td></tr>
<tr><td>132</td><td><img src="/images/emoji/E6E9.gif" alt="絵文字" /></td><td>8</td></tr>
<tr><td>133</td><td><img src="/images/emoji/E6EA.gif" alt="絵文字" /></td><td>9</td></tr>
<tr><td>134</td><td><img src="/images/emoji/E6EB.gif" alt="絵文字" /></td><td>0</td></tr>
<tr><td>135</td><td><img src="/images/emoji/E70B.gif" alt="絵文字" /></td><td>決定</td></tr>
<tr><td>136</td><td><img src="/images/emoji/E6EC.gif" alt="絵文字" /></td><td>黒ハート</td></tr>
<tr><td>137</td><td><img src="/images/emoji/E6ED.gif" alt="絵文字" /></td><td>揺れるハート</td></tr>
<tr><td>138</td><td><img src="/images/emoji/E6EE.gif" alt="絵文字" /></td><td>失恋</td></tr>
<tr><td>139</td><td><img src="/images/emoji/E6EF.gif" alt="絵文字" /></td><td>ハートたち（複数ハート）</td></tr>
<tr><td>140</td><td><img src="/images/emoji/E6F0.gif" alt="絵文字" /></td><td>わーい（嬉しい顔）</td></tr>
<tr><td>141</td><td><img src="/images/emoji/E6F1.gif" alt="絵文字" /></td><td>ちっ（怒った顔）</td></tr>
<tr><td>142</td><td><img src="/images/emoji/E6F2.gif" alt="絵文字" /></td><td>がく〜（落胆した顔）</td></tr>
<tr><td>143</td><td><img src="/images/emoji/E6F3.gif" alt="絵文字" /></td><td>もうやだ〜（悲しい顔）</td></tr>
<tr><td>144</td><td><img src="/images/emoji/E6F4.gif" alt="絵文字" /></td><td>ふらふら</td></tr>
<tr><td>145</td><td><img src="/images/emoji/E6F5.gif" alt="絵文字" /></td><td>グッド（上向き矢印）</td></tr>
<tr><td>146</td><td><img src="/images/emoji/E6F6.gif" alt="絵文字" /></td><td>るんるん</td></tr>
<tr><td>147</td><td><img src="/images/emoji/E6F7.gif" alt="絵文字" /></td><td>いい気分（温泉）</td></tr>
<tr><td>148</td><td><img src="/images/emoji/E6F8.gif" alt="絵文字" /></td><td>かわいい</td></tr>
<tr><td>149</td><td><img src="/images/emoji/E6F9.gif" alt="絵文字" /></td><td>キスマーク</td></tr>
<tr><td>150</td><td><img src="/images/emoji/E6FA.gif" alt="絵文字" /></td><td>ぴかぴか（新しい）</td></tr>
<tr><td>151</td><td><img src="/images/emoji/E6FB.gif" alt="絵文字" /></td><td>ひらめき</td></tr>
<tr><td>152</td><td><img src="/images/emoji/E6FC.gif" alt="絵文字" /></td><td>むかっ（怒り）</td></tr>
<tr><td>153</td><td><img src="/images/emoji/E6FD.gif" alt="絵文字" /></td><td>パンチ</td></tr>
<tr><td>154</td><td><img src="/images/emoji/E6FE.gif" alt="絵文字" /></td><td>爆弾</td></tr>
<tr><td>155</td><td><img src="/images/emoji/E6FF.gif" alt="絵文字" /></td><td>ムード</td></tr>
<tr><td>156</td><td><img src="/images/emoji/E700.gif" alt="絵文字" /></td><td>バッド（下向き矢印）</td></tr>
<tr><td>157</td><td><img src="/images/emoji/E701.gif" alt="絵文字" /></td><td>眠い(睡眠)</td></tr>
<tr><td>158</td><td><img src="/images/emoji/E702.gif" alt="絵文字" /></td><td>exclamation</td></tr>
<tr><td>159</td><td><img src="/images/emoji/E703.gif" alt="絵文字" /></td><td>exclamation&question</td></tr>
<tr><td>160</td><td><img src="/images/emoji/E704.gif" alt="絵文字" /></td><td>exclamation×2</td></tr>
<tr><td>161</td><td><img src="/images/emoji/E705.gif" alt="絵文字" /></td><td>どんっ（衝撃）</td></tr>
<tr><td>162</td><td><img src="/images/emoji/E706.gif" alt="絵文字" /></td><td>あせあせ（飛び散る汗）</td></tr>
<tr><td>163</td><td><img src="/images/emoji/E707.gif" alt="絵文字" /></td><td>たらーっ（汗）</td></tr>
<tr><td>164</td><td><img src="/images/emoji/E708.gif" alt="絵文字" /></td><td>ダッシュ（走り出すさま）</td></tr>
<tr><td>165</td><td><img src="/images/emoji/E709.gif" alt="絵文字" /></td><td>ー（長音記号１）</td></tr>
<tr><td>166</td><td><img src="/images/emoji/E70A.gif" alt="絵文字" /></td><td>ー（長音記号２）</td></tr>
<tr><td>167</td><td><img src="/images/emoji/E6AC.gif" alt="絵文字" /></td><td>カチンコ</td></tr>
<tr><td>168</td><td><img src="/images/emoji/E6AD.gif" alt="絵文字" /></td><td>ふくろ</td></tr>
<tr><td>169</td><td><img src="/images/emoji/E6AE.gif" alt="絵文字" /></td><td>ペン</td></tr>
<tr><td>170</td><td><img src="/images/emoji/E6B1.gif" alt="絵文字" /></td><td>人影</td></tr>
<tr><td>171</td><td><img src="/images/emoji/E6B2.gif" alt="絵文字" /></td><td>いす</td></tr>
<tr><td>172</td><td><img src="/images/emoji/E6B3.gif" alt="絵文字" /></td><td>夜</td></tr>
<tr><td>173</td><td><img src="/images/emoji/E6B7.gif" alt="絵文字" /></td><td>soon</td></tr>
<tr><td>174</td><td><img src="/images/emoji/E6B8.gif" alt="絵文字" /></td><td>on</td></tr>
<tr><td>175</td><td><img src="/images/emoji/E6B9.gif" alt="絵文字" /></td><td>end</td></tr>
<tr><td>176</td><td><img src="/images/emoji/E6BA.gif" alt="絵文字" /></td><td>時計</td></tr>
<tr><td>177</td><td><img src="/images/emoji/E70C.gif" alt="絵文字" /></td><td>iアプリ</td></tr>
<tr><td>178</td><td><img src="/images/emoji/E70D.gif" alt="絵文字" /></td><td>iアプリ（枠付き）</td></tr>
<tr><td>179</td><td><img src="/images/emoji/E70E.gif" alt="絵文字" /></td><td>Tシャツ（ボーダー）</td></tr>
<tr><td>180</td><td><img src="/images/emoji/E70F.gif" alt="絵文字" /></td><td>がま口財布</td></tr>
<tr><td>181</td><td><img src="/images/emoji/E710.gif" alt="絵文字" /></td><td>化粧</td></tr>
<tr><td>182</td><td><img src="/images/emoji/E711.gif" alt="絵文字" /></td><td>ジーンズ</td></tr>
<tr><td>183</td><td><img src="/images/emoji/E712.gif" alt="絵文字" /></td><td>スノボ</td></tr>
<tr><td>184</td><td><img src="/images/emoji/E713.gif" alt="絵文字" /></td><td>チャペル</td></tr>
<tr><td>185</td><td><img src="/images/emoji/E714.gif" alt="絵文字" /></td><td>ドア</td></tr>
<tr><td>186</td><td><img src="/images/emoji/E715.gif" alt="絵文字" /></td><td>ドル袋</td></tr>
<tr><td>187</td><td><img src="/images/emoji/E716.gif" alt="絵文字" /></td><td>パソコン</td></tr>
<tr><td>188</td><td><img src="/images/emoji/E717.gif" alt="絵文字" /></td><td>ラブレター</td></tr>
<tr><td>189</td><td><img src="/images/emoji/E718.gif" alt="絵文字" /></td><td>レンチ</td></tr>
<tr><td>190</td><td><img src="/images/emoji/E719.gif" alt="絵文字" /></td><td>鉛筆</td></tr>
<tr><td>191</td><td><img src="/images/emoji/E71A.gif" alt="絵文字" /></td><td>王冠</td></tr>
<tr><td>192</td><td><img src="/images/emoji/E71B.gif" alt="絵文字" /></td><td>指輪</td></tr>
<tr><td>193</td><td><img src="/images/emoji/E71C.gif" alt="絵文字" /></td><td>砂時計</td></tr>
<tr><td>194</td><td><img src="/images/emoji/E71D.gif" alt="絵文字" /></td><td>自転車</td></tr>
<tr><td>195</td><td><img src="/images/emoji/E71E.gif" alt="絵文字" /></td><td>湯のみ</td></tr>
<tr><td>196</td><td><img src="/images/emoji/E71F.gif" alt="絵文字" /></td><td>腕時計</td></tr>
<tr><td>197</td><td><img src="/images/emoji/E720.gif" alt="絵文字" /></td><td>考えてる顔</td></tr>
<tr><td>198</td><td><img src="/images/emoji/E721.gif" alt="絵文字" /></td><td>ほっとした顔</td></tr>
<tr><td>199</td><td><img src="/images/emoji/E722.gif" alt="絵文字" /></td><td>冷や汗</td></tr>
<tr><td>200</td><td><img src="/images/emoji/E723.gif" alt="絵文字" /></td><td>冷や汗2</td></tr>
<tr><td>201</td><td><img src="/images/emoji/E724.gif" alt="絵文字" /></td><td>ぷっくっくな顔</td></tr>
<tr><td>202</td><td><img src="/images/emoji/E725.gif" alt="絵文字" /></td><td>ボケーっとした顔</td></tr>
<tr><td>203</td><td><img src="/images/emoji/E726.gif" alt="絵文字" /></td><td>目がハート</td></tr>
<tr><td>204</td><td><img src="/images/emoji/E727.gif" alt="絵文字" /></td><td>指でOK</td></tr>
<tr><td>205</td><td><img src="/images/emoji/E728.gif" alt="絵文字" /></td><td>あっかんべー</td></tr>
<tr><td>206</td><td><img src="/images/emoji/E729.gif" alt="絵文字" /></td><td>ウィンク</td></tr>
<tr><td>207</td><td><img src="/images/emoji/E72A.gif" alt="絵文字" /></td><td>うれしい顔</td></tr>
<tr><td>208</td><td><img src="/images/emoji/E72B.gif" alt="絵文字" /></td><td>がまん顔</td></tr>
<tr><td>209</td><td><img src="/images/emoji/E72C.gif" alt="絵文字" /></td><td>猫2</td></tr>
<tr><td>210</td><td><img src="/images/emoji/E72D.gif" alt="絵文字" /></td><td>泣き顔</td></tr>
<tr><td>211</td><td><img src="/images/emoji/E72E.gif" alt="絵文字" /></td><td>涙</td></tr>
<tr><td>212</td><td><img src="/images/emoji/E72F.gif" alt="絵文字" /></td><td>NG</td></tr>
<tr><td>213</td><td><img src="/images/emoji/E730.gif" alt="絵文字" /></td><td>クリップ</td></tr>
<tr><td>214</td><td><img src="/images/emoji/E731.gif" alt="絵文字" /></td><td>コピーライト</td></tr>
<tr><td>215</td><td><img src="/images/emoji/E732.gif" alt="絵文字" /></td><td>トレードマーク</td></tr>
<tr><td>216</td><td><img src="/images/emoji/E733.gif" alt="絵文字" /></td><td>走る人</td></tr>
<tr><td>217</td><td><img src="/images/emoji/E734.gif" alt="絵文字" /></td><td>マル秘</td></tr>
<tr><td>218</td><td><img src="/images/emoji/E735.gif" alt="絵文字" /></td><td>リサイクル</td></tr>
<tr><td>219</td><td><img src="/images/emoji/E736.gif" alt="絵文字" /></td><td>レジスタードトレードマーク</td></tr>
<tr><td>220</td><td><img src="/images/emoji/E737.gif" alt="絵文字" /></td><td>危険・警告</td></tr>
<tr><td>221</td><td><img src="/images/emoji/E738.gif" alt="絵文字" /></td><td>禁止</td></tr>
<tr><td>222</td><td><img src="/images/emoji/E739.gif" alt="絵文字" /></td><td>空室・空席・空車</td></tr>
<tr><td>223</td><td><img src="/images/emoji/E73A.gif" alt="絵文字" /></td><td>合格マーク</td></tr>
<tr><td>224</td><td><img src="/images/emoji/E73B.gif" alt="絵文字" /></td><td>満室・満席・満車</td></tr>
<tr><td>225</td><td><img src="/images/emoji/E73C.gif" alt="絵文字" /></td><td>矢印左右</td></tr>
<tr><td>226</td><td><img src="/images/emoji/E73D.gif" alt="絵文字" /></td><td>矢印上下</td></tr>
<tr><td>227</td><td><img src="/images/emoji/E73E.gif" alt="絵文字" /></td><td>学校</td></tr>
<tr><td>228</td><td><img src="/images/emoji/E73F.gif" alt="絵文字" /></td><td>波</td></tr>
<tr><td>229</td><td><img src="/images/emoji/E740.gif" alt="絵文字" /></td><td>富士山</td></tr>
<tr><td>230</td><td><img src="/images/emoji/E741.gif" alt="絵文字" /></td><td>クローバー</td></tr>
<tr><td>231</td><td><img src="/images/emoji/E742.gif" alt="絵文字" /></td><td>さくらんぼ</td></tr>
<tr><td>232</td><td><img src="/images/emoji/E743.gif" alt="絵文字" /></td><td>チューリップ</td></tr>
<tr><td>233</td><td><img src="/images/emoji/E744.gif" alt="絵文字" /></td><td>バナナ</td></tr>
<tr><td>234</td><td><img src="/images/emoji/E745.gif" alt="絵文字" /></td><td>りんご</td></tr>
<tr><td>235</td><td><img src="/images/emoji/E746.gif" alt="絵文字" /></td><td>芽</td></tr>
<tr><td>236</td><td><img src="/images/emoji/E747.gif" alt="絵文字" /></td><td>もみじ</td></tr>
<tr><td>237</td><td><img src="/images/emoji/E748.gif" alt="絵文字" /></td><td>桜</td></tr>
<tr><td>238</td><td><img src="/images/emoji/E749.gif" alt="絵文字" /></td><td>おにぎり</td></tr>
<tr><td>239</td><td><img src="/images/emoji/E74A.gif" alt="絵文字" /></td><td>ショートケーキ</td></tr>
<tr><td>240</td><td><img src="/images/emoji/E74B.gif" alt="絵文字" /></td><td>とっくり（おちょこ付き）</td></tr>
<tr><td>241</td><td><img src="/images/emoji/E74C.gif" alt="絵文字" /></td><td>どんぶり</td></tr>
<tr><td>242</td><td><img src="/images/emoji/E74D.gif" alt="絵文字" /></td><td>パン</td></tr>
<tr><td>243</td><td><img src="/images/emoji/E74E.gif" alt="絵文字" /></td><td>かたつむり</td></tr>
<tr><td>244</td><td><img src="/images/emoji/E74F.gif" alt="絵文字" /></td><td>ひよこ</td></tr>
<tr><td>245</td><td><img src="/images/emoji/E750.gif" alt="絵文字" /></td><td>ペンギン</td></tr>
<tr><td>246</td><td><img src="/images/emoji/E751.gif" alt="絵文字" /></td><td>魚</td></tr>
<tr><td>247</td><td><img src="/images/emoji/E752.gif" alt="絵文字" /></td><td>うまい！</td></tr>
<tr><td>248</td><td><img src="/images/emoji/E753.gif" alt="絵文字" /></td><td>ウッシッシ</td></tr>
<tr><td>249</td><td><img src="/images/emoji/E754.gif" alt="絵文字" /></td><td>ウマ</td></tr>
<tr><td>250</td><td><img src="/images/emoji/E755.gif" alt="絵文字" /></td><td>ブタ</td></tr>
<tr><td>251</td><td><img src="/images/emoji/E756.gif" alt="絵文字" /></td><td>ワイングラス</td></tr>
<tr><td>252</td><td><img src="/images/emoji/E757.gif" alt="絵文字" /></td><td>げっそり</td></tr>
</table>]]>
    </content>
</entry>

<entry>
    <title>Objective-Cの勉強を始めたので、みんなもやろうよ</title>
    <link rel="alternate" type="text/html" href="http://blog.tofu-kun.org/080618145913.php" />
    <id>tag:blog2.tofu-kun.org,2008://1.386</id>

    <published>2008-06-18T05:59:13Z</published>
    <updated>2009-10-14T02:38:42Z</updated>

    <summary>Objective-Cの勉強を始めました。いつかはやろうやろうと思っていたのです...</summary>
    <author>
        <name>zaru</name>
        
    </author>
    
        <category term="Objective-C" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tofu-kun.org/">
        <![CDATA[<p>Objective-Cの勉強を始めました。いつかはやろうやろうと思っていたのですが、敷居が高そうで、なかなか手を出せずにいたのですが、10.5でObjective-C 2.0になったし、なによりiPhoneだって日本で発売決定したし、自分でMacのアプリケーションを作ってみたくなったし…というわけで、がんばって勉強してみます。というか、みんなでObjective-Cやろうよ。なんかObjective-Cの案件は極端に少ないけど、きっと楽しいよ。</p>
<p>勉強するにはまずチュートリアル系のサイトを見て回るのが一番良いだろうと検索してみた所、以下のサイトが初心者にぴったりな内容でした。</p>
<dl>
<dt><a href="http://wisdom.sakura.ne.jp/programming/objc/index.html">Objective-C入門</a></dt>
<dd>Objective-Cの言語自体のチュートリアルです。きちんと章分けされていて、これを読めば一通り感覚がつかめるかと思います。</dd>
<dt><a href="http://developer.apple.com/jp/Documentation/Cocoa/Conceptual/ObjCTutorial/01Introduction/chapter_1_section_1.html#//apple_ref/doc/uid/TP40000863-CH13-DontLinkElementID_63">Cocoaアプリケーションチュートリアルの紹介</a></dt>
<dd>AppleのDeveloper ConnectionにあるCocoaを使ったアプリケーション作成チュートリアルです。このチュートリアルで、XcodeやInterface Builderの使い方が学べました。30分くらいで終わるような内容なので、Xcodeを初めて使う人はぜひ。</dd>
<dt><a href="http://www.cocoalab.com/index.php">Xcodeチュートリアル</a></dt>
<dd>英語のサイトですが、日本語版のチュートリアルPDFがあります。内容としては、Xcodeの使い方＋Objective-Cについての簡単なチュートリアルとなっています。ただ、OS 10.5に対応したチュートリアルはまだ英語版しかありません（ざーっと見たけど、日本語版でも問題はなさそうです）。</dd>
</dl>
<p>そして、昨日帰りに寄った本屋で見つけて即購入した<a href="http://www.amazon.co.jp/%E8%A9%B3%E8%A7%A3-Objective-C-2-0-%E8%8D%BB%E5%8E%9F-%E5%89%9B%E5%BF%97/dp/4797346809">詳解Objective-C 2.0 荻原 剛志(著)</a>は素晴らしい内容でした。</p>
<p>でした、っていうかまだ全然読み切れてないんですが、これがあれば当分は大丈夫そうです。あと、どうでも良いですけど、帯に<q>MacOS X iPhone</q>とか書いてありましたが、内容にiPhoneはいっさい出てきません。まぁ、最新情報だよーという編集のあおり文句なのだと思いますが。</p> 
<div class="imageBox">
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=tofu0c-22&o=9&p=8&l=as1&asins=4797346809&fc1=000000&IS2=1&lt1=_blank&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>
</div>
<p>これからどんどん勉強して、アプリケーションを作って、ブログで公開していきます。なにか勉強用に良いサイトや本などありましたら教えてくださいませ。</p>]]>
        
    </content>
</entry>

<entry>
    <title>blog chart.jpというブログパーツをはってみた</title>
    <link rel="alternate" type="text/html" href="http://blog.tofu-kun.org/080618142550.php" />
    <id>tag:blog2.tofu-kun.org,2008://1.385</id>

    <published>2008-06-18T05:25:50Z</published>
    <updated>2009-10-14T02:38:42Z</updated>

    <summary>blog chart.jpというブログのランキングサイトがオープンしていたので、...</summary>
    <author>
        <name>zaru</name>
        
    </author>
    
        <category term="WEBサイト・サービス" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tofu-kun.org/">
        <![CDATA[<p><a href="http://blogchart.jp/">blog chart.jp</a>というブログのランキングサイトがオープンしていたので、さっそくブログパーツを作ってはってみました。こうゆうブログパーツ系はとりあえず登録してはってみるのが好きです。なんの役に立つかはそれから考えたりして。</p>
<ul>
<li><script type="text/javascript" src="http://blogchart.jp/js/blogparts.js"></script>
<script type="text/javascript"><!--
id="1718";blogurl="http://blog.tofu-kun.org/";partstype="b";viewBlogparts();
// --></script></li>
</ul>
<p>こんな風に、レベルと経験値が表示されて、6つの項目のグラフが生成されます。ただ、一通りランキングに入っているサイトのグラフを見てもどれもみな同じ形をしているような…。もう少し差別化されてもいいのかなーとは思います。</p>
<p>こういったブログを元にしたランキング系サービスは、アイデア次第でいろいろできそうですね。</p>
<p>個人的には<a href="http://blogbattler.com/">ブログバトラー</a>は秀逸なサービスだと思います。</p>]]>
        
    </content>
</entry>

<entry>
    <title>CakePHPでサムネイル画像を作る</title>
    <link rel="alternate" type="text/html" href="http://blog.tofu-kun.org/080616182016.php" />
    <id>tag:blog2.tofu-kun.org,2008://1.384</id>

    <published>2008-06-16T09:20:16Z</published>
    <updated>2009-10-14T02:38:42Z</updated>

    <summary>CakePHPでサムネイル画像を手軽に作れるコンポーネントを作ってみました。コン...</summary>
    <author>
        <name>zaru</name>
        
    </author>
    
        <category term="CakePHP" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tofu-kun.org/">
        <![CDATA[<p>CakePHPでサムネイル画像を手軽に作れるコンポーネントを作ってみました。コンポーネントにする必要はあまりないのですが（Verndorを利用するとか）、CakePHP上で手軽に使える…という点を優先してコンポーネント化しました。</p>
<p>先日、紹介した<a href="http://blog.tofu-kun.org/080528155319.php">CakePHPでメールを送信する</a>と一緒に、CakePHPの初期セットとしておけば、サイト開発がさらに楽になるかと思います。</p>
<p>簡単な仕様としては</p>
<ul>
    <li>GD / ImageMagick どちらかがあれば動作可能</li>
    <li>CakePHP1.1.x / CakePHP1.2.x に対応</li>
    <li>縦横サイズ指定 / 横サイズ指定で縦サイズはなりゆき / 縦サイズ指定で横サイズはなりゆき の3パターン</li>
    <li>URLに画像ファイル名やサイズを指定してサムネイルを作成</li>
</ul>
<p>って感じで、特に目新しい機能はないですが、公開しておきます。</p>]]>
        <![CDATA[<h2>インストール方法</h2>
<p>インストールは非常に簡単。以下の、thumbmake.php を保存してコンポーネントディレクトリに配置するだけです。</p>
<ul>
    <li><a href="http://tofu-kun.org/script/thumbmake.zip">thumbmake.php ダウンロード先</a>（右クリックで保存などで）</li>
</ul>
<p>拡張子が .phps になっていますが、 .php に変更して 配置してください。</p>
<dl>
    <dt>配置ディレクトリ</dt>
    <dd>/app/controllers/components/thumbmake.php</dd>
</dl>
<h2>使い方</h2>
<p>サムネイルコントローラ（今回は thumb_controller.php とします）から Thumbmake を読み込みます。</p>
<pre class="prettyprint">
class ThumbController extends AppController {
    var $name = 'Thumb';
    var $uses = null; //modelを使わない
    var $autoRender = false; //layoutを使わない
    var $components = array ('Thumbmake');
    var $pageTitle = 'サムネイル';

    function index(){
    
        //サムネイルの画像サイズを指定
        $width = 100;
        $height = 100;
        
        //元画像のファイルパスと保存先をセット
        $this->Thumbmake->setImage(WWW_ROOT . 'files' . DS . 'src.jpg',
                                   WWW_ROOT . 'files' . DS . 'thumb' . DS . 'dst.jpg');

        //リサイズ(どちらかに合わせてリサイズした上で、指定の大きさに切り抜く)
        if($this->Thumbmake->resizeCrop($width,$height)){
            //リサイズしたサムネイル画像を表示する
            $this->Thumbmake->disp();
        }else{
            $this->cakeError('error404',array(array('url'=>'Error')));
        }
        
    }
}
</pre>
<p>ソースとなる元画像のファイルパスと、サムネイルの保存先のファイルパスを setImage() で指定し、width と height を決めて、 resizeCrop() でリサイズして、 disp() で画像を表示しています。disp() は単にサムネイル画像を読み込んで表示しているだけなので、viewに画像のパスをセットすれば、普通に view を使うことができます。</p>
<pre class="prettyprint">
        if($this->Thumbmake->resizeCrop($width,$height)){
            $this->set('image', 'files' . DS . 'thumb' . DS . 'dst.jpg'); //view へセット
        }else{
            $this->cakeError('error404',array(array('url'=>'Error')));
        }
</pre>
<p>リサイズ方法には3つの方法があります。</p>
<dl>
    <dt>resizeCrop($width,$height)</dt>
    <dd>横と縦のサイズを固定で、リサイズします。縦横比は維持したままなので、左右天地どちらかが切り抜かれることがあります。</dd>
    <dt>width($width)</dt>
    <dd>横を固定のサイズで、縦はなりゆきでリサイズします。切り抜かれたくない場合は、こちらを利用してください。</dd>
    <dt>height($height)</dt>
    <dd>縦を固定のサイズで、横はなりゆきでリサイズします。切り抜かれたくない場合は、こちらを利用してください。</dd>
</dl>
<p>この Thumbmake はキャッシュなどはしないので、常にサムネイル画像を生成して上書き保存しますので気をつけてください。</p>

<h2>URLにパラメータを指定してサムネイル画像を生成する方法</h2>
<p>最近よくある、URLにパラメータを指定してサムネイル画像を生成する方法を利用することもできます。例えば以下のような感じです。</p>
<ul>
    <li>&lt;img src="http://example.com/thumb/urlImage/100x80/list/files/src.jpg" alt="thumbnail" /></li>
</ul>
<p>これだけだと意味が分かりませんね。</p>
<p>CakePHPは、URLをスラッシュ区切り（環境によって違いますが）にして、パラメータを受け取っているので、それを利用して、thumbコントローラの urlImage() というメソッドに /100x80/list/files/src.jpg というパラメータを受け渡しています。</p>
<ul>
    <li>/[width]x[height]/サムネイル画像のファイル名に追加するワード/元画像のファイルパス</li>
</ul>
<p>となっています。</p>
<p>上記の例だと、 /files/src.jpg という画像を /files/src_100x80_list.jpg というサムネイル画像で保存します。こちらの方法は、基本的に元画像と同じディレクトリに保存されます。変更したい場合は、 thumbmake.php を直接いじってください。</p>
<p>urlImage() メソッドは以下のようになります。</p>
<pre class="prettyprint">
    function urlImage(){
    
        $this->autoRender = false;
        
        //URLのパラメータを取得
        list($width,$height) = $this->Thumbmake->getParam($this->params);
        
        //リサイズ
        if($this->Thumbmake->resizeCrop($width,$height)){
            $this->Thumbmake->disp();
        }else{
            $this->cakeError('error404',array(array('url'=>'Error')));
        }
        
    }
</pre>
<p>普通のサムネイル化と変わりませんが、URLからパラメータを受け取るために getParam() というのを使っています。これが、setImage() の代わりになります。その後は、resizeCrop() / width() / height() と好きなのを選んでリサイズしてください。</p>
<p>ただ、こちらの方法もキャッシュはしないので、アクセスされるたびにサムネイル画像を生成して、サーバによろしくありません。というか、実験した所、専用サーバでも簡単にCPUが100%になってしまいました。そこで、CakePHPも積極的に利用している mod_rewrite を使って回避してみます。</p>
<h3>mod_rewriteを使う</h3>
<p>サムネイル画像がすでに生成されていた場合は、普通に画像へのアクセスにし、生成されていなかった場合は、urlImage()メソッドに渡して生成してあげる…といった感じです。</p>
<ul>
    <li>/app/webroot/.htaccess</li>
</ul>
<p>を開いて、以下のように記述してください。</p>
<pre class="prettyprint">
&lt;IfModule mod_rewrite.c>
    RewriteEngine On

    #It passes to the controller who resizes it when there is no image of the object, and it generates it. 
    RewriteCond %{REQUEST_FILENAME} files/[a-z0-9_]+_list¥.jpg$
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^files/([a-z0-9_]+)_([0-9]+x[0-9]+)_list¥.jpg$ /thumb/urlImage/$2/list/files/$1.jpg
    
    #↓元からあったやつ
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
&lt;/IfModule>
</pre>
<p>環境に合わせて適宜変更してください。正規表現など強力な記述ができるので、色々な活用方法があると思います。</p>
<p>ただ、この方法は元画像に変更があったとしてもサムネイル画像を変更しないので、1日に1回サムネイル画像を全て削除する cron を動かすなど工夫が必要になります。</p>
<h2>さいごに</h2>
<p>thumbmake.php を覗いてもらえれば分かりますが、非常に単純なスクリプトなので、欲しいなーという機能があれば自前で実装しちゃってください。もし、要望等あれば <a href="mailto:zaru@tofu-kun.org">zaru@tofu-kun.org</a> かコメントなどでお願いします。</p>]]>
    </content>
</entry>

<entry>
    <title>CakePHPでメールを送信する</title>
    <link rel="alternate" type="text/html" href="http://blog.tofu-kun.org/080528155319.php" />
    <id>tag:blog2.tofu-kun.org,2008://1.383</id>

    <published>2008-05-28T06:53:19Z</published>
    <updated>2009-10-14T02:38:41Z</updated>

    <summary>CakePHPでメール送信の方法はいくつかありますが、微妙に使い勝手が悪かったり...</summary>
    <author>
        <name>zaru</name>
        
    </author>
    
        <category term="CakePHP" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tofu-kun.org/">
        <![CDATA[<p>CakePHPでメール送信の方法はいくつかありますが、微妙に使い勝手が悪かったり、不安定だったりしたので、CakePHP1.x系で動くメール送信コンポーネントを作ってみました。</p>
<p>コンポーネントと言っても、実際はPHPMailerのラッパーです。しかも、<a href="http://phpmailer.codeworxtech.com/index.html">PHPMailer</a>を日本語環境で使いやすくした<a href="http://www.ecstudio.jp">JPHPMailer</a>のラッパーにCakePHPのVIEWを使えるようにカスタマイズしただけで、僕が書いたコードは10行ちょっとです（汗）。</p>
<p>PHPMailerとJPHPMailerに感謝をしつつ公開します。</p>]]>
        <![CDATA[<h2>インストール方法</h2>
<p>インストールはいたって簡単で、まずはPHPMailerをダウンロードしてきます。</p>
<ul>
    <li><a href="http://sourceforge.net/project/showfiles.php?group_id=26031">PHPMailer ダウンロード先</a></li>
</ul>
<p>ダウンロードして解凍したフォルダをそのまま /vendors ディレクトリに配置します。</p>
<p>次に、cakemail.php をダウンロードして /app/controllers/components ディレクトリに配置します。</p>
<ul>
    <li><a href="http://tofu-kun.org/script/cakemail.zip">Cakemail ダウンロード先</a>（右クリックで保存などで）</li>
</ul>
<p>これでインストール自体は完了です。</p>
<h2>設定方法</h2>
<p>メール送信コントローラ（今回は mail_controller.php とします）から cakemail を読み込みます。</p>
<pre class="prettyprint">
class MailController extends AppController {
    var $name = 'Mail';
    var $uses = null;
    var $components = array ('Cakemail');
    var $helpers = array('html','javascript');
    var $pageTitle = 'メール送信';
}
</pre>
<p>なお、モデルは使わないので、 var $uses = null; としています。</p>
<h2>VIEWファイルとLAYOUTファイルの設置</h2>
<p>CakePHPを使うなら、メールのテンプレートもCakePHPのVIEWを使いたい、ということで、 /app/views/ 以下にそれぞれ VIEWファイルと LAYOUTファイルを設置します。</p>
<dl>
    <dt>VIEWファイル</dt>
    <dd>テキストメール設定ディレクトリ：/app/views/elements/email/text/*.thtml</dd>
    <dd>HTMLメール設定ディレクトリ：/app/views/elements/email/html/*.thtml</dd>
    <dt>LAYOUTファイル</dt>
    <dd>テキストメール設定ディレクトリ：/app/views/layouts/email/text/*.thtml</dd>
    <dd>HTMLメール設定ディレクトリ：/app/views/layouts/email/html/*.thtml</dd>
</dl>
<p>テキストメールとHTMLメールどちらでも送ることができます。それぞれ使いたい方のディレクトリにファイルを配置してください。</p>
<h2>送信方法</h2>
<p>mail_controller.php にメール送信するコードを書きます。</p>
<pre class="prettyprint">
class MailController extends AppController {
    var $name = 'Mail';
    var $uses = null;
    var $components = array ('Cakemail');
    var $helpers = array('html','javascript');
    var $pageTitle = 'メール送信';

    function index(){
    
        //メール本文の設定
        $content = array('hoge' => 'ほげですよー',
                         'piyo' => 'ぴよぴよですよー',
                        );
    
        //メール送信の設定
        $to       = 'zarutofu@gmail.com';
        $cc       = 'zaru@tofu-kun.org';
        $subject  = 'メールタイトル：長いタイトルもOK？CakePHPでメールを送信するコンポーネントテスト';
        $from     = 'zaru@tofu-kun.org';
        $fromname = 'CakePHP テスト';
        
        //添付ファイルの設定
        $file     = array(WWW_ROOT . 'files/attach.jpg',
                          WWW_ROOT . 'files/attach.zip',
                         );
        
        $this->Cakemail->ClearAddresses(); //アドレスクリア
        $this->Cakemail->addTo($to);
        
        $this->Cakemail->ClearCCs(); //CCアドレスクリア
        $this->Cakemail->addCc($cc);
        
        $this->Cakemail->setFrom($from,$fromname);
        
        $this->Cakemail->setSubject($subject);
        
        $this->Cakemail->setType = 'text'; //html or text
        
        //添付ファイル追加
        $attach = array();
        if(isset($file)){
            foreach($file as $fileName){
                if(file_exists($fileName)){
                    $this->Cakemail->AddAttachment($fileName);
                }
            }
        }
        
        $this->Cakemail->setBody($content,'mailsend_view','mailsend_layout'); //viewとlayoutの設定
        
        if (!$this->Cakemail->send()){
            echo("メールが送信できませんでした。エラー:".$this->Cakemail->getErrorMessage());
        }
    }
}
</pre>
<p>使い方自体は PHPMailer と同じなので、難しくはないと思います。注意点としては本文をセットする setBody でVIEWファイルとLAYOUTファイルを指定してあげることと、$this->Cakemail->setType でHTMLメールかテキストメールか指定することです（デフォルトでテキストメールになっているので、HTMLメールを送るとき以外はコメントアウトでもOK）。</p>
<h2>VIEWファイルとLAYOUTファイルの例</h2>
<p>上記のコントローラを使って、VIEWファイルとLAYOUTファイルの例を出しておきます。</p>
<h3>/app/views/elements/email/text/mailsend_view.thtml</h3>
<pre class="prettyprint">
メール送信します。
このファイル mailsend_view.thtml 自体の文字コードは UTF-8 で保存しています。

■hoge：&lt;?php echo h($content['hoge']); ?>

■piyo：&lt;?php echo h($content['piyo']); ?>
</pre>
<h3>/app/views/layouts/email/text/mailsend_layout.thtml</h3>
<pre class="prettyprint">
&lt;?php
    if($session->check('Message.flash')){
        $session->flash();
    }
    echo $content_for_layout;
</pre>

<p>これで添付ファイルもHTMLメールもテンプレートも簡単に使うことができるようになりました。</p>

<h2>参照／参考サイト</h2>
<ul>
    <li><a href="http://phpmailer.codeworxtech.com/index.html">PHPMailer</a></li>
    <li><a href="http://www.ecstudio.jp">株式会社 EC studio </a> - <a href="http://techblog.ecstudio.jp/tech-tips/mail-japanese-advance.html">JPHPMailer</a></li>
</ul>]]>
    </content>
</entry>

<entry>
    <title>Facebookに登録してみた</title>
    <link rel="alternate" type="text/html" href="http://blog.tofu-kun.org/080521125114.php" />
    <id>tag:blog2.tofu-kun.org,2008://1.382</id>

    <published>2008-05-21T03:51:14Z</published>
    <updated>2009-10-14T02:38:41Z</updated>

    <summary>Facebookに登録してみたはいいけど、どうやって活用すべきか調べ中。とりあえ...</summary>
    <author>
        <name>zaru</name>
        
    </author>
    
        <category term="WEBサイト・サービス" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="日記" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tofu-kun.org/">
        <![CDATA[<p>Facebookに登録してみたはいいけど、どうやって活用すべきか調べ中。とりあえず分かったこと。</p>
<ul>
<li>なんかアプリケーションがいっぱいあって、それを入れると色んなサービスと連携したり、活用したりできる iGoogleみたいな感じ？</li>
<li>mixiでいう足跡はなくて、わりと気軽に行動できる</li>
<li>基本実名登録。実名どころか学歴や職歴なども（オプション扱いだけど）</li>
<li>英語が基本のサービスなので、JapanとかTokyoとかの表記。見つかったり見つからなかったり</li>
</ul>
<p>プロフィール検索を使って誰かいないかなーと思って探していたら、こんなメッセージが。</p>
<div class="imageBox">
<p><img src="http://f.hatena.ne.jp/images/fotolife/t/tofu-kun/20080521/20080521124359.jpg?changed=1211342127" width="500" alt="Facebookのメッセージ" /></p>
</div>
<p><q>友達があまりいないのは、プロフィール検索が多分便利じゃないと思っているようですね。</q>って余計なお世話（笑）。</p>
<p>とりあえずもう少し調べてみて活用方法を考えよう。</p>
<ul>
<li><a href="http://www.facebook.com/profile.php?id=1222295221">僕のFacebookプロフィール</a>です。よければ友達になってやってください</li>
</ul>]]>
        
    </content>
</entry>

<entry>
    <title>Google マイマップ EXPO AWARDというイベントに行ってきました。</title>
    <link rel="alternate" type="text/html" href="http://blog.tofu-kun.org/080329165947.php" />
    <id>tag:blog2.tofu-kun.org,2008://1.381</id>

    <published>2008-03-29T07:59:47Z</published>
    <updated>2009-10-14T02:38:41Z</updated>

    <summary> Google マイマップ EXPO AWARDというイベントに行ってきました。...</summary>
    <author>
        <name>zaru</name>
        
    </author>
    
        <category term="WEBサイト・サービス" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="日記" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tofu-kun.org/">
        <![CDATA[<div class="imageBox">
<p><img src="/images/googlemymap.jpg" alt="Google マイマップ EXPO AWARD の様子" /></p>
</div>
<p>Google マイマップ EXPO AWARDというイベントに行ってきました。凄かったです。</p>
<p>一番驚いたのが受賞者の年齢層の高さ。最年少で（お子さんを除いたら）30代後半だったという…。上はおそらく70代くらい？全ての地図がこだわりぬいて作った作品で圧倒されました。普通にやってたんじゃ、他人を感動させられないなぁ。</p>
<p><a href="http://mymapsblog.blogspot.com/2008/03/google-expo.html">受賞マイマップはこちらで。</a></p>
<p>受賞した作品の大半は、自分で現地に赴いて取材をしたり、絵を描いたり、ビデオを撮影したりと労力と時間のかかるものばかりでした。こういった現地の人の情報だったり、なににもとらわれない人の意見だったりを集約している（していこうと目指している）Googleの今後を想像するだけで、なんとも言えない気持ちに。</p>]]>
        
    </content>
</entry>

<entry>
    <title>Web制作で使えるMacソフト</title>
    <link rel="alternate" type="text/html" href="http://blog.tofu-kun.org/080318101851.php" />
    <id>tag:blog2.tofu-kun.org,2008://1.380</id>

    <published>2008-03-18T01:18:51Z</published>
    <updated>2009-10-14T02:38:41Z</updated>

    <summary>試してほしい有料ソフト for Macを読んで。僕もオススメMacソフトを紹介し...</summary>
    <author>
        <name>zaru</name>
        
    </author>
    
        <category term="Macintosh" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="WEB制作" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tofu-kun.org/">
        <![CDATA[<p><a href="http://applembp.blogspot.com/2008/03/software-for-mac.html">試してほしい有料ソフト for Mac</a>を読んで。僕もオススメMacソフトを紹介したいなぁと思っていたので便乗して、ZARUオススメ有料ソフト紹介をします。と思いましたが、無料ソフトでもオススメしたいのがあったので、Web制作に使える有料／無料ソフトを紹介します。</p>]]>
        <![CDATA[<h2>有料ソフト</h2>
<h3><a href="http://www.apple.com/jp/iwork/">iWork</a>：9,800円</h3>
<div class="imageBox">
<p><a href="http://www.apple.com/jp/iwork/"><img src="/images/mac-iwork.jpg" alt="iWork"></a></p>
</div>
<p>前述の記事でも紹介されていましたが、1万円以下で大分幸せになれると思います。もし、既にOffice2008/2004を持っていたとしても購入して損はないです。いや、Office2008は使ったことないので断言できないですけど、Office2004よりも使い勝手は良いと思います。</p>
<p>リリース当初は、Appleの表計算ソフト Numbers が注目されがちでしたが実際のところ素晴らしいのは Keynote と Pages です。</p>
<p>僕は、Keynote で営業用資料や媒体資料／プレゼン資料などガシガシ作っています。Pages ではメモ帳代わりやレポート／議事録など。どちらもデフォルトテンプレートが美しいので気分良く作ることができます。ただ、Officeとは操作性が違ったりするので、慣れるまで大変かもしれません。</p>
<p>Numbers はグラフ機能が少し貧弱なのと、あまり数字関係に強くないっぽい（科学計算など）ので、僕は完全な表を使った資料作成用として割り切って使っています（見た目の美しさは素晴らしいので）。</p>

<h3><a href="http://www.panic.com/jp/transmit/index.html">Transmit</a>：$29.95</h3>
<div class="imageBox">
<p><a href="http://www.panic.com/jp/transmit/index.html"><img src="/images/mac-transmit.jpg" alt="Transmit"></a></p>
</div>
<p>MacのFTPクライアントソフトは、Windowsに比べると少々見劣りするのですが、この Transmit は素晴らしいです。FTP・SFTP・TLS/SSLに対応しています。サイドバーやリンクフォルダナビゲーション（ローカル／リモートでディレクトリ移動すると、もう片方も自動に移動してくれる）、プレビュー機能、移動ヒストリー、カラム表示／リスト表示、タブ表示など機能満載です。</p>
<p>ただし、SCPに対応していないので、そこは <a href="http://cyberduck.ch/">Cyberduck</a> で補っています…。</p>
<p>機能的には Cyberduck も見劣りしないのですが、複数のサーバとやりとする際にタブ表示できる Transmit を日常的には使っています。</p>

<h3><a href="http://www.panic.com/jp/coda/">Coda</a>：$79（Transmit持っている人は $69）</h3>
<div class="imageBox">
<p><a href="http://www.panic.com/jp/coda/"><img src="/images/mac-coda.jpg" alt="Coda"></a></p>
</div>
<p>Transmit を作っている Panic さんのHTMLオーサリングソフトです。見た目の美しさもさることながら、シンプル＆軽いという僕が求めていたソフトです。僕は Dreamweaver を持っていますが、メインは Coda を使って、Dreamweaver は以下の機能を使う時だけ立ち上げています。</p>
<ul>
    <li><del>サイト内／フォルダ内 全文検索</del>
    <ul><li>追記：バージョンが上がって、サイト内／フォルダ内／開いているファイル／選択したファイルの一括検索・置換ができるようになりました！しかもDreamweaverよりも使いやすいです。</li></ul></li>
    <li>自動フォーマット</li>
</ul>
<p>ただ、この2つも必要ないといえば必要なく、Codaだけでも十分です。Coda の魅力としては、</p>
<ul>
    <li>タブ表示</li>
    <li>画面分割（片方コード表示、片方プレビュー表示など、何画面でも分割可）</li>
    <li>アップロード機能（編集して保存すると、アップロードチェックが入って、ショートカット一発でサーバに自動アップロード）</li>
    <li>SSH画面統合（FTPアカウントと同じでSSHアカウントを登録すれば簡単にSSHログイン）</li>
    <li>Subversion対応</li>
</ul>
<p>まぁ、SSH以外は Dreamweaver でもある機能ですが…値段は全然安いです。ちなみに Transmit を持っていると1000円くらい安くなります。</p>
<p>2008-09-05 追記：現在、バージョンアップされて値段が$20上がっています。普通に購入すると$99。Transmitを持っていると$85です。</p>

<h3><a href="http://www.malcolmhardie.com/sqleditor/">SQLEditor</a>：JPY 8412.70</h3>
<div class="imageBox">
<p><a href="http://www.malcolmhardie.com/sqleditor/"><img src="/images/mac-sqledior.jpg" alt="SQLEditor"></a></p>
</div>
<p>ER図を書くのに便利なソフトです。MySQLがメインで使っている方には是非オススメです。PostgreSQL／SQLite／sybase／Oracle／Rails／OpenBaseにも対応していますが、カラムの種類を自前で追加する必要があります（MySQLの場合は、ほぼ全てのカラムが初期設定されています）。</p>
<p>使い方も直感的で、作成したER図から吐き出したSQLもきちんと使えます。</p>

<h3><a href="http://www.fli.co.jp/product/fs5/top.html">ファイルサルベージ</a>：6,930円（ダウンロード版）</h3>
<div class="imageBox">
<p><a href="http://www.fli.co.jp/product/fs5/top.html"><img src="/images/mac-filesalvage.jpg" alt="ファイルサルベージ"></a></p>
</div>
<p>紹介するかどうか迷いましたが…、間違って消してしまったファイルや、ディスクの故障で認識しなくなった時の救急ソフト。僕のMacでは使ったことないですが、会社の同僚や友達によく頼まれるので…。PC使った仕事していると、よくあるよね？！</p>
<p>OS9のディスクでも使えるのが素晴らしいです。IDE-USB変換コネクタを使って活用しています。</p>

<h3><a href="http://www.parallels.com/en/products/desktop/">Parallels＋Windows or Linux</a>：$79.99（英語版）</h3>
<div class="imageBox">
<p><a href="http://www.parallels.com/en/products/desktop/"><img src="/images/mac-parallels.jpg" alt="Parallels＋Windows or Linux"></a></p>
</div>
<p><a href="http://www.act2.com/products/fusion/">VMWare Fusion</a> でも良いのですが、最初に購入したのがこっちなので。ローカル開発サーバや、Windowsを入れての動作チェックなどに大活躍。MacBookPro 2.2Ghz 2GBでもWindows／CentOSなど不満なく動作しています。4GBないと厳しいという人がいますが、おそらくWindowsなどで複数のアプリケーションを動かしてガシガシ使っている人だと思います。</p>
<p>僕は Macで複数のアプリケーションを立ち上げた状態で、WindowsXPに512MBメモリを割り当てて、Windows内Excel2007を使っても遅いとは思いませんでした。CentOSの場合は、256MB割り当てで立ち上げまで5〜10秒ぐらいです。ちなみに、FreeBSDはうまくインストールできなかったのでLinux（CentOS）を入れて使っています。（たぶんFreeBSDも普通に使えるはずです）</p>

<h2>無料／寄付ソフト</h2>

<h3><a href="http://www.aynimac.com/p_blog/files/article.php?id=41">CotEditor</a></h3>
<div class="imageBox">
<p><a href="http://www.aynimac.com/p_blog/files/article.php?id=41"><img src="/images/mac-coteditor.jpg" alt="CotEditor"></a></p>
</div>
<p>テキストエディタです。以前は mi を使っていたのですが、タブ表示を犠牲にしてでも CotEditor の方が優れているなぁ、と思っている点として、名前をつけて保存する時に、既存のファイルのディレクトリ位置がデフォルトで選択されており、ファイルをどんどん作りたいときには重宝しています。あとは、表示が綺麗なのとシンプルさ…ですかね。機能は mi なみに十分あります。</p>
<p>個人的には、アンチエイリアスをOffにして、黒背景／白文字で使っています。</p>

<h3><a href="http://www.slicedsoftware.com/software/pgnj">PGnJ</a></h3>
<div class="imageBox">
<p><a href="http://www.slicedsoftware.com/software/pgnj"><img src="/images/mac-pgnj.jpg" alt="PGnJ"></a></p>
</div>
<p>以前、このブログでも紹介しましたが、MySQL／PostgreSQLのクライアントソフトです。シンプルで機能はあまりありませんが、基本データの閲覧ぐらいにしか使わないので十分です。</p>

<h3><a href="http://www.adiumx.com/">Adium</a></h3>
<div class="imageBox">
<p><a href="http://www.adiumx.com/"><img src="/images/mac-adium.jpg" alt="Adium"></a></p>
</div>
<p>MSNメッセンジャーやYahooメッセンジャーなど、複数のメッセンジャーアカウントを1つにまとめて使える便利ソフト。テーマやアイコン／サウンドセットなど細かいカスタマイズが可能で、文句なしなクライアントソフトです。常時立ち上がっている必携ソフトです。ただ、ファイル転送はやたら遅いです。</p>

<h3><a href="http://www.blacktree.com/">QuickSilver</a></h3>
<div class="imageBox">
<p><a href="http://www.blacktree.com/"><img src="/images/mac-quicksilver.jpg" alt="QuickSilver"></a></p>
</div>
<p>ランチャソフトです。キーボードショートカットで立ち上げて、何文字かタイプすると、その文字にマッチしたアプリケーションやディレクトリ候補が表示されて開くことができます。キーボードだけで操作できるので非常に楽です。</p>

<h3><a href="http://skitch.com/">Skitch</a></h3>
<div class="imageBox">
<p><a href="http://skitch.com/"><img src="/images/mac-skitch.jpg" alt="Skitch"></a></p>
</div>
<p>スクリーンキャプチャソフトですが、キャプチャした画面に文字を入れたり、絵を書いたりできて、そのままメールで送ったり、ファイルとして保存したりとなんとも便利なソフトです。こんなにキャプチャして楽しいソフトは他にはないです。メッセンジャーで「この画面のここを修正して！」ってやり取りするときに、ささっとキャプチャソフトして文字入れて、そのままドラッグで送信…と出来るので、遠方の人ともストレスなく仕事ができます。</p>

<h2>最後に</h2>
<p>こうやって見てみるとWeb制作に直接関わる部分は、ほとんど有料ソフトでやっていますね。おそらくプログラマの方はここに Emacs が入って他のソフトはいらない、みたいな人もいると思います。デザイン面では、贅沢を言えば PhotoshopCS2以上/Fireworks8以上/IllustratorCS以上があれば文句なしなんですが…。そんなお金は正直ないです。FlashだけはCS3にVerUPしたいですが。</p>
<p>そう考えるとWebプログラマはあまりお金をかけずに仕事ができますね。かけようと思えば際限なくかけられますけど。</p>]]>
    </content>
</entry>

<entry>
    <title>なんとか組</title>
    <link rel="alternate" type="text/html" href="http://blog.tofu-kun.org/080229222733.php" />
    <id>tag:blog2.tofu-kun.org,2008://1.379</id>

    <published>2008-02-29T13:27:33Z</published>
    <updated>2009-10-14T02:38:40Z</updated>

    <summary> 疲れているからかネガティブな組が多いなー。 くびかしげ組 たくらみ組 ぜつぼう...</summary>
    <author>
        <name>zaru</name>
        
    </author>
    
        <category term="日記" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tofu-kun.org/">
        <![CDATA[<div class="imageBox">
<p><a href="http://blog.tofu-kun.org/images/kumi_big.gif"><img src="http://blog.tofu-kun.org/images/kumi.gif" alt="なんとか組" /></a></p>
</div>
<p>疲れているからかネガティブな組が多いなー。</p>
<ul>
<li>くびかしげ組</li>
<li>たくらみ組</li>
<li>ぜつぼう組</li>
<li>ぼーぜん組</li>
<li>うなだれ組</li>
<li>ほうりなげ組</li>
</ul>
<p>個人的には「うなだれ組」が好き。</p>]]>
        
    </content>
</entry>

<entry>
    <title>CakePHPで掲示板を作ってみる#2</title>
    <link rel="alternate" type="text/html" href="http://blog.tofu-kun.org/080227211904.php" />
    <id>tag:blog2.tofu-kun.org,2008://1.378</id>

    <published>2008-02-27T12:19:04Z</published>
    <updated>2009-10-14T02:38:40Z</updated>

    <summary>前回はCakePHPの基本的な情報について解説しました。今回は、実際にDBのテー...</summary>
    <author>
        <name>zaru</name>
        
    </author>
    
        <category term="CakePHP" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tofu-kun.org/">
        <![CDATA[<p><a href="http://blog.tofu-kun.org/080208185844.php">前回はCakePHPの基本的な情報について</a>解説しました。今回は、実際にDBのテーブルを作成し、モデル／コントローラを作っていきます。</p>]]>
        <![CDATA[<h2>掲示板のテーブル構造</h2>
<p>今回は勉強用ということでシンプルな掲示板を作ります。</p>
<ul>
    <li>入力項目は、本文／名前／メールアドレス／URI／パスワードのみ</li>
    <li>レスはなし</li>
    <li>パスワードを入力した場合に限り編集／削除可能</li>
    <li>投稿記事一つにユニークなURIを持たせる（Twitterのような）</li>
</ul>
<p>テーブルの構造は以下のようにしました。</p>
<pre class="prittyprint">
CREATE TABLE articles (
    id serial NOT NULL,
    name text,
    email text,
    uri text,
    message text NOT NULL,
    status boolean DEFAULT true NOT NULL,
    "password" text,
    created timestamp without time zone NOT NULL,
    modified timestamp without time zone NOT NULL
);
ALTER TABLE ONLY articles
    ADD CONSTRAINT articles_pkey PRIMARY KEY (id);
</pre>
<dl>
    <dt>id</dt>
    <dd>プライマリーキー</dd>
    <dt>name</dt>
    <dd>投稿者名</dd>
    <dt>email</dt>
    <dd>メールアドレス</dd>
    <dt>uri</dt>
    <dd>WebサイトURI</dd>
    <dt>message</dt>
    <dd>投稿本文</dd>
    <dt>status</dt>
    <dd>表示／非表示用</dd>
    <dt>password</dt>
    <dd>パスワード</dt>
    <dt>created</dt>
    <dd>投稿日</dd>
    <dt>modified</dt>
    <dd>編集日／削除日</dd>
</dl>

<h2>モデルの作成</h2>
<p>まずはモデルを作成します。モデルは app/models/テーブル名の単数形.php として作ります。</p>
<h3>app/models/article.php</h3>
<pre class="prittyprint">
&lt;?php
class Article extends AppModel {
	var $name = 'Article';
}
</pre>
<p>モデルは必ず AppModel クラスを継承して作ります。また、var $name には頭文字が大文字のモデル名を指定します。</p>

<h2>コントローラの作成</h2>
<p>次にコントローラを作成します。コントローラは app/controllers/コントローラ名_controller.php として作ります。コントローラ名は命名規則に従っていれば自由につけられます。今回は、articles とするのでファイル名は articles_controller.php になります。</p>
<h3>app/controllers/articles_controller.php</h3>
<pre class="prittyprint">
&lt;?php
class ArticlesController extends AppController {
	var $name = 'Articles';
	var $uses = array('Article');
}
</pre>
<p>モデルと同じように、AppController クラスを継承させます。また、var $name にも同じように頭文字が大文字のコントローラ名を指定します。</p>
<p>var $uses = array(); には使用するモデル名を指定します。Article という名前でモデルを作ったので、var $uses = array(‘Article’); とします。また、複数のモデルを指定することも出来ます。</p>
<p>次にコントローラにアクションの定義をします。掲示板として必要なアクションは</p>
<ul>
    <li>通常表示</li>
    <li>記事単体の表示</li>
    <li>新規追加</li>
    <li>編集時のパスワード確認</li>
    <li>編集</li>
    <li>削除時のパスワード確認</li>
    <li>削除</li>
</ul>
<p>の7つに分けられます（フレームワークを使うのはほぼ初めてなので、ここですでに間違っているかもしれないです＞＜）。</p>
<p>アクションはコントローラクラスのメソッドとして登録します。前述した通り、アクションへのアクセスは /コントローラ名/アクション名 になります。アクション名を指定しなかった場合は、index アクションが呼び出されます。</p>
<p>まず、アクションの中身はいいとして定義だけしてみます。</p>
<h3>app/controllers/articles_controller.php</h3>
<pre class="prittyprint">
&lt;?php
class ArticlesController extends AppController {
	var $name = 'Articles';
	var $uses = array('Article');

	//通常表示
	function index() {
	}

	//記事単体の表示
	function messageDetail() {
	}

	//新規追加
	function add() {
	}

	//編集時のパスワード確認
	function editPassword() {
	}

	//編集
	function edit() {
	}

	//削除時のパスワード確認
	function delPassword() {
	}

	//削除
	function del() {
	}
}
</pre>
<p>実際にアクションの中身を作ります。（続きます）</p>]]>
    </content>
</entry>

<entry>
    <title>CakePHPで掲示板を作ってみる#1</title>
    <link rel="alternate" type="text/html" href="http://blog.tofu-kun.org/080208185844.php" />
    <id>tag:blog2.tofu-kun.org,2008://1.377</id>

    <published>2008-02-08T09:58:44Z</published>
    <updated>2009-10-14T02:38:40Z</updated>

    <summary>最近、中規模のサイトをPHPで作る機会が多くなりコードの品質を一定に保つことが難...</summary>
    <author>
        <name>zaru</name>
        
    </author>
    
        <category term="CakePHP" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tofu-kun.org/">
        <![CDATA[<p>最近、中規模のサイトをPHPで作る機会が多くなりコードの品質を一定に保つことが難しくなってきました。一人であれば、品質を保つことは可能なのですが、実際に運用をしていく段階で、別の人間にプロジェクトを引き継いだり、スポットで手伝ってもらったりすると、もう駄目です。</p>
<p>今までは、社内独自ライブラリやら独自テンプレートエンジンやらを使っていましたが、それもPHP5に移行するにあたって問題点が浮上したり、その使い方を学習するコストがあまりにも無駄。ということで、本格的にフレームワークを業務で使うことを検討してみました。</p>
<p>まずは、フワームワークを実際に使ってみてどんなものか感じるために、掲示板を作ってみました。</p>]]>
        <![CDATA[<h2>CakePHPの基本</h2>
<p>CakePHPはMVCというソフトウェアデザインパターンで構成されています。</p>
<ul>
	<li>M - モデル</li>
	<li>V - ビュー</li>
	<li>C - コントローラ</li>
</ul>
<p>この3つの頭文字を取ってMVC（Model View Controller）です。CakePHPのマニュアルによると、それぞれの意味付けは</p>
<dl>
<dt>モデル</dt>
<dd>モデルは特定のデータベースのテーブル／レコード、また他のテーブルやレコードとの関連を表します。モデルはさらに、データのバリデーション（検証）規則も含んでいて、モデルデータが挿入されるか更新される際に用いられます。</dd>
<dt>ビュー</dt>
<dd>ビューは Cake のビューファイルのことで、PHP コードが書き込まれた通常の HTML ファイルです。</dd>
<dt>コントローラ</dt>
<dd>コントローラは、サーバからのリクエストを処理します。コントローラは、ユーザの入力（URL と POSTデータ）を受け付け、仕事のロジックを適用し、モデルを使用してデータベースのデータを読み書きし、最後に、出力データを適切なビューファイルに送信します。
となっています。</dd>
</dl>
<p>つまり、モデルはデータベース、ビューは表示、コントローラはリクエスト処理ということになります。</p>

<h2>CakePHPの命名規則について</h2>
<h3>ファイル名</h3>
<p>ファイル名はアンダースコアでつなげた形を使いします。例えば、articleAdd というクラスを作った場合は、そのファイル名は article_add.php です。これはクラス名以外にもモデル／コントローラなど全てに通じてます。</p>
<h3>モデル名</h3>
<p>モデルクラス名は英語の単数形です。また、最初の一字は大文字で、複数の単語がつながる場合は各単語の最初の一字を大文字にします（例：ArticleIItem）。</p>
<h3>コントーラ名</h3>
<p>コントーラのクラス名は英語の複数形です。モデル名と同じように最初の一字＋各単語の最初の一字を大文字にします。メンバ関数を外部から見られたくない場合は、頭にアンダーバーを追加してください。</p>
<h3>ビュー名</h3>
<p>ビューのファイル名は、アクション名を小文字にし、各単語をアンダーバーでつなげたものになります。</p>
<h3>データベースのテーブル名</h3>
<p>データベースのテーブル名は英字の複数形です。これは、単純に単語の末尾に「s」を付けるのではなく、英単語として正しい複数形にする必要があります（例：entry→entries）。</p>
<h3>プライマリキー</h3>
<p>プライマリキーの名前は「id」です。アソシエーションする場合は、外部キーはテーブル名（単数形）_idとします。</p>
<p>例えば、articles と users というテーブルがあり、articles に user_id という外部キーを作成します。articles.user_id = users_id という条件のとき、 $this->article->findAll() とすると users テーブルのデータも一緒に取得することが出来ます。</p>
<h3>追加タイムスタンプ／更新タイムスタンプ</h3>
<p>CakePHPでは、追加タイムスタンプを「created」、更新タイムスタンプを「modified」にするとデータを追加更新する際に自動的に更新してくれます。</p>
<p>ただし、DBや環境によっては modified が自動更新されないこともあるみたいです。僕の環境では自動更新をしてくれなかったので、以下の方法で無理矢理更新させるようにしました。</p>
<pre class="prettyprint">
$article['Article']['modified'] = null;
</pre>
<p>その他、細かい規約については<a href="http://cakephp.jp/doc/conventions.html">CakePHPのドキュメント</a>を参照してください。</p>

<h2>CakePHPをインストールする</h2>
<p>CakePHPはPHP4.3.2以降がインストールされており、データベース（MySQL／PostgreSQL／ADODB）が使えるサーバなら大抵使えると思います。.htaccess などで mod_rewrite が使えればベストです。</p>
<p>まず、CakePHPの公式サイトにアクセスしCakePHPをダウンロードします。</p>
<ul>
	<li><a href="http://www.cakephp.org/">http://www.cakephp.org/</a></li>
</ul>
<p>2008年2月8日現在では、安定板として1.1.19.6305がリリースされています。ベータ版の1.2.0を使うことも出来ますが、今回は1.1.19を使うことにしました（1.2.0では結構な機能追加が行われているので魅力的ではありますけど）。</p>
<p>ダウンロードして解凍すると「/app」「/cake」「/vendors」の3つのディレクトリが出てきます。それを設置し、.htaccessなどで公開用ディレクトリの設定をします。</p>
<pre class="prettyprint">
DocumentRoot /home/user/html/app/webroot
</pre>
<p>この設定をしなくても使用することが出来ますが、/app や /vendors などのディレクトリにもアクセスできてしまうため、なるべく設定した方が良いと思います。</p>
<p>この設定をすると、アクセスする際のURIは以下のような物になります。</p>
<pre class="prettyprint">
http://www.example.com/コントローラ名/アクション名/パラメータ1/パラメータ2...
</pre>
<p>また、 /app/tmp はキャッシュファイルなどを書き込む際に必要なのでパーミッションを変更してください。その他、細かいインストール方法もあるので、<a href="http://cakephp.jp/doc/ch03s04.html">CakePHPのセットアップ</a>を参照してください。</p>

<h2>データベースの設定</h2>
<p>app/config/database.php を開いてデータベースの設定を記述します。以下の例はPostgreSQLの場合です。</p>
<pre class="prettyprint">
&lt;?php
class DATABASE_CONFIG {
	var $default = array(
		'driver' => 'postgres',
		'connect' => 'pg_connect',
		'host' => 'localhost',
		'login' => 'ログイン名',
		'password' => 'パスワード',
		'database' => 'データベース名',
		'prefix' => '',
		'encoding' => 'utf8',
	);
}
</pre>
<p>MySQLの場合は</p>
<pre class="prettyprint">
'driver' => 'mysql',
'connect' => 'mysql_connect',
</pre>
<p>とするだけです。</p>
<p>これで、基本的な設定は全て完了しました。次は掲示板を実際に作ってみます（続きます）。</p>
<ul>
<li><a href="http://blog.tofu-kun.org/080227211904.php">CakePHPで掲示板を作ってみる#2</a></li>
</ul>]]>
    </content>
</entry>

<entry>
    <title>1984sを作ってみました。</title>
    <link rel="alternate" type="text/html" href="http://blog.tofu-kun.org/080207200257.php" />
    <id>tag:blog2.tofu-kun.org,2008://1.376</id>

    <published>2008-02-07T11:02:57Z</published>
    <updated>2009-10-14T02:38:40Z</updated>

    <summary>なんだか最近同世代グループを作っているのが流行っているっぽいので、自分の世代グル...</summary>
    <author>
        <name>zaru</name>
        
    </author>
    
        <category term="日記" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://blog.tofu-kun.org/">
        <![CDATA[<p>なんだか最近同世代グループを作っているのが流行っているっぽいので、自分の世代グループはないかなー？と思ったら、なかったので作ってみました。</p>
<ul>
<li><a href="http://generation1984.g.hatena.ne.jp/">1984s</a></li>
</ul>
<p>早生まれなので1984となってますが、本当は1983の方と同学年です。でも、あまり年代にはこだわってないので、1984生まれじゃなくても参加可能です。体は大人、頭は子供…じゃなくて、気持ちは198[3-5]な方はぜひ参加してやってください。</p>
<p>メンバーで集まって、わいわい盛り上がりたいなー。</p>
<p>ちなみに、グループ用にアイコンを作ってみました。</p>
<p><img src="http://generation1984.g.hatena.ne.jp/images/group/generation1984/diary/tofu-kun/20080207.gif" alt="1984s" /></p>
<p>非常に適当ですが、とりあえず。</p>]]>
        
    </content>
</entry>

</feed>
