<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>ZIYOTOY.NET【じよとい】</title>
    <link rel="alternate" type="text/html" href="http://www.ziyotoy.net/" />
    <link rel="self" type="application/atom+xml" href="http://www.ziyotoy.net/atom.xml" />
    <id>tag:www.ziyotoy.net,2008-04-30://2</id>
    <updated>2010-03-09T15:08:58Z</updated>
    <subtitle>HTML、CSS、Javascript、FLASH、Actionscriptやmacのこと、日々のこと</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 4.22-ja</generator>

<entry>
    <title>Javascriptでスクロールバーをつくる</title>
    <link rel="alternate" type="text/html" href="http://www.ziyotoy.net/2010/03/javascript-3.html" />
    <id>tag:www.ziyotoy.net,2010://2.78</id>

    <published>2010-03-09T14:24:40Z</published>
    <updated>2010-03-09T15:08:58Z</updated>

    <summary>Javascriptでスクロールバーを作ってみた。 ...</summary>
    <author>
        <name>ziyotoy</name>
        
    </author>
    
        <category term="知識" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="css" label="CSS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="html" label="HTML" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="Javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="flickr" label="flickr" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ziyotoy.net/">
        <![CDATA[<p>Javascriptでスクロールバーを作ってみた。</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="jsscroll.png" src="http://www.ziyotoy.net/assets/jsscroll.png" width="500" height="500" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span></p>
]]>
        <![CDATA[<p>Flickrから読み込んで表示するようにしたらめちゃくちゃコード量増えてしまった。このぐらいになってくるとprototypeとかjQueryとかライブラリを使う事も考えてみようかな。</p>

<p>ハンドルをつかんでスクロール、ボタンでのスクロールアップ／ダウン、ハンドル以外の場所をクリックで適当な位置にジャンプ、ができます。</p>

<pre name="code" class="js">
var assets = new ReplaceScroll.Assets();
var replaceScroll = new ReplaceScroll(&quot;外枠の要素&quot;, &quot;スクロール対象要素&quot;);
replaceScroll.initialize(assets.get());
</pre>

<p>というのが基本</p>

<p><a href="http://www.ziyotoy.net/lab/scroll_test/">初期状態のサンプル</a></p>

<p>カスタマイズもできるようにした</p>

<pre name="code" class="js">
var assets = new ReplaceScroll.Assets();
assets.register({
    upArrowAsset  : "...", //REQUIRE
    baseBodyAsset : "...",
    baseBodyColor : "#...", //REQUIRE
    barTopAsset   : "...", //REQUIRE
    barBodyAsset  : "...",
    barBodyColor  : "#...", //REQUIRE
    barBottomAsset: "...",　//REQUIRE
    downArrowAsset: "..."　//REQUIRE
});
var replaceScroll = new ReplaceScroll(&quot;外枠の要素&quot;, &quot;スクロール対象要素&quot;);
replaceScroll.initialize(assets.get());
</pre>

<p>対応関係は下の図のような感じ</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://www.ziyotoy.net/assets/ReplaceScrollBar.jpg"><img alt="ReplaceScrollBar.jpg" src="http://www.ziyotoy.net/assets_c/2010/03/ReplaceScrollBar-thumb-500x387-66.jpg" width="500" height="387" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></span></p>

<p><a href="http://www.ziyotoy.net/lab/scroll_test/sample1.html">サンプル１</a></p>

<p><a href="http://www.ziyotoy.net/lab/scroll_test/sample2.html">サンプル２</a></p>

<p>スクロールが極端に長くなったときのハンドル部分の対応とか、よく考えたら水平スクロールバーもあるし、まだまだ足りないなあ。</p>

<h3>Javascriptでのクラスっぽいものの書き方</h3>

<p>これまでは</p>

<pre name="code" class="js">
Class = function()
{
    //...
}
Class.prototype.publicFunction = function()
{
    //...
}
</pre>

<p>という書き方で頑張っていたんですが、prototypeプロパティを使った書き方だと内部変数が関数ごとに分断されてしまうので、いちいちthisキーワードをつかないといけなかったり、コードが煩雑になりがちです。</p>

<p>AS3を同時に勉強していたので同じような書き方がしたかったのですが、JavascriptにはJavascriptの特長があって、それを活かす書き方のほうがいいのかな、と最近は思っています。</p>

<pre name="code" class="js">
Class = function()
{
    var privateVar = hogehoge;
    var privateFunction = function()
    {
        //...
    }
    this.publicVar = fugafuga
    this.publicFunction = function()
    {
        //...
    }
}
</pre>

<p>こっちの方が便利だよなー</p>
]]>
    </content>
</entry>

<entry>
    <title>aikoのYouTube最新動画【aikotube】β版を作った</title>
    <link rel="alternate" type="text/html" href="http://www.ziyotoy.net/2010/02/aikoyoutubeaikotube.html" />
    <id>tag:www.ziyotoy.net,2010://2.74</id>

    <published>2010-02-28T12:35:50Z</published>
    <updated>2010-03-09T15:09:33Z</updated>

    <summary>いきおいで作ってしまった。 突貫なのでソースとかひどいもんだけど。 http:/...</summary>
    <author>
        <name>ziyotoy</name>
        
    </author>
    
        <category term="知識" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="javascript" label="Javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="youtube" label="YouTube" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="aiko" label="aiko" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="css" label="css" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ziyotoy.net/">
        <![CDATA[<p>いきおいで作ってしまった。
突貫なのでソースとかひどいもんだけど。</p>

<p><a href="http://aikotube.com/">http://aikotube.com/</a></p>

<p>これも昔FLASHで作ろうとして、クロスドメインの壁に阻まれ挫折した自分プロジェクトです。プロジェクトとか大げさだけど。</p>

<p><a href="http://www.flickr.com/photos/20720251@N04/4395319172/" title="aikotube by itoyohja, on Flickr"><img src="http://farm3.static.flickr.com/2791/4395319172_29f047b310_o.png" width="500" height="313" alt="aikotube" /></a></p>
]]>
        <![CDATA[<p>投稿の新しい順で、日本語で投稿されたものからフィルターをかけて（カイトウさんとかウエムラさんもひっかかってくるので）検索しています。なので、aikoが出演するのに見逃したテレビ番組とかをチェックできるのではないかと。</p>

<p>本人じゃないやつはどうしようかなあと思ったんだけど、もしかしたら面白いのがアップされるかもしれないので、バンドとか弾き語りはフィルターしてません。カラオケはちょっとクオリティ低いのが多いのでフィルターしています。</p>

<p>IEなんか無視してCSS3プロパティもがんがん使ってやったし！</p>

<h3>YouTube API</h3>

<p><a href="http://code.google.com/intl/ja/apis/youtube/reference.html">YouTube の API とツール</a></p>

<ul>
<li>Data APIでそのリクエストの検索結果の総数とかとれると楽なんだけど。次のページ分のフィードをリクエストして、返ってきたらまた次のページをリクエストして、・・・とフィードがなくなるまで繰り返すという、原始的な方法で。</li>
<li>Data APIでフィードは取得できるのに中身がないことがある。削除された動画の名残かな？</li>
<li>Player APIはプレーヤー（FLASH）のembedされたブロック要素をremoveChildしたり非表示にすると動かなくなるのでハマった。とりあえず、プレーヤー数は固定で中身だけを再読み込み（stopVideo→clearVideo→loadVideo）することで上手く行った。</li>
<li>一時停止中（ステータス2）にクリックしたのにまたステータス２が返ってきたりする。どーなってんの？</li>
</ul>

<p>IEは全然期待通りの動きをしてくれませんw</p>

<p>macのchromeもダメだな（こっちはCSS的な何か）FireFoxを強く推奨。</p>

<p>そもそもプレーヤーを複数並べるって使い方を想定してないのかもしれないけど。</p>

<p>ソースをきれいにしながらまた機能追加して行こうと思います。</p>
]]>
    </content>
