<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2japanesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss version="2.0"><channel><title>Xlune::Blog</title><link>http://blog.xlune.com/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/xlune" /><description>PHP Javascript Actionscript linux css とかの書留</description><language>ja</language><copyright>Copyright 2010</copyright><lastBuildDate>Sat, 20 Feb 2010 14:20:42 PST</lastBuildDate><generator>http://www.sixapart.com/movabletype/?v=4.1-ja-boomer-r1118-20080226</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/xlune" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="xlune" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>GoogleSuggestっぽいjQueryプラグイン書いたよ</title><link>http://blog.xlune.com/2010/02/jquerygcomplete.html</link><category>JavaScript</category><pubDate>Sat, 20 Feb 2010 14:20:42 PST</pubDate><guid isPermaLink="false">http://blog.xlune.com/2010/02/jquerygcomplete.html</guid><description>&lt;h3&gt;テキストオートコンプリートjQueryプラグイン(jquery.gcomplete.js) by Google API&lt;/h3&gt;
&lt;p class="mb30"&gt;
いやー、Googleの検索って便利ですよね。特にローマ字で打ってんのに日本語候補出してくれるのがシビれます。
なので、あの恩恵を普通のテキストフィールドでも受けれるようにしたいなーって思って勢いで書きました。&lt;br /&gt;
&lt;br /&gt;
もちろん、GoogleSuggest系のjQueryプラグインが山ほどあるのは知ってるんですが、山ほどありすぎて逆にわけわからんのでもっと混沌とさせようかと。。。
&lt;/p&gt;

&lt;h3&gt;Demo&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="/2010/02/gcomplete/"&gt;Demo Page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="mb30"&gt;利用方法はデモのソースを確認してください。&lt;/p&gt;

&lt;h3&gt;Download&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="/2010/02/gcomplete/download/jquery.gcomplete.0.1.2.zip"&gt;jquery.gcomplete.0.1.2.zip&lt;/a&gt; (zip: 20100223)&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="mb30"&gt;利用には、&lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;本体(必須)と&lt;a href="http://plugins.jquery.com/project/mousewheel"&gt;jquery.mousewheel&lt;/a&gt;プラグイン(オプション)が必要です。別途読み込んでください。&lt;/p&gt;

&lt;h3&gt;更新情報&lt;/h3&gt;
&lt;dl class="mb30"&gt;
	&lt;dt&gt;v0.1.2 (20100223)&lt;/dt&gt;
	&lt;dd&gt;バックエンドをカスタマイスしたデモを追加。&lt;/dd&gt;
	&lt;dd&gt;上記のカスタマイス関連とその他スクリプト修正。&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl class="mb30"&gt;
	&lt;dt&gt;v0.1.1 (20100221)&lt;/dt&gt;
	&lt;dd&gt;単語ごとにテキスト補完する、"oneword"オプション追加(タグ入力みたいに使えます)&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl class="mb30"&gt;
	&lt;dt&gt;v0.1.0 (20100221)&lt;/dt&gt;
	&lt;dd&gt;Betaバージョンリリース&lt;/dd&gt;
&lt;/dl&gt;

&lt;h3&gt;Todo&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strike&gt;Google APIを利用しない、カスタマイズ版のデモを用意&lt;/strike&gt;&lt;/li&gt;
	&lt;li&gt;グリモン書いて、どのページでも使えるようにしたい&lt;/li&gt;
	&lt;li&gt;必要があればIE6対応のCSSを用意&lt;/li&gt;
	&lt;li&gt;とりあえず、テストする&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="mb30"&gt;あとは&lt;a href="http://twitter.com/xlune"&gt;Twitter&lt;/a&gt;でゴニョゴニョします。&lt;/p&gt;

&lt;h3&gt;まとめ&lt;/h3&gt;
&lt;p class="mb30"&gt;
IE6とかでは表示崩れますが、CSSいじれば対応できると思います。もうIE6とか用にCSS書きたくないので全体的にレギュレーションから外して欲しいですね。&lt;br /&gt;
あと冷静に考えると、普通のテキストフィールドでグーグルのキーワードでるとウザイだけですねー。。。
&lt;/p&gt;
&lt;p class="mb10"&gt;
--&lt;br /&gt;
DevFest Quiz面白かったです。もっとやってください。
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/xlune?a=wGdToDWokBU:HhB48YlEviA:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=wGdToDWokBU:HhB48YlEviA:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=wGdToDWokBU:HhB48YlEviA:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?i=wGdToDWokBU:HhB48YlEviA:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=wGdToDWokBU:HhB48YlEviA:fqmcRPSHgvs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=fqmcRPSHgvs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>可変グリッドレイアウトのjQueryプラグイン書いたよ</title><link>http://blog.xlune.com/2009/09/jqueryvgrid.html</link><category>JavaScript</category><pubDate>Sun, 06 Sep 2009 00:17:37 PDT</pubDate><guid isPermaLink="false">http://blog.xlune.com/2009/09/jqueryvgrid.html</guid><description>&lt;h3&gt;可変グリッドレイアウトjQueryプラグイン(jquery.vgrid.js)&lt;/h3&gt;
&lt;p class="mb30"&gt;
なんだか可変グリッドレイアウトがまた流行ってる（？）ようなので、jQueryプラグイン書いてみた。&lt;br /&gt;
一通りブラウザで表示確認ぐらいはしたけど、テストは十分じゃありません。
&lt;/p&gt;

&lt;h3&gt;Demo&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="/2009/09/vgrid/"&gt;Demo Index&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="mb30"&gt;利用方法はデモのソースを確認してください。(ウィンドウリサイズして動きも確認してね)&lt;/p&gt;

&lt;h3&gt;Download&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="/2009/09/vgrid/download/jquery.vgrid.0.1.6.min.js"&gt;jquery.vgrid.0.1.6.min.js&lt;/a&gt; (compressed: 20100713)&lt;/li&gt;
	&lt;li&gt;&lt;a href="/2009/09/vgrid/download/jquery.vgrid.0.1.6.js"&gt;jquery.vgrid.0.1.6.js&lt;/a&gt; (normal: 20100713)&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="mb30"&gt;利用には、&lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;本体と&lt;a href="http://gsgd.co.uk/sandbox/jquery/easing/"&gt;jquery.easing&lt;/a&gt;プラグインが必要です。別途読み込んでください。&lt;/p&gt;

&lt;h3&gt;更新情報&lt;/h3&gt;
&lt;dl class="mb10"&gt;
	&lt;dt&gt;v0.1.6 (20100713)&lt;/dt&gt;
	&lt;dd&gt;
		&lt;p class="mb10"&gt;コメント等でいただいた、画像ブロックのレイアウトが崩れる現象の回避機能を実装しました。&lt;br /&gt;下記の回避方法のどちらかをお試しくださいませ。&lt;/p&gt;
		&lt;ol class="mb10"&gt;
			&lt;li&gt;"img"タグに"width","height"属性を正しく指定する。(推奨)&lt;/li&gt;
			&lt;li&gt;vgridのオプション"useLoadImageEvent"を"true"に設定する。(&lt;a href="http://blog.xlune.com/2009/09/vgrid/demo007.html"&gt;DEMO&lt;/a&gt;)&lt;/li&gt;
		&lt;/ol&gt;
		&lt;p&gt;画像ブロックレイアウトの崩れは、画像サイズの確定が画像読み込み後(レイアウト計算後)になるのが原因なので、あらかじめ静的に画像サイズを指定しておくか、オプションによって画像読み込み完了時に再描画を発生させるか、という対応になります。&lt;/p&gt;
	&lt;/dd&gt;
	&lt;dd&gt;&lt;a href="/2009/09/vgrid/demo007.html"&gt;demo007&lt;/a&gt;を追加&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl class="mb10"&gt;
	&lt;dt&gt;v0.1.5 (20100306)&lt;/dt&gt;
	&lt;dd&gt;コメントでいただいたバグをfixしました。&lt;/dd&gt;
	&lt;dd&gt;若干最適化しました。&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl class="mb10"&gt;
	&lt;dt&gt;v0.1.4 (20100225)&lt;/dt&gt;
	&lt;dd&gt;再配置のstart/finishイベントを設定できるようにしました。&lt;/dd&gt;
	&lt;dd&gt;&lt;a href="/2009/09/vgrid/demo006.html"&gt;demo006&lt;/a&gt;を参考にしてください。&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl class="mb10"&gt;
	&lt;dt&gt;v0.1.3 (20100217)&lt;/dt&gt;
	&lt;dd&gt;vgrefreshがvgsort内容もリフレッシュしちゃうのを修正&lt;/dd&gt;
	&lt;dd&gt;一応、フォントサイズ変更のリフレッシュトリガーを足してみた&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl class="mb10"&gt;
	&lt;dt&gt;v0.1.2 (20090909)&lt;/dt&gt;
	&lt;dd&gt;vgrefresh/vgsort関数のサンプル追加&lt;/dd&gt;
	&lt;dd&gt;&lt;a href="/2009/09/vgrid/"&gt;サンプルインデックス&lt;/a&gt;を追加&lt;/dd&gt;
