<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="ja">
<title>Takazudo Clipping*</title>
<link rel="alternate" type="text/html" href="http://gyauza.egoism.jp/clip/" />
<modified>2009-09-29T10:23:56Z</modified>
<tagline>Takazudoの色々ブログ。HTMLとかCSSとかそんなんがメイン。</tagline>
<id>tag:gyauza.egoism.jp,2010:/clip//6</id>
<generator url="http://www.movabletype.org/" version="3.34">Movable Type</generator>
<copyright>Copyright (c) 2009, Takazudo</copyright>
<entry>
<title>ブログ引っ越します</title>
<link rel="alternate" type="text/html" href="http://gyauza.egoism.jp/clip/archives/2009/09/post-8/" />
<modified>2009-09-29T10:23:56Z</modified>
<issued>2009-09-29T10:21:49Z</issued>
<id>tag:gyauza.egoism.jp,2009:/clip//6.2296</id>
<created>2009-09-29T10:21:49Z</created>
<summary type="text/plain">今後、こっちに書いていく予定です。まだ作り途中ですが…　→　http://zudolab.net/blog/...</summary>
<author>
<name>Takazudo</name>
<url>http://gyauza.egoism.jp/clip/</url>
<email>takazudo@gmail.com</email>
</author>
<dc:subject>雑多</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://gyauza.egoism.jp/clip/">
<![CDATA[<p>今後、こっちに書いていく予定です。まだ作り途中ですが…　→　<a href="http://zudolab.net/blog/">http://zudolab.net/blog/</a></p>]]>

</content>
</entry>
<entry>
<title>sugamo.cssで発表したmod組み（仮）</title>
<link rel="alternate" type="text/html" href="http://gyauza.egoism.jp/clip/archives/2009/08/sugamocssmod/" />
<modified>2009-08-09T02:18:47Z</modified>
<issued>2009-08-09T02:16:48Z</issued>
<id>tag:gyauza.egoism.jp,2009:/clip//6.2292</id>
<created>2009-08-09T02:16:48Z</created>
<summary type="text/plain">mod組み（仮）の発表</summary>
<author>
<name>Takazudo</name>
<url>http://gyauza.egoism.jp/clip/</url>
<email>takazudo@gmail.com</email>
</author>
<dc:subject>CSS</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://gyauza.egoism.jp/clip/">
<![CDATA[<p>昨日、<a href="http://mixi.jp/view_community.pl?id=4019902">sugamo.css</a> にて、HTMLテンプレートの組み方のような話をしました。内容は、先日書いたエントリ、<a href="/clip/archives/2009/07/090716-htmltemplate/">自分的HTMLテンプレートの組み方</a> の内容＋αで、どーしていまこーやって書くようになったのかとか言う話や、<a href="http://wiki.github.com/stubbornella/oocss">OOCSS</a> の紹介などです。</p>]]>
<![CDATA[<p>そのうちまたまとめてサイトでも作って書きたいのですが、ひとまず発表に使ったスライドを置いておきます。</p>
<ul class="NL">
<li><a href="http://dl.getdropbox.com/u/268240/takazudoClippingFiles/modGumi.ppt">mod組み（仮） [Power Point]</a></li>
</ul>]]>
</content>
</entry>
<entry>
<title>MTOSでもPowered by Movable Typeは入れないとだめ？</title>
<link rel="alternate" type="text/html" href="http://gyauza.egoism.jp/clip/archives/2009/08/mtospowered-by-movable-type/" />
<modified>2009-08-05T07:39:07Z</modified>
<issued>2009-08-05T07:36:56Z</issued>
<id>tag:gyauza.egoism.jp,2009:/clip//6.2290</id>
<created>2009-08-05T07:36:56Z</created>
<summary type="text/plain">Powered by Movable Typeの表記</summary>
<author>
<name>Takazudo</name>
<url>http://gyauza.egoism.jp/clip/</url>
<email>takazudo@gmail.com</email>
</author>
<dc:subject>MovableType</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://gyauza.egoism.jp/clip/">
<![CDATA[<p><a href="http://www.movabletype.jp/eula_mt4_personal.html">製品版Movable Typeのライセンスのページ</a>には、</p>

<p>あなたは、本Softwareによって生成された各サイトにおいてSix Apart の製品紹介サイトへ「Powered by Movable Type」のテキスト表示でリンクを張らなければなりません。</p>

<p>とあるが、MTOSの場合はどうなんだろうかと思い、英語サイトを含め探したのだけれど、どこにも書いていなかったので、Six Apart社に問い合わせてみた。</p>]]>
<![CDATA[<p>答えとしては、「MTOSの場合は特にリンクなどをしていただく必要はございません」とのことで、MTOSの場合は、「Powered by Movable Type」は入れなくていいらしい。</p>]]>
</content>
</entry>
<entry>
<title>自分的HTMLテンプレートの組み方</title>
<link rel="alternate" type="text/html" href="http://gyauza.egoism.jp/clip/archives/2009/07/090716-htmltemplate/" />
<modified>2009-07-18T16:04:50Z</modified>
<issued>2009-07-16T13:38:14Z</issued>
<id>tag:gyauza.egoism.jp,2009:/clip//6.2287</id>
<created>2009-07-16T13:38:14Z</created>
<summary type="text/plain">HTMLテンプレの組み方</summary>
<author>
<name>Takazudo</name>
<url>http://gyauza.egoism.jp/clip/</url>
<email>takazudo@gmail.com</email>
</author>

<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://gyauza.egoism.jp/clip/">
<![CDATA[<p>自分的HTMLテンプレートの組み方と例です。<br />
まぁ、やるたびにちょこちょこ変えてるんですけど、2009年7月版ってことでざっくり説明。</p>

<ul>
<li><a href="http://templateex1.zudolab.net/_htmlTemplate/layout_2colA_empty.html">空テンプレ</a></li>
<li><a href="http://templateex1.zudolab.net/_htmlTemplate/layout_2colA_modules.html">モジュール一覧</a></li>
<li><a href="http://templateex1.zudolab.net/_htmlTemplate/layout_2colA_example.html">サンプル</a></li>
<li><a href="http://templateex1.zudolab.net/_archive/">ダウンロード用</a></li>
</ul>
]]>
<![CDATA[<h3>エリアとモジュール</h3>

<ul>
<li>繰り返し使用される要素の塊をモジュールと呼び、エリアの中にこれを並べてページを作成するのを基本とする。</li>
<li>モジュールの開始要素には、「mod_moduleName」のようにclass（もしくはid）をつける。</li>
<li>モジュールやエリアのclass/idを起点に全てのスタイルを指定する。p、h1～h6、blockquote、table等、要素自体に直にスタイルを指定してはいけない。（グローバル変数を使っているような状態になってしまうため、以降考慮するのが面倒。リセット程度に済ます。）</li>
<li>モジュールにスタイルを指定する際には、mod_moduleNameを起点としてスタイルを指定し、カプセル化を行い、外の要素にスタイルが利かないようにする。</li>
<li>エリア分けのための要素には、「area_areaName」でclass（もしくはid）をつける。</li>
</ul>

<h3>class、id内で使用されるアンダースコアとハイフン</h3>

<ul>
<li>アンダースコアは、モジュールやエリアの型名、名称を表すために使用する。</li>
<li>class="mod_moduleName" は、これで囲われる要素一式が、moduleNameという名前のモジュールであることを示す。</li>
<li>id="area_areaName" は、これで囲われる要素一式が、areaNameという名前のエリアの内容であることを示す。</li>
<li>ハイフンは、階層を表す。これは、モジュールやエリアがネストするときに、class名の衝突を防ぐために使用する。他のモジュールを内包する可能性のある（または、内包することを前提としている）モジュールにスタイルを指定するときに使用する。また、エリアは必ずその中に他のモジュールを内包するため、基本的にハイフンで階層を表したclassやidを起点にスタイルを指定する。（サンプルの mod_mediaBoxL、mod_mediaBoxC、mod_mediaBoxR や、エリアの個所を参照。） たとえば、ボディエリアの左ナビは area_bd-side にする等。</li>
<li>明らかにJavaScriptで利用されるために指定するclassは、js_popup のように、役割を明示させる。また、インラインで使用される要素に対し、in_icon、in_attention、in_highlight等といったクラスを指定するなど、汎用的に型を拡張してもよい。</li>
</ul>

<h3>bodyのclass</h3>

<ul>
<li>bodyに指定するclassは特殊で、スタイルのブランチのために使用する変数の役割を果たす。ページ自体をJavaScriptにおけるオブジェクトとして置き換えて考えた場合、bodyに指定されたclass="xxx_yyy" は、page.xxx = yyy; のような役割を担う。</li>
<li>bodyに指定するclassには、layout_layoutType を必ず含める。これは、そのページのレイアウトタイプを示す。</li>
<li>サンプルでbodyのclassとして指定している layout_2colA は、このページのlayoutが2colAであることを示す。これは、エリアのレイアウトのために使用されている。たとえば別の２カラムのレイアウトが現れた場合は layout_2colB、トップページの特殊なレイアウトの場合は layout_top、ポップアップウィンドウの場合は、layout_pop のように指定し、これを起点にスタイルを指定する。（CSSエリアの個所を参照）</li>
<li>サンプルでbodyのclassとして指定している category_product、templateId_productSpec は、このページの category が product、templateId が productSpec であることを示す。これは、現状、サンプルのページでは何にも使用されていないが、JavaScirpt等と併用し、グローバルナビの現在地表示をさせるためのフラグとして使用したりといった具合に、ページに紐付けたい変数のように使用する。</li>
<li>layout_layoutTypeで指定するレイアウトタイプには、具体的な名称をつけるのを避けた方が良い。たとえば、サービスのページ用のテンプレートなのでlayout_service とつけ、このclassをブランチの起点として2カラムのエリアスタイルを指定たとしても、その後、そのレイアウトが、別のカテゴリで使用される可能性がある。最適な名前は、サイトの構造と、拡張性を考慮して判断する。（最適な名前が何かはサイト構造による）</li>
</ul>
<p>（bodyにidをつけてブランチの起点とするのは、あまりいい考えでないように思う。たとえば、製品情報ページであれば、body id="product" かもしれないが、これだと、複数のブランチの起点をbodyに持たせることができない。そういったことを考慮し、body class="category_product" のようにし、複数のブランチの起点を設けられるようにしているつもり）</p>

<h3>ブラウザ別CSS hack</h3>

<ul>
<li>*property:value; をIE7以下向けに、_peoperty:value; をIE6以下向けに使用する。<br />このCSS hackを使っているのは、１つもモジュールのスタイルが各所に分散し、管理性が落ちてしまうのを防ぐのが主な目的。 <a href="http://wiki.github.com/stubbornella/oocss/faq#hacks">「OOCSS - FAQ - hacks」これに同意</a></li>
<li>その他のブラウザに対してそれぞれのスタイルを指定したい場合、 /common/js/loader.js 内にブラウザ判別のスクリプトが用意されている。この中で、bodyに browser_browserName 形式でclassを追加し、これを起点にブランチさせてスタイルを指定し分ける。</li>
</ul>

<h3>共通画像について</h3>

<ul>
<li>モジュールやエリア内で使用される共通画像は、/common/img の中にディレクトリを切り、その中に格納する。たとえば、mod_textNavList で使用される画像は、/common/img/mod_textNavList に格納する。複数のモジュールで共通使用される画像（アイコン等）は、都度、/common/img 内に適切なディレクトリを作り、そこに格納する。</li>
<li>パフォーマンスやリクエスト数が気になる場合は、複数のモジュールで共通使用される画像をしっかり把握して管理したほうがベターだが、たとえ同じ画像をコピーし、増やすことになってしまおうとも、モジュールごとに、モジュールのディレクトリに使っている画像を全部突っ込んでしまった方が、管理は圧倒的に楽。モジュールが使われていないことが分かったらそのディレクトリごと消すだけで済むし、「モジュール間で共通の画像」として管理した場合、その画像が使われているか否かが判断できなくなってしまうため、その画像を２度と消すことができなくなってしまう。</li>
</ul>

<h3>余白の管理</h3>

<ul>
<li>基本的に、全てのモジュールは、下に余白を設ける。見出しの上を開けたい時、余白を開けて目立たせたいモジュール等に限り、上に余白を設ける。</li>
<li>基本的に、モジュール終端地点の下への余白はpaddingで指定し、モジュールの開始位置から上への余白はmarginで指定する。（marginの相殺を利用すると複雑になったり、ブラウザによっては相殺が起こらないケースが発生するため。）</li>
<li>メインエリアを、articleHd、articleBd、articleFt の3つのエリアに分割している。これは、大体の場合、「リード文が入るすぐ下に余白を広く設けたい」 「ページの最後のナビだったり、Adobe ReaderやFlashダウンロード案内が最後につくので、この上の余白を少し広く設けたい」 というケースが多いので、こうしてある。上に余白をとるとあれがこーなってとか考えるよりか楽だと思うし理解が容易だと思うので。</li>
</ul>


<h3>JavaScript</h3>

<ul>
<li>jquery.bodyScroller.js： スムーズにアンカースクロールする</li>
<li>jquery.mediaBoxAdjuster.js： mod_mediaBoxの補助（display:tableが使えないブラウザに対して、無理矢理table要素を作ってソースを置き換える）</li>
<li>forjs.css： loader.jsから読み込まれるCSSでJavaScript onの時しか読み込まれない。JavaScript offの環境を考慮するためのスタイルをここに書く</li>
</ul>

<h3>その他</h3>

<ul>
<li>bodyのline-heightには、mod_p（最も基本的な段落のモジュール）に指定したいものを指定し、見出しやリストなど、line-heightの調節が必要になる個所については、個別に指定する。見出しやリストは、line-height を低めに設定する。（文字が大きくなると、比例して行間が大きくなる＆リストだと、リスト間の区切りを意識させるために行間を縮めた方がベター）</li>
<li>テンプレートやモジュールの数が膨大になるとき、CSSファイルを分割して管理する。</li>
<li>モジュールは、1つの軸で完全にカテゴライズできるものではないので、CSSファイルを整理しようと、カテゴライズに時間をかけるのは避ける。たとえば、サンプルにある mod_textNavList は、リストのグループに所属するかもしれないが、ナビのグループに所属するとも考えられる。特定のテンプレートでのみ使用されるなど、明確な基準がある場合のみ、分類するなどにとどめておいた方がよい。なお、そのように明確に分類できる場合は、CSSファイル自体を分けてしまった方が良い。</li>
</ul>

<h3>ぶつくさ</h3>

<p>全てのスタイルは、mod_moduleName、area_areaNameを起点にスタイルを指定するって言う風にしておけば、その中ではかなり自由にスタイルが指定できます。単純なclass名を使っても被ることは無いので、blockってclass名を使ったら、あら、なんか別のが効いちゃったみたい。なんだかしらないけどpにスタイルが利いてるんだよね・・・うわーってなことを防げます。基本はモジュールベースで作っていき、場合によりbodyのclassでブランチさせるっていう感じです。モジュールの中では、極力classを使わずに、単純に書くと。</p>
<p>でもMTのwysiwygでやるときとか全部こんな風にclass名つけらんないしーって言う場合は、チョイ考え方を変えて、wysiwygで作成されるエリアを一つのモジュールだと考えればいい感じです。mod_wysiwygBlkとかなんとか。</p>
<p>ここで用意しているテンプレートだけでは、サイトを作るのには不足しているかと思います。そーいう場合は、どんどんモジュールを増やしていきます。HTMLテンプレートを作るって言うのは、次々に来たり変更されたりするデザインや原稿を、余白や共通部分のルールを考慮しながら、モジュールの粒度を気にしつつ空気を読みながらまとめていくのが仕事かと思います。たぶん。</p>
<p>量産時には <a href="http://www.nakka.com/soft/clcl/">CLCL</a> 等のクリップボードツールにモジュールを１個ずつ登録しておくとすごい楽です。</p>
<p>IE6が滅びたら、class="mod_moduleName" のような指定の仕方は、class="mod moduleName" に置き換えられるようになる予定です。なぜなら、IE7以降であれば、複数クラスのセレクタが使用できるるため。（<a href="/clip/archives/2007/05/070518-css-class/">Takazudo Clipping* - CSSで複数のclassを指定する</a>）。この点で苦しんだ結果がこのxxx_yyyといった感じです。子供セレクタも普通に使用できるようになれば、ハイフンもいらず、もっともっと安全で組みやすい形になるはず。まぁでも普通に見られるサイトでそれが使えるようになるにはもっと後の話ー。</p>

<p>--</p>

<p>ここで配布しているテンプレートを使う場合、特に許可などは要りませんが、YUI reset cssのライセンスはYUIを参照、JSライブラリのライセンスは各ソースを参照。</p>
<p>↓ 一通りまとめようと思ったきっかけ （このエントリで説明している内容はOOCSSではありません（念のため））</p>

<ul class="NL">
<li><a href="http://oocss.org/">Object Oriented CSS</a></li>
<li><a href="http://wiki.github.com/stubbornella/oocss">Object Oriented CSS - gitHub</a></li>
<li><a href="http://www.sitepoint.com/blogs/2009/06/16/first-look-object-oriented-css/">sitepoint: First Look: Object Oriented CSS</a></li>
</ul>

<p>↓ かなり昔からぶつぶつ言ってます</p>

<ul class="NL">
<li><a href="/clip/archives/2007/10/071028-howtodecideclassname/">Takazudo Clipping* - class名のつけ方</a></li>
<li><a href="/clip/archives/2008/09/080929-classnaming/">Takazudo Clipping* - サイトタイプ別class名管理方法</a></li>
</ul>]]>
</content>
</entry>
<entry>
<title>オブジェクト指向っぽい話が分かるかもしれないJavaScript講座　その3</title>
<link rel="alternate" type="text/html" href="http://gyauza.egoism.jp/clip/archives/2009/07/javascript-oop3/" />
<modified>2009-07-03T06:31:37Z</modified>
<issued>2009-07-02T19:24:09Z</issued>
<id>tag:gyauza.egoism.jp,2009:/clip//6.2286</id>
<created>2009-07-02T19:24:09Z</created>
<summary type="text/plain">JavaScriptでOOP</summary>
<author>
<name>Takazudo</name>
<url>http://gyauza.egoism.jp/clip/</url>
<email>takazudo@gmail.com</email>
</author>
<dc:subject>Javascript</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://gyauza.egoism.jp/clip/">
<![CDATA[<p>今回は、画像のロールオーバーを、今まで説明してきたように、クラスを使いながら作ってみます。リンクにマウスオーバー（及びフォーカス）されると、中にある画像のsrcの "_normal." を、 "_over." に変更してセットし、マウスアウト（及びブラー）されると、これと逆のことをします。</p>]]>
<![CDATA[<h3>サンプルとソース</h3>

<ul class="NL">
<li><a href="/clip/example-html/oorollover/1/">サンプルその1</a></li>
</ul>

<pre class="ChiliCode"><code class="html">&lt;ul&gt;
&lt;li&gt;&lt;a class=&quot;rollover&quot; href=&quot;http://diablo.com&quot;&gt;&lt;img src=&quot;diablo_normal.gif&quot; alt=&quot;Diablo&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;rollover&quot; href=&quot;http://hoge.com&quot;&gt;&lt;img src=&quot;hoge_normal.gif&quot; alt=&quot;HOGE&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&quot;rollover&quot; href=&quot;http://zudolab.net&quot;&gt;&lt;img src=&quot;zudolab_normal.gif&quot; alt=&quot;zudolab&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</code></pre>

<pre class="ChiliCode"><code class="javascript">/**
 * 接尾語
 */
var suffix = {
    normal: &quot;_normal.&quot;,
    over: &quot;_over.&quot;
};
/**
 * ロールオーバーマネージャー
 */
var RolloverManager = function(){
    this.pool = []; // アイテム保存用
};
RolloverManager.prototype = {
    register: function(container){
        var set = new RolloverItem(container); // RolloverItemを作る
        this.pool.push(set); // poolに保存
    }
};

/**
 * ロールオーバーアイテム
 */
var RolloverItem = function(container){
    this.container = container; // コンテナをメンバ変数として保存
    this.img = this.container.find(&quot;img&quot;); // 画像を探して保存
    this.setEvents(); // イベントをセット
    this.preload();
};
RolloverItem.prototype = {
    setEvents: function(){
        var self = this;
        // mouseover, focus時にchgToOverを呼ぶ
        this.container.bind(&quot;mouseover focus&quot;, function(){
            self.chgToOver();
        // mosueout, blur時にchgToNormalを呼ぶ
        }).bind(&quot;mouseout blur&quot;, function(){
            self.chgToNormal();
        });
    },
    chgToOver: function(){
        // _normal. を _over. に置換してセット
        var src = this.img.attr(&quot;src&quot;);
        if(src.indexOf(suffix.normal)==-1) return;
        src = src.replace(suffix.normal, suffix.over);
        this.img.attr(&quot;src&quot;,src);
    },
    chgToNormal: function(){
        // _over. を _normal. に置換してセット
        var src = this.img.attr(&quot;src&quot;);
        if(src.indexOf(suffix.over)==-1) return;
        src = src.replace(suffix.over, suffix.normal);
        this.img.attr(&quot;src&quot;,src);
    },
    preload: function(){
        // _normal. を _over. に置換してimg要素を作る
        // 実際にこれはドキュメント上に配置されないが、画像はキャッシュされる
        var src = this.img.attr(&quot;src&quot;);
        if(src.indexOf(suffix.normal)==-1) return;
        var img = new Image();
        img.src = src.replace(suffix.normal, suffix.over);
    }
};

/**
 * セットアップ
 */
$(function(){
    var manager = new RolloverManager();
    // a要素をラップしたjQueryオブジェクトを1個ずつmanagerにregister
    $(&quot;a.rollover&quot;).each(function(){
        manager.register($(this));
    });
});</code></pre>

<p>今回のソースでは、a要素それぞれにつき、RolloverItemのインスタンスを作成します（今までのまんじゅうにあたる）。今回は、前回のように、poolに保存しておく必要はありませんが、ひとまずソースコードを見ていきます。</p>

<h3>接尾語</h3>
<p>まず、今回は、マウスオーバー、アウトで、"_normal."、"_over." を切り替えるので、これが変更されたりしても面倒の無い様、変数として宣言しておきます。</p>
<pre class="ChiliCode"><code class="javascript">/**
 * 接尾語
 */
var suffix = {
    normal: &quot;_normal.&quot;,
    over: &quot;_over.&quot;
};</code></pre>
<p>変数がごちゃごちゃあると気持ちが悪いので、連想配列にしておきます。これで、suffix.normal、suffix.overで、文字列をもってこれます。</p>

<h3>ロールオーバーマネージャー</h3>
<p>前回のまんじゅうマネージャーと同様、ロールオーバーマネージャーを作成します。</p>
<pre class="ChiliCode"><code class="javascript">/**
 * ロールオーバーマネージャー
 */
var RolloverManager = function(){
    this.pool = []; // アイテム保存用
};
RolloverManager.prototype = {
    register: function(container){
        var set = new RolloverItem(container); // RolloverItemを作る
        this.pool.push(set); // poolに保存
    }
};</code></pre>
<p>ここは前回とほぼ同様ですね。containerとして、jQueryオブジェクトを渡します。スクリプトの最後のところで、</p>
<pre class="ChiliCode"><code class="javascript">/**
 * セットアップ
 */
$(function(){
    var manager = new RolloverManager();
    // a要素をラップしたjQueryオブジェクトを1個ずつmanagerにregister
    $(&quot;a.rollover&quot;).each(function(){
        manager.register($(this));
    });
});</code></pre>
<p>と、classにrolloverが指定されているa要素それぞれにつき、jQueryオブジェクト化し、ロールオーバーマネージャーに渡しています。</p>

<h3>ロールオーバーアイテム - コンストラクタ</h3>
<p>ロールオーバーマネージャー内で作られているのが、このロールオーバーアイテムのインスタンスです。</p>
<pre class="ChiliCode"><code class="javascript">/**
 * ロールオーバーアイテム
 */
var RolloverItem = function(container){
    this.container = container; // コンテナをメンバ変数として保存
    this.img = this.container.find(&quot;img&quot;); // 画像を探して保存
    this.setEvents(); // イベントをセット
    this.preload();
};</code></pre>
<p>コンテナ（a要素）、その中の画像を保存し、setEvents（イベントをセットするメソッド）、preload（画像のプリロードを行うメソッド）を読んでいます。</p>

<h3>ロールオーバーアイテム - setEvents</h3>
<p>コンテナ（a要素）に、イベントをセットします。</p>
<pre class="ChiliCode"><code class="javascript">    setEvents: function(){
        var self = this;
        // mouseover, focus時にchgToOverを呼ぶ
        this.container.bind(&quot;mouseover focus&quot;, function(){
            self.chgToOver();
        // mosueout, blur時にchgToNormalを呼ぶ
        }).bind(&quot;mouseout blur&quot;, function(){
            self.chgToNormal();
        });
    },</code></pre>
<p>jQueryの便利機能、bindを使うと、複数のイベントを同時にセットできます。ここでは、マウスオーバー、フォーカス時に、画像をオーバー状態に、マウスアウト、ブラー時に、画像を通常の状態に変更させるメソッドを呼ぶようにしています。</p>

<h3>ロールオーバーアイテム - chgToOver、chgToNormal</h3>
<p>イベントが発生したときに呼ばれるのが、この chgToOver、chgToNormal メソッドです。ここでは、imgのsrcを変更する処理をしています。</p>
<pre class="ChiliCode"><code class="javascript">    chgToOver: function(){
        // _normal. を _over. に置換してセット
        var src = this.img.attr(&quot;src&quot;);
        if(src.indexOf(suffix.normal)==-1) return;
        src = src.replace(suffix.normal, suffix.over);
        this.img.attr(&quot;src&quot;,src);
    },
    chgToNormal: function(){
        // _over. を _normal. に置換してセット
        var src = this.img.attr(&quot;src&quot;);
        if(src.indexOf(suffix.over)==-1) return;
        src = src.replace(suffix.over, suffix.normal);
        this.img.attr(&quot;src&quot;,src);
    },</code></pre>
<p>もし、オーバー状態にするときに_normal.が無かったり、通常状態に戻すときに_over.が無かったりした場合、処理をすること自体に意味が無いので、これらの文字列がsrcに含まれていない場合は、returnで処理を終わらせています。</p>

<h3>ロールオーバーアイテム - preload</h3>
<p>イベントが発生したときに、画像のsrcを変えますが、このとき、画像があらかじめ読み込まれていないと、マウスオーバーしたときに初めてオーバー状態の画像を読み込むことになってしまい、一瞬で画像が切り替わりません。あらかじめ、画像の要素を作り、オーバー状態のsrcをセットすることで、ブラウザのキャッシュに、オーバー状態の画像を残します。</p>
<pre class="ChiliCode"><code class="javascript">    preload: function(){
        // _normal. を _over. に置換してimg要素を作る
        // 実際にこれはドキュメント上に配置されないが、画像はキャッシュされる
        var src = this.img.attr(&quot;src&quot;);
        if(src.indexOf(suffix.normal)==-1) return;
        var img = new Image();
        img.src = src.replace(suffix.normal, suffix.over);
    }</code></pre>

<p>これは、RolloverItemのコンストラクタ内で呼ばれるため、ロールオーバーをセットしたときに、このプリロードも行われる仕組みになっています。</p>

<h3>これの何が便利なのだ</h3>

<p>・・・といった具合で、ロールオーバーマネージャーを介し、ロールオーバーアイテムインスタンスを作っていくという風に書くことができます。まぁしかし、この方法で書いても、ロールオーバーだとありがたみがあんまりないですね～。そんなに大層でない機能であれば、イベントをセットしてしまえばそれで終わりなことが多いですからね。 （この場合だと、初めにaとimgを取得しているので、イベントが発生するたびにDOMから何度もimgを探してこなくて良い＆画像変更のメソッドはprototypeでつけられているので、無駄が無いみたいなこまい話ぐらい？）</p>
<p>この場合、このように書いておくと便利なのは、たとえば、全てのロールオーバーを止めたいということが発生した場合（ロールオーバーアイテムクラスに、ロールオーバーを行うか否かを決定する変数を持たせ、イベント発生時にそれを見てロールオーバーする/しないという判別を行う）、</p>
<p>ダイナミックにページの内容が変化した後にもロールオーバーを設定したい場合（AjaxでHTML等をもってきて、ページに足された後に、それにイベントを設定する）、</p>
<p>システムか何かの都合で、"_normal", "_over" 以外のパターンでもロールオーバーを行わせたい場合（suffixの情報をRolloverManagerや、RolloverItemに持たせておき、複数のロールオーバーのパターンに対応させる）、</p>
<p>他の機能と連携した場合（ロールオーバーではなかなかないですねこれは。たとえば、チェックボックスに全てチェックを入れるという機能を作ったとしたら、コンテナを開いたらその機能を呼ぶといったような場合があります）</p>
<p>のように、単純なロールオーバーに、さらにもうちょっと何か機能が必要とされたときに、拡張しやすいかもしれません。イベントセットしておわり～で書いてあると、こういった場合に苦しむかもしれませんねー。うーん微妙な例だったか・・・</p>

<h3>別な書き方もしてみた　その1</h3>

<p>jQueryっぽく書くのであればこんな感じになるでしょうか？</p>
<ul class="NL">
<li><a href="/clip/example-html/oorollover/3/">サンプルその2</a></li>
</ul>
<pre class="ChiliCode"><code class="html">$(function(){
    $.fn.rollover = function(){
        var suffix = {
            normal: &quot;_normal.&quot;,
            over: &quot;_over.&quot;
        };
        this.bind(&quot;mouseover focus&quot;, function(){
            $(this).find(&quot;img&quot;).each(function(){
                var img = $(this);
                var src = img.attr(&quot;src&quot;);
                if(src.indexOf(suffix.normal)==-1) return;
                img.attr(&quot;src&quot;, src.replace(suffix.normal, suffix.over));
            });
        }).bind(&quot;mouseout blur&quot;, function(){
            $(this).find(&quot;img&quot;).each(function(){
                var img = $(this);
                var src = img.attr(&quot;src&quot;);
                if(src.indexOf(suffix.over)==-1) return;
                img.attr(&quot;src&quot;, src.replace(suffix.over, suffix.normal));
            });
        }).find(&quot;img&quot;).each(function(){
            var img = $(this);
            var src = img.attr(&quot;src&quot;);
            if(src.indexOf(suffix.normal)==-1) return;
            (new Image).src = src.replace(suffix.normal, suffix.over);
        });
    };
    $(&quot;a.rollover&quot;).rollover();
});</code></pre>
<p>機能はほぼ同じですが、こちらは関数の入れ子入れ子で作っています（クロージャって言う）。うーん普通につかうのにはこっちの方が簡単で便利なんじゃなかろうかｗ。ただこの場合だと、それぞれの機能を個別に使うことはできませんね。最初のサンプルで用意されている、chgToOver、chgToNormal、preloadのように、1つの機能をメソッドを呼んで実行ということはできないです。</p>

<h3>別な書き方もしてみた　その2</h3>
<p>1個目のサンプルを作っていて、a要素にはイベントをセットしてるだけで、具体的な画像切り替えは、その中の画像で行ってる。っていうことは、画像には画像用のクラスを作ってやった方がすっきりするかなと思って作ったのがこのサンプルです。</p>
<ul class="NL">
<li><a href="/clip/example-html/oorollover/2/">サンプルその3</a></li>
</ul>
<pre class="ChiliCode"><code class="javascript">var suffix = {
    normal: &quot;_normal.&quot;,
    over: &quot;_over.&quot;
};

var RolloverManager = function(){
    this.pool = [];
};
RolloverManager.prototype = {
    register: function(container){
        var set = new RolloverContainer(container);
        this.pool.push(set);
    }
};

var RolloverContainer = function(container){
    this.container = container;
    var img = this.container.find(&quot;img&quot;).eq(0);
    if(!img.size()) return;
    this.img = new RolloverImg(img);
    this.setEvents();
};
RolloverContainer.prototype = {
    setEvents: function(){
        var self = this;
        this.container.bind(&quot;mouseover focus&quot;, function(){
            self.img.chgToOver();
        }).bind(&quot;mouseout blur&quot;, function(){
            self.img.chgToNormal();
        });
    }
};

var RolloverImg = function(img){
    this.img = img;
    this.preload();
};
RolloverImg.prototype = {
    hasNormalSuffix: function(){
        return this.img.attr(&quot;src&quot;).indexOf(suffix.normal)!=-1 ? true : false;
    },
    hasOverSuffix: function(){
        return this.img.attr(&quot;src&quot;).indexOf(suffix.over)!=-1 ? true : false;
    },
    chgToOver: function(){
        if(!this.hasNormalSuffix()) return;
        this.img.attr(&quot;src&quot;, this.img.attr(&quot;src&quot;).replace(suffix.normal, suffix.over));
    },
    chgToNormal: function(){
        if(!this.hasOverSuffix()) return;
        this.img.attr(&quot;src&quot;, this.img.attr(&quot;src&quot;).replace(suffix.over, suffix.normal));
    },
    preload: function(){
        if(!this.hasNormalSuffix()) return;
        (new Image).src = this.img.attr(&quot;src&quot;).replace(suffix.normal, suffix.over);
    }
};

$(function(){
    manager = new RolloverManager();
    $(&quot;a.rollover&quot;).each(function(){
        manager.register($(this));
    });
});</code></pre>
<p>このサンプルでは、サンプルその1でRolloverItemクラスになっていた部分から、画像用クラスを切り離し、RolloverContainer、RolloverImgという2つのクラスに分けています。画像に関する操作は全てRolloverImgクラスで行い、RolloverContainerではイベントのみセットするという形です。その１と比べると、こっちの方がすっきりしているかも？</p>

<h3>まとめ</h3>

<p>そんな感じで、ロールオーバーでも色々な書き方ができます。ここで知っておいてほしいのは、ひとまず、こういう書き方があるということです。こー言う書き方があるっていうのを知らないと、なんのこっちゃさっぱりという状況に出くわしたとき、どうにもできませんし、配布されているライブラリも理解することができません。</p>
<p>また、複雑な機能を実装することになった時は、今回のサンプル１→サンプル３のように、機能を切りだして細かくしていかないと、巨大で、後から触りたくないスクリプトが出来上がってしまいます。</p>
<p>
なんかまんじゅうが出てこないとまじめですねこれ・・・<br />
次回はたぶん名前空間とか説明すると思います。
便利な点はちょっと先で～
</p>
<p>続く・・・（たぶん）</p>

<ul class="NL"> 
<li><a href="/clip/archives/2009/05/javascript-oop1/">オブジェクト指向っぽい話が分かるかもしれないJavaScript講座　その1</a></li> 
<li><a href="/clip/archives/2009/06/javascript-oop2/">オブジェクト指向っぽい話が分かるかもしれないJavaScript講座　その2</a></li> 
<li>オブジェクト指向っぽい話が分かるかもしれないJavaScript講座　その3</li> 
</ul> 
<p>---</p> 
<p><em>【参考】</em></p> 
<ul class="NL"> 
<li>オブジェクト指向でオススメなJavaScript本：<a href="http://www.amazon.co.jp/gp/product/159059908X?ie=UTF8&amp;tag=takazudo-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=159059908X">Amazon：Pro JavaScript Design Patterns (Recipes: a Problem-Solution Ap)</a></li> 
<li>細かく知りたいならとりあえずコレ：<a href="http://www.amazon.co.jp/gp/product/4873113296?ie=UTF8&amp;tag=takazudo-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4873113296">Amazon：サイ本</a></li> 
</ul> ]]>
</content>
</entry>
<entry>
<title>Web Creators 2009年8月号に執筆しました</title>
<link rel="alternate" type="text/html" href="http://gyauza.egoism.jp/clip/archives/2009/06/web-creators-20098/" />
<modified>2009-06-29T08:18:03Z</modified>
<issued>2009-06-29T08:02:13Z</issued>
<id>tag:gyauza.egoism.jp,2009:/clip//6.2283</id>
<created>2009-06-29T08:02:13Z</created>
<summary type="text/plain">web creatorsまた書いた</summary>
<author>
<name>Takazudo</name>
<url>http://gyauza.egoism.jp/clip/</url>
<email>takazudo@gmail.com</email>
</author>
<dc:subject>雑多</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://gyauza.egoism.jp/clip/">
<![CDATA[<p>Web Creators 2009年8月号は、「クオリティそのままにコストと時間を削減するWEB制作のアイデア」という特集なのですが、これに2ページ半ぐらい原稿を書きました。Web creatorsは、2か月に1回ぐらいのペースでなんかしら書かせていただいているのですが、今回のは、CSS Tipsみたいな内容ではなくて、HTMLでワイヤーフレーム作るとか、モジュール化するとかそーいう話をちらっと書いています。</p>
]]>
<![CDATA[<p>書いたネタは以下の3本です。</p>

<ul>
<li>完成をイメージしやすいHTMLのプロトタイプを作成し、やり直しを防ぐ</li>
<li>設計、デザイン、コーディングのスムーズな流れを作る</li>
<li>HTMLパーツリストのフォーマットをつくり更新作業を簡単にする</li>
</ul>

<p>今回はいつもよりちょっと上のレイヤーの話を書いていて、なんというか、コーディングするだけがコーダーじゃないっていうか、コーダーが次にできることって？とか、そんな事を思って書いたりもしたので、見かけたらみてやってください。</p>

<ul class="NL">
<li><a href="http://www.amazon.co.jp/gp/product/B002D3HPZU?ie=UTF8&tag=takazudo-22&linkCode=as2&camp=247&creative=7399&creativeASIN=B002D3HPZU">Amazon：Web creators (ウェブクリエイターズ) 2009年 08月号 [雑誌]</a></li>
</ul>]]>
</content>
</entry>
<entry>
<title>Web制作のお供にVMwareのススメ</title>
<link rel="alternate" type="text/html" href="http://gyauza.egoism.jp/clip/archives/2009/06/090629-vmware/" />
<modified>2009-06-29T06:21:39Z</modified>
<issued>2009-06-28T20:02:59Z</issued>
<id>tag:gyauza.egoism.jp,2009:/clip//6.2282</id>
<created>2009-06-28T20:02:59Z</created>
<summary type="text/plain">VMware入れてみたの巻</summary>
<author>
<name>Takazudo</name>
<url>http://gyauza.egoism.jp/clip/</url>
<email>takazudo@gmail.com</email>
</author>
<dc:subject>雑多</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://gyauza.egoism.jp/clip/">
<![CDATA[<p>Movable Typeを組み込むとき、いままで、Windows上にxamppを入れて開発してたんですが、色々厄介なことがあります。それは、大体のサーバーは、Linuxであるということ。windowsだと、パスが\で区切られるのに対し、Linuxは、/です。また、CGIの1行目にある、#!/usr/bin/perlも、windowsだとこのままだと動かないので、どうにかしないとなりません。このため、色々設定しても、サーバーにアップロードした後は、もう、2度とローカルでテストできなくなってしまいます。</p>

<p>そこで、VMwareってのを入れ、ローカルに仮想Linuxマシンを立ち上げて、そこで作業してみたところ、かなり開発が快適になりました。実際にファイルを配置するパスを、レンタルサーバーと完全に合わせて、ローカルの仮想マシン上でテストしながら開発することで、サーバーにアップした後に変更が起こっても、ローカルでテストした上でアップロードできます。自分は、Linuxなど、なんのこっちゃらという状態でしたので、設定するのにかなり苦しみましたが、これは一度やったら元には戻れないぐらい便利です。</p>

<p>また、ブラウザチェック用に、ローカルに、Windows XPやWindows2000を用意しておくのも便利です。FirefoxだのSafariだのIEだのは、どんどんバージョンアップしていきます。IETesterや、Firefox2と3を同居させる方法など、色々ありますが、どうにもこうにも、ずっとそれを探し続けるのは、かなり手間です…。手間なうえ、それらを100%信頼することはできません。（印刷プレビューもできなかったりしますよねそういうのって・・・） そんな時にもVMwareで環境を整えておけば、どんとこいです。</p>]]>
<![CDATA[<h3>VMwareの種類</h3>

<p>VMwareには、色々なパッケージが用意されていますが、以下の3つを使うのがいいと思います。（もっと上位パッケージもあるけれどそれはよく知らない）</p>
<ul class="NL">
<li><a href="http://www.vmware.com/jp/products/ws/">VMware Workstation</a></li>
<li><a href="http://www.vmware.com/jp/products/server/">VMware Server</a></li>
<li><a href="http://www.vmware.com/jp/products/player/">VMware Player</a></li>
</ul>
<p>VMware Workstation、VMware Serverは、仮想マシンを作れます。Windows XPや、Windows 2000のCDがあれば、そこから、ウィザードに従って進んでいくことで、さくっと仮想マシンを作ることができます。VMware Serverは、その名の通り、サーバー用で、あるマシンにインストールし、ネットワークを通じて、そのマシンにある仮想マシンを使えるようにするってのがメインの機能な上、英語だったり、管理をブラウザ上で行ったりなど、ちょっとやっかいです。VMware workstationは、日本語ですし、VMware Serverと比べると、操作が簡単です。ただし、30日の評価期間を過ぎると、買わなければなりません。$250ぐらいで、そこそこします。</p>
<p>これに対し、VMware Playerは、上記2製品でつくったVMwareの仮想マシンイメージを再生する機能しか無いソフトです。しかし、一度仮想マシンのイメージを作ってしまえば、後は、VMware Playerで再生専用として使うだけで、かなり十分なので、Workstationでイメージ作って、あとはVMware Playerで運用ーってのでいいかなとも思います。自分はWorkstationいれたりServer入れたり、かなりまごまご色々試していました。</p>
<p>そんなこんなで、Windowsの旧環境とか入れたい人はそーやってイメージを用意できます。</p>

<h3>ubuntuを入れる</h3>

<p>おーっと話がそれましたが、Linuxを入れようということでした。<br />なんと、LinuxのVMware仮想マシンは、サイトからダウンロードできます。自分は、ubuntuっていうディストリビューションを入れました。</p>
<ul class="NL">
<li><a href="http://www.ubuntulinux.jp/products/JA-Localized/vmware">ubuntu - VMware用仮想マシンのダウンロード</a></li>
</ul>
<p>難しいことは抜きにして、とりあえずそのLinux環境ってのを試したいって人は、VMware Playerをインストールして、このイメージをダウンロードしてクリックすれば、もうそれで仮想Linux環境が使えます。タダでこんなの使えるとはありがたすぎる・・・！</p>

<h3>開発環境用ソフトを色々入れる</h3>

<p>自分は、とりあえずMT構築用だったので、以下のソフトを入れました。</p>
<ul class="NL">
<li><a href="http://www.apachefriends.org/jp/xampp-linux.html">XAMPP for Linux</a></li>
<li><a href="http://www.activestate.com/activeperl/">Active Perl</a></li>
</ul>
<p>これを入れれば、apache php mysql ftp perlが使えます。CPANを使い、MTに必要なモジュールをインストールすれば、Linux上でテストできます。sambaを使ったファイル共有機能もubuntuにはついているので、開発用のディレクトリを共有しておき、それを、Windowsでネットワークドライブとして登録しておけば、普通のファイルと同じように編集できます。</p>
<p>レンタルサーバーのディレクトリは、大体、 /home/sites/hogehogeheteml/user-name/hogehoge/ みたいな形だと思います。仮想マシン上に、これと全く同じパスをapacheのルートとし、そこで開発を進めることで、ほとんどそのままアップロードするだけで、レンタルサーバーへのセットアップが完了できます。DBに入れたデータも、phpmyadminでdumpして、そのままレンタルサーバーのphpmyadminでインポートするなどもできたりなど。ちょっとテンプレート変更するたびに、逐次サーバーにアップロードして再構築→デバッグの繰り返しの手間が減るため、これは非常に便利です。（後で思ったのだけれど、Active Perlは必要だったのだろうか…）</p>

<h3>まーしかし大変でした</h3>

<p>しかし、自分はほんと、Linuxの知識はからっきしでしたので、結構大変でした。特に、ファイル共有をするとき、パーミッションの問題で、windowsからファイルを変更できなかったり消せなかったりとか、ubuntu内でインターネットに繋げなかったり、そもそもubuntuに何かをインストールするってのがどうやるのかわからなかったりでググりながらやったり、viの操作方法をググったりなどなど、かなり時間食いました。</p>
<p>でも、実際これをやってみると、普段、windowsしか使ってない自分としては、結構勉強になりました。あーパーミッションってそういうことなのねとか、基本的なコマンドも覚えられたりなどで、Linuxを触ってみたいかもとか思ってる人にもちょっとオススメかもしれないです。わけわかめになってしまったら、消して1からやり直すとかも簡単ですので。</p>
<p>そんなこんなでVMware大好きっ子になりつつあります。<br />今はVMware Serverを使ってるんですが、Workstationの方が何かと便利なのでお金に余裕ができたら欲しいかもとか思ってます。</p>]]>
</content>
</entry>
<entry>
<title>オブジェクト指向っぽい話が分かるかもしれないJavaScript講座　その2</title>
<link rel="alternate" type="text/html" href="http://gyauza.egoism.jp/clip/archives/2009/06/javascript-oop2/" />
<modified>2009-07-02T19:41:01Z</modified>
<issued>2009-06-09T16:58:14Z</issued>
<id>tag:gyauza.egoism.jp,2009:/clip//6.2272</id>
<created>2009-06-09T16:58:14Z</created>
<summary type="text/plain">JavaScriptでオブジェクト指向が分かるかもしれない話</summary>
<author>
<name>Takazudo</name>
<url>http://gyauza.egoism.jp/clip/</url>
<email>takazudo@gmail.com</email>
</author>
<dc:subject>Javascript</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://gyauza.egoism.jp/clip/">
<![CDATA[<p>自分なんぞがオブジェクト指向とはなんぞと語るなんておこがましく、「オブジェクトっぽい話」でいいかなーと思っていたのですが、ブックマークするときに「オブジェクト」でタグ付けてる人がいたので、これはいかんと思い、こっそりタイトルを直しました。</p>
<p>2回目の今回は、まんじゅうをいっぱい作ったり、一気に出したり消したりする方法について書きます。</p>]]>
<![CDATA[<h3>まんじゅうマネージャー</h3>

<p><a href="/clip/archives/2009/05/javascript-oop1/">前回</a>、クラス作ってインスタンスを作ると便利だというところで終わりましたが、便利な点としてはまず、「複数のインスタンスをまとめて操作したり、作ったりすることが簡単にできる」という点があります。どういうことかというと、とりあえず、以下のサンプルを見てみてください。</p>
<ul class="NL"><li><a href="/clip/example-html/manju2/">まんじゅうマネージャーサンプル</a></li></ul>
<p>まんじゅうを一気に作ったり、隠したりすることができます。<br />これで賞味期限が切れたりしても大丈夫なはずです。</p>
<p>この機能を作れと言われたら、前回の知識だけは結構厳しいのではないでしょうか。ガツガツいっぱいスクリプトを書いて悩んだり、$("div.manju")とかで毎回まんじゅう探してきたりするんじゃないでしょうか。今回は、まんじゅうクラスに加え、まんじゅうマネージャークラスという、まんじゅうを作ったり、まんじゅうに命令を与えるクラスを作ることで、これを実現しています。</p>
<p>なお、まんじゅうもこっそり改良されています。モダンな人にはよりまんじゅうに見えるようになっただけでなく、Manjuクラスもちょっとよさげになっていますので、興味がある方は前回のManjuクラスと見比べてみてください。</p>

<h3>まんじゅうマネージャー1個作る</h3>
<p>これがまんじゅうマネージャークラスのソースです。</p>
<pre class="ChiliCode"><code class="javascript">/**
 * ManjuManager
 * まんじゅうマネージャークラス。
 */
var ManjuManager = function(){
    this.manjuPool  = []; // まんじゅうを貯めておく配列
};
ManjuManager.prototype = {
    createManju: function(){
        var manju = new Manju(); // まんじゅうを作る
        this.manjuPool.push(manju); // まんじゅうプールに入れる
    },
    createPluralManju: function(num){
        // 指定された個数分、createManju()を呼ぶ
        for(var i=0,l=num; i&lt;l; i++){
            this.createManju();
        }
    },
    showAllManju: function(){
        // まんじゅうプールに入ってるまんじゅうそれぞれにつき…
        $.each(this.manjuPool, function(){
            // showメソッドを呼ぶ
            this.show();
        });
    },
    hideAllManju: function(){
        // まんじゅうプールに入ってるまんじゅうそれぞれにつき…
        $.each(this.manjuPool, function(){
            // hideメソッドを呼ぶ
            this.hide();
        });
    }
};

/* まんじゅうマネージャーのインスタンス作成 */
manager = new ManjuManager();</code></pre>
<p>各メソッドの機能は、ざっと説明すると以下のようになります。</p>
<ul>
<li>createManju() … まんじゅうを１個作って貯めておく</li>
<li>createPluralManju(num) … 指定された個数のまんじゅうを作って貯めておく</li>
<li>showAllManju() … 貯めておいた全てのまんじゅうを表示させる</li>
<li>hideAllManju() … 貯めておいた全てのまんじゅうを隠す</li>
</ul>
<p>用意したサンプルページのボタンを押すとこれらが呼ばれます。<br />スクリプトの最後のところで、</p>
<pre class="ChiliCode"><code class="javascript">manager = new ManjuManager();</code></pre>
<p>とやっています。前回、まんじゅうの雛型（クラス）からまんじゅう（インスタンス）を作ったように、このまんじゅうマネージャーも同様、まんじゅうマネージャークラスから、１個だけ、まんじゅうマネージャーを作っています。</p>
<p>この、まんじゅうマネージャー：managerのメソッドを以下のように呼ぶことで、今説明した機能を使うことができます。</p>

<pre class="ChiliCode"><code class="javascript">manager.createManju();
manager.createPluralManju(3);
manager.showAllManju();
manager.hideAllManju();</code></pre>


<h3>まんじゅうプール</h3>
<p>このまんじゅうマネージャーのキモは、コンストラクタ内で作られる、まんじゅうプールにあります。</p>
<pre class="ChiliCode"><code class="javascript">var ManjuManager = function(){
    this.manjuPool  = []; // まんじゅうを貯めておく配列
};</code></pre>
<p>とりあえず、まんじゅうマネージャーが作られたら、まんじゅうプールが設置されます。まんじゅうを作る、createManjuメソッドの中身をちょっと見てみます。</p>
<pre class="ChiliCode"><code class="javascript">    createManju: function(){
        var manju = new Manju(); // まんじゅうを作る
        this.manjuPool.push(manju); // まんじゅうプールに入れる
    },</code></pre>
<p>newでまんじゅうを作るのは前回と変わりません。そのあと、まんじゅうプールにそのまんじゅうを入れるということを行っています。作られたまんじゅうは、全て、このまんじゅうプールに貯めて置かれるのです。あるクラスのインスタンスの中で、別のクラスのインスタンスを作り、それを保存しておくのです。ちょっとややこしいですね。</p>

<h3>まんじゅうを一気に作る</h3>
<p>まんじゅうを一気に作ることができる、createPluralManjuメソッドも見てみます。</p>
<pre class="ChiliCode"><code class="javascript">    createPluralManju: function(num){
        // 指定された個数分、createManju()を呼ぶ
        for(var i=0,l=num; i&lt;l; i++){
            this.createManju();
        }
    },</code></pre>
<p>ここでやっていることは、指定された数分だけ、まんじゅうマネージャーのcreateManjuメソッドを呼ぶということを行っています。これでまんじゅうの大量生産もあっという間です。まんじゅうは、createManjuメソッド内で作られるので、作られたまんじゅうはまんじゅうプールに貯められます。はて、こんな複雑なことをしてまでまんじゅうを貯めて、なんか得があるのでしょうかと言うと…</p>

<h3>まんじゅうを一気に表示させる / 隠す</h3>
<p>この貯められたまんじゅうに対して色々な操作ができるのです。まんじゅうを一気に消したり出したりする、showAllManju、hideAllManjuメソッドを見てみます。</p>
<pre class="ChiliCode"><code class="javascript">    showAllManju: function(){
        // まんじゅうプールに入ってるまんじゅうそれぞれにつき…
        $.each(this.manjuPool, function(){
            // showメソッドを呼ぶ
            this.show();
        });
    },
    hideAllManju: function(){
        // まんじゅうプールに入ってるまんじゅうそれぞれにつき…
        $.each(this.manjuPool, function(){
            // hideメソッドを呼ぶ
            this.hide();
        });
    }</code></pre>
<p>これらは、まんじゅうプールに入っている全てのまんじゅうに対し、showメソッド、hideメソッドを呼ぶというだけの機能になります。$.eachというのは、jQueryの便利機能で、「第一引数の配列の各要素につき…第二引数で指定した関数を実行せよ」ということしてくれます。第二引数で指定した関数の中でのthisは、配列に格納された各要素…まんじゅうインスタンスになります。まんじゅうプールにたまってるまんじゅうそれぞれの出せー隠せーというメソッドを呼んであげています。</p>
<p>まんじゅうマネージャーを介することで、つくられたまんじゅうは、まんじゅうマネージャー内のまんじゅうプールに貯められるので、これらをまとめて、それもごく単純に操作することができるのです。</p>

<h3>まとめ</h3>
<p>こんな感じでまんじゅうマネージャーを作ると、Manjuクラスを一切意識せず、managerのメソッドを呼ぶだけで色々なまんじゅうの操作を一気に出来るようになります。まんじゅうマネージャーは、まるで工場のような役割を果たします。１個１個手でまんじゅうを作るよりもはるかに効率的で便利です。まんじゅうの作り方を知らなくても、まんじゅうマネージャーに、まんじゅう作ってと言えば済むようになるのです。産業革命やでこれは・・・。</p>
<p>これを発展させたプログラムの組み方（デザインパターンと言う）に、Abstract Factoryパターン、Flyweightパターンというものがあります。Abstract Factoryパターンは、まんじゅう工場ではなく、お菓子工場を作るようなイメージです。まんじゅうクラスだけでなく、ようかんクラス、もなかクラスなどの沢山のお菓子クラスが存在する場合、効率的にお菓子を作ったり管理したりするための方法になります。Flyweightパターンというのは、今回のように複数のインスタンスを作ってそれをどうこうする時に、共通するデータや機能を、マネージャークラスに持たせて効率化を図るための方法です（スミマセンまんじゅうだといい例が思いつきませんでした）。これらについてもおいおい説明するかもしれないです。それらの中では、今回作ったまんじゅうマネージャーのようなクラスのことを、Factoryクラスとか呼んでいるみたいです（←これあんまり自信なし）。</p>
<p>まーしかし、こう思いませんか？</p>
<p><em>「ていうかまんじゅう作るプログラムなんて書かないし！」</em></p>
<p>それには僕も賛成します。「ほう！ではあれもこれもこれでもっと素敵に書けるな」とか頭のキレる人はわずかなんじゃないでしょうか。僕も大して考えずに書いてたらはちゃめちゃになってきてこういうのにたどり着いたので・・・。次回は、実際に使われるような機能を、１回目と２回目で説明した方法で実装してみるサンプルを説明しようかと思います。</p>
<p>続く…（たぶん）</p>
<ul class="NL">
<li><a href="/clip/archives/2009/05/javascript-oop1/">オブジェクト指向っぽい話が分かるかもしれないJavaScript講座　その1</a></li>
<li>オブジェクト指向っぽい話が分かるかもしれないJavaScript講座　その2</li>
<li><a href="/clip/archives/2009/07/javascript-oop3/">オブジェクト指向っぽい話が分かるかもしれないJavaScript講座　その3</a></li>
</ul>
<p>---</p>
<p><em>【参考】</em></p>
<ul class="NL">
<li>オブジェクト指向でオススメなJavaScript本：<a href="http://www.amazon.co.jp/gp/product/159059908X?ie=UTF8&amp;tag=takazudo-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=159059908X">Amazon：Pro JavaScript Design Patterns (Recipes: a Problem-Solution Ap)</a></li>
<li>細かく知りたいならとりあえずコレ：<a href="http://www.amazon.co.jp/gp/product/4873113296?ie=UTF8&amp;tag=takazudo-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4873113296">Amazon：サイ本</a></li>
</ul>
<p>---</p>
<p>2009/6/19追記</p>
<p>もともと、本文中にFactory Methodパターンと書いてあったのは、Abstract Factoryパターンの間違いだったので修正しました。ブックマークコメントで教えてくださった方ありがとうございます！</p>]]>
</content>
</entry>
<entry>
<title>$(&quot;body&quot;)==$(&quot;body&quot;) がfalseになるのはなぜなんだー</title>
<link rel="alternate" type="text/html" href="http://gyauza.egoism.jp/clip/archives/2009/05/090526-bodybody-false/" />
<modified>2009-05-27T05:24:43Z</modified>
<issued>2009-05-26T13:05:41Z</issued>
<id>tag:gyauza.egoism.jp,2009:/clip//6.2268</id>
<created>2009-05-26T13:05:41Z</created>
<summary type="text/plain"><![CDATA[前エントリがすごいブックマークされている… 時間を見て続きを書きますのでよろしくお願いします。 jQueryで、 $(&quot;body&quot;)==$(...]]></summary>
<author>
<name>Takazudo</name>
<url>http://gyauza.egoism.jp/clip/</url>
<email>takazudo@gmail.com</email>
</author>
<dc:subject>Javascript</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://gyauza.egoism.jp/clip/">
<![CDATA[<p>前エントリがすごいブックマークされている…<br />
時間を見て続きを書きますのでよろしくお願いします。</p>
<p>jQueryで、</p>
<pre class="ChiliCode"><code class="javascript">$(&quot;body&quot;)==$(&quot;body&quot;) // false</code></pre>
<p>のような感じで、HTMLの要素をラップしたものを比較しようとすると、falseが出るのはなぜなんだろう。ループさせて保存してたやつと比較するときにアラ？これ一致しないの？だって同じでしょ？と思ってのだけれど、なんでダメなのか分かった。</p>]]>
<![CDATA[<ul class="NL">
<li><a href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Comparison_Operators">Mozilla developer center - Comparison Operators</a></li>
</ul>

<p>によると、”Two objects are strictly equal if they refer to the same Object.”とのことで、オブジェクト同士を比較するときは、同じものを参照していないとtrueにならないとのこと。最初の $(&quot;body&quot;) と、2番目の $(&quot;body&quot;) は、内容的には同じなのだけど、後から作られたほうは最初に作ったjQueryオブジェクトとは別のオブジェクトなので、ダメってことだった。</p>

<pre class="ChiliCode"><code class="javascript">var hoge = {a:1,b:2};
var hage = hoge;
hoge==hage // true</code></pre>

<p>だけど、</p>

<pre class="ChiliCode"><code class="javascript">var hoge = {a:1,b:2};
var hage = {a:1,b:2};
hoge==hage // false</code></pre>

<p>になるってことみたい。</p>
<p>なんで</p>

<pre class="ChiliCode"><code class="javascript">$(&quot;body&quot;)==$(&quot;body&quot;) // false</code></pre>

<p>がtrueになるはずでしょ？と思ったかというと、たぶん、</p>

<pre class="ChiliCode"><code class="javascript">document.body == document.body // true</code></pre>

<p>がtrueになるから、そう勘違いしたのだと思った。<br />
jQueryオブジェクトは、HTMLの要素みたいに扱えるけど、実際はHTMLの要素じゃなくてオブジェクトなんですよということだった。なので、</p>

<pre class="ChiliCode"><code class="javascript">$(&quot;body&quot;).get(0)==$(&quot;body&quot;).get(0) //true</code></pre>

<p>のようにちゃんとHTMLの要素同士で比較してやれば、それはおんなじ物を指しているのでOKってことなのだなぁ。</p>]]>
</content>
</entry>
<entry>
<title>オブジェクト指向っぽい話が分かるかもしれないJavaScript講座　その1</title>
<link rel="alternate" type="text/html" href="http://gyauza.egoism.jp/clip/archives/2009/05/javascript-oop1/" />
<modified>2009-07-02T19:43:11Z</modified>
<issued>2009-05-24T20:16:17Z</issued>
<id>tag:gyauza.egoism.jp,2009:/clip//6.2266</id>
<created>2009-05-24T20:16:17Z</created>
<summary type="text/plain">JavaScriptでオブジェクト指向が分かるかもしれない話</summary>
<author>
<name>Takazudo</name>
<url>http://gyauza.egoism.jp/clip/</url>
<email>takazudo@gmail.com</email>
</author>
<dc:subject>Javascript</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://gyauza.egoism.jp/clip/">
<![CDATA[<p>自分はスーパーJavaScripterでこんなすげーのが5行で書けちゃう。やばいだろ！とかいうのでは全然無いですが、オブジェクト指向っぽい話が最近分かってきたつもりで、それでやっときゃ問題無いってことを思い始めているので、なんかそんな話を書いていきます。</p>
<p>こんな短く書くテクニックがあるぜ！ var hoge = hage ? huga : hoga; とか書けちゃうんだぜ！とかより、長くていいから分かりやすく拡張しやすいようにするにはどうするのかとか、そういう話ができればなーと思います。内容的には全くもって新しくも何とも無いですが。jQuery使ってやる前提です。</p>]]>
<![CDATA[<h3>まんじゅう製造スクリプト</h3>

<p>今日はまんじゅうを5個作ります。なんと、まんじゅうは、クリックすると隠れます。</p>

<ul class="NL">
<li><a href="/clip/example-html/manju1/index.html">まんじゅうサンプル</a></li>
</ul>

<pre class="ChiliCode"><code class="javascript">var Manju = function(){
    this.elem;
    this.hidden = false;
    this.setup();
}
Manju.prototype = {
    setup: function(){
        this.elem = $('&lt;div class=&quot;manju&quot;&gt;MANJU!&lt;/div&gt;');
        $(document.body).append(this.elem);
        var self = this;
        this.elem.click(function(){
            if(self.hidden){
                self.show();
            }else{
                self.hide();
            }
        });
    },
    hide: function(){
        this.elem.css(&quot;background&quot;,&quot;#cccccc&quot;);
        this.hidden = true;
    },
    show: function(){
        this.elem.css(&quot;background&quot;,&quot;#000000&quot;);
        this.hidden = false;
    }
}

$(function(){
    var manju1 = new Manju();
    var manju2 = new Manju();
    var manju3 = new Manju();
    var manju4 = new Manju();
    var manju5 = new Manju();
});</code></pre>


<p>とりあえず解説。</p>

<h3>コンストラクタからはじめるまんじゅうクラス</h3>

<pre class="ChiliCode"><code class="javascript">var Manju = function(){
    this.elem;
    this.hidden = false;
    this.setup();
}</code></pre>

<p>まんじゅうを5個作るんですが、その前にまんじゅうの雛型を用意してやりましょう。これをクラスとかいう。（厳密にはJavaScriptではクラスっていう風には言わないんだけれど、ここではまぁ気にしない）</p>
<p>まんじゅうには、まんじゅうを表すHTMLを入れておくelem、まんじゅうが隠れてるのかを表すhiddenっていう箱を用意せよ。まんじゅうは最初は隠れてないのでfalse。そんで、まんじゅうのセットアップをせよ。っていうことをここではしてます。こんな感じで、まんじゅうが作られた時にこれをしてくれっていう関数を、コンストラクタとか言います。まんじゅうクラスを作るには、この、コンストラクタをまず作りましょう。まんじゅうコンストラクタです。</p>

<h3>まんじゅうのメソッド</h3>

<pre class="ChiliCode"><code class="javascript">Manju.prototype = {
    setup: function(){
        …
    },
    hide: function(){
        …
    },
    show: function(){
        …
    }
}</code></pre>

<p>次に、まんじゅうの機能をどんどんつけていきます。<br />今出た、まんじゅうのセットアップ…setupに加え、まんじゅうを隠すhide、まんじゅうを出現させるshowっていう機能をManjuにつけちゃいます。こんな感じで、まんじゅうの機能としてくっつけられた関数のことを、メソッドとか言う。</p>

<pre class="ChiliCode"><code class="javascript">    setup: function(){
        this.elem = $('&lt;div class=&quot;manju&quot;&gt;MANJU!&lt;/div&gt;');
        $(document.body).append(this.elem);
        var self = this;
        this.elem.click(function(){
            if(self.hidden){
                self.show();
            }else{
                self.hide();
            }
        });
    },</code></pre>

<p>まんじゅうのセットアップでは、まず、まんじゅうを表すHTMLを作ります。<br />
ここからjQueryの便利機能をちょこちょこ使いますが、jQueryの機能は細かく説明しませんので、詳細はjQueryのドキュメントなどを参照してください。はじめに出てくるthisってのは、まんじゅう自体を示します。まんじゅうのelemっていう箱にこのHTMLを入れてしまいます。そんで、ページのbodyに入れ込めっていう命令をかいてあげます。そのあとは、まんじゅうがクリックされた時、隠れてたらまんじゅうのshowメソッドを、隠れてなかったらhideメソッドを実行せよというイベントを、追加したHTMLに設定してあげます。</p>
<p>初めにまんじゅうコンストラクタの中にでthis.setup();って書いてありました。<br />
これは、まんじゅうが作られた時に、このsetupを実行せよってことです。</p>
<p>それで、そのshow,hideってのは何してくれるのかというと…</p>
<pre class="ChiliCode"><code class="javascript">    hide: function(){
        this.elem.css(&quot;background&quot;,&quot;#cccccc&quot;);
        this.hidden = true;
    },
    show: function(){
        this.elem.css(&quot;background&quot;,&quot;#000000&quot;);
        this.hidden = false;
    }</code></pre>
<p>まんじゅうHTMLのCSS、背景を灰色にせよ、黒くせよっていうことをしてくれます。そして、隠れてるのか否かっていうフラグをtrueにしたりfalseにして、いままんじゅうが隠れているのか否かを切り替えます。これでまんじゅうクラスが完成。ついにまんじゅうを作る時が来ました。</p>

<h3>まんじゅうクラスのインスタンス</h3>

<pre class="ChiliCode"><code class="javascript">$(function(){
    var manju1 = new Manju();
    var manju2 = new Manju();
    var manju3 = new Manju();
    var manju4 = new Manju();
    var manju5 = new Manju();
});</code></pre>
<p>$(function(){});っていうのは、ページのロードが完了したときにこれやってねっていう命令です。ページがロードされる前にやってしまうと、HTMLがまだ作られていないので、色々と問題になるので、こんな感じで、ロード完了時にまんじゅうを作ってやります。new Manju()です。新しいまんじゅうを雛型からつくってやるのです。こうやって、雛型(クラス)から作られたモノ（オブジェクト）たちを、インスタンスって言います。まんじゅうクラスのインスタンスです。</p>
<p>そんなこんなでまんじゅうが5個できます。</p>
<p>※ まんじゅうクラスを作る時は、雛型を作ってるだっけなので、ロード時じゃなくてもいいのです。</p>

<h3>this</h3>

<p>ちなみに、コレ</p>

<pre class="ChiliCode"><code class="javascript">        var self = this;
        this.elem.click(function(){
            if(self.hidden){
                self.show();
            }else{
                self.hide();
            }
        });</code></pre>

<p>ようわからんと思った人がいるかもしれませんが、これは、thisっていう変数は、使われる場所でコロコロ変わるものなので、こんな風にかいてあげる必要があります。thisは、まんじゅう自身を指すと言いましたが、clickの中で使われる時は、thisは、クリックされた要素（&lt;div class=&quot;manju&quot;&gt;MANJU!&lt;/div&gt;）がthisになるのです。そんなこんなで、まんじゅう自身を一時的にselfに保存してやり、show、hideメソッドを呼んでやるのです。</p>

<h3>プロパティ</h3>

<p>まんじゅうには、elemとhiddenっていう箱をつけてやると最初に書きましたが、これら、まんじゅうに属する変数のことを、プロパティって言います。下のようなコードで、中に入ってる情報をとってくることができます。</p>

<pre class="ChiliCode"><code class="javascript">alert(manju1.hidden); // 隠れてたらtrue、出てたらfalseと出る</code></pre>

<p>this.hiddenとかthis.elemとか使ってましたねそういえば。</p>

<h3>prototype</h3>

<p>こんな感じで、prototypeでメソッドをつけてあげると、メモリを食わなくていいとの話です。各まんじゅうは、elemとhiddenっていう箱だけを持つ形になり、prototypeでくっつけてあげたメソッドは、全まんじゅうで共通になります。</p>
<p>なんかしらのセットにできるものが複数出現する場合は、この、クラスからインスタンスを作っていくという形に落とし込むのが良いです。1個1個を個別に操作できるようになります。</p>
<p>でも、いちいちnewとかしてめんどくさくないですか？まんじゅう100個作れって言われたらかったるいし…。とおもったアナタ。メモリを食う食わないとかいう話よりも、もっと重要な話があります。それは…</p>

<ul class="NL">
<li>オブジェクト指向っぽい話が分かるかもしれないJavaScript講座　その1</li>
<li><a href="/clip/archives/2009/06/javascript-oop2/">オブジェクト指向っぽい話が分かるかもしれないJavaScript講座　その2</a></li>
<li><a href="/clip/archives/2009/07/javascript-oop3/">オブジェクト指向っぽい話が分かるかもしれないJavaScript講座　その3</a></li>
</ul>

<p>---</p>

<p>【参考】</p>
<ul class="NL">
<li><a href="http://blogs.msdn.com/kristoffer/archive/2007/02/13/javascript-prototype-versus-closure-execution-speed.aspx">Javascript prototype versus closure execution speed</a></li>

<li>オブジェクト指向でオススメなJavaScript本：<a href="http://www.amazon.co.jp/gp/product/159059908X?ie=UTF8&amp;tag=takazudo-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=159059908X">Amazon：Pro JavaScript Design Patterns (Recipes: a Problem-Solution Ap)</a></li>
<li>細かく知りたいならとりあえずコレ：<a href="http://www.amazon.co.jp/gp/product/4873113296?ie=UTF8&amp;tag=takazudo-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4873113296">Amazon：サイ本</a></li>
</ul>]]>
</content>
</entry>
<entry>
<title>SKETCHING! Vol.5 -SKETCHING! 1st Anniversary!!!</title>
<link rel="alternate" type="text/html" href="http://gyauza.egoism.jp/clip/archives/2009/04/sketching-vol5-sketching-1st-a/" />
<modified>2009-04-25T11:19:55Z</modified>
<issued>2009-04-25T11:16:01Z</issued>
<id>tag:gyauza.egoism.jp,2009:/clip//6.2250</id>
<created>2009-04-25T11:16:01Z</created>
<summary type="text/plain">来週Liveします。前、好評だったのでまた誘ってもらいました。ありがたし。...</summary>
<author>
<name>Takazudo</name>
<url>http://gyauza.egoism.jp/clip/</url>
<email>takazudo@gmail.com</email>
</author>
<dc:subject>雑多</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://gyauza.egoism.jp/clip/">
<![CDATA[<p>来週Liveします。前、好評だったのでまた誘ってもらいました。ありがたし。</p>]]>
<![CDATA[<p>
SKETCHING! Vol.5 -SKETCHING! 1st Anniversary!!!- <br />
<a href="http://sketching.blog46.fc2.com/">http://sketching.blog46.fc2.com/</a><br />
<br />
■DATE <br />
2009/05/03(sun.) 13:00-19:00 <br />
<br />
■PLACE <br />
中野 HeavySick ZERO <br />
<a href="http://www.heavysick.co.jp/zero/">http://www.heavysick.co.jp/zero/</a><br />
<br />
■DOOR <br />
¥2000 / 1drink <br />
<br />
-MAIN FLOOR- <br />
<br />
■GUEST DJ <br />
DJ CHAMP(HAPPY JACK) <br />
<br />
■DJs <br />
DJ 490(SKETCH UP! Rec.) <br />
DJ SOH(STEP.) <br />
DJ 名無し(U.T.Y) <br />
FAT-MAN vs RedOgre(STEP./D.I.E.) <br />
TAK666(Cradle to Grave) <br />
<br />
■LIVE PAs <br />
DJ Noriken(SKETCH UP! Rec.) <br />
LV.4(CODE-49) <br />
P*Light(pichnopop) <br />
<br />
■VJs <br />
GAS <br />
KITUNE(Cradle to Grave) <br />
<br />
<br />
-LOUNGE FLOOR- <br />
<br />
■DJs <br />
Anvil <br />
DJ AEMI(Galaxy Move/夢音) <br />
Edamame(Sensation DarkBeer) <br />
fang(Sound.AVE) <br />
nadeco(YTR RECORDS/La Fiesta!) <br />
<br />
■LIVE PAs <br />
miii(vfpq) <br />
Takazudo <br />
<br />
■Design/Illust <br />
桜都あるす(C.jam-packed) <br />
<br />
■SOUND <br />
HAPPY HARDCORE,UK HARDCORE,GABBER,NEWSTYLE,TRANCECORE,HARDTEK/TRIBE,FRENCECORE,BREAKCORE,SPEEDCORE...etc<br />
<br />
■mixi community <br />
<a href="http://mixi.jp/view_community.pl?id=3211295">http://mixi.jp/view_community.pl?id=3211295</a><br />
<br />
<br />
昨年5月に最初のページを開いてから、スケッチブックを1枚、また1枚と、様々なHARDCOREの色で彩り続けてきた「SKETCHING!」 <br />
Vol.5は、1周年を記念してキャンパスを中野HeavySick ZEROに移し、スペシャルゲストとして、『HAPPY DYNAMITE』や『HAPPY JACK』をはじめ、数多くのパーティでクラウドを笑顔にしてきたDJ CHAMPが参戦！ <br />
そしてラウンジフロアアクターも個性溢れる顔ぶれが集い、2フロアを豪快に描き倒す！ <br />
<br />
更にVol.4に引き続き、出演者による1周年記念コンピレーションアルバムをご来場者にプレゼント！ <br />
硬核の筆を手に取り、ゴールデンウィークに最もHARDな1ページを刻み込め！</p>

<ul class="NL"><li><a href="http://sketching.blog46.fc2.com/blog-entry-29.html">SKETCHING! Vol.5</a></li></ul>]]>
</content>
</entry>
<entry>
<title>アウトライン解析と秀丸</title>
<link rel="alternate" type="text/html" href="http://gyauza.egoism.jp/clip/archives/2009/04/post-7/" />
<modified>2009-04-20T14:42:12Z</modified>
<issued>2009-04-20T14:10:37Z</issued>
<id>tag:gyauza.egoism.jp,2009:/clip//6.2242</id>
<created>2009-04-20T14:10:37Z</created>
<summary type="text/plain">秀丸のアウトライン解析を使う</summary>
<author>
<name>Takazudo</name>
<url>http://gyauza.egoism.jp/clip/</url>
<email>takazudo@gmail.com</email>
</author>

<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://gyauza.egoism.jp/clip/">
<![CDATA[<p><a href="http://hide.maruo.co.jp/software/hidemaru.html">秀丸</a>にはアウトライン解析機能がありまして、これがとても便利です。<br />
アウトライン解析っていうのは、テキストファイルの中で、一定のパターンにマッチするテキストを見出しの様に扱って、そのファイルはどんな構造なんだってのを概観できる機能です。具体的にはこんな感じに使ってます。</p>]]>
<![CDATA[<h3>サイトマップを考えるときなどなど</h3>
<p>秀丸のメニューより、「その他」→「ファイルタイプ別の設定」→「アウトライン - 解析」にて、こんな感じで指定します。</p>
<p><img src="/clip/entryimg/090420-outline1.png" alt="図：アウトライン解析の設定" /></p>
<p>これは、Lv1が、行頭の文字「.」ということで、行頭に「.」がくる行がLv1。<br />Lv2は、「^\t\.」にマッチする行（行頭にタブが来て、その次に「.」がくる行）、Lv3はここにタブがもう一個入った行…という風に、見出しに当たる行のパターンを指定していきます。</p>
<p>こうすると、タブでぺこぺこテキストを打ちながら、ここを見出しにしたいという時に、頭に「.」をつけることで、テキストのツリーができちゃいます。</p>
<p><img src="/clip/entryimg/090420-outline2.png" alt="図：秀丸の画面" /></p>
<p>どんなコンテンツいれるかー、どんなclass構造にするかー、どんな関数用意するかーなど、考える時に色々便利です。</p>

<h3>CSSファイルを見やすく</h3>
<p>自分のCSSファイルのコメントの書き方は最近こんなんです。</p>
<pre class="ChiliCode"><code class="css">/**
 * module category
 */</code></pre>
<pre class="ChiliCode"><code class="css">    /*
     * module name
     */</code></pre>
<pre class="ChiliCode"><code class="css">        /* detail */</code></pre>
<p>ここで、以下のように設定すると…</p>
<p><img src="/clip/entryimg/090420-outline3.png" alt="図：アウトライン解析の設定" /></p>
<p>こんな感じにツリーを作ってくれる。</p>
<p><img src="/clip/entryimg/090420-outline4.png" alt="図：秀丸の画面" /></p>
<p>便利ですよアウトライン解析。<br />そのうちなんでもかんでもアウトライン意識して書くようになったりならなかったり。</p>
<ul class="NL">
	<li><a href="http://hide.maruo.co.jp/software/hidemaru.html">秀丸</a></li>
</ul>]]>
</content>
</entry>
<entry>
<title>xampp+ActivePerl+ImageMagickで不具合</title>
<link rel="alternate" type="text/html" href="http://gyauza.egoism.jp/clip/archives/2009/03/090316-imagemagick/" />
<modified>2009-03-16T03:29:34Z</modified>
<issued>2009-03-16T03:22:15Z</issued>
<id>tag:gyauza.egoism.jp,2009:/clip//6.2214</id>
<created>2009-03-16T03:22:15Z</created>
<summary type="text/plain">最近MovableTypeをいじっているのですが、ローカルで確認できるように、Vistaにxampp+ActivePerlをインストールしてやってました。画像の...</summary>
<author>
<name>Takazudo</name>
<url>http://gyauza.egoism.jp/clip/</url>
<email>takazudo@gmail.com</email>
</author>
<dc:subject>MovableType</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://gyauza.egoism.jp/clip/">
<![CDATA[<p>最近MovableTypeをいじっているのですが、ローカルで確認できるように、Vistaにxampp+ActivePerlをインストールしてやってました。画像の縮小に使うImageMagickもインストールして。ところが、エントリを書く画面にて画像のアップロードウィンドウを開くと、Perl Command Line Interpeterがフリーズしてしまいます。色々探し回ったのですが、はっきりしたことは分からず、結局、自分は古いバージョンのActive Perlをインストールことで解決しました。</p>]]>
<![CDATA[<p>よく見たら、ImageMagickのインストーラにて、「Install PerlMagick for ActiveState Perl v5.8.0 build 804」というチェックがついていたので、このバージョンのActivePerlを落としてきて入れたら、やっとこさうまくいきました。使ったインストーラはこれ。</p>

<ul>
<li>ActivePerl-5.8.0.804-MSWin32-x86.msi</li>
<li>ImageMagick-5.5.7-Q16-windows-dll.exe</li>
</ul>

<p>最新のActivePerl+古いバージョンのImageMagickという組み合わせも試したりしたのですが、どーにもフリーズしてしまくっていたので、困る人いるんでないかと思うので一応書いときます。</p>]]>
</content>
</entry>
<entry>
<title>Web Creators 2009年4月号にてインタビューされました</title>
<link rel="alternate" type="text/html" href="http://gyauza.egoism.jp/clip/archives/2009/03/web-creators-20094/" />
<modified>2009-03-06T02:39:50Z</modified>
<issued>2009-03-02T23:24:53Z</issued>
<id>tag:gyauza.egoism.jp,2009:/clip//6.2210</id>
<created>2009-03-02T23:24:53Z</created>
<summary type="text/plain">インタビューされた</summary>
<author>
<name>Takazudo</name>
<url>http://gyauza.egoism.jp/clip/</url>
<email>takazudo@gmail.com</email>
</author>
<dc:subject>雑多</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://gyauza.egoism.jp/clip/">
<![CDATA[<p>Web Creators 2009年4月号は、「WEBクリエイター独立開業ガイダンス」って特集なんですが、なんと、私、高津戸のインタビューが載っています。いやはや、これは・・・！ｗ店頭で見かけたら見てみてください是非是非。とりあえず、フリーになってよかったこと、失敗したこと、コーディングについてなど徒然と。</p>]]>
<![CDATA[<h3>よかったこと</h3>

<h4>原稿書くとか</h4>

<p>Web Creators 2009年3月号に、CSS Tipsみたいな記事を10本書かせていただいたんですが、こういったことができるってのは、とてもでかいと思ってます。10本ぐらい書くって言うのは、会社勤めだと、かなり厳しいと思いました。研究時間がそのまま仕事になって金額が発生するというのはラッキーですね。今回インタビューさせてもらっていいですか？っていう話が来たのも、たくさん書いたのがきっかけの一つだったりします。</p>

<h4>人と話すとか</h4>

<p>色々、人とつながりができました。会社にいた時よりはるかに。会社ん中だけで仕事してた時は、視界せまかったなーと実感してます。他の会社ではこんな感じの仕事をしてる、こういうこと考えて仕事している人がいる、こんな環境で働いている人がとか、色々知ることができ、それ自体楽しいし、そこでまた思うこともあります。会社勤めてた時から、もっといろんな人に会っておけばよかったなーと思いました。</p>
<p>今、会社にいる人でも、転職を考えてる人でも、普通に仕事してるだけの人でも、ほんとにいろんな人と会った方がいいと思いますよ。会社によって全然違いますし、それを知れるだけで自分が変わったりすることもありますし。ちなみにWeb Creatorsの執筆者が足りないのでどう？って言ってくれたのは<a href="http://archiva.jp/">Sig.さん</a>だったりします。</p>
<p>いろんな会社に面談に行ったりするのですが（フリーランスとして）、それ自体楽しいです。基本、作業者的な立場だった会社にいた時の自分では考えられなかったことですが。この会社はこういうこと考えてやってるんだって聞いて、自分はこーいうのしたいって話すだけでも価値あります。</p>

<h4>感謝</h4>

<p>別に、会社にいた時は感謝の気持ちなんて何もなかったというわけではないのですが、フリーになってから、仕事を依頼してくれることに対する感謝がずっと強くなりました。それが向上心ややる気につながりますし。どんな激安でやる場合であっても、感謝せざるを得ないです、とても。</p>

<h3>すでに失敗したと思ってること</h3>

<h4>お金</h4>

<p>会社辞めて1,2カ月は趣味的にJavaScriptなどをシコシコ書いているだけだったのですが、このときからもっと積極的に仕事を受けていないといけない状況だったと、あとで気づいたというのが一番失敗したと思ってます。まず、住民税・国民保険・年金というのが、強烈に高いというのに面くらいました。これはほんとにびっくりします。そして、仕事をしても、一般的に、月末締め翌々月10日払というのがスタンダードなので、かなりジリ貧になってます。</p>
<p>フリーランスのパートナー募集してます！という会社に売り込みに行ったとしても、では明日から頼みますとか言われるわけではないので、こういった売り込み活動的なことは、もっと早くからしておかなければならなかったと痛感してます。</p>

<h4>失業保険</h4>

<p>失業保険は、転職支援のための補助金のようなものですが、個人事業主になる！っていう申告書を提出してしまうと、これが受けられなくなってしまいます。そもそもお前がもらうもんじゃないじゃんかよ！っていうのはまったくもってその通りですが、申告書を出さずに、「転職先探してるんですが、色々頼まれることが多くなり、フリーランスになることにしました」っていう風に装っておけばよかったかなぁと思っています。（あんまりおっきな声で言っちゃダメなこととは思いますが）</p>
<p>（ハローワークにて、失業保険もらえないんですかねー？とおばちゃんに聞いたところ、「ごめんなさい個人事業主になっちゃうとあげられないんです～」と申し訳なさそうに言っていて、本来、「いやーそりゃあげらんないよ、ハイハイさよなら」でいいのに、なんだかんだでみんなもらってるのかなぁと言うのを思いました）</p>

<h3>コーディング専業者の価値</h3>

<p>な、なんてえらそうな見出しなんだ・・・</p>
<p>フリーになってから、「大きなECサイトのコーディングヘルプのため出向」、「数ページの小さい規模の案件のコーディング（若干デザインも含む）」、「中の小ぐらいのECサイトパッケージに組み込むHTMLテンプレのコーディング」っていう仕事をしました。</p>
<p>会社にいた時は、中～な規模のコーディングが中心だったんですが、こうやって色々やってみて、「小～中規模のサイトなら、デザイナと兼任している方が効率的。でかい規模になればなるほど、コーディング専任ですって言えるぐらいの人が必要になることが多い」ってのを思いました。</p>
<p>まず、小～中の場合だと、予算的にもいちいち全部デザインファイルおこしてらんないことが多いですし、下の階層とかは、デザインの要求も高く無いことが多いと思いますので、ちゃっちゃとできる兼業パターンの方が断然効率いいような気がしました。自分でやってても。そもそも、コーダー募集っていう募集の仕方も少ないですし。</p>
<p>でも、中～だと、いろいろと細かい仕様だのがでてきます。具体的には、このJS入れてだとか、こういうJS書いてとか、formがやたらめったら細かいとか、ページ数が多いので、モジュールの使いまわしをどうするか、増えるCSSファイルをどうするかという管理する力が必要だったりとか、そういったことって、具体的に要求として出せることではなかったりするので、そういった空気読んでうまくやってくれる人っていうのが求められている感じがしました。混沌を整形しながら組み立てくれる人っていうかなんというか。</p>
<p>数ページならtableでもなんでも、崩れてなけりゃいいでしょうけど、システム導入とかのときにぐちゃぐちゃのコード渡されたらかなり厳しくなるんじゃないでしょうかね。でもスケジュール的に間に合わないからやるしかないみたいになったら悲劇ですよ・・・</p>
<p>なので、そういったことを求められる大きな規模の案件であれば、それなりのフィーを要求する必要、価値があるし、逆に、それなりの規模が無いものであれば、いくらコーディングのスキルが高かろうとも、コーディングだけでそんなお金を頂くとはできないというのを思います。まぁ、当たり前といえば当たり前なんですが。</p>

<p>--</p>

<p>ということで、店頭で見かけたらぜひ！</p>

<ul class="NL">
<li><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B001T2D67C/takazudo-22/ref=nosim/">amazon: Web creators (ウェブクリエイターズ) 2009年 04月号</a></li>
</ul>

<p>2009/3/6追記---</p>
<p><a href="http://q.hatena.ne.jp/1156472089">ぷーたろうのフリして失業保険をもらうのはダメっぽいです</a></p>]]>
</content>
</entry>
<entry>
<title>DJします2/28</title>
<link rel="alternate" type="text/html" href="http://gyauza.egoism.jp/clip/archives/2009/02/20090204-dj/" />
<modified>2009-02-23T20:52:21Z</modified>
<issued>2009-02-23T20:40:15Z</issued>
<id>tag:gyauza.egoism.jp,2009:/clip//6.2206</id>
<created>2009-02-23T20:40:15Z</created>
<summary type="text/plain">DJします</summary>
<author>
<name>Takazudo</name>
<url>http://gyauza.egoism.jp/clip/</url>
<email>takazudo@gmail.com</email>
</author>
<dc:subject>雑多</dc:subject>
<content type="text/html" mode="escaped" xml:lang="ja" xml:base="http://gyauza.egoism.jp/clip/">
<![CDATA[<p>2/28にDJします。<br />
DJしますっていうか、自分の曲をCDJでつないで流すっていうライブです。<br />
ジャンルはハードコアテクノとかいうもので、速くて激しいテクノみたいなやつです。<br />
そんでトランスっぽいみたいなもの。<br />
曲作りは高校のときからやってて、大学の時はノートPCでライブとか何回かやったんですが、４年以上ぶりです。</p>
<p>たまにみんなで曲集めてCD売るっていう感じで、コミケなどでTakazudoの曲が入った入ったCDが売ってたりします。Guhroovyというお店でもちょっと買えるかも知れないです。</p>
<ul class="NL"><li><a href="http://www.google.co.jp/search?hl=ja&safe=off&client=firefox-a&rls=org.mozilla%3Aja%3Aofficial&hs=Evh&q=Takazudo+site%3Awww.guhroovy.com%2F&btnG=%E6%A4%9C%E7%B4%A2&lr=lang_ja">guhroovy</a></li><li><a href="http://www.discogs.com/artist/Takazudo">discogs - Takazudo</a></li></ul>
<p>んで、そのCDを聞いてくれたオーガナイザーのひゅーじさんがライブやらんかいーと誘ってくれた次第。</p>]]>
<![CDATA[<p>----</p>
<p>[[Run to the Future 2]]<br />
<br />
ハウス・トランス・ハッピーハードコアを中心としたメロディアス・サウンド主体のクラブイベント！二回目は前回より更に幅広いメンバーを向かえ、多彩なサウンドを展開し加速する！<br />
留まるところを知らない勢いで全力疾走！<br />
<br />
Date : 2009/02/28(Sat) 13:00-20:00<br />
Place : 川崎 月あかり夢てらす(<a href="http://tsukiyume.com/">http://tsukiyume.com/</a>)<br />
Price : 1000Yen<br />
Run to the Future Homepage : <a href="http://eternalbreeze.net/~rttf/">http://eternalbreeze.net/~rttf/</a><br />
Event Community : <a href="http://mixi.jp/view_community.pl?id=3764610">http://mixi.jp/view_community.pl?id=3764610</a><br />
<br />
[Live PA's]<br />
Takazudo (zudolab)<br />
P*Light (pichnopop)<br />
LV.4 (CODE-49)<br />
<br />
[DJ's]<br />
Hyuji (RTTF Records)<br />
DJ SOH (STEP.)<br />
RedOgre<br />
DJ MONKEY (月夢・TRICK)<br />
Keiichi Saiki (NBA [Never Be Alone])<br />
JiNG*da*LaW (Iemitsu.)<br />
<br />
[VJ]<br />
SO (ActiveWorks)<br />
<br />
[Genre]<br />
Upper House<br />
Electro House<br />
Techno<br />
Euro Trance<br />
Epic Trance<br />
Psychedelic Trance<br />
Happy Hardcore<br />
UK Hardcore<br />
Trancecore<br />
<br />
[Flyer Photo & Design]<br />
Hyuji </p>
<p>----</p>
<p>３年ぐらい前にMixした自分曲オンリーのmixがここに！ <a href="http://takazudo.net/mp3/takazudoSelf.mp3 ">Takazudo self mix</a></p>]]>
</content>
</entry>

</feed>