</entry>

<entry>
    <title>LLP12最終日行ってきた</title>
    <link rel="alternate" type="text/html" href="http://www.ziyotoy.net/2010/02/llp12.html" />
    <id>tag:www.ziyotoy.net,2010://2.73</id>

    <published>2010-02-05T16:00:14Z</published>
    <updated>2010-02-05T16:52:55Z</updated>

    <summary>今回は前から３列目というプラチナチケットでした！とにかく近い近い、aikoが目の...</summary>
    <author>
        <name>ziyotoy</name>
        
    </author>
    
        <category term="つれづれ" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="aiko" label="aiko" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ziyotoy.net/">
        <![CDATA[<p>今回は前から３列目というプラチナチケットでした！とにかく近い近い、aikoが目の前（そしてかわええ）！！！</p>
]]>
        <![CDATA[<p>NHKホールは花道ができないので必然的に立ち位置がセンターと左右しかないというのもあって接近率高し。２回ぐらい目が合ったような気がする（確証はない・・）こんな幸運はもう来ない、、かなあ？</p>

<h3>泣きそうになる</h3>

<p>「ふれていたい」という曲がありまして、アルバムにしか入っていない曲なんですが、これを聞いてaikoを好きになったと言ってもいい曲。弾き語りで歌ってくれて、久しぶりに聞いてかなり極まった状態になりましたが我慢しました。ここで泣いておけば、MCの時にいじってくれたかも！？</p>

<h3>即興</h3>

<p>客席からキーワードを拾って、そのキーワードで即興。
「朝青龍」「豆腐」「就職」「電子レンジ」などというわけのわからないキーワードにさすがのaikoも消化不良気味で、科白っぽいのを入れてごまかしてたw、本当はもっと、ほろっとくる曲にするつもりだったらしいけど「朝青龍」じゃーねーえw</p>

<h3>アンコールのアンコール</h3>

<p>アンコールの前に「２、３分したらまた出てくるから」「いつものやつは忘れないで」とぶっちゃけていたaikoですが、それはアンコールのアンコールがあることの伏線だったのか。アンコール２曲、挨拶してハケたあと、サプライズの１曲。そして４月からのLLP13の告知。早えええよ、CD出せよ！３月とかにアルバム出るのか・・？</p>

<h3>おまけに</h3>

<p>帰って来てから、最近いち押しの吉岡聖恵（いきものがかり）のオールナイトニッポンを聞いていたら、今日のライブに来てたらしい。２階の最前列にいたらしい。気付かなかったわー２階席の客の顔まで見えないわー。</p>
]]>
    </content>
</entry>

<entry>
    <title>Javascriptでスコープを維持しつつイベントハンドリングできるしくみ(2)</title>
    <link rel="alternate" type="text/html" href="http://www.ziyotoy.net/2010/01/javascript2.html" />
    <id>tag:www.ziyotoy.net,2010://2.72</id>

    <published>2010-01-25T13:17:33Z</published>
    <updated>2010-01-25T13:24:43Z</updated>

    <summary>前作った仕組みだと無名関数の特定ができていないので修正しました。 ...</summary>
    <author>
        <name>ziyotoy</name>
        
    </author>
    
        <category term="知識" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="javascript" label="Javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ziyotoy.net/">
        <![CDATA[<p>前作った仕組みだと無名関数の特定ができていないので修正しました。</p>
]]>
        <![CDATA[<p>よく見れば、前回作ったときの</p>

<pre name="code" class="js">
var id = &quot;f_&quot;+type+&quot;_&quot;+callback;
</pre>

<p>これでは異なる要素の同じイベントハンドラを区別できないです。</p>

<p>というわけで、addListenerの時に要素・イベントタイプ・コールバック・コールバック呼出元と、これらから作成した無名関数もまとめてスタックしておき、removeListenerの時に要素・イベントタイプ・コールバック・コールバック呼出元が全て一致したとき、スタックから取り出した無名関数を返すことにした。</p>

<p>removeListenerの時に同じ素材で新たに無名関数を作っても、比較したときに異なるオブジェクトとみなされてしまうので、最初に作成した変数を参照で（JavascriptのFunctionは参照渡しらしい）呼び出す。この辺、前回時は理解できてなかった。</p>

<p>コールバックに無名関数を使いたい時もあるので、callbackが関数型の場合はスタックに積まずにリスナー登録のみ。これをremoveするには無名関数内でarguements.callee。</p>

<pre name="code" class="js">
EventHandler = {
    addListener: function(element, type, callback, context)
    {
        var func;
        if(typeof(callback)==&quot;function&quot;)
        {
            func = callback;
            //
        } else if(typeof(callback)==&quot;string&quot;) {
            //
            func = function(e){ context[callback](e); };
            EventHandler.Stack.addStack(element, type, callback, context, func);
            //
        } else {
            return;
        }
        if(element.addEventListener) element.addEventListener(type, func, false);
        else if(element.attachEvent) element.attachEvent(&quot;on&quot;+type, func);
    },
    removeListener: function(element, type, callback, context)
    {
        if(!typeof(callback)==&quot;string&quot;) return;
        var num = EventHandler.Stack.findStack(element, type, callback, context);
        var func = EventHandler.Stack.getStack(num).func;
        EventHandler.Stack.removeStack(num);

        if(func==null) return;
        if(element.removeEventListener) element.removeEventListener(type, func, false);
        else if(element.detachEvent) element.detachEvent(&quot;on&quot;+type, func);
    }
}
</pre>

<p>こちらはスタックを保持するためのオブジェクト</p>

<pre name="code" class="js">
EventHandler.Stack = {
    _count: 0,
    _list: [],
    addStack: function(element, type, callback, context, func)
    {
        var obj = {
            id: EventHandler.Stack.getUID(),
            element: element,
            type: type,
            callback: callback,
            context: context,
            func: func
        };
        EventHandler.Stack._list.push(obj);
    },
    removeStack: function(num)
    {
        EventHandler.Stack._list.splice(num, 1);
    },
    getStack: function(num)
    {
        return EventHandler.Stack._list[num];
    },
    findStack: function(e, t, cb, ct)
    {
        for(var i=0; i&lt;EventHandler.Stack._list.length; i++)
        {
            var s = EventHandler.Stack._list[i];
            if(s.element==e&amp;&amp;s.type==t&amp;&amp;s.callback==cb&amp;&amp;s.context==ct)
            {
                return i;
            }
        }
        return null;
    },
    getUID: function()
    {
        return EventHandler.Stack._count++;
    }
}
</pre>

<p>いちお、これでFF、Safari、IEで動いているけど、どうなんでしょう。僕的にはとても便利です。</p>
]]>
    </content>