&lt;/dl&gt;
&lt;dl class="mb30"&gt;
	&lt;dt&gt;v0.1.1 (20090907)&lt;/dt&gt;
	&lt;dd&gt;fadeInオプションを追加&lt;/dd&gt;
	&lt;dd&gt;コンテナボックスのリサイズ処理を変更&lt;/dd&gt;
	&lt;dd&gt;&lt;a href="/2009/09/vgrid/demo004.html"&gt;demo004&lt;/a&gt;を追加&lt;/dd&gt;
&lt;/dl&gt;

&lt;h3&gt;Todo&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;グリッドの横幅がバラバラだと綺麗に並ばない&lt;/li&gt;
	&lt;li&gt;並びにスペースの無駄ができる場合がある&lt;/li&gt;
	&lt;li&gt;クロスブラウザ/マルチプラットフォームで要確認&lt;/li&gt;
	&lt;li&gt;&lt;strike&gt;vgrefreshはvgsort内容もリフレッシュしちゃう&lt;/strike&gt;&lt;/li&gt;
	&lt;li&gt;IEが重い&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="mb30"&gt;修正したら&lt;a href="http://twitter.com/xlune"&gt;Twitter&lt;/a&gt;で流すようにします。興味のある方は&lt;a href="http://twitter.com/xlune"&gt;フォロー&lt;/a&gt;してね。&lt;/p&gt;

&lt;h3&gt;まとめ&lt;/h3&gt;
&lt;p class="mb30"&gt;
昨日&lt;a href="http://www.ustream.tv/channel/phpcon"&gt;PHPカンファレンスのUSTREAM&lt;/a&gt;見ながら書いてた。なぜPHPカンファレンスでJSなんだという話は置いといて、ああいうのを見てると自分も何かしなきゃと思っちゃう不思議。
&lt;/p&gt;
&lt;p class="mb10"&gt;
--&lt;br /&gt;
最近、無音だと逆に作業に集中できないパターンに入ってる。
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/xlune?a=URVqlIgvnxM:SfEU8fSbpDc:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=URVqlIgvnxM:SfEU8fSbpDc:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=URVqlIgvnxM:SfEU8fSbpDc:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?i=URVqlIgvnxM:SfEU8fSbpDc:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=URVqlIgvnxM:SfEU8fSbpDc:fqmcRPSHgvs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=fqmcRPSHgvs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>AmazonのAPIに認証が必須になるようなので対応しましたとさ</title><link>http://blog.xlune.com/2009/07/amazonapi.html</link><category>Linux</category><pubDate>Tue, 28 Jul 2009 01:35:13 PDT</pubDate><guid isPermaLink="false">http://blog.xlune.com/2009/07/amazonapi.html</guid><description>&lt;h3&gt;Product Advertising API&lt;/h3&gt;
&lt;p class="mb30"&gt;
&lt;a href="http://affiliate-blog.amazon.co.jp/2009/05/amazon-%E3%82%A2%E3%82%BD%E3%82%B7%E3%82%A8%E3%82%A4%E3%83%88-web-%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E5%90%8D%E7%A7%B0%E5%A4%89%E6%9B%B4%E3%81%8A%E3%82%88%E3%81%B3%E7%BD%B2%E5%90%8D%E8%AA%8D%E8%A8%BC%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%AE%E3%81%8A%E7%9F%A5%E3%82%89%E3%81%9B.html"&gt;Amazon アソシエイト Web サービスの名称変更および署名認証についてのお知らせ&lt;/a&gt;&lt;br /&gt;
けっこー理不尽だなーと思って放置してたんだけど、さすがに期日が迫ってきたので対応しなきゃいけない。まぁ、ここの場合は広告にしか使ってないんで、はずしても問題ないんですがね。。。
&lt;/p&gt;

&lt;h3&gt;Amazon API 認証プロキシがあるみたい&lt;/h3&gt;
&lt;p class="mb30"&gt;
↓これ！&lt;br /&gt;
&lt;a href="http://sho.tdiary.net/20090706.html"&gt;Amazon API認証のPROXYを書いたよ(2)&lt;/a&gt;&lt;br /&gt;
んでもって、さらに、Apacheモジュールもあるみたい。&lt;br /&gt;
&lt;a href="http://www.machu.jp/diary/20090726.html"&gt;Apache モジュール版の Amazon API 認証プロキシを作ったよ&lt;/a&gt;&lt;br /&gt;
これはありがたいなー、新仕様対応も意外とサクッと終わるかも。
&lt;/p&gt;

&lt;h3&gt;Apache モジュール版を導入する&lt;/h3&gt;
&lt;p class="mb10"&gt;
では、サクッと導入しますよー。&lt;br /&gt;
ちなみに、サーバ無いとか、あってもイジル権限ないって場合は&lt;a href="http://honnomemo.appspot.com/rpaproxy/"&gt;リバースプロキシが提供されてる&lt;/a&gt;っぽいのでありがたくこれを使わせてもらうといいですよ。
&lt;/p&gt;

&lt;p class="mb10"&gt;
[mod_apreq2をインストール]&lt;br /&gt;
※パッケージ版だと、apxsの場所が違うかも。
&lt;pre class="mb30"&gt;&lt;code&gt;wget http://www.meisei-u.ac.jp/mirror/apache/dist/httpd/libapreq/libapreq2-2.12.tar.gz
tar zxvf libapreq2-2.12.tar.gz
cd libapreq2-2.12

./configure --with-apache2-apxs={Apacheのディレクトリパス}/bin/apxs
make
make install
&lt;/code&gt;&lt;/pre&gt;
&lt;/p&gt;

&lt;p class="mb10"&gt;
[mod_amazon_proxyをインストール]
&lt;pre class="mb30"&gt;&lt;code&gt;git clone git://github.com/machu/mod_amazon_proxy.git
cd mod_amazon_proxy

{Apacheのディレクトリパス}/bin/apxs -c mod_amazon_proxy.c
{Apacheのディレクトリパス}/bin/apxs -i mod_amazon_proxy.la
&lt;/code&gt;&lt;/pre&gt;
&lt;/p&gt;


&lt;p&gt;[Apache設定]&lt;/p&gt;
&lt;pre class="mb30"&gt;&lt;code&gt;LoadModule apreq_module modules/mod_apreq2.so
LoadModule amazon_proxy_module modules/mod_amazon_proxy.so
&amp;lt;Location /amazon_proxy/ja&amp;gt;
  AmazonAccessKey {Your Access Key ID}
  AmazonSecretKey {Your Secret Access Key}
  AmazonEndPoint webservices.amazon.co.jp
  AmazonXsltEndPoint xml-jp.amznxslt.com
  SetHandler amazon_proxy
&amp;lt;/Location&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p class="mb10"&gt;
自分のアクセスキーとシークレットアクセスキーは&lt;a href="https://aws-portal.amazon.com/gp/aws/developer/account/index.html?ie=UTF8&amp;action=access-key"&gt;AmazonWebServicesのサイトで確認&lt;/a&gt;できるので、その値に書き換えましょう。
&lt;/p&gt;

&lt;p class="mb10"&gt;
&lt;strike&gt;ちなみに、リクエスト時、"Style"パラメーターでXSLT指定してる場合、AmazonEndPointを"xml-jp.amznxslt.com"にしないとエラーが返る模様。&lt;br /&gt;
なので、データ整形する場合は下記の設定にする必要があるようです。(仕様なのかバグなのかはわかりませんよー)&lt;/strike&gt;
&lt;/p&gt;

