<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CUIAQX4zeyp7ImA9WhFSFk8.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821</id><updated>2013-06-19T15:32:20.083+09:00</updated><category term="flot" /><category term="swing" /><category term="Quartz Composer" /><category term="WiiRemoteJ" /><category term="technique" /><category term="WebKit" /><category term="grwolstyle" /><category term="bluecove" /><category term="BazAR" /><category term="I2C" /><category term="hadoop" /><category term="Bullet" /><category term="applescript" /><category term="grails" /><category term="Dashcode" /><category term="WiiRemoteFramework" /><category term="timbrre" /><category term="ARQ" /><category term="apache tomcat" /><category term="CoGe" /><category term="GWT on Rails" /><category term="jsc" /><category term="Plask" /><category term="Mono" /><category term="eclipse" /><category term="Homebrew" /><category term="LINQ" /><category term="fastcgi" /><category term="NyARToolkit" /><category term="Project Management" /><category term="RDF" /><category term="java" /><category term="small talk" /><category term="AIR" /><category term="XML" /><category term="NSBezierPath" /><category term="sysex" /><category term="Automator" /><category term="ADT7410" /><category term="iPhone" /><category term="firmata" /><category term="OpenRDF_Sesame" /><category term="MobileSafari" /><category term="Soundflower" /><category term="Ustream Producer" /><category term="ruby" /><category term="SPARQL" /><category term="SproutCore" /><category term="GWT" /><category term="OpenGL Shader Builder" /><category term="javascript" /><category term="Xcode" /><category term="google-blockly" /><category term="4store" /><category term="OpenCV" /><category term="webfonts" /><category term="MMD" /><category term="NXT2.0" /><category term="ARTK_MMD" /><category term="twitter+fusen" /><category term="GWT-Ext" /><category term="scratch" /><category term="graphviz" /><category term="english homework" /><category term="apache felix" /><category term="Arduino" /><category term="OAuthConsumer.framework" /><category term="CoreImage" /><category term="ust" /><category term="jogl" /><category term="CoreLocation" /><category term="canvas" /><category term="LegNXTframework" /><category term="Ruby on Rails" /><category term="GSL" /><category term="cocos2d" /><category term="OSGi" /><category term="raptor2" /><category term="apache axis" /><category term="ArtPig" /><category term="NSArrayController" /><category term="libdecodeqr" /><category term="Cocoa-Ruby" /><category term="C#" /><category term="MMD_DM" /><category term="MeCab" /><category term="ARToolkit" /><category term="NyMmd" /><category term="raspberry-pi" /><category term="WebGL" /><category term="XBee" /><category term="Cocoa" /><category term="GLSL" /><category term="COLLADA" /><category term="serialport-serever" /><category term="MPL115A2" /><category term="coca" /><category term="Core Image Fun House" /><category term="linda" /><title>いー ドット ぷりんとすたっくとれーす</title><subtitle type="html">高確率で思い込みによる説明．間違っていることが多い．/「無知だったり、勘違いしていたり、底意を押しつけたり、いいかげんだったり、噂や疑惑を信じていたりして、狂気じみてさえいるかもしれません」( http://bit.ly/gs23zg )</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://edotprintstacktrace.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>466</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/KsjdY" /><feedburner:info uri="blogspot/ksjdy" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CUQFR388eSp7ImA9WhFSEkw.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-1381000007084154346</id><published>2013-06-13T22:28:00.001+09:00</published><updated>2013-06-14T21:35:16.171+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-06-14T21:35:16.171+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="sysex" /><category scheme="http://www.blogger.com/atom/ns#" term="MPL115A2" /><category scheme="http://www.blogger.com/atom/ns#" term="ADT7410" /><category scheme="http://www.blogger.com/atom/ns#" term="linda" /><category scheme="http://www.blogger.com/atom/ns#" term="firmata" /><category scheme="http://www.blogger.com/atom/ns#" term="I2C" /><title>ruby gem 'aruduino_firmata'のsysexを用いたI2C通信(温度センサと気圧センサ)でのlinda-arduino-sensor的なもの</title><content type="html">&lt;blockquote class=myInsert&gt;2013/06/14-18:11JST u2sで負の値の求め方の間違いを修正(緑色)&lt;br /&gt;
&lt;blockquote&gt;&lt;a href="http://1.bp.blogspot.com/-TMCNxdezV0o/Ubrf5ZYOFfI/AAAAAAAAA20/W6lwXQGCH3M/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-14+18.17.45.png" imageanchor="1" &gt;&lt;img border="0" src="http://1.bp.blogspot.com/-TMCNxdezV0o/Ubrf5ZYOFfI/AAAAAAAAA20/W6lwXQGCH3M/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-14+18.17.45.png" /&gt;&lt;/a&gt;&lt;br /&gt;
気圧の値も妥当なものになった（と思う）．&lt;br /&gt;
&lt;/blockquote&gt;2013/06/14-13:30JST 返り値のバイト数が要求バイト数と合っていないことがあるのでその場合スキップするように修正(赤色)&lt;br /&gt;
&lt;/blockquote&gt;これまでの記事（&lt;a href="http://edotprintstacktrace.blogspot.jp/2013/06/ruby-gem-arduinofirmata-sysex-adt7410.html"&gt;APT7410&lt;/a&gt;と&lt;a href="http://edotprintstacktrace.blogspot.jp/2013/06/ruby-gem-arduinofirmata-sysex-mpl115a2.html"&gt;MPL115A2&lt;/a&gt;）でのコードを利用したlinda-arduino-sensor的なもの&lt;br /&gt;
&lt;blockquote class=myInsert&gt;&lt;pre&gt;#!/usr/bin/env ruby 
require 'rubygems'
require 'sinatra/rocketio/linda/client'
require 'arduino_firmata'
$stdout.sync = true

url   = ENV["LINDA_BASE"]  || ARGV.shift || "http://localhost:5000"
space = ENV["LINDA_SPACE"] || "test"
linda = Sinatra::RocketIO::Linda::Client.new url
ts = linda.tuplespace[space]

linda.io.on :connect do  ## RocketIO's "connect" event
  puts "connect!! &amp;lt;#{linda.io.session}&gt; (#{linda.io.type})"
end

linda.io.on :disconnect do
  puts "RocketIO disconnected.."
end

STRING_DATA= 0x71
I2C_REQUEST= 0x76
I2C_REPLY= 0x77
I2C_CONFIG= 0x78

_WRITE= 0x00
_READ= 0x08

ADDRESS_ADT7410= 0x48
ADDRESS_MPL115A2= 0x60

#MPL115A2 coefficients
a0= b1= b2= c12= 0.0

def readByte(data, pos)
  return data[pos]+data[pos+1]*(1&amp;lt;&amp;lt;7)
end

def readData(msb, lsb)
  return (msb&amp;lt;&amp;lt;8)+lsb
end

def u2s(v)
  return (v&amp;lt;(1&amp;lt;&amp;lt;15)) ? v : &lt;span style="color:green;"&gt;v-(1&amp;lt;&amp;lt;15)*2&lt;/span&gt;
end

def bytes2str(bytes)
  ret= ''
  bytes.each do |o|
    ret+= o.chr
  end
  return ret;
end

def decodeData(data)
  ret= {}
  ret[:address]= readByte(data, 0) if (data.length&gt;1)
  ret[:register]= readByte(data, 2) if (data.length&gt;3)
  ary= [];
  i= 4
  while i+1&amp;lt;data.length
    ary.push( readByte(data, i))
    i+= 2
  end
  ret[:data]= ary
  return ret;
end

arduino = ArduinoFirmata.connect ENV["ARDUINO"], :nonblock_io =&gt; true

arduino.on :sysex do |command, data|
  #puts "command : #{command}"
  #puts "data    : #{data.inspect}"
  data= (command == STRING_DATA) ? bytes2str(data) : decodeData(data)
  if command == STRING_DATA
    p data
  elsif command == I2C_REPLY
    if data[:address] == ADDRESS_ADT7410
      &lt;span style='color:red'&gt;if data[:data].length == 2&lt;/span&gt;
        tout= u2s(readData(data[:data][0], data[:data][1])) / (1&amp;lt;&amp;lt;7).to_f
        ts.write ["sensor", "temperature", tout]
      &lt;span style='color:red'&gt;end&lt;/span&gt;
    elsif data[:address] == ADDRESS_MPL115A2
      if data[:register] == 0x04
        &lt;span style='color:red'&gt;if data[:data].length == 8&lt;/span&gt;
          a0 = u2s(readData(data[:data][0], data[:data][1]))/(1&amp;lt;&amp;lt; 3).to_f
          b1 = u2s(readData(data[:data][2], data[:data][3]))/(1&amp;lt;&amp;lt;13).to_f
          b2 = u2s(readData(data[:data][4], data[:data][5]))/(1&amp;lt;&amp;lt;14).to_f
          c12= u2s(readData(data[:data][6], data[:data][7]))/(1&amp;lt;&amp;lt;24).to_f
        &lt;span style='color:red'&gt;end&lt;/span&gt;
      elsif data[:register] == 0x00
        &lt;span style='color:red'&gt;if data[:data].length == 4&lt;/span&gt;
          padc= readData(data[:data][0], data[:data][1])&gt;&gt;6
          tadc= readData(data[:data][2], data[:data][3])&gt;&gt;6
          pcomp= a0 + ( b1 + c12 * tadc ) * padc + b2 * tadc
          pout= pcomp * 650.0/1023.0 + 500.0
          ts.write ["sensor", "pressure", pout] if padc&gt;0
        &lt;span style='color:red'&gt;end&lt;/span&gt;
      end
    end
  end
end

#i2c enable
arduino.sysex I2C_CONFIG, [0x00, 0x00]

#APT7410 16bit mode
arduino.sysex I2C_REQUEST, [ADDRESS_ADT7410, _WRITE, 0x03, 0x00, 0x00, 0x01]

#MPL115A2 coefficients
arduino.sysex I2C_REQUEST, [ADDRESS_MPL115A2, _READ, 0x04, 0x00, 0x08, 0x00]

loop do
  arduino.sysex I2C_REQUEST, [ADDRESS_ADT7410, _READ, 0x00, 0x00, 0x02, 0x00]

  arduino.sysex I2C_REQUEST, [ADDRESS_MPL115A2, _WRITE, 0x12, 0x00, 0x01, 0x00]
  sleep 0.02
  arduino.sysex I2C_REQUEST, [ADDRESS_MPL115A2, _READ, 0x00, 0x00, 0x04, 0x00]

  sleep 1
end
&lt;/pre&gt;&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/uiCMh0QhOWw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/1381000007084154346/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=1381000007084154346" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/1381000007084154346?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/1381000007084154346?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/uiCMh0QhOWw/i2clinda-arduino-sensor.html" title="ruby gem 'aruduino_firmata'のsysexを用いたI2C通信(温度センサと気圧センサ)でのlinda-arduino-sensor的なもの" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-TMCNxdezV0o/Ubrf5ZYOFfI/AAAAAAAAA20/W6lwXQGCH3M/s72-c/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-14+18.17.45.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2013/06/i2clinda-arduino-sensor.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQARH0yfyp7ImA9WhFSEkw.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-722725617331114714</id><published>2013-06-13T02:31:00.000+09:00</published><updated>2013-06-14T21:35:45.397+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-06-14T21:35:45.397+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="sysex" /><category scheme="http://www.blogger.com/atom/ns#" term="MPL115A2" /><category scheme="http://www.blogger.com/atom/ns#" term="Arduino" /><category scheme="http://www.blogger.com/atom/ns#" term="firmata" /><category scheme="http://www.blogger.com/atom/ns#" term="I2C" /><title>ruby gem 'arduino_firmata' の sysex を使ってMPL115A2使用の圧力モジュールから値を取得する</title><content type="html">&lt;blockquote class=myInsert&gt;2013/06/14-18:11JST u2sで負の値の求め方の間違いを修正(緑色)&lt;br /&gt;
&lt;blockquote&gt;&lt;a href="http://1.bp.blogspot.com/-TMCNxdezV0o/Ubrf5ZYOFfI/AAAAAAAAA20/W6lwXQGCH3M/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-14+18.17.45.png" imageanchor="1" &gt;&lt;img border="0" src="http://1.bp.blogspot.com/-TMCNxdezV0o/Ubrf5ZYOFfI/AAAAAAAAA20/W6lwXQGCH3M/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-14+18.17.45.png" /&gt;&lt;/a&gt;&lt;br /&gt;
気圧の値も妥当なものになった（と思う）．&lt;br /&gt;
&lt;/blockquote&gt;2013/06/14-13:30JST 返り値のバイト数が要求バイト数と合っていないことがあるのでその場合スキップするように修正(青色)&lt;br /&gt;
2013/06/13-16:10JST ADT7410(温度)/"arduino.sysex I2C_REQUEST, [ADDRESS_ADT7410, _WRITE, 0x03, 0x00, 0x00, 0x001]"で16bit-modeで動くこともあるが, ケースによっては13bitのままだったりする．&lt;br /&gt;
&lt;blockquote&gt;&lt;a href="http://2.bp.blogspot.com/-2J0ivAPD2HY/UblwsZnV6RI/AAAAAAAAA2k/2FEAzuidtjY/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-13+16.09.47.png" imageanchor="1" &gt;&lt;img border="0" src="http://2.bp.blogspot.com/-2J0ivAPD2HY/UblwsZnV6RI/AAAAAAAAA2k/2FEAzuidtjY/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-13+16.09.47.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;0.1度の中に複数の計測点があるので16bit modeであることがわかる．&lt;/li&gt;
&lt;li&gt;気圧/MPL115A2側はパスコン入れたら安定した&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;2013/06/13-15:36JST ADT7410(温度)/16bit mode指定がやっぱり正しく動いてないので削除&lt;br /&gt;
2013/06/13-15:06JST ADT7410(温度)/16bit mode指定の間違いを訂正&lt;br /&gt;
&lt;/blockquote&gt;&lt;blockquote class=myInsert&gt;&lt;b&gt;結果&lt;/b&gt;:&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-0ZH8LfvVsog/UbjD1qFWt9I/AAAAAAAAA2U/jJjklG-09ko/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-13+3.52.22.png" imageanchor="1" &gt;&lt;img border="0" src="http://3.bp.blogspot.com/-0ZH8LfvVsog/UbjD1qFWt9I/AAAAAAAAA2U/jJjklG-09ko/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-13+3.52.22.png" /&gt;&lt;/a&gt;&lt;br /&gt;
ブレッドボードをMBPの上からおろしたらみるみる温度が下がっていく図．&lt;br /&gt;
気圧が安定していない…やっぱりなにか間違っているのかもしれない．&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
&lt;a href="http://akizukidenshi.com/catalog/g/gI-06521/"&gt;これ&lt;/a&gt;を使って，やってみた．のでメモ．&lt;br /&gt;
&lt;blockquote class=myInsert&gt;&lt;pre&gt;#!/usr/bin/env ruby -Ku
require 'rubygems'
require 'arduino_firmata'
$stdout.sync = true

STRING_DATA= 0x71
I2C_REQUEST= 0x76
I2C_REPLY= 0x77
I2C_CONFIG= 0x78

_WRITE= 0x00
_READ= 0x08

ADDRESS_ADT7410= 0x48
&lt;span style='color:red;'&gt;ADDRESS_MPL115A2= 0x60&lt;/span&gt;

#MPL115A2 coefficients
a0= b1= b2= c12= 0.0

def readData(data, shift)
  msb= data[4+4*shift]+data[5+4*shift]*128
  lsb= data[6+4*shift]+data[7+4*shift]*128
  return (msb&amp;lt;&amp;lt;8)+lsb
end

def readDataS(data, shift)
  v= readData(data, shift)
  return (v&amp;lt;(1&amp;lt;&amp;lt;15)) ? v : &lt;span style="color:green;"&gt;v-(1&amp;lt;&amp;lt;15)*2&lt;/span&gt;
end

def data2string(data)
  i=0
  msg= ''
  while i+1&amp;lt;data.length
    msg+= data[i].chr
    i+= 2
  end
  return msg;
end

arduino = ArduinoFirmata.connect ENV["ARDUINO"], :nonblock_io =&gt; true

arduino.on :sysex do |command, data|
  puts "command : #{command}"
  puts "data    : #{data.inspect}"
  if command == I2C_REPLY
    if data[0] == ADDRESS_ADT7410
      &lt;span style='color:blue'&gt;if data.length == 8&lt;/span&gt;
        tout= readDataS(data, 0)/(1&amp;lt;&amp;lt;7).to_f
        puts "気温 #{tout} ℃"
      &lt;span style='color:blue'&gt;end&lt;/span&gt;
&lt;span style='color:red;'&gt;    elsif data[0] == ADDRESS_MPL115A2
      if data[2] == 0x04
        &lt;span style='color:blue'&gt;if data.length == 20&lt;/span&gt;
          a0 = readDataS(data, 0)/(1&amp;lt;&amp;lt;3).to_f
          b1 = readDataS(data, 1)/(1&amp;lt;&amp;lt;13).to_f
          b2 = readDataS(data, 2)/(1&amp;lt;&amp;lt;14).to_f
          c12= readDataS(data, 3)/(1&amp;lt;&amp;lt;24).to_f
        &lt;span style='color:blue'&gt;end&lt;/span&gt;
      elsif data[2] == 0x00
        &lt;span style='color:blue'&gt;if data.length == 12&lt;/span&gt;
          padc= readData(data, 0)&gt;&gt;6
          tadc= readData(data, 1)&gt;&gt;6
          pcomp= a0 + ( b1 + c12 * tadc ) * padc + b2 * tadc
          pout= pcomp * 650.0/1023.0 + 500.0
          puts "気圧 #{pout} hPa"
        &lt;span style='color:blue'&gt;end&lt;/span&gt;
      end&lt;/span&gt;
    end
  else
    if command == STRING_DATA
      p data2string(data);
    end
  end
end

#i2c enable
arduino.sysex I2C_CONFIG, [0x00, 0x00]

&lt;span style='color:red;'&gt;#MPL115A2 coefficients
arduino.sysex I2C_REQUEST, [ADDRESS_MPL115A2, _READ, 0x04, 0x00, 0x08, 0x00]&lt;/span&gt;

loop do
  arduino.sysex I2C_REQUEST, [ADDRESS_ADT7410, _READ, 0x00, 0x00, 0x02, 0x00]

&lt;span style='color:red;'&gt;  arduino.sysex I2C_REQUEST, [ADDRESS_MPL115A2, _WRITE, 0x12, 0x00, 0x01, 0x00]
  sleep 0.02
  arduino.sysex I2C_REQUEST, [ADDRESS_MPL115A2, _READ, 0x00, 0x00, 0x04, 0x00]&lt;/span&gt;

  sleep 1
end
&lt;/pre&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;前の記事の最後に書いた，「うまくいかない．」の原因は，1バイト(8ビット)の内容を送るのにも7bitの通信なので2バイト(7ビットのバイト+1ビットのバイト)送らないといけない(受信も)という点を全く理解していなかったのに挑んでいたのが原因.…だったと思っている（結局よくわかっていない）．&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/3oG42Uwvep0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/722725617331114714/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=722725617331114714" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/722725617331114714?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/722725617331114714?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/3oG42Uwvep0/ruby-gem-arduinofirmata-sysex-mpl115a2.html" title="ruby gem 'arduino_firmata' の sysex を使ってMPL115A2使用の圧力モジュールから値を取得する" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-TMCNxdezV0o/Ubrf5ZYOFfI/AAAAAAAAA20/W6lwXQGCH3M/s72-c/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-14+18.17.45.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2013/06/ruby-gem-arduinofirmata-sysex-mpl115a2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EAQn04fyp7ImA9WhFSEk0.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-3453043110977878392</id><published>2013-06-12T01:00:00.003+09:00</published><updated>2013-06-14T18:20:43.337+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-06-14T18:20:43.337+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="sysex" /><category scheme="http://www.blogger.com/atom/ns#" term="ADT7410" /><category scheme="http://www.blogger.com/atom/ns#" term="Arduino" /><category scheme="http://www.blogger.com/atom/ns#" term="firmata" /><category scheme="http://www.blogger.com/atom/ns#" term="I2C" /><title>ruby gem 'arduino_firmata' の sysex を使ってADT7410使用の温度モジュールから値を取得する</title><content type="html">&lt;blockquote class=myInsert&gt;2013/06/14-18:11JST u2sで負の値を求め方の間違いを修正(緑色)&lt;br /&gt;
2013/06/14-13:30JST 返り値のバイト数が要求バイト数と合っていないことがあるのでその場合スキップするように修正(青色)&lt;br /&gt;
2013/06/13-16:34JST "arduino.sysex I2C_REQUEST, [ADDRESS_ADT7410, _WRITE, 0x03, 0x00, 0x00, 0x001]"で16bit-modeで動くこともあるが, ケースによっては13bitのままだったりする．&lt;br /&gt;
&lt;blockquote&gt;&lt;a href="http://2.bp.blogspot.com/-2J0ivAPD2HY/UblwsZnV6RI/AAAAAAAAA2k/2FEAzuidtjY/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-13+16.09.47.png" imageanchor="1" &gt;&lt;img border="0" src="http://2.bp.blogspot.com/-2J0ivAPD2HY/UblwsZnV6RI/AAAAAAAAA2k/2FEAzuidtjY/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-13+16.09.47.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;0.1度の中に複数の計測点があるので16bit modeであることがわかる．&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;2013/06/13-15:36JST 16bit mode指定がやっぱり正しく動いてないので削除&lt;br /&gt;
2013/06/13-15:06JST 16bit mode指定の間違いを訂正&lt;br /&gt;
2013/06/13-01:53JST readDataの間違いを訂正(奇数バイトは128倍(8bit目?))&lt;br /&gt;
2013/06/12-23:27JST readDataの間違いを訂正(shiftの係数が2だった)&lt;br /&gt;
&lt;/blockquote&gt;&lt;a href="http://akizukidenshi.com/catalog/g/gM-06675/"&gt;これ&lt;/a&gt;を使って，やってみた．のでメモ．&lt;br /&gt;
&lt;blockquote class="myInsert"&gt;&lt;pre&gt;#!/usr/bin/env ruby -Ku
require 'rubygems'
require 'arduino_firmata'
$stdout.sync = true

ADDRESS_ADT7410= 0x48
I2C_READ= 0x08

def readData(data, shift)
  msb= data[4+4*shift]+data[5+4*shift]*128
  lsb= data[6+4*shift]+data[7+4*shift]*128
  return (msb*256+lsb)
end

def readDataS(data, shift)
  v= readData(data, shift)
  return (v&amp;lt;(1&amp;lt;&amp;lt;15)) ? v : &lt;span style="color:green;"&gt;v-(1&amp;lt;&amp;lt;15)*2&lt;/span&gt;
end

def data2string(data)
  i=0
  msg= ''
  while i+1&amp;lt;data.length
    msg+= data[i].chr
    i+= 2
  end
  return msg;
end

arduino = ArduinoFirmata.connect ENV["ARDUINO"]&lt;span style='color:red'&gt;, :nonblock_io =&gt; true&lt;/span&gt;
puts "firmata version #{arduino.version}"

arduino.on :sysex do |command, data|
  puts "command : #{command}"
  puts "data    : #{data.inspect}"
  if command == 0x77
    if data[0] == ADDRESS_ADT7410
      &lt;span style='color:blue'&gt;if data.length == 8&lt;/span&gt;
        t= readDataS(data, 0) / (1&lt;&lt;7).to_f #デフォルトは13bit modeで下位三ビットが1固定で無効ですが割っちゃいます．
        puts "#{t} [度]"
      &lt;span style='color:blue'&gt;end&lt;/span&gt;
    end
  else
    if command == 0x71
      p data2string(data);
    end
  end
end

#i2c enable
arduino.sysex 0x78, [0x00, 0x00]

loop do
  arduino.sysex 0x76, [ADDRESS_ADT7410, I2C_READ, 0x00, 0x00, 0x02, 0x00]
  sleep 1
end
&lt;/pre&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;あまりスムースな振舞いでないので，どこか間違ってるのかもしれない．&lt;/li&gt;
&lt;ul&gt;&lt;li&gt;→ 'nonblock_io'を設定したら(赤色の部分)スムースになりました(2013/06/12 21:49 JST)&lt;br /&gt;
&lt;/ul&gt;&lt;li&gt;&lt;a href="http://akizukidenshi.com/catalog/g/gI-06521/"&gt;MPL115A2&lt;/a&gt;も挑戦中ですが，普通にスケッチでWireを使い値を取得するとうまくいくのだけど，firmataでsysexだとwrite後のdelayの設定が悪いのか値がうまくとれない&lt;/li&gt;
&lt;li&gt;あと，「&lt;span style="background-color: whitesmoke; color: #333333; font-family: 'Helvetica Neue', Arial, 'Hiragino Kaku Gothic Pro', Meiryo, 'MS PGothic', sans-serif; font-size: 14px; line-height: 18px; white-space: pre-wrap;"&gt;&lt;a href="https://twitter.com/p_g_/status/344135621478064128"&gt;ruby arduino_firmata の動作 Arduino Duemilanova ATmega168 + IDE 1.0.3でのStandardFirmataの書き込みでは動作．それ以降のIDE 1.0.4, 1.0.5, 1.5.2 では動作しない．&lt;/a&gt;&lt;/span&gt;」「&lt;span style="background-color: whitesmoke; color: #333333; font-family: 'Helvetica Neue', Arial, 'Hiragino Kaku Gothic Pro', Meiryo, 'MS PGothic', sans-serif; font-size: 14px; line-height: 18px; white-space: pre-wrap;"&gt;&lt;a href="https://twitter.com/p_g_/status/344135738218123264"&gt;各IDE付属のStandardFirmataは全て同じコードであることは確認．&lt;/a&gt;&lt;/span&gt;」（私のケースだけかもしれませんが）．&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/8gRf8OIZAZQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/3453043110977878392/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=3453043110977878392" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/3453043110977878392?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/3453043110977878392?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/8gRf8OIZAZQ/ruby-gem-arduinofirmata-sysex-adt7410.html" title="ruby gem 'arduino_firmata' の sysex を使ってADT7410使用の温度モジュールから値を取得する" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-2J0ivAPD2HY/UblwsZnV6RI/AAAAAAAAA2k/2FEAzuidtjY/s72-c/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-13+16.09.47.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2013/06/ruby-gem-arduinofirmata-sysex-adt7410.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkAGSX4-fyp7ImA9WhFSEk0.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-7811355745547269405</id><published>2013-06-09T02:50:00.001+09:00</published><updated>2013-06-14T19:12:08.057+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-06-14T19:12:08.057+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="google-blockly" /><category scheme="http://www.blogger.com/atom/ns#" term="linda" /><title>Blockly+linda.jsなこと(linda-arduino-sensorの値をとるコードを作成してみた)</title><content type="html">(ブロックの表記は'温度計の値を読む'とかにして，内部でjsコードが正しくできあがるって方向に進めると良さげなんだろう．たぶん)&lt;br /&gt;
&lt;b&gt;Result:&lt;/b&gt;&lt;br /&gt;
&lt;blockquote class="myInsert"&gt;&lt;a href="http://3.bp.blogspot.com/-RET8VAfUMFs/UbNsIfWQCiI/AAAAAAAAA2A/Zsb99j5F4J0/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-09+2.10.24.png" imageanchor="1"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-RET8VAfUMFs/UbNsIfWQCiI/AAAAAAAAA2A/Zsb99j5F4J0/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-09+2.10.24.png" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;lindaについての&lt;a href="http://shokai.org/blog/archives/7515"&gt;@shokaiさんの記事&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/shokai/linda-arduino-sensor"&gt;linda-arduino-sensor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;'linda.io.on'関連を書いてないんだけど動いちゃった．&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;b&gt;How:&lt;/b&gt;&lt;br /&gt;
&lt;blockquote class="myInsert"&gt;&lt;div&gt;&lt;b&gt;配置&lt;/b&gt;&lt;br /&gt;
&lt;a href="http://4.bp.blogspot.com/-BbaAUCUiEE4/UbNrvJBS6-I/AAAAAAAAA14/KXscw1lwXwA/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-09+2.36.12.png" imageanchor="1"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-BbaAUCUiEE4/UbNrvJBS6-I/AAAAAAAAA14/KXscw1lwXwA/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-09+2.36.12.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;1. blockly(-read-only)&lt;/b&gt;&lt;br /&gt;
&lt;blockquote class="myInsert2"&gt;&lt;pre&gt;svn checkout http://blockly.googlecode.com/svn/trunk/ blockly-read-only
&lt;/pre&gt;&lt;/blockquote&gt;&lt;b&gt;2. jquery.min.js &lt;/b&gt;&lt;br /&gt;
&lt;b&gt;3. index.html&lt;/b&gt; (based on blockly-read-only/demos/generator/index.html)&lt;br /&gt;
'rpi.local'はl&lt;a href="https://github.com/shokai/linda-base"&gt;inda-base&lt;/a&gt;が動いているマシン&lt;br /&gt;
&lt;blockquote class="myInsert2"&gt;&lt;pre&gt;&amp;lt;html&amp;gt;
    &amp;lt;head&amp;gt;
  &amp;lt;meta charset="utf-8"&amp;gt;
  &amp;lt;title&amp;gt;blocky - linda&amp;lt;/title&amp;gt;
  &amp;lt;script type="text/javascript" src="blockly-read-only/blockly_compressed.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script type="text/javascript" src="blockly-read-only/en_compressed.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script type="text/javascript" src="blockly-read-only/javascript_compressed.js"&amp;gt;&amp;lt;/script&amp;gt;

&lt;span style="color: red;"&gt;
  &amp;lt;script type="text/javascript" src="./language_linda.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script type="text/javascript" src="./language_utility.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script src="./jquery.min.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script src="http://rpi.local:5000/rocketio/linda.js"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script&amp;gt;
   var linda= new Linda();
  &amp;lt;/script&amp;gt;
&lt;/span&gt;

  &amp;lt;style&amp;gt;
   body {
    background-color: white;
    font-family: sans-serif;
   }
   h1 {
    font-weight: normal;
    font-size: 140%;
   }
  &amp;lt;/style&amp;gt;
 &amp;lt;/head&amp;gt;
 &amp;lt;body&amp;gt;
  &amp;lt;p&amp;gt;
   &amp;lt;button onclick="showCode()"&amp;gt;
    Show JavaScript
   &amp;lt;/button&amp;gt;
   &amp;lt;button onclick="runCode()"&amp;gt;
    Run JavaScript
   &amp;lt;/button&amp;gt;
  &amp;lt;/p&amp;gt;

  &amp;lt;div id="blocklyDiv" style="height: 480px; width: 600px;"&amp;gt;&amp;lt;/div&amp;gt;

  &amp;lt;xml id="toolbox" style="display: none"&amp;gt;
   &amp;lt;category name="Control"&amp;gt;
    &amp;lt;block type="controls_if"&amp;gt;&amp;lt;/block&amp;gt;
    &amp;lt;block type="controls_repeat_ext"&amp;gt;
     &amp;lt;value name="TIMES"&amp;gt;
      &amp;lt;block type="math_number"&amp;gt;
       &amp;lt;title name="NUM"&amp;gt;10&amp;lt;/title&amp;gt;
      &amp;lt;/block&amp;gt;
     &amp;lt;/value&amp;gt;
    &amp;lt;/block&amp;gt;
    &amp;lt;block type="controls_whileUntil"&amp;gt;&amp;lt;/block&amp;gt;
   &amp;lt;/category&amp;gt;
   &amp;lt;category name="Logic"&amp;gt;
    &amp;lt;block type="logic_compare"&amp;gt;&amp;lt;/block&amp;gt;
    &amp;lt;block type="logic_operation"&amp;gt;&amp;lt;/block&amp;gt;
    &amp;lt;block type="logic_negate"&amp;gt;&amp;lt;/block&amp;gt;
    &amp;lt;block type="logic_boolean"&amp;gt;&amp;lt;/block&amp;gt;
   &amp;lt;/category&amp;gt;
   &amp;lt;category name="Math"&amp;gt;
    &amp;lt;block type="math_number"&amp;gt;&amp;lt;/block&amp;gt;
    &amp;lt;block type="math_arithmetic"&amp;gt;&amp;lt;/block&amp;gt;
    &amp;lt;block type="math_single"&amp;gt;&amp;lt;/block&amp;gt;
   &amp;lt;/category&amp;gt;
   &amp;lt;category name="Text"&amp;gt;
    &amp;lt;block type="text"&amp;gt;&amp;lt;/block&amp;gt;
    &amp;lt;block type="text_length"&amp;gt;&amp;lt;/block&amp;gt;
    &amp;lt;block type="text_print"&amp;gt;&amp;lt;/block&amp;gt;
   &amp;lt;/category&amp;gt;
&lt;span style="color: red;"&gt;
   &amp;lt;category name="Variables" custom="VARIABLE"&amp;gt;&amp;lt;/category&amp;gt;
   &amp;lt;category name="List"&amp;gt;
    &amp;lt;block type="lists_create_empty"&amp;gt;&amp;lt;/block&amp;gt;
    &amp;lt;block type="lists_create_with"&amp;gt;&amp;lt;/block&amp;gt;
    &amp;lt;block type="lists_repeat"&amp;gt;
     &amp;lt;value name="NUM"&amp;gt;
      &amp;lt;block type="math_number"&amp;gt;
       &amp;lt;title name="NUM"&amp;gt;5&amp;lt;/title&amp;gt;
      &amp;lt;/block&amp;gt;
     &amp;lt;/value&amp;gt;
    &amp;lt;/block&amp;gt;
    &amp;lt;block type="lists_length"&amp;gt;&amp;lt;/block&amp;gt;
    &amp;lt;block type="lists_isEmpty"&amp;gt;&amp;lt;/block&amp;gt;
    &amp;lt;block type="lists_indexOf"&amp;gt;
     &amp;lt;value name="VALUE"&amp;gt;
      &amp;lt;block type="variables_get"&amp;gt;
       &amp;lt;title name="VAR"&amp;gt;list&amp;lt;/title&amp;gt;
      &amp;lt;/block&amp;gt;
     &amp;lt;/value&amp;gt;
    &amp;lt;/block&amp;gt;
    &amp;lt;block type="lists_getIndex"&amp;gt;
     &amp;lt;value name="VALUE"&amp;gt;
      &amp;lt;block type="variables_get"&amp;gt;
       &amp;lt;title name="VAR"&amp;gt;list&amp;lt;/title&amp;gt;
      &amp;lt;/block&amp;gt;
     &amp;lt;/value&amp;gt;
    &amp;lt;/block&amp;gt;
    &amp;lt;block type="lists_setIndex"&amp;gt;
     &amp;lt;value name="LIST"&amp;gt;
      &amp;lt;block type="variables_get"&amp;gt;
       &amp;lt;title name="VAR"&amp;gt;list&amp;lt;/title&amp;gt;
      &amp;lt;/block&amp;gt;
     &amp;lt;/value&amp;gt;
    &amp;lt;/block&amp;gt;
    &amp;lt;block type="lists_getSublist"&amp;gt;
     &amp;lt;value name="LIST"&amp;gt;
      &amp;lt;block type="variables_get"&amp;gt;
       &amp;lt;title name="VAR"&amp;gt;list&amp;lt;/title&amp;gt;
      &amp;lt;/block&amp;gt;
     &amp;lt;/value&amp;gt;
    &amp;lt;/block&amp;gt;
   &amp;lt;/category&amp;gt;
   &amp;lt;category name="Linda"&amp;gt;
    &amp;lt;block type="linda_createTupleSpace"&amp;gt;
     &amp;lt;value name="TupleSpace"&amp;gt;
      &amp;lt;block type="text"&amp;gt;
       &amp;lt;title name="TEXT"&amp;gt;myhome&amp;lt;/title&amp;gt;
      &amp;lt;/block&amp;gt;
     &amp;lt;/value&amp;gt;
    &amp;lt;/block&amp;gt;
    &amp;lt;block type="linda_watch"&amp;gt;
     &amp;lt;title name="LIST"&amp;gt;tuple&amp;lt;/title&amp;gt;
    &amp;lt;/block&amp;gt;
   &amp;lt;/category&amp;gt;
   &amp;lt;category name="Utility"&amp;gt;
    &amp;lt;block type="utility_log"&amp;gt;&amp;lt;/block&amp;gt;
   &amp;lt;/category&amp;gt;
&lt;/span&gt;
  &amp;lt;/xml&amp;gt;

  &amp;lt;script&amp;gt;
   Blockly.inject(document.getElementById('blocklyDiv'), {
    path: 'blockly-read-only/',
    toolbox: document.getElementById('toolbox')
   });

   function showCode() {
    // Generate JavaScript code and display it.
    Blockly.JavaScript.INFINITE_LOOP_TRAP= null;
    var code= Blockly.Generator.workspaceToCode('JavaScript');
    alert(code);
   }

   function runCode() {
    // Generate JavaScript code and run it.
    window.LoopTrap= 1000;
    Blockly.JavaScript.INFINITE_LOOP_TRAP= 'if (--window.LoopTrap == 0) throw "Infinite loop.";\n';
    var code= Blockly.Generator.workspaceToCode('JavaScript');
    Blockly.JavaScript.INFINITE_LOOP_TRAP= null;
    try {
     eval(code);
    }
    catch (e) {
     alert(e);
    }
   }
  &amp;lt;/script&amp;gt;

 &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;b&gt;4. language_linda.js&lt;/b&gt;&lt;br /&gt;
&lt;blockquote class="myInsert2"&gt;&lt;pre&gt;if(!Blockly.Language) {
    Blockly.Language= {};
}

Blockly.Language.linda_createTupleSpace= {
 category: 'Linda',
 helpUrl: '',
 init: function() {
  this.setColour(110);
  this.setOutput(true);
  this.appendValueInput('TupleSpace').appendTitle('Create TupleSpace:')
  this.setPreviousStatement(false);
  this.setNextStatement(false);
  this.setTooltip('Create a TupleSpace.');
 }
};

Blockly.Language.linda_watch= {
 category: 'Linda',
 helpUrl: '',
 init: function() {
  this.setColour(110);
  this.appendValueInput('TupleSpace').appendTitle('TupleSpace:');
  this.appendValueInput('Tuple').appendTitle('Watch Tuple:');
  this.appendDummyInput().appendTitle('Found Tuple:').appendTitle(new Blockly.FieldVariable(null), 'LIST');
  this.appendStatementInput('DO').appendTitle('Do');
  this.setPreviousStatement(true);
  this.setNextStatement(true);
  this.setTooltip('Watch the tuple in the tuplespace.');
 }
};

Blockly.JavaScript= Blockly.Generator.get('JavaScript');

Blockly.JavaScript.linda_createTupleSpace= function() {
 var _ts= Blockly.JavaScript.valueToCode(this, 'TupleSpace', Blockly.JavaScript.ORDER_NONE) || 'test';
 var code= "new linda.TupleSpace(" + _ts + ")"
 return [code, Blockly.JavaScript.ORDER_NONE];
};

Blockly.JavaScript.linda_watch= function() {
 var _ts= Blockly.JavaScript.valueToCode(this, 'TupleSpace', Blockly.JavaScript.ORDER_NONE) || 'ts';
 var _t= Blockly.JavaScript.valueToCode(this, 'Tuple', Blockly.JavaScript.ORDER_NONE) || '["sensor"]';
 var _l= Blockly.JavaScript.variableDB_.getName(this.getTitleValue('LIST'), Blockly.Variables.NAME_TYPE) || 'list';
 var branch= Blockly.JavaScript.statementToCode(this, 'DO');
 var code= _ts + ".watch(" + _t + ", function(" + _l + "){\n";
 code+= branch;
 code+= "\n});\n";
 return [code, Blockly.JavaScript.ORDER_NONE];
}; 
&lt;/pre&gt;&lt;/blockquote&gt;&lt;b&gt;5. language_utility.js&lt;/b&gt;&lt;br /&gt;
&lt;blockquote class="myInsert2"&gt;&lt;pre&gt;if(!Blockly.Language) {
 Blockly.Language= {};
}

Blockly.Language.utility_log= {
 category: 'Linda',
 helpUrl: '',
 init: function() {
  this.setColour(111);
  this.appendValueInput('Message').appendTitle('console.log:');
  this.setPreviousStatement(true);
  this.setNextStatement(true);
  this.setTooltip('console.log()');
 }
};

Blockly.JavaScript= Blockly.Generator.get('JavaScript');

Blockly.JavaScript.utility_log= function() {
 var _msg= Blockly.JavaScript.valueToCode(this, 'Message', Blockly.JavaScript.ORDER_NONE) || '';
 var code= "console.log(" + _msg + ")"
 return code;
}; 
&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/_fAMTp_jMt4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/7811355745547269405/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=7811355745547269405" title="4 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/7811355745547269405?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/7811355745547269405?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/_fAMTp_jMt4/blocklylindajslinda-arduino-sensor.html" title="Blockly+linda.jsなこと(linda-arduino-sensorの値をとるコードを作成してみた)" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-RET8VAfUMFs/UbNsIfWQCiI/AAAAAAAAA2A/Zsb99j5F4J0/s72-c/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-09+2.10.24.png" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2013/06/blocklylindajslinda-arduino-sensor.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4FQXw4fip7ImA9WhFTFUk.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-4508551748150234959</id><published>2013-06-07T03:12:00.003+09:00</published><updated>2013-06-07T03:38:30.236+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-06-07T03:38:30.236+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="linda" /><title>送り先固定のgmail送信を機能とした，linda-gmailが動いたので記録</title><content type="html">RubyやGemとかよくわからないまま，&lt;a href="https://github.com/shokai/linda-skype"&gt;linda-skype&lt;/a&gt;やその他多くのRubyでメイル送信記事から，見よう見まねで以下のように作成．&lt;br /&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;とりあえず&lt;/span&gt;&lt;/b&gt;動いたので記録しておく．&lt;br /&gt;
&lt;blockquote class="myInsert"&gt;
1.ファイル作成1
&lt;br /&gt;
&lt;blockquote class="myInsert2"&gt;
&lt;b&gt;Gemfile&lt;/b&gt;
&lt;br /&gt;
&lt;blockquote class="myInsert3"&gt;
&lt;pre&gt;source "https://rubygems.org"

gem 'tmail'
gem 'tlsmail'
gem "sinatra-rocketio-linda"
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
2.ファイル作成2
&lt;br /&gt;
&lt;blockquote class="myInsert2"&gt;
&lt;b&gt;linda-gmail.rb&lt;/b&gt;
&lt;br /&gt;
&lt;blockquote class="myInsert3"&gt;
&lt;pre&gt;#!/usr/bin/env ruby
# coding: utf-8
require 'rubygems'
require 'tmail'
require 'tlsmail'
require 'net/smtp'
require 'sinatra/rocketio/linda/client'
$stdout.sync = true

$smtp_server= "smtp.gmail.com"
$smtp_port= 587
$smtp_account= "xxx@yyyyy"
$smtp_password= "abcdefghijklmnop"

$mail_to= "aaa@bbbbb"

def send_mail_message(_subject, _body)
  retValue= true
  mail = TMail::Mail.new
  mail.to = $mail_to
  mail.from = $mail_account
  mail.subject = _subject
  mail.body = _body
  begin
    Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
    Net::SMTP.start($smtp_server, $smtp_port, nil,
                    $smtp_account, $smtp_password, "plain") do |smtp|
      smtp.sendmail(mail.encoded, mail.from, mail.to)
    end
  rescue
    retValue= false
  end
  return retValue
end

url =   ENV["LINDA_BASE"]  || ARGV.shift || "http://localhost:5000"
space = ENV["LINDA_SPACE"] || "test"
puts "connecting.. #{url}"
linda = Sinatra::RocketIO::Linda::Client.new url
ts = linda.tuplespace[space]
 
linda.io.on :connect do
  puts "connect!! &amp;lt;#{linda.io.session}&amp;gt; (#{linda.io.type})"
  ts.watch ["mail", "send"] do |tuple|
    p tuple
    if tuple.size == 4
      puts subject = tuple[2]
      puts body = tuple[3]
      if send_mail_message(subject,  body)
        ts.write ["mail", "send", subject, body, "success"]
      else
        ts.write ["mail", "send", subject, body, "fail"]
      end
    end
  end
end

linda.io.on :disconnect do
  puts "RocketIO disconnected.."
end

linda.wait
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;"xxx@yyyyy"($stmp_account): gmailアカウント(そのままmail.toに設定している)&lt;/li&gt;
&lt;li&gt;"abcdefghijklmnop"($smtp_password): gmailログインパスワード&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;(二重認証とかの場合，'アカウント&amp;gt;セキュリティ&amp;gt;アクセスを管理する&amp;gt;アプリケーション固有のパスワード&amp;gt;ステップ 1/2: 新しいアプリケーション固有のパスワードを生成する'とかでパスワードを発行)&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;"aaa@bbbbb"($mail_to): 送信先メイルアドレス&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
3.設定
&lt;br /&gt;
&lt;blockquote class="myInsert2"&gt;
&lt;blockquote class="myInsert3"&gt;
&lt;pre&gt;$ sudo gem install bundler
$ bundle install
&lt;/pre&gt;
&lt;/blockquote&gt;
Gemfile.lockができる&lt;/blockquote&gt;
&lt;br /&gt;
4.実行
&lt;br /&gt;
&lt;blockquote class="myInsert2"&gt;
&lt;pre&gt;$ bundle exec ruby linda-gmail.rb
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;br /&gt;
5.以下のURLなどから呼出し
&lt;br /&gt;
&lt;blockquote class="myInsert2"&gt;
http://localhost:5000/test/mail/send/実験/実験結果？
&lt;/blockquote&gt;
&lt;br /&gt;&lt;/blockquote&gt;
&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/GNIjqVlvJP8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/4508551748150234959/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=4508551748150234959" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/4508551748150234959?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/4508551748150234959?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/GNIjqVlvJP8/gmaillinda-gmail.html" title="送り先固定のgmail送信を機能とした，linda-gmailが動いたので記録" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2013/06/gmaillinda-gmail.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEAFRXg9eip7ImA9WhFTFUk.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-3514885226550663476</id><published>2013-06-04T00:00:00.002+09:00</published><updated>2013-06-07T03:18:34.662+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-06-07T03:18:34.662+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ruby" /><category scheme="http://www.blogger.com/atom/ns#" term="linda" /><title>「現在の気温は23度です」を読み上げるまでのアレコレ</title><content type="html">&lt;a href="http://edotprintstacktrace.blogspot.jp/2013/06/raspberry-pi-mincraft-pishokailinda.html"&gt;lindaで遊んでいます&lt;/a&gt;．&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://github.com/shokai/linda-temperature-alert"&gt;linda-temperature-alert&lt;/a&gt;で温度を&lt;a href="https://github.com/shokai/linda-mac-say"&gt;linda-mac-say&lt;/a&gt;に読み上げさせると数字21が“にい・いち”のようにひとつずつ読み上げられてしまい，“にじゅういちど”とかにならないのが悲しかった．&lt;br /&gt;
&lt;br /&gt;
数字を漢数字にしてsaykanji記事(&lt;a href="http://d.hatena.ne.jp/zariganitosh/20090519/1242725122"&gt;saykanjiコマンドを定義して漢字仮名混じり文を読み上げる - ザリガニが見ていた...。&lt;/a&gt;)のように'mecab -O yomi'すればいけるんじゃない？とか考えていろいろやりはじめた．その成果がこれ．
参考：&lt;a href="http://page.freett.com/elledia/tips/num2kanji.html"&gt;漢数字に変換&lt;/a&gt;
&lt;br /&gt;
&lt;blockquote class="myInsert"&gt;
n2k.rb
&lt;br /&gt;
&lt;blockquote class="myInsert2"&gt;
&lt;pre&gt;#! /usr/bin/env ruby -Ku
# coding: utf-8
def num2kanji(val)
  kanji_str= ':一二三四五六七八九'.split('')
  keta_str = ':十百千'.split('')
  keta_str2= ':万億兆京垓'.split('')
  return '零' if (val==0)
  val= val.to_s.reverse.gsub(/(\d{4})/, "\\1,").sub(/,$/, "").split(/,/)
  i= 0;
  for val_item in val
    str= ''
    chars= val_item.split('')
    j= chars.length-1
    for char_item in chars.reverse
      str+= kanji_str[char_item.to_i] + keta_str[j]
      j= j-1
    end
    str = str.gsub(/:./,'') + keta_str2[i]
    str= '' if (str.split(//u).length==1)
    val[i] = str.gsub(/:/,'');
    val[i] = val[i].gsub(/一(百)|一(十)/, "\\1\\2");
    i= i+1
  end
  return val.reverse.join('');
end
puts ARGV[0].gsub(/\d+/){ num2kanji($&amp;amp;.to_i) } if (ARGV[0] != nil)
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
でこれを
&lt;br /&gt;
&lt;blockquote class="myInsert"&gt;
ruby n2k.rb 現在の気温は23度です|mecab -O yomi|say&lt;/blockquote&gt;
と読み出せばいいんじゃないか？と思った．
ただこれだと「気温は」の「は」が「ha」と発音されてしまう．
&lt;br /&gt;
&lt;blockquote class="myInsert"&gt;
&lt;pre&gt;ruby n2k.rb 現在の気温は23度です|mecab -O yomi
ゲンザイノキオンハニジュウサンドデス&lt;/pre&gt;
&lt;/blockquote&gt;
調べてみるとこれを解決されている方がいた．
&lt;a href="http://denspe.blog84.fc2.com/blog-entry-170.html"&gt;MeCab と KanateaTalk で漢字かな交じり文の読み上げ - 電脳スピーチ blog&lt;/a&gt;

mecabをportsで入れたのでdicrcは/opt/local/lib/mecab/dic/ipadic-utf8/dicrcにあった．
これに以下の三行を追加した．
&lt;br /&gt;
&lt;blockquote class=myInsert&gt;&lt;pre&gt;
node-format-talk = %pS%f[8]\s 
unk-format-talk = %M 
eos-format-talk  = \n&lt;/pre&gt;&lt;/blockquote&gt;
(ちなみにmecabで入れるとeucjpの辞書が入るので+utf8とかしていれないと色々困る）

これで「は」は「wa」と発音されることになる
&lt;br /&gt;
&lt;blockquote class="myInsert"&gt;
&lt;pre&gt;ruby n2k.rb 現在の気温は23度です|mecab -O talk
ゲンザイ  ノ  キオン  ワ  ニ  ジュー  サン  ド  デス  &lt;/pre&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
で，ここまでやってフト，sayコマンドにKyokoさんがいたじゃないかと気がついた．&lt;br /&gt;
&lt;br /&gt;
すっかり忘れてました．&lt;br /&gt;
(いまでもデフォルトでは使えなかったと思う．Kyokoさんのインストールについてはこちらの記事が参考になるかと思う．&amp;nbsp;&amp;nbsp;&lt;a href="http://veadardiary.blog29.fc2.com/blog-entry-3854.html"&gt;「Kyoko」さんに優しく警告してもらう方法 -  Macの手書き説明書&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
ということで，以下のようにlinda-mac-say.rbを改造してみた．&lt;br /&gt;
(英語を読ませようとした時にKyokoさんだと冠詞「a」が「エイ」となったりするので全角があるときだけKyokoさんに登場いただくことにした．)
&lt;br /&gt;
&lt;blockquote class="myInsert"&gt;
&lt;pre&gt;#!/usr/bin/env ruby
require 'rubygems'
require 'sinatra/rocketio/linda/client'
$stdout.sync = true

class String
  def sanitize
    self.gsub(/[`"'\r\n;\|&amp;gt;&amp;lt;]/, '').strip
  end
end

url =   ENV["LINDA_BASE"]  || ARGV.shift || "http://localhost:5000"
space = ENV["LINDA_SPACE"] || "test"
puts "connecting.. #{url}"
linda = Sinatra::RocketIO::Linda::Client.new url
ts = linda.tuplespace[space]

linda.io.on :connect do  ## RocketIO's "connect" event
  puts "connect!! &amp;lt;#{linda.io.session}&amp;gt; (#{linda.io.type})"
  ts.watch ["say"] do |tuple|
    p tuple
    if tuple.size == 2 or (tuple.size == 3 and tuple[2].kind_of? Hash)
      str = tuple[1].sanitize
      opts = tuple[2] ? tuple[2].map{|k,v| "#{k} #{v}"}.join(' ').sanitize : ""
      &lt;span style="color: red;"&gt;vopt = (/[^ -~｡-ﾟ]/=~str)?"-v Kyoko -r 300":"-v Victoria -r 500"
      if system "say #{vopt} #{opts} \"#{str}\""&lt;/span&gt;
        ts.write ["say", str, "success"]  # write response
      else
        ts.write ["say", str, "fail"]  # write response
      end
    end
  end
end

linda.io.on :disconnect do
  puts "RocketIO disconnected.."
end

linda.wait
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/XZ_uwGYWJKo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/3514885226550663476/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=3514885226550663476" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/3514885226550663476?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/3514885226550663476?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/XZ_uwGYWJKo/23.html" title="「現在の気温は23度です」を読み上げるまでのアレコレ" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2013/06/23.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEENR308eSp7ImA9WhFTFUk.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-5009770970246583240</id><published>2013-06-01T16:00:00.000+09:00</published><updated>2013-06-07T03:18:16.371+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-06-07T03:18:16.371+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="flot" /><category scheme="http://www.blogger.com/atom/ns#" term="raspberry-pi" /><category scheme="http://www.blogger.com/atom/ns#" term="linda" /><title>Raspberry Pi: Mincraft-Piも試し終わり，どうしようと思った所で@shokaiさんのLindaで遊び始めた．</title><content type="html">タイトルの通り，&lt;a href="http://shokai.org/blog/archives/7515"&gt;Linda&lt;/a&gt;をraspberry piに入れて遊んでます．&lt;a href="https://github.com/shokai/linda-arduino-sensor"&gt;linda-arduino-sensor&lt;/a&gt;も動かしてるのでこいつを，&lt;a href="http://www.flotcharts.org/"&gt;flot&lt;/a&gt;でグラフ化してみた．
&lt;br /&gt;
&lt;blockquote class="myInsert"&gt;
&lt;a href="http://3.bp.blogspot.com/-IwMKIZ89OoE/UamYkCndUFI/AAAAAAAAA1k/wKQ7QhuF5BA/s1600/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-01+15.44.51.png" imageanchor="1"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-IwMKIZ89OoE/UamYkCndUFI/AAAAAAAAA1k/wKQ7QhuF5BA/s320/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-01+15.44.51.png" /&gt;&lt;/a&gt;
&lt;br /&gt;
(温度センサもCdSも安定してない…)&lt;/blockquote&gt;
&lt;blockquote class="myInsert"&gt;
(rpi.localはlinda-baseの動いてるraspberry piのこと.Lindaはクロスドメインをデフォルトでは許可してるのでこのコード自体はローカルファイルのfoobar.htmlでも動く)
&lt;br /&gt;
&lt;blockquote class="myInsert2"&gt;
&lt;pre&gt;&amp;lt;html&amp;gt;
 &amp;lt;head&amp;gt;
  &amp;lt;!-- http://jquery.com --&amp;gt;
  &amp;lt;script src="./jquery.min.js"&amp;gt;&amp;lt;/script&amp;gt;
  
  &amp;lt;!-- http://www.flotcharts.org --&amp;gt;
  &amp;lt;script src="./jquery.flot.min.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;
  &amp;lt;script src="./jquery.flot.time.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;
  
  &amp;lt;!-- https://github.com/shokai/linda-base --&amp;gt;
  &amp;lt;script src="http://&lt;span style="color: red;"&gt;rpi.local&lt;/span&gt;:5000/rocketio/linda.js"&amp;gt;&amp;lt;/script&amp;gt;
  
  &amp;lt;script&amp;gt;
   var space_name= "myhome";
   var tuple= ["sensor"];
   var linda= new Linda();
   var ts= new linda.TupleSpace(space_name);
   var data= [];
   var data2= [];
   $(function() {
    //linda
    linda.io.on("connect", function() {
     ts.watch(tuple, function(_tuple) {
      log(_tuple)
     });
    });
    linda.io.on("disconnect", function() {
    });
    var log= function(msg) {
     if(msg[1] == 'light')
      data.push([(new Date()).getTime(), msg[2]]);
     else if(msg[1] == 'temperature')
      data2.push([(new Date()).getTime(), msg[2]]);
    }
    
    //flot
    var container= $("#placeholder");
    var maximum= container.outerWidth() / 2 || 300;
    function getData(_data) {
     while(_data.length &amp;gt; maximum) {
      _data= _data.slice(1);
     }
     return _data;
    }
    series= [{
     data: getData(data),
     label: "light",
     lines: {
      fill: false,
     }
    }, {
     data: getData(data2),
     label: "temp.",
     yaxis: 2,
     lines: {
      fill: false,
     }
    }];
    var plot= $.plot(container, series, {
     grid: {
      borderWidth: 1,
      minBorderMargin: 20,
      labelMargin: 10,
      backgroundColor: {
       colors: ["#fff", "#e4f4f4"]
      },
      margin: {
       top: 8,
       bottom: 20,
       left: 20
      },
      markings: function(axes) {
       var markings= [];
       var xaxis= axes.xaxis;
       for(var x= Math.floor(xaxis.min); x &amp;lt; xaxis.max; x+= xaxis.tickSize * 2) {
        markings.push({
         xaxis: {
          from: x,
          to: x + xaxis.tickSize
         },
         color: "rgba(232, 232, 255, 0.2)"
        });
       }
       return markings;
      }
     },
     xaxis: {
      mode: "time",
      timezone: "browser",
      timeformat: "%H:%M:%S",
      ticks: 8,
     },
     yaxes: [{
      tickFormatter: function(val, axis){return val.toFixed(1)},
     }, {
      tickFormatter: function(val, axis){return val.toFixed(1)},
     }],
     legend: {
      show: true,
      position: "sw",
     }
    });
    setInterval(function updateSeries() {
     series[0].data= getData(data);
     series[1].data= getData(data2);
     plot.setData(series);
     plot.setupGrid();
     plot.draw();
    }, 1000);
   });
  &amp;lt;/script&amp;gt;
 &amp;lt;/head&amp;gt;
 &amp;lt;body&amp;gt;
  &amp;lt;div id="container"&amp;gt;
   &amp;lt;div id="placeholder" style="width:800px;height:300px;"&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
 &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;blockquote class="myInsert"&gt;
ちなみにsystem_timerはruby1.9.3でうまく入らなかったのでtwを使う上ではrubyは1.8系である必要があった(私だけかもしれないけど)．&lt;/blockquote&gt;
&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/MmhB06V6Ut8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/5009770970246583240/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=5009770970246583240" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/5009770970246583240?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/5009770970246583240?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/MmhB06V6Ut8/raspberry-pi-mincraft-pishokailinda.html" title="Raspberry Pi: Mincraft-Piも試し終わり，どうしようと思った所で@shokaiさんのLindaで遊び始めた．" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-IwMKIZ89OoE/UamYkCndUFI/AAAAAAAAA1k/wKQ7QhuF5BA/s72-c/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88+2013-06-01+15.44.51.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2013/06/raspberry-pi-mincraft-pishokailinda.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0ADRHg9eSp7ImA9WhJaFU0.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-1771930895809258643</id><published>2012-10-06T15:35:00.001+09:00</published><updated>2012-10-06T15:42:55.661+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-10-06T15:42:55.661+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="graphviz" /><category scheme="http://www.blogger.com/atom/ns#" term="raptor2" /><category scheme="http://www.blogger.com/atom/ns#" term="RDF" /><title>'rdf format' to 'png image'</title><content type="html">&lt;blockquote class=myInsert&gt;&lt;b&gt;やり方&lt;/b&gt;&lt;br/&gt;
コード等はtumblrに&lt;a href="http://edotprintstacktrace.tumblr.com/post/32991892040/rdf-format-to-png-image"&gt;書きました&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;b&gt;結果&lt;/b&gt;
&lt;pre class=myInsert2&gt;$ vi DescribingEricMiller.rdf&lt;/pre&gt;
&lt;blockquote class=myInsert2&gt;
&lt;pre&gt;&amp;lt;?xml version="1.0"?&amp;gt;
&amp;lt;rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
             xmlns:contact="http://www.w3.org/2000/10/swap/pim/contact#"&amp;gt;

  &amp;lt;contact:Person rdf:about="http://www.w3.org/People/EM/contact#me"&amp;gt;
    &amp;lt;contact:fullName&amp;gt;Eric Miller&amp;lt;/contact:fullName&amp;gt;
    &amp;lt;contact:mailbox rdf:resource="mailto:em@w3.org"/&amp;gt;
    &amp;lt;contact:personalTitle&amp;gt;Dr.&amp;lt;/contact:personalTitle&amp;gt; 
  &amp;lt;/contact:Person&amp;gt;

&amp;lt;/rdf:RDF&amp;gt;
&lt;/pre&gt;
&lt;/blockquote&gt;
reference: 'Example 1: RDF/XML Describing Eric Miller' in &lt;a href="http://www.w3.org/TR/rdf-primer/#example1"&gt;http://www.w3.org/TR/rdf-primer/#example1&lt;/a&gt;&lt;br /&gt;
&lt;pre class=myInsert2&gt;$ ./a.out DescribingEricMiller.rdf Eric.png&lt;/pre&gt;
&lt;a href="http://3.bp.blogspot.com/-WAUnAuYioLA/UG_NSFShNvI/AAAAAAAAA1E/OLPpQcS_tug/s1600/Eric.png" imageanchor="1" style=""&gt;&lt;img border="0" height="77" width="320" src="http://3.bp.blogspot.com/-WAUnAuYioLA/UG_NSFShNvI/AAAAAAAAA1E/OLPpQcS_tug/s320/Eric.png" /&gt;&lt;/a&gt;
&lt;/blockquote&gt;
&lt;blockquote class=myInsert&gt;&lt;ul&gt;
&lt;li&gt;コード中の"dot"を変えればLayoutが変わります．"circo"とか?&lt;/li&gt;
&lt;li&gt;コード中の"png"を変えれば出力形式が変わります．"svg"とか?&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/jhVqhN9oI5k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/1771930895809258643/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=1771930895809258643" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/1771930895809258643?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/1771930895809258643?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/jhVqhN9oI5k/rdf-format-to-png-image.html" title="'rdf format' to 'png image'" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-WAUnAuYioLA/UG_NSFShNvI/AAAAAAAAA1E/OLPpQcS_tug/s72-c/Eric.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2012/10/rdf-format-to-png-image.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EAQn44fCp7ImA9WhJaEUU.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-1059370570807721033</id><published>2012-10-02T23:18:00.002+09:00</published><updated>2012-10-02T23:54:03.034+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-10-02T23:54:03.034+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OpenRDF_Sesame" /><category scheme="http://www.blogger.com/atom/ns#" term="RDF" /><title>“SPARQL query with OPTIONAL to two remote SPARQL endpoints”をやってみる(やっただけ)</title><content type="html">&lt;blockquote class=myInsert&gt;&lt;b&gt;参考&lt;/b&gt;: &lt;a href="http://www.w3.org/TR/sparql11-federated-query/#optionalTwoServices"&gt;2.2 SPARQL query with OPTIONAL to two remote SPARQL endpoints&lt;/a&gt;&lt;br/&gt;&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;参考をopenrdf-sesame 2.6.9 + tomcat (&lt;b style='color:blue;'&gt;6.0.35 (今回IP:192.168.0.33)&lt;/b&gt; / &lt;b  style='color:purple;'&gt;7.0.30 (今回IP:192.168.0.18)&lt;/b&gt; )で行う．&lt;br/&gt;
&lt;small&gt;(注意: tomcat-7.0.30 では localhost:8080/openrdf-sesame にアクセスすると404を返すが，localhost:8080/openrdf-workbench へアクセスするとCurrent Selections/Sesame serverの項に表記されるので，応答はしているようである.)&lt;/small&gt;
&lt;br/&gt;&lt;/blockquote&gt;
&lt;blockquote class=myInsert&gt;1. &lt;a href="http://edotprintstacktrace.blogspot.jp/2012/09/openrdf-sesameopenrdf-workbenchrdfs.html"&gt;前々回&lt;/a&gt;を参考に&lt;b style='color:blue;'&gt;一台目(今回IP:192.168.0.33)&lt;/b&gt;に&lt;b style='color:blue;'&gt;people&lt;/b&gt;というMemory storeを作成し，下記(参考より)を登録する．
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
  @prefix foaf:  &amp;lt;http://xmlns.com/foaf/0.1/&gt; .
  @prefix : &amp;lt;http://example.org/&gt; .
  
  :people15  foaf:name     "Alice" .
  :people16  foaf:name     "Bob" .
  :people17  foaf:name     "Charles" .
  :people17  foaf:interest     &amp;lt;http://www.w3.org/2001/sw/rdb2rdf/&gt; .
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;br/&gt;&lt;/blockquote&gt;
&lt;blockquote class=myInsert&gt;2. 同じく&lt;a href="http://edotprintstacktrace.blogspot.jp/2012/09/openrdf-sesameopenrdf-workbenchrdfs.html"&gt;前々回&lt;/a&gt;を参考に&lt;b style='color:purple;'&gt;ニ台目(今回IP:192.168.0.18)&lt;/b&gt;に&lt;b style='color:purple;'&gt;people2&lt;/b&gt;というMemory storeを作成し，下記(参考より)を登録する．
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
  @prefix foaf:  &amp;lt;http://xmlns.com/foaf/0.1/&gt; .
  @prefix : &amp;lt;http://example.org/&gt; .
  
  :people15  foaf:knows    :people18 . 
  :people18  foaf:name     "Mike" .
  :people17  foaf:knows    :people19 . 
  :people19  foaf:name     "Daisy" .
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;br/&gt;&lt;/blockquote&gt;
&lt;blockquote class=myInsert&gt;3. 一台目もしくは二台目のworkbenchより下記(参考より)のSPARQL Queryを送信する(どちらからでも問題はない)．
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
PREFIX foaf:   &amp;lt;http://xmlns.com/foaf/0.1/&gt;
SELECT ?&lt;b style='color:red;'&gt;name&lt;/b&gt; ?interest ?known
WHERE
{
  SERVICE &amp;lt;&lt;b style='color:blue;'&gt;http://192.168.0.33:8080/openrdf-sesame/repositories/people&lt;/b&gt;&gt; { 
    ?person foaf:name ?name .  
    OPTIONAL { 
      ?person foaf:interest ?interest .
      SERVICE &amp;lt;&lt;b style='color:purple;'&gt;http://192.168.0.18:8080/openrdf-sesame/repositories/people2&lt;/b&gt;&gt; { 
        ?person foaf:knows ?known . } }
  }    
}
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;br/&gt;赤字の部分は参考では'people'になっていたが(2012/10/2現在), 参考内のQuery Resultと合わせるには'name'にする必要がある．&lt;br/&gt;&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;4. Query Resultを確認する．
&lt;blockquote class=myInsert2&gt;&lt;a href="http://2.bp.blogspot.com/-LKZx3Jj9Gfg/UGr2N9l2l5I/AAAAAAAAA0U/vb9B6dN-v_w/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-10-02%2B23.11.27.png" imageanchor="1" style=""&gt;&lt;img border="0" height="226" width="320" src="http://2.bp.blogspot.com/-LKZx3Jj9Gfg/UGr2N9l2l5I/AAAAAAAAA0U/vb9B6dN-v_w/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-10-02%2B23.11.27.png" /&gt;&lt;/a&gt;
&lt;/blockquote&gt;&lt;br/&gt;
基本は以下のQuery
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
PREFIX foaf:   &amp;lt;http://xmlns.com/foaf/0.1/&gt;
SELECT ?name
WHERE
{
  SERVICE &amp;lt;http://192.168.0.33:8080/openrdf-sesame/repositories/people&gt; { 
    ?person foaf:name ?name .  
  }    
}
&lt;/pre&gt;&lt;/blockquote&gt;&lt;br/&gt;
一台目(192.168.0.33)でなら以下でもよい
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
PREFIX foaf:   &amp;lt;http://xmlns.com/foaf/0.1/&gt;
SELECT ?name
WHERE
{
  ?person foaf:name ?name .      
}
&lt;/pre&gt;&lt;/blockquote&gt;&lt;br/&gt;
&lt;br/&gt;
上のQueryの場合の結果&lt;br/&gt;
&lt;blockquote class=myInsert2&gt;&lt;a href="http://4.bp.blogspot.com/-TMF94qOg6-o/UGr_3q-Bt0I/AAAAAAAAA0s/JvlmvHvTnR4/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-10-02%2B23.52.17.png" imageanchor="1" style=""&gt;&lt;img border="0" height="110" width="79" src="http://4.bp.blogspot.com/-TMF94qOg6-o/UGr_3q-Bt0I/AAAAAAAAA0s/JvlmvHvTnR4/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-10-02%2B23.52.17.png" /&gt;&lt;/a&gt;
&lt;/blockquote&gt;&lt;br/&gt;
&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/RmhxCQPH_FU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/1059370570807721033/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=1059370570807721033" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/1059370570807721033?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/1059370570807721033?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/RmhxCQPH_FU/sparql-query-with-optional-to-two.html" title="“SPARQL query with OPTIONAL to two remote SPARQL endpoints”をやってみる(やっただけ)" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-LKZx3Jj9Gfg/UGr2N9l2l5I/AAAAAAAAA0U/vb9B6dN-v_w/s72-c/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-10-02%2B23.11.27.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2012/10/sparql-query-with-optional-to-two.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08FQnwyeip7ImA9WhJbGU0.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-7426128733758357220</id><published>2012-09-28T21:48:00.002+09:00</published><updated>2012-09-29T15:56:53.292+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-29T15:56:53.292+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenRDF_Sesame" /><category scheme="http://www.blogger.com/atom/ns#" term="RDF" /><title>別のRDFS推論を試す(三段論法?) / openrdf-sesame 2.6.9のjar</title><content type="html">&lt;a href="http://edotprintstacktrace.blogspot.jp/2012/09/openrdf-sesae-269jarrdfs.html"&gt;前々回&lt;/a&gt;の&lt;a href="http://japan.internet.com/developer/20081121/26.html"&gt;参考サイト&lt;/a&gt;にある別のRDFS推論(3段論法的?)を試す．

&lt;blockquote class=myInsert&gt;&lt;b&gt;RDFS推論&lt;/b&gt;
以下のN3ファイルから
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
@prefix kb:  &amp;lt;http://knowledgebooks.com/ontology#&gt; .
@prefix rdf: &amp;lt;http://www.w3.org/1999/02/22-rdf-syntax-ns#&gt; .
@prefix rdfs:  &amp;lt;http://www.w3.org/2000/01/rdf-schema#&gt; .
@prefix foaf: &amp;lt;http://xmlns.com/foaf/0.1/#&gt; .

foaf:Person rdfs:subClassOf foaf:Agent .
kb:KnowledgeEngineer rdfs:subClassOf foaf:Person .

&amp;lt;http://www.markwatson.com/index.rdf&gt; a kb:KnowledgeEngineer .
&lt;/pre&gt;&lt;/blockquote&gt;
次のSPARQL Queryを実行して
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
PREFIX foaf:  &amp;lt;http://xmlns.com/foaf/0.1/#&gt;
   SELECT ?subject ?predicate WHERE { ?subject ?predicate foaf:Agent . }
&lt;/pre&gt;&lt;/blockquote&gt;
foaf:Agentとして以下を得る．
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
 http://xmlns.com/foaf/0.1/#Person http://www.w3.org/2000/01/rdf-schema#subClassOf
 http://xmlns.com/foaf/0.1/#Agent http://www.w3.org/2000/01/rdf-schema#subClassOf
 http://knowledgebooks.com/ontology#KnowledgeEngineer http://www.w3.org/2000/01/rdf-schema#subClassOf
 &lt;span style='color:red;'&gt;http://www.markwatson.com/index.rdf&lt;/span&gt; http://www.w3.org/1999/02/22-rdf-syntax-ns#type
&lt;/pre&gt;&lt;/blockquote&gt;
下記のような関係を見つけることになる．&lt;br/&gt;
&lt;a href="http://2.bp.blogspot.com/-JuQOwQVVP2s/UGWeNESSGdI/AAAAAAAAAz8/DHaAAC95PkI/s1600/a.png" imageanchor="1" style=""&gt;&lt;img border="0" height="266" width="320" src="http://2.bp.blogspot.com/-JuQOwQVVP2s/UGWeNESSGdI/AAAAAAAAAz8/DHaAAC95PkI/s320/a.png" /&gt;&lt;/a&gt;
&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;b&gt;コード&lt;/b&gt;&lt;br/&gt;
ファイル読み込みではなく，途中トリプルを一つ一つ入れて(赤い部分)みた．
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
import java.io.File;
import java.io.IOException;
import java.util.List;

import org.openrdf.model.Resource;
import org.openrdf.model.URI;
import org.openrdf.model.Value;
import org.openrdf.model.impl.URIImpl;
import org.openrdf.query.BindingSet;
import org.openrdf.query.MalformedQueryException;
import org.openrdf.query.QueryEvaluationException;
import org.openrdf.query.QueryLanguage;
import org.openrdf.query.TupleQuery;
import org.openrdf.query.TupleQueryResult;
import org.openrdf.repository.RepositoryException;
import org.openrdf.repository.sail.SailRepository;
import org.openrdf.repository.sail.SailRepositoryConnection;
import org.openrdf.rio.RDFFormat;
import org.openrdf.rio.RDFParseException;
import org.openrdf.sail.inferencer.fc.ForwardChainingRDFSInferencer;
import org.openrdf.sail.memory.MemoryStore;

public class Sesame_Test {

 /**
  * @param args
  * @throws RepositoryException
  * @throws IOException
  * @throws RDFParseException
  * @throws QueryEvaluationException
  * @throws MalformedQueryException
  */
 public static void main(String[] args) throws RepositoryException,
   RDFParseException, IOException, MalformedQueryException,
   QueryEvaluationException {
  MemoryStore ms = new MemoryStore();
  ForwardChainingRDFSInferencer fci = new ForwardChainingRDFSInferencer(
    ms);
  SailRepository myRepository = new SailRepository(fci);
  myRepository.initialize();
  SailRepositoryConnection con = myRepository.getConnection();
  
  if (true) {
   &lt;span style='color:red;'&gt;{
    Resource s = new URIImpl("http://xmlns.com/foaf/0.1/#Person");
    URI p = new URIImpl(
      "http://www.w3.org/2000/01/rdf-schema#subClassOf");
    Value o = new URIImpl("http://xmlns.com/foaf/0.1/#Agent");
    con.add(s, p, o);
   }&lt;/span&gt;
   {
    Resource s = new URIImpl(
      "http://knowledgebooks.com/ontology#KnowledgeEngineer");
    URI p = new URIImpl(
      "http://www.w3.org/2000/01/rdf-schema#subClassOf");
    Value o = new URIImpl("http://xmlns.com/foaf/0.1/#Person");
    con.add(s, p, o);
   }
   {
    Resource s = new URIImpl("http://www.markwatson.com/index.rdf");
    URI p = new URIImpl(
      "http://www.w3.org/1999/02/22-rdf-syntax-ns#type");
    // The 'a' in Notation3 format means the
    // 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' in URI;
    Value o = new URIImpl(
      "http://knowledgebooks.com/ontology#KnowledgeEngineer");
    con.add(s, p, o);
   }
  } else {
    File file = new File("rdf_files/class_example.n3");
    con.add(file, null, RDFFormat.N3);
  }
  
  String sparql_query = "PREFIX foaf:  &amp;lt;http://xmlns.com/foaf/0.1/#&gt;";
  sparql_query += " SELECT ?subject ?predicate WHERE { ?subject ?predicate foaf:Agent . }";
  TupleQuery tupleQuery = con.prepareTupleQuery(QueryLanguage.SPARQL,
    sparql_query);
  TupleQueryResult result = tupleQuery.evaluate();

  try {
   List&amp;lt;String&gt; bindingNames = result.getBindingNames();
   while (result.hasNext()) {
    BindingSet bindingSet = result.next();
    int size2 = bindingSet.size();
    for (int i = 0; i &amp;lt; size2; i++) {
     System.out.print('\t' + bindingSet.getValue(
       bindingNames.get(i)).stringValue());
    }
    System.out.print('\n');
   }
  } finally {
   result.close();
  }
 }
}
&lt;/pre&gt;&lt;/blockquote&gt;
jarは前々回を参照してもらうか，めんどくさければopenrdf-sesame-2.6.9-sdk.zip展開後のlibフォルダにあるの全部．
&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/MLp24X5l-YI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/7426128733758357220/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=7426128733758357220" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/7426128733758357220?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/7426128733758357220?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/MLp24X5l-YI/rdfs-openrdf-sesame-269jar.html" title="別のRDFS推論を試す(三段論法?) / openrdf-sesame 2.6.9のjar" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-JuQOwQVVP2s/UGWeNESSGdI/AAAAAAAAAz8/DHaAAC95PkI/s72-c/a.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2012/09/rdfs-openrdf-sesame-269jar.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08MQXkzfip7ImA9WhJbF0o.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-1755845249696317638</id><published>2012-09-28T03:33:00.000+09:00</published><updated>2012-09-28T03:51:20.786+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-28T03:51:20.786+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OpenRDF_Sesame" /><category scheme="http://www.blogger.com/atom/ns#" term="RDF" /><title>openrdf-sesameに付いてくるopenrdf-workbenchからRDFS推論をするまで</title><content type="html">&lt;a href="http://edotprintstacktrace.blogspot.jp/2012/09/openrdf-sesae-269jarrdfs.html"&gt;前回エントリー&lt;/a&gt;の内容を&lt;a href="http://edotprintstacktrace.blogspot.jp/2012/09/openrdf-sesame-269-s-war-tomcat-6035.html"&gt;前々回エントリー&lt;/a&gt;で作成したopenrdf-sesame serverとworkbenchから試みる．また最後にJavaを用いてSesame ServerへSPARQL Queryで問い合わせることを試みる．

&lt;blockquote class=myInsert&gt;&lt;b&gt;1. とりあえずSesame Serverが動作しているか確認&lt;/b&gt;&lt;br/&gt;
&lt;pre&gt;http://localhost:8080/openrdf-sesame&lt;/pre&gt; にアクセスして動作してみる&lt;br/&gt;
&lt;a href="http://3.bp.blogspot.com/-wrQk_VJgcNw/UGSOUycBh4I/AAAAAAAAAwY/aJhBr2XFTA8/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B2.34.03.png" imageanchor="1" style=""&gt;&lt;img border="0" height="246" width="320" src="http://3.bp.blogspot.com/-wrQk_VJgcNw/UGSOUycBh4I/AAAAAAAAAwY/aJhBr2XFTA8/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B2.34.03.png" /&gt;&lt;/a&gt;
&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;b&gt;2. とりあえずWorkbenchにアクセスする&lt;/b&gt;&lt;br/&gt;
&lt;pre&gt;http://localhost:8080/openrdf-workbench&lt;/pre&gt; にアクセスして動作してみる&lt;br/&gt;
&lt;a href="http://4.bp.blogspot.com/-Q1o2aHyzYZ8/UGSPRqVT3NI/AAAAAAAAAwk/sU40p_XSgX8/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B2.37.01.png" imageanchor="1" style=""&gt;&lt;img border="0" height="246" width="320" src="http://4.bp.blogspot.com/-Q1o2aHyzYZ8/UGSPRqVT3NI/AAAAAAAAAwk/sU40p_XSgX8/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B2.37.01.png" /&gt;&lt;/a&gt;
&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;b&gt;3. Repositoryを作る(とりあえず実行できる程度の内容)&lt;/b&gt;&lt;br/&gt;
&lt;blockquote class=myInsert2&gt;a. 左メニューよりRepositories/New repositoryを選択&lt;br/&gt; 
&lt;a href="http://4.bp.blogspot.com/-ocL3Qc24XKA/UGSQPRiYYuI/AAAAAAAAAww/tYHBIsWNj3I/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B2.37.01.a.png" imageanchor="1" style=""&gt;&lt;img border="0" height="246" width="320" src="http://4.bp.blogspot.com/-ocL3Qc24XKA/UGSQPRiYYuI/AAAAAAAAAww/tYHBIsWNj3I/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B2.37.01.a.png" /&gt;&lt;/a&gt;
&lt;/blockquote&gt;
&lt;blockquote class=myInsert2&gt;b. 作成するRepositoryのTypeを指定(&lt;b style='color:red;'&gt;Typeとして'Memory store with RDF Schema inferencing'&lt;/b&gt; RDFS推論を行うため!)&lt;br/&gt;
&lt;a href="http://2.bp.blogspot.com/-dvO6NBT5ne4/UGSRwXJuoyI/AAAAAAAAAw8/XMhAx5sYfXI/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B2.46.59.png" imageanchor="1" style=""&gt;&lt;img border="0" height="246" width="320" src="http://2.bp.blogspot.com/-dvO6NBT5ne4/UGSRwXJuoyI/AAAAAAAAAw8/XMhAx5sYfXI/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B2.46.59.png" /&gt;&lt;/a&gt;
&lt;/blockquote&gt;
&lt;blockquote class=myInsert2&gt;c. 'Create'ボタンにてRepositoryを作成&lt;br/&gt;
&lt;a href="http://2.bp.blogspot.com/-QdJDXeYN_SI/UGSRwsnlclI/AAAAAAAAAxI/H_w5_b7-drg/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B2.47.03.png" imageanchor="1" style=""&gt;&lt;img border="0" height="246" width="320" src="http://2.bp.blogspot.com/-QdJDXeYN_SI/UGSRwsnlclI/AAAAAAAAAxI/H_w5_b7-drg/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B2.47.03.png" /&gt;&lt;/a&gt;
&lt;/blockquote&gt;
&lt;blockquote class=myInsert2&gt;d. できあがったRepository詳細の表示(Current Selectionsに指定されていることを確認)&lt;br/&gt;
&lt;a href="http://4.bp.blogspot.com/-HJ5mWXwWfyE/UGSRxJg1VQI/AAAAAAAAAxU/2fYNFHSfw-c/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B2.47.06.png" imageanchor="1" style=""&gt;&lt;img border="0" height="246" width="320" src="http://4.bp.blogspot.com/-HJ5mWXwWfyE/UGSRxJg1VQI/AAAAAAAAAxU/2fYNFHSfw-c/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B2.47.06.png" /&gt;&lt;/a&gt;&lt;br/&gt;
ちなみにここの'Summary/Repository Location/Location'のURLがSPARQL QueryのEndpointになる
&lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;b&gt;4. ファイルアップロードによりRDF data(news.n3)を追加する&lt;/b&gt;&lt;br/&gt;
&lt;blockquote class=myInsert2&gt;a. 左メニューよりModify/Addを選択&lt;br/&gt;
&lt;a href="http://4.bp.blogspot.com/-Mrs3vZbm9zY/UGSU0fGIVJI/AAAAAAAAAxs/Hn5UCbDA7MA/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B2.57.56.png" imageanchor="1" style=""&gt;&lt;img border="0" height="299" width="320" src="http://4.bp.blogspot.com/-Mrs3vZbm9zY/UGSU0fGIVJI/AAAAAAAAAxs/Hn5UCbDA7MA/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B2.57.56.png" /&gt;&lt;/a&gt;
&lt;/blockquote&gt;
&lt;blockquote class=myInsert2&gt;b. 'Base URI:'にある'use base URI as context identifier'のチェックを外す，'RDF Data File:'にある'Select the file containing the RDF data you wish to upload'をセレクト, 'ファイル選択'にてnews.n3(&lt;a href="http://edotprintstacktrace.blogspot.jp/2012/09/openrdf-sesae-269jarrdfs.html"&gt;前回エントリー参照&lt;/a&gt;)を選択，'Upload'ボタンにてファイルをアップロード&lt;br/&gt;
&lt;a href="http://1.bp.blogspot.com/-DxLcZy0tIao/UGSXZjgUWuI/AAAAAAAAAyo/uHOEzPg99nk/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B3.11.52.png" imageanchor="1" style=""&gt;&lt;img border="0" height="235" width="320" src="http://1.bp.blogspot.com/-DxLcZy0tIao/UGSXZjgUWuI/AAAAAAAAAyo/uHOEzPg99nk/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B3.11.52.png" /&gt;&lt;/a&gt;
&lt;/blockquote&gt;
&lt;blockquote class=myInsert2&gt;c. 結果画面としてSummaryのページの表示を確認&lt;br/&gt;
&lt;a href="http://3.bp.blogspot.com/-MPL1r0IUF1g/UGSYCqoG0zI/AAAAAAAAAy0/tTGaWnBKTXU/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B3.12.16.png" imageanchor="1" style=""&gt;&lt;img border="0" height="235" width="320" src="http://3.bp.blogspot.com/-MPL1r0IUF1g/UGSYCqoG0zI/AAAAAAAAAy0/tTGaWnBKTXU/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B3.12.16.png" /&gt;&lt;/a&gt;
&lt;/blockquote&gt;
&lt;blockquote class=myInsert2&gt;d. 左メニューの'Explore/Export'にてアップロードされた内容が入っていることを確認(可能)&lt;br/&gt;
&lt;a href="http://3.bp.blogspot.com/-VAiDXRyG1OA/UGSYMS6__DI/AAAAAAAAAzA/y-FInx7ofKI/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B3.12.20.png" imageanchor="1" style=""&gt;&lt;img border="0" height="235" width="320" src="http://3.bp.blogspot.com/-VAiDXRyG1OA/UGSYMS6__DI/AAAAAAAAAzA/y-FInx7ofKI/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B3.12.20.png" /&gt;&lt;/a&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;b&gt;5. SPARQL Queryを実行する&lt;/b&gt;&lt;br/&gt;
&lt;blockquote class=myInsert2&gt;a. 左メニューより'Explore/Query'を選択&lt;br/&gt;
&lt;a href="http://2.bp.blogspot.com/-eb-RS7WaQRg/UGSZYwXciXI/AAAAAAAAAzM/l-GsKeBGIok/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B3.10.24.png" imageanchor="1" style=""&gt;&lt;img border="0" height="235" width="320" src="http://2.bp.blogspot.com/-eb-RS7WaQRg/UGSZYwXciXI/AAAAAAAAAzM/l-GsKeBGIok/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B3.10.24.png" /&gt;&lt;/a&gt;
&lt;/blockquote&gt;
&lt;blockquote class=myInsert2&gt;b. 'Query:'にクエリを記述，'Execute'ボタンにて実行('Include inferred statements'のチェックは外さない)&lt;br/&gt;
&lt;blockquote class=myInsert3&gt;&lt;pre&gt;PREFIX kb:  &lt;http://knowlegebooks.com/ontology/#&gt; SELECT ?subject ?object WHERE { ?subject kb:containsPlace ?object . }&lt;/pre&gt;&lt;/blockquote&gt;&lt;br/&gt;
&lt;a href="http://3.bp.blogspot.com/-GGFEc1S4NEQ/UGSZZWjj9KI/AAAAAAAAAzY/mrhKXF_q8oM/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B3.20.19.png" imageanchor="1" style=""&gt;&lt;img border="0" height="235" width="320" src="http://3.bp.blogspot.com/-GGFEc1S4NEQ/UGSZZWjj9KI/AAAAAAAAAzY/mrhKXF_q8oM/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B3.20.19.png" /&gt;&lt;/a&gt;
&lt;/blockquote&gt;
&lt;blockquote class=myInsert2&gt;c. 結果の確認&lt;br/&gt;
&lt;a href="http://2.bp.blogspot.com/-niU2Dk06PVw/UGSZZ1CcQ9I/AAAAAAAAAzk/IhCdCA5sU0g/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B3.20.24.png" imageanchor="1" style=""&gt;&lt;img border="0" height="235" width="320" src="http://2.bp.blogspot.com/-niU2Dk06PVw/UGSZZ1CcQ9I/AAAAAAAAAzk/IhCdCA5sU0g/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B3.20.24.png" /&gt;&lt;/a&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;b&gt;番外編: JavaでEndpointへQueryを投げてみる&lt;/b&gt;&lt;br/&gt;
ライブラリは&lt;a href="http://edotprintstacktrace.blogspot.jp/2012/09/openrdf-sesae-269jarrdfs.html"&gt;前回エントリー&lt;/a&gt;の状態にさらに，lib/commons-httpclient-3.1.jar, lib/commons-codec-1.4.jarを加える．またcommons-logging.jarも加えるのだがこれはopenrdf-sesame-*-sdk.zipに入っていないので&lt;a href="http://commons.apache.org/logging/"&gt;サイト&lt;/a&gt;から取得する．&lt;br/&gt;
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
import java.io.IOException;
import java.util.List;

import org.openrdf.query.BindingSet;
import org.openrdf.query.MalformedQueryException;
import org.openrdf.query.QueryEvaluationException;
import org.openrdf.query.QueryLanguage;
import org.openrdf.query.TupleQuery;
import org.openrdf.query.TupleQueryResult;
import org.openrdf.repository.RepositoryConnection;
import org.openrdf.repository.RepositoryException;
import org.openrdf.repository.sparql.SPARQLRepository;
import org.openrdf.rio.RDFParseException;

public class Sesame_Test {

 public static void main(String[] args) throws RepositoryException,
   MalformedQueryException, QueryEvaluationException,
   RDFParseException, IOException {

  String queryEndpointUrl = "http://localhost:8080/openrdf-sesame/repositories/memory-rdfs";
  SPARQLRepository myRepository = new SPARQLRepository(queryEndpointUrl);
  myRepository.initialize();
  RepositoryConnection con = myRepository.getConnection();

  String sparql_query = "PREFIX kb: &amp;lt;http://knowledgebooks.com/ontology#&gt; SELECT ?subject ?object WHERE { ?subject kb:containsPlace ?object . }";

  TupleQuery tupleQuery = con.prepareTupleQuery(QueryLanguage.SPARQL,
    sparql_query);
  //tupleQuery.setIncludeInferred(true); //this property's default value is true.

  TupleQueryResult result = tupleQuery.evaluate();

  try {
   List&amp;lt;String&gt; bindingNames = result.getBindingNames();
   while (result.hasNext()) {
    BindingSet bindingSet = result.next();
    for (int i = 0; i &amp;lt; bindingSet.size(); i++) {
     String val = bindingSet.getValue(bindingNames.get(i))
       .stringValue();
     System.out.print('\t' + val);
    }
    System.out.print('\n');
   }
  } finally {
   result.close();
  }
 }

}
&lt;/pre&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/ZRrpXsEDkQ0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/1755845249696317638/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=1755845249696317638" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/1755845249696317638?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/1755845249696317638?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/ZRrpXsEDkQ0/openrdf-sesameopenrdf-workbenchrdfs.html" title="openrdf-sesameに付いてくるopenrdf-workbenchからRDFS推論をするまで" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-wrQk_VJgcNw/UGSOUycBh4I/AAAAAAAAAwY/aJhBr2XFTA8/s72-c/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-28%2B2.34.03.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2012/09/openrdf-sesameopenrdf-workbenchrdfs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4BSHw6fSp7ImA9WhJbF08.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-539784503608842405</id><published>2012-09-27T01:23:00.000+09:00</published><updated>2012-09-27T14:32:39.215+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-27T14:32:39.215+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenRDF_Sesame" /><category scheme="http://www.blogger.com/atom/ns#" term="RDF" /><title>openrdf-sesae 2.6.9のjarを用いてRDFS推論の例を真似してみた（だけ）．</title><content type="html">&lt;blockquote class=myInsert&gt;&lt;b&gt;参考&lt;/b&gt; &lt;a href="http://japan.internet.com/developer/20081121/26.html"&gt;Java/JRuby開発者のためのセマンティックWeb入門&lt;/a&gt;
&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;b&gt;参考サイトのRDFS推論の例の実行をopenrdf-sesame 2.6.9のjarで試みる&lt;/b&gt;
&lt;blockquote class=myInsert2&gt;news.n3を読み込み次のsparql queryによって結果を得る&lt;br/&gt;
sparql query
&lt;blockquote class=myInsert3&gt;
&lt;pre&gt;
PREFIX kb:  &amp;lt;http://knowlegebooks.com/ontology/#&gt; SELECT ?subject ?object WHERE { ?subject kb:containsPlace ?object . }
&lt;/pre&gt;
&lt;/blockquote&gt;

news.n3 (参考サイトのサンプルソース内ファイル．以下は参照サイトのリスト5にある同ファイルの最初の数行)
&lt;blockquote class=myInsert3&gt;&lt;pre&gt;
@prefix kb: &amp;lt;http://knowledgebooks.com/ontology#&gt; .
@prefix rdfs: &amp;lt;http://www.w3.org/2000/01/rdf-schema#&gt; .

kb:containsCity rdfs:subPropertyOf kb:containsPlace .
kb:containsCountry rdfs:subPropertyOf kb:containsPlace .
kb:containsState rdfs:subPropertyOf kb:containsPlace .

&amp;lt;http://news.yahoo.com/s/nm/20080616/ts_nm/usa_flooding_dc_16 /&gt; kb:containsCity "Burlington" , "Denver" , "St. Paul" , "Chicago" , "Quincy" , "CHICAGO" , "Iowa City" ;
  kb:containsRegion "U.S. Midwest" , "Midwest" ;
  kb:containsCountry "United States" , "Japan" ;
  kb:containsState "Minnesota" , "Illinois" , "Mississippi" , "Iowa" ;
  kb:containsOrganization "National Guard" , "U.S. Department of Agriculture" , "White House" , "Chicago Board of Trade" , "Department of Transportation" ;
  kb:containsPerson "Dena Gray-Fisher" , "Donald Miller" , "Glenn Hollander" , "Rich Feltes" , "George W. Bush" ;
  kb:containsIndustryTerm "food inflation" , "food" , "finance ministers" , "oil" .
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;br/&gt;
上記部分だけではあるが，図示すると以下の２つの図のようになる．&lt;br/&gt;
(ただし，&lt;pre&gt;PREFIX rdfs: &amp;lt;http://www.w3.org/2000/01/rdf-schema#&gt;
PREFIX kb: &amp;lt;http://knowledgebooks.com/ontology#&gt;&lt;/pre&gt;)&lt;br/&gt;
&lt;a href="http://1.bp.blogspot.com/-q5a61v3jwvU/UGPhIOhzTmI/AAAAAAAAAwA/DNx9Jc5mDFE/s1600/a.png" imageanchor="1" style=""&gt;&lt;img border="0" height="101" width="320" src="http://1.bp.blogspot.com/-q5a61v3jwvU/UGPhIOhzTmI/AAAAAAAAAwA/DNx9Jc5mDFE/s320/a.png" /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;a href="http://1.bp.blogspot.com/-zdx4uN06o48/UGPhHV-CY5I/AAAAAAAAAv0/ZS_Xzf6cvGw/s1600/b.png" imageanchor="1" style=""&gt;&lt;img border="0" height="320" width="174" src="http://1.bp.blogspot.com/-zdx4uN06o48/UGPhHV-CY5I/AAAAAAAAAv0/ZS_Xzf6cvGw/s320/b.png" /&gt;&lt;/a&gt;
&lt;br/&gt;
( predicateとしてkb:containsPlaceというURIは，このnews.n3ファイルにはない．)
&lt;br/&gt;
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;
&lt;b&gt;やったこと&lt;/b&gt;
&lt;blockquote class=myInsert2&gt;1. Eclipse内にJava Project('Sesame_Test')を作成．
&lt;/blockquote&gt;
&lt;blockquote class=myInsert2&gt;2. openrdf-sesame-2.6.9/libをImport．
&lt;/blockquote&gt;
&lt;blockquote class=myInsert2&gt;3. lib/sesame-query*.jar, lib/sesame-repository-*.jar, lib/sesame-rio-*.jar, lib/sesame-sail-*.jar, lib/sesame-util-*.jar, lib/slf4j-api-*.jarをBuild Pathに追加．
&lt;/blockquote&gt;
&lt;blockquote class=myInsert2&gt;4. 参照サイトのサンプルソース内'rdf_files/news.n3'をImport．
&lt;/blockquote&gt;
&lt;blockquote class=myInsert2&gt;5. Sample_Test.javaクラスを作成．
&lt;blockquote class=myInsert3&gt;&lt;pre&gt;
import java.io.File;
import java.io.IOException;
import java.util.List;

import org.openrdf.query.BindingSet;
import org.openrdf.query.MalformedQueryException;
import org.openrdf.query.QueryEvaluationException;
import org.openrdf.query.QueryLanguage;
import org.openrdf.query.TupleQuery;
import org.openrdf.query.TupleQueryResult;
import org.openrdf.repository.RepositoryException;
import org.openrdf.repository.sail.SailRepository;
import org.openrdf.repository.sail.SailRepositoryConnection;
import org.openrdf.rio.RDFFormat;
import org.openrdf.rio.RDFParseException;
import org.openrdf.sail.inferencer.fc.ForwardChainingRDFSInferencer;
import org.openrdf.sail.memory.MemoryStore;

public class Sesame_Test {

 private static SailRepository myRepository;
 private static SailRepositoryConnection con;

 /**
  * @param args
  * @throws RepositoryException
  * @throws IOException
  * @throws RDFParseException
  * @throws QueryEvaluationException
  * @throws MalformedQueryException
  */
 public static void main(String[] args) throws RepositoryException,
   RDFParseException, IOException, MalformedQueryException,
   QueryEvaluationException {
  MemoryStore ms = new MemoryStore();
  ForwardChainingRDFSInferencer fci = new ForwardChainingRDFSInferencer(
    ms);
  myRepository = new SailRepository(fci);
  myRepository.initialize();
  System.out.println(myRepository);
  con = myRepository.getConnection();

  &lt;b style='color:red;'&gt;File file = new File("rdf_files/news.n3");
  con.add(file, null, RDFFormat.N3); //the news.n3 file doesn't require the 'baseURI'. (?)

  String sparql_query = "PREFIX kb: &amp;lt;http://knowledgebooks.com/ontology#&gt; SELECT ?subject ?object WHERE { ?subject kb:containsPlace \"Japan\" . }";&lt;/b&gt;

  TupleQuery tupleQuery = con.prepareTupleQuery(QueryLanguage.SPARQL,
    sparql_query);
  TupleQueryResult result = tupleQuery.evaluate();
  
  try {
   List&amp;lt;String&gt; bindingNames = result.getBindingNames();
   while (result.hasNext()) {
    BindingSet bindingSet = result.next();
    int size2 = bindingSet.size();
    for (int i = 0; i &amp;lt; size2; i++) {
     String val = bindingSet.getValue(bindingNames.get(i))
       .stringValue();
     System.out.print('\t');
     System.out.print(val);
    }
    System.out.print('\n');
   }
  } finally {
   result.close();
  }
 }

}
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;/blockquote&gt;

&lt;blockquote class=myInsert2&gt;
&lt;b&gt;ここまでのプロジェクトの状態（Package Explorer）&lt;/b&gt;&lt;br/&gt;
&lt;a href="http://3.bp.blogspot.com/-ZC0QQ4ZGtIo/UGMgXK21X_I/AAAAAAAAAvc/3jfbTUXNx7k/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-27%2B0.08.20.png" imageanchor="1" style=""&gt;&lt;img border="0" height="320" width="149" src="http://3.bp.blogspot.com/-ZC0QQ4ZGtIo/UGMgXK21X_I/AAAAAAAAAvc/3jfbTUXNx7k/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-09-27%2B0.08.20.png" /&gt;&lt;/a&gt;
&lt;br/&gt;
&lt;/blockquote&gt;
&lt;br/&gt;
&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;結果(最初の数行)&lt;br/&gt;
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
 http://news.yahoo.com/s/nm/20080616/ts_nm/usa_flooding_dc_16 / Burlington
 http://news.yahoo.com/s/nm/20080616/ts_nm/usa_flooding_dc_16 / Denver
 http://news.yahoo.com/s/nm/20080616/ts_nm/usa_flooding_dc_16 / St. Paul
 http://news.yahoo.com/s/nm/20080616/ts_nm/usa_flooding_dc_16 / Chicago
 http://news.yahoo.com/s/nm/20080616/ts_nm/usa_flooding_dc_16 / Quincy
…
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;br/&gt;
&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;news.n3でなく，rdfs.ntとnews.ntをそれぞれ読み込んむ場合は上記コードの赤色部分を以下のように変更する．&lt;br/&gt;
(rdfs.nt, news.nt内では'knowledgebooks.com/ontology'に関するURI先頭が'http://'でなく'http:&lt;b&gt;:&lt;/b&gt;//'となっているのでsparql queryも変更)
&lt;blockquote class=myInsert3&gt;&lt;pre&gt;
  File rdfs_file = new File("rdf_files/rdfs.nt");
  con.add(rdfs_file, null, RDFFormat.NTRIPLES); //the rdfs.nt file doesn't require the 'baseURI'. (?)
  File news_file = new File("rdf_files/news.nt"); 
  con.add(news_file, null, RDFFormat.NTRIPLES); //the news.nt file doesn't require the 'baseURI'. (?)

  String sparql_query = "PREFIX kb: &amp;lt;http:&lt;b&gt;:&lt;/b&gt;//knowledgebooks.com/ontology#&gt; SELECT ?subject ?object WHERE { ?subject kb:containsPlace ?object . }";

&lt;/pre&gt;&lt;/blockquote&gt;&lt;br/&gt;&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/-b8cEkIP92k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/539784503608842405/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=539784503608842405" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/539784503608842405?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/539784503608842405?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/-b8cEkIP92k/openrdf-sesae-269jarrdfs.html" title="openrdf-sesae 2.6.9のjarを用いてRDFS推論の例を真似してみた（だけ）．" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-q5a61v3jwvU/UGPhIOhzTmI/AAAAAAAAAwA/DNx9Jc5mDFE/s72-c/a.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2012/09/openrdf-sesae-269jarrdfs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYMRXw_fSp7ImA9WhJbFko.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-1891869905444139290</id><published>2012-09-27T00:09:00.000+09:00</published><updated>2012-09-27T00:09:44.245+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-27T00:09:44.245+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="OpenRDF_Sesame" /><category scheme="http://www.blogger.com/atom/ns#" term="RDF" /><title>openrdf-sesame 2.6.9 's war ( tomcat 6.0.35 / mac os 10.8.2  )</title><content type="html">&lt;blockquote class=myInsert&gt;&lt;pre&gt;$ unzip openrdf-sesame-2.6.9-sdk.zip&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;blockquote class=myInsert&gt;&lt;pre&gt;$ unzip apache-tomcat-6.0.35.zip&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;blockquote class=myInsert&gt;&lt;pre&gt;$ chmod a+x /path/to/apache-tomcat-6.0.35/bin/*.sh&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;blockquote class=myInsert&gt;&lt;pre&gt;$ cp -p /path/to/openrdf-sesame-2.6.9/war/*.war /path/to/apache-tomcat-6.0.35/webapps/&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;blockquote class=myInsert&gt;&lt;pre&gt;$ /path/to/apache-tomcat-6.0.35/bin/startup.sh&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;blockquote class=myInsert&gt;&lt;pre&gt;$ open http://localhost:8080/open-sesame&lt;/pre&gt;
&lt;blockquote class=myInsert2&gt;if you can access the page, you can find following folder.
&lt;pre&gt;/Users/[user]/Library/Application Support/Aduna/OpenRDF Sesame/&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;blockquote class=myInsert2&gt;
if you found following folder.
&lt;pre&gt;/Users/[user]/Library/Application Support/Aduna/OpenRDF/&lt;/pre&gt;
&lt;blockquote class=myInsert3&gt;you edit the file ( /path/to/apache-tomcat-6.0.35/webapps/open-sesame/WEB-INF/openrdf-http-server-servlet.xml ). the 'applicationId','longName'  properties which are in the 'adunaAppConfig' bean element are modified from 'OpenRDF Sesame' to 'OpenRDF_Sesame'. and restart the server.&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;blockquote class=myInsert&gt;&lt;pre&gt;$ open http://localhost:8080/openrdf-workbench&lt;/pre&gt;
&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/qunS2ypswZg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/1891869905444139290/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=1891869905444139290" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/1891869905444139290?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/1891869905444139290?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/qunS2ypswZg/openrdf-sesame-269-s-war-tomcat-6035.html" title="openrdf-sesame 2.6.9 's war ( tomcat 6.0.35 / mac os 10.8.2  )" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2012/09/openrdf-sesame-269-s-war-tomcat-6035.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcCSHg9cCp7ImA9WhJbFEo.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-5733576344724509718</id><published>2012-09-24T12:33:00.003+09:00</published><updated>2012-09-24T18:14:29.668+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-24T18:14:29.668+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ruby on Rails" /><category scheme="http://www.blogger.com/atom/ns#" term="RDF" /><title>Rails で Turtle ( .ttl ) を書き出す(単にフォーマットの追加)</title><content type="html">参考: &lt;a href="http://www.slideshare.net/metade/linked-data-on-rails"&gt;Linked Data on Rails&lt;/a&gt;

&lt;blockquote class=myInsert&gt;&lt;pre&gt;
$ rails new turtleTest
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;pre&gt;
$ cd turtleTest
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;pre&gt;
$ rails generate scaffold user username:string
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;pre&gt;
$ vi config/initializers/mime_types.rb //Edit
&lt;/pre&gt;

&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
Mime::Type.register "text/turtle", :ttl
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;pre&gt;
$ vi app/views/users/index.ttl.erb //Create
&lt;/pre&gt;
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
@prefix ns: &amp;lt;http://example.org/ns&gt; .
@prefix xsd: &amp;lt;http://www.w3.org/2001/XMLSchema&gt; .

&amp;lt;% @users.each_with_index do |user, i| %&gt;
_:a&amp;lt;%= (i+1) %&gt; ns:name "&amp;lt;%= user.username %&gt;"^^xsd:string .
&amp;lt;% end %&gt;
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;pre&gt;
$ vi app/views/users/show.ttl.erb //Create
&lt;/pre&gt;
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
@prefix ns: &amp;lt;http://example.org/ns&gt; .
@prefix xsd: &amp;lt;http://www.w3.org/2001/XMLSchema&gt; .

_:a ns:username "&amp;lt;%= @user.username %&gt;"^^xsd:string .
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;pre&gt;
$ vi app/controllers/users_controller.rb //Edit
&lt;/pre&gt;
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
…
  def index
    @users = User.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render :json =&gt; @users }
      &lt;span style='color:red;'&gt;format.ttl&lt;/span&gt;
    end
  end
…
  def show
    @user = User.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render :json =&gt; @user }
      &lt;span style='color:red;'&gt;format.ttl&lt;/span&gt;
    end
  end
…
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;pre&gt;
$ rake db:migrate
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;pre&gt;
$ rails server
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;Result&lt;blockquote class=myInsert2&gt;http://0.0.0.0:3000/users.ttl
&lt;blockquote class=myInsert3&gt;&lt;pre&gt;
@prefix ns: &amp;lt;http://example.org/ns&gt; .
@prefix xsd: &amp;lt;http://www.w3.org/2001/XMLSchema&gt; .

_:a0 ns:name "あいうえお"^^xsd:string .
_:a1 ns:name "かきくけこ"^^xsd:string .
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;

&lt;blockquote class=myInsert2&gt;http://0.0.0.0:3000/users/1.ttl
&lt;blockquote class=myInsert3&gt;&lt;pre&gt;
@prefix ns: &amp;lt;http://example.org/ns&gt; .
@prefix xsd: &amp;lt;http://www.w3.org/2001/XMLSchema&gt; .

_:a ns:name "あいうえお"^^xsd:string .
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/2NO_YubXdPY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/5733576344724509718/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=5733576344724509718" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/5733576344724509718?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/5733576344724509718?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/2NO_YubXdPY/rails-turtle-ttl.html" title="Rails で Turtle ( .ttl ) を書き出す(単にフォーマットの追加)" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2012/09/rails-turtle-ttl.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUHQXg6fyp7ImA9WhJRFkU.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-7738159750081516565</id><published>2012-07-18T21:24:00.001+09:00</published><updated>2012-07-19T16:33:50.617+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-19T16:33:50.617+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="Mono" /><category scheme="http://www.blogger.com/atom/ns#" term="LINQ" /><category scheme="http://www.blogger.com/atom/ns#" term="Homebrew" /><title>MacOS X 10.7.4 で Homebrew 0.9.2 を用いてMono 2.10.5 を入れて C# LINQ を体験する</title><content type="html">体験という程のことではなく，やってみた．って程度．
&lt;blockquote class=myInsert&gt;&lt;b&gt;動機&lt;/b&gt;&lt;br/&gt;
&lt;a href="http://www.oki-osk.jp/esc/ruby/20-lazy.html"&gt;Ruby 2.0 メモ: Lazy と LINQ とループ融合&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;b&gt;Xcodeの更新と問題&lt;/b&gt;&lt;br/&gt;
&lt;ol&gt;
&lt;li&gt;App StoreのXcodeからインストールしたのだが起動しようとするとCrush． &lt;/li&gt;&lt;li&gt;com.apple.dt.IDE.IDEInterfaceBuilderKit が無いとかいう問題のようだがよくわからない&lt;/li&gt;
&lt;li&gt;~/Library/Preferences/com.apple.dt.*.plistなどの動かしたがだめだったが，plistをダブルクリックしたら起動（古いXcode類を破棄するかどうかのダイアログ)しはじめた．偶然かもしれないがメモ（古いXcode類(/DeveloperのものやInstall Xcode.appなど)がいたのがまずかったのかもしれない）．&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;b&gt;Command Line Tools for Xcodeをインストール&lt;/b&gt;&lt;br/&gt;
&lt;ol&gt;
&lt;li&gt;Xcodeのメニューバーアイテム Xcode/Open Developer Tool/More Developer Tools… よりApple DeveloperサイトのDownloadページを開く．
&lt;li&gt;ログイン
&lt;li&gt;Command Line Tools for Xcodeの最新(今回は June 2012)をDownload(ファイル名は command_line_tools_for_xcode_june_2012.dmg )．
&lt;li&gt;dmgにはインストーラーが入っているのでそのままインストール．
&lt;/ol&gt;
ちなみにQuartz Composer等は上記DownloadページのGraphics Toolsから入れる) 
&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;b&gt;Homebrewのインストール&lt;/b&gt;&lt;br/&gt;
&lt;a href="https://github.com/mxcl/homebrew/wiki/installation"&gt;Installation · mxcl/homebrew Wiki · GitHub&lt;/a&gt;の通りコマンドを実行
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;&lt;b&gt;$ /usr/bin/ruby -e "$(/usr/bin/curl -fsSL https://raw.github.com/mxcl/homebrew/master/Library/Contributions/install_homebrew.rb)"&lt;/b&gt;

…

==&gt; Installation successful!
You should run `brew doctor' *before* you install anything.
Now type: brew help
$
&lt;/pre&gt;&lt;/blockquote&gt;
確認
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
&lt;b&gt;$ brew doctor&lt;/b&gt;
Your system is raring to brew.
$
&lt;/pre&gt;&lt;/blockquote&gt;
ちなみに，
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
&lt;b&gt;$ brew --version&lt;/b&gt;
0.9.2
$
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;b&gt;Monoのインストール&lt;/b&gt;&lt;br/&gt;
どこかのサイト(メモするの忘れてた)でみた通りやってみた．ので一つ目のコマンドがなんで必要かわかってない
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
&lt;b&gt;$ brew tap adamv/alt&lt;/b&gt;
Cloning into '/usr/local/Library/Taps/adamv-alt'...
remote: Counting objects: 1073, done.
remote: Compressing objects: 100% (509/509), done.
remote: Total 1073 (delta 643), reused 946 (delta 551)
Receiving objects: 100% (1073/1073), 178.16 KiB | 98 KiB/s, done.
Resolving deltas: 100% (643/643), done.
Warning: Could not tap adamv/alt/flex_sdk over mxcl/master/flex_sdk
Tapped 32 formula
$
&lt;b&gt;$ brew install mono&lt;/b&gt;
==&gt; Downloading http://download.mono-project.com/sources/mono/mono-2.10.5.tar.bz
######################################################################## 100.0%
==&gt; ./configure --prefix=/usr/local/Cellar/mono/2.10.5 --with-glib=embedded --en
==&gt; make
make  all-recursive

…

MCS     [net_4_0] mono-api-info.exe
error CS0006: Metadata file `../../class/lib/net_2_0/Mono.Cecil.dll' could not be found
Compilation failed: 1 error(s), 0 warnings
make[8]: *** [mono-api-info.exe] Error 1
make[7]: *** [do-all] Error 2
make[6]: *** [all-recursive] Error 1
make[5]: *** [all-recursive] Error 1
make[4]: *** [profile-do--net_4_0--all] Error 2
make[3]: *** [profiles-do--all] Error 2
make[2]: *** [all-local] Error 2
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
config.log was copied to /Users/Work/Library/Logs/Homebrew
==&gt; Build Environment
HOMEBREW_VERSION: 0.9.2
HEAD: (none)
CPU: 8-core 64-bit sandybridge
OS X: 10.7.4-x86_64
Xcode: 4.3.3 =&gt; /Developer
CLT: 1.0.0.9000000000.1.1249367152
X11: 2.6.4 @ /usr/X11
CC: /usr/bin/clang
CXX: /usr/bin/clang++ =&gt; /usr/bin/clang
LD: /usr/bin/clang
CFLAGS: -Os -w -pipe -march=native -Qunused-arguments -mmacosx-version-min=10.7
CXXFLAGS: -Os -w -pipe -march=native -Qunused-arguments -mmacosx-version-min=10.7
CPPFLAGS: -isystem /usr/local/include
LDFLAGS: -L/usr/local/lib
MACOSX_DEPLOYMENT_TARGET: 10.7
MAKEFLAGS: -j8
Error: Failed executing: make (mono.rb:16)
If `brew doctor` does not, this may help you fix or report the issue:
    https://github.com/adamv/homebrew-alt/issues/new
$
&lt;/pre&gt;&lt;/blockquote&gt;
で停止．&lt;br/&gt;

なんとなく勢いで再度同じコマンドを実行してみたら，
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
&lt;b&gt;$ brew install mono&lt;/b&gt;
==&gt; Downloading http://download.mono-project.com/sources/mono/mono-2.10.5.tar.bz2
Already downloaded: /Library/Caches/Homebrew/mono-2.10.5.tar.bz2
==&gt; ./configure --prefix=/usr/local/Cellar/mono/2.10.5 --with-glib=embedded --enable-nls=no --host=x86_64-apple-darwin10
==&gt; make
==&gt; make install
Warning: Non-executables were installed to "bin".
Installing non-executables to "bin" is bad practice.
The offending files are:
/usr/local/Cellar/mono/2.10.5/bin/mono-gdb.py
/usr/local/Cellar/mono/2.10.5/bin/mono-sgen-gdb.py
==&gt; Summary
/usr/local/Cellar/mono/2.10.5: 859 files, 153M, built in 82.2 minutes
$
&lt;/pre&gt;&lt;/blockquote&gt;
なんかうまくいっちゃった．&lt;br/&gt;

ちなみに．
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
&lt;b&gt;$ mono --version&lt;/b&gt;
Mono JIT compiler version 2.10.5 (tarball 2012年 7月18日 水曜日 19時39分54秒 JST)
Copyright (C) 2002-2011 Novell, Inc, Xamarin, Inc and Contributors. www.mono-project.com
 TLS:           normal
 SIGSEGV:       normal
 Notification:  kqueue
 Architecture:  amd64
 Disabled:      none
 Misc:          softdebug 
 LLVM:          supported, not enabled.
 GC:            Included Boehm (with typed GC)
&lt;b&gt;$ dmcs --version&lt;/b&gt;
Mono C# compiler version 2.10.5.0
$
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;b&gt;MonoでC# LINQする&lt;/b&gt;&lt;br/&gt;
動機のページにあったとおりa.cs, b.cs, c.csを用意．
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;&lt;b&gt;$ which dmcs&lt;/b&gt;
/usr/local/bin/dmcs
&lt;b&gt;$ which mono&lt;/b&gt;
/usr/local/bin/mono
$
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
&lt;b&gt;$ dmcs a.cs&lt;/b&gt;
&lt;b&gt;$ mono a.exe &lt;/b&gt;
=&gt; 3, 13, 23
$
&lt;/pre&gt;&lt;/blockquote&gt;

&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
&lt;b&gt;$ dmcs b.cs&lt;/b&gt;
&lt;b&gt;$ mono b.exe&lt;/b&gt; 
1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-21-22-23-=&gt; 3, 13, 23
$
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
&lt;b&gt;$ dmcs c.cs&lt;/b&gt;
&lt;b&gt;$ mono c.exe&lt;/b&gt; 
3
13
23
$
&lt;/pre&gt;&lt;/blockquote&gt;
&lt;/blockquote&gt;

というメモ．&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/9djhMzFKkfU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/7738159750081516565/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=7738159750081516565" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/7738159750081516565?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/7738159750081516565?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/9djhMzFKkfU/macos-x-1074-homebrew-092-mono-2105-linq.html" title="MacOS X 10.7.4 で Homebrew 0.9.2 を用いてMono 2.10.5 を入れて C# LINQ を体験する" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2012/07/macos-x-1074-homebrew-092-mono-2105-linq.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUDQXszeSp7ImA9WhJSFEs.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-4709628539127964566</id><published>2012-06-30T00:53:00.000+09:00</published><updated>2012-07-05T15:04:30.581+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-05T15:04:30.581+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Cocoa" /><title>colored token in NSTokenField</title><content type="html">&lt;a href="http://edotprintstacktrace.tumblr.com/post/26420382864/nstokenattachmentcell-extention-h-import"&gt;http://edotprintstacktrace.tumblr.com/post/26420382864/nstokenattachmentcell-extention-h-import&lt;/a&gt;
&lt;a href="http://www.google.co.jp/search?q=NSTokenAttachmentCell.h"&gt;http://www.google.co.jp/search?q=NSTokenAttachmentCell.h&lt;/a&gt;
&lt;br/&gt;
&lt;a href="http://1.bp.blogspot.com/-4_U3WlxDwgk/T-3T5zRu-4I/AAAAAAAAAvM/JJBTBhQx4MM/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-06-30%2B1.11.27.png" imageanchor="1" style=""&gt;&lt;img border="0" height="30" width="320" src="http://1.bp.blogspot.com/-4_U3WlxDwgk/T-3T5zRu-4I/AAAAAAAAAvM/JJBTBhQx4MM/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-06-30%2B1.11.27.png" /&gt;&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/6M70aMziQW8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/4709628539127964566/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=4709628539127964566" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/4709628539127964566?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/4709628539127964566?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/6M70aMziQW8/colored-token-in-nstokenfield.html" title="colored token in NSTokenField" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-4_U3WlxDwgk/T-3T5zRu-4I/AAAAAAAAAvM/JJBTBhQx4MM/s72-c/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-06-30%2B1.11.27.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2012/06/colored-token-in-nstokenfield.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QCSH8ycSp7ImA9WhVaFkU.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-6963916959891005171</id><published>2012-06-15T00:53:00.002+09:00</published><updated>2012-06-15T00:56:09.199+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-15T00:56:09.199+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="Quartz Composer" /><category scheme="http://www.blogger.com/atom/ns#" term="coca" /><title>画像からMeshをつくってみる</title><content type="html">&lt;blockquote class=myInsert&gt;&lt;b&gt;動機&lt;/b&gt;&lt;br/&gt;
&lt;a href="http://www.olm.co.jp/rd/n-way-morphing/"&gt;OLM Digital R&amp;D » モーフィング応用による2次元アニメーション http://www.olm.co.jp/rd/n-way-morphing/&lt;/a&gt;&lt;br/&gt;
&lt;br/&gt;
画からMeshを作ってみようかなと思いつくままにやってみた．
&lt;/blockquote&gt;
&lt;blockquote class=myInsert&gt;&lt;b&gt;入力画像(背景は透明)&lt;/b&gt;&lt;br/&gt;
&lt;a href="http://1.bp.blogspot.com/-twVT6PJxVmA/T9oAPLZ8KWI/AAAAAAAAAt8/cGupA250LtY/s1600/Untitled1.png" imageanchor="1" style=""&gt;&lt;img border="0" height="320" width="320" src="http://1.bp.blogspot.com/-twVT6PJxVmA/T9oAPLZ8KWI/AAAAAAAAAt8/cGupA250LtY/s320/Untitled1.png" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;b&gt;微分フィルタにて境界とおぼしき点を探索&lt;/b&gt;&lt;br/&gt;
&lt;a href="http://3.bp.blogspot.com/-gt5SivVTyWM/T9oAPVKtk0I/AAAAAAAAAuI/i727qI36vWs/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-06-15%2B0.14.23.png" imageanchor="1" style=""&gt;&lt;img border="0" height="320" width="320" src="http://3.bp.blogspot.com/-gt5SivVTyWM/T9oAPVKtk0I/AAAAAAAAAuI/i727qI36vWs/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-06-15%2B0.14.23.png" /&gt;&lt;/a&gt;&lt;br/&gt;
参考: &lt;a href="http://www.faicha.com/vision/02edgea/"&gt;ハフ変換を使わない画像のエッジ角度 - 無作為研究所 http://www.faicha.com/vision/02edgea/&lt;/a&gt;, 他
&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;b&gt;適当な点から最近傍をつないでいく(境界の赤色の点上の緑色の線）&lt;/b&gt;&lt;br/&gt;
&lt;a href="http://4.bp.blogspot.com/-XkA4TgxUdGc/T9oAPnEBbGI/AAAAAAAAAuU/LEER9dKNZag/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-06-15%2B0.15.13.png" imageanchor="1" style=""&gt;&lt;img border="0" height="320" width="320" src="http://4.bp.blogspot.com/-XkA4TgxUdGc/T9oAPnEBbGI/AAAAAAAAAuU/LEER9dKNZag/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-06-15%2B0.15.13.png" /&gt;&lt;/a&gt;&lt;br/&gt;
参考(NSArrayの高階関数を用いるソート): &lt;a href="http://safx-dev.blogspot.jp/2010/11/objective-c.html"&gt;Safx: Objective-C上でブロックオブジェクトによる高階関数を用いてソートする方法について http://safx-dev.blogspot.jp/2010/11/objective-c.html
&lt;/a&gt;&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;b&gt;とにかく三角形となるように埋めて行く（青色の線が三角形の群れ）&lt;/b&gt;&lt;br/&gt;
&lt;a href="http://2.bp.blogspot.com/-YPi6lXzfBTg/T9oAP00SW5I/AAAAAAAAAug/Wd1i0Q1V1TY/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-06-15%2B0.15.54.png" imageanchor="1" style=""&gt;&lt;img border="0" height="320" width="320" src="http://2.bp.blogspot.com/-YPi6lXzfBTg/T9oAP00SW5I/AAAAAAAAAug/Wd1i0Q1V1TY/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-06-15%2B0.15.54.png" /&gt;&lt;/a&gt;&lt;br/&gt;
参考: &lt;a href="http://javaappletgame.blog34.fc2.com/blog-entry-148.html"&gt;Javaゲーム制作記 任意多角形の三角形分割 http://javaappletgame.blog34.fc2.com/blog-entry-148.html&lt;/a&gt;, 他
&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;b&gt;縮退三角形を間に常に挟む事でとにかく書き出す&lt;/b&gt;&lt;br/&gt;
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
var v= [
 { x:0.207031, y:0.937500, z:0.0 },
…
 { x:0.205078, y:0.933594, z:0.0 },
];
var i= [
 2170, 2169, 2168,
 2169, 2168, 2168,  2168, 2168, 2168,  2168, 2168, 2168,  2168, 2168, 2167,
 2168, 2167, 2166,
…
 1, 2, 3210,
 2, 3210, 3210,  3210, 3210, 1,  3210, 1, 1,  1, 1, 3210,
 1, 3210, 0,
];
function (__structure v,__structure i) main ()
{
 var result = new Object();
 result.v= v;
 result.i= i;
 return result;
}
&lt;/pre&gt;&lt;/blockquote&gt;&lt;br/&gt;
参考: &lt;a href="http://d.hatena.ne.jp/nakamura001/20100111/1263219309"&gt;縮退三角形(Degenerate triangle)による最適化 - 強火で進め http://d.hatena.ne.jp/nakamura001/20100111/1263219309&lt;/a&gt;
&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;b&gt;書き出したコードをJavascriptパッチに入れてMesh Creater/Mesh Rendererに任せてみる&lt;/b&gt;&lt;br/&gt;
&lt;a href="http://1.bp.blogspot.com/-jzwwvi3iYB4/T9oCtUKTmzI/AAAAAAAAAuw/m5Qkdop4hMY/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-06-15%2B0.25.57.png" imageanchor="1" style=""&gt;&lt;img border="0" height="177" width="320" src="http://1.bp.blogspot.com/-jzwwvi3iYB4/T9oCtUKTmzI/AAAAAAAAAuw/m5Qkdop4hMY/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-06-15%2B0.25.57.png" /&gt;&lt;/a&gt;&lt;br/&gt;

&lt;a href="http://4.bp.blogspot.com/-HOSXJ8YmbYc/T9oCtjyNn_I/AAAAAAAAAu8/6GW3qisKTUw/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-06-15%2B0.25.10.png" imageanchor="1" style=""&gt;&lt;img border="0" height="294" width="320" src="http://4.bp.blogspot.com/-HOSXJ8YmbYc/T9oCtjyNn_I/AAAAAAAAAu8/6GW3qisKTUw/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-06-15%2B0.25.10.png" /&gt;&lt;/a&gt;&lt;br/&gt;
&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;b&gt;&lt;a href="http://twitter.com/yone80/status/205300202595287040"&gt;yone80さんのGLSL Shader(vertNoise)&lt;/a&gt;をかぶせてみる&lt;/b&gt;&lt;br/&gt;
&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/lrJXvGJJX0U" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/JmqJHS-u2xs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/6963916959891005171/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=6963916959891005171" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/6963916959891005171?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/6963916959891005171?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/JmqJHS-u2xs/mesh.html" title="画像からMeshをつくってみる" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-jzwwvi3iYB4/T9oCtUKTmzI/AAAAAAAAAuw/m5Qkdop4hMY/s72-c/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-06-15%2B0.25.57.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2012/06/mesh.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEEQnw_fCp7ImA9WhVaE0w.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-756499213846119392</id><published>2012-06-02T01:34:00.001+09:00</published><updated>2012-06-10T16:50:03.244+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-10T16:50:03.244+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="google-blockly" /><category scheme="http://www.blogger.com/atom/ns#" term="serialport-serever" /><title>'google-blockly'+'serialport-server'</title><content type="html">&lt;blockquote class=myInsert&gt;&lt;ol&gt;
&lt;li&gt;I used 'Serialport-server' ( &lt;a href="http://shokai.github.com/serialport-server/"&gt;http://shokai.github.com/serial­­port-server/&lt;/a&gt; ).&lt;/li&gt;
&lt;li&gt;I got the google-blockly code from google code by svn.&lt;/li&gt;
&lt;li&gt;I added the 'language_device.js' in demos/maze folder. The 'language_device.js' code is in my blog.&lt;/li&gt;
&lt;li&gt;I added one﻿ line which request the 'language_device.js' to the 'frame.html' in demos/maze folder.&lt;/li&gt;
&lt;li&gt;I added some lines﻿ to the 'maze.js' in demos/maze folder. The lines code is in my blog.&lt;/li&gt;
&lt;/ol&gt;&lt;/blockquote&gt;
&lt;blockquote class=myInsert&gt;&lt;ol&gt;
Scratch has the function about 'create a program using blocks'. 
Scratch has the function about 'serial port communication'.
The following page describes the serial port communication between Scratch and Ardino in Japanese and English. &lt;br/&gt;

&lt;b&gt;Scratch+Arduino | Yengawa Systems&lt;/b&gt; &lt;a href="http://www.yengawa.com/scratch_arduino"&gt;http://www.yengawa.com/scratch_arduino&lt;/a&gt;
&lt;/ol&gt;&lt;/blockquote&gt;
&lt;hr/&gt;
&lt;blockquote class=myInsert&gt;動機
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/google-blockly/"&gt;http://code.google.com/p/google-blockly/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://shokai.github.com/serialport-server/"&gt;http://shokai.github.com/serialport-server/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;blockquote class=myInsert&gt;コード
language_device.js
&lt;blockquote class=myInsert2&gt;
&lt;pre&gt;
if (!Blockly.Language) {
  Blockly.Language = {};
}

Blockly.JavaScript = Blockly.Generator.get('JavaScript');

Blockly.Language.device_sendValue = {
  category: 'Device',
  helpUrl: '',
  init: function() {
    this.setColour(210);
    this.addTitle('Send Value');
    var dropdown = new Blockly.FieldDropdown(function() {
      return Blockly.Language.device_sendValue.Symbol;
    });
    this.addTitle(dropdown);
    this.setTitleText(Blockly.Language.device_sendValue.Symbol[0], 1);
    this.addTitle('To Server (Addr \u201C');
    this.addTitle(new Blockly.FieldTextInput('http://localhost:8783'));
    this.addTitle('\u201D \)');
    this.setPreviousStatement(true);
    this.setNextStatement(true);
    this.setTooltip('Send Value to the serialport-server');
  }
};

Blockly.Language.device_sendValue.Symbol = ['o', 'x'];

Blockly.JavaScript.device_sendValue = function() {
  var _addr= Blockly.JavaScript.quote_(this.getTitleText(3));
  var _symbol = Blockly.Language.device_sendValue.Symbol.indexOf(this.getTitleText(1));
  
  if (false) {
    var cmd= "var xhr = new XMLHttpRequest();";
    cmd+= "xhr.open('post', "+_addr+", false);";
    cmd+= "xhr.onreadystatechange = function(){";
    cmd+= "if (xhr.readyState === 4 &amp;&amp; xhr.status === 200){";
    cmd+= "}";
    cmd+= "};";
    cmd+= "xhr.send('"+_symbol+"');\n";
    return cmd;
  }
  else {
    return (_symbol===0?"Maze.ledon();":"Maze.ledoff();")+"\n";
  }
};
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;'Blockly.JavaScript.device_sendValue'においてMazeのアニメに合わせて動作させるために内部用のコマンドを返すようにしてあるが, 単に対応するJavascriptを返すだけならif文のthen側，cmdの値を使えばよい．(serialport-serverに'o'か'x'を送るというJavascript)&lt;/li&gt;
&lt;li&gt;これをframe.htmlで定義している他のjsファイルと共に読み込ませるだけでエディタの項目に出てくる&lt;/li&gt;
&lt;li&gt;編集結果のjavascript codeを取得するには
&lt;pre class=myInsert2&gt;
  var code = Blockly.Generator.workspaceToCode('JavaScript');
&lt;/pre&gt;
で取得できる．（引数文字列'JavaScript'とBlockly.'JavaScript'が対応付いて'Language'の関数(Blocklyの編集用オブジェクト)に対応する'JavaScript'の同名関数の返り値(文字列)の集まりが得られる）&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;結果&lt;br/&gt;
&lt;iframe width="560" height="315" src="http://www.youtube.com/embed/-eySy7QNczI" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;

&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;a href="http://4.bp.blogspot.com/-sEPAADEHp_4/T8jz2h4vb7I/AAAAAAAAAts/sxJca2iiM8A/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-06-02%2B1.16.08.png" imageanchor="1" style=""&gt;&lt;img border="0" height="202" width="320" src="http://4.bp.blogspot.com/-sEPAADEHp_4/T8jz2h4vb7I/AAAAAAAAAts/sxJca2iiM8A/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-06-02%2B1.16.08.png" /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;maze.jsの差分(赤色部分)
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
　…
Maze.animate = function() {
　…
  } else if (action == 'finish') {
    Maze.scheduleFinish();
  }
  &lt;span style="color:red;"&gt;else if (action == 'send_o') {
      var xhr = new XMLHttpRequest();
      xhr.open('post', 'http://localhost:8783', true);
      xhr.onreadystatechange = function(){
        if (xhr.readyState === 4 &amp;&amp; xhr.status === 200){
        }
      };
      xhr.send('o');
  }
  else if (action == 'send_x') {
      var xhr = new XMLHttpRequest();
      xhr.open('post', 'http://localhost:8783', true);
      xhr.onreadystatechange = function(){
        if (xhr.readyState === 4 &amp;&amp; xhr.status === 200){
        }
      };
      xhr.send('x');
  }&lt;/span&gt;
  
  Maze.pidList.push(window.setTimeout(Maze.animate, Maze.STEP_SPEED * 5));
};
　…
&lt;span style="color:red;"&gt;Maze.ledoff = function() {
  Maze.checkTimeout();
  Maze.path.push(['send_x', null]);
}
Maze.ledon = function() {
  Maze.checkTimeout();
  Maze.path.push(['send_o', null]);
}&lt;/span&gt;
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/vsGvT5tGG_E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/756499213846119392/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=756499213846119392" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/756499213846119392?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/756499213846119392?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/vsGvT5tGG_E/google-blocklyserialport-server.html" title="'google-blockly'+'serialport-server'" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/-eySy7QNczI/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2012/06/google-blocklyserialport-server.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cBR3gyfCp7ImA9WhVUFkw.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-4823144785902795603</id><published>2012-05-21T21:26:00.000+09:00</published><updated>2012-05-21T23:37:36.694+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-05-21T23:37:36.694+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="timbrre" /><category scheme="http://www.blogger.com/atom/ns#" term="Arduino" /><category scheme="http://www.blogger.com/atom/ns#" term="serialport-serever" /><title>serialport-serverとtimbreを連携させてみた</title><content type="html">&lt;blockquote class=myInsert&gt;&lt;b&gt;参考というか動機&lt;/b&gt;&lt;br/&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://shokai.org/blog/archives/6009"&gt;serialport-server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mohayonao.hatenablog.com/entry/2012/05/19/074218"&gt;timbre&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://twitter.com/#!/p_g_/status/203844506666283008"&gt;Twitter / @p_g_&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
&lt;blockquote class=myInsert&gt;&lt;b&gt;結果&lt;/b&gt;&lt;br/&gt;
やっている事：serialport-serverの例のようにCdsを接続し，Cdsの値をtimbreのfami.freqに与えている．&lt;br/&gt;
予想される動作：明るくなると音の高さが上がる．暗くなると音の高さが下がる．&lt;br/&gt;
で，結果：&lt;br/&gt;
&lt;iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/kc1lTJ_g8RU" width="560"&gt;&lt;/iframe&gt;&lt;/blockquote&gt;

&lt;blockquote class=myInsert&gt;&lt;b&gt;コード&lt;/b&gt;
&lt;blockquote class=myInsert2&gt;&lt;pre&gt;
&amp;lt;html&gt;
  &amp;lt;head&gt;
    &amp;lt;meta charset="utf-8"/&gt;
    &amp;lt;title&gt;timbre - oscillators&amp;lt;/title&gt;
    &amp;lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"&gt;&amp;lt;/script&gt;
    &amp;lt;script type="text/javascript" src="../timbre.js"&gt;&amp;lt;/script&gt;
  &amp;lt;/head&gt;
  &amp;lt;body&gt;
    &amp;lt;selction id="body"&gt;
      &amp;lt;h2&gt;Timbre&amp;lt;/h2&gt;
      &amp;lt;div&gt;
        &amp;lt;button id="play0"&gt;play&amp;lt;/button&gt;
        &amp;lt;button id="pause0"&gt;pause&amp;lt;/button&gt;
      &amp;lt;/div&gt;
      
    &amp;lt;hr/&gt;

      &amp;lt;div id="main"&gt;
        &amp;lt;h2&gt;Serial Port&amp;lt;/h2&gt;
        &amp;lt;div&gt;
          &amp;lt;input type="text" value="http://localhost:8783" id="addr" size="40" /&gt;
        &amp;lt;/div&gt;
        &amp;lt;h3&gt;LED&amp;lt;/h3&gt;
        &amp;lt;div class="led"&gt;
          &amp;lt;input type="button" class="btn on" value="ON" /&gt;
          &amp;lt;input type="button" class="btn off" value="OFF" /&gt;
        &amp;lt;/div&gt;
        &amp;lt;h3&gt;CdS&amp;lt;/h3&gt;
        &amp;lt;div class="cds"&gt;
          &amp;lt;input type="range" value="500" min="0" max="1024" class="slider" /&gt;
          &amp;lt;input type="text" id="cdsvalue" value="500" disabled="disabled" size="5" /&gt;
       &amp;lt;/div&gt;
     &amp;lt;/div&gt;
    &amp;lt;/section&gt;
  &amp;lt;/body&gt;
  &amp;lt;script type="text/javascript"&gt;
    $(function() {
      $('.led .on').click(function(){
        $.post($('#addr').val(), 'o', function(){
            //alert('led on');
        });
      });
      $('.led .off').click(function(){
        $.post($('#addr').val(), 'x', function(){
            //alert('led off');
        });
      });
      setInterval(function(){
        $.getJSON($('#addr').val(), {}, function(data){
            $('.cds input').val( data[0].data );
        });
      }, 100);

      function getCdsValue() {
        var value= parseInt($("#cdsvalue")[0].value);
        if (isNaN(value)) {
          value= 880;
        }
        return value;
      }
      
      dac0= T("dac", fami= T("fami", getCdsValue()));

      var timerId;
      &lt;span style="color:red;"&gt;dac0.addEventListener("on", function() {
            timerId = setInterval(function() {
                fami.freq = getCdsValue();
            }, 50);
        });&lt;/span&gt;

      dac0.addEventListener("on" , function() {timbre.on();});
      dac0.addEventListener("off", function() {
        if (dac0.isOff) timbre.off();
        });

      $("#play0").on("click", function() { dac0.on(); });
      $("#pause0").on("click", function() { dac0.off(); });
    });
  &amp;lt;/script&gt;
&amp;lt;/html&gt;
&lt;/pre&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/JPfnnty-R_o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/4823144785902795603/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=4823144785902795603" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/4823144785902795603?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/4823144785902795603?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/JPfnnty-R_o/serialport-servertimbre.html" title="serialport-serverとtimbreを連携させてみた" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/kc1lTJ_g8RU/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2012/05/serialport-servertimbre.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQDSH86cCp7ImA9WhVXGEo.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-4250599115222401690</id><published>2012-04-20T08:09:00.012+09:00</published><updated>2012-04-20T08:32:59.118+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-20T08:32:59.118+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Quartz Composer" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenCV" /><title>Quartz Composer: MacPortsで入れたOpenCV2.2に関するパッチを作るテンプレート的なナニカ</title><content type="html">たぶんもっと良い方法がある．けどメモ．&lt;br /&gt;&lt;blockquote class=myInsert&gt;MacPortsでopencv 2.xを入れて/opt/local下に入っている前提&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote class=myInsert&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;'Project Navigator'内ルート要素を選択&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;PROJECTのBuild Settingsを開き，表示をAllとする．&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;'Search Paths'内の'Header Search Paths'に'/opt/local/include'を加える．&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;li&gt;TARGETSのBuild Phasesを開く．&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;'Library Binary With Libraries'を選択し展開する．&lt;br /&gt;&lt;li&gt;'+'ボタンを押し'Add Other …'にて直接ファイル選択を行う．&lt;br /&gt;&lt;li&gt;/opt/local/libs以下にある'libopencv_'で始まるdylibを全て加える．&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;（'/opt/local'あたりをFinderの左ペインに加えておくと楽)&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;'.m'ファイルを'.mm'に変更する．&lt;br /&gt;&lt;li&gt;&lt;blockquote class=myInsert2&gt;&lt;pre&gt;&lt;tt&gt;&lt;br /&gt;…&lt;br /&gt;#import &amp;lt;opencv2/opencv.hpp&gt;&lt;br /&gt;…&lt;br /&gt;@implementation OpenCV_XXXPlugIn&lt;br /&gt;…&lt;br /&gt;@dynamic inputSourceImage;&lt;br /&gt;@dynamic outputResultImage;&lt;br /&gt;…&lt;br /&gt;@end&lt;br /&gt;@implementation OpenCV_XXXPlugIn (Execution)&lt;br /&gt;…&lt;br /&gt;static void _BufferReleaseCallback(const void* address, void* info)&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;+(cv::Mat)CVMatWithQCPlugInInputImageSource:(id &amp;lt;QCPlugInInputImageSource&gt;)image&lt;br /&gt;{&lt;br /&gt; CGFloat cols = [image bufferPixelsWide];&lt;br /&gt; CGFloat rows = [image bufferPixelsHigh];&lt;br /&gt; cv::Mat cvMat(rows, cols, CV_8UC4);&lt;br /&gt; cvMat.data= (uchar *)[image bufferBaseAddress];&lt;br /&gt; return cvMat;&lt;br /&gt;}&lt;br /&gt;- (BOOL)execute:(id &amp;lt;QCPlugInContext&gt;)context atTime:(NSTimeInterval)time withArguments:(NSDictionary *)arguments&lt;br /&gt;{&lt;br /&gt; id&lt;QCPlugInInputImageSource&gt; inputImage= self.inputSourceImage;&lt;br /&gt; self.outputResultImage = nil;&lt;br /&gt; &lt;br /&gt; if(inputImage) {&lt;br /&gt;  if(![inputImage lockBufferRepresentationWithPixelFormat:QCPlugInPixelFormatBGRA8&lt;br /&gt;              colorSpace:[inputImage imageColorSpace] &lt;br /&gt;               forBounds:[inputImage imageBounds]]) {&lt;br /&gt;   return NO; &lt;br /&gt;  }&lt;br /&gt;  cv::Mat src_img= [OpenCV_XXXPlugIn CVMatWithQCPlugInInputImageSource:inputImage];&lt;br /&gt;  cv::Mat dst_img(src_img.size(), src_img.type());&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span style="font-weight:bold;color:red;"&gt;src_img.copyTo(dst_img);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  id &amp;lt;QCPlugInOutputImageProvider&gt; provider= [context outputImageProviderFromBufferWithPixelFormat:QCPlugInPixelFormatBGRA8    &lt;br /&gt;                         pixelsWide:dst_img.cols&lt;br /&gt;                         pixelsHigh:dst_img.rows&lt;br /&gt;                        baseAddress:dst_img.data&lt;br /&gt;                        bytesPerRow:dst_img.cols*dst_img.channels()&lt;br /&gt;                       releaseCallback:_BufferReleaseCallback&lt;br /&gt;                        releaseContext:NULL&lt;br /&gt;                         colorSpace:[inputImage imageColorSpace]&lt;br /&gt;                      shouldColorMatch:YES];&lt;br /&gt;  &lt;br /&gt;  if(provider == nil) &lt;br /&gt;   return NO; &lt;br /&gt;  &lt;br /&gt;  self.outputResultImage = provider;&lt;br /&gt;  &lt;br /&gt;  [inputImage unlockBufferRepresentation];&lt;br /&gt; }&lt;br /&gt; return YES;&lt;br /&gt;}&lt;br /&gt;…&lt;br /&gt;@end&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/E8EDNZ591r4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/4250599115222401690/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=4250599115222401690" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/4250599115222401690?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/4250599115222401690?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/E8EDNZ591r4/quartz-composer-macportsopencv22.html" title="Quartz Composer: MacPortsで入れたOpenCV2.2に関するパッチを作るテンプレート的なナニカ" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2012/04/quartz-composer-macportsopencv22.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkENQ307fCp7ImA9WhVXE0Q.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-4708088710077138336</id><published>2012-04-13T20:51:00.017+09:00</published><updated>2012-04-14T18:11:32.304+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-14T18:11:32.304+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ArtPig" /><category scheme="http://www.blogger.com/atom/ns#" term="cocos2d" /><category scheme="http://www.blogger.com/atom/ns#" term="Xcode" /><title>ArtPigEditorで書き出した内容をiOSプロジェクトに載せるまでの項目メモ</title><content type="html">&lt;a href="http://artpigsoft.com/"&gt;ArtPigEditor&lt;/a&gt;(1.0.1)の出力でようやく動かせたのでメモ．&lt;br /&gt;ArtPig Softの解説2つ(&lt;a href="http://www.artpigsoft.com/html/documents.php?video=37808408"&gt;Part1&lt;/a&gt;, &lt;a href="http://www.artpigsoft.com/html/documents.php?video=37808483"&gt;Part2&lt;/a&gt;)が基．&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;ArtPigでFile/Exportで書き出す&lt;/li&gt;&lt;br /&gt;&lt;ul class=myInsert&gt;&lt;br /&gt;&lt;li&gt;File/Exportにて書き出す．'ファイル名YYYYMMDDHHMM'なフォルダ内に'&lt;span style="font-weight:bold;color:red;"&gt;APP00000&lt;/span&gt;'なフォルダが入り，xml２つと画像群ができる．&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;ArtPigライブラリを取得する&lt;/li&gt;&lt;br /&gt;&lt;ul class=myInsert&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.artpigsoft.com"&gt;ArtPig&lt;/a&gt;の&lt;a href="http://www.artpigsoft.com/html/download.php"&gt;Download&lt;/a&gt;から'ArtPigIOS1.0.1.zip'をDownloadする．&lt;/li&gt;&lt;br /&gt;&lt;li&gt;解凍しておく('&lt;span style="font-weight:bold;color:green;"&gt;ArtPigIOS1.0.1&lt;/span&gt;'フォルダ)．&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;Xcodeにプロジェクトのテンプレートを追加する&lt;/li&gt;&lt;br /&gt;&lt;ul class=myInsert&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.cocos2d-iphone.org/"&gt;cocos2d-iphone&lt;/a&gt;の&lt;a href="http://www.cocos2d-iphone.org/download"&gt;Download&lt;/a&gt;から'cocos2d-iphone-1.1-beta2.tar.gz'をDownloadする．&lt;/li&gt;&lt;br /&gt;&lt;li&gt;解凍する('cocos2d-iphone-1.1-beta2'フォルダ)．&lt;/li&gt;&lt;br /&gt;&lt;li&gt;解凍したフォルダ'cocos2d-iphone-1.1-beta2'内にある'install-templates.sh'を'-u'オプションをつけて実行する(もしくはsudo等で管理権限で)．&lt;br /&gt;&lt;blockquote class=myInsert2&gt;&gt; ./install-templates.sh -u&lt;/blockquote&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;li&gt;Xcodeでプログラムを作る&lt;/li&gt;&lt;br /&gt;&lt;ul class=myInsert&gt;&lt;br /&gt;&lt;li&gt;起動して新しいプロジェクトを選択する．&lt;/li&gt;&lt;br /&gt;&lt;ol class=myInsert2&gt;&lt;br /&gt;&lt;li&gt;iOSカテゴリにあるcocos2dタブのcocos2dプロジェクトを選択する．&lt;/li&gt;&lt;br /&gt;&lt;li&gt;プロジェクト名を付ける．&lt;/li&gt;&lt;br /&gt;&lt;li&gt;作成場所を決める．&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;li&gt;'libs'に'&lt;span style="font-weight:bold;color:green;"&gt;ArtPigIOS1.0.1&lt;/span&gt;'フォルダを'Add Files to …'メニューで追加する．&lt;/li&gt;&lt;br /&gt;&lt;li&gt;'Resources'に'&lt;span style="font-weight:bold;color:red;"&gt;APP00000&lt;/span&gt;'フォルダを'Add Files to …'メニューで追加する．&lt;/li&gt;&lt;br /&gt;&lt;li&gt;プロジェクトのルートアイテム選択する．&lt;/li&gt;&lt;br /&gt;&lt;ol class=myInsert2&gt;&lt;br /&gt;&lt;li&gt;PROJECT設定を選び'Build Settings'タブを選ぶ．&lt;/li&gt;&lt;br /&gt;&lt;li&gt;タブ中の'All'を選択する．&lt;/li&gt;&lt;br /&gt;&lt;li&gt;'Header Search Paths'を検索して '$(SDKROOT)/usr/include/libxml2' を設定する．&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;ol class=myInsert2&gt;&lt;br /&gt;&lt;li&gt;TARGETS設定を選び'Build Phases'タブを選ぶ．&lt;/li&gt;&lt;br /&gt;&lt;li&gt;タブ中のLink Binary With Librariesを選ぶ．&lt;/li&gt;&lt;br /&gt;&lt;li&gt;'+'ボタンを押しファイル選択から'libxml2.dylib'を探し追加する．&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;li&gt;HelloWorldLayer.hファイルを編集する．&lt;/li&gt;&lt;br /&gt;&lt;ol class=myInsert2&gt;&lt;br /&gt;&lt;li&gt;'@class APAnimation;'行を'#import "cocos2d.h"'行の次に追加する．&lt;/li&gt;&lt;br /&gt;&lt;li&gt;'APAnimation *_animation;'行をHelloWorldLayerクラスのインスタンス変数として追加する．&lt;/li&gt;&lt;br /&gt;&lt;blockquote class=myInsert3&gt;&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;&lt;br /&gt;#import "cocos2d.h"&lt;br /&gt;@class APAnimation;&lt;br /&gt;@interface HelloWorldLayer : CCLayer&lt;br /&gt;{&lt;br /&gt; APAnimation *_animation;&lt;br /&gt;}&lt;br /&gt;+(CCScene *) scene;&lt;br /&gt;@end&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;li&gt;HelloWorldLayer.mファイルの拡張子を.mmに変更する．&lt;/li&gt;&lt;br /&gt;&lt;li&gt;HelloWorldLayer.mmを編集する．&lt;/li&gt;&lt;br /&gt;&lt;ol class=myInsert2&gt;&lt;br /&gt;&lt;li&gt;'-(id) init'メソッドを編集する．&lt;/li&gt;&lt;br /&gt;&lt;blockquote class=myInsert3&gt;&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;&lt;br /&gt;-(id) init&lt;br /&gt;{&lt;br /&gt; if( (self=[super init])) {&lt;br /&gt;  _animation= [[APAnimation alloc] initWithProjectId:@"&lt;span style="font-weight:bold;color:red;"&gt;APP00000&lt;/span&gt;"];&lt;br /&gt;  [self addChild:[_animation rootNode]];&lt;br /&gt;  [_animation play];&lt;br /&gt; }&lt;br /&gt; return self;&lt;br /&gt;}&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/MgjK8-QNpl4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/4708088710077138336/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=4708088710077138336" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/4708088710077138336?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/4708088710077138336?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/MgjK8-QNpl4/airtpigeditorios.html" title="ArtPigEditorで書き出した内容をiOSプロジェクトに載せるまでの項目メモ" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2012/04/airtpigeditorios.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EDRnkzeSp7ImA9WhVQEkU.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-7730446277486983566</id><published>2012-04-01T05:23:00.006+09:00</published><updated>2012-04-01T21:01:17.781+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-04-01T21:01:17.781+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="jsc" /><title>'JSでRSA'をMac OSX jscコマンドで試してみた</title><content type="html">&lt;blockquote class=myInsert&gt;&lt;span style="font-weight:bold;"&gt;追記(2012/04/01):&lt;/span&gt;以下のようにすれば"console.log(msg);"で出力することはできる．&lt;br /&gt;&lt;blockquote class=myInsert2&gt;var console= { "log":function(msg) { print(msg); } };&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;&lt;blockquote class=myInsert&gt;&lt;span style="font-weight:bold;"&gt;動機&lt;/span&gt;&lt;br /&gt;'&lt;a href="http://d.hatena.ne.jp/shokai/20120331/1333203413"&gt;JSでRSA - 橋本詳解&lt;/a&gt;'を読んで試してみようと思ったが，HTMLの部分や読み込みをscriptタグで書くのめんどくさいなぁと思ったので調べ始めた．&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote class=myInsert&gt;&lt;span style="font-weight:bold;"&gt;jsc&lt;/span&gt;&lt;br /&gt;こちらの記事( '&lt;a href="http://www.phpied.com/javascript-shell-scripting/"&gt;JavaScript shell scripting / Stoyan's phpied.com phpied.com&lt;/a&gt;' )にあるようにjscというのがMac OSXにはあるらしい．&lt;br /&gt;&lt;blockquote class=myInsert2&gt;sudo ln -s /System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc /usr/local/bin/jsc&lt;/blockquote&gt;&lt;br /&gt;とかしといてみた．&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote class=myInsert&gt;&lt;span style="font-weight:bold;"&gt;コード&lt;/span&gt;&lt;br /&gt;動機ページのコードをベースに改変．&lt;br /&gt;・出力は'console.log'ではなく'print'(1)．&lt;br /&gt;・外部ファイルの読み込みは'load'(2)．&lt;br /&gt;・navigatorはjscではアクセスできないのでloadする前に必要な分だけ定義(3)．&lt;br /&gt;・passがそのままというのも失礼な気がしたので変えさせていただきました(4)．&lt;br /&gt;&lt;blockquote class=myInsert2&gt;&lt;br /&gt;&lt;span style="font-weight:bold;color:red;"&gt;var navigator= { "appName":"Mozilla", "appVersion":"5" };&lt;/span&gt; // (3)&lt;br /&gt;&lt;span style="font-weight:bold;color:red;"&gt;load("./cryptico.js");&lt;/span&gt; // (2)&lt;br /&gt;&lt;br /&gt;var pass = &lt;span style="font-weight:bold;color:red;"&gt;'p_g_'&lt;/span&gt;;// (4)&lt;br /&gt;var rsa_key = cryptico.generateRSAKey(pass, 1024);&lt;br /&gt;var pub_key = cryptico.publicKeyString(rsa_key);&lt;br /&gt;&lt;br /&gt;var enc = cryptico.encrypt('hello', pub_key);&lt;br /&gt;&lt;span style="font-weight:bold;color:red;"&gt;print&lt;/span&gt;(enc.cipher); // (1)&lt;br /&gt;&lt;br /&gt;var dec = cryptico.decrypt(enc.cipher, rsa_key);&lt;br /&gt;&lt;span style="font-weight:bold;color:red;"&gt;print&lt;/span&gt;(dec.plaintext); // (1)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/I8-5b0_ypHw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/7730446277486983566/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=7730446277486983566" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/7730446277486983566?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/7730446277486983566?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/I8-5b0_ypHw/jsrsamac-osx-jsc.html" title="'JSでRSA'をMac OSX jscコマンドで試してみた" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2012/04/jsrsamac-osx-jsc.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UCQX09eip7ImA9WhVREEU.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-637155235711400142</id><published>2012-03-19T01:45:00.002+09:00</published><updated>2012-03-19T01:47:40.362+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-19T01:47:40.362+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Plask" /><title>メモ: わからないながらにPlaskで遊んでみた2</title><content type="html">&lt;blockquote class=myInsert&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;結果:&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-IKeqX-h08Qs/T2YRnov8c7I/AAAAAAAAAtg/AFtVJWn5Kuc/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-03-19%2B1.45.02.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 307px; height: 320px;" src="http://3.bp.blogspot.com/-IKeqX-h08Qs/T2YRnov8c7I/AAAAAAAAAtg/AFtVJWn5Kuc/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-03-19%2B1.45.02.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5721279749271876530" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote class=myInsert&gt;&lt;span style="font-weight:bold;"&gt;Plask:&lt;/span&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.plask.org/"&gt;http://www.plask.org/&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote class=myInsert&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;参考:&lt;/span&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://yoshifuji.blogspot.jp/2011/07/javascript4runge-kutta.html"&gt;web雑記帳: javascriptで4次Runge-Kutta法&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.ne.jp/asahi/tokyo/nkgw/gakusyu/rikigaku/2zyufuriko/zyufuriko_kaisetu/zyufuriko_kaisetu.html"&gt;重振り子&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote class=myInsert&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;コード:&lt;/span&gt;&lt;br /&gt;&lt;blockquote class=myInsert2&gt;&lt;pre&gt;&lt;tt&gt;&lt;br /&gt;var plask = require('plask');&lt;br /&gt;&lt;br /&gt;//&lt;br /&gt;// refer to:&lt;br /&gt;// http://yoshifuji.blogspot.jp/2011/07/javascript4runge-kutta.html&lt;br /&gt;// http://www.ne.jp/asahi/tokyo/nkgw/gakusyu/rikigaku/2zyufuriko/zyufuriko_kaisetu/zyufuriko_kaisetu.html&lt;br /&gt;function solver(x1,x2,x3,x4,t,dt){  &lt;br /&gt;  var k11,k12,k13,k14,k21,k22,k23,k24,k31,k32,k33,k34,k41,k42,k43,k44;  &lt;br /&gt;  &lt;br /&gt;  k11 = dt * func1(x1,x2,x3,x4,t);  &lt;br /&gt;  k12 = dt * func2(x1,x2,x3,x4,t);  &lt;br /&gt;  k13 = dt * func3(x1,x2,x3,x4,t);  &lt;br /&gt;  k14 = dt * func4(x1,x2,x3,x4,t);  &lt;br /&gt;   &lt;br /&gt;  k21 = dt * func1(x1 + k11/2, x2 + k12/2, x3 + k13/2, x4 + k14/2, t + dt/2);  &lt;br /&gt;  k22 = dt * func2(x1 + k11/2, x2 + k12/2, x3 + k13/2, x4 + k14/2, t + dt/2);  &lt;br /&gt;  k23 = dt * func3(x1 + k11/2, x2 + k12/2, x3 + k13/2, x4 + k14/2, t + dt/2);  &lt;br /&gt;  k24 = dt * func4(x1 + k11/2, x2 + k12/2, x3 + k13/2, x4 + k14/2, t + dt/2);  &lt;br /&gt;&lt;br /&gt;  k31 = dt * func1(x1 + k21/2, x2 + k22/2, x3 + k23/2, x4 + k24/2, t + dt/2);  &lt;br /&gt;  k32 = dt * func2(x1 + k21/2, x2 + k22/2, x3 + k23/2, x4 + k24/2, t + dt/2);  &lt;br /&gt;  k33 = dt * func3(x1 + k21/2, x2 + k22/2, x3 + k23/2, x4 + k24/2, t + dt/2);  &lt;br /&gt;  k34 = dt * func4(x1 + k21/2, x2 + k22/2, x3 + k23/2, x4 + k24/2, t + dt/2);  &lt;br /&gt;&lt;br /&gt;  k41 = dt * func1(x1 + k31, x2 + k32, x3 + k33/2, x4 + k34/2, t + dt);  &lt;br /&gt;  k42 = dt * func2(x1 + k31, x2 + k32, x3 + k33/2, x4 + k34/2, t + dt);  &lt;br /&gt;  k43 = dt * func3(x1 + k31, x2 + k32, x3 + k33/2, x4 + k34/2, t + dt);  &lt;br /&gt;  k44 = dt * func4(x1 + k31, x2 + k32, x3 + k33/2, x4 + k34/2, t + dt);  &lt;br /&gt;&lt;br /&gt;  var tmp= [];&lt;br /&gt;  tmp[0] = x1 + (k11/6 + k21/3 + k31/3 + k41/6);  &lt;br /&gt;  tmp[1] = x2 + (k12/6 + k22/3 + k32/3 + k42/6);  &lt;br /&gt;  tmp[2] = x3 + (k13/6 + k23/3 + k33/3 + k43/6);  &lt;br /&gt;  tmp[3] = x4 + (k14/6 + k24/3 + k34/3 + k44/6);&lt;br /&gt;&lt;br /&gt;  return tmp;  &lt;br /&gt;}&lt;br /&gt;&lt;span style="font-weight:bold;color:red;"&gt;var m1= 1.;&lt;br /&gt;var m2= 2.;&lt;br /&gt;var l1= 9.8;&lt;br /&gt;var l2= 9.8;&lt;br /&gt;var  g= 9.8; //...&lt;br /&gt;function func1(x1,x2,x3,x4,t){  &lt;br /&gt;  return x2*0.99999;&lt;br /&gt;}  &lt;br /&gt;function func2(x1,x2,x3,x4,t){&lt;br /&gt;  var c0= x1-x3;&lt;br /&gt;  var cc= Math.cos(c0);&lt;br /&gt;  var cs= Math.sin(c0);&lt;br /&gt;&lt;br /&gt;  var c1= 1.0/(m1+m2*cs*cs);&lt;br /&gt;  var c2= -(m1+m2)*Math.sin(x1)/l1*g;&lt;br /&gt;  var c3=  m2*cc*Math.sin(x2)/l1*g;&lt;br /&gt;  var c4= -m2*cc*cs*x2*x2;&lt;br /&gt;  var c5= -m2*cs*(l2/l1)*x4*x4;&lt;br /&gt;  return c1*(c2+c3+c4+c5); &lt;br /&gt;}  &lt;br /&gt;function func3(x1,x2,x3,x4,t){  &lt;br /&gt;  return x4*0.99999;&lt;br /&gt;}&lt;br /&gt;function func4(x1,x2,x3,x4,t){  &lt;br /&gt;  var c0= x1-x3;&lt;br /&gt;  var cc= Math.cos(c0);&lt;br /&gt;  var cs= Math.sin(c0);&lt;br /&gt;  &lt;br /&gt;  var c1= 1.0/(m1+m2*cs*cs);&lt;br /&gt;  var c2= (m1+m2)*cs*Math.cos(x1)/l2*g;&lt;br /&gt;  var c3= (m1+m2)*cs*Math.sin(x2)*(l1/l2)*x2*x2;&lt;br /&gt;  var c4= m2*cc*cs*x4*x4;&lt;br /&gt;  return c1*(c2+c3+c4);&lt;br /&gt;}  &lt;/span&gt;&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;var path= new PlaskRawMac.SkPath;&lt;br /&gt;&lt;br /&gt;var dots1= [];&lt;br /&gt;var dots2= [];&lt;br /&gt;var dotsN= 90.;&lt;br /&gt;&lt;br /&gt;var xs = [];&lt;br /&gt;var t;&lt;br /&gt;var dt;&lt;br /&gt;&lt;br /&gt;var flag;&lt;br /&gt;plask.simpleWindow({&lt;br /&gt;  settings: {&lt;br /&gt;    width: 400,&lt;br /&gt;    height: 400&lt;br /&gt;  },&lt;br /&gt;&lt;br /&gt;  init: function() {&lt;br /&gt;    var canvas = this.canvas, paint = this.paint;&lt;br /&gt;    this.framerate(60);&lt;br /&gt;&lt;br /&gt;    flag= false;&lt;br /&gt;    this.on('keyDown', function(e) {&lt;br /&gt;      switch (e.str) {&lt;br /&gt;        case ' ': flag= true; break;&lt;br /&gt;      }&lt;br /&gt;    });&lt;br /&gt;    this.on('keyUp', function(e) {&lt;br /&gt;      switch (e.str) {&lt;br /&gt;        case ' ': flag= false; break;&lt;br /&gt;      }&lt;br /&gt;    });&lt;br /&gt;&lt;br /&gt;    for(var i=0; i&amp;lt;dotsN; i++) {&lt;br /&gt;      dots1.push({x:0, y:0});&lt;br /&gt;      dots2.push({x:0, y:0});&lt;br /&gt;    }&lt;br /&gt;    xs[0]= Math.PI/3;&lt;br /&gt;    xs[1]= 0.1;&lt;br /&gt;    xs[2]= Math.PI;&lt;br /&gt;    xs[3]= -0.1;&lt;br /&gt;    dt= 1./720.;&lt;br /&gt;    t= 0.0;&lt;br /&gt;  },&lt;br /&gt;&lt;br /&gt;  draw: function() {&lt;br /&gt;    var canvas = this.canvas, paint = this.paint;&lt;br /&gt;    canvas.clear(0, 0, 0, 255);    &lt;br /&gt;&lt;br /&gt;    xs= solver(xs[0], xs[1], xs[2], xs[3], t, dt);&lt;br /&gt;    t+= dt;&lt;br /&gt;    xs= solver(xs[0], xs[1], xs[2], xs[3], t, dt);&lt;br /&gt;    t+= dt;&lt;br /&gt;    xs= solver(xs[0], xs[1], xs[2], xs[3], t, dt);&lt;br /&gt;    t+= dt;&lt;br /&gt;    xs= solver(xs[0], xs[1], xs[2], xs[3], t, dt);&lt;br /&gt;    t+= dt;&lt;br /&gt;&lt;br /&gt;    var y= 200;&lt;br /&gt;    var x= 200;&lt;br /&gt;    var th1= xs[0];&lt;br /&gt;    var th2= xs[2];&lt;br /&gt;    y+= 10.*l1*Math.cos(th1);&lt;br /&gt;    x+= 10.*l1*Math.sin(th1);&lt;br /&gt;    dots1.push({x:x, y:y});&lt;br /&gt;    dots1.shift();&lt;br /&gt;    y+= 10.*l2*Math.cos(th2);&lt;br /&gt;    x+= 10.*l2*Math.sin(th2);&lt;br /&gt;    dots2.push({x:x, y:y});&lt;br /&gt;    dots2.shift();&lt;br /&gt;&lt;br /&gt;    xs= solver(xs[0], xs[1], xs[2], xs[3], t, dt);&lt;br /&gt;    t+= dt;&lt;br /&gt;    xs= solver(xs[0], xs[1], xs[2], xs[3], t, dt);&lt;br /&gt;    t+= dt;&lt;br /&gt;    xs= solver(xs[0], xs[1], xs[2], xs[3], t, dt);&lt;br /&gt;    t+= dt;&lt;br /&gt;    xs= solver(xs[0], xs[1], xs[2], xs[3], t, dt);&lt;br /&gt;    t+= dt;&lt;br /&gt;&lt;br /&gt;    y= 200;&lt;br /&gt;    x= 200;&lt;br /&gt;    var th1= xs[0];&lt;br /&gt;    var th2= xs[2];&lt;br /&gt;    y+= 10.*l1*Math.cos(th1);&lt;br /&gt;    x+= 10.*l1*Math.sin(th1);&lt;br /&gt;    dots1.push({x:x, y:y});&lt;br /&gt;    dots1.shift();&lt;br /&gt;    y+= 10.*l2*Math.cos(th2);&lt;br /&gt;    x+= 10.*l2*Math.sin(th2);&lt;br /&gt;    dots2.push({x:x, y:y});&lt;br /&gt;    dots2.shift();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    xs= solver(xs[0], xs[1], xs[2], xs[3], t, dt);&lt;br /&gt;    t+= dt;&lt;br /&gt;    xs= solver(xs[0], xs[1], xs[2], xs[3], t, dt);&lt;br /&gt;    t+= dt;&lt;br /&gt;    xs= solver(xs[0], xs[1], xs[2], xs[3], t, dt);&lt;br /&gt;    t+= dt;&lt;br /&gt;    xs= solver(xs[0], xs[1], xs[2], xs[3], t, dt);&lt;br /&gt;    t+= dt;&lt;br /&gt;&lt;br /&gt;    path.reset();&lt;br /&gt;    y= 200;&lt;br /&gt;    x= 200;&lt;br /&gt;    path.moveTo(x, y);&lt;br /&gt;    var th1= xs[0];&lt;br /&gt;    var th2= xs[2];&lt;br /&gt;    y+= 10.*l1*Math.cos(th1);&lt;br /&gt;    x+= 10.*l1*Math.sin(th1);&lt;br /&gt;    path.lineTo(x, y);&lt;br /&gt;    dots1.push({x:x, y:y});&lt;br /&gt;    dots1.shift();&lt;br /&gt;    y+= 10.*l2*Math.cos(th2);&lt;br /&gt;    x+= 10.*l2*Math.sin(th2);&lt;br /&gt;    path.lineTo(x, y);&lt;br /&gt;    dots2.push({x:x, y:y});&lt;br /&gt;    dots2.shift();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    if (flag) {&lt;br /&gt;      paint.setStroke();&lt;br /&gt;      paint.setColor(125,125,125,200);&lt;br /&gt;      canvas.drawPath(paint, path);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    paint.setFill();&lt;br /&gt;    for(var i= 0; i&amp;lt;dotsN; i++) {&lt;br /&gt;      var p1= dots1[i];&lt;br /&gt;      paint.setColor(255, 125, 125, 255/dotsN*i);&lt;br /&gt;      canvas.drawCircle(paint, p1.x, p1.y, i/dotsN*10.);&lt;br /&gt;      var p2= dots2[i];&lt;br /&gt;      paint.setColor(125, 125, 355, 255/dotsN*i);&lt;br /&gt;      canvas.drawCircle(paint, p2.x, p2.y, i/dotsN*10.);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;});&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/T8KMYlWF9ho" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/637155235711400142/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=637155235711400142" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/637155235711400142?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/637155235711400142?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/T8KMYlWF9ho/plask2.html" title="メモ: わからないながらにPlaskで遊んでみた2" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-IKeqX-h08Qs/T2YRnov8c7I/AAAAAAAAAtg/AFtVJWn5Kuc/s72-c/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-03-19%2B1.45.02.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2012/03/plask2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QASHk6eip7ImA9WhVREEU.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-4503737257872345729</id><published>2012-03-18T00:59:00.006+09:00</published><updated>2012-03-18T23:35:49.712+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-18T23:35:49.712+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Plask" /><title>メモ: わからないながらにPlaskで遊んでみた</title><content type="html">&lt;blockquote class=myInsert&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;結果:&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-K-hi9hVOPrw/T2S1aIYUbjI/AAAAAAAAAtU/TbhkX8VVc8M/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-03-18%2B0.58.16.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 292px; height: 320px;" src="http://3.bp.blogspot.com/-K-hi9hVOPrw/T2S1aIYUbjI/AAAAAAAAAtU/TbhkX8VVc8M/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-03-18%2B0.58.16.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5720896887198084658" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote class=myInsert&gt;&lt;span style="font-weight:bold;"&gt;Plask:&lt;/span&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.plask.org/"&gt;http://www.plask.org/&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote class=myInsert&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;参考:&lt;/span&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://yoshifuji.blogspot.jp/2011/07/javascript4runge-kutta.html"&gt;web雑記帳: javascriptで4次Runge-Kutta法&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.ne.jp/asahi/tokyo/nkgw/gakusyu/rikigaku/2zyufuriko/zyufuriko_kaisetu/zyufuriko_kaisetu.html"&gt;重振り子&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote class=myInsert&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;コード:&lt;/span&gt;&lt;br /&gt;&lt;blockquote class=myInsert2&gt;&lt;pre&gt;&lt;tt&gt;&lt;br /&gt;var plask = require('plask');&lt;br /&gt;&lt;br /&gt;//&lt;br /&gt;// refer to:&lt;br /&gt;// http://yoshifuji.blogspot.jp/2011/07/javascript4runge-kutta.html&lt;br /&gt;// http://www.ne.jp/asahi/tokyo/nkgw/gakusyu/rikigaku/2zyufuriko/zyufuriko_kaisetu/zyufuriko_kaisetu.html&lt;br /&gt;function solver(x1,x2,x3,x4,t,dt){  &lt;br /&gt;  var k11,k12,k13,k14,k21,k22,k23,k24,k31,k32,k33,k34,k41,k42,k43,k44;  &lt;br /&gt;  &lt;br /&gt;  k11 = dt * func1(x1,x2,x3,x4,t);  &lt;br /&gt;  k12 = dt * func2(x1,x2,x3,x4,t);  &lt;br /&gt;  k13 = dt * func3(x1,x2,x3,x4,t);  &lt;br /&gt;  k14 = dt * func4(x1,x2,x3,x4,t);  &lt;br /&gt;   &lt;br /&gt;  k21 = dt * func1(x1 + k11/2, x2 + k12/2, x3 + k13/2, x4 + k14/2, t + dt/2);  &lt;br /&gt;  k22 = dt * func2(x1 + k11/2, x2 + k12/2, x3 + k13/2, x4 + k14/2, t + dt/2);  &lt;br /&gt;  k23 = dt * func3(x1 + k11/2, x2 + k12/2, x3 + k13/2, x4 + k14/2, t + dt/2);  &lt;br /&gt;  k24 = dt * func4(x1 + k11/2, x2 + k12/2, x3 + k13/2, x4 + k14/2, t + dt/2);  &lt;br /&gt;&lt;br /&gt;  k31 = dt * func1(x1 + k21/2, x2 + k22/2, x3 + k23/2, x4 + k24/2, t + dt/2);  &lt;br /&gt;  k32 = dt * func2(x1 + k21/2, x2 + k22/2, x3 + k23/2, x4 + k24/2, t + dt/2);  &lt;br /&gt;  k33 = dt * func3(x1 + k21/2, x2 + k22/2, x3 + k23/2, x4 + k24/2, t + dt/2);  &lt;br /&gt;  k34 = dt * func4(x1 + k21/2, x2 + k22/2, x3 + k23/2, x4 + k24/2, t + dt/2);  &lt;br /&gt;&lt;br /&gt;  k41 = dt * func1(x1 + k31, x2 + k32, x3 + k33/2, x4 + k34/2, t + dt);  &lt;br /&gt;  k42 = dt * func2(x1 + k31, x2 + k32, x3 + k33/2, x4 + k34/2, t + dt);  &lt;br /&gt;  k43 = dt * func3(x1 + k31, x2 + k32, x3 + k33/2, x4 + k34/2, t + dt);  &lt;br /&gt;  k44 = dt * func4(x1 + k31, x2 + k32, x3 + k33/2, x4 + k34/2, t + dt);  &lt;br /&gt;&lt;br /&gt;  var tmp= [];&lt;br /&gt;  tmp[0] = x1 + (k11/6 + k21/3 + k31/3 + k41/6);  &lt;br /&gt;  tmp[1] = x2 + (k12/6 + k22/3 + k32/3 + k42/6);  &lt;br /&gt;  tmp[2] = x3 + (k13/6 + k23/3 + k33/3 + k43/6);  &lt;br /&gt;  tmp[3] = x4 + (k14/6 + k24/3 + k34/3 + k44/6);&lt;br /&gt;&lt;br /&gt;  return tmp;  &lt;br /&gt;}  &lt;br /&gt;function func1(x1,x2,x3,x4,t){  &lt;br /&gt;  return x2;  &lt;br /&gt;}  &lt;br /&gt;function func2(x1,x2,x3,x4,t){  &lt;br /&gt;  return -2 * x1 + 1 * x3; &lt;br /&gt;}  &lt;br /&gt;function func3(x1,x2,x3,x4,t){  &lt;br /&gt;  return x4;&lt;br /&gt;}&lt;br /&gt;function func4(x1,x2,x3,x4,t){  &lt;br /&gt;  return 2 * x1 - 2 * x3;&lt;br /&gt;}  &lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;var path= new PlaskRawMac.SkPath;&lt;br /&gt;&lt;br /&gt;var dots1= [];&lt;br /&gt;var dots2= [];&lt;br /&gt;var dotsN= 30.;&lt;br /&gt;&lt;br /&gt;var xs = [];&lt;br /&gt;var t;&lt;br /&gt;var dt;&lt;br /&gt;&lt;br /&gt;var flag;&lt;br /&gt;plask.simpleWindow({&lt;br /&gt;  settings: {&lt;br /&gt;    width: 400,&lt;br /&gt;    height: 400&lt;br /&gt;  },&lt;br /&gt;&lt;br /&gt;  init: function() {&lt;br /&gt;    var canvas = this.canvas, paint = this.paint;&lt;br /&gt;    this.framerate(60);&lt;br /&gt;&lt;br /&gt;    flag= false;&lt;br /&gt;    this.on('keyDown', function(e) {&lt;br /&gt;      switch (e.str) {&lt;br /&gt;        case ' ': flag= true; break;&lt;br /&gt;      }&lt;br /&gt;    });&lt;br /&gt;    this.on('keyUp', function(e) {&lt;br /&gt;      switch (e.str) {&lt;br /&gt;        case ' ': flag= false; break;&lt;br /&gt;      }&lt;br /&gt;    });&lt;br /&gt;&lt;br /&gt;    for(var i=0; i&amp;lt;dotsN; i++) {&lt;br /&gt;      dots1.push({x:0, y:0});&lt;br /&gt;      dots2.push({x:0, y:0});&lt;br /&gt;    }&lt;br /&gt;    xs[0]= Math.PI;&lt;br /&gt;    xs[1]= 1.0;&lt;br /&gt;    xs[2]= Math.PI;&lt;br /&gt;    xs[3]=-5.0;&lt;br /&gt;    dt= 1./180.;&lt;br /&gt;    t= 0.0;&lt;br /&gt;  },&lt;br /&gt;&lt;br /&gt;  draw: function() {&lt;br /&gt;    var canvas = this.canvas, paint = this.paint;&lt;br /&gt;    canvas.clear(0, 0, 0, 255);    &lt;br /&gt;&lt;br /&gt;    xs= solver(xs[0], xs[1], xs[2], xs[3], t, dt);&lt;br /&gt;    t+= dt;&lt;br /&gt;    xs= solver(xs[0], xs[1], xs[2], xs[3], t, dt);&lt;br /&gt;    t+= dt;&lt;br /&gt;    xs= solver(xs[0], xs[1], xs[2], xs[3], t, dt);&lt;br /&gt;    t+= dt;&lt;br /&gt;&lt;br /&gt;    path.reset();&lt;br /&gt;    var y= 200;&lt;br /&gt;    var x= 200;&lt;br /&gt;    path.moveTo(x, y);&lt;br /&gt;    var th1= xs[0];&lt;br /&gt;    var th2= xs[2];&lt;br /&gt;    y+= 98*Math.cos(th1);&lt;br /&gt;    x+= 98*Math.sin(th1);&lt;br /&gt;    path.lineTo(x, y);&lt;br /&gt;    dots1.push({x:x, y:y});&lt;br /&gt;    dots1.shift();&lt;br /&gt;    y+= 98*Math.cos(th2);&lt;br /&gt;    x+= 98*Math.sin(th2);&lt;br /&gt;    path.lineTo(x, y);&lt;br /&gt;    dots2.push({x:x, y:y});&lt;br /&gt;    dots2.shift();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    if (flag) {&lt;br /&gt;      paint.setStroke();&lt;br /&gt;      paint.setColor(125,125,125,200);&lt;br /&gt;      canvas.drawPath(paint, path);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    paint.setFill();&lt;br /&gt;    for(var i= 0; i&amp;lt;dotsN; i++) {&lt;br /&gt;      var p1= dots1[i];&lt;br /&gt;      paint.setColor(255, 125, 125, 255/dotsN*i);&lt;br /&gt;      canvas.drawCircle(paint, p1.x, p1.y, i/dotsN*10.);&lt;br /&gt;      var p2= dots2[i];&lt;br /&gt;      paint.setColor(125, 125, 355, 255/dotsN*i);&lt;br /&gt;      canvas.drawCircle(paint, p2.x, p2.y, i/dotsN*10.);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;});&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/n_TzYhRj3LA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/4503737257872345729/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=4503737257872345729" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/4503737257872345729?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/4503737257872345729?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/n_TzYhRj3LA/plask.html" title="メモ: わからないながらにPlaskで遊んでみた" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-K-hi9hVOPrw/T2S1aIYUbjI/AAAAAAAAAtU/TbhkX8VVc8M/s72-c/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%2B2012-03-18%2B0.58.16.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2012/03/plask.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkABQ3YzcSp7ImA9WhVSEUk.&quot;"><id>tag:blogger.com,1999:blog-4629086917523851821.post-1381394044962606935</id><published>2012-03-08T02:10:00.002+09:00</published><updated>2012-03-08T02:19:12.889+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-08T02:19:12.889+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Quartz Composer" /><category scheme="http://www.blogger.com/atom/ns#" term="GLSL" /><title>Quartz Composer / GLSL Shader / BokehなFragment Shaderを生成するコード</title><content type="html">&lt;blockquote class=myInsert&gt;&lt;span style="font-weight:bold;"&gt;参考&lt;/span&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://artmartinsh.blogspot.com/2010/02/glsl-lens-blur-filter-with-bokeh.html"&gt;THE ART-LOG OF MARTINS UPITIS: a GLSL depth of field filter with bokeh&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blenderartists.org/forum/showthread.php?237488"&gt;GLSL depth of field with bokeh v2.4 (update)&lt;/a&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote class=myInsert&gt;&lt;span style="font-weight:bold;"&gt;コード&lt;/span&gt;&lt;br /&gt;参考のコード他をよくわからないまま弄くり回していました．&lt;br /&gt;とりあえずサンプリングする点を求めるのにコードにしたのでそれをメモしておきます．&lt;br /&gt;&lt;blockquote class=myInsert2&gt;&lt;pre&gt;&lt;tt&gt;&lt;br /&gt;#include &amp;lt;stdio.h&gt;&lt;br /&gt;#include &amp;lt;stdlib.h&gt;&lt;br /&gt;double *cross(double *p, double *q) {&lt;br /&gt; double *r;&lt;br /&gt; r= (double *)malloc(3*sizeof(double));&lt;br /&gt; r[0]= p[1]*q[2]-p[2]*q[1];&lt;br /&gt; r[1]=-p[0]*q[2]+p[2]*q[0];&lt;br /&gt; r[2]= p[0]*q[1]-p[1]*q[0];&lt;br /&gt; return r;&lt;br /&gt;}&lt;br /&gt;double *sub(double *p, double *q) {&lt;br /&gt; double *r;&lt;br /&gt; r= (double *)malloc(3*sizeof(double));&lt;br /&gt; r[0]= p[0]-q[0];&lt;br /&gt; r[1]= p[1]-q[1];&lt;br /&gt; r[2]= p[2]-q[2];&lt;br /&gt; return r;&lt;br /&gt;}&lt;br /&gt;int isinCircle(double *q) {&lt;br /&gt; return (q[0]*q[0]+q[1]*q[1]&amp;lt;0.25)?1:0;&lt;br /&gt;}&lt;br /&gt;int isin6(double *q)&lt;br /&gt;{&lt;br /&gt; double p[6][3]= {&lt;br /&gt;     { 0.0, 0.50, 0.},&lt;br /&gt;     { 0.5, 0.25, 0.},&lt;br /&gt;     { 0.5,-0.25, 0.},&lt;br /&gt;     { 0.0,-0.50, 0.},&lt;br /&gt;     {-0.5,-0.25, 0.},&lt;br /&gt;     {-0.5, 0.25, 0.}};&lt;br /&gt; double *r;&lt;br /&gt; int i, c= 0;&lt;br /&gt;&lt;br /&gt; for(i= 0; i&amp;lt;5; i++) {&lt;br /&gt;  r= cross(sub(p[i], q), sub(p[i+1], q)); &lt;br /&gt;  c+= r[2]&amp;lt;0?0:1;&lt;br /&gt; }&lt;br /&gt; r= cross(sub(p[5], q), sub(p[0], q)); &lt;br /&gt; c+= r[2]&amp;lt;0?0:1;&lt;br /&gt;&lt;br /&gt; return (c==0)?1:0;&lt;br /&gt;}&lt;br /&gt;int main(int argc, char* argv[]) {&lt;br /&gt;&lt;br /&gt; double q[3]= {0., 0., 0.};&lt;br /&gt; int j,k,c= 0;&lt;br /&gt; int r= 5;&lt;br /&gt; &lt;br /&gt; printf("uniform sampler2D RenderedTexture;\nuniform sampler2D DepthTexture;\n");&lt;br /&gt; printf("const float blurclamp = 1.;\nconst float bias = 10.;\nuniform float focus;\n");&lt;br /&gt; printf("uniform float pixelsWide;\nuniform float pixelsHigh;\n");&lt;br /&gt; printf("vec2 texcel = vec2(1./pixelsWide, 1./pixelsHigh);\n");&lt;br /&gt; printf("void main()\n{\n");&lt;br /&gt; printf("\tvec4 depth = texture2D(DepthTexture,gl_TexCoord[0].xy );\n");&lt;br /&gt; printf("\tfloat factor = ( depth.x - focus );\n");&lt;br /&gt; printf("\tvec2 dofblur = vec2 (clamp( factor * bias, -blurclamp, blurclamp ));\n");&lt;br /&gt; printf("\tvec4 col = vec4(0.0);\n");&lt;br /&gt; &lt;br /&gt; for(k= -r; k&amp;lt;r; k++) {&lt;br /&gt;  for(j= -r; j&amp;lt;r; j++) {&lt;br /&gt;   q[0]= k/(r*2.);&lt;br /&gt;   q[1]= j/(r*2.);&lt;br /&gt;   if (isin6(q)==1) {&lt;br /&gt;    if (0) {&lt;br /&gt;     printf("\tcol += texture2D(RenderedTexture, gl_TexCoord[0].xy + (vec2(");&lt;br /&gt;     printf("%2d., %2d.", k, j);&lt;br /&gt;     printf(")*texcel) * dofblur);\n");&lt;br /&gt;    }&lt;br /&gt;    else {&lt;br /&gt;     printf("\tcol.r += texture2D(RenderedTexture, gl_TexCoord[0].xy + (vec2(");&lt;br /&gt;     printf("%2d., %2d.", k, j);&lt;br /&gt;     printf(")*texcel) * dofblur*vec2( .000, .50)).r;\n");&lt;br /&gt;     printf("\tcol.g += texture2D(RenderedTexture, gl_TexCoord[0].xy + (vec2(");&lt;br /&gt;     printf("%2d., %2d.", k, j);&lt;br /&gt;     printf(")*texcel) * dofblur*vec2( .866,-.25)).g;\n");&lt;br /&gt;     printf("\tcol.b += texture2D(RenderedTexture, gl_TexCoord[0].xy + (vec2(");&lt;br /&gt;     printf("%2d., %2d.", k, j);&lt;br /&gt;     printf(")*texcel) * dofblur*vec2(-.866,-.25)).b;\n");&lt;br /&gt;    }&lt;br /&gt;    c++;&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; printf("\tgl_FragColor = col/%d.;\n\tgl_FragColor.a = 1.0;\n}\n", c);&lt;br /&gt; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote class=myInsert&gt;&lt;span style="font-weight:bold;"&gt;結果&lt;/span&gt;&lt;br /&gt;こんな感じ．&lt;br /&gt;&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/0csv0-OREE4" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/KsjdY/~4/lwEsXb2TSk0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://edotprintstacktrace.blogspot.com/feeds/1381394044962606935/comments/default" title="コメントの投稿" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4629086917523851821&amp;postID=1381394044962606935" title="0 件のコメント" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/1381394044962606935?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4629086917523851821/posts/default/1381394044962606935?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/KsjdY/~3/lwEsXb2TSk0/quartz-composer-glsl-shader.html" title="Quartz Composer / GLSL Shader / BokehなFragment Shaderを生成するコード" /><author><name>p_g_</name><uri>http://www.blogger.com/profile/15389208108068935129</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="http://4.bp.blogspot.com/_BA-iUzxIQks/SfAmPKs5kxI/AAAAAAAAAEw/ie6H2TZGF-M/S220/_____1.png" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/0csv0-OREE4/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://edotprintstacktrace.blogspot.com/2012/03/quartz-composer-glsl-shader.html</feedburner:origLink></entry></feed>