</entry>

<entry>
    <title>久しぶりにJavascriptでいろいろやってみた</title>
    <link rel="alternate" type="text/html" href="http://www.ziyotoy.net/2010/01/post-26.html" />
    <id>tag:www.ziyotoy.net,2010://2.71</id>

    <published>2010-01-22T12:51:47Z</published>
    <updated>2010-01-25T13:20:34Z</updated>

    <summary>いつのまにか半年も経っていた・・・ ちょっと実験サイトを作りました。 http:...</summary>
    <author>
        <name>ziyotoy</name>
        
    </author>
    
        <category term="知識" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="css" label="CSS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="Javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="flickr" label="flickr" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="twitter" label="twitter" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ziyotoy.net/">
        <![CDATA[<p>いつのまにか半年も経っていた・・・
ちょっと実験サイトを作りました。</p>

<p><a href="http://www.curoko.net/">http://www.curoko.net/</a></p>
]]>
        <![CDATA[<p>ついったーAPI、flickr API、lastfmのフィードを使ってインスタントに更新できるサイト。これだけじゃなんとなく寂しい気もするけど。</p>

<p>ついったAPIはクエリを投げるscriptタグをappendするとJSON形式のデータが返ってくるのでそれを受け取るコールバックを書けば終わり。</p>

<p>lastfmはRSSをgoogle feed API経由で取得するんですが、なぜか10件中4件しか拾えない。なんだろう。</p>

<p>flickr APIは読込み完了までローディングをつけるのと、ソート順の変更機能を付けてみた。view数でのソートがしたいけど、もともとの機能にはないらしい。</p>

<p>あと、select要素の置換え。option要素を走査して、代理のulリストを作成して同様の機能を持たせ、結果をselectにフィードバックする、ということをしています。結構、ゴリ押しです・・
CSS3のプロパティを使うと角丸＋ドロップシャドウで簡単にmacっぽいインターフェースにできる。IEさえなければ相当作業量減らせるのに。</p>

<p>細かい所でいろんな発見があったので、追々記事にしたいと思います。</p>
]]>
    </content>
</entry>

<entry>
    <title>Javascriptでスコープを維持しつつイベントハンドリングできるしくみ</title>
    <link rel="alternate" type="text/html" href="http://www.ziyotoy.net/2009/07/javascript-2.html" />
    <id>tag:www.ziyotoy.net,2009://2.70</id>

    <published>2009-07-17T15:28:29Z</published>
    <updated>2009-07-17T16:51:41Z</updated>

    <summary>久しぶりに記事を書きます。カンボジア記も絶賛放置中です・・ 人生、何かあったわけ...</summary>
    <author>
        <name>ziyotoy</name>
        
    </author>
    
        <category term="知識" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="javascript" label="Javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ziyotoy.net/">
        <![CDATA[<p>久しぶりに記事を書きます。カンボジア記も絶賛放置中です・・</p>

<p>人生、何かあったわけではなく、最近、ブログを書くのが面倒くさいなーと思うようになっただけです。</p>

<p>あと、前のブログと今のブログを統一してやろうとか画策しているのであまり今のブログの記事を増やしたくない、というのもあります。画策しているだけで何も進んでいませんが。</p>
]]>
        <![CDATA[<h3>本題</h3>

<p>以前、<a href="http://www.ziyotoy.net/2009/02/post-19.html">ドラッグ＆ドロップの仕組み</a>を作ったときにremoveEventListenerができなくて、これじゃダメじゃん的な感じだったわけですが、それを解決する仕組みを考えました。</p>

<h3>スコープの維持</h3>

<p>イベントハンドラのコールバック関数のスコープはwindowオブジェクトになってしまうので、それを回避するために</p>

<pre name="code" class="js">
var scope = this;
var callback = ・・・
window.addEventLisetner("load", function(event)
{
    callback.call(scope, event);
}, false);
</pre>

<p>などとしてスコープを維持するのですが、この場合、コールバック関数は無名関数なので、この無名関数の外からはremoveEventListenerすることができません。なんかくやしい。</p>

<h3>無名関数を特定する</h3>

<p>そこで、このコールバック関数を一意の識別子と一緒にどこかに保管することを考えます。
一意の識別子はイベントタイプとコールバック関数名の組み合わせにします。例えば、１つの要素のクリックに対して同じコールバックを複数登録はしないはずなので。あと、コールバック関数名が必要なので、関数ではなく文字列として引数に渡すようにします。</p>

<pre name="code" class="js">
var scope = this;
var callback = "・・・"
window.addEventLisetner("load", function(event)
{
    scope[callback](event);
}, false);
</pre>

<p>この識別子とコールバック関数の組み合わせをオブジェクトにして配列にぶち込んでおき、あとで識別子をキーにして取り出せるようにします。識別子はイベントタイプとコールバック関数名でできているので引数として渡せば取り出せます。</p>

<pre name="code" class="js">
EventHandler = {
    stack: [],
    addListener: function(element, type, callback, context)
    {
        var id = &quot;f_&quot;+type+&quot;_&quot;+callback;
        var stack = this.stack;
        var func = function(e){ context[callback](e); };
        var handler = { id  : id   ,
                        func: func };

        for(var i=0; i&lt;stack.length; i++)
        {
            if(id==stack[i].id) return;
        }
        if(element.addEventListener) element.addEventListener(type, func, false);
        else if(element.attachEvent) element.attachEvent(&quot;on&quot;+type, func);
        stack.push(handler);
    },
    removeListener: function(element, type, callback, context)
    {
        var id = &quot;f_&quot;+type+&quot;_&quot;+callback;
        var stack = this.stack;
        for(var i=0; i&lt;stack.length; i++)
        {
            if(id==stack[i].id)
            {
                if(element.removeEventListener) element.removeEventListener(type, stack[i].func, false);
                else if(element.detachEvent) element.detachEvent(&quot;on&quot;+type, stack[i].func);
                stack.splice(i, 1);
            }
        }
    }
};
</pre>

<p>EventHandler.stack：識別子と関数名のオブジェクトを積んでおく配列です。</p>

<p>EventHandler.addListener：識別子の生成、コールバック関数の生成、スタックへ積み上げ。ついでにDOM LEVEL2のaddEventListenerとIEイベントのattachEventをラップします。同タイプ、同コールバックのリスナーは登録できないようにしています。</p>

<p>EventHandler.removeListener：スタックから識別子の一致するコールバックを取り出し、removeEventListenerします。ついでにDOM LEVEL2のremoveEventListenerとIEイベントのdetachEventをラップします。</p>

<p>（IE8になってもDOM LEVEL2 EVENTを実装してないってひどすぐる）</p>

<p>作ってみると、なんてことはない単なるオブジェクトなんですけどね・・イベントドリブンの奥は深いですね。</p>
]]>
    </content>