&lt;p class="mb10"&gt;
[追記:20090729]&lt;br /&gt;
作者様から"Style"パラメーター用に"AmazonXsltEndPoint"という設定を追加したと、コメント欄でお知らせいただきました。&lt;br /&gt;
対応ありがとうございます。
&lt;/p&gt;
&lt;p class="mb10"&gt;
リクエストに"Style"パラメーターがある場合は"AmazonXsltEndPoint"で指定されているホスト、それ以外は"AmazonEndPoint"で指定されているホストに切り替わるみたいです。&lt;br /&gt;
すでにインストール済みの方はmod_amazon_proxyのソースを最新にして再インストールしましょう。
&lt;/p&gt;

&lt;p&gt;&lt;strike&gt;[Apache設定(2)]&lt;/strike&gt;&lt;/p&gt;
&lt;pre class="mb30"&gt;&lt;code&gt;&lt;strike&gt;LoadModule apreq_module modules/mod_apreq2.so
LoadModule amazon_proxy_module modules/mod_amazon_proxy.so
&amp;lt;Location /amazon_proxy/ja&amp;gt;
  AmazonAccessKey {Your Access Key ID}
  AmazonSecretKey {Your Secret Access Key}
  AmazonEndPoint xml-jp.amznxslt.com
  SetHandler amazon_proxy
&amp;lt;/Location&amp;gt;
&lt;/strike&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/p&gt;

&lt;p class="mb30"&gt;
終わったら、Apacheを再起動して完了です。
&lt;/p&gt;

&lt;h3&gt;クライアントの書き換え&lt;/h3&gt;
&lt;p class="mb10"&gt;
書き換えは簡単で、リクエストURLのベースを置き替えるだけです。
&lt;/p&gt;
&lt;pre class="mb30"&gt;&lt;code&gt;http://webservices.amazon.co.jp/onca/xml
http://ecs.amazonaws.jp/onca/xml
http://xml-jp.amznxslt.com/onca/xml

↓↓↓

http://{あなたのドメイン}/amazon_proxy/ja
&lt;/code&gt;&lt;/pre&gt;
&lt;p class="mb10"&gt;
ちなみに、&lt;a href="http://honnomemo.appspot.com/rpaproxy/"&gt;提供されているリバースプロキシ&lt;/a&gt;を使う場合も同じく書き換えるだけです。
&lt;/p&gt;
&lt;pre class="mb30"&gt;&lt;code&gt;http://webservices.amazon.co.jp/onca/xml
http://ecs.amazonaws.jp/onca/xml
http://xml-jp.amznxslt.com/onca/xml

↓↓↓

http://honnomemo.appspot.com/rpaproxy/jp/
&lt;/code&gt;&lt;/pre&gt;

&lt;p class="mb30"&gt;
簡単ですね。
&lt;/p&gt;


&lt;h3&gt;まとめ&lt;/h3&gt;
&lt;p class="mb30"&gt;
以上で仕様変更への対応は問題ないらしいですが、2009年8月15日以降にちゃんと動作してるか確認は必須ですね。&lt;br /&gt;
こういうのは忘れがちなので、スケジュールに入れとくといいかもしれませんよ。
&lt;/p&gt;
&lt;p class="mb10"&gt;
--&lt;br /&gt;
Amazonは仕様変更が多いなぁー、強気だなぁ。
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/xlune?a=23UfHgNyWKM:gUl-cvYo3uw:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=23UfHgNyWKM:gUl-cvYo3uw:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=23UfHgNyWKM:gUl-cvYo3uw:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?i=23UfHgNyWKM:gUl-cvYo3uw:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=23UfHgNyWKM:gUl-cvYo3uw:fqmcRPSHgvs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=fqmcRPSHgvs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>Firefox Add-onsのJetpackで遊んでみたよ</title><link>http://blog.xlune.com/2009/05/jetpack.html</link><category>JavaScript</category><pubDate>Fri, 22 May 2009 01:46:59 PDT</pubDate><guid isPermaLink="false">http://blog.xlune.com/2009/05/jetpack.html</guid><description>&lt;h3&gt;Jetpackって何？&lt;/h3&gt;
&lt;p class="mb30"&gt;
Firefoxの拡張を簡単に作れる、Firefoxアドオン。Greasemonkeyより高機能(？)&lt;br /&gt;
&lt;a href="https://jetpack.mozillalabs.com/"&gt;サイト&lt;/a&gt;に行くとデモがあったりするよ。
&lt;/p&gt;

&lt;h3&gt;とりあえず書いてみた&lt;/h3&gt;
&lt;p class="mb10"&gt;
内容はインストールページを見てね。&lt;br /&gt;
→&lt;a href="http://blog.xlune.com/2009/05/jetpack/kbtext.html"&gt;インストールページへ行く&lt;/a&gt;
&lt;/p&gt;
&lt;pre class="mb30"&gt;&lt;code class="javascript"&gt;/**
 * Jetpack Sample KBText
 * http://blog.xlune.com/
 */
var KBText = KBText || {};
KBText.Config = {
	yUrl: "http://jlp.yahooapis.jp/MAService/V1/parse",
	yParam: {
		appid: "rvNw382xg656tyPRhdp1t6_qfwWeQ1SWU_XEm.xaq8U8AIVo5bUDEgzeTlDqDr2TkZE-",
		results: "ma",
		sentence: ""
	},
	boxName: "KBTextBox"
};
KBText.init = function(){
	var mes = "文字を選択してね！";
	var selectStr = jetpack.tabs.focused.contentDocument.getSelection() || '';
	if(selectStr)
	{
		mes = "変換開始！";
		var param = KBText.Config.yParam;
		param.sentence = selectStr;
		$.post(
			KBText.Config.yUrl,
			param,
			KBText.onComplete
		);
		
	}
	jetpack.notifications.show(
		{
			title: 'KBText',
			body: mes,
			icon: 'http://blog.xlune.com/favicon.ico'
		}
	);
};
KBText.onComplete = function(xml)
{
	var arr = [];
	$(xml)
		.find("reading")
			.each(function(num){
				if(!$(this).text().match(/[ 　]+/))
				{
					arr.push($(this).text());
				}
			});
	jetpack.notifications.show(
		{
			title: 'KBText',
			body: "変換完了！",
			icon: 'http://blog.xlune.com/favicon.ico'
		}
	);
	KBText.showBox(arr.join(' ').cmabrigde());
};

KBText.makeBox = function()
{
	return $("&amp;lt;div&amp;gt;")
		.html('&amp;lt;p class="sj-text"&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;p class="sj-close"&amp;gt;&amp;lt;a href="#"&amp;gt;close&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;')
		.css({
				"position": "fixed",
				"right": "5px",
				"top": "5px",
				"padding": "5px 10px",
				"background-color": "#000000",
				"color": "#FFFFFF",
				"z-index": "1000",
				"line-height": "1.5em",
				"width": "40%",
				"-moz-border-radius": "5px",
				"-moz-opacity": "0.7",
				"font-size": "14px"
		})
		.attr('id', KBText.Config.boxName)
		.find('p.sj-close a')
			.click(function(){
				$(jetpack.tabs.focused.contentDocument.documentElement)
					.find('#'+KBText.Config.boxName)
					.remove();
				return false;
			})
			.css({
				"display": "block",
				"text-align": "right",
				"color": "#FFFFFF"
			})
			.end();
};
KBText.showBox = function(str)
{
	KBText.removeBox();
	$(jetpack.tabs.focused.contentDocument.documentElement)
		.append(KBText.makeBox())
		.find('p.sj-text').html(str);
};
KBText.removeBox = function()
{
	$(jetpack.tabs.focused.contentDocument.documentElement)
		.find('#'+KBText.Config.boxName)
		.remove();
};

/**
 * writed by "amachang"
 * from: http://d.hatena.ne.jp/amachang/20090518/1242656425
 */
String.prototype.cmabrigde = function() {
	return this.split(' ').map(function(w) {
		var ws = w.split('');
		var l = ws.pop();
		return (ws.shift() || '') + (ws.length ? ws.sort(Math.random).join('') : '') + l;
	}).join(' ');
};

/**
 * jetpack init
 */
