<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>planet-ape&#124;blog</title>
	<atom:link href="http://www.planet-ape.net/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.planet-ape.net/blog</link>
	<description>We Love WordPress</description>
	<lastBuildDate>Sun, 20 Nov 2011 09:36:42 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Pythonかわいいよ、Python</title>
		<link>http://www.planet-ape.net/blog/archives/905</link>
		<comments>http://www.planet-ape.net/blog/archives/905#comments</comments>
		<pubDate>Sun, 20 Nov 2011 08:31:05 +0000</pubDate>
		<dc:creator>planetape</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.planet-ape.net/blog/?p=905</guid>
		<description><![CDATA[Amastagram ブログにAmazonの商品への画像付きリンクを貼るための自分ツールをずいぶん昔にPHPで作っていたのですが、Amazonの規約が変わったのか動かなくなってしまっていました。 そのままPHPを修正して [...]]]></description>
			<content:encoded><![CDATA[				<p><img src="http://www.planet-ape.net/wp-content/uploads/2011/11/amastagram.jpg" alt="" title="amastagram" width="540" height="230" class="alignnone size-full wp-image-908" /></p>
				<p><a href="http://www.planet-ape.net/amastagram/">Amastagram</a></p>
				<p>ブログにAmazonの商品への画像付きリンクを貼るための自分ツールをずいぶん昔にPHPで作っていたのですが、Amazonの規約が変わったのか動かなくなってしまっていました。<br />
				そのままPHPを修正して対応するのもつまらないので、勉強を兼ねてPythonで作り直しました。<br />
				<span id="more-905"></span><br />
				ほんとはDjango等のフレームワークを使ってみたかったのですが、動かすサーバはこのブログとおなじくhetemlなのでフレームワークを使うのは無理です。<br />
				なので、生の？Pythonをカリカリ書いたのですが、Pythonは標準モジュール群が強力なのでベース部分はけっこうサクサクかけました。<br />
				Amazonから情報を引っ張ってくるのは、以下のブログからクラスを拝借しました。</p>
				<p><a href="http://d.hatena.ne.jp/aidiary/20100116/1263647145">PythonでAmazon Product Advertising APIを使う</a></p>
				<p>取得したXMLは上記サイトにも紹介されている<a href="http://www.crummy.com/software/BeautifulSoup/">BeautifulSoup</a>を使ってパースしました。<br />
				で、出来たサイトが<a href="http://www.planet-ape.net/amastagram/">Amastagram</a>となります。<br />
				なんか制作の後半はjavascript（jquery）ばっかりいじってた気がします。</p>
				<p>・参考書籍</p>
				<div class='amahoo' rel='4797353953'></div>
				<div class='amahoo' rel='4797341815'></div>
				<p>※webアプリ編はAmazonには無いですが、大きめの本屋（ジュンク堂とか）にはまだあります。<br />
				注文すれば買えました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.planet-ape.net/blog/archives/905/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>youtubeからflvを引っこ抜いてごにょごにょする方法</title>
		<link>http://www.planet-ape.net/blog/archives/890</link>
		<comments>http://www.planet-ape.net/blog/archives/890#comments</comments>
		<pubDate>Sat, 02 Apr 2011 16:10:14 +0000</pubDate>
		<dc:creator>fumix</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[actionscript3.0]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[YouTube]]></category>
		<category><![CDATA[東京てら子]]></category>

		<guid isPermaLink="false">http://www.planet-ape.net/blog/?p=890</guid>
		<description><![CDATA[東京てら子14に参加しました。 youtubeから動画ファイル(flv)を引っこ抜いてごにょごにょする方法を発表したのですが、スライドも作らず、酷い発表でしたorz これではいかん！とkeynote買ったので、次回の発表 [...]]]></description>
			<content:encoded><![CDATA[				<p>東京てら子14に参加しました。<br />
				youtubeから動画ファイル(flv)を引っこ抜いてごにょごにょする方法を発表したのですが、スライドも作らず、酷い発表でしたorz<br />
				これではいかん！とkeynote買ったので、次回の発表こそは！<br />
				以下、まとめです。<br />
				<span id="more-890"></span></p>
				<h3>youtubeの検索</h3>
				<p>まずはyoutubeからキーワードで検索したデータを取得したいと思います。<br />
				これにはjsonやrss形式のデータとして取得できるAPIがyoutubeから提供されています。<br />
				<a href="http://code.google.com/intl/ja/apis/youtube/developers_guide_protocol.html#Searching_for_Videos">デベロッパー ガイド: Data API プロトコル -</a></p>
				<p>書かれているとおりに検索パラメータを設定してgdata.youtube.comへリクエストします。<br />
				Flash(acfionscript3)で扱うにはjson形式の方が楽だと思いますが、かなり大量の(ネストの深い)データが送られてくるので解析が結構厄介です。<br />
				ex:<a href="http://gdata.youtube.com/feeds/api/videos?start-index=1&#038;max-results=50&#038;orderby=viewCount&#038;alt=json&#038;vq=AKB48">akb48というキーワードで検索した結果</a></p>
				<p>これの解析用にjsonビュアー(エディタ)があると便利です。<br />
				<a href="http://jsonviewer.stack.hu/">http://jsonviewer.stack.hu/</a></p>
				<p>取得したjsonデータからサムネイル一覧を表示するサンプルを作ってみました。<br />
				<script type="text/javascript" src="http://wonderfl.net/blogparts/axrB/js"></script>
				<p class="ttlBpWonderfl" style="width: 465px; margin: 0; text-align: right; font-size: 11px;"><a href="http://wonderfl.net/c/axrB" title="youtube api">youtube api &#8211; wonderfl build flash online</a></p>
				<h3>動画ファイル(flv)の取得</h3>
				<p>上記のAPIから個々の動画のIDが取得できますが、youtubeから動画ファイル(flv)を取得するには別の<strong>（裏）API</strong>を使います。<br />
				<strong>http://www.youtube.com/get_video_info?video_id=ビデオID</strong></p>
				<p>ビデオIDは検索APIで取得した個々のyoutubeへのURLから抜き出しました。<br />
				これをリクエストするとデータのかたまり(URI風味)が返ってきます。</p>
				<pre>
fexp=904000&#038;shortform=True&#038;allow_embed=1&#038;ad_host_tier=1085614&#038;keywords=AKB48%E3%82%AA%E3%83%95%E3%82%A3%E3%82%B7%E3%83%A3%E3%83%ABYT%E3%83%81%E3%83%A3%E3%83%B3%E3%83%8D%E3%83%AB%2C%E3%83%98%E3%83%93%E3%83%BC%E3%83%AD%E3%83%BC%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%2CAKB48%2CAKB%2CPV%2C%E5%A4%A7%E5%B3%B6%E5%84%AA%E5%AD%90%2C%E5%89%8D%E7%94%B0%E6%95%A6%E5%AD%90%2C%E7%AF%A0%E7%94%B0%E9%BA%BB%E9%87%8C%E5%AD%90%2C%E6%9D%BF%E9%87%8E%E5%8F%8B%E7%BE%8E%2C%E6%B8%A1%E8%BE%BA%E9%BA%BB%E5%8F%8B%2C%E9%AB%98%E6%A9%8B%E3%81%BF%E3%81%AA%E3%81%BF%2C%E5%B0%8F%E5%B6%8B%E9%99%BD%E8%8F%9C%2C%E6%9F%8F%E6%9C%A8%E7%94%B1%E7%B4%80%2C%E5%AE%AE%E6%BE%A4%E4%BD%90%E6%B1%9F%2C%E6%9D%BE%E4%BA%95%E7%8F%A0%E9%87%8C%E5%A5%88%2C%E6%9D%BE%E4%BA%95%E7%8E%B2%E5%A5%88%2C%E6%B2%B3%E8%A5%BF%E6%99%BA%E7%BE%8E%2C%E9%AB%98%E5%9F%8E%E4%BA%9C%E6%A8%B9%2C%E5%B3%AF%E5%B2%B8%E3%81%BF%E3%81%AA%E3%81%BF%2C%E5%B0%8F%E9%87%8E%E6%81%B5%E4%BB%A4%E5%A5%88%2C%E5%8C%97%E5%8E%9F%E9%87%8C%E8%8B%B1%2C%E7%A7%8B%E5%85%83%E6%89%8D%E5%8A%A0%2C%E4%BD%90%E8%97%A4%E4%BA%9C%E7%BE%8E%E8%8F%9C%2C%E6%8C%87%E5%8E%9F%E8%8E%89%E4%B9%83%2C%E4%BB%B2%E5%B7%9D%E9%81%A5%E9%A6%99%2C%E5%AE%AE%E5%B4%8E%E7%BE%8E%E7%A9%82%2C%E3%83%81%E3%83%BC%E3%83%A0A%2C%E3%83%81%E3%83%BC%E3%83%A0K%2C%E3%83%81%E3%83%BC%E3%83%A0B%2CSKE48&#038;cafe_experiment_id=&#038;fmt_url_map=35%7Chttp%3A%2F%2Fv2.lscache6.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRlJOUl9FSkNOOV9KSFZF%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D35%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D57D90DF7001E8ED2DB059A6975490B405FE5FF2D.7D64AA17401DD3EBAF5B0A3E3D7AFF1299987607%26expire%3D1301234400%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%2C34%7Chttp%3A%2F%2Fv16.lscache8.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRlJOUl9FSkNOOV9KSFZF%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D34%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D164BB4EFB44A54B1FB3765B66F346F62CE3A3B19.559CA335DC8339D0D2BAB3D2E644F2FB54BB46BD%26expire%3D1301234400%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%2C18%7Chttp%3A%2F%2Fv18.lscache8.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRlJOUl9FSkNOOV9KSFZF%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D18%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D254D84294E4F8D68A269788C060E81F449CA5032.7632200AE7E393B6206FBE0C692B5BC0235D42C8%26expire%3D1301234400%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%2C5%7Chttp%3A%2F%2Fv22.lscache2.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRlJOUl9FSkNOOV9KSFZF%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D5%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3DA1748203968C1599BE0714FE0078E193B4B7ACF5.0C12FCFCFC260F767B3E14F4AD3BEC254D989802%26expire%3D1301234400%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347&#038;allow_ratings=1&#038;user_gender=m&#038;cust_gender=1&#038;track_embed=1&#038;host_language=ja&#038;cust_age=1003&#038;gut_tag=%2F4061%2Fytunknown%2Fmain&#038;fmt_list=35%2F854x480%2F9%2F0%2F115%2C34%2F640x360%2F9%2F0%2F115%2C18%2F640x360%2F9%2F0%2F115%2C5%2F320x240%2F7%2F0%2F0&#038;author=AKB48&#038;muted=0&#038;ast=site_content&#038;length_seconds=337&#038;user_age=35&#038;has_cc=False&#038;ad_channel_code_overlay=invideo_overlay_480x70_cat10%2Cafv_overlay%2Cytps_default%2Cytel_embedded%2Cyt_mpvid_AASfcYTynvKO-t3z%2Cyt_cid_395520%2Cytexp_904000&#038;ftoken=BMEhOBEQC8SQMoVNCVygJs5x08R8MTMwMTI5NjIxNw%3D%3D&#038;mpvid=AASfcYTynvKO-t3z&#038;sffb=True&#038;ad_module=http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswfbin%2Fad-vflAK0aS4.swf&#038;status=ok&#038;watermark=http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswf%2Flogo-vfl_bP6ud.swf%2Chttp%3A%2F%2Fs.ytimg.com%2Fyt%2Fswf%2Fhdlogo-vfloR6wva.swf&#038;timestamp=1301209817&#038;plid=AASfcYTyotzUMNNH&#038;ad_host=ca-host-pub-9560003102968193&#038;watch_ajax_token=OT2R7bUoNEmhvjheRGPVYvJBGb98MTMwMTI5NjIxNw%3D%3D&#038;fmt_map=35%2F854x480%2F9%2F0%2F115%2C34%2F640x360%2F9%2F0%2F115%2C18%2F640x360%2F9%2F0%2F115%2C5%2F320x240%2F7%2F0%2F0&#038;cid=395520&#038;hl=ja_JP&#038;ad_flags=0&#038;afv=True&#038;logwatch=1&#038;endscreen_module=http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswfbin%2Fendscreen-vfliijCMI.swf&#038;ad_eurl=http%3A%2F%2Fwww.youtube.com%2Fvideo%2FlkHlnWFnA0c&#038;fmt_stream_map=35%7Chttp%3A%2F%2Fv2.lscache6.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRlJOUl9FSkNOOV9KSFZF%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D35%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D57D90DF7001E8ED2DB059A6975490B405FE5FF2D.7D64AA17401DD3EBAF5B0A3E3D7AFF1299987607%26expire%3D1301234400%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%7C%7Ctc.v2.cache6.c.youtube.com%2C34%7Chttp%3A%2F%2Fv16.lscache8.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRlJOUl9FSkNOOV9KSFZF%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D34%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D164BB4EFB44A54B1FB3765B66F346F62CE3A3B19.559CA335DC8339D0D2BAB3D2E644F2FB54BB46BD%26expire%3D1301234400%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%7C%7Ctc.v16.cache8.c.youtube.com%2C18%7Chttp%3A%2F%2Fv18.lscache8.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRlJOUl9FSkNOOV9KSFZF%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D18%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D254D84294E4F8D68A269788C060E81F449CA5032.7632200AE7E393B6206FBE0C692B5BC0235D42C8%26expire%3D1301234400%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%7C%7Ctc.v18.cache8.c.youtube.com%2C5%7Chttp%3A%2F%2Fv22.lscache2.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRlJOUl9FSkNOOV9KSFZF%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D5%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3DA1748203968C1599BE0714FE0078E193B4B7ACF5.0C12FCFCFC260F767B3E14F4AD3BEC254D989802%26expire%3D1301234400%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%7C%7Ctc.v22.cache2.c.youtube.com&#038;pyv_in_related_cafe_experiment_id=&#038;avg_rating=4.09949757022&#038;leanback_module=http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswfbin%2Fleanback_module-vflcVMkEi.swf&#038;ad_logging_flag=1&#038;vq=auto&#038;targeting_video_doc_id=&#038;token=vjVQa1PpcFOPYn1MXZhSuHyseixrHJok0Hpycfs0B_E%3D&#038;thumbnail_url=http%3A%2F%2Fi1.ytimg.com%2Fvi%2FlkHlnWFnA0c%2Fdefault.jpg&#038;ad_video_pub_id=ca-pub-6219811747049371&#038;video_id=lkHlnWFnA0c&#038;title=%E3%80%90PV%E3%80%91+%E3%83%98%E3%83%93%E3%83%BC%E3%83%AD%E3%83%BC%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3+%2F+AKB48+%5B%E5%85%AC%E5%BC%8F%5D
</pre>
				<p>もう何だか分からないデータなので&#038;でsplitし、さらに=でsplitすると良い感じのobjectデータになります。</p>
				<pre>
ftoken:8Kzm9UBF0QVJJFrf3XIdwyYuDnl8MTMwMTgxNTk2Nw%3D%3D
vq:auto
mpvid:AASf6ohyqG2kkUl5
targeting_video_doc_id:
sffb:True
track_embed:1
status:ok
host_language:ja
ad_module:http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswfbin%2Fad-vflsLLPjn.swf
thumbnail_url:http%3A%2F%2Fi1.ytimg.com%2Fvi%2FlkHlnWFnA0c%2Fdefault.jpg
ad_video_pub_id:ca-pub-6219811747049371
watermark:http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswf%2Flogo-vfl_bP6ud.swf%2Chttp%3A%2F%2Fs.ytimg.com%2Fyt%2Fswf%2Fhdlogo-vfloR6wva.swf
video_id:lkHlnWFnA0c
fmt_list:35%2F854x480%2F9%2F0%2F115%2C34%2F640x360%2F9%2F0%2F115%2C18%2F640x360%2F9%2F0%2F115%2C5%2F320x240%2F7%2F0%2F0
token:vjVQa1PpcFOP8CA52yQIbIqCU7Ba3fO-MsgAFxBQbYk%3D
cust_age:1003
fmt_stream_map:35%7Chttp%3A%2F%2Fv2.lscache6.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRldQUF9FSkNOOV9PSlRJ%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D35%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D35DDC2DD5775831756FA7E46049890EE2C306C88.941B2560FB8C53D8F6BB04D720ED949F4406F587%26expire%3D1301752800%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%7C%7Ctc.v2.cache6.c.youtube.com%2C34%7Chttp%3A%2F%2Fv16.lscache8.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRldQUF9FSkNOOV9PSlRJ%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D34%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D316FD89E6B91F8952E8DCA58D7E5D0C7F40BBF7E.A023A3DC790668C3FC1FC298E472B72D208DDF7E%26expire%3D1301752800%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%7C%7Ctc.v16.cache8.c.youtube.com%2C18%7Chttp%3A%2F%2Fv18.lscache8.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRldQUF9FSkNOOV9PSlRJ%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D18%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3DB7744E4DC036A8401AC4807D087270E6495055FD.6101957B15997A7A287A20CCB66709E78C44F49D%26expire%3D1301752800%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%7C%7Ctc.v18.cache8.c.youtube.com%2C5%7Chttp%3A%2F%2Fv22.lscache2.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRldQUF9FSkNOOV9PSlRJ%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D5%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D8EBE70874078CB033EC2E64D2A2788F75C2449C7.07DFD00BD1F715CE3CF790271B4EA447C8AC3D33%26expire%3D1301752800%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%7C%7Ctc.v22.cache2.c.youtube.com
allow_embed:1
plid:AASf6ohyquVulsGc
title:%E3%80%90PV%E3%80%91+%E3%83%98%E3%83%93%E3%83%BC%E3%83%AD%E3%83%BC%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3+%2F+AKB48+%5B%E5%85%AC%E5%BC%8F%5D
gut_tag:%2F4061%2Fytunknown%2Fmain
timestamp:1301729567
author:AKB48
watch_ajax_token:TT9_MyGaIHAGRcpaj4GNuom446R8MTMwMTgxNTk2Nw%3D%3D
ad_host:ca-host-pub-9560003102968193
fmt_map:35%2F854x480%2F9%2F0%2F115%2C34%2F640x360%2F9%2F0%2F115%2C18%2F640x360%2F9%2F0%2F115%2C5%2F320x240%2F7%2F0%2F0
ad_host_tier:1085614
keywords:AKB48%E3%82%AA%E3%83%95%E3%82%A3%E3%82%B7%E3%83%A3%E3%83%ABYT%E3%83%81%E3%83%A3%E3%83%B3%E3%83%8D%E3%83%AB%2C%E3%83%98%E3%83%93%E3%83%BC%E3%83%AD%E3%83%BC%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%2CAKB48%2CAKB%2CPV%2C%E5%A4%A7%E5%B3%B6%E5%84%AA%E5%AD%90%2C%E5%89%8D%E7%94%B0%E6%95%A6%E5%AD%90%2C%E7%AF%A0%E7%94%B0%E9%BA%BB%E9%87%8C%E5%AD%90%2C%E6%9D%BF%E9%87%8E%E5%8F%8B%E7%BE%8E%2C%E6%B8%A1%E8%BE%BA%E9%BA%BB%E5%8F%8B%2C%E9%AB%98%E6%A9%8B%E3%81%BF%E3%81%AA%E3%81%BF%2C%E5%B0%8F%E5%B6%8B%E9%99%BD%E8%8F%9C%2C%E6%9F%8F%E6%9C%A8%E7%94%B1%E7%B4%80%2C%E5%AE%AE%E6%BE%A4%E4%BD%90%E6%B1%9F%2C%E6%9D%BE%E4%BA%95%E7%8F%A0%E9%87%8C%E5%A5%88%2C%E6%9D%BE%E4%BA%95%E7%8E%B2%E5%A5%88%2C%E6%B2%B3%E8%A5%BF%E6%99%BA%E7%BE%8E%2C%E9%AB%98%E5%9F%8E%E4%BA%9C%E6%A8%B9%2C%E5%B3%AF%E5%B2%B8%E3%81%BF%E3%81%AA%E3%81%BF%2C%E5%B0%8F%E9%87%8E%E6%81%B5%E4%BB%A4%E5%A5%88%2C%E5%8C%97%E5%8E%9F%E9%87%8C%E8%8B%B1%2C%E7%A7%8B%E5%85%83%E6%89%8D%E5%8A%A0%2C%E4%BD%90%E8%97%A4%E4%BA%9C%E7%BE%8E%E8%8F%9C%2C%E6%8C%87%E5%8E%9F%E8%8E%89%E4%B9%83%2C%E4%BB%B2%E5%B7%9D%E9%81%A5%E9%A6%99%2C%E5%AE%AE%E5%B4%8E%E7%BE%8E%E7%A9%82%2C%E3%83%81%E3%83%BC%E3%83%A0A%2C%E3%83%81%E3%83%BC%E3%83%A0K%2C%E3%83%81%E3%83%BC%E3%83%A0B%2CSKE48
cid:395520
shortform:True
hl:ja_JP
ad_flags:0
afv:True
muted:0
endscreen_module:http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswfbin%2Fendscreen-vflYjC_7j.swf
ast:site_content
fexp:904000
ad_eurl:http%3A%2F%2Fwww.youtube.com%2Fvideo%2FlkHlnWFnA0c
length_seconds:337
fmt_url_map:35%7Chttp%3A%2F%2Fv2.lscache6.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRldQUF9FSkNOOV9PSlRJ%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D35%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D35DDC2DD5775831756FA7E46049890EE2C306C88.941B2560FB8C53D8F6BB04D720ED949F4406F587%26expire%3D1301752800%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%2C34%7Chttp%3A%2F%2Fv16.lscache8.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRldQUF9FSkNOOV9PSlRJ%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D34%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D316FD89E6B91F8952E8DCA58D7E5D0C7F40BBF7E.A023A3DC790668C3FC1FC298E472B72D208DDF7E%26expire%3D1301752800%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%2C18%7Chttp%3A%2F%2Fv18.lscache8.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRldQUF9FSkNOOV9PSlRJ%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D18%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3DB7744E4DC036A8401AC4807D087270E6495055FD.6101957B15997A7A287A20CCB66709E78C44F49D%26expire%3D1301752800%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347%2C5%7Chttp%3A%2F%2Fv22.lscache2.c.youtube.com%2Fvideoplayback%3Fsparams%3Did%252Cexpire%252Cip%252Cipbits%252Citag%252Calgorithm%252Cburst%252Cfactor%252Coc%253AU0hPRldQUF9FSkNOOV9PSlRJ%26fexp%3D904000%26algorithm%3Dthrottle-factor%26itag%3D5%26ipbits%3D0%26burst%3D40%26sver%3D3%26signature%3D8EBE70874078CB033EC2E64D2A2788F75C2449C7.07DFD00BD1F715CE3CF790271B4EA447C8AC3D33%26expire%3D1301752800%26key%3Dyt1%26ip%3D0.0.0.0%26factor%3D1.25%26id%3D9641e59d61670347
logwatch:1
cust_gender:1
user_age:35
pyv_in_related_cafe_experiment_id:
avg_rating:4.09653092006
ad_channel_code_overlay:invideo_overlay_480x70_cat10%2Cafv_overlay%2Cytps_default%2Cytel_embedded%2Cyt_mpvid_AASf6ohyqG2kkUl5%2Cyt_cid_395520%2Cytexp_904000
allow_ratings:1
user_gender:m
leanback_module:http%3A%2F%2Fs.ytimg.com%2Fyt%2Fswfbin%2Fleanback_module-vflAPy5OS.swf
has_cc:False
ad_logging_flag:1
</pre>
				<p>この中のfmt_stream_mapにflvまでのurlが入っていますので、URLエンコードしたものを抜き出してみます。</p>
				<pre>
0:35|http://v2.lscache6.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0hPRldQUF9FSkNOOV9PSlRJ&#038;fexp=904000&#038;algorithm=throttle-factor&#038;itag=35&#038;ipbits=0&#038;burst=40&#038;sver=3&#038;signature=35DDC2DD5775831756FA7E46049890EE2C306C88.941B2560FB8C53D8F6BB04D720ED949F4406F587&#038;expire=1301752800&#038;key=yt1&#038;ip=0.0.0.0&#038;factor=1.25&#038;id=9641e59d61670347||tc.v2.cache6.c.youtube.com
1:34|http://v16.lscache8.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0hPRldQUF9FSkNOOV9PSlRJ&#038;fexp=904000&#038;algorithm=throttle-factor&#038;itag=34&#038;ipbits=0&#038;burst=40&#038;sver=3&#038;signature=316FD89E6B91F8952E8DCA58D7E5D0C7F40BBF7E.A023A3DC790668C3FC1FC298E472B72D208DDF7E&#038;expire=1301752800&#038;key=yt1&#038;ip=0.0.0.0&#038;factor=1.25&#038;id=9641e59d61670347||tc.v16.cache8.c.youtube.com
2:18|http://v18.lscache8.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0hPRldQUF9FSkNOOV9PSlRJ&#038;fexp=904000&#038;algorithm=throttle-factor&#038;itag=18&#038;ipbits=0&#038;burst=40&#038;sver=3&#038;signature=B7744E4DC036A8401AC4807D087270E6495055FD.6101957B15997A7A287A20CCB66709E78C44F49D&#038;expire=1301752800&#038;key=yt1&#038;ip=0.0.0.0&#038;factor=1.25&#038;id=9641e59d61670347||tc.v18.cache8.c.youtube.com
3:5|http://v22.lscache2.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0hPRldQUF9FSkNOOV9PSlRJ&#038;fexp=904000&#038;algorithm=throttle-factor&#038;itag=5&#038;ipbits=0&#038;burst=40&#038;sver=3&#038;signature=8EBE70874078CB033EC2E64D2A2788F75C2449C7.07DFD00BD1F715CE3CF790271B4EA447C8AC3D33&#038;expire=1301752800&#038;key=yt1&#038;ip=0.0.0.0&#038;factor=1.25&#038;id=9641e59d61670347||tc.v22.cache2.c.youtube.com
</pre>
				<p><strong>,</strong>でsplitしてみると４つデータが取得出来ますが、まだurlとしては使えません。<br />
				更に|でsplitするとようやっとflvのURLが取得出来ます。</p>
				<pre>

http://v2.lscache6.c.youtube.com/videoplayback?sparams=id%2Cexpire%2Cip%2Cipbits%2Citag%2Calgorithm%2Cburst%2Cfactor%2Coc%3AU0hPRldQUF9FSkNOOV9PSlRJ&#038;fexp=904000&#038;algorithm=throttle-factor&#038;itag=35&#038;ipbits=0&#038;burst=40&#038;sver=3&#038;signature=35DDC2DD5775831756FA7E46049890EE2C306C88.941B2560FB8C53D8F6BB04D720ED949F4406F587&#038;expire=1301752800&#038;key=yt1&#038;ip=0.0.0.0&#038;factor=1.25&#038;id=9641e59d61670347
</pre>
				<p>ただこのflvはクロスドメイン許可されていませんので取得は出来ますが、Flash内で使用してもローカルでしか動かせませんorz<br />
				さらにyoutubeから提供されているAPIを使って専用のswfをロードすれば、Flash内で再生だけでなく、bitmap等も直接取得することができるようです。<br />
				というわけで、全く意味の無い発表だったのですが、flvを直接取得して色々とゴニョゴニョしたい人はこれで色々できますね笑</p>
				<p>当日に発表したコンテンツl※FDT／FBプロジェクト<br />
				<a href='http://www.planet-ape.net/wp-content/uploads/2011/04/youtubeapi.zip'>youtubeapi</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.planet-ape.net/blog/archives/890/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Voronoi Face</title>
		<link>http://www.planet-ape.net/blog/archives/884</link>
		<comments>http://www.planet-ape.net/blog/archives/884#comments</comments>
		<pubDate>Wed, 28 Jul 2010 04:16:16 +0000</pubDate>
		<dc:creator>planetape</dc:creator>
				<category><![CDATA[blog]]></category>

		<guid isPermaLink="false">http://www.planet-ape.net/blog/?p=884</guid>
		<description><![CDATA[久々にガツっとwonderflしたのでブログで解説。 alumican_netさんのSketch of Voronoi、AquiouxさんのVoronoi Letterに続けとばかりにボロノイをテーマにしたwonderf [...]]]></description>
			<content:encoded><![CDATA[				<p>久々にガツっとwonderflしたのでブログで解説。<br />
				alumican_netさんの<a href="http://wonderfl.net/c/iNy0">Sketch of Voronoi</a>、Aquiouxさんの<a href="http://wonderfl.net/c/xKnl">Voronoi Letter</a>に続けとばかりにボロノイをテーマにしたwonderflです。<br />
				一人で勝手に「まるで<strong>ボロノイ三兄弟</strong>よ、ククク・・・」とか思ってます（笑<br />
				<span id="more-884"></span></p>
				<div style="text-align:center;width:465px;"><iframe title="Voronoi Face - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/sb5Q" width="465" height="490" style="border:1px black solid;"></iframe><a href="http://wonderfl.net/c/sb5Q" title="Voronoi Face - wonderfl build flash online">Voronoi Face &#8211; wonderfl build flash online</a></div>
				<p>ボロノイ使った画像エフェクトとしてはPhotoshopのステンドグラスフィルタがあります。<br />
				あれはある程度の間隔を保ったランダムなボロノイ母点を用意して、あとはボロノイ図生成のアルゴリズムさえあれば、比較的簡単に実現する事ができます。<br />
				しかし、それをそのまま再現してもあまり面白くないので別の方法を考えました。</p>
				<p>今回は画像のエッジに注目して、エッジ周辺は細かいボロノイ領域で描画し、それ以外の画像の変化が緩やかな箇所は大きなボロノイ領域で描画する事が出来ないだろうか？と模索しました。<br />
				ちょうど点描画を描くようなイメージです。<br />
				まずは画像のエッジ抽出ですがこれは<a href="http://d.hatena.ne.jp/flashrod/20061015">2値化グレースケールエッジ検出</a>にあったアルゴリズムをそのまま頂きました。<br />
				グレースケール化→ノイズ除去→2値化→エッジ抽出という順番で画像にエフェクトをかけていきますが、2値化の時点で閾値を変えたものをそれぞれエッジ抽出して最後にそれらの画像を副数枚重ね合わて1枚の画像にしました。<br />
				<img src="http://www.planet-ape.net/wp-content/uploads/2010/07/edge.jpg" alt="" title="edge" width="473" height="511" class="alignnone size-full wp-image-875" /></p>
				<p>この時点でなんか面白かったので、副産物的に出来たwonderflがコレ。</p>
				<div style="text-align:center;width:465px;"><iframe title="PsychedelicCam - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/12Rl" width="465" height="490" style="border:1px black solid;"></iframe><a href="http://wonderfl.net/c/12Rl" title="PsychedelicCam - wonderfl build flash online">PsychedelicCam &#8211; wonderfl build flash online</a></div>
				<p>次にエッジ周辺は細かく、それ以外ではおおざっぱにボロノイ図を描く方法ですが、これは以下のように考えました。</p>
				<ul>
				<li>エッジ抽出した画像を走査してエッジ部分の座標群とそれ以外の座標群にわける。</li>
				<li>あるエッジ以外の座標からエッジの座標までの距離を求め、最小距離のものを保存。</li>
				<li>ボロノイ母点をエッジ以外の座標群から求めるが、座標毎に保存したエッジまでの距離を元に出現確率を変化させる。</li>
				</ul>
				<p>要は、<strong>エッジまでの距離が近い座標ほど高確率で出現させる</strong>、ということです。<br />
				最初に思いついたとき「<strong>俺天才</strong>じゃね？！」とか思いましたが、まあ普通に画像処理の教科書にあると思います。<br />
				で、ボロノイ母点のみを描画したものがコレです（母点数1800）<br />
				<img src="http://www.planet-ape.net/wp-content/uploads/2010/07/points.jpg" alt="" title="points" width="473" height="511" class="alignnone size-full wp-image-879" /></p>
				<p>このボロノイ母点を元にボロノイ図を描画するのですが、自身が使っていたアルゴリズムではボロノイ領域内を任意の色で塗りつぶすのが上手くいかなかったため、kndさんの<a href="http://wonderfl.net/c/vRZn">もっちりボロノイ図</a>のアルゴリズムを使わせてもらいました（fork元です）<br />
				このおかげで<strong>実家の風呂場の模様</strong>というタグを頂くことができました。もっちり！</p>
				<p>本当は<a href="http://www.amazon.co.jp/exec/obidos/ASIN/3874397599/planetape-22/ref=nosim/">Generative Gestaltung</a>にある<a href="http://www.flong.com/projects/yearbook/">Segmentation and Symtpom [S.017]</a>のようなモノクロでのアプローチを考えていたのですが、画像の大きさ、as3の処理能力の限界などで表現に限界があり諦めました。</p>
				<div class="amahoo" rel="3874397599"></div>
				<p>インタラクティブのイの字もなくほんとにFlasherか！という感じで申し訳ないですが、ボロノイ図の描画は母点数が1000を超えるとFlashでリアルタイムに動かすのがキツイのでopenFramework等にベタ移植してwebカメラと連携とかしてみたりとかしたいです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.planet-ape.net/blog/archives/884/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DoTextAnimationコマンド(Progrssion4用)を作りました</title>
		<link>http://www.planet-ape.net/blog/archives/862</link>
		<comments>http://www.planet-ape.net/blog/archives/862#comments</comments>
		<pubDate>Thu, 31 Dec 2009 09:49:13 +0000</pubDate>
		<dc:creator>fumix</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[actionscript3.0]]></category>
		<category><![CDATA[BetweenAS3]]></category>
		<category><![CDATA[Progression]]></category>

		<guid isPermaLink="false">http://www.planet-ape.net/blog/?p=862</guid>
		<description><![CDATA[普段はいうほどFlashを触ってないので「年末年始は逆にいっぱいFlash触ろう！」的なやつの第1弾です（2弾以降続く保証は全くないです）。 ランダムにテキストがピロピロ？とアニメーションする、よく見るエフェクトをPro [...]]]></description>
			<content:encoded><![CDATA[				<p>普段はいうほどFlashを触ってないので「年末年始は逆にいっぱいFlash触ろう！」的なやつの第1弾です（2弾以降続く保証は全くないです）。<br />
				ランダムにテキストがピロピロ？とアニメーションする、よく見るエフェクトをProgression4用のコマンドとして作ってみました。<br />
				<span id="more-862"></span><br />
				<a href="http://wonderfl.net/code/31708cc4caa15c0ba3c37ab098bc33fab677de12">wonderflに実装例</a>が既にあるのでそれを元に作ろうと思ったのですが、あまり自由度が無い感じでアニメーション自体もイマイチ好みじゃないので別実装しました。</p>
				<p>ソース（zip）<br />
				・<a href='http://www.planet-ape.net/wp-content/uploads/2009/12/DoTextAnimation.as_.zip'>DoTextAnimation.as</a><br />
				※別途<a href="http://www.libspark.org/wiki/BetweenAS3/en">BetweenAS3ライブラリ</a>が必要です。</p>
				<p>以下、サンプルと使用例のasです。</p>
				<p><div style="text-align: center; width:200px; height:25px; line-height:25px; background: #ffffff;"><div id="swf408b2">This movie requires Flash Player 9.0.0</div></div>
				<script type="text/javascript">
					swfobject.embedSWF("http://www.planet-ape.net/wp-content/uploads/2009/12/Sample.swf", "swf408b2", "200", "25", "9.0.0", "http://www.planet-ape.net/kjFavmAascPn9aB/wp-content/plugins/wp-al-swfobject/expressInstall.swf", {}, {}, {});
				</script>
				</p>
				<pre class="brush: as">
package {
	import jp.progression.commands.lists.LoopList;
	import org.libspark.betweenas3.easing.Expo;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.text.TextField;

	/**
	 * @author fumix
	 */
	 [SWF(backgroundColor="#FFFFFF", frameRate="30", width="200", height="25")]
	public class Sample extends MovieClip {
		private var tf : TextField;

		public function Sample() {
			addEventListener(Event.ADDED_TO_STAGE, _initialize);
		}

		private function _initialize(event : Event) : void {
			tf = new TextField();
			tf.x = tf.y = 5;
			addChild(tf);
			var loop:LoopList = new LoopList();
			loop.addCommand(
				new DoTextAnimation(tf, "Hello World!!","welcome to www.planet-ape.net!",
					{
						step: 4,
						time: 3,
						characters: "0123456789-#",
						transition: Expo.easeInOut
					}),
				new DoTextAnimation(tf, "welcome to www.planet-ape.net!","Hello World!!",
					{
						step: 4,
						time: 3,
						delay: 1,
						//characters: "0123456789-#",
						transition: Expo.easeInOut
					})
			);
			loop.execute();
		}
	}
}
</pre>
				<p>LoopList内に2つDoTextAnimationを設置してループさせています。<br />
				第1引数が対象となるTextField、第2引数が変化前のテキスト、第3引数が変化後のテキストとなり、この3つは必須です。<br />
				それ以降のObjectはプロパティ名から何となく分かると思います（ぉ）。<br />
				Objectは全くなくても動作します。</p>
				<p>元ネタ：<a href="http://labs.hellokeita.com/2007/09/20/textanimation/">labs.hellokeita.com » TextAnimation</a><br />
				ゼロから実装できるほどas得意じゃないんで、元ネタ有りです。<br />
				はい、もうTextAnimationの元祖的な感じです。<br />
				元ネタはtransition自体も自力実装だったのですが・・・すいません、BetweenAS3使ってます。</p>
				<p>自分で言うのもなんですが、なかなか良さげなコマンドができました。<br />
				初めてまともに使えそうなコマンドになったなあ、と。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.planet-ape.net/blog/archives/862/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>超速ボロノイ図 (Fortune&#8217;s algorithm)</title>
		<link>http://www.planet-ape.net/blog/archives/856</link>
		<comments>http://www.planet-ape.net/blog/archives/856#comments</comments>
		<pubDate>Sun, 27 Dec 2009 02:34:17 +0000</pubDate>
		<dc:creator>fumix</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[actionscript3.0]]></category>
		<category><![CDATA[voronoi]]></category>
		<category><![CDATA[wonderfl]]></category>

		<guid isPermaLink="false">http://www.planet-ape.net/?p=856</guid>
		<description><![CDATA[ドロネー図を作ったのならボロノイ図も作るでしょうってことで、前回のものから間が空きましたがボロノイ図をwonderflにて作りました。 超速ボロノイ図（Fortune&#8217;s algorithm） &#8211; [...]]]></description>
			<content:encoded><![CDATA[				<p>ドロネー図を作ったのならボロノイ図も作るでしょうってことで、前回のものから間が空きましたがボロノイ図をwonderflにて作りました。<br />
				<span id="more-856"></span></p>
				<div style="text-align:center;width:465px;"><iframe title="超速ボロノイ図（Fortune's algorithm） - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/1b53ccd79d8620d235f03ed4cd9e821912879f9e" width="465" height="490" style="border:1px black solid;"></iframe><a href="http://wonderfl.net/code/1b53ccd79d8620d235f03ed4cd9e821912879f9e" title="超速ボロノイ図（Fortune's algorithm） - wonderfl build flash online">超速ボロノイ図（Fortune&#8217;s algorithm） &#8211; wonderfl build flash online</a></div>
				<p>ボロノイ図を描く方法はいくつかあるのですが、今回はFortune&#8217;s algorithmと呼ばれるアルゴリズムを用いて描画してみました。<br />
				・<a href="http://en.wikipedia.org/wiki/Fortune's_algorithm">Fortune&#8217;s algorithm &#8211; Wikipedia, the free encyclopedia</a><br />
				・<a href="http://atom.is.ocha.ac.jp/~kanenko/KOUGI/CompGeo/cpgeob.pdf">日本語の資料1（PDF）</a><br />
				・<a href="http://i-health.u-aizu.ac.jp/CompuGeo/2008/handouts/chapter4/Chapter4H.pdf">日本語の資料2（PDF）</a></p>
				<p>Fortune&#8217;s algorithmは他のボロノイ図描画アルゴリズムに比べてかなり速く、800個程度の母点を設置してもfpsが落ちること無く動作します。<br />
				と偉そうに書いてますが、下記サイトにあったasをまるパクリしています。<br />
				・<a href="http://blog.controul.com/2009/05/speedy-voronoi-diagrams-in-as3flash/">Controul > Speedy Voronoi diagrams in as3/flash</a></p>
				<p>ぶっちゃけソースが追えません（ぇー）<br />
				識者の方に解説をお願いしたいです。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.planet-ape.net/blog/archives/856/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ドロネーたん</title>
		<link>http://www.planet-ape.net/blog/archives/853</link>
		<comments>http://www.planet-ape.net/blog/archives/853#comments</comments>
		<pubDate>Mon, 23 Nov 2009 17:09:25 +0000</pubDate>
		<dc:creator>fumix</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[actionscript3.0]]></category>
		<category><![CDATA[wonderfl]]></category>

		<guid isPermaLink="false">http://www.planet-ape.net/?p=853</guid>
		<description><![CDATA[※萌え擬人化の予定はありません。 何となくドロネー図がマイブームだったので色々調べて作ってみました。 車輪の再開発どころの騒ぎじゃないですが・・・。 ドロネー図（分割） &#8211; wonderfl build fl [...]]]></description>
			<content:encoded><![CDATA[				<p><strong>※萌え擬人化の予定はありません。</strong><br />
				何となく<a href="http://ja.wikipedia.org/wiki/%E3%83%89%E3%83%AD%E3%83%8D%E3%83%BC%E5%9B%B3">ドロネー図</a>がマイブームだったので色々調べて作ってみました。<br />
				車輪の再開発どころの騒ぎじゃないですが・・・。<br />
				<span id="more-853"></span></p>
				<div style="text-align:center;width:465px;"><iframe title="ドロネー図（分割） - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/97abee157680ac24ce5596c4f99105c61e1f7571" width="465" height="490" style="border:1px black solid;"></iframe><a href="http://wonderfl.net/code/97abee157680ac24ce5596c4f99105c61e1f7571" title="ドロネー図（分割） - wonderfl build flash online">ドロネー図（分割） &#8211; wonderfl build flash online</a></div>
				<p>三角形の<a href="http://ja.wikipedia.org/wiki/%E5%A4%96%E6%8E%A5%E5%86%86">外接円</a>を求めるのをどうしようかなー、連立方程式解くのめんどうだなあ・・・とtwitterでつぶやいたら、<a href="http://wonderfl.net/code/ad8b6c5010abdb44d3e34d3a7cd06a200b35175d">さくっと作って</a>いただきました。<br />
				大感謝です。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.planet-ape.net/blog/archives/853/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FDTを日本語化する for windows</title>
		<link>http://www.planet-ape.net/blog/archives/841</link>
		<comments>http://www.planet-ape.net/blog/archives/841#comments</comments>
		<pubDate>Fri, 20 Nov 2009 18:09:54 +0000</pubDate>
		<dc:creator>fumix</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[FDT]]></category>
		<category><![CDATA[日本語化]]></category>

		<guid isPermaLink="false">http://www.planet-ape.net/?p=841</guid>
		<description><![CDATA[日本ではまだマイナーなactionscript開発環境であるFDTの日本語化に挑戦してみました。 ちなみにwindows xpの場合です。 FDTはEclipseのプラグインとしても動作しますので、あらかじめ日本語化した [...]]]></description>
			<content:encoded><![CDATA[				<p><img src="http://www.planet-ape.net/wp-content/uploads/2009/11/japnese.jpg" alt="japnese" title="japnese" width="540" height="230" class="alignnone size-full wp-image-842" /><br />
				日本ではまだマイナーなactionscript開発環境である<a href="http://www.fdt.powerflasher.com/">FDT</a>の日本語化に挑戦してみました。<br />
				ちなみにwindows xpの場合です。</p>
				<p>FDTはEclipseのプラグインとしても動作しますので、あらかじめ日本語化したEclipseにプラグインとしてFDTを導入して日本語化する方法があります。<br />
				ex.<a href="http://log.sncr.jp/FDT/6/">FDT を日本語環境で使う手順 ( Mac OS X Snow Leopard の場合 ) | FDT | log.sncr.jp</a></p>
				<p>しかしながら、すでにFDT単体として動かしている環境に入れたい！ということで、別の方法でいくことにしました。<br />
				以下手順を追って説明します。<br />
				ちなみにFDTは既にインストール済みとします。<br />
				※<a href="http://www.planet-ape.net/archives/799">FDTのインストール方法（windows）</a><br />
				<span id="more-841"></span></p>
				<h3>Pleiades（Eclipse日本語化プラグイン）の入手</h3>
				<p><a href="http://mergedoc.sourceforge.jp/">Pleiades &#8211; Eclipse プラグイン日本語化プラグイン</a><br />
				上記サイトよりPleiadesプラグインをダウンロードします。<br />
				<img src="http://www.planet-ape.net/wp-content/uploads/2009/11/download.jpg" alt="download" title="download" width="530" height="340" class="alignnone size-full wp-image-845" /><br />
				派手なボタンでダウンロードを促す「Pleiades All in One 日本語ディストリビューション」からダウンロードしてしまいがちなのですが、こちらはあくまで<strong>日本語化されたEclipseパッケージ</strong>です。<br />
				手っ取り早く日本語化されたEclipseが欲しい場合はこちらがオススメですが、今回は既にあるFDTを日本語化するので上記画像の<strong>赤枠</strong>で囲まれたところから<strong>Pleiadesプラグインのみ</strong>をダウンロードします。</p>
				<h3>PleiadesをFDTに適用する</h3>
				<p><img src="http://www.planet-ape.net/wp-content/uploads/2009/11/pluguns.jpg" alt="pluguns" title="pluguns" width="498" height="195" class="alignnone size-full wp-image-849" /><br />
				ダウンロードしたPleiadesを解凍すると上記のようなファイル構成となります（背景色キモいとかいうな）。<br />
				この中から<strong>赤枠</strong>で囲まれた2つのフォルダの<strong>中身</strong>をFDTをインストールしたフォルダ内の同名のフォルダにコピーします（下記画像参照）。</p>
				<h3>FDT 3.iniを編集する</h3>
				<p><img src="http://www.planet-ape.net/wp-content/uploads/2009/11/fdt.jpg" alt="fdt" title="fdt" width="494" height="298" class="alignnone size-full wp-image-850" /><br />
				上記はFDTをインストールしたフォルダです。<br />
				<strong>赤枠</strong>で囲ったFDT 3.iniを編集することでPleiadesを有効化させます。<br />
				ダウンロードしたPleiadesのreadmeフォルダ内にあるreadme_pleiades.txtに詳しい編集方法が記載されていますが、手っ取り早く、下記の一文をFDT 3.iniの末に追加してください。</p>
				<p>-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar<br />
				(windowsの場合)</p>
				<p>相対パスで指定する場合<br />
				-javaagent:../../../plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar<br />
				絶対パスで指定する場合<br />
				-javaagent:/Applications/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar<br />
				(macの場合)</p>
				<p>設定は以上で終了です。<br />
				FDTを立ち上げると日本語化されているはずです！<br />
				ちなみに、私の環境（windows）では最新のFDTである3.5betaでも日本語化に成功しましたが、一部エラーが出るとの話もあるようですので、あくまで自己責任でお願いします。<br />
				あ！もし失敗して環境が壊れてしまっても戻せるように必ずバックアップをとってたから作業をしてください！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.planet-ape.net/blog/archives/841/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FDTでProgression4用のテンプレートを作ってみた</title>
		<link>http://www.planet-ape.net/blog/archives/830</link>
		<comments>http://www.planet-ape.net/blog/archives/830#comments</comments>
		<pubDate>Sun, 15 Nov 2009 16:41:12 +0000</pubDate>
		<dc:creator>fumix</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[actionscript3.0]]></category>
		<category><![CDATA[FDT]]></category>
		<category><![CDATA[Progression]]></category>

		<guid isPermaLink="false">http://www.planet-ape.net/?p=830</guid>
		<description><![CDATA[FlashDevelop（FD）にあるProgression4用のテンプレート機能拡張がうらやましかったので、FDTでも同様のことが出来るようなテンプレートを作ってみました。 asエディタをFDからFDTに移行してから、 [...]]]></description>
			<content:encoded><![CDATA[				<p>FlashDevelop（FD）にある<a href="http://flabaka.com/blog/?p=1658">Progression4用のテンプレート機能拡張</a>がうらやましかったので、FDTでも同様のことが出来るようなテンプレートを作ってみました。<br />
				<span id="more-830"></span><br />
				asエディタをFDからFDTに移行してから、Progressionコンテンツを作成するときはプロジェクト生成時に作られるTemplates内のそれぞれのasファイルをコピーして使っていました。<br />
				しかしながら、さっすがに面倒になってきたので<strong>FDTの強力なテンプレート機能</strong>を使ってProgression4用のテンプレートを作りました。</p>
				<h3>ダウンロード</h3>
				<p><a href='http://www.planet-ape.net/wp-content/uploads/2009/11/templates.zip'>templates.zip</a></p>
				<p>ファイルをダウンロードして解凍後、出来たxmlをPreferences＞Templates＞Importで読み込みます。<br />
				読み込まれるとTemplatesメニューの一覧に以下のように追加されます。<br />
				<img src="http://www.planet-ape.net/wp-content/uploads/2009/11/template.png" alt="template" title="template" width="463" height="326" class="alignnone size-full wp-image-832" /><br />
				反転してるところが追加されたテンプレートです。<br />
				Descriptionが日本語とかありえねえwwwとかNameが変wwwとかの場合はEditボタンを押せば変更できますので好きなモノに変えると良いです。</p>
				<p>FDと違って新規asファイル作成時にテンプレートを選ぶことはできません。<br />
				新規asファイルはクラスかインターフェイスしか作れませんので、クラスでとりあえずasファイルを作ります。<br />
				出来たクラスファイルから記述してあるモノをすべて消して、Nameで指定した文言（ex:pcastsprite）を打てば補完候補に出てきますので、選択するとProgressionのテンプレートがドバーっと書き出されます。<br />
				packageもclassもコントラクタも全部補完された形で生成されるので、非常に便利です。</p>
				<p>FDと同じように新規作成時に自動で生成できると良いのですが・・・Antという仕組み（マクロみたいなもん？）を使えば出来そうなのですがAntをまだ分かっていないのでそこまできませんでした。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.planet-ape.net/blog/archives/830/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>QuickBox2Dの練習その2</title>
		<link>http://www.planet-ape.net/blog/archives/826</link>
		<comments>http://www.planet-ape.net/blog/archives/826#comments</comments>
		<pubDate>Sun, 25 Oct 2009 11:02:18 +0000</pubDate>
		<dc:creator>fumix</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[actionscript3.0]]></category>
		<category><![CDATA[Box2D]]></category>
		<category><![CDATA[QuickBox2D]]></category>

		<guid isPermaLink="false">http://www.planet-ape.net/?p=826</guid>
		<description><![CDATA[いっぱい出してみた QuickObjectを配列に突っ込んでforループでまわしてるんですが、これで良いのかなあ？？ 無駄にソースが長いです。 package { import flash.events.MouseEve [...]]]></description>
			<content:encoded><![CDATA[				<p><a href="http://www.planet-ape.net/ga/ga001.html"><img src="http://www.planet-ape.net/wp-content/uploads/2009/10/box2d1.jpg" alt="box2d" title="box2d" width="540" height="230" class="alignnone size-full wp-image-827" /><br />
				いっぱい出してみた</a><br />
				<span id="more-826"></span><br />
				QuickObjectを配列に突っ込んでforループでまわしてるんですが、これで良いのかなあ？？<br />
				無駄にソースが長いです。</p>
				<pre class="brush: as">
package {
	import flash.events.MouseEvent;

	import Box2D.Common.Math.b2Vec2;
	import Box2D.Dynamics.Joints.b2RevoluteJoint;

	import com.actionsnippet.qbox.QuickBox2D;
	import com.actionsnippet.qbox.QuickObject;

	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;

	[SWF(width = 640, height = 480, backgroundColor = 0x222222, frameRate = 60)]

	/**
	 * @author fumix
	 */
	public class Main extends MovieClip {
		private var sim : QuickBox2D;
		private var objectArray:Array;
		private var debugTextField : TextField;

		/**
		 * コンストラクタ
		 */
		public function Main() {
			//ボタン設置
			var resetButtonText : TextField = new TextField();
			resetButtonText.selectable = false;
			resetButtonText.text = "リセット";
			resetButtonText.autoSize = TextFieldAutoSize.LEFT;
			resetButtonText.background = true;
			resetButtonText.backgroundColor = 0x666666;
			resetButtonText.border = true;
			resetButtonText.x = 20;
			resetButtonText.y = 20;
			addChild(resetButtonText);
			resetButtonText.addEventListener(MouseEvent.CLICK, onRestButtonClick);
			//テキストエリア設置
			debugTextField = new TextField();
			debugTextField.textColor = 0xFFFFFF;
			debugTextField.multiline = true;
			debugTextField.width = 200;
			debugTextField.height = 150;
			debugTextField.x = 20;
			debugTextField.y = 40;
			addChild(debugTextField);

			//QuickBox2D初期設定
			sim = new QuickBox2D(this);
			sim.setDefault({fillColor:0x000000, lineColor:0xCCCCCC});
			sim.createStageWalls();

			//オブジェクト10個生成
			objectArray = new Array();
			for (var i : int = 0; i < 10; i++) {
				objectArray.push(creatObject());
			}
			//各ジョイントの回転角度制限
			for (i = 0;i < objectArray.length;i++) {
				resetObject(objectArray[i]);
			}
			//各ジョイントの角速度設定
			for (i = 0;i < objectArray.length;i++) {
				setWalkDir(3,objectArray[i]);
			}

			//フレーム毎の動き
			addEventListener(Event.ENTER_FRAME, onLoop);
			//スタート
			sim.start();
			sim.mouseDrag();
		}

		private function onRestButtonClick(event : MouseEvent) : void {
			//各ジョイントの回転角度制限
			for (var i:int = 0;i < objectArray.length;i++) {
				resetObject(objectArray[i]);
			}
		}

		/**
		 * オブジェクトの生成
		 */
		private function creatObject() : Object {
			sim.setDefault({fillColor:0x000000, lineColor:0xCCCCCC});
			var legA : QuickObject = sim.addBox({x:20, y:5, width:1.5, height:0.3, groupIndex:-2});
			var legB : QuickObject = sim.addBox({x:20 + 1.3, y:5, width:1.5, height:0.3, groupIndex:-2});
			var legC : QuickObject = sim.addBox({x:20 + 1.3 * 2, y:5, width:1.5, height:0.3, groupIndex:-2});
			var legD : QuickObject = sim.addBox({x:20 + 1.3 * 3, y:5, width:1.5, height:0.3, groupIndex:-2});
			//ジョイントの設置
			sim.setDefault({type:"revolute"});
			var anchorX : Number = legA.x + (legB.x - legA.x) / 2;
			var anchorY : Number = legA.y;
			var revJointA : QuickObject = sim.addJoint({enableLimit:true, a:legA.body, b:legB.body, x1:anchorX, y1:anchorY, enableMotor:true, maxMotorTorque:80});

			anchorX = legB.x + (legC.x - legB.x) / 2;
			var revJointB : QuickObject = sim.addJoint({enableLimit:true, a:legB.body, b:legC.body, x1:anchorX, y1:anchorY, enableMotor:true, maxMotorTorque:80});

			anchorX = legC.x + (legD.x - legC.x) / 2;
			var revJointC : QuickObject = sim.addJoint({enableLimit:true, a:legC.body, b:legD.body, x1:anchorX, y1:anchorY, enableMotor:true, maxMotorTorque:80});

			return {a:legA,b:legB, c:legC, d:legD, jointA:revJointA, jointB:revJointB, jointC:revJointC};
		}

		private function resetObject(obj:Object) : void {
			var j : b2RevoluteJoint;
			var legA:QuickObject = obj.a;
			var legB:QuickObject = obj.b;
			var legC:QuickObject = obj.c;
			var legD:QuickObject = obj.d;
			var revJointA:QuickObject = obj.jointA;
			var revJointB:QuickObject = obj.jointB;
			var revJointC:QuickObject = obj.jointC;

			var angleA : Number = Math.PI * Math.random();
			j = revJointA.joint as b2RevoluteJoint;
			j.SetLimits(-angleA, angleA);

			var angleB : Number = Math.PI * Math.random();
			j = revJointB.joint as b2RevoluteJoint;
			j.SetLimits(-angleB, angleB);

			var angleC : Number = Math.PI * Math.random();
			j = revJointC.joint as b2RevoluteJoint;
			j.SetLimits(-angleC, angleC);

			debugTextField.htmlText = 'A:' + angleA * 180 / Math.PI;
			debugTextField.htmlText += 'B:' + angleB * 180 / Math.PI;
			debugTextField.htmlText += 'C:' + angleC * 180 / Math.PI;

			//速度をリセット
			var v : b2Vec2 = legA.body.GetLinearVelocity();
			v.Set();
			legA.body.SetLinearVelocity(v);
			legB.body.SetLinearVelocity(v);
			legC.body.SetLinearVelocity(v);
			legD.body.SetLinearVelocity(v);
			legA.setLoc(15, 5);
			legB.setLoc(15+1.3, 5);
			legC.setLoc(15+1.3*2, 5);
			legD.setLoc(15+1.3*3, 5);
		}

		private function onLoop(event : Event) : void {
			//setWalkDir(2);
			for (var i:int = 0;i < objectArray.length;i++) {
				repeatWalk(objectArray[i]);
			}
		}

		private function setWalkDir(dir : Number,obj:Object) : void {
			var j : b2RevoluteJoint;
			var revJointA:QuickObject = obj.jointA;
			var revJointB:QuickObject = obj.jointB;
			var revJointC:QuickObject = obj.jointC;

			j = revJointA.joint as b2RevoluteJoint;
			j.SetMotorSpeed(dir);
			j = revJointB.joint as b2RevoluteJoint;
			j.SetMotorSpeed(dir * -1);
			j = revJointC.joint as b2RevoluteJoint;
			j.SetMotorSpeed(dir);
		}

		private function repeatWalk(obj:Object) : void {
			var revJointA:QuickObject = obj.jointA;
			var revJointB:QuickObject = obj.jointB;
			var revJointC:QuickObject = obj.jointC;
			var j : b2RevoluteJoint;
			j = revJointA.joint as b2RevoluteJoint;
			if(j.GetLowerLimit() > j.GetJointAngle() || j.GetUpperLimit() < j.GetJointAngle()) j.SetMotorSpeed(j.GetMotorSpeed() * -1);
			j = revJointB.joint as b2RevoluteJoint;
			if(j.GetLowerLimit() > j.GetJointAngle() || j.GetUpperLimit() < j.GetJointAngle()) j.SetMotorSpeed(j.GetMotorSpeed() * -1);
			j = revJointC.joint as b2RevoluteJoint;
			if(j.GetLowerLimit() > j.GetJointAngle() || j.GetUpperLimit() < j.GetJointAngle()) j.SetMotorSpeed(j.GetMotorSpeed() * -1);
		}
	}
}
</pre>
				</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.planet-ape.net/blog/archives/826/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>QuickBox2Dの練習</title>
		<link>http://www.planet-ape.net/blog/archives/821</link>
		<comments>http://www.planet-ape.net/blog/archives/821#comments</comments>
		<pubDate>Sun, 18 Oct 2009 10:06:32 +0000</pubDate>
		<dc:creator>fumix</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[actionscript3.0]]></category>
		<category><![CDATA[Box2D]]></category>
		<category><![CDATA[QuickBox2D]]></category>

		<guid isPermaLink="false">http://www.planet-ape.net/?p=821</guid>
		<description><![CDATA[QuickBox2Dの練習 物理シミュレーションエンジンライブラリであるBox2DFlashAS3をもっと簡単に扱うことができるQuickBox2Dライブラリを使って、なんかうにょうにょと動く物体を作ってみました。 「リ [...]]]></description>
			<content:encoded><![CDATA[				<p><a href="http://www.planet-ape.net/ga/"><img src="http://www.planet-ape.net/wp-content/uploads/2009/10/box2d.jpg" alt="box2d" title="box2d" width="540" height="230" class="alignnone size-full wp-image-822" /><br />
				QuickBox2Dの練習</a><br />
				<span id="more-821"></span><br />
				物理シミュレーションエンジンライブラリである<a href="http://sourceforge.net/projects/box2dflash">Box2DFlashAS3</a>をもっと簡単に扱うことができる<a href="http://actionsnippet.com/?page_id=1391">QuickBox2D</a>ライブラリを使って、なんかうにょうにょと動く物体を作ってみました。<br />
				「リセット」ボタンをクリックすることで、関節（？）の可動範囲がランダムでかわります。<br />
				いったいこれは何なの？という感じですが、これはまだテスト段階ですので・・・。</p>
				<p><a href="http://blog.alumican.net/2009/06/28_021753">blog.alumican.net » Blog Archive » QuickBox2D はじめの第一歩</a><br />
				<a href="http://blog.alumican.net/tag/quickbox2d">blog.alumican.net » QuickBox2D</a><br />
				上記した2エントリーが非常に参考になりました。</p>
				<p>wonderflにもQuickBox2D採用されると物理シミュレーションもののFlashコンテンツが非常に手軽に作れるんですけどねー。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.planet-ape.net/blog/archives/821/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