</entry>

<entry>
    <title>ベトナム＆カンボジア１日目・２日目</title>
    <link rel="alternate" type="text/html" href="http://www.ziyotoy.net/2009/05/post-24.html" />
    <id>tag:www.ziyotoy.net,2009://2.68</id>

    <published>2009-05-14T14:37:53Z</published>
    <updated>2009-05-14T14:44:15Z</updated>

    <summary> ...</summary>
    <author>
        <name>ziyotoy</name>
        
    </author>
    
        <category term="つれづれ" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.ziyotoy.net/">
        <![CDATA[<p><a href="http://www.flickr.com/photos/20720251@N04/3503310637/" title="IMG_3594.JPG by itoyohja, on Flickr"><img src="http://farm4.static.flickr.com/3664/3503310637_226e2e883d.jpg" width="500" height="375" alt="IMG_3594.JPG" /></a></p>
]]>
        <![CDATA[<h3>１日目</h3>

<p>１日目は成田18:00発でベトナムへの移動のみ。</p>

<p>機内で隣が女の子だったんですが、CAと日本語で普通にやりとりしていたので日本人だと思っていたんです（今回は行きも帰りもJAL）。途中で窓の外を見ろといわんばかりのジェスチャーをするので、どうしたのかと思ったら、星がきれいに見えるので感動したらしい。話をしてみるとベトナムの女の子でした。どう聞いても普通の日本語なんですけど・・</p>

<p>ベトナムの兄の住居で１泊。</p>

<h3>２日目</h3>

<p>カンボジア行きの飛行機まで時間があるので近所を散歩。最初の写真はそのときのもの。バイクが故障したんでしょうか。リヤカーの彼はどこから来たんでしょうか・・？</p>

<p>カンボジアへは日本からの直行便はなく、隣国のタイやベトナムから飛行機で入国するか、陸路で国境をこえなければなりません。ちょうど新型インフルエンザが世界的に流行し始めた時期だったのですが、カンボジアはノーチェックでした（タイで感染者が確認された今の状況はわかりません）。</p>

<p><a href="http://www.flickr.com/photos/20720251@N04/3504123544/" title="IMG_3600.JPG by itoyohja, on Flickr"><img src="http://farm4.static.flickr.com/3347/3504123544_8b98e0daf5.jpg" width="500" height="375" alt="IMG_3600.JPG" /></a></p>

<p>シェムリアップ国際空港かっこいい！</p>

<p>日本語のできるガイドとドライバーつきの個人ツアーです。兄がすべて手配してくれました。僕は何もしてません。ごめんなさいごめんなさいごめんなさい</p>

<p><a href="http://www.happysmiletour.com/index.html">Happy Smile Tour</a></p>

<p><a href="http://www.flickr.com/photos/20720251@N04/3504124082/" title="IMG_3612.JPG by itoyohja, on Flickr"><img src="http://farm4.static.flickr.com/3650/3504124082_7e59c31b99.jpg" width="500" height="375" alt="IMG_3612.JPG" /></a></p>

<p>チェックイン後、バー・ストリートで夕食。この辺は観光で来やすそうです。観光地化の激しいシェムリアップですが、１歩脇道に入ると真っ暗です。</p>

<p><a href="http://www.flickr.com/photos/20720251@N04/3503312217/" title="IMG_3615.JPG by itoyohja, on Flickr"><img src="http://farm4.static.flickr.com/3655/3503312217_f34552d899.jpg" width="500" height="375" alt="IMG_3615.JPG" /></a></p>

<p>ナイトマーケット。割と最近できたようなのできれいです。たいていのものは数ドルなので、ガンガン買い物できますが、彼らにとって１ドルは何円ぐらいの感覚なんでしょう。</p>

<p>そんなことで、翌日から遺跡を見て行きます。</p>
]]>
    </content>
</entry>

<entry>
    <title>ベトナム＆カンボジア（ダイジェスト）</title>
    <link rel="alternate" type="text/html" href="http://www.ziyotoy.net/2009/05/post-23.html" />
    <id>tag:www.ziyotoy.net,2009://2.67</id>

    <published>2009-05-05T07:51:38Z</published>
    <updated>2009-05-05T13:12:19Z</updated>

    <summary>アンコールワットを見てきました。 とりあえず、ダイジェスト。 ...</summary>
    <author>
        <name>ziyotoy</name>
        
    </author>
    
        <category term="つれづれ" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.ziyotoy.net/">
        <![CDATA[<p>アンコールワットを見てきました。
とりあえず、ダイジェスト。</p>

<p><img src="http://farm4.static.flickr.com/3360/3503314883_5b5f50c4fb.jpg" width="500" height="375" alt="IMG_3653.JPG" /></p>
]]>
        <![CDATA[<h3>１日目</h3>

<p>成田からハノイへ。移動のみ</p>

<h3>２日目</h3>

<p>カンボジア入国、アンコールワットに近いシェムリアップへ。</p>

<p><img src="http://farm4.static.flickr.com/3347/3504123544_8b98e0daf5_m.jpg" width="240" height="180" alt="IMG_3600.JPG" /></p>

<ul>
<li>バー・ストリートで夕食</li>
<li>ナイトマーケット</li>
</ul>

<h3>３日目</h3>

<p>遺跡巡り</p>

<p><img src="http://farm4.static.flickr.com/3537/3503323865_5db39e4d57_m.jpg" width="240" height="180" alt="IMG_3698.JPG" /></p>

<ul>
<li>アンコール・トム</li>
<li>タ・プローム</li>
<li>バンテアイ・スレイ</li>
<li>アンコール・ワット</li>
<li>プノン・パケン</li>
</ul>

<h3>４日目</h3>

<p>朝5:00起きでアンコール・ワットのサンライズ見学</p>

<p><img src="http://farm4.static.flickr.com/3412/3504161660_e53fa4e020_m.jpg" width="240" height="180" alt="IMG_3976.JPG" /></p>

<p>午前中はシェムリアップ市内観光</p>

<ul>
<li>戦争博物館</li>
<li>キリング・フィールド</li>
<li>オールド・マーケット</li>
</ul>

<p>午後は遺跡巡り。夜カンボジア出国</p>

<ul>
<li>プリア・カン</li>
<li>ニャック・ポアン</li>
<li>東メボン</li>
<li>プレ・ループ</li>
</ul>

<h3>５日目</h3>

<p>ハノイ市内観光、帰国</p>

<p><img src="http://farm4.static.flickr.com/3388/3503371963_e004586ed5_m.jpg" width="180" height="240" alt="IMG_4280.JPG" /></p>
]]>
    </content>