jetpack.statusBar.append({
	html: '&amp;lt;img src="http://blog.xlune.com/favicon.ico" /&amp;gt;',
	width: 16,
	onReady: function(doc) {
		$(doc).find("img").click(function() {
			KBText.init();
		});
	}
});
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;まとめ&lt;/h3&gt;
&lt;p class="mb30"&gt;
通常の Firefox Add-ons 作るよりは遥かに簡単そうな印象。&lt;br /&gt;
今後の機能拡充を見込めれば、期待していいんじゃないだろうか。
&lt;/p&gt;
&lt;p class="mb10"&gt;
--&lt;br /&gt;
でもやっぱり、ちゃんとしたのは普通のAdd-onsで作りたいカナ。
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/xlune?a=ZjLJ3p1Cvj4:B4NQxXU7xkw:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=ZjLJ3p1Cvj4:B4NQxXU7xkw:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=ZjLJ3p1Cvj4:B4NQxXU7xkw:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?i=ZjLJ3p1Cvj4:B4NQxXU7xkw:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=ZjLJ3p1Cvj4:B4NQxXU7xkw:fqmcRPSHgvs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=fqmcRPSHgvs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>Papervision3DのText3Dで日本語使ってみたのをWonderflでforkした</title><link>http://blog.xlune.com/2009/05/papervision3dtext3dwonderflfor.html</link><category>Flash</category><pubDate>Fri, 15 May 2009 14:59:32 PDT</pubDate><guid isPermaLink="false">http://blog.xlune.com/2009/05/papervision3dtext3dwonderflfor.html</guid><description>&lt;h3&gt;"forked from: PV3Dその3"で日本語表示してみる&lt;/h3&gt;
&lt;div style="text-align:center;width:465px;"&gt;&lt;iframe title=""forked from: PV3Dその3"で日本語表示してみる - wonderfl build flash online" src="http://wonderfl.kayac.com/blogparts/548b3139e50865122b871ed8b687aa39ee2801aa" width="465" height="490" style="border:1px black solid;"&gt;&lt;/iframe&gt;&lt;a href="http://wonderfl.kayac.com/code/548b3139e50865122b871ed8b687aa39ee2801aa" title=""forked from: PV3Dその3"で日本語表示してみる - wonderfl build flash online"&gt;"forked from: PV3Dその3"で日本語表示してみる - wonderfl build flash online&lt;/a&gt;&lt;/div&gt;
&lt;p class="mb30"&gt;
なんとか、1ファイルに落とし込みました。&lt;br /&gt;
PotrAsが無いっぽいんで、ライブラリソース全部べた貼りしたwww1700行超えてるしwww
&lt;/p&gt;
&lt;h3&gt;指定フォントを表示するカスタムFont3D&lt;/h3&gt;
&lt;p class="mb10"&gt;
CustomFont3DをFont3DとしてText3Dに与えてやればいいだけ。&lt;br /&gt;
事前にフォントをトレースする必要があるから、CustomFont3DにはText3Dと同じく表示する文字列を与える必要があります。&lt;br /&gt;
フォントやサイズも指定できるので、そこそこ遊べるかと。
&lt;/p&gt;
&lt;p&gt;[CustomFont3D.as]&lt;/p&gt;
&lt;pre&gt;&lt;code class="javascript"&gt;package {
	import com.nitoyon.potras.*;
	import org.papervision3d.typography.Font3D;
	import flash.display.BitmapData;
	import flash.geom.Point;
	import flash.text.TextField;
	import flash.text.TextFormat;
	public class CustomFont3D extends Font3D
	{

		private static var __motifs:Object = {};
		private static var __widths:Object = {};
		private static var __height:Number = 119;
		private var _initialized:Boolean = false;
		
		private var _text:String;
		private var _font:String;
		private var _size:uint;
		
		public function CustomFont3D(text:String, font:String="_ゴシック", size:uint=72)
		{
			_text = text;
			_font = font;
			_size = size;
		}
		
		private function initialize():void {
			if(!_initialized)
			{
				initializeMotifsAndWidths();
				_initialized = true;
			}
		}
		
		////////////////////////////////////////////
		override public function get motifs():Object
		{
			if(!_initialized)initialize();
			return __motifs;
		}

		override public function get widths():Object
		{
			if(!_initialized)initialize();
			return __widths;
		}
		
		override public function get height():Number
		{ 
			if(!_initialized)initialize();
			return __height;
		}
		////////////////////////////////////////////

		private function initializeMotifsAndWidths():void
		{
			var arr:Array = _text.split("");
			var result:Array;
			for(var i:uint=0,max:uint=arr.length; i&lt;max; i++)
			{
				if(!__motifs[arr[i]])
				{
					result = getMotifsAndWidths(arr[i]);
					__motifs[arr[i]] = result[0];
					__widths[arr[i]] = result[1];
				}
			}
		}
		
		private function getMotifsAndWidths(str:String):Array
		{
			var arr:Array = [];
			var pathList:ClosedPathList = CustomFont.traceLetter(str, _size, _font);
			for each(var path:ClosedPath in pathList.$a)
			{
				arr = arr.concat(getPoints(path.$a));
			}
			var data:Array = [
				arr,
				_size
			];
			return data;
		}
		
		/**
		 * PotrAs(traceLetter) edited
		 */
		public static function traceLetter(letter:String, fontSize:int, font:String="_ゴシック"):ClosedPathList
		{
			var tf:TextFormat = new TextFormat();
			tf.font = font;
			tf.size = fontSize;

			var text:TextField = new TextField();
			text.defaultTextFormat = tf;
			text.autoSize = "left";
			text.text = letter;

			// We have to use threshold method to binarize, because Mac OS draws antialiased text.
			var bmdtmp:BitmapData = new BitmapData(fontSize * letter.length, fontSize * 1.2, true);
			var bitmapdata:BitmapData = bmdtmp.clone();
			bmdtmp.draw(text);
			bitmapdata.threshold(bmdtmp, bmdtmp.rect, new Point(), "&lt;", 0xffdddddd, 0xff000000);

			var pathList:Array = PathList.create(bitmapdata);
			var c:ClosedPathList = ProcessPath.processPath(pathList);

			bmdtmp.dispose();
			bitmapdata.dispose();
			return c;
		}
		/**
		 * ClosedPath(draw) edited
		 */
		public function getPoints($a:Array):Array
		{
			var arr:Array = [];
			var pt:Point = $a[$a.length - 1].c[2];
			arr.push(['M', [pt.x, pt.y]]);
			
			for(var i:int = 0; i &lt; $a.length; i++)
			{
				var c:Curve = $a[i];

				if(c.tag == ProcessPath.POTRACE_CORNER)
				{
					arr.push(['L', [c.c[1].x, c.c[1].y]]);
					arr.push(['L', [c.c[2].x, c.c[2].y]]);
				}
				else
				{
					for(var t:Number = 0; t &lt; 1.0; t += 0.02)
					{
						var p:Point = getBezierPoint(pt, c.c[0], c.c[1], c.c[2], t);
						arr.push(['L', [p.x, p.y]]);
					}
					arr.push(['L', [c.c[2].x, c.c[2].y]]);
				}
				pt = c.c[2];
			}
			return arr;
		}
		/**
		 * ClosedPath(getBezierPoint) edited
		 */
		protected function getBezierPoint(p0:Point, p1:Point, p2:Point, p3:Point, t:Number):Point
		{
			return new Point(Math.pow(1 - t, 3)  * p0.x + 3 * t * Math.pow(1 - t, 2) * p1.x
						+ 3 * t * t * (1 - t) * p2.x + t * t * t * p3.x,
						Math.pow(1 - t, 3)  * p0.y + 3 * t * Math.pow(1 - t, 2) * p1.y
						+ 3 * t * t * (1 - t) * p2.y + t * t * t * p3.y);
		}
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p class="mb10"&gt;
--&lt;br /&gt;
文字が多いと重い。
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/xlune?a=dpdEtImqHPc:wm2TZ8BJqA4:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=dpdEtImqHPc:wm2TZ8BJqA4:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=dpdEtImqHPc:wm2TZ8BJqA4:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?i=dpdEtImqHPc:wm2TZ8BJqA4:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=dpdEtImqHPc:wm2TZ8BJqA4:fqmcRPSHgvs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=fqmcRPSHgvs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>Papervision3DのText3Dで日本語使ってみる</title><link>http://blog.xlune.com/2009/05/papervision3dtext3d.html</link><category>Flash</category><pubDate>Wed, 13 May 2009 04:29:31 PDT</pubDate><guid isPermaLink="false">http://blog.xlune.com/2009/05/papervision3dtext3d.html</guid><description>&lt;h3&gt;Text3Dって&lt;/h3&gt;
&lt;p class="mb30"&gt;
&lt;a href="http://blog.papervision3d.org/"&gt;Papervision3D&lt;/a&gt;のライブラリに入ってるやつ。ベクターのテキストオブジェクトを配置して遊べるらしい。&lt;br /&gt;
どんなもんかは&lt;a href="http://wonderfl.kayac.com/search?q=Text3D"&gt;wonderfl&lt;/a&gt;で見れるよ。
&lt;/p&gt;

&lt;h3&gt;日本語使えないの？&lt;/h3&gt;
&lt;p class="mb30"&gt;
&lt;a href="http://papervision3d.googlecode.com/svn/trunk/as3/trunk/docs/org/papervision3d/typography/Text3D.html"&gt;API&lt;/a&gt;を見ると、font定義の&lt;a href="http://papervision3d.googlecode.com/svn/trunk/as3/trunk/docs/org/papervision3d/typography/Font3D.html"&gt;Font3D&lt;/a&gt;ってのがあるようなので、ここを日本語使えるやつに置き換えてやればいいんじゃなかろうか。&lt;br /&gt;
それで使えるはず。

&lt;h3&gt;試しに Font3D の HelveticaBold.as を開いてみる&lt;/h3&gt;
&lt;p class="mb30"&gt;
半角文字のパス情報がびっしり詰まってた。Arrayがもうびっしり。手動かよ！&lt;br /&gt;
どうやら"M"がmoveToで、"L"がlineTo、"C"がcurveToで、パス情報を羅列していくらしい。&lt;br /&gt;
ふ～ん・・・さて、"あ"から始めるか。。。
&lt;/p&gt;

&lt;h3&gt;そんなはずねぇ&lt;/h3&gt;
&lt;p class="mb30"&gt;
もちろんパスを書く作業は嫌です。実際オレPapervision3Dよく知らないから騙されてるんですね。&lt;br /&gt;
いいです、いいですよ、偉い人が何気なく教えてくれるまで、現状の知識でカバーします。
&lt;/p&gt;

&lt;h3&gt;PotrAsの出番ですね、わかります&lt;/h3&gt;
&lt;p class="mb30"&gt;
「&lt;a href="http://d.hatena.ne.jp/nitoyon/"&gt;てっく煮&lt;/a&gt;」の人が C で書かれてる「potrace」ってのを&lt;a href="http://d.hatena.ne.jp/nitoyon/20071002/potrace"&gt;ASに移植してくれてた&lt;/a&gt;。ありがたやー。&lt;br /&gt;
これでパス情報が取得できるので、そのままFont3Dオブジェクトに反映すれば行けるね！
&lt;/p&gt;


&lt;h3&gt;というわけで、作ってみた&lt;/h3&gt;
&lt;p id="flsample" class="mb10"&gt;
サンプル見れない場合は、最新のFlashPlayerを入れて、JavaScriptをオンにしてね！
&lt;/p&gt;
&lt;script type="text/javascript"&gt;
&lt;!--
var so = new SWFObject(
	"/2009/05/text3d/main.swf",
	"flash_sample",
	"465",
	"465",
	"9",
	"#000000"
);
so.addParam("loop", "false");
so.addParam("menu", "false");
so.addParam("quality", "high");
so.addParam("salign", "lt");
so.addParam("allowScriptAccess", "always");
so.write("flsample");
//--&gt;
&lt;/script&gt;
&lt;p class="mb30"&gt;
※&lt;a href="http://wonderfl.kayac.com/code/ab616bb9c1e451970d90bb273f42ca063f0916f4"&gt;3D表現のソースはwonderflからです。&lt;/a&gt;&lt;br /&gt;
※wonderflでPotrAs使えるのか不明、使えればforkして晒し→軽量にしてもらえる？
&lt;/p&gt;

&lt;h3&gt;まとめ&lt;/h3&gt;
&lt;p class="mb30"&gt;
パスの数が多いのでちょっと重めだけど、目的は達成したのでいいかな。&lt;br /&gt;
実用できる感じではないかもしれないけど、機会があれば使ってみたい。
&lt;/p&gt;

&lt;p class="mb10"&gt;
--&lt;br /&gt;
PV3Dはいつ仕様が落ち着くの？
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/xlune?a=yIu7R8gtJJE:n0VnuoD_PaI:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=yIu7R8gtJJE:n0VnuoD_PaI:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=yIu7R8gtJJE:n0VnuoD_PaI:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?i=yIu7R8gtJJE:n0VnuoD_PaI:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=yIu7R8gtJJE:n0VnuoD_PaI:fqmcRPSHgvs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=fqmcRPSHgvs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>O3Dがすごい楽しそうだよ</title><link>http://blog.xlune.com/2009/04/o3d.html</link><category>JavaScript</category><pubDate>Thu, 23 Apr 2009 22:23:07 PDT</pubDate><guid isPermaLink="false">http://blog.xlune.com/2009/04/o3d.html</guid><description>&lt;h3&gt;O3Dなるものが登場したらしい&lt;/h3&gt;
&lt;p class="mb10"&gt;
ブラウザ上で動作する3Dグラフィックプラグインらしい。詳しくは知りません。&lt;br /&gt;
ただ、JavaScriptでPapervision3D的な事が出来るんだろーという認識ではいる。
&lt;/p&gt;
&lt;p class="mb30"&gt;
ブラウザにプラグイン入れて3Dってことは、&lt;a href="http://unity3d.com/"&gt;Unity3D&lt;/a&gt;辺りの競合って認識でいいんじゃないだろうか。
&lt;/p&gt;

&lt;h3&gt;サンプルいじってみた&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://blog.xlune.com/2009/04/o3d_sample.html"&gt;&lt;img src="http://blog.xlune.com/up_images/img_20090424001.jpg" alt="画像" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="mb10"&gt;&lt;a href="http://blog.xlune.com/2009/04/o3d_sample.html"&gt;O3Dサンプル&lt;/a&gt;&lt;/p&gt;
&lt;p class="mb30"&gt;
マウスドラッグでグリグリ視点変更、マウスホイールでズーム調節ができます.&lt;br /&gt;
(※もちろん要プラグイン)
&lt;/p&gt;

&lt;h3&gt;リンク&lt;/h3&gt;
&lt;p class="mb30"&gt;
[O3D] : &lt;a href="http://code.google.com/intl/ja/apis/o3d/"&gt;http://code.google.com/intl/ja/apis/o3d/&lt;/a&gt;&lt;br /&gt;
[O3D Demo] : &lt;a href="http://code.google.com/intl/ja/apis/o3d/docs/samplesdirectory.html"&gt;http://code.google.com/intl/ja/apis/o3d/docs/samplesdirectory.html&lt;/a&gt;&lt;br /&gt;
デモがすごいよー。&lt;br /&gt;
(※プラグインのインストール後は、ブラウザ再起動しましょう。)
&lt;/p&gt;

&lt;h3&gt;まとめ&lt;/h3&gt;
&lt;p  class="mb30"&gt;
これで3Dポテンシャルに関してJavaScriptは、Flash(AS)に追いつくどころか、軽く追い越してしまったわけだけど、使い勝手やコードの秘匿性とか考えるとまだFlashなのかな？&lt;br /&gt;
あと、望むことならこのプラグインを次期ブラウザに標準実装とかしてほしいです。&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
--&lt;br /&gt;
読み込みがJavaアプレット並みに重いのはどーなのよ。
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/xlune?a=TxCGjShURTE:T95FWe1kVKQ:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=TxCGjShURTE:T95FWe1kVKQ:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=TxCGjShURTE:T95FWe1kVKQ:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?i=TxCGjShURTE:T95FWe1kVKQ:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=TxCGjShURTE:T95FWe1kVKQ:fqmcRPSHgvs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=fqmcRPSHgvs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>【Blogパーツ紹介】ニクキュ～</title><link>http://blog.xlune.com/2009/04/blog_1.html</link><category>other</category><pubDate>Thu, 09 Apr 2009 21:09:02 PDT</pubDate><guid isPermaLink="false">http://blog.xlune.com/2009/04/blog_1.html</guid><description>&lt;p class="mb10"&gt;
&lt;script type="text/javascript" src="http://www.blogdeco.jp/kuro/m/kuro.js"&gt;&lt;/script&gt;&lt;noscript&gt;&lt;a href="http://www.blogdeco.jp/" target="_blank" title="ブログパーツ"&gt;www.blogdeco.jp&lt;/a&gt;&lt;/noscript&gt;
&lt;/p&gt;
&lt;p class="mb20"&gt;&lt;a href="http://www.art-meter.com/blog/cat/"&gt;ニクキュ～ 猫の肉球ブログパーツ&lt;/a&gt;&lt;/p&gt;

&lt;p class="mb30"&gt;なんてものつくるんだ！離れられないじゃないか！&lt;/p&gt;
&lt;p&gt;
--&lt;br /&gt;
２次元でマウスさわってるだけなのに気持ちいいのは、体験記憶ですか？
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/xlune?a=hNaypGsyN_E:DtfVyyT8lb0:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=hNaypGsyN_E:DtfVyyT8lb0:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=hNaypGsyN_E:DtfVyyT8lb0:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?i=hNaypGsyN_E:DtfVyyT8lb0:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=hNaypGsyN_E:DtfVyyT8lb0:fqmcRPSHgvs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=fqmcRPSHgvs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>遅ればせながら、「wonderfl」見てみた</title><link>http://blog.xlune.com/2009/04/wonderfl.html</link><category>Flash</category><pubDate>Tue, 31 Mar 2009 22:15:18 PDT</pubDate><guid isPermaLink="false">http://blog.xlune.com/2009/04/wonderfl.html</guid><description>&lt;h3&gt;wonderflって？&lt;/h3&gt;
&lt;p class="mb10"&gt;
今や、面接会場に人気ラーメン店並みの長蛇の列ができると噂されている、&lt;a href="http://www.kayac.com/"&gt;面白法人カヤック&lt;/a&gt;さんとこのWebサービス。
&lt;/p&gt;
&lt;p class="mb30"&gt;
web上でASコードを書いて、みんなで共有・改編し、swf書き出しもサーバのバックエンド(Flex SDK)でやってくれる。&lt;br /&gt;
手軽にFlashと触れ合える、面白いサービスです。
&lt;/p&gt;

&lt;h3&gt;レベルが違う件&lt;/h3&gt;
&lt;p class="mb30"&gt;
「手軽にFlashと触れ合える」と書いたんですが、当初に比べると、ちょっと投稿しづらいぐらいにディープな場所になってますね。&lt;br /&gt;
でも、サンプルソースとしてはこの上なく上質なのでバリバリ参考にさせてもらいましょう。
&lt;/p&gt;

&lt;h3&gt;投稿してみた&lt;/h3&gt;
&lt;div style="text-align:center;width:465px;margin-bottom:10px"&gt;&lt;iframe title="画像のアウトラインを一筆書き - wonderfl build flash online" src="http://wonderfl.kayac.com/blogparts/b101bc34c9b01b4bb82b22369156c5731b36fd38" width="465" height="490" style="border:1px black solid;"&gt;&lt;/iframe&gt;&lt;a href="http://wonderfl.kayac.com/code/b101bc34c9b01b4bb82b22369156c5731b36fd38" title="画像のアウトラインを一筆書き - wonderfl build flash online"&gt;画像のアウトラインを一筆書き - wonderfl build flash online&lt;/a&gt;&lt;/div&gt;
&lt;p class="mb30"&gt;
しょぼくて申し訳ないんですが、試しに投稿してみました。&lt;br /&gt;
よくわからずに「fork」とか押したら、自分自身で派生させちゃった。。。とうやって消すんだろ？
&lt;/p&gt;

&lt;h3&gt;追記(20090403)&lt;/h3&gt;
&lt;div style="text-align:center;width:465px;margin-bottom:10px"&gt;&lt;iframe title="forked from: 画像のアウトラインを一筆書き - wonderfl build flash online" src="http://wonderfl.kayac.com/blogparts/fc1150943bf4bb1cd5560491447f1d7f75301dd4" width="465" height="490" style="border:1px black solid;"&gt;&lt;/iframe&gt;&lt;a href="http://wonderfl.kayac.com/code/fc1150943bf4bb1cd5560491447f1d7f75301dd4" title="forked from: 画像のアウトラインを一筆書き - wonderfl build flash online"&gt;forked from: 画像のアウトラインを一筆書き - wonderfl build flash online&lt;/a&gt;&lt;/div&gt;
&lt;p class="mb30"&gt;
間違って「fork」したままだと気持ち悪いんで、一筆書きじゃないパターンを貼ってきた。&lt;br /&gt;
行き詰った未完成サンプルとかあげたらエロイ人が直してくれたり、続き書いたりしてくれないかなぁ。。。&lt;br /&gt;
とりあえず、これをもって&lt;a href="http://wonderfl.kayac.com/"&gt;wonderfl&lt;/a&gt;卒業です。
&lt;/p&gt;

&lt;p&gt;
--&lt;br /&gt;
今年のエイプリルフールは静かな感じがする。&lt;br /&gt;
・・・気のせいかな。
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/xlune?a=eGJunfOapL4:y55XjXdLo08:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=eGJunfOapL4:y55XjXdLo08:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=eGJunfOapL4:y55XjXdLo08:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?i=eGJunfOapL4:y55XjXdLo08:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=eGJunfOapL4:y55XjXdLo08:fqmcRPSHgvs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=fqmcRPSHgvs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>【Blogパーツ紹介】bijin-tokei(美人時計)</title><link>http://blog.xlune.com/2009/03/blogbijintokei.html</link><category>other</category><pubDate>Tue, 10 Mar 2009 01:15:00 PDT</pubDate><guid isPermaLink="false">http://blog.xlune.com/2009/03/blogbijintokei.html</guid><description>&lt;p class="mb10"&gt;
&lt;script src="http://www.gmodules.com/ig/ifr?url=http://bijint.com/bijint.xml&amp;amp;synd=open&amp;amp;w=240&amp;amp;h=330&amp;amp;title=%E7%BE%8E%E4%BA%BA%E6%99%82%E8%A8%88%EF%BC%88bijin-tokei%EF%BC%89&amp;amp;border=%23ffffff%7C3px%2C1px+solid+%23999999&amp;amp;output=js"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;p class="mb20"&gt;&lt;a href="http://www.bijint.com/"&gt;bijin-tokei(美人時計)&lt;/a&gt;&lt;/p&gt;

&lt;p class="mb30"&gt;仕事楽しいだろーなー&lt;/p&gt;
&lt;p&gt;
--&lt;br /&gt;
ブログパーツっていうかGoogleガジェットだね。
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/xlune?a=LosZCAZWXT8:gIzPbpsJD-I:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=LosZCAZWXT8:gIzPbpsJD-I:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=LosZCAZWXT8:gIzPbpsJD-I:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?i=LosZCAZWXT8:gIzPbpsJD-I:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=LosZCAZWXT8:gIzPbpsJD-I:fqmcRPSHgvs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=fqmcRPSHgvs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>【Blogパーツ紹介】Woman</title><link>http://blog.xlune.com/2008/11/blogwoman.html</link><category>other</category><pubDate>Thu, 27 Nov 2008 19:35:04 PST</pubDate><guid isPermaLink="false">http://blog.xlune.com/2008/11/blogwoman.html</guid><description>&lt;p class="mb10"&gt;
&lt;script language="JavaScript" type="text/javascript" src="http://www.ficc.jp/woman/player/lib/js/bp.js"&gt;&lt;/script&gt;&lt;script language="JavaScript" type="text/javascript"&gt;setWomanPlayer("1c12vfw1","false");&lt;/script&gt;&lt;noscript&gt;&lt;a href="http://www.ficc.jp/woman/" target="_blank"&gt;&lt;img src="http://www.ficc.jp/woman/player/lib/img/img_flash_alt.jpg" alt="Woman / IWAMURA MANABU（岩村学）　全11曲収録　2008年11月23日発売　￥2,400(TAX IN)" width="412" height="385" border="0" title="Woman / IWAMURA MANABU（岩村学）　全11曲収録　2008年11月23日発売　￥2,400(TAX IN)" /&gt;&lt;/a&gt;&lt;/noscript&gt;
&lt;/p&gt;
&lt;p class="mb20"&gt;&lt;a href="http://www.ficc.jp/woman/"&gt;WEBデザインから生まれたCD「Woman」&lt;/a&gt;&lt;/p&gt;

&lt;p class="mb30"&gt;きれーだなぁ&lt;/p&gt;
&lt;p&gt;
--&lt;br /&gt;
ブログパーツ自体に貼り付けコード生成機能が付いてるのがまたいい。
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/xlune?a=-MGmQY6Hmso:aI-kQksIbI0:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=-MGmQY6Hmso:aI-kQksIbI0:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=-MGmQY6Hmso:aI-kQksIbI0:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?i=-MGmQY6Hmso:aI-kQksIbI0:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=-MGmQY6Hmso:aI-kQksIbI0:fqmcRPSHgvs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=fqmcRPSHgvs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>PHPからSkypeチャットを送信</title><link>http://blog.xlune.com/2008/08/phpskype.html</link><category>PHP</category><pubDate>Thu, 28 Aug 2008 23:18:08 PDT</pubDate><guid isPermaLink="false">http://blog.xlune.com/2008/08/phpskype.html</guid><description>&lt;h3&gt;RTMのリマインド機能みたいにSkypeメッセージ送りたい&lt;/h3&gt;
&lt;p class="mb30"&gt;
オレオレリマインダー的なものが必要だったので、PHPからSkypeチャットしてみたメモです。&lt;br /&gt;
&lt;/p&gt;

&lt;h3&gt;LinuxはD-Bus経由で通信&lt;/h3&gt;
&lt;p class="mb30"&gt;
調べたところ、Linux上でSkypeAPIを利用するには、アプリケーション間でやりとりを行ってくれるD-Busっていうのを使うらしい。&lt;br /&gt;
自分の場合は、すでにD-Busのパッケージが入ってたので特にすることはないが、なければ yum や apt-get で簡単に入るようだ。&lt;br /&gt;
あともちろん、Linux版のSkypeも必要。
&lt;/p&gt;

&lt;h3&gt;runlevelは5&lt;/h3&gt;
&lt;p&gt;
Skypeはテキストログインでは使えないっぽい。&lt;br /&gt;
なので、Linuxはグラフィカルログインである必要がある。&lt;br /&gt;
この時点で、ちょっとやる気が落ちてきた。&lt;br /&gt;
ちなみに、テキストログインで運用中の場合は、コマンドラインで
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;telinit 5&lt;/code&gt;&lt;/pre&gt;
&lt;p class="mb30"&gt;
と叩くとグラフィカルログインに動的に変更できる。(もちろんグラフィカルログインに必要なパッケージが揃っていれば)
&lt;/p&gt;

&lt;h3&gt;PHP DBus を入れる&lt;/h3&gt;
&lt;p&gt;
スクリプトからD-Busを利用するためには、そのための拡張やライブラリが必要です。Perlの場合は 'Net::DBus' ってのが既にあったので簡単に実装できました。&lt;br /&gt;
なので、すっきりしないですが、PHPからPerlスクリプトを叩くって方向でやってたんですが、最近&lt;a href="http://labs.gree.jp/Top/OpenSource/DBus.html"&gt;グリー株式会社&lt;/a&gt;さんって所が 'PHP DBus'っていうPHP拡張モジュールを作ってくださったので、それをありがたく使わせてもらうことにしました。
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://labs.gree.jp/Top/OpenSource/DBus.html"&gt;PHP DBus&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://labs.gree.jp/Top/OpenSource/Skype.html"&gt;PHP Skype API wrapper class&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="mb30"&gt;
さらに、Skype用のラッパークラスまで提供されています。まさに、渡りに船状態&lt;br /&gt;
インストール方法など、詳しい情報もこちらに載ってるので、それらを参考に導入しました。
&lt;/p&gt;


&lt;h3&gt;とりあえず、Linuxのターミナル上から実行テスト&lt;/h3&gt;
&lt;p&gt;
まず、Linux上でSkypeを立ち上げて、ターミナルから下記のPHPを叩く。
&lt;/p&gt;
[skype_sample.php]
&lt;pre&gt;&lt;code class="php"&gt;&amp;lt;?php
require_once 'Skype.php';
$skype = new Skype("skype_test_app", 5, true); //1.このスクリプトのアプリケーション名, 2.SkypeAPIのPROTOCOLバージョン, 3.デバッグモードスイッチ
if($skype-&gt;connect()){
  $chat_id = $skype-&gt;invoke("CHAT CREATE hoge"); //SkypeAPIを参照。SkypeID(この場合は'hoge')に対してSkypeチャットを作成する。
  $chat_id = preg_replace('/ .+$/', '', $chat_id[1]); //上の戻り値からChatIDのみを抽出(汚くてゴメン)。
  $skype-&gt;invokeChatmessage($chat_id, "メッセージだよ。"); //ChatIDを指定してメッセージを送信。
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p class="mb30"&gt;
初回は、Skypeがこのスクリプトとの通信許可を求めてくるので許可する。&lt;br /&gt;
どうだろう？うまくいけば指定先にメッセージが送信されているはず。&lt;br /&gt;
&lt;br /&gt;
現状、Skype.phpが開発中のもののようで、コンストラクタの引数の後ろ２つはスルーされる。&lt;br /&gt;
自分の場合は気になったので、手動で修正したが、そのうち修正されるはずなので問題ないと思う。
&lt;/p&gt;


&lt;h3&gt;外部、及びcronから実行テスト&lt;/h3&gt;
&lt;p&gt;
まず、普通に外部からSSHかなんかで接続して、PHPスクリプトをコンソールから叩くと
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Fatal error: Uncaught exception 'Exception' with message 'dbus_bus_get() failed'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
な感じでエラーになる。cronの場合も同じだろうと思う。&lt;br /&gt;
今現在も、これに対する正しい対処の方法が分からないんだけど、まぁ、環境変数が違うんだろーなと思って、Linux上のターミナルとSSH接続の外部コンソールの環境変数の違いを洗い出したところ、どうやら
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;DBUS_SESSION_BUS_ADDRESS&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
という環境変数をセットする必要があるようだ。&lt;br /&gt;
セットする値の方は
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;unix:abstract=/tmp/dbus-XXXXXXXXXX&lt;/code&gt;&lt;/pre&gt;
&lt;p class="mb30"&gt;
な感じで、コロコロ変わってしまいそうな値です。&lt;br /&gt;
まぁ、再起動とかしなきゃ大丈夫だと思うので、今回はハードコーディングで環境変数セットしてやります。
&lt;/p&gt;
[skype_sample.php]
&lt;pre&gt;&lt;code class="php"&gt;&amp;lt;?php

putenv("DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-XXXXXXXXXX");

require_once 'Skype.php';
$skype = new Skype("skype_test_app", 5, true); //1.このスクリプトのアプリケーション名, 2.SkypeAPIのPROTOCOLバージョン, 3.デバッグモードスイッチ
if($skype-&gt;connect()){
  $chat_id = $skype-&gt;invoke("CHAT CREATE hoge"); //SkypeAPIを参照。SkypeID(この場合は'hoge')に対してSkypeチャットを作成する。
  $chat_id = preg_replace('/ .+$/', '', $chat_id[1]); //上の戻り値からChatIDのみを抽出(汚くてゴメン)。
  $skype-&gt;invokeChatmessage($chat_id, "メッセージだよ。"); //ChatIDを指定してメッセージを送信。
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p class="mb30"&gt;
これで動くと思います。&lt;br /&gt;
必要なのは、Skypeが起動しているところのsessionアドレスなので dbus-launch とかで新規に作っても駄目っぽいです。
&lt;/p&gt;

&lt;h3&gt;まとめ&lt;/h3&gt;
&lt;p class="mb30"&gt;
Linux版のSkypeは現在バージョン2なので、PROTOCOL 5 までしか対応してないけど、そこそこ遊べそう。&lt;br /&gt;
ただ、Skypeクライアントを使わず、WebAPIのようなものがあればこんな面倒なことはしなくていいなぁ。どこかやらないかなぁ。&lt;br /&gt;
あと、現状では汎用的なものになってないので、今後も調査してみる。
&lt;/p&gt;
--&lt;br /&gt;
もっとシンプルな方法があるはず。&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/xlune?a=ZweS5ses2Dc:51Krv8E-Izw:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=ZweS5ses2Dc:51Krv8E-Izw:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=ZweS5ses2Dc:51Krv8E-Izw:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?i=ZweS5ses2Dc:51Krv8E-Izw:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=ZweS5ses2Dc:51Krv8E-Izw:fqmcRPSHgvs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=fqmcRPSHgvs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>symfony1.1.1 のカスタムタスクでPropelが利用できずに困った</title><link>http://blog.xlune.com/2008/08/symfony111_propel.html</link><category>PHP</category><pubDate>Wed, 27 Aug 2008 03:18:19 PDT</pubDate><guid isPermaLink="false">http://blog.xlune.com/2008/08/symfony111_propel.html</guid><description>&lt;h3&gt;カスタムタスクって何？&lt;/h3&gt;
&lt;p class="mb10"&gt;symfony 1.1 から導入されたsymfonyをコマンドラインから利用するためのもの。1.1以前のバッチスクリプトのようにsymfonyのライブラリにアクセスできるそうです。&lt;/p&gt;
&lt;p&gt;カスタムタスク生成コマンド&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;symfony generate:task [ネームスペース]:[タスク名]
例)
symfony generate:task hoge:fuga
&lt;/code&gt;&lt;/pre&gt;
&lt;p class="mb10"&gt;
これで lib/task の中にカスタムタスクが生成されます。&lt;br /&gt;
あとは、生成されたファイルの中の '// add code here' ってところに、自分のやりたいこと書いてくだけ。ラクチン。
&lt;/p&gt;
&lt;p&gt;実行するには下記のコマンドを叩く&lt;/p&gt;
&lt;pre class="mb30"&gt;&lt;code&gt;symfony [ネームスペース]:[タスク名]
例)
symfony hoge:fuga
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;Propel使えないよ&lt;/h3&gt;
&lt;p&gt;当然のようにPropel使おうとしたんだけど&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;No connection params set for propel&lt;/code&gt;&lt;/pre&gt;
&lt;p class="mb10"&gt;
って怒られました。&lt;br /&gt;
なんかググっても要領を得なかったので、素直にソースを調べると "sfGenerateTaskTask.class.php" に生成コードの雛型が入ってました。
&lt;/p&gt;
&lt;p class="mb10"&gt;
どうやら、Propelを利用する場合と、利用しない場合の雛型があるようで、そのスイッチオプションは 'use-database' のようです。
&lt;/p&gt;
&lt;p&gt;改めて、カスタムタスク生成コマンド&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;symfony generate:task [ネームスペース]:[タスク名] --use-database=false
例)
symfony generate:task hoge:fuga --use-database=false
&lt;/code&gt;&lt;/pre&gt;
&lt;p class="mb10"&gt;
これで、Propelが使えるカスタムタスクが生成されます。&lt;br /&gt;
なんで、'--use-database=false' なのかは僕にはわかりません。'true'じゃないと気持ち悪いんですがね。&lt;br /&gt;
まぁ、問題があればそのうち修正されるんじゃないですか。
&lt;/p&gt;
&lt;p&gt;こっちを実行するにはアプリケーション名を引数で与える必要があるようです。&lt;/p&gt;
&lt;pre class="mb30"&gt;&lt;code&gt;symfony [ネームスペース]:[タスク名] [アプリケーション名]
例)
symfony hoge:fuga frontend
&lt;/code&gt;&lt;/pre&gt;

