<?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"
	>

<channel>
	<title>橋本商会</title>
	<atom:link href="http://shokai.org/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://shokai.org/blog</link>
	<description>なんか作ったりした記録を忘れないうちに書く</description>
	<pubDate>Thu, 28 Aug 2008 15:37:55 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>ja</language>
			<item>
		<title>ubicomp環境での複雑なプログラミング</title>
		<link>http://shokai.org/blog/archives/1888</link>
		<comments>http://shokai.org/blog/archives/1888#comments</comments>
		<pubDate>Thu, 28 Aug 2008 15:28:54 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
		
		<category><![CDATA[未分類]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=1888</guid>
		<description><![CDATA[現実世界は複雑で主観的なので、正確にモデル化できない。
つまりプログラムの中にモデルとして現実世界の情報を取り込んで、modelの状態に従って処理の手順を分岐させていく方法には無理がある。
そのため、小さくて個別に独立動 [...]]]></description>
			<content:encoded><![CDATA[<p>現実世界は複雑で主観的なので、正確にモデル化できない。<br />
つまりプログラムの中にモデルとして現実世界の情報を取り込んで、modelの状態に従って処理の手順を分岐させていく方法には無理がある。<br />
そのため、小さくて個別に独立動作するモジュールに分散させて、それぞれのモジュールが環境状態に対応する形で動く様に実装する方が良い。</p>
<h3>■モードのあるプログラム</h3>
<p>複数のモードがあるシステムを実装するとき、一番簡単な方法はglobal変数に状態名を保存しておく事だ。</p>
<p>例えば</p>
<blockquote><p>String state;<br />
state = &#8220;open_mode&#8221;;</p></blockquote>
<p>とか書いておいて、</p>
<blockquote><p>if(state == &#8220;open_mode&#8221;){<br />
// 処理<br />
}<br />
else if(state == &#8220;wait_mode&#8221;){<br />
// 処理<br />
}</p></blockquote>
<p>のようにする。</p>
<p>こういう方法はprocessingやflashで一番最初に作品を作ったりした場合に多くて、まあ楽なのでこれで良い。<br />
processingだとthreadなどが無いのでdraw()ループ内でstateを判別して回すのが楽というのもある。</p>
<p>ただ、この方法には問題がある。</p>
<ul>
<li>stateへのアクセス権限の制限が難しくて、アクセス元が多くなるとバグの元になる</li>
<li>複雑なアプリだとstateの種類自体がものすごく増える<br />
ネットがつながっていて、かつログインしていて、かつ〜〜など。人語にするのも面倒なほどのたくさんの条件から、たくさんの内部状態ができる。</li>
</ul>
<h3>■モードが無いプログラム</h3>
<p>わりと一番簡単なこの手のシステムの実装方法は、threadやtimerがある環境なら<br />
小さいthreadとその連動のためのjob-queueを用意して実装するのが楽な気がする。</p>
<p>ひたすら、<br />
（マイコン内）<br />
１．ボタンの状態を読み続けて、ボタンの状態変化した時に現在時刻とボタンの状態をqueue保存するthread<br />
２．queueを見続けて、何か処理して結果をqueueに保存するthread<br />
３．処理結果を監視し続けて、新しい結果があったらPCにシリアル通信で送り続けるthread<br />
（PC内）<br />
４．シリアルポートを読み続ける<br />
５．なんか処理する</p>
<p>のようにする。この例だと一直線に処理が流れてくるのでまったくqueueを使う必要が無いけど、例えばマイコンで無線の処理も同時にやって、センサ、PC、他のマイコンと3つ又に接続されるように拡張するには、この方法で実装しておいた方が拡張しやすい。queueを監視して処理するthreadをもう一つ足すだけで済むから。</p>
<p>この辺は実装経験の方が専攻していて理論面は最近ちょっと調べた程度なので感覚的なんだけど、<br />
ポイントは、人間の体のように実装する事だと思う。</p>
<h3>■隣を見るだけで全体が動くようにする</h3>
<p>例えば熱い物を触ったときに頭で考えるよりも速く手をひっこめるように、あるいは階段で足を踏み外しても足が勝手にバランスを整えてしまうように、中央に大きな脳があるのではなく各モジュールに小さい脳があり、それが連動する事で人体を成しているようにプログラムを考える。</p>
<p>その手や足の中の脳は体全体や部屋全体を認識しているわけではなくて、皮膚の隣にある熱いコップや、肘ぐらいまでしか認識していない。<br />
このせいでたまにカップ麺を投げて大惨事になったりするけど、最低限<br />
・隣だけ認識する<br />
・環境(外部)からの要因で自動的に動く<br />
ようになっているおかげでなんとか俺は生きている。</p>
<p>グローバル領域にstate変数を置くような実装の場合、自分の中の状態を監視してコードは実行が分岐されるが、<br />
小さなモジュールの中のコードの場合はそうではなく、モジュール自身の中に状態を持たずに環境の状態に応じて処理が分岐される。if条件文で判定される条件式は隣のモジュールへの問いかけになり、帰ってきたメッセージによってコード実行は分岐する<br />
（もちろん実行速度のためにはメッセージの結果はキャッシュしてもいいが）</p>
<p>あと、綺麗にMVCにするには中にmodelを持つわけだけど、XMLのDOMとかと違ってセンサーとか使ってると綺麗にmodelを持つ事自体がすごく難しい事がある。ようはインタフェースからの入力をmodelにするわけだけど、現実世界の現象はそんなに綺麗にmodelになるわけでもないので、むしろ入力に対して適当にレスポンスして、例外的状況をたくさん定義しておく方が良かったりする。</p>
<p>ただし、実験的で何かに特化したプログラミング環境だと、関数をオブジェクトとして扱ったりとか、そういう普通のプログラミング言語として高機能な部分が無くて、こういう実装にはできない事も多い。</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1888/feed</wfw:commentRss>
		</item>
		<item>
		<title>充電中</title>
		<link>http://shokai.org/blog/archives/1881</link>
		<comments>http://shokai.org/blog/archives/1881#comments</comments>
		<pubDate>Thu, 21 Aug 2008 16:54:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Moblog]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=1881</guid>
		<description><![CDATA[
あとは石橋さんがなんとかしてくれる
 
]]></description>
			<content:encoded><![CDATA[<div class="photo"><a href='http://shokai.org/blog/wp-content/uploads/2008/08/photo_2.jpg' title='photo_2'><img src="http://shokai.org/blog/wp-content/uploads/2008/08/photo_2-300x225.jpg" width="300" height="225" class="attachment-medium" alt="photo_2.jpg" /></a></div>
<p>あとは石橋さんがなんとかしてくれる</p>
<div class="photo-end"> </div>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1881/feed</wfw:commentRss>
		</item>
		<item>
		<title>moxa電池化</title>
		<link>http://shokai.org/blog/archives/1878</link>
		<comments>http://shokai.org/blog/archives/1878#comments</comments>
		<pubDate>Thu, 21 Aug 2008 10:03:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Moblog]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=1878</guid>
		<description><![CDATA[

 
moxaを9V電池で動くように改造するの回路を小型化した
]]></description>
			<content:encoded><![CDATA[<div class="photo"><a href='http://shokai.org/blog/wp-content/uploads/2008/08/photo.jpg' title='photo'><img src="http://shokai.org/blog/wp-content/uploads/2008/08/photo-300x225.jpg" width="300" height="225" class="attachment-medium" alt="photo.jpg" /></a></div>
</p>
<div class="photo-end"> </div>
<p><a href="http://shokai.org/blog/archives/1563">moxaを9V電池で動くように改造する</a>の回路を小型化した</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1878/feed</wfw:commentRss>
		</item>
		<item>
		<title>moxaのzigbee無線で距離を測る</title>
		<link>http://shokai.org/blog/archives/1584</link>
		<comments>http://shokai.org/blog/archives/1584#comments</comments>
		<pubDate>Mon, 11 Aug 2008 07:39:54 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
		
		<category><![CDATA[未分類]]></category>

		<category><![CDATA[moxa]]></category>

		<category><![CDATA[Talktic]]></category>

		<category><![CDATA[Tech]]></category>

		<category><![CDATA[xtel]]></category>

		<category><![CDATA[zigbee]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=1584</guid>
		<description><![CDATA[zigbee無線で距離を測った。
moxaの無線は出力を変える事ができる。これを利用して、サンプルプログラムの中にあった距離が近づいたらLEDが点灯する奴を改造し、
・複数nodeをID識別
・距離の計測の高速化
を行った。
1つのanchorと複数のnodeとの間の距離を取る。たくさんプログラムを書きこむ羽目になるのでUSBハブが無いと大変。

■しくみ
徐々に電波強度を上げていくと、「最も弱い出力で受信できた時」を距離とする事ができる。
電波強度は、無線通信のデータ本文に数値として含めておいて、受信側で文字列をparseして読み出す。
moxaはマイコン上でECMAScriptが使えるので、Stringを分解したり、Object型インスタンスに何でも突っ込んだり、配列に溜めたりするのが楽に出来るので通信プロトコルを作るのが楽だった。
■nodeのプログラム
徐々に電波強度を上げながらanchorに無線を送り続ける
node/source.js
var&#160;radio&#160;=&#160;new&#160;Object();
radio.id&#160;=&#160;2;&#160;//&#160;id:2以降がnode
radio.group&#160;=&#160;7;
var&#160;time&#160;=&#160;1;
var&#160;power_borders&#160;=&#160;new&#160;Array();
power_borders&#160;=&#160;[1,2,3,4,11,12,13,30,31];&#160;//&#160;距離の境目リスト
function&#160;loop()&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;&#160;dist_send();
}
function&#160;dist_send(){
&#160;&#160;&#160;&#160;for(p&#160;in&#160;power_borders){&#160;//&#160;power
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;radioInit(0xDEAD,&#160;radio.id,&#160;radio.group,&#160;p);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;message&#160;=&#160;&#34;power:&#34;+p+&#34;,time:&#34;+time;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;radioSend(0xFFFF,&#160;message);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;sleep(1);
&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;time++;
}
function&#160;sleep(count){
&#160;&#160;&#160;&#160;for(var&#160;i&#160;=&#160;0;&#160;i&#160;&#60;&#160;count*10;&#160;i++){
&#160;&#160;&#160;&#160;}
}
while(true){
&#160;&#160;&#160;&#160;loop();
}
■プロトコル
powerを1から徐々に上げながら送信する。
&#8220;power:2,time:15&#8243;
&#8220;power:3,time:15&#8243;
&#8220;power:4,time:15&#8243;
 という風にtimeという変数も合わせて送る事で、1セット分の無線送信試行を表している。
■距離の境目
実際にはpowerと無線の飛距離は正比例していなくて、簡単に調べた所
・power 4ぐらい → 4メートル以内ぐらい
・power 10前後 → 5~15メートルぐらい
・power 20前後 → 15～30メートルぐらい
・power 30前後 → それ以上
となっていた。なので、その境目あたりを重点的に送信するために
power_borders&#160;=&#160;[1,2,3,4,11,12,13,30,31];&#160;//&#160;距離の境目リスト
を使った。こうすると1から最大31まで全powerを試す必要が無くなり、3倍ぐらい速くなっても精度はあまり落ちない。
■anchorのプログラム
nodeからの最低出力で受信できた時のpowerを本文から取り出し、nodeのID毎に配列に保存しておく。
anchor/source.js
var&#160;radio&#160;=&#160;new&#160;Object();
radio.id&#160;=&#160;1;&#160;//&#160;nodeはid:2以降
radio.group&#160;=&#160;7;
var&#160;dist&#160;=&#160;new&#160;Object();
dist.lastTime&#160;=&#160;0;
dist.lastPower&#160;=&#160;0;
nodes&#160;=&#160;new&#160;Array(16);
nodes_init(nodes);
serialInit(9600);
radioInit(0xDEAD,&#160;radio.id,&#160;radio.group,&#160;31);
function&#160;loop(){
}
function&#160;onRadioReceive(seq,id,pan,data,rss)&#160;{
&#160;&#160;&#160;&#160;if(id&#160;&#60;&#160;2)&#160;return;&#160;//&#160;nodeからではない時
&#160;&#160;&#160;&#160;commands&#160;=&#160;data.split(&#34;,&#34;);
&#160;&#160;&#160;&#160;for(c&#160;in&#160;commands){
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tmp&#160;=&#160;c.split(&#34;:&#34;);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(tmp[0]&#160;==&#160;&#34;power&#34;)&#160;distance&#160;=&#160;tmp[1];
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(tmp[0]&#160;==&#160;&#34;time&#34;)&#160;time&#160;=&#160;tmp[1];
&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;if(nodes[id].lastTime&#160;!=&#160;time){&#160;//&#160;新しいデータの時
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;nodes[id].distance&#160;=&#160;distance;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;//&#160;nodeのidと距離を出力
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;serialSend(&#34;id:&#34;+id+&#34;,distance:&#34;+distance+&#34;,time:&#34;+time+&#34;&#165;r&#165;n&#34;);
&#160;&#160;&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;&#160;&#160;nodes[id].lastTime&#160;=&#160;time;
}
function&#160;nodes_init(nodes){
&#160;&#160;&#160;&#160;for(i&#160;=&#160;1;&#160;i&#160;&#60;&#160;nodes.length;&#160;i++){
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;var&#160;node&#160;=&#160;new&#160;Object();
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;node.lastTime&#160;=&#160;0;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;node.distance&#160;=&#160;0;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;node.id&#160;=&#160;i;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;nodes[i]&#160;=&#160;node;
&#160;&#160;&#160;&#160;}
}
function&#160;sleep(count){
&#160;&#160;&#160;&#160;for(var&#160;i&#160;=&#160;0;&#160;i&#160;&#60;&#160;count*10;&#160;i++){
&#160;&#160;&#160;&#160;}
}
while(true){
&#160;&#160;&#160;&#160;loop();
}
■無線データの受信と解析
onRadioReceive(seq,id,pan,data,rss) という関数を宣言すると無線を受信できる。
こういうデータが来るので
&#8220;power:3,time:15&#8243;
splitで : と , を分けて、nodeオブジェクトに保存する。
&#160;&#160;&#160;&#160;commands&#160;=&#160;data.split(&#34;,&#34;);
&#160;&#160;&#160;&#160;for(c&#160;in&#160;commands){
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;tmp&#160;=&#160;c.split(&#34;:&#34;);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(tmp[0]&#160;==&#160;&#34;power&#34;)&#160;distance&#160;=&#160;tmp[1];
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(tmp[0]&#160;==&#160;&#34;time&#34;)&#160;time&#160;=&#160;tmp[1];
&#160;&#160;&#160;&#160;}
&#160;&#160;&#160;&#160;
また、引数 id に送信元のIDが入っているので、あわせて保存しておく。
■シリアルポートに出力
今回はanchorからパソコンにシリアル通信で出力した。
id:2,distance:10,time:18\r\n
id:6,distance:3,time:11\r\n
id:7,distance:13,time:7\r\n
こんな感じの文字列がきて、anchorとnodeの間の距離、IDがわかる。

ちなみに、node側でさらにボタンの押下状態なんかも付けられる。
]]></description>
			<content:encoded><![CDATA[<p>zigbee無線で距離を測った。</p>
<p><a href="http://xtel.sfc.keio.ac.jp/jp/xtel.html">moxa</a>の無線は出力を変える事ができる。これを利用して、サンプルプログラムの中にあった距離が近づいたらLEDが点灯する奴を改造し、<br />
・複数nodeをID識別<br />
・距離の計測の高速化<br />
を行った。</p>
<p>1つのanchorと複数のnodeとの間の距離を取る。たくさんプログラムを書きこむ羽目になるのでUSBハブが無いと大変。<br />
<a href="http://www.flickr.com/photos/shokai/2697119204/" title="DSCF2544 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3294/2697119204_d11f387aab.jpg" width="500" height="375" alt="DSCF2544" /></a></p>
<p>■しくみ<br />
徐々に電波強度を上げていくと、「最も弱い出力で受信できた時」を距離とする事ができる。<br />
電波強度は、無線通信のデータ本文に数値として含めておいて、受信側で文字列をparseして読み出す。</p>
<p>moxaはマイコン上でECMAScriptが使えるので、Stringを分解したり、Object型インスタンスに何でも突っ込んだり、配列に溜めたりするのが楽に出来るので通信プロトコルを作るのが楽だった。</p>
<p>■nodeのプログラム<br />
徐々に電波強度を上げながらanchorに無線を送り続ける<br />
<a href="http://shokai.org/archive/moxa/0808_RadioDistance/node/source.js">node/source.js</a></p>
<blockquote><p>var&nbsp;radio&nbsp;=&nbsp;new&nbsp;Object();<br />
radio.id&nbsp;=&nbsp;2;&nbsp;//&nbsp;id:2以降がnode<br />
radio.group&nbsp;=&nbsp;7;</p>
<p>var&nbsp;time&nbsp;=&nbsp;1;<br />
var&nbsp;power_borders&nbsp;=&nbsp;new&nbsp;Array();<br />
power_borders&nbsp;=&nbsp;[1,2,3,4,11,12,13,30,31];&nbsp;//&nbsp;距離の境目リスト</p>
<p>function&nbsp;loop()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist_send();<br />
}</p>
<p>function&nbsp;dist_send(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(p&nbsp;in&nbsp;power_borders){&nbsp;//&nbsp;power<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;radioInit(0xDEAD,&nbsp;radio.id,&nbsp;radio.group,&nbsp;p);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;=&nbsp;&quot;power:&quot;+p+&quot;,time:&quot;+time;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;radioSend(0xFFFF,&nbsp;message);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;time++;<br />
}</p>
<p>function&nbsp;sleep(count){<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;count*10;&nbsp;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</p>
<p>while(true){<br />
&nbsp;&nbsp;&nbsp;&nbsp;loop();<br />
}</p></blockquote>
<p>■プロトコル<br />
powerを1から徐々に上げながら送信する。</p>
<blockquote><p>&#8220;power:2,time:15&#8243;<br />
&#8220;power:3,time:15&#8243;<br />
&#8220;power:4,time:15&#8243;</p></blockquote>
<p> という風にtimeという変数も合わせて送る事で、1セット分の無線送信試行を表している。</p>
<p>■距離の境目<br />
実際にはpowerと無線の飛距離は正比例していなくて、簡単に調べた所<br />
・power 4ぐらい → 4メートル以内ぐらい<br />
・power 10前後 → 5~15メートルぐらい<br />
・power 20前後 → 15～30メートルぐらい<br />
・power 30前後 → それ以上<br />
となっていた。なので、その境目あたりを重点的に送信するために</p>
<blockquote><p>power_borders&nbsp;=&nbsp;[1,2,3,4,11,12,13,30,31];&nbsp;//&nbsp;距離の境目リスト</p></blockquote>
<p>を使った。こうすると1から最大31まで全powerを試す必要が無くなり、3倍ぐらい速くなっても精度はあまり落ちない。</p>
<p>■anchorのプログラム<br />
nodeからの最低出力で受信できた時のpowerを本文から取り出し、nodeのID毎に配列に保存しておく。<br />
<a href="http://shokai.org/archive/moxa/0808_RadioDistance/anchor/source.js">anchor/source.js</a></p>
<blockquote><p>var&nbsp;radio&nbsp;=&nbsp;new&nbsp;Object();<br />
radio.id&nbsp;=&nbsp;1;&nbsp;//&nbsp;nodeはid:2以降<br />
radio.group&nbsp;=&nbsp;7;</p>
<p>var&nbsp;dist&nbsp;=&nbsp;new&nbsp;Object();<br />
dist.lastTime&nbsp;=&nbsp;0;<br />
dist.lastPower&nbsp;=&nbsp;0;</p>
<p>nodes&nbsp;=&nbsp;new&nbsp;Array(16);<br />
nodes_init(nodes);</p>
<p>serialInit(9600);<br />
radioInit(0xDEAD,&nbsp;radio.id,&nbsp;radio.group,&nbsp;31);</p>
<p>function&nbsp;loop(){<br />
}</p>
<p>function&nbsp;onRadioReceive(seq,id,pan,data,rss)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(id&nbsp;&lt;&nbsp;2)&nbsp;return;&nbsp;//&nbsp;nodeからではない時<br />
&nbsp;&nbsp;&nbsp;&nbsp;commands&nbsp;=&nbsp;data.split(&quot;,&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(c&nbsp;in&nbsp;commands){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;=&nbsp;c.split(&quot;:&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(tmp[0]&nbsp;==&nbsp;&quot;power&quot;)&nbsp;distance&nbsp;=&nbsp;tmp[1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(tmp[0]&nbsp;==&nbsp;&quot;time&quot;)&nbsp;time&nbsp;=&nbsp;tmp[1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(nodes[id].lastTime&nbsp;!=&nbsp;time){&nbsp;//&nbsp;新しいデータの時<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodes[id].distance&nbsp;=&nbsp;distance;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;nodeのidと距離を出力<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;serialSend(&quot;id:&quot;+id+&quot;,distance:&quot;+distance+&quot;,time:&quot;+time+&quot;&yen;r&yen;n&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodes[id].lastTime&nbsp;=&nbsp;time;<br />
}</p>
<p>function&nbsp;nodes_init(nodes){<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;nodes.length;&nbsp;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;node&nbsp;=&nbsp;new&nbsp;Object();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node.lastTime&nbsp;=&nbsp;0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node.distance&nbsp;=&nbsp;0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;node.id&nbsp;=&nbsp;i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nodes[i]&nbsp;=&nbsp;node;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</p>
<p>function&nbsp;sleep(count){<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(var&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;count*10;&nbsp;i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</p>
<p>while(true){<br />
&nbsp;&nbsp;&nbsp;&nbsp;loop();<br />
}</p></blockquote>
<p>■無線データの受信と解析<br />
onRadioReceive(seq,id,pan,data,rss) という関数を宣言すると無線を受信できる。<br />
こういうデータが来るので<br />
<blockquote>&#8220;power:3,time:15&#8243;</p></blockquote>
<p>splitで : と , を分けて、nodeオブジェクトに保存する。</p>
<blockquote><p>&nbsp;&nbsp;&nbsp;&nbsp;commands&nbsp;=&nbsp;data.split(&quot;,&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;for(c&nbsp;in&nbsp;commands){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;=&nbsp;c.split(&quot;:&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(tmp[0]&nbsp;==&nbsp;&quot;power&quot;)&nbsp;distance&nbsp;=&nbsp;tmp[1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(tmp[0]&nbsp;==&nbsp;&quot;time&quot;)&nbsp;time&nbsp;=&nbsp;tmp[1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;</p></blockquote>
<p>また、引数 id に送信元のIDが入っているので、あわせて保存しておく。</p>
<p>■シリアルポートに出力<br />
今回はanchorからパソコンにシリアル通信で出力した。</p>
<blockquote><p>id:2,distance:10,time:18\r\n<br />
id:6,distance:3,time:11\r\n<br />
id:7,distance:13,time:7\r\n</p></blockquote>
<p>こんな感じの文字列がきて、anchorとnodeの間の距離、IDがわかる。</p>
<p><a href="http://www.flickr.com/photos/shokai/2743267975/" title="距離計測、ついでにボタン状態も by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3280/2743267975_da725fcb17.jpg" width="500" height="370" alt="距離計測、ついでにボタン状態も" /></a><br />
ちなみに、node側でさらにボタンの押下状態なんかも付けられる。</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1584/feed</wfw:commentRss>
		</item>
		<item>
		<title>C# - FeliCaリーダでIDを読む</title>
		<link>http://shokai.org/blog/archives/1573</link>
		<comments>http://shokai.org/blog/archives/1573#comments</comments>
		<pubDate>Mon, 11 Aug 2008 03:00:27 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
		
		<category><![CDATA[未分類]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[FeliCa]]></category>

		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=1573</guid>
		<description><![CDATA[felicalibとC#用ラッパーを使ってFelicaのIDを読んだ。
参考：felicalib C#での利用方法

MNPして使わなくなった（財布機能1回も使ってない）auのお財布ケータイW51Sを乗せたところ。
普段 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://felicalib.tmurakam.org/">felicalib</a>とC#用ラッパーを使ってFelicaのIDを読んだ。<br />
参考：<a href="http://sourceforge.jp/projects/felicalib/wiki/CSharp">felicalib C#での利用方法</a></p>
<p><a href="http://www.flickr.com/photos/shokai/2752139164/" title="Reading felica ID by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3049/2752139164_cee0cdb721_o.png" width="265" height="276" alt="Reading felica ID" /></a><br />
MNPして使わなくなった（財布機能1回も使ってない）auのお財布ケータイW51Sを乗せたところ。</p>
<p>普段使ってるSuicaを読むと違うIDが出てきた。</p>
<p>■作ったもの<br />
<a href="http://shokai.org/archive/cs3.0/0808_Felica/080811_Felica.zip">080811_Felica.zip</a> (VisualStudio2008 / C#3.0)<br />
<a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=333325fd-ae52-4e35-b531-508d977d32a6&#038;DisplayLang=ja">.NET Framework3.5</a>が必要</p>
<p>■準備<br />
RC-S320を使った。付属のCDからドライバだけインストールしておく。</p>
<div class="amazlet-box" style="margin-bottom:0px;">
<div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B0009YVAW4/shokai-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/312WXC455AL._SL160_.jpg" alt="SONY RC-S320 非接触ICカードリーダ/ライタ PaSoRi 「パソリ」" style="border: none;" /></a></div>
<div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%">
<div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B0009YVAW4/shokai-22/ref=nosim/" name="amazletlink" target="_blank">SONY RC-S320 非接触ICカードリーダ/ライタ PaSoRi 「パソリ」</a>
<div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/B0009YVAW4/shokai-22/ref=nosim/" title="SONY RC-S320 非接触ICカードリーダ/ライタ PaSoRi 「パソリ」" target="_blank">amazlet</a> at 08.08.11</div>
</div>
<div class="amazlet-detail">ソニー <br />売り上げランキング: 99</div>
<div class="amazlet-review" style="margin-top:10px; margin-bottom:10px">
<div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-5.gif" alt="4.5" /></div>
<p><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4" /> あれば便利かもしれないが、無くても困らない製品<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 便利アイテムです<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 便利です。<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 飛行機に乗れなくてもマイルが貯まる<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4" /> edyを常用してる人ならお勧め</div>
<div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B0009YVAW4/shokai-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div>
</div>
<div class="amazlet-footer" style="clear: left"></div>
</div>
<p><a href="http://felicalib.tmurakam.org/">felicalib</a>をダウンロードしてくる。中にC#用ラッパー（FelicaLib.cs）も入っているので自分のプロジェクトに追加。<br />
felicalib.dllは「参照の追加」から使うのではなく、bin/Debug, bin/Releaseなどにファイルを直接コピペして置く。実行時にFelicaLib.csからP/Invokeで読み込まれる。</p>
<p>■コード<br />
ラッパーを読み込んで</p>
<blockquote><p>using&nbsp;FelicaLib;</p></blockquote>
<p>IDmを読むとbyte配列が来るので、Stringに直す。</p>
<blockquote><p>try<br />
{<br />
&nbsp;&nbsp;using&nbsp;(Felica&nbsp;felica&nbsp;=&nbsp;new&nbsp;Felica())<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;felica.Polling(0xFFFF);<br />
&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;data&nbsp;=&nbsp;felica.IDm();<br />
&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;id&nbsp;=&nbsp;&quot;&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;data.Length;&nbsp;i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;+=&nbsp;data[i].ToString(&quot;X2&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine(id);&nbsp;//&nbsp;ID出力<br />
&nbsp;&nbsp;}<br />
}<br />
catch&nbsp;(Exception&nbsp;ex)<br />
{<br />
&nbsp;&nbsp;Console.Error.WriteLine(ex.Message);<br />
}</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1573/feed</wfw:commentRss>
		</item>
		<item>
		<title>moxaを9V電池で動くように改造する</title>
		<link>http://shokai.org/blog/archives/1563</link>
		<comments>http://shokai.org/blog/archives/1563#comments</comments>
		<pubDate>Sat, 09 Aug 2008 16:45:24 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
		
		<category><![CDATA[未分類]]></category>

		<category><![CDATA[battery]]></category>

		<category><![CDATA[gemsbok]]></category>

		<category><![CDATA[moxa]]></category>

		<category><![CDATA[Tech]]></category>

		<category><![CDATA[xtel]]></category>

		<category><![CDATA[電子工作]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=1563</guid>
		<description><![CDATA[基本はUSB給電だが、内部にレギュレータがあるので9V電池をそのまま接続するだけで使えるようになる。

■電源ケーブルを付け直す
上の写真にもある赤いケーブルが、PCのUSB端子からの5V給電をmoxaのレギュレータに送 [...]]]></description>
			<content:encoded><![CDATA[<p>基本はUSB給電だが、内部にレギュレータがあるので9V電池をそのまま接続するだけで使えるようになる。</p>
<p><a href="http://www.flickr.com/photos/shokai/2744841954/" title="DSCF3388 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3032/2744841954_33d4d95b74.jpg" width="500" height="375" alt="DSCF3388" /></a></p>
<p>■電源ケーブルを付け直す<br />
上の写真にもある赤いケーブルが、PCのUSB端子からの5V給電をmoxaのレギュレータに送る役目をしている。<br />
（上の写真では既に付け直した後だが）最初は基盤裏側に付けてあるのだけど、今回は下方向にピンヘッダを付けたかったので基盤表側につけなおした</p>
<p>基盤裏のピンヘッダ。赤い電源ケーブルははんだごてを当てながら抜けば簡単に外せる<br />
<a href="http://www.flickr.com/photos/shokai/2744831158/" title="DSCF3376 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3296/2744831158_76034ff2fa.jpg" width="500" height="375" alt="DSCF3376" /></a></p>
<p>表側に付け直した。<br />
<a href="http://www.flickr.com/photos/shokai/2743989577/" title="DSCF3372 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3240/2743989577_b665df28e8.jpg" width="500" height="375" alt="DSCF3372" /></a></p>
<p>この状態で、まずは一回moxa基盤そのものがパソコンから認識できるかどうか確かめたりしておいた方が良い。電源まわりはバグの元なので。</p>
<p>■9V電池を接続する<br />
図のように接続する。9Vのプラスとマイナスを間違えないように注意。<br />
<a href="http://www.flickr.com/photos/shokai/2747349568/" title="9v-moxa by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3245/2747349568_d48246c045.jpg" width="500" height="418" alt="9v-moxa" /></a></p>
<p>外部にセンサーなどを接続する時は、右の3.3V出力を利用する。左側のUSBからの5V出力は当然動いていないので使えない。<br />
あと、左側にもGNDがあるのでうまく利用すると良いかも。</p>
<p>今回作った基盤は裏から見るとこうなっている。電池からの給電をON/OFFするスイッチを、電池+→VIN間に付けた。<br />
<a href="http://www.flickr.com/photos/shokai/2744842854/" title="DSCF3389 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3092/2744842854_4b30d4df8a.jpg" width="500" height="375" alt="DSCF3389" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1563/feed</wfw:commentRss>
		</item>
		<item>
		<title>iPhoneからテスト</title>
		<link>http://shokai.org/blog/archives/1560</link>
		<comments>http://shokai.org/blog/archives/1560#comments</comments>
		<pubDate>Tue, 05 Aug 2008 02:22:11 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
		
		<category><![CDATA[未分類]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/archives/1560</guid>
		<description><![CDATA[あーあー
]]></description>
			<content:encoded><![CDATA[<p>あーあー</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1560/feed</wfw:commentRss>
		</item>
		<item>
		<title>Pileus is exhibiting at Campus Party08</title>
		<link>http://shokai.org/blog/archives/1559</link>
		<comments>http://shokai.org/blog/archives/1559#comments</comments>
		<pubDate>Wed, 30 Jul 2008 13:34:50 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
		
		<category><![CDATA[未分類]]></category>

		<category><![CDATA[CampusParty]]></category>

		<category><![CDATA[Event]]></category>

		<category><![CDATA[Pileus]]></category>

		<category><![CDATA[Spain]]></category>

		<category><![CDATA[Valencia]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=1559</guid>
		<description><![CDATA[→ Campus Party（バレンシア）に行ってきます
昨日からPileus展示してます


#flickr_badge_source_txt {padding:0; font: 11px Arial, Helvetica, Sans serif; color:#666666;}
#flickr_badge_icon {display:block !important; margin:0 !important; border: 1px solid rgb(0, 0, 0) !important;}
#flickr_icon_td {padding:0 5px 0 0 !important;}
.flickr_badge_image {text-align:center !important;}
.flickr_badge_image img {border: 1px solid black !important;}
#flickr_badge_uber_wrapper {width:150px;}
#flickr_www {display:block; text-align:center; padding:0 10px 0 10px !important; font: 11px Arial, Helvetica, Sans serif !important; color:#3993ff !important;}
#flickr_badge_uber_wrapper a:hover,
#flickr_badge_uber_wrapper a:link,
#flickr_badge_uber_wrapper a:active,
#flickr_badge_uber_wrapper [...]]]></description>
			<content:encoded><![CDATA[<p>→ <a href="http://shokai.org/blog/archives/1558">Campus Party（バレンシア）に行ってきます</a></p>
<p>昨日からPileus展示してます</p>
<p><!-- Start of Flickr Badge --></p>
<style type="text/css">
#flickr_badge_source_txt {padding:0; font: 11px Arial, Helvetica, Sans serif; color:#666666;}
#flickr_badge_icon {display:block !important; margin:0 !important; border: 1px solid rgb(0, 0, 0) !important;}
#flickr_icon_td {padding:0 5px 0 0 !important;}
.flickr_badge_image {text-align:center !important;}
.flickr_badge_image img {border: 1px solid black !important;}
#flickr_badge_uber_wrapper {width:150px;}
#flickr_www {display:block; text-align:center; padding:0 10px 0 10px !important; font: 11px Arial, Helvetica, Sans serif !important; color:#3993ff !important;}
#flickr_badge_uber_wrapper a:hover,
#flickr_badge_uber_wrapper a:link,
#flickr_badge_uber_wrapper a:active,
#flickr_badge_uber_wrapper a:visited {text-decoration:none !important; background:inherit !important;color:#3993ff;}
#flickr_badge_wrapper {background-color:#ffffff;border: solid 1px #000000}
#flickr_badge_source {padding:0 !important; font: 11px Arial, Helvetica, Sans serif !important; color:#666666 !important;}
</style>
<table id="flickr_badge_uber_wrapper" cellpadding="0" cellspacing="10" border="0">
<tr>
<td><a href="http://www.flickr.com" id="flickr_www">www.<strong style="color:#3993ff">flick<span style="color:#ff1c92">r</span></strong>.com</a><br />
<table cellpadding="0" cellspacing="10" border="0" id="flickr_badge_wrapper">
<script type="text/javascript" src="http://www.flickr.com/badge_code_v2.gne?show_name=1&#038;count=5&#038;display=latest&#038;size=m&#038;layout=v&#038;source=all_tag&#038;tag=pileustagged&#038;user=51753258%40N00"></script></p>
<tr>
<td id="flickr_badge_source" valign="center" align="center">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td id="flickr_badge_source_txt">More <a href="http://www.flickr.com/photos/tags/pileustagged/">photos or video tagged with pileustagged</a> on Flickr</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
<p><!-- End of Flickr Badge --></p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1559/feed</wfw:commentRss>
		</item>
		<item>
		<title>Campus Party（バレンシア）に行ってきます</title>
		<link>http://shokai.org/blog/archives/1558</link>
		<comments>http://shokai.org/blog/archives/1558#comments</comments>
		<pubDate>Sat, 26 Jul 2008 20:06:44 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
		
		<category><![CDATA[未分類]]></category>

		<category><![CDATA[Event]]></category>

		<category><![CDATA[Pileus]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=1558</guid>
		<description><![CDATA[Campus Paryというイベントに、Pileusの展示をしに行きます。俺はスペイン初めて。
→ Campus Futur
開会式が夜中にあったりとか、かなり楽しそう。あとスペインなのでご飯がおいしそう。
（スペイン語 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.campus-party.es/">Campus Pary</a>というイベントに、<a href="http://www.pileus.net/">Pileus</a>の展示をしに行きます。俺はスペイン初めて。<br />
→ <a href="http://www.campus-party.es/index.php3?SEC=134">Campus Futur</a></p>
<p>開会式が夜中にあったりとか、かなり楽しそう。あとスペインなのでご飯がおいしそう。<br />
（スペイン語のサイトだけど右側の国旗から英語に切り替えられます）</p>
<p>なのでこれから成田空港に向かうわけです</p>
<p>あと夏休みは、9月に別プロジェクトで展示があるのでその準備もあったりで色々と忙しくなるぞ<br />
ほあああ</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1558/feed</wfw:commentRss>
		</item>
		<item>
		<title>chumby用wassrウィジェット</title>
		<link>http://shokai.org/blog/archives/1557</link>
		<comments>http://shokai.org/blog/archives/1557#comments</comments>
		<pubDate>Mon, 21 Jul 2008 15:10:14 +0000</pubDate>
		<dc:creator>shokai</dc:creator>
		
		<category><![CDATA[未分類]]></category>

		<category><![CDATA[chumby]]></category>

		<category><![CDATA[Tech]]></category>

		<category><![CDATA[wassr]]></category>

		<guid isPermaLink="false">http://shokai.org/blog/?p=1557</guid>
		<description><![CDATA[twitter widgetやfavotter widgetと同じく、chumby用のwassrのウィジェットを作った
→ ここからdownload

使い方はUSBメモリから起動で。profile.xmlのuserna [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://shokai.org/blog/archives/1538">twitter widget</a>や<a href="http://shokai.org/blog/archives/1539">favotter widget</a>と同じく、chumby用の<a href="http://wassr.jp/">wassr</a>のウィジェットを作った</p>
<p>→ <a href="http://shokai.org/archive/chumby/0807_wassr/080706_wassr-widget.zip">ここからdownload</a></p>
<p><a href="http://www.flickr.com/photos/shokai/2679947431/" title="DSCF2476 by shokai, on Flickr"><img src="http://farm4.static.flickr.com/3014/2679947431_766eda1710.jpg" width="500" height="375" alt="DSCF2476" /></a></p>
<p>使い方は<a href="http://shokai.org/blog/archives/1534">USBメモリから起動</a>で。profile.xmlのusernameの所を適当に修正してください</p>
<p>APIがtwitterとほぼ同じなので簡単だった。ただ顔アイコンが<br />
http://wassr.jp/user/ユーザID/profile_img.png.128<br />
などで128&#215;128のアイコンが取れるんだけど（サイズは色々指定できて、GIF形式などもある）<br />
Flashへの読み込みがすごく遅い。理由はよく分からない。小さいの指定しても駄目。<br />
修正できなかったのでそのまま公開しました</p>
<p>wassrはイイネ/イラネやchannelなどがあるので、それらの機能もそのうち入れてバージョンアップしたらまた公開しますね</p>
]]></content:encoded>
			<wfw:commentRss>http://shokai.org/blog/archives/1557/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