</entry>

<entry>
    <title>mini9とGeodoプラグインでGPSっぽいこと</title>
    <link rel="alternate" type="text/html" href="http://www.ziyotoy.net/2009/04/gps.html" />
    <id>tag:www.ziyotoy.net,2009://2.66</id>

    <published>2009-04-29T15:13:00Z</published>
    <updated>2009-05-05T15:14:37Z</updated>

    <summary> Inspiron Mini 9 ミニノートパソコン 今、はやりのウルトラモバイ...</summary>
    <author>
        <name>ziyotoy</name>
        
    </author>
    
        <category term="物欲" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="firefox" label="Firefox" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="googlemap" label="GoogleMap" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="Javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ziyotoy.net/">
        <![CDATA[<p><a href="http://www.flickr.com/photos/20720251@N04/3479305406/" title="IMG_3585.JPG by itoyohja, on Flickr"><img src="http://farm4.static.flickr.com/3377/3479305406_9ed7b8c09c.jpg" width="500" height="375" alt="IMG_3585.JPG" /></a></p>

<p><a href="http://www1.jp.dell.com/content/products/productdetails.aspx/laptop-inspiron-9?c=jp&amp;cs=jpdhs1&amp;l=ja&amp;s=dhs">Inspiron Mini 9 ミニノートパソコン</a></p>

<p>今、はやりのウルトラモバイル。</p>
]]>
        <![CDATA[<h3>ミニキュンに胸キュン</h3>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=110changcom-22&o=9&p=8&l=as1&asins=4873113784&md=1X69VDGQCMF7Z30FM082&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<p>そもそもは<a href="http://www.amazon.co.jp/gp/product/4873113784?ie=UTF8&amp;tag=110changcom-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4873113784">ビジュアライジング・データ</a><img src="http://www.assoc-amazon.jp/e/ir?t=110changcom-22&amp;l=as2&amp;o=9&amp;a=4873113784" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />を読んでいてコードを書いてみないとどうにも買った意味がない、というのが始まり。昼食後とか、ちょっとした時間にコーヒー飲みながら軽くコード書けたらいいなーと思って、あまり慣れてもいないヤフオクで３万で落としました。</p>

<p>しかし、これが３万とは安い買い物ですよ！最高に取り回しが良いです。ちょっと読み書きが遅いですけどね。今ではたいてい持ち歩いています。</p>

<p>ついでにイーモバイルの契約もしまして、また固定費が増える・・ちょっと月々の通信費使い過ぎです。整理したいです。</p>

<h3>Firefox のプラグインでGPS的な何か</h3>

<p>この楽々持ち運べるウルトラモバイルの特徴を生かしてちょっと遊んでみました。<a href="http://labs.mozilla.com/2008/10/introducing-geode/">Geode</a>はFirefoxのプラグインで、Wi-Fiの電波からPCのだいたいの現在位置を推定するというものです。しかも、Javascriptで簡単に緯度経度を取得できます。Firefox3.1では標準搭載されるらしいよ。</p>

<blockquote>
  <p>navigator.geolocation.getCurrentPosition(function(pos) {
    alert( pos.latitude + ", " + pos.longitude );
  })</p>
</blockquote>

<p><a href="http://www.flickr.com/photos/20720251@N04/3476382344/" title="geode_test by itoyohja, on Flickr"><img src="http://farm4.static.flickr.com/3322/3476382344_a42051f721.jpg" width="500" height="293" alt="geode_test" /></a></p>

<p>中途半端なテストですが、横浜から実験してみました。東白楽の手前までは地下なのでワイヤレス・ネットワークがうまく取得できませんでした。あらためて東白楽から10秒間隔で10回現在位置を取得しています。</p>

<p>東横線では地上はまずまずで、地下はアウト、東海道線でも試しましたが速度が速すぎるのか無線LANの位置が遠いのかほとんど取得できませんでした。ともかく東横線／横浜−渋谷間やってみないとな。</p>

<p><a href="http://www.ziyotoy.net/lab/geodo/">http://www.ziyotoy.net/lab/geodo/</a></p>

<p>FirefoxにGeodeアドオンがインストールされていて、近くに無線LANのアクセスポイントがあれば（もちろん接続しなくて良い）誰でも現在位置を取得できます。10回試行したあと、ポリラインを引くようになっています。試行回数や間隔はこちらの都合で変更されるかも。あと、Javascriptコードは汚いです・・画面ちっちゃいんで整形するのが面倒なんです・・まあ、あくまで遊びなんで。</p>
]]>
    </content>
</entry>