&lt;h3&gt;生成されたカスタムタスクソース&lt;/h3&gt;
&lt;pre&gt;&lt;code class="php"&gt;&amp;lt;?php

class hogeFugaTask extends sfPropelBaseTask
{
  protected function configure()
  {
    $this-&amp;gt;namespace        = 'hoge';
    $this-&amp;gt;name             = 'fuga';
    $this-&amp;gt;briefDescription = '';
    $this-&amp;gt;detailedDescription = &amp;lt;&amp;lt;&amp;lt;EOF
The [reminder:get-source|INFO] task does things.
Call it with:

  [php symfony reminder:get-source|INFO]
EOF;
    $this-&amp;gt;addArgument('application', sfCommandArgument::REQUIRED, 'The application name');
    // add other arguments here
    $this-&amp;gt;addOption('env', null, sfCommandOption::PARAMETER_REQUIRED, 'The environment', 'dev');
    $this-&amp;gt;addOption('connection', null, sfCommandOption::PARAMETER_REQUIRED, 'The connection name', 'propel');
    // add other options here
  }

  protected function execute($arguments = array(), $options = array())
  {
    // Database initialization
    $databaseManager = new sfDatabaseManager($this-&amp;gt;configuration);
    $connection = Propel::getConnection($options['connection'] ? $options['connection'] : '');
    // add code here
  }
}
&lt;/code&gt;&lt;/pre&gt;
--&lt;br /&gt;
仕様がコロコロ変わるとつらいなぁ。&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/xlune?a=-Kd7o38kBnY:LX_F30AAZ88:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=-Kd7o38kBnY:LX_F30AAZ88:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=-Kd7o38kBnY:LX_F30AAZ88:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?i=-Kd7o38kBnY:LX_F30AAZ88:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=-Kd7o38kBnY:LX_F30AAZ88:fqmcRPSHgvs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=fqmcRPSHgvs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>【Blogパーツ紹介】サムライウエポン</title><link>http://blog.xlune.com/2008/08/blog.html</link><category>other</category><pubDate>Tue, 26 Aug 2008 21:08:03 PDT</pubDate><guid isPermaLink="false">http://blog.xlune.com/2008/08/blog.html</guid><description>&lt;p class="mb10"&gt;&lt;script src="http://download1.gamecity.ne.jp/blogparts/kunitori/samuraiWeapon.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/p&gt;
&lt;p class="mb20"&gt;&lt;a href="http://www.samurai-weapon.com/"&gt;サムライウエポン&lt;/a&gt;&lt;/p&gt;

