<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>PlanB</title>
	<atom:link href="http://planb.nicecupoftea.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://planb.nicecupoftea.org</link>
	<description>Powered by tea</description>
	<lastBuildDate>Thu, 16 May 2013 21:07:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='planb.nicecupoftea.org' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>PlanB</title>
		<link>http://planb.nicecupoftea.org</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://planb.nicecupoftea.org/osd.xml" title="PlanB" />
	<atom:link rel='hub' href='http://planb.nicecupoftea.org/?pushpress=hub'/>
		<item>
		<title>Archers Avoider</title>
		<link>http://planb.nicecupoftea.org/2013/04/16/archers-avoider/</link>
		<comments>http://planb.nicecupoftea.org/2013/04/16/archers-avoider/#comments</comments>
		<pubDate>Tue, 16 Apr 2013 16:29:49 +0000</pubDate>
		<dc:creator>libbymiller</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://planb.nicecupoftea.org/?p=247</guid>
		<description><![CDATA[Here are some rough notes from our IRFS hardware hackday so I can find them again. The hackday was organised by Cefn Hoile, Andrew Nicolaou and Jasmine Cox, and was utterly brilliant. This is work by Dan Nuttall, Jasmine Cox, &#8230; <a href="http://planb.nicecupoftea.org/2013/04/16/archers-avoider/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=planb.nicecupoftea.org&#038;blog=7954761&#038;post=247&#038;subd=libbymiller&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Here are some rough notes from our IRFS hardware hackday so I can find them again. The hackday was organised by <a href="http://cefn.com/blog/">Cefn Hoile</a>, <a href="http://andrewnicolaou.co.uk">Andrew Nicolaou</a> and <a href="http://www.jasminecox.co.uk">Jasmine Cox</a>, and was utterly brilliant.</p>
<p>This is work by Dan Nuttall, Jasmine Cox, Sean O&#8217;Halpin, Nikolaos Tsipas and me (though I did little!) at a hackday organised as part of our 10% time at IRFS at BBC R&amp;D.</p>
<p>The idea was to make a panic button for radio, that allowed you to skip all or part of a programme, e.g. the Archers.</p>
<p><a href="http://libbymiller.files.wordpress.com/2013/04/aa_plan.jpg"><img src="http://libbymiller.files.wordpress.com/2013/04/aa_plan.jpg?w=225&#038;h=300" alt="aa_plan" width="225" height="300" class="alignnone size-medium wp-image-251" /></a></p>
<p>here&#8217;s the version we made:</p>
<p><a href="http://libbymiller.files.wordpress.com/2013/04/aa_green_box.jpg"><img src="http://libbymiller.files.wordpress.com/2013/04/aa_green_box.jpg?w=300&#038;h=225" alt="aa_green_box" width="300" height="225" class="alignnone size-medium wp-image-250" /></a></p>
<p>here&#8217;s the more exciting &#8216;farmer&#8217; interface, designed by Jasmine and hooked up by Nikolaos:</p>
<p><a href="http://libbymiller.files.wordpress.com/2013/04/aa_farmer.jpg"><img src="http://libbymiller.files.wordpress.com/2013/04/aa_farmer.jpg?w=300&#038;h=225" alt="aa_farmer" width="300" height="225" class="alignnone size-medium wp-image-249" /></a></p>
<p>Here&#8217;s a video of a wifi version I made at home: <a href="http://www.flickr.com/photos/nicecupoftea/8649416824/in/photostream/">http://www.flickr.com/photos/nicecupoftea/8649416824/in/photostream/</a></p>
<p>It consists of a Raspberry PI, a home-made <a href="http://shrimping.it">Shrimp</a> with a button, some code that plays IP streams for the audio, which listens for changes to a file and switches streams when it sees a change. Code listens to the serial port and when it detects a button change, changes the right file. I guess we could use the GPIO on the Pi for the button, but I don&#8217;t know how to do that yet.</p>
<p>At home, I had a go with my own Pi &#8211; I had a power supply and wifi card for it, but no fancy display. This is what I used:</p>
<ul>
<li>Raspberry pi</li>
<li>SD card (I used a speed 10 generic 8GB one)</li>
<li>some sort of speaker</li>
<li>wifi usb card for the pi</li>
<li>power supply for the pi</li>
<li>arduino or shrimp with a button</li>
</ul>
<p>I installed wheezy on an SD card via this:</p>
<p><a href="http://www.raspberrypi.org/downloads">http://www.raspberrypi.org/downloads</a><br />
<a href="http://elinux.org/RPi_Easy_SD_Card_Setup">http://elinux.org/RPi_Easy_SD_Card_Setup</a></p>
<p>I then put it in the PI, connected via ethernet and sharing internet on the Mac. I got the IP address using</p>
<p>ping 192.168.2.255</p>
<p>and looking in console.app for a response from a pi &#8211; it was 192.168.2.4. I ssh&#8217;ed to that using pi@192.168.2.4 password raspberry, then tried to update apt-get<br />
<code><br />
sudo apt-get update<br />
Err <a href="http://archive.raspberrypi.org" rel="nofollow">http://archive.raspberrypi.org</a> wheezy InRelease</p>
<p>Err <a href="http://mirrordirector.raspbian.org" rel="nofollow">http://mirrordirector.raspbian.org</a> wheezy InRelease</p>
<p>Err <a href="http://archive.raspberrypi.org" rel="nofollow">http://archive.raspberrypi.org</a> wheezy Release.gpg<br />
  Temporary failure resolving 'archive.raspberrypi.org'</p>
<p></code></p>
<p>The default nameserver from the mac didn&#8217;t work. Using the google dns fixed it, though this kept getting overwritten on a reboot for some reason:</p>
<p>sudo nano /etc/resolv.conf<br />
<code><br />
nameserver 8.8.8.8<br />
nameserver 8.8.4.4<br />
</code></p>
<p>then update apt-get<br />
<code><br />
sudo apt-get update<br />
</code></p>
<p>Install mpd player<br />
<code><br />
sudo apt-get install mpd </p>
<p>[....] Starting Music Player Daemon: mpdlisten: bind to '[::1]:6600' failed: Failed to create socket: Address family not supported by protocol (continuing anyway, because binding to '127.0.0.1:6600' succeeded)<br />
Failed to load database: Failed to open database file "/var/lib/mpd/tag_cache": No such file or directory<br />
. ok </p>
<p></code></p>
<p>Install the stuff needed for Dan&#8217;s player code:<br />
<code><br />
sudo aptitude install ruby1.9.1-dev #for bundler<br />
sudo apt-get install libsqlite3-dev<br />
sudo apt-get install git #install git<br />
</code></p>
<p>Install Dan&#8217;s code:<br />
<code><br />
git clone <a href="https://github.com/pixelblend/radiodan.git" rel="nofollow">https://github.com/pixelblend/radiodan.git</a> # the code<br />
sudo gem install bundler #to get all the required gems<br />
cd radiodan<br />
bundle install<br />
</code></p>
<p>Put the simple button code on the arduino using laptop:<br />
<code><br />
// set pin numbers:<br />
const int buttonPin = 2;     // the number of the pushbutton pin<br />
const int ledPin =  13;      // the number of the LED pin</p>
<p>// variables will change:<br />
int buttonState = 0;         // variable for reading the pushbutton status</p>
<p>void setup() {<br />
&nbsp;// initialize the LED pin as an output:<br />
&nbsp;pinMode(ledPin, OUTPUT);<br />
&nbsp;// initialize the pushbutton pin as an input:<br />
&nbsp;pinMode(buttonPin, INPUT);<br />
&nbsp;Serial.begin(9600);<br />
}</p>
<p>void loop(){<br />
&nbsp;// read the state of the pushbutton value:<br />
&nbsp;buttonState = digitalRead(buttonPin);<br />
&nbsp;//Serial.println(buttonState);<br />
&nbsp;// check if the pushbutton is pressed.<br />
&nbsp;// if it is, the buttonState is HIGH:<br />
&nbsp;if (buttonState == HIGH) {<br />
&nbsp;&nbsp;// turn LED on:<br />
&nbsp;&nbsp;digitalWrite(ledPin, HIGH);<br />
&nbsp;&nbsp;Serial.println("on");<br />
&nbsp;}<br />
&nbsp;else {<br />
&nbsp;&nbsp;// turn LED off:<br />
&nbsp;&nbsp;digitalWrite(ledPin, LOW);<br />
&nbsp;&nbsp;//Serial.println("off");</p>
<p>&nbsp;}<br />
}<br />
</code></p>
<p>Install required gem for Sean&#8217;s serial reading code:<br />
<code><br />
sudo gem install serialport<br />
</code></p>
<p>add in Sean&#8217;s ruby code in radiodan/bin/read-serial.rb :<br />
<code><br />
require 'serialport'</p>
<p>filename = ARGV[0] or abort "Need to specify path to file"<br />
sp = SerialPort.new(filename, 9600)<br />
sp.read_timeout = 100<br />
sp.flow_control = SerialPort::NONE</p>
<p>p sp</p>
<p>TIMEOUT = 0.01<br />
TIME_LIMIT = 0.25<br />
PANIC_FILE = "../tmp/panic"</p>
<p>last_time = Time.now.to_f</p>
<p>state = <span>:</span>off</p>
<p>reading = true<br />
begin<br />
&nbsp;while reading<br />
&nbsp;&nbsp;selectors = IO.select([sp], [], [], TIMEOUT)<br />
&nbsp;&nbsp;time = Time.now.to_f<br />
&nbsp;&nbsp;if selectors<br />
&nbsp;&nbsp;&nbsp;input = selectors.first.first<br />
&nbsp;&nbsp;&nbsp;data = input.gets.chomp<br />
&nbsp;&nbsp;&nbsp;state = state == <span>:</span>on ? <span>:</span>off : <span>:</span>on<br />
&nbsp;&nbsp;&nbsp;if state == <span>:</span>on<br />
&nbsp;&nbsp;&nbsp;File.open(PANIC_FILE, "wb") do |file|<br />
&nbsp;&nbsp;&nbsp;&nbsp;file.write Time.now.to_s<br />
&nbsp;&nbsp;end<br />
&nbsp;end<br />
&nbsp;p [data, state]<br />
&nbsp;flushing = true<br />
&nbsp;while flushing<br />
&nbsp;&nbsp;selectors = IO.select([sp], [], [], TIMEOUT)<br />
&nbsp;&nbsp;&nbsp;if selectors<br />
&nbsp;&nbsp;&nbsp;&nbsp;input = selectors.first.first<br />
&nbsp;&nbsp;&nbsp;&nbsp;junk = input.gets<br />
&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;&nbsp;time = Time.now.to_f<br />
&nbsp;&nbsp;&nbsp;if time &gt; last_time + TIME_LIMIT<br />
&nbsp;&nbsp;&nbsp;&nbsp;flushing = false<br />
&nbsp;&nbsp;&nbsp;end<br />
&nbsp;&nbsp;end<br />
&nbsp;end<br />
&nbsp;&nbsp;last_time = Time.now.to_f<br />
&nbsp;end<br />
ensure<br />
&nbsp;sp.close<br />
end<br />
</code></p>
<p>plug in the arduino to the pi using the USB port, and identify it:<br />
<code><br />
ls /dev | grep USB<br />
&gt; ttyUSB0<br />
</code></p>
<p>run the serial code in the background<br />
<code><br />
cd bin<br />
ruby read-serial.rb /dev/ttyUSB0<br />
</code></p>
<p>and<br />
<code><br />
./bin/download # get the data - should run in the background<br />
./bin/radio<br />
</code></p>
<p>-&gt; at this point if it&#8217;s all running correctly it should work (hear R4 from speaker, press the button and it goes to radio 1 for 5 secs and then returns)</p>
<p>for wifi I used</p>
<p><a href="http://dl.dropboxusercontent.com/u/80256631/install-rtl8188cus.txt">http://dl.dropboxusercontent.com/u/80256631/install-rtl8188cus.txt</a></p>
<p>via</p>
<p><a href="http://elinux.org/RaspberryPiBoardVerifiedPeripherals#USB_Wi-Fi_Adapters">http://elinux.org/RaspberryPiBoardVerifiedPeripherals#USB_Wi-Fi_Adapters</a></p>
<p>I did this at the end, which took a looong time:</p>
<p>&#8220;Do you want to continue and update the software packages list, kernel software<br />
packages and upgrade the Pi&#8217;s firmware and software or do you want to terminate<br />
the script?&#8221;</p>
<p>get IP addresss with ifconfig and use wlan0<br />
<code><br />
iwconfig<br />
</code></p>
<p>-&gt; should be associated with an SSID</p>
<p>-&gt; I had some problems with this&#8230;turning it off and on again worked <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Just for reference, here&#8217;s the full code for the <a href="http://www.youtube.com/watch?feature=player_embedded&amp;v=WBaYzJxNVy0">exciting 7 segment LED display Cefn found for us</a> that Jasmine wrote.</p>
<p>The <a href="http://www.ebay.co.uk/itm/221198880761?ssPageName=STRK:MEWNX:IT&amp;_trksid=p3984.m1439.l2649">old ebay listing is here</a> and the library and sample code is <a href="http://www.boos.cz/tom/display_demo_max7219.zip">here (zip file)</a></p>
<p><code><br />
// set pin numbers:<br />
const int buttonPin = 9;     // the number of the pushbutton pin<br />
const int ledPin =  13;      // the number of the LED pin<br />
//We always have to include the library<br />
#include "LedControl.h"<br />
/* we always wait a bit between updates of the display */<br />
unsigned long delaytime=250;<br />
/*<br />
 Now we need a LedControl to work with.<br />
 ***** These pin numbers will probably not work with your hardware *****<br />
 pin 12 is connected to the DataIn<br />
 pin 11 is connected to the CLK<br />
 pin 10 is connected to LOAD<br />
 We have only a single MAX72XX.<br />
 */<br />
LedControl lc=LedControl(12,11,10,1);</p>
<p>// variables will change:<br />
int buttonState = 0;         // variable for reading the pushbutton status</p>
<p>void setup() {</p>
<p>&nbsp;lc.shutdown(0,false);<br />
&nbsp;/* Set the brightness to a medium values */<br />
&nbsp;lc.setIntensity(0,8);<br />
&nbsp;/* and clear the display */<br />
&nbsp;lc.clearDisplay(0);<br />
&nbsp;// initialize the LED pin as an output:<br />
&nbsp;pinMode(ledPin, OUTPUT);<br />
&nbsp;// initialize the pushbutton pin as an input:<br />
&nbsp;pinMode(buttonPin, INPUT);</p>
<p>&nbsp;Serial.begin(9600);<br />
&nbsp;&nbsp;writeRadio4();<br />
}</p>
<p>void loop(){  </p>
<p>  // read the state of the pushbutton value:<br />
&nbsp;buttonState = digitalRead(buttonPin);</p>
<p>&nbsp;// check if the pushbutton is pressed.<br />
&nbsp;// if it is, the buttonState is HIGH:<br />
&nbsp;if (buttonState == HIGH) {<br />
&nbsp;&nbsp;// turn LED on:<br />
&nbsp;&nbsp;digitalWrite(ledPin, HIGH);<br />
&nbsp;&nbsp;Serial.println("on");<br />
&nbsp;&nbsp;writeRadio1();<br />
&nbsp;}<br />
&nbsp;else {<br />
&nbsp;&nbsp;// turn LED off:<br />
&nbsp;&nbsp;digitalWrite(ledPin, LOW);<br />
&nbsp;&nbsp;// Serial.println("off");<br />
 &nbsp;}<br />
}</p>
<p>void writeRadio4() {</p>
<p>&nbsp;lc.setRow(0,7,0x05);<br />
&nbsp;delay(delaytime);<br />
&nbsp;lc.setChar(0,6,'a',false);<br />
&nbsp;delay(delaytime);<br />
&nbsp;lc.setChar(0,5,'d',false);<br />
&nbsp;delay(delaytime);<br />
&nbsp;lc.setRow(0,4,B00010000);<br />
&nbsp;delay(delaytime);<br />
&nbsp;lc.setRow(0,3,0x1D);<br />
&nbsp;delay(delaytime);<br />
&nbsp;lc.setDigit(0,1,4,true); // Display 3 to Digit 3, " "<br />
&nbsp;delay(2000);</p>
<p>&nbsp;lc.clearDisplay(0);<br />
&nbsp;delay(delaytime);<br />
} </p>
<p>void writeRadio1(){</p>
<p>&nbsp;lc.setRow(0,7,0x05);<br />
&nbsp;delay(delaytime);<br />
&nbsp;lc.setChar(0,6,'a',false);<br />
&nbsp;delay(delaytime);<br />
&nbsp;lc.setChar(0,5,'d',false);<br />
&nbsp;delay(delaytime);<br />
&nbsp;lc.setRow(0,4,B00010000);<br />
&nbsp;delay(delaytime);<br />
&nbsp;lc.setRow(0,3,0x1D);<br />
&nbsp;delay(delaytime);<br />
&nbsp;lc.setDigit(0,1,1,true); // Display 3 to Digit 3, " "<br />
&nbsp;delay(delaytime);</p>
<p>&nbsp;lc.clearDisplay(0);<br />
&nbsp;delay(5000);</p>
<p>}<br />
</code></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/libbymiller.wordpress.com/247/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/libbymiller.wordpress.com/247/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=planb.nicecupoftea.org&#038;blog=7954761&#038;post=247&#038;subd=libbymiller&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://planb.nicecupoftea.org/2013/04/16/archers-avoider/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00159ba0642f103407f7a3f4d44da772?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">libbymiller</media:title>
		</media:content>

		<media:content url="http://libbymiller.files.wordpress.com/2013/04/aa_plan.jpg?w=225" medium="image">
			<media:title type="html">aa_plan</media:title>
		</media:content>

		<media:content url="http://libbymiller.files.wordpress.com/2013/04/aa_green_box.jpg?w=300" medium="image">
			<media:title type="html">aa_green_box</media:title>
		</media:content>

		<media:content url="http://libbymiller.files.wordpress.com/2013/04/aa_farmer.jpg?w=300" medium="image">
			<media:title type="html">aa_farmer</media:title>
		</media:content>
	</item>
		<item>
		<title>SVG D3.js bar chart</title>
		<link>http://planb.nicecupoftea.org/2013/04/09/svg-d3-js-bar-chart/</link>
		<comments>http://planb.nicecupoftea.org/2013/04/09/svg-d3-js-bar-chart/#comments</comments>
		<pubDate>Tue, 09 Apr 2013 08:07:12 +0000</pubDate>
		<dc:creator>libbymiller</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://planb.nicecupoftea.org/?p=239</guid>
		<description><![CDATA[This has been driving me up the wall. I haven&#8217;t felt so stupid in a long time. Anyway, since I managed it finally, here is some code: &#60;html&#62; &#60;head&#62; &#60;script type="text/javascript" src="d3/d3.v3.min.js"&#62;&#60;/script&#62; &#60;style type="text/css"&#62; .axis text { font: 10px sans-serif; &#8230; <a href="http://planb.nicecupoftea.org/2013/04/09/svg-d3-js-bar-chart/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=planb.nicecupoftea.org&#038;blog=7954761&#038;post=239&#038;subd=libbymiller&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>This has been driving me up the wall. I haven&#8217;t felt so stupid in a long time. Anyway, since I managed it finally, here is some code:</p>
<p><code><br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;script type="text/javascript" src="d3/d3.v3.min.js"&gt;&lt;/script&gt;</p>
<p>&lt;style type="text/css"&gt;<br />
.axis text {<br />
  font: 10px sans-serif;<br />
}</p>
<p>.axis path, .axis line {<br />
  fill: none;<br />
  stroke: #000;<br />
  shape-rendering: crispEdges;<br />
}<br />
&lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;div id="chart"&gt;&lt;/div&gt;<br />
&lt;/body&gt;</p>
<p>&lt;script type="text/javascript"&gt;<br />
var margin = {top: 10, right: 10, bottom: 30, left: 50},<br />
    width = 500 - margin.left - margin.right,<br />
    height = 300 - margin.top - margin.bottom;</p>
<p>var x = d3.scale.linear()<br />
    .domain([0, 20])<br />
    .range([0, width]);</p>
<p>var y = d3.scale.linear()<br />
    .domain([0,100])<br />
    .range([height,0]);</p>
<p>var xAxis = d3.svg.axis()<br />
    .scale(x)<br />
    .orient("bottom");</p>
<p>var yAxis = d3.svg.axis()<br />
    .scale(y)<br />
    .orient("left");</p>
<p>var svg = d3.select("#chart").append("svg")<br />
    .attr("width", width + margin.left + margin.right)<br />
    .attr("height", height + margin.top + margin.bottom)<br />
  .append("g")<br />
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");</p>
<p>svg.append("g")<br />
    .attr("class", "x axis")<br />
    .attr("transform", "translate(0," + height + ")")<br />
    .call(xAxis);</p>
<p>svg.append("g")<br />
    .attr("class", "y axis")<br />
    .call(yAxis);</p>
<p>var data = [[1,100],[6,20],[20, 50]];</p>
<p>var bars = svg.selectAll("rect")<br />
    .data(data)<br />
 .enter().append("rect")<br />
    .attr("x", function(d) {return x(d[0]) - 5;})<br />
    .attr("y", function(d) {return y(d[1]);})<br />
    .attr("width",10)<br />
    .attr("height", function(d) {return height - y(d[1]);})<br />
    .style("fill","blue");</p>
<p>&lt;/script&gt;</p>
<p>&lt;/html&gt;<br />
</code></p>
<p>and the output:</p>
<p><a href="http://libbymiller.files.wordpress.com/2013/04/output.png"><img src="http://libbymiller.files.wordpress.com/2013/04/output.png?w=300&#038;h=186" alt="output" width="300" height="186" class="alignnone size-medium wp-image-240" /></a></p>
<p>Adapted from this example on <a href="http://jsfiddle.net/jsl6906/qAHC2/10/">jsfiddle</a>. Another good source of information is <a href="http://alignedleft.com/tutorials/d3/">Scott Murray&#8217;s d3.js tutorials</a> particularly scales and axes. </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/libbymiller.wordpress.com/239/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/libbymiller.wordpress.com/239/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=planb.nicecupoftea.org&#038;blog=7954761&#038;post=239&#038;subd=libbymiller&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://planb.nicecupoftea.org/2013/04/09/svg-d3-js-bar-chart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00159ba0642f103407f7a3f4d44da772?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">libbymiller</media:title>
		</media:content>

		<media:content url="http://libbymiller.files.wordpress.com/2013/04/output.png?w=300" medium="image">
			<media:title type="html">output</media:title>
		</media:content>
	</item>
		<item>
		<title>Connecting a Wifly shield to an Arduino</title>
		<link>http://planb.nicecupoftea.org/2012/03/24/connecting-a-wifly-shield-to-an-arduino/</link>
		<comments>http://planb.nicecupoftea.org/2012/03/24/connecting-a-wifly-shield-to-an-arduino/#comments</comments>
		<pubDate>Sat, 24 Mar 2012 08:32:02 +0000</pubDate>
		<dc:creator>libbymiller</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://planb.nicecupoftea.org/?p=223</guid>
		<description><![CDATA[I&#8217;m trying to make a more mobile version of my &#8216;remote control&#8217; which connects to the web in order to send commands. My first version was with a Nanode with built-in ethernet, but I also have a Arduino Duemilanove ATmega168, &#8230; <a href="http://planb.nicecupoftea.org/2012/03/24/connecting-a-wifly-shield-to-an-arduino/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=planb.nicecupoftea.org&#038;blog=7954761&#038;post=223&#038;subd=libbymiller&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m trying to make a more mobile version of my &#8216;remote control&#8217; </p>
<p><img src="http://farm8.staticflickr.com/7166/6785289453_e4aa22fef5.jpg" /> </p>
<p>which connects to the web in order to send commands. My first version was with a Nanode with built-in ethernet, but I also have a Arduino Duemilanove ATmega168, so I thought I&#8217;d try that with my new Wifly shield and a battery pack.</p>
<p>The Wifly shield is <a href="http://www.skpang.co.uk/catalog/wifly-shield-p-608.html">this version</a> and I have some <a href="http://www.skpang.co.uk/catalog/header-kit-for-arduino-board-p-428.html">stackable headers</a> to go with it. I connected the shield on top of the Arduino like this:</p>
<p><img src="http://farm8.staticflickr.com/7198/7010448777_6c6b3cfa5c.jpg" /></p>
<p>You can see that the USB socket means that the shield is a bit high up.</p>
<p>I downloaded <a href="https://github.com/jmr13031/WiFly-Shield">this version of the Wifly library</a> that&#8217;s been recently changed to work with Arduino 1.0 Library. All connected up, and running this code from the examples:</p>
<p><code></p>
<p>#include "WiFly.h"</p>
<p>char passphrase[] = "pass";<br />
char ssid[] = "ssid";</p>
<p>byte server[] = { 66, 249, 89, 104 }; // Google</p>
<p>Client client("google.com", 80);</p>
<p>void setup() {</p>
<p>  Serial.begin(9600);<br />
  delay(100);<br />
  Serial.println("[Wifly]");</p>
<p>  WiFly.begin();</p>
<p>  Serial.println("finished beginning");</p>
<p>  if (!WiFly.join(ssid, passphrase)) {<br />
    Serial.println("Association failed.");<br />
    while (1) {<br />
      // Hang on failure.<br />
    }<br />
  }</p>
<p>  Serial.println("connecting...");</p>
<p>  if (client.connect()) {<br />
    Serial.println("connected");<br />
    client.println("GET /search?q=arduino HTTP/1.0");<br />
    client.println();<br />
  } else {<br />
    Serial.println("connection failed");<br />
  }</p>
<p>}</p>
<p>void loop() {<br />
  if (client.available()) {<br />
    char c = client.read();<br />
    Serial.print(c);<br />
  }</p>
<p>  if (!client.connected()) {<br />
    Serial.println();<br />
    Serial.println("disconnecting.");<br />
    client.stop();<br />
    for(;;)<br />
      ;<br />
  }<br />
}</p>
<p></code></p>
<p>it was hanging on Wifly.begin(). </p>
<p>After a bit of hunting round I found <a href="http://arduino.cc/forum/index.php/topic,58092.msg490340.html#msg490340">this detailed description of what might be up</a> &#8211; essentially a timeout, and then twice only, while I was fiddling with the headers, <a href="https://github.com/jmr13031/WiFly-Shield/blob/master/src/WiFly/examples/tools/SpiUartTerminal/SpiUartTerminal.pde">SpiUartTerminal.pde</a> worked.</p>
<p>The rest of the time it just hangs on this:</p>
<p><code><br />
Attempting to connect to SPI UART...<br />
</code></p>
<p>So really I&#8217;m looking for a bit of advice &#8211; I don&#8217;t really want to solder it on, but are there better ways of connecting the shield to the Arduino? Are headers typically less reliable than soldering? Is there a better way to connect the shield somehow maybe using a breadboard? (e.g. <a href="http://cairohackerspace.blogspot.co.uk/2011/05/beginners-guide-to-connecting-and.html">like this</a>). Or am I just doing something daft &#8230;?</p>
<p>UPDATE: Thanks to John (see comment below) I sorted out the problem, which was a newby issue: stackable headers need to be soldered! Anyway I persuaded Damian to solder for me (I&#8217;ve never done it before) and we now have a working wireless, battery-powered remote control:</p>
<p><img src="http://farm8.staticflickr.com/7212/6867484812_9cef8e6ff9.jpg" /></p>
<p>(All it does is send the category to a http web service and that randomly chooses an item from all iPlayer available items in that category, and sends it to a web page connected with XMPP).</p>
<p>Thanks everyone who helped. I&#8217;m very pleased with it <img src='http://s0.wp.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/libbymiller.wordpress.com/223/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/libbymiller.wordpress.com/223/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=planb.nicecupoftea.org&#038;blog=7954761&#038;post=223&#038;subd=libbymiller&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://planb.nicecupoftea.org/2012/03/24/connecting-a-wifly-shield-to-an-arduino/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00159ba0642f103407f7a3f4d44da772?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">libbymiller</media:title>
		</media:content>

		<media:content url="http://farm8.staticflickr.com/7166/6785289453_e4aa22fef5.jpg" medium="image" />

		<media:content url="http://farm8.staticflickr.com/7198/7010448777_6c6b3cfa5c.jpg" medium="image" />

		<media:content url="http://farm8.staticflickr.com/7212/6867484812_9cef8e6ff9.jpg" medium="image" />
	</item>
		<item>
		<title>Nanode / twitter blink example</title>
		<link>http://planb.nicecupoftea.org/2012/02/22/nanode-twitter-blink-example/</link>
		<comments>http://planb.nicecupoftea.org/2012/02/22/nanode-twitter-blink-example/#comments</comments>
		<pubDate>Wed, 22 Feb 2012 18:41:19 +0000</pubDate>
		<dc:creator>libbymiller</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://planb.nicecupoftea.org/?p=205</guid>
		<description><![CDATA[Here are some notes on my adventures trying to make an ethernet connected Nanode that blinks when certain words are mentioned on twitter. I was working with Mac OS X and there were a few gotchas, so I&#8217;ve mentioned them &#8230; <a href="http://planb.nicecupoftea.org/2012/02/22/nanode-twitter-blink-example/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=planb.nicecupoftea.org&#038;blog=7954761&#038;post=205&#038;subd=libbymiller&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Here are some notes on my adventures trying to make an ethernet connected Nanode that blinks when certain words are mentioned on twitter. I was working with Mac OS X and there were a few gotchas, so I&#8217;ve mentioned them here so I don&#8217;t forget and in case anything is useful to anyone else. There&#8217;s an exciting video of the resulting beast <a href="http://www.flickr.com/photos/nicecupoftea/6691338473/">here</a> featuring the <a href="http://www.skpang.co.uk/catalog/acrylic-case-for-nanode-p-974.html">acrylic case from the excellent and fast SKPang</a>. The code (an unholy mixture of C++ and Processing) is <a href="https://github.com/libbymiller/Arduino/tree/master/ethernet_client">here</a>. I was coming at this as someone who&#8217;d previously only got blinking and similar going on a Arduino Duemilanove.</p>
<h4>Getting the Nanode working</h4>
<ul>
<li>
Buy a <a href="http://nanode.eu/">Nanode</a> (<a href="http://arduino.cc/en/Main/ArduinoEthernetShield">ethernet Arduinos</a> are also available, I chose a Nanode because it was recommended to me, also their support is very good and it arrived very quickly. I think in retrospect it&#8217;s a bit hard to use for a real novice like me, though I enjoyed finding out&#8230;). I got a prebuilt Nanode RFX (which has a Hope RF shield and a microSD slot). You need to also buy a Programming Adaptor, which you need in order to talk to a Nanode as the USB programming interface isn&#8217;t built in.
        </li>
<li>
Download the <a href="http://arduino.cc/hu/Main/Software">Arduino IDE</a>
        </li>
<li>
Install the <a href="http://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx">FTDI driver</a> (see <a href="http://sustburbia.blogspot.com/2011/10/new-nanode-programming-lead.html?showComment=1324496343052#c6066041842684048441">this comment, which helped me out a lot</a>) &#8211; installing it will restart your computer. This is a different driver to the one you use with a standard Arduino &#8211; see <a href="http://arduino.cc/en/Guide/Howto">the Arduino guide if you&#8217;re not using a Nanode</a>
        </li>
<li>
Open the blink Arduino example (under file -&gt; examples -&gt; Basic, or <a href="http://arduino.cc/en/Tutorial/blink">here</a>) and change the output to 6
        </li>
<li>
Connect the Nanode to the Mac using the FTDI cable using a USB cable
        </li>
<li>
In the IDE, set the port to the new driver and the board to &#8216;Arduino Duemilanove with ATMega 328&#8242;
        </li>
<li>
Compile and run the Blink example on the Nanode
        </li>
<li>
The default LED on the Nanode should blink
        </li>
<li>
Celebrate
        </li>
</ul>
<h4>Connecting up Ethernet</h4>
<ul>
<li>
Install Ethernet Library -&gt; cd ~/Documents/Arduino; mkdir libraries
        </li>
<li>
Download <a href="http://jeelabs.net/projects/11/wiki/EtherCard">EtherCard</a> library and unzip it in this directory
        </li>
<li>
Restart the Arduino IDE and you should see sketch / import library &#8211; a new library (not Ethernet but EtherCard at the bottom)
        </li>
<li>
Start a new sketch
        </li>
<li>
Next I copied and pasted <a href="http://jeelabs.net/projects/cafe/repository/show/EtherCard/examples/webClient">this WebClient example from EtherCard</a> into a new file, and that formed the basis of my code.
        </li>
<li>
Click on sketch / import library &#8211; and import EtherCard &#8211; and it puts some import statements at the top
        </li>
<li>
Add this at the top: #include <code>&lt;stdint.h&gt;</code>
        </li>
<li>
Connect it to an ethernet connection (e.g. I shared airport to ethernet connection on my mac)
        </li>
</ul>
<p>The one problem I had was that it appeared to work intermittently, or once per restart of the board. I think this must have been some sort of race condition. Anyway, I solved it by adding a tiny wait after these two lines:<br />
<code><br />
void loop () {</p>
<p> ether.packetLoop(ether.packetReceive());</p>
<p> delay(100); //&lt;--  add this.</p>
<p>...<br />
</code></p>
<p>If you look then at the serial monitor (button with the little magnifing glass on the top right of the Arduino IDE), you should see some results. Click restart on the Nanode if not. It takes a while to get the IP address.</p>
<p>A couple of useful links: </p>
<ul>
<li>
<a href="http://forum.jeelabs.net/node/733">http://forum.jeelabs.net/node/733</a>
</li>
<li>
<a href="http://forum.jeelabs.net/comment/2208">http://forum.jeelabs.net/node/733</a>
</li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/libbymiller.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/libbymiller.wordpress.com/205/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=planb.nicecupoftea.org&#038;blog=7954761&#038;post=205&#038;subd=libbymiller&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://planb.nicecupoftea.org/2012/02/22/nanode-twitter-blink-example/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00159ba0642f103407f7a3f4d44da772?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">libbymiller</media:title>
		</media:content>
	</item>
		<item>
		<title>A node.js bot in XMPP</title>
		<link>http://planb.nicecupoftea.org/2012/01/05/a-node-js-bot-in-xmpp/</link>
		<comments>http://planb.nicecupoftea.org/2012/01/05/a-node-js-bot-in-xmpp/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 22:54:28 +0000</pubDate>
		<dc:creator>libbymiller</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://planb.nicecupoftea.org/?p=195</guid>
		<description><![CDATA[Yesterday Danbri and I invested a few hours in a rapid node.js prototype for NoTube. We&#8217;ll blog about it properly elsewhere, but this is just a little note about a bit of curious behaviour we found, in case anyone runs &#8230; <a href="http://planb.nicecupoftea.org/2012/01/05/a-node-js-bot-in-xmpp/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=planb.nicecupoftea.org&#038;blog=7954761&#038;post=195&#038;subd=libbymiller&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Yesterday Danbri and I invested a few hours in a rapid node.js prototype for NoTube. We&#8217;ll blog about it properly elsewhere, but this is just a little note about a bit of curious behaviour we found, in case anyone runs into the same problem.</p>
<p>Just before christmas Dan made a node.js xmpp bot that could appear in <a href="http://notube.tv/2011/10/10/n-screen-a-second-screen-application-for-small-group-exploration-of-on-demand-content/">N-Screen</a> and take commands via drag and drop (if you don&#8217;t care about this, the point is that it uses <a href="http://nodejs.org/">node.js</a> with <a href="https://github.com/astro/node-xmpp">node-xmpp</a>). Dan got it showing up in the N-Screen interface and reflecting back whatever you dropped on it. I thought it would be trivial to hook in one of the item-to-item recommenders I have working via a json http api. Basically to do http GETs in node.js you need something like this:<br />
<code><br />
var http = require('http');</p>
<p>var data_client = http.createClient(80, "nscreen.notu.be");<br />
var request = data_client.request('GET', '/iplayer_dev/api/suggest?pid='+pid',  {'host': 'nscreen.notu.be'});<br />
request.end();</p>
<p>request.on('response', function (response) {<br />
  response.setEncoding('utf8');<br />
  var myStr = "";<br />
  response.on('data', function (chunk) {<br />
    console.log('BODY: ' + chunk);<br />
    myStr += chunk;<br />
  });<br />
  response.on('end', function (response) {<br />
    console.log(myStr);<br />
  }<br />
});<br />
</code></p>
<p>Then you can parse myStr e.g.<br />
<code><br />
var j = JSON.parse(myStr);<br />
</code></p>
<p>What we wanted to do was send that myStr as a string content of an xmpp message like this:<br />
<code><br />
var cl = new xmpp.Client({<br />
  jid: jid + '/bot',<br />
  password: password<br />
});</p>
<p>cl.on('stanza', function(stanza) {<br />
  var msg = { to: stanza.attrs.from , type: 'chat' };</p>
<p> ... get myStr of recommendations based on that message</p>
<p>  cl.send(new xmpp.Element('message', msg ).c('body').t(myStr) );<br />
});<br />
</code></p>
<p>It really should have been simple, but in practice the myStr existed when printed out to console but was never sent. At first we thought it was something to do with Buffers &#8211; if you don&#8217;t do response.setEncoding(&#8230;) you get Buffers back and perhaps some stringification of those wasn&#8217;t working, but no. To add to the confusion we could create Json objects from the string but they still would not send, even if copied to new strings. </p>
<p>In retrospect it&#8217;s obvious it was the XMPP that was the issue, but it took line by line trial and error sending of some sample input before I found it: &amp; characters in the input were causing silent failure when the message was sent &#8211; presumably due to an XML parsing problem that for some reason didn&#8217;t show up as an error (I know almost nothing about node.js so there could have been some user error there too). Escaping these &amp; didn&#8217;t seem to work, so for now we&#8217;ve just removed them and it all works fine. We need to raise a bug report, but thought I&#8217;d blog for now in case it helps anyone else. The <a href="https://github.com/notube/n-screen/blob/master/utils/bots/notube-bot.js">code is here</a>.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/libbymiller.wordpress.com/195/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/libbymiller.wordpress.com/195/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=planb.nicecupoftea.org&#038;blog=7954761&#038;post=195&#038;subd=libbymiller&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://planb.nicecupoftea.org/2012/01/05/a-node-js-bot-in-xmpp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00159ba0642f103407f7a3f4d44da772?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">libbymiller</media:title>
		</media:content>
	</item>
		<item>
		<title>Archiving a Mediawiki Installation</title>
		<link>http://planb.nicecupoftea.org/2011/12/19/archiving-a-mediawiki-installation/</link>
		<comments>http://planb.nicecupoftea.org/2011/12/19/archiving-a-mediawiki-installation/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 15:24:36 +0000</pubDate>
		<dc:creator>libbymiller</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://planb.nicecupoftea.org/?p=191</guid>
		<description><![CDATA[NoTube uses a Mediawiki installation kindly provided by sti2.org for its internal documentation. As the project draws to a close (we finish officially on January 31st 2012, with our final review in late March) we wanted to make sure we &#8230; <a href="http://planb.nicecupoftea.org/2011/12/19/archiving-a-mediawiki-installation/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=planb.nicecupoftea.org&#038;blog=7954761&#038;post=191&#038;subd=libbymiller&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>NoTube uses a <a href="http://www.mediawiki.org/wiki/MediaWiki">Mediawiki</a> installation kindly provided by <a href="http://www.sti2.org/">sti2.org</a> for its internal documentation. As the project draws to a close (we finish officially on January 31st 2012, with our final review in late March) we wanted to make sure we had a copy of everything we had done over the last few years. Much of this is and will remain private to the partners but there are some interesting ideas and usecases we wrote down early on that we don&#8217;t want to lose track of. I hadn&#8217;t realised that by default <a href="http://www.mediawiki.org/wiki/API:Main_page">Mediawiki has an API</a>, but once I did, it was pretty simple to download all the pages. I&#8217;ve put the Ruby script <a href="https://github.com/notube/Code_snippets/tree/master/download_mediawiki">on github</a> in case it&#8217;s useful to anyone else. Basically the only fiddly bit is the cookies. You do, of course, need a username and password for the wiki you want to download, but thereafter, there&#8217;s an API call you can call recursively to get a list of all pages, and then download them individually. </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/libbymiller.wordpress.com/191/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/libbymiller.wordpress.com/191/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=planb.nicecupoftea.org&#038;blog=7954761&#038;post=191&#038;subd=libbymiller&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://planb.nicecupoftea.org/2011/12/19/archiving-a-mediawiki-installation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00159ba0642f103407f7a3f4d44da772?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">libbymiller</media:title>
		</media:content>
	</item>
		<item>
		<title>Web [on&#124;and&#124;in&#124;for&#124;with&#124;via&#124;through] TV Workshop</title>
		<link>http://planb.nicecupoftea.org/2010/10/08/web-onandinforwithviathrough-tv-workshop/</link>
		<comments>http://planb.nicecupoftea.org/2010/10/08/web-onandinforwithviathrough-tv-workshop/#comments</comments>
		<pubDate>Fri, 08 Oct 2010 14:49:14 +0000</pubDate>
		<dc:creator>libbymiller</dc:creator>
				<category><![CDATA[TV]]></category>

		<guid isPermaLink="false">http://planb.nicecupoftea.org/?p=180</guid>
		<description><![CDATA[In September I participated in the programme committee of the W3C&#8217;s Web On TV workshop, which was held in Japan. Because of some existing committments I was not able to go to the face-to-face meeting, so to try and make &#8230; <a href="http://planb.nicecupoftea.org/2010/10/08/web-onandinforwithviathrough-tv-workshop/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=planb.nicecupoftea.org&#038;blog=7954761&#038;post=180&#038;subd=libbymiller&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>In September I participated in the programme committee of the W3C&#8217;s <a href="http://www.w3.org/2010/09/web-on-tv/">Web On TV</a> workshop, which was held in Japan. Because of some existing committments I was not able to go to the face-to-face meeting, so to try and make up for it, I read through all the papers instead of just my allocated ones. My  notes are below. These are just my personal opinions, and I&#8217;m not an expert in the TV field (although Web and TV <em>is</em> my thing &#8211; I work on the <a href="http://blog.notube.tv">NoTube project</a>).  All the papers are <a href="http://www.w3.org/2010/09/web-on-tv/papers/">public</a>. There is also a <a href="http://www.w3.org/2010/09/webTVIGcharter.html">Draft Web and TV Interest Group Charter</a>. The title of this post is stolen from <a href="http://danbri.org">danbri</a> who was pointing out that Web AND TV need not be Web ON TV. </p>
<p>These reviews are very short &#8211; most of the papers are themselves very short, being expressions of interest. In some cases I just use a representative quote from the paper. The attempt here is to summarise not to evaluate them, though I indicate where I am interested in a particular topic. The workshop summary is <a href="http://www.w3.org/2010/09/web-on-tv/summary.html">here</a>.</p>
<h3>Summary</h3>
<p>A large group were interested in BML and explaining why it&#8217;s important, perhaps indicating that they do not see a reason to change from using that.</p>
<p>A group are interested in HTML5 and how it might work with BML for interactive applications, and a subgroup interested in user interfaces for TV and common UIs for TV and other devices using HTML5.</p>
<p>There is an overlapping group who see the TV as being a hub for home entertainment, which seems to mean that everything is controlled via the TV, web pages are viewed on the TV etc.</p>
<p>There is also a group interested in APIs for TV and other devices (such as controls).</p>
<p>There is a strong sense that IPTV is very important and standards for it are important, especially DRM and efficiency.</p>
<p>I get the impression that there are a lot of participants who have specific scenarios in mind and also a number who are looking for interesting aplications of HTML5 to TV.</p>
<p>Papers 21 and 27, 30 are the most interesting from my point of view. 31 makes an important point. I&#8217;ve a lot of sympathy with 36. 39 and 41 are also interesting.</p>
<h3>Papers</h3>
<h4>1. Shinichi Matsui (Panasonic)</h4>
<p>Would like to attend in a personal capacity. His view is that &#8220;TVs are the most important components, not only for displaying contents, but of &#8220;Ubiquitous Home Appliances&#8221; which will evolve to &#8220;Web Appliances&#8221; surrounding consumers.&#8221;</p>
<h4>2. Tatsuo Matsuoka (Innovative IP Architecture Center, NTT Communications Corporation)</h4>
<p>They have made an IPTV service. They are interested in what functions are done by different devices and APIs, and IPTV standards and DRM.</p>
<h4>3. Katsuhiko Kageyama (Hitachi)</h4>
<p>Interested in consumer electronics: user interfaces for TV especially HTML5 capabilities, control and communications between devices.</p>
<h4>4. Sunghan Kim (ETRI/W3C Korea Office)</h4>
<p>Interested in the relationships between devices, and content provision, e.g. start watching on one device and continue on another, and the various W3C and other standards that could be employed to make it happen.</p>
<h4>5. Wayne Carr (Intel)</h4>
<p>Interested in HTML5 as a way to provide web experience across a range of devices, TV in particular.</p>
<h4>6. Masakazu Muraoka (HTML5-WEST.jp)</h4>
<p>Interested in APIs to TV and HTML on TV.</p>
<h4>7. Aaron Zhang (Huawei)</h4>
<p>They are an IPTV provider and suggest an architecture for improving the user experience of the web on TV (avoid bad UI experiences of early PCs)</p>
<h4>8. Masakazu Kobayashi (KDDI)</h4>
<p>Interested in HTML5 as a common interface to Web TV, avoiding situations such as the different standards for e-books.</p>
<h4>9. Yusuke Kawabe (NTV (Nippon Television))</h4>
<p>Would like to talk about BML and the usecases for it, and see what any new usecases are.</p>
<h4>10. Hidekazu Bunne (TV Asahi)</h4>
<p>As (9)</p>
<h4>11. Tomokazu Yamada (IPTV Forum)</h4>
<p>Would like to talk about IPTV, specifically DRM and EPG metadata, and have some usecases to share.</p>
<h4>12. Tatsuto Murayama (NTT)</h4>
<p>Describe their requirements for HTML5:</p>
<p>&#8220;1. Layout optimization with reflowable materials<br />
2. Requirements for vertical writing/reading and ruby annotations<br />
3. HTML5 widgets as containers for digital books&#8221;</p>
<p>Seem most interested in digital books, but also talk about easy to use layout optimisation on TV screens.</p>
<h4>13. Koichi MARUYAMA (NTT Cyber Solutions Lab.)</h4>
<p>Interest is in a markup language for IPTV with<br />
&#8221; &#8211; Easy multimedia description like BML/LIME<br />
 &#8211; Interactivity as rich as that of native application<br />
 &#8211; Service integration and linkage for multiple devices&#8221;</p>
<p>Social networking, performance and DRM are their main interests.</p>
<h4>14. Limin Yu (DragonTec)</h4>
<p>They have developed a BML IPTV browser and next are doing a LIME browser. They would like to demonstrate their browser. They are interested in standards suitable for the chinese market. They think that W3C technoloigies have potential for interactive TV.</p>
<h4>15. Shigeru Owada (Sony CSL)</h4>
<p>Interesting ideas of devices as &#8216;fairies&#8217; that can communicate with each other and that humans can communicate with. &#8220;We are interested more on fun usage of ubiquitous home network than protocol layer implementation&#8221;</p>
<h4>16. Yoshikazu Seki (Fuji Television)</h4>
<p>as (9)</p>
<h4>17. Kazunori Tanikawa (NEC)</h4>
<p>Interested in IPTV, scenarios, and the potential of HTML5.</p>
<h4>18. Kenji Sugihara (TV Tokyo)</h4>
<p>Similar to (9) especially for broadcaster controlled interactive appliactions using BML.</p>
<h4>19 is missing</h4>
<h4>20. Hiroyuki Aizu (Toshiba)</h4>
<p>Would like to show some usecases of HTML5 on TV as the hub within a hiome network, and some ideas about communication technology and TV.</p>
<h4>21. Shuhei Habu (Allied Resources Communications)</h4>
<p>Interesting usecases and a proposal for privacy for TV in HTML5 based on BML and APIs for TV.</p>
<h4>22. Kenji Fukuda (Wowow)</h4>
<p>Similar to (18)</p>
<h4>23. Jan Lindquist (Ericsson)</h4>
<p>A member of the Open IPTV Forum (OIPF) standardization group who woudl like to talk about his experiences in standardisation in the subgroup responsible for the web latform (javascript, embedded video).</p>
<h4>24. Yoshiaki Ohsumi (Panasonic R&amp;D)</h4>
<p>Interested in possible future usecase and smarter integration of TV and web technologues; TV as a hub.</p>
<h4>25. Ishidoshiro Takashi (Melco)</h4>
<p>Make TVs and perpherals. Interested in the future relationship between BML and HTML5 and traditional over the air and HTML5 and from the user&#8217;s point of view how to improve the experience.</p>
<h4>26. Keiya Motohashi (NHK)</h4>
<p>Interested in public service usecsaes such as disaster information, BML and interactive applications, connecting TV with the web.</p>
<h4>27. Hyojin Park (KAIST)</h4>
<p>Researchers on TV. Interested in device APIs for the browser to control the TV, architecture and standards to allow appropriate UIs for different devices.</p>
<h4>28: Toshio Watanabe, TOKYO BROADCASTING SYSTEM TELEVISION,INC</h4>
<p>The paper is about BML, which is a markup language widely used in Japan and is &#8216;is basically an extension for existing Web standards, e.g., XHTML 1.1&#8242;.</p>
<p>They would be able to provide usecases and are interested in seeing how TVs will become more of a hub for entertainment in the home, and how these changes fit with html5.</p>
<h4>29. Makoto Nishimura at Cisco Systems</h4>
<p>&#8220;Our interest is the integration of LIME and HTML5 on to our video products such as IP-STB, RF-STB and other related solutions.&#8221; </p>
<h4>30. Hiroshi Omata (Jig.jp) </h4>
<p>They have made remote controls from mobile phones and are therefore interested in devices APIs for TV. Also interested in standardising HTML5 for TV.</p>
<h4>31. Naomi Nakamura (ACCESS)</h4>
<p>Think that people don&#8217;t use TV but watch it &#8211; i.e. lean back exterience; therefore new usecases will need to be thought through that accept this.</p>
<h4>32: Tatsuya Igarashi, TDG, Sony Corporation</h4>
<p>Again interested in the TV as a hub for home entertainment and integrated web technology; interested in HTML5; provide usecases.</p>
<h4>33: Shozo FUKUI, Tomo-Digi Corporation</h4>
<p>They would like to explain why BML was useful, explain the diffrence between BML and HTML5 and have several usecases to discuss, including extensibility in the future.</p>
<h4>34: Tatsuki Matsuda, NTT-Resonant Inc.</h4>
<p>They would like to join the workshop, but don&#8217;t offer a paper &#8211; they are provders of web portal services and would like to be able to integrate with TV services.</p>
<h4>35. Masahito Kawamori (ITU-T)</h4>
<p>From ITU-T: would like to present their experiences standardising for IPTV: declarative languages, Lua, SVG, ECMAscript.</p>
<h4>36. Charles McCathieNevile (Opera Software)</h4>
<p>Proposes concrete steps (e.g. testcases) for ensuring &#8220;use of HTML on TV [is] more closely aligned with its usage in general&#8221;, and that this should happen in W3C or in close colaboration with W3C.</p>
<h4>37. Daniel Park (Samsung)</h4>
<p>&#8220;We are supporting on developing best practices and guidelines for Web on TV as well as easy of connection with other Web-capable devices from Web application.&#8221;</p>
<h4>38. Diot Christophe (Technicolor)</h4>
<p>They can help bring the views of services providers and content producers to the table. Interested in web on TV applications, why HTML5 not CE-HTML.</p>
<h4>39. Asanobu Kitamoto (NII)</h4>
<p>Describes the concept of &#8216;Bayesian TV&#8217; &#8211; not just TV on the web or vice versa, but a personalised push system, rather than the pull of the web, with recommendations and user interactions.</p>
<h4>40. Manabu Shimobe (UIEvolution)</h4>
<p>&#8220;we are very interested in contributing to defining the additional standards needed for smarter integration of web technologies and broadcast services&#8221; particularly user interface aspects.</p>
<h4>41. Kiyoshi Oura (Airframe)</h4>
<p>Interesting points made &#8211; the only one to mention advertising &#8211; describing some of the different watching scenarios of the future including different devices. Interested in HTML5 and the potential for continuing enolving of content, especially flexible data storage mechanisms.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/libbymiller.wordpress.com/180/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/libbymiller.wordpress.com/180/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=planb.nicecupoftea.org&#038;blog=7954761&#038;post=180&#038;subd=libbymiller&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://planb.nicecupoftea.org/2010/10/08/web-onandinforwithviathrough-tv-workshop/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00159ba0642f103407f7a3f4d44da772?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">libbymiller</media:title>
		</media:content>
	</item>
		<item>
		<title>Some FOAF stats</title>
		<link>http://planb.nicecupoftea.org/2009/09/08/163/</link>
		<comments>http://planb.nicecupoftea.org/2009/09/08/163/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 13:06:39 +0000</pubDate>
		<dc:creator>libbymiller</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://planb.nicecupoftea.org/?p=163</guid>
		<description><![CDATA[Some FOAF stats from Sindice for something I had to write last week. <a href="http://planb.nicecupoftea.org/2009/09/08/163/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=planb.nicecupoftea.org&#038;blog=7954761&#038;post=163&#038;subd=libbymiller&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>Some <a href="http://xmlns.com/foaf/spec/">FOAF</a> stats from <a href="http://sindice.com/">Sindice</a> for something I had to write last week.</p>
<h3>All classes</h3>
<p>
“Agent”,  3.84 million<br />
“Document”,  6.15 million<br />
“Group”,  5.78 thousand<br />
“Image”,  711.23 thousand<br />
“OnlineAccount”,  15.47 thousand<br />
“OnlineChatAccount”, found 324<br />
“OnlineEcommerceAccount”, found 242<br />
“OnlineGamingAccount”, found 240<br />
“Organization”,  10.05 thousand<br />
“Person”,  2.64 million<br />
“PersonalProfileDocument”,  11.7 thousand<br />
“Project”, found 726
</p>
<h3>All properties</h3>
<p>
“accountName”,  8.02 thousand<br />
“accountServiceHomepage”,  7.24 thousand<br />
“aimChatID”,  9.54 thousand<br />
“based_near”,  7.35 thousand<br />
“birthday”,  2.48 thousand<br />
“currentProject”, found 648<br />
“depiction”,  696.31 thousand<br />
“depicts”,  617.16 thousand<br />
“dnaChecksum”, found 65<br />
“family_name”,  2.46 thousand<br />
“firstName”,  4.2 thousand<br />
“fundedBy”, found 237<br />
“geekcode”, found 107<br />
“gender”,  15.8 thousand<br />
“givenname”,  24.17 thousand<br />
“holdsAccount”,  9.88 thousand<br />
“homepage”,  1.22 million<br />
“icqChatID”,  22.8 thousand<br />
“img”,  684.38 thousand<br />
“interest”,  64.77 thousand<br />
“isPrimaryTopicOf”,  1.54 million<br />
“jabberID”,  2.98 thousand<br />
“knows”,  1.08 million<br />
“logo”, found 374<br />
“made”,  1.97 million<br />
“maker”,  1.97 million<br />
“mbox”,  3.7 thousand<br />
“mbox_sha1sum”,  43.9 thousand<br />
“member”,  5.53 thousand<br />
“membershipClass”, found 58<br />
“msnChatID”,  7.68 thousand<br />
“myersBriggs”, found 154<br />
“name”,  1.77 million<br />
“nick”,  96.7 thousand<br />
“openid”,  80.24 thousand<br />
“page”,  5.84 million<br />
“pastProject”, found 179<br />
“phone”, found 999<br />
“plan”, found 139<br />
“primaryTopic”,  278.11 thousand<br />
“publications”, found 202<br />
“schoolHomepage”, found 644<br />
“sha1”, found 60<br />
“surname”,  25.32 thousand<br />
“theme”, found 282<br />
“thumbnail”,  2.51 thousand<br />
“tipjar”, found 73<br />
“title”,  2.02 thousand<br />
“topic”,  3.13 million<br />
“topic_interest”, found 90<br />
“weblog”,  300.06 thousand<br />
“workInfoHomepage”, found 505<br />
“workplaceHomepage”,  1.68 thousand<br />
“yahooChatID”,  6.72 thousand</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/libbymiller.wordpress.com/163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/libbymiller.wordpress.com/163/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=planb.nicecupoftea.org&#038;blog=7954761&#038;post=163&#038;subd=libbymiller&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://planb.nicecupoftea.org/2009/09/08/163/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00159ba0642f103407f7a3f4d44da772?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">libbymiller</media:title>
		</media:content>
	</item>
		<item>
		<title>Displaying Guardian book reviews for quick buying on Amazon</title>
		<link>http://planb.nicecupoftea.org/2009/06/28/displaying-guardian-book-reviews-for-quick-buying-on-amazon/</link>
		<comments>http://planb.nicecupoftea.org/2009/06/28/displaying-guardian-book-reviews-for-quick-buying-on-amazon/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 22:22:54 +0000</pubDate>
		<dc:creator>libbymiller</dc:creator>
				<category><![CDATA[books]]></category>

		<guid isPermaLink="false">http://planb.nicecupoftea.org/?p=144</guid>
		<description><![CDATA[I read the Saturday Guardian every week, and quite often buy a bunch of books reviewed in it. But equally, I don't buy quite a lot of them as they're only available in expensive and bulky hardback (plus I resent being market segmented like that, sorry). The Guardian's reviews are very good but they only really review hardbacks in any depth or breadth, so it's hit and miss whether I actually get to read any of them by the time they get to paperback. I just forget. I bet a lot of people do this. <a href="http://planb.nicecupoftea.org/2009/06/28/displaying-guardian-book-reviews-for-quick-buying-on-amazon/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=planb.nicecupoftea.org&#038;blog=7954761&#038;post=144&#038;subd=libbymiller&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I read the <a href="http://www.guardian.co.uk/theguardian/2009/jun/27/guardianreview">Saturday Guardian</a> every week, and quite often buy a bunch of books reviewed in it. But equally, I don&#8217;t buy quite a lot of them as they&#8217;re only available in expensive and bulky hardback (plus I resent being market segmented like that, sorry). The Guardian&#8217;s reviews are very good but they only really review hardbacks in any depth or breadth, so it&#8217;s hit and miss whether I actually get to read any of them by the time they get to paperback. I just forget. I bet a lot of people do this.</p>
<p>Anyway, a couple of months ago I realised there was a <a href="http://www.guardian.co.uk/open-platform">Guardian content API</a> as well as a data API. I applied for a developer key and, to my surprise, got one (the docs said they were giving out very few). This weekend I finally got around to having a play with it. It&#8217;s pretty neat. I&#8217;ve not explored it very thoroughly &#8211; I&#8217;m sure people can think of much more profound applications to make &#8211; but for book reviews there is lots of interesting data, and it&#8217;s available in JSON and XML. </p>
<p>My initial plan was to programmatically create an Amazon list &#8211; but <a href="http://docs.amazonwebservices.com/AWSEcommerceService/2005-10-05/ApiReference/ListOperationsListArticle.html">this isn&#8217;t possible</a> using the <a href="http://docs.amazonwebservices.com/AWSEcommerceService/2005-10-05/">Amazon ECS API</a>. However it is possible to <a href="http://docs.amazonwebservices.com/AWSEcommerceService/2005-10-05/ApiReference/ItemSearchOperation.html">search</a> (on books, title, and authors) and get XML back, including a link to the Amazon page that describes it. I made a very simple page that does a request for book reviews with the appropriate date, and then for each result returned, identify the author and title and do an Amazon lookup to get the URL (I just pick the first one returned &#8211; I&#8217;m feeling lucky). It&#8217;s not as covenient as I&#8217;d hoped, but it does make it that tiny bit easier to</p>
<ul>
<li>Buy things from the list straight away</li>
<li>Put things that are only available in hardback into my wishlist so I don&#8217;t forget about them</li>
</ul>
<p>There are a couple of issues:</p>
<ul>
<li>The title and author aren&#8217;t available as separate fields in the Guardian API. Usually the linktext is very formulaic and the information can be parsed out of that, but sometimes there are non-standard items and these fail</li>
<li>Characters with accents are returned as HTML entities so those need to be swapped back to characters in order to do the Amazon search</li>
<li>There&#8217;s no data about whether the book is in paperback or not, annoyingly. Amazon seems to mostly return the paperback version first if available, but maybe this is just good luck, and it probably needs more thought</li>
</ul>
<p>The <a href="http://swordfish.rdfweb.org/discovery/2009/06/guardianReviews/">result</a> isn&#8217;t too bad though and maybe I&#8217;ll buy a few more books. The Ruby code is <a href="http://swordfish.rdfweb.org/discovery/2009/06/guardianReviews/getGuardianReviewsPublic.rb">here</a> &#8211; you&#8217;ll need your own API keys for the <a href="http://guardian.mashery.com/">Guardian</a> and for <a href="http://aws.amazon.com/">Amazon</a> though (they are both free and you can just get an Amazon one if you have an account with them)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/libbymiller.wordpress.com/144/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/libbymiller.wordpress.com/144/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=planb.nicecupoftea.org&#038;blog=7954761&#038;post=144&#038;subd=libbymiller&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://planb.nicecupoftea.org/2009/06/28/displaying-guardian-book-reviews-for-quick-buying-on-amazon/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00159ba0642f103407f7a3f4d44da772?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">libbymiller</media:title>
		</media:content>
	</item>
		<item>
		<title>Generating specs from RDFS / OWL docs</title>
		<link>http://planb.nicecupoftea.org/2009/06/06/generating-specs-from-rdfs-owl-docs/</link>
		<comments>http://planb.nicecupoftea.org/2009/06/06/generating-specs-from-rdfs-owl-docs/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 10:13:12 +0000</pubDate>
		<dc:creator>libbymiller</dc:creator>
				<category><![CDATA[foaf]]></category>
		<category><![CDATA[rdf]]></category>

		<guid isPermaLink="false">http://planb.nicecupoftea.org/?p=136</guid>
		<description><![CDATA[I&#8217;ve been hacking away at danbri&#8217;s version of specgen so we can rev the foaf spec. The idea is that you take an RDFS / OWL schema and generate some human-readable HTML from it, by taking the classes and properties &#8230; <a href="http://planb.nicecupoftea.org/2009/06/06/generating-specs-from-rdfs-owl-docs/">Continue reading <span class="meta-nav">&#8594;</span></a><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=planb.nicecupoftea.org&#038;blog=7954761&#038;post=136&#038;subd=libbymiller&#038;ref=&#038;feed=1" width="1" height="1" />]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been hacking away at danbri&#8217;s version of specgen so we can rev the foaf spec. The idea is that you take an RDFS / OWL schema and generate some human-readable HTML from it, by taking the  classes and properties and writing out their basic constituents. Optionally you can add some introductory text in a template, plus some individual bits of text for each property and class, eventually in different languages too.</p>
<p>I slapped in some RDFa yesterday because we needed a replacement for the ugly addition of RDF directly into the html, which makes it invalid. I realise some people may think this is back to front, but the foaf spec&#8217;s &#8216;original&#8217; format has always been RDFS/OWL so it makes sense for us. I&#8217;m not actually sure we need two RDF versions (as there is alternate pointing to RDFS/OWL version from the HTML) but heck why not, and danbri&#8217;s <a href="http://lists.foaf-project.org/pipermail/foaf-dev/2009-June/009602.html">consulting the community</a> so there&#8217;s probably an argument I&#8217;ve missed.</p>
<p>There are several specgens available and at some point it might be nice to rationalise, or maybe go for functional equivalence. These are probably better in some senses than the one I&#8217;ve been working on, especially as I&#8217;m new to Python.</p>
<p>The ones I&#8217;ve found:</p>
<ul>
<li><a href="http://sw.deri.org/svn/sw/2005/08/sioc/ontology/spec/specgen4.py">SIOC&#8217;s specgen</a>, a rev from danbri&#8217;s original one (which was itself based on something Chris Schmidt did, I think) &#8211; requires Redland</li>
<li>
<a href="http://forge.morfeo-project.org/wiki_en/index.php/SpecGen">Morfeo specgen</a>, a rev from the SIOC one, again requires Redland</li>
<li>
<a href="http://svn.foaf-project.org/foaftown/specgen/">Foaf specgen</a> &#8211; requires RDFlib
       </li>
<li>
<a href="http://github.com/metade/ldontospec/tree/master">Patrick Sinclair&#8217;s ldontospec</a> which uses Rena (Ruby)
        </li>
</ul>
<p>I think the two things that unite the first three is that they are (a) self-described hacks (b) in python. The Foaf one uses <a href="http://www.rdflib.net/">RDFlib</a> rather than Redland because danbri was having trouble with Redland installation on the Mac I believe.</p>
<p>Next things I&#8217;d like to look at are </p>
<ul>
<li>
Generating specs from sample data (maybe someone&#8217;s done this already? It wouldn&#8217;t be complete but could be a start)
</li>
<li>
Defining <a href="http://dublincore.org/documents/singapore-framework/">application profiles</a> or <a href="http://lists.w3.org/Archives/Public/semantic-web/2009May/0073.html">Argots</a> and using them to generate, say, useful Sparql queries
</li>
<li>Pictures!
 </li>
</ul>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/libbymiller.wordpress.com/136/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/libbymiller.wordpress.com/136/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=planb.nicecupoftea.org&#038;blog=7954761&#038;post=136&#038;subd=libbymiller&#038;ref=&#038;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://planb.nicecupoftea.org/2009/06/06/generating-specs-from-rdfs-owl-docs/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/00159ba0642f103407f7a3f4d44da772?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">libbymiller</media:title>
		</media:content>
	</item>
	</channel>
</rss>