<entry>
    <title>雪・月・火</title>
    <link rel="alternate" type="text/html" href="http://www.ziyotoy.net/2009/02/post-22.html" />
    <id>tag:www.ziyotoy.net,2009://2.61</id>

    <published>2009-02-21T15:05:57Z</published>
    <updated>2009-02-21T15:05:56Z</updated>

    <summary>国立新美術館の加山又造展を見てきました。 とにかく、一度は実物を見たかったので待...</summary>
    <author>
        <name>ziyotoy</name>
        
    </author>
    
        <category term="つれづれ" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="art" label="Art" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ziyotoy.net/">
        <![CDATA[<p>国立新美術館の<a href="http://www.kayamaten.jp/">加山又造展</a>を見てきました。
とにかく、一度は実物を見たかったので待ってました。</p>

<p><a href="http://www.flickr.com/photos/20720251@N04/3296473397/" title="IMG_3578.JPG by itoyohja, on Flickr"><img src="http://farm4.static.flickr.com/3240/3296473397_8953d0bd16.jpg" width="500" height="375" alt="IMG_3578.JPG" /></a></p>
]]>
        <![CDATA[<p><a href="http://www.flickr.com/photos/20720251@N04/3297297402/" title="IMG_3557.JPG by itoyohja, on Flickr"><img src="http://farm4.static.flickr.com/3514/3297297402_3eae9bf92c.jpg" width="500" height="375" alt="IMG_3557.JPG" /></a></p>

<p>実は国立新美術館は初めてです。雑誌で見たときは馬鹿でかい人工的な曲面に見えて嫌だなと思っていたのですが、実際目の前にすると圧迫感もなく曲線がきれいでニヤニヤしてしまいました。気持ち悪いですね。</p>

<p><a href="http://www.flickr.com/photos/20720251@N04/3296472549/" title="IMG_3563.JPG by itoyohja, on Flickr"><img src="http://farm4.static.flickr.com/3520/3296472549_2fdc1e425f.jpg" width="375" height="500" alt="IMG_3563.JPG" /></a></p>

<p>中。</p>

<p>展示室に入ってすぐ、3.5×4.3mの巨大な「雪」・「月」・「火」がお出迎え。圧倒されます。こんなに大きいとは思わなかった。加山又造といえば銀色の線で表現された波ですが（僕の中では）、本で見た限りではただの線だと思っていたのですが、ものすごく太く力強い線でした。本物が見れてよかった。</p>

<p>入れ替えで「千羽鶴」が見れなかったのは残念です。所蔵の東京国立近代美術館に行けば見れるのでしょうか・・？</p>

<p>寺院の天井画を描いたり、BMWに絵を描いたり、祇園の山車に飾るタペストリー（？）の原画を描いたり、はたまた陶器と多彩な面もあるんですね。休憩室にCGもありました。Photoshopで描いたそうです。</p>

<p>本で見たことの無い作品もたくさんあり、文句無し。というかぐうの音もでないというか。1,300円払ってもう１周してもいいくらい。</p>

<p>写真は国立新美術館のしかありません・・</p>

<p><a href="http://www.flickr.com/photos/20720251@N04/3297298402/" title="IMG_3574.JPG by itoyohja, on Flickr"><img src="http://farm4.static.flickr.com/3463/3297298402_dd15ddba2c.jpg" width="500" height="375" alt="IMG_3574.JPG" /></a></p>
]]>
    </content>
</entry>

<entry>
    <title>ドラッグ＆ドロップで入れ替え可能なリスト</title>
    <link rel="alternate" type="text/html" href="http://www.ziyotoy.net/2009/02/post-19.html" />
    <id>tag:www.ziyotoy.net,2009://2.59</id>

    <published>2009-02-12T12:13:06Z</published>
    <updated>2009-02-23T10:20:22Z</updated>

    <summary>Javascriptでドラッグ＆ドロップ。 ...</summary>
    <author>
        <name>ziyotoy</name>
        
    </author>
    
        <category term="知識" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="css" label="CSS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="html" label="HTML" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="javascript" label="Javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ziyotoy.net/">
        <![CDATA[<p>Javascriptでドラッグ＆ドロップ。</p>

<p><img src="http://farm4.static.flickr.com/3330/3274319724_347db04230.jpg" width="500" height="161" alt="Draggable List 1" /></p>

<p><img src="http://farm4.static.flickr.com/3452/3273500707_7653c8de30.jpg" width="500" height="225" alt="Draggable List 2" /></p>
]]>
        <![CDATA[<p>リスト要素をドラッグして順番を変えられます（<a href="http://www.ziyotoy.net/lab/draggable_list/">サンプル</a>）。</p>

<h3>オレオレイベント予約関数だとremoveEventListenerできない</h3>

<p>だめじゃん。removeEventListenerできないとstopDragできない。</p>

<pre name="code" class="js">
//removeEventListenerが必要なければこれでいいんだが・・・
Event.observe = function(_el, _func, _callback)
{
    if(_el.addEventListener)
    {
        _el.addEventListener(_func, _callback, false);
    }
    else if(_el.attachEvent)
    {
        _el.attachEvent(&quot;on&quot;+_func, _callback);
    }
}
</pre>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=110changcom-22&o=9&p=8&l=as1&asins=4873113296&md=1X69VDGQCMF7Z30FM082&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<p>で、シコシコif文で分岐させました。もっかいJavascript第５版読んでリスナー解除できるイベントユーティリティ書こう。</p>

<p>ドラッグ＆ドロップはイベントたらい回しまくりです。それぞれのli要素にmouseDownイベントをリスナー登録しておきます。mouseDownイベントが送信されたらstartDrag関数を呼びwindowオブジェクトにmouseMoveイベントをリスナー登録、同時にwindowオブジェクトにmouseUpイベントをリスナー登録。mouseUpイベントが送信されたらstopDrag関数を呼びmouseMoveイベントとmouseUpイベントをリスナー解除します。</p>

<p>こいつらをリスナー解除させるためにイベントハンドラは全部ローカル変数に格納。スコープを通したいので変数もほとんどローカル変数。外から見る必要がある変数だけthisキーワードで宣言しています。Javascriptではなるべくローカル変数使った方が取り回しがいいのかも。</p>

<p>このとき、なぜかIEではwindow.attachEventではなくdocument.attachEventでないと動きません。マウス関係のイベントだけそうなの？</p>

<h3>ドロップの仕組み</h3>

<p>晴れてmouseMoveイベントが送信できたら今度はドロップです。試行錯誤の結果、ダミー要素をマウスに追随させ、この要素と、もともとのリスト要素群の間に挿入されたドロップ候補とで接触判定をすることにしました。</p>

<p>接触していたらドロップ候補を表示します。mouseUpイベントが送信された時接触しているドロップ候補があれば、そのドロップ候補の直前にドラッグ対象になった要素をinsertBeforeして、ダミー要素やドロップ候補をすべて削除、ドラッグ＆ドロップを終了します。</p>

<p><img src="http://farm4.static.flickr.com/3332/3274401826_409e4c9d97.jpg" width="500" height="161" alt="Draggable List 3" /></p>

<h3>IE6だけロード直後にテキストノードしかクリックできない</h3>

<p>li要素の中身がテキストノードだと、テキストの部分しかクリックできない。一旦、テキストをドラッグするとli要素全体がクリック可になる。unselectableとかいろいろやってみたが直らない。のおおおおおおおおおぉぉぉぉぉぉぉぉぉぉぉぉぉぉ！！！！！！！！！！！！</p>

<h3>JavascriptでもdispatchEvent</h3>

<p><a href="http://www.fladdict.net/blog-jp/archives/2005/06/javascript.php">イベント・ドリブンなJavaScriptのやり方</a></p>

<p>このEventDispatcherをそのまま使わせていただきました。ASのようにカスタムイベントを発射できる。すばらしい。</p>
]]>
    </content>
</entry>