&lt;p class="mb30"&gt;いやー、しばらくチョッカイ出してたら水攻めに遭ったよ。。。&lt;/p&gt;
--&lt;br /&gt;
ページ全体を使うBlogパーツが増えて面白い。&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/xlune?a=-lrII8TLuaE:QCZB1JIy1co:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=-lrII8TLuaE:QCZB1JIy1co:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=-lrII8TLuaE:QCZB1JIy1co:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?i=-lrII8TLuaE:QCZB1JIy1co:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=-lrII8TLuaE:QCZB1JIy1co:fqmcRPSHgvs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=fqmcRPSHgvs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>JavaScriptで迷路生成してみたよ</title><link>http://blog.xlune.com/2008/07/javascript_1.html</link><category>JavaScript</category><pubDate>Tue, 29 Jul 2008 04:01:58 PDT</pubDate><guid isPermaLink="false">http://blog.xlune.com/2008/07/javascript_1.html</guid><description>&lt;h3&gt;こんな迷路ができました&lt;/h3&gt;
&lt;p class="mb30"&gt;&lt;a href="http://labs.xlune.com/maze/"&gt;&lt;img src="http://blog.xlune.com/2008/07/29/up_images/canvas.png" alt="迷路" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;サンプルページ&lt;/h3&gt;
&lt;p class="mb20"&gt;&lt;a href="http://labs.xlune.com/maze/"&gt;迷路生成・探索サンプル&lt;/a&gt;&lt;/p&gt;
&lt;p class="mb30"&gt;
迷路の生成は&lt;a href="http://www.phys.cs.is.nagoya-u.ac.jp/~watanabe/tips/maze.html"&gt;クラスタリング&lt;/a&gt;で行ってます。&lt;br /&gt;
探索も何かアルゴリズム勉強しようと思ったんですが、難しかったので適当に作りました。。。&lt;br /&gt;
無駄な動きするけど、ゴールまでは到達するのでよし！
&lt;/p&gt;
--&lt;br /&gt;
いや、ヒマだったんでね。&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/xlune?a=Z3L2RbOXT1k:v0ELvh8zOQw:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=Z3L2RbOXT1k:v0ELvh8zOQw:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=Z3L2RbOXT1k:v0ELvh8zOQw:s9VDnicYSUo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?i=Z3L2RbOXT1k:v0ELvh8zOQw:s9VDnicYSUo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/xlune?a=Z3L2RbOXT1k:v0ELvh8zOQw:fqmcRPSHgvs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/xlune?d=fqmcRPSHgvs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description></item></channel></rss>