<entry>
    <title>モーニングコール</title>
    <link rel="alternate" type="text/html" href="http://www.ziyotoy.net/2009/01/post-20.html" />
    <id>tag:www.ziyotoy.net,2009://2.57</id>

    <published>2009-01-29T14:10:13Z</published>
    <updated>2009-01-29T14:43:18Z</updated>

    <summary>メールで「起きなさい！」と言われてしまいました。 ...</summary>
    <author>
        <name>ziyotoy</name>
        
    </author>
    
        <category term="ひとりごと" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://www.ziyotoy.net/">
        <![CDATA[<p>メールで「起きなさい！」と言われてしまいました。</p>

<p><a href="http://www.flickr.com/photos/20720251@N04/3235895831/" title="A wake up call from MindMeister by itoyohja, on Flickr"><img src="http://farm4.static.flickr.com/3101/3235895831_69a1056f46.jpg" width="200" height="500" alt="A wake up call from MindMeister" /></a></p>
]]>
        <![CDATA[<p>最近、ずっと使っていなかったのですが、<a href="http://www.mindmeister.com/">Mind Meister</a>というオンラインのマインドマップツールがありまして、これがWebサービスながらパッケージソフトと遜色ない使い勝手で（比較したことはありませんが今の所パッケージを買う必要がない）たびたび使っていました。</p>

<p><a href="http://www.flickr.com/photos/20720251@N04/3236752084/" title="mindmeister by itoyohja, on Flickr"><img src="http://farm4.static.flickr.com/3315/3236752084_6a3df584ac.jpg" width="500" height="305" alt="mindmeister" /></a></p>

<h3>放置ユーザーにモーニングコール</h3>

<p>「４ヶ月放置したあなたにはプレミアムアカウントを２ヶ月分提供しましょう。お友達も誘えばさらにプレミアム期間を追加しましょう」という趣旨のようです。<strong>名付けて「ねぼすけパック（？）」</strong>粋な計らいですね。しかし、よく読まないで２回ログインしたら「ねぼすけパック」が無効になってしまいました・・・</p>

<p>ともあれ、このサービスは面白そうなのでまた使ってみようと思います。</p>

<p><a href="http://www.flickr.com/photos/20720251@N04/3235895831/" title="A wake up call from MindMeister by itoyohja, on Flickr"><img src="http://farm4.static.flickr.com/3101/3235895831_69a1056f46_b.jpg" width="410" height="1024" alt="A wake up call from MindMeister" /></a></p>

<p>僕自身はモーニングコールなしでも朝起きれます。どうでもいいですね。</p>
]]>
    </content>
</entry>

<entry>
    <title>ロールオーバーで他の画像を切り替えるJavascript</title>
    <link rel="alternate" type="text/html" href="http://www.ziyotoy.net/2009/01/javascript-1.html" />
    <id>tag:www.ziyotoy.net,2009://2.55</id>

    <published>2009-01-24T12:42:46Z</published>
    <updated>2009-01-26T14:44:18Z</updated>

    <summary>同じような機能を２つの案件で求められたので作りました。 ...</summary>
    <author>
        <name>ziyotoy</name>
        
    </author>
    
        <category term="知識" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="javascript" label="Javascript" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ziyotoy.net/">
        <![CDATA[<p>同じような機能を２つの案件で求められたので作りました。</p>

<p><a href="http://www.flickr.com/photos/20720251@N04/3222665090/" title="multi_rollover2 by itoyohja, on Flickr"><img src="http://farm4.static.flickr.com/3339/3222665090_f8ee691d43.jpg" width="500" height="479" alt="multi_rollover2" /></a></p>
]]>
        <![CDATA[<p>大きな画像があって、サムネールにロールオーバーすると大きな画像のほうもロールオーバーする、というものです。</p>

<p><a href="http://www.ziyotoy.net/lab/multi_rollover/">ロールオーバーで他の画像を切り替えるサンプル</a></p>

<h3>for文からのイベント予約</h3>

<p>for文を回して複数の要素からスコープの異なる他の要素に何かしたいという時、for文内部からaddEventListenerしたりしたい時がありますが、</p>

<pre name="code" class="js">
function hogehoge()
{
    var foo = bar.getElementsByTagName(&quot;a&quot;);
    var baz = [&quot;0&quot;, &quot;1&quot;, &quot;2&quot;, &quot;3&quot;, &quot;4&quot;];
    for(var i=0; i&lt;foo.length; i++)
    {
        var hoge =baz[i];
        var callback = function(){ return hoge; };
        foo.addEventListener(&quot;mouseover&quot;, callback, false);
    }
}
</pre>

<p>こんな風にして、それぞれに何かさせようとしても帰ってくるのはhoge="4"=baz[4]ばかりとなります。イベントが発生する時点ではfor文が回りきった後の変数を見に行くことになるようです。</p>

<pre name="code" class="js">
var callback = (function(_hoge){ return _hoge; })(hoge);
</pre>

<p>そこで、コールバックに渡す関数を()();で囲います。前の括弧は優先して実行（数式で使う括弧と同じ）、後の括弧は通常通り関数に引数を渡します。こうすると_hogeがゾンビのように生き残り、fooにbaz[i]がわたります。これをクロージャなんて言うらしいです。抽象的に書いたので上のコードは間違ってるかもしれません（汗</p>

<p><a href="http://www.ziyotoy.net/lab/multi_rollover/">実際のコードはこちら</a></p>

<h3>Javascriptで画像の先読み</h3>

<p>同様に</p>

<pre name="code" class="js">
(new Image).src = &quot;path_to_image/hogehoge.jpg&quot;;
</pre>

<p>こうすると、新しいimg要素が作成され、src属性にパスが代入されるとキャッシュに読み込まれます。Firebugを使うと読み込まれているのが確認できます。</p>

<p><a href="http://www.flickr.com/photos/20720251@N04/3222752686/" title="multi_rollover by itoyohja, on Flickr"><img src="http://farm4.static.flickr.com/3297/3222752686_770a16a3e7_o.jpg" width="500" height="500" alt="multi_rollover" /></a></p>

<p>青い線はDOMツリー読み込み完了、赤い線はページ読み込み完了です。ページ読み込み完了後に読み込みを開始しているのがJavascriptでの先読み画像です。</p>

<p>Javascriptは自由度が高く、こういう裏技みたいなコードがあって楽しいですね。クロスブラウザはしんどいですが。</p>
]]>
    </content>
</entry>

<entry>
    <title>リスト要素（ul,li）をセンタリングする</title>
    <link rel="alternate" type="text/html" href="http://www.ziyotoy.net/2009/01/ulli.html" />
    <id>tag:www.ziyotoy.net,2009://2.54</id>

    <published>2009-01-18T11:27:51Z</published>
    <updated>2009-01-18T12:23:30Z</updated>

    <summary>ページ分割などでよくあるインターフェース。これをコーディングするとき、ul要素（...</summary>
    <author>
        <name>ziyotoy</name>
        
    </author>
    
        <category term="知識" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="css" label="CSS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="html" label="HTML" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ziyotoy.net/">
        <![CDATA[<p>ページ分割などでよくあるインターフェース。これをコーディングするとき、ul要素（とli要素）ではセンタリングできないのでtable要素を使っていました。</p>

<p><a href="http://www.flickr.com/photos/20720251@N04/3206329898/" title="リスト要素のセンタリング by itoyohja, on Flickr"><img src="http://farm4.static.flickr.com/3529/3206329898_093c695631_o.png" width="485" height="120" alt="リスト要素のセンタリング" /></a></p>
]]>
        <![CDATA[<p>コーディングする際に問題になるのは、幅が可変だということです。幅が決まっていれば、widthを指定した上、margin: autoでこと足りますが、幅が指定できない場合、ul要素の幅は100%です。そこで、内容に合わせて可変幅を持つtable要素の出番、となるわけです。</p>

<p>しかし、よく調べてみるとリスト要素はセンタリングすることができるようです。</p>

<p>参考：<a href="http://scuderia-web.com/tips/xhtml_css/list.php">リストのセンタリング</a></p>

<pre name="code" class="html">
&lt;ul class=&quot;pagenate&quot;&gt;
&lt;li&gt;&lt;span class=&quot;current&quot;&gt;1&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;#&quot;&gt;5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</pre>

<pre name="code" class="css">
.pagenate
{
    text-align: center;
}
.pagenate li
{
    display: -moz-inline-box;/*for FF2*/
    display: inline-block;/*Modern Browser & FF3*/
}
    /* Windows IE6 only */
    * html .pagenate li
    {
        display: inline;  
        zoom: 1;
    }
    /* Windows IE7 only */
    *+html .pagenate li
    {
        display: inline;
        zoom: 1;
    }
.pagenate a
{

}
.pagenate .current
{

}
</pre>

<p>親要素にtext-align: centerを指定した上、ブロック要素であるli要素をインライン要素として表示するだけです。ただし、display:inline-blockの実装はブラウザによって異なるのでそこは気をつけなければなりません。標準モード、互換モードに関わらず表示できます。</p>

<h3>それっておいしいの？</h3>

<p>ページ分割の場合、中身のテキストは数字だけですからわざわざリストを使用する必要性はなさそうです。ハックを使用せず、table要素にmargin: autoを指定するだけの丈夫なコーディングをするほうが効率はいいのではないかと思います。</p>

<p>が、「レイアウトにtable要素を使ってはいけない」などのコーディングルールを指定される場合もあるので、この方法を知っていると心強いです。</p>

<p><a href="http://www.ziyotoy.net/lab/centering_list_item/index.html">リスト要素のセンタリングのサンプル（標準モード）</a></p>

<p><a href="http://www.ziyotoy.net/lab/centering_list_item/index2.html">リスト要素のセンタリングのサンプル（後方互換モード）</a></p>
]]>
    </content>
</entry>

<entry>
    <title>Amazonで送料無料にするために何を買うか</title>
    <link rel="alternate" type="text/html" href="http://www.ziyotoy.net/2009/01/amazon.html" />
    <id>tag:www.ziyotoy.net,2009://2.53</id>

    <published>2009-01-16T15:12:10Z</published>
    <updated>2009-01-16T15:32:33Z</updated>

    <summary>Amazonで買い物をすると、1,500円以上なら送料無料になります。この金額に...</summary>
    <author>
        <name>ziyotoy</name>
        
    </author>
    
        <category term="つれづれ" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="amazon" label="Amazon" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="music" label="Music" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="aiko" label="aiko" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://www.ziyotoy.net/">
        <![CDATA[<p>Amazonで買い物をすると、1,500円以上なら送料無料になります。この金額に届かないときは・・・</p>
]]>
        <![CDATA[<h3>aiko姉さんのニューシングル「milk」リリース</h3>

<p>「<a href="http://www.amazon.co.jp/gp/product/B001P7CMXA?ie=UTF8&amp;tag=110changcom-22&amp;linkCode=as2&amp;camp=247&amp;creative=1211&amp;creativeASIN=B001P7CMXA">milk</a><img src="http://www.assoc-amazon.jp/e/ir?t=110changcom-22&amp;l=as2&amp;o=9&amp;a=B001P7CMXA" width="1" height="1" border="0" alt="" style="display:none; border:none !important; margin:0px !important;" />」ですか・・・今回のシングルはどの曲もひと味違うタイトルがつけられています。</p>

<ul>
<li>M1「milk」</li>
<li>M2「嘆きのキス」</li>
<li>M3「なんて一日」</li>
</ul>

<p>milkはともかく昭和っぽいというか何と言うか。それはさておき、このシングルをAmazonで買おうとした時の話です。</p>

<h3>ここから本題</h3>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=110changcom-22&o=9&p=8&l=as1&asins=B000JXB21Y&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<p>CDシングルは￥1,260なのでそのままだと300円の送料が発生します。買いたい本とかがあればいいのですが、一緒に買いたいものがないときどうするか。以前、</p>

<p><a href="http://www.msng.info/archives/2008/12/amazon_1500.php">Amazon で送料無料のためにあわせて買う商品はこれが決定版かも</a></p>

<p>こんな記事を読んだのですが、サラダクラブだと３個買わないと300円分は埋まりません。そんなに使うかなー。んーどうよ。そこで思いついたのが「ごはん」です。</p>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=110changcom-22&o=9&p=8&l=as1&asins=B000KJE0CK&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<p>ちょっと足が出ますが、せっかくおかずを作ったのにごはんを炊くの忘れたorzなどというときに重宝します。ごはんだけがいまいちな人は単品のごはんとレトルト食品とかでもいいと思います。</p>

<p>2/18にはCDとごはんが一緒にAmazonの箱に入って届くのかな。これはこれでシュールですね・・・</p>

<h3>関係ないけど</h3>

<p>最近、いきものがかりが良いですね。まっすぐな感じが良いです。「茜色の約束」から引っかかり始めました。ボーカルのきよえちゃんは、先週から金曜深夜のオールナイトニッポンのパーソナリティになりました。</p>

<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=110changcom-22&o=9&p=8&l=as1&asins=B001J8NS42&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe>

<p>aikoはテレビでは猫をかぶっているのですが、ラジオのパーソナリティとなると切れ目なく、いつ終わるともなく喋ります。そのためにコーナーが潰れかけるほどです。</p>

<p>リアルタイムでaikoのヌルコムを聞けなかった僕としては、きよえのオールナイトニッポンがヌルコムみたいになってくれたらいいなあとか思っています。先週聞いた所では、雰囲気はとても良いのですが、まだ「がんばって」しゃべっている感じです。これからに期待しています。</p>

<p>久しぶりにCSSやJavascriptのネタもいくつかあるのですが、まとめる気力がないのでどうでもいい話をしてみました。</p>
]]>
    </content>
</entry>

</feed>
