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

<channel>
	<title>Gary Bishop</title>
	<atom:link href="http://wwwx.cs.unc.edu/~gb/wp/feed/" rel="self" type="application/rss+xml" />
	<link>http://wwwx.cs.unc.edu/~gb/wp</link>
	<description>Geeks making the world a bit better</description>
	<lastBuildDate>Tue, 09 Feb 2010 20:55:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Connecting a Dojo Data Grid to a JsonRestStore</title>
		<link>http://wwwx.cs.unc.edu/~gb/wp/blog/2010/01/31/connecting-a-dojo-data-grid-to-a-jsonreststore/</link>
		<comments>http://wwwx.cs.unc.edu/~gb/wp/blog/2010/01/31/connecting-a-dojo-data-grid-to-a-jsonreststore/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 20:53:35 +0000</pubDate>
		<dc:creator>gb</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tornado]]></category>

		<guid isPermaLink="false">http://wwwx.cs.unc.edu/~gb/wp/?p=617</guid>
		<description><![CDATA[I looked high and low and couldn&#8217;t find a working example of connecting a dojox.grid.DataGrid to a dojox.data.JsonRestStore so I puzzled out parts of it myself. This code probably has errors and omissions but it seems to work for me with dojo 1.4.1. 
I would appreciate any corrections or pointers to other examples from those [...]]]></description>
			<content:encoded><![CDATA[<p>I looked high and low and couldn&#8217;t find a working example of connecting a <a href="http://docs.dojocampus.org/dojox/grid/DataGrid">dojox.grid.DataGrid</a> to a <a href="http://docs.dojocampus.org/dojox/data/JsonRestStore">dojox.data.JsonRestStore</a> so I puzzled out parts of it myself. This code probably has errors and omissions but it seems to work for me with dojo 1.4.1. </p>
<p>I would appreciate any corrections or pointers to other examples from those of you who know better. I haven&#8217;t included any error checking and the references to items by key break down after deletions because of the simple minded implementation of the &#8220;database&#8221;.<br />
<span id="more-617"></span><br />
I wrote the little server using <a href="http://www.tornadoweb.org/">tornado</a> but I&#8217;m not using any special features of that package. </p>
<pre>
import tornado.httpserver
import tornado.ioloop
import tornado.web
import os
import json
import re
import random
import string

# fake up some data to supply
choices = 'foo bar baz fee faa boo'.split()
data = [ { 'id': i,
           'label': random.choice(choices),
          }
         for i in range(100) ]
nextIndex = len(data)

# return a page to kick things off
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("template.html", title="My title")

# handle requests for data
class DataHandler(tornado.web.RequestHandler):
    def get(self, id):
        '''Handle requests for items and queries'''
        if id:
            # request for a single item, how to generate these from JS?
            # should this return an array?
            s = json.dumps(data[int(id)])
            self.set_header('Content-length', len(s))
            self.set_header('Content-type', 'application/json')
            self.write(s)
            return

        # check for a sorting request
        s = re.compile(r'sort\(([+-])(\w+)\)').search(self.request.query)
        if s:
            col = s.group(2)
            dir = s.group(1)
            result = sorted(data, key=lambda item: item[col], reverse=dir=='-')
        else:
            result = data

        # check for a query
        for key,val in self.request.arguments.iteritems():
            q = val[0].replace('*', '.*').replace('?', '.?')
            result = [ item for item in result if re.match(q, item.get(key,'')) ]

        # see how much we are to send
        r = re.compile(r'items=(\d+)-(\d+)').match(self.request.headers.get('Range', ''))
        if r:
            start = int(r.group(1))
            stop = int(r.group(2))
            result = result[start:stop+1]
        else:
            start = 0
            stop = len(result)

        # send the result
        self.set_header('Content-range', 'items %d-%d/%d' % (start,stop,len(data)))
        s = json.dumps(result)
        self.set_header('Content-length', len(s))
        self.set_header('Content-type', 'application/json')
        self.write(s)

    def put(self, id):
        '''update an item after an edit, no response?'''
        item = json.loads(self.request.body)
        data[int(id)] = item

    def post(self, id):
        '''Create a new item and return the single item not an array'''
        global nextIndex
        item = json.loads(self.request.body)
        id = nextIndex
        nextIndex += 1
        item['id'] = id
        data.append(item)
        self.set_header('Location', '/data/%d' % id)
        s = json.dumps(item)
        self.set_header('Content-length', len(s))
        self.set_header('Content-type', 'application/json')
        self.write(s)

    def delete(self, id):
        '''Delete an item, what should I return?'''
        del data[int(id)];

settings = {
    "static_path": os.path.join(os.path.dirname(__file__), "static"),
}
application = tornado.web.Application([
    (r"/", MainHandler),
    (r"/data/(\d*)", DataHandler),
], **settings)

if __name__ == "__main__":
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
</pre>
<p>And here is the page template.html that loads up the test.</p>
<pre>

&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;{{ title }}&lt;/title&gt;

  &lt;link rel="stylesheet" type="text/css" href=
  "/static/dojo/resources/dojo.css"/&gt;
  &lt;link rel="stylesheet" type="text/css" href=
  "/static/dijit/themes/tundra/tundra.css"/&gt;
  &lt;link rel="stylesheet" type="text/css" href=
  "/static/dojox/grid/resources/Grid.css"/&gt;
  &lt;link rel="stylesheet" type="text/css" href=
  "/static/dojox/grid/resources/tundraGrid.css"/&gt;

  &lt;style type="text/css"&gt;
    #gridNode {
       width: 200px;
       height: 200px;
    }
  &lt;/style&gt;

  &lt;script type="text/javascript"
          src="/static/dojo/dojo.js"
          djConfig="parseOnLoad:true"&gt;
  &lt;/script&gt;

  &lt;script type="text/javascript"&gt;
    dojo.require("dojox.data.JsonRestStore");
    dojo.require("dojox.grid.DataGrid");
    dojo.require("dojo.parser");
    dojo.require("dijit.form.Button");
  &lt;/script&gt;

  &lt;script type="text/javascript"&gt;
    function main() {
      console.log('main');

      gridStore = new dojox.data.JsonRestStore({target:"/data/", idAttribute:"id" });
      gridLayout = [
       { name: 'Label', field: 'label', width: "50%", editable: true },
       { name: 'ID', field: 'id', width: "50%" }];

      grid = new dojox.grid.DataGrid({
         store: gridStore,
         structure: gridLayout
      }, "gridNode");
      grid.startup();
      dojo.connect(grid, 'onApplyEdit', null, function(i){ gridStore.save();});
      function queryOne() {
        console.debug('fetch returns', gridStore.fetch({query:{label:'f*'}}));
      }
      queryButton = new dijit.form.Button({label:"Query", onClick: queryOne }, 'query');
      function addOne() {
        var item = gridStore.newItem();
        item.label = 'newone';
        gridStore.save();
      }
      addButton = new dijit.form.Button({label:"Add", onClick: addOne }, 'add');
      function deleteSome() {
        var items = grid.selection.getSelected();
        if(items.length) {
          dojo.forEach(items, function(item) {
            if(item != null) {
              gridStore.deleteItem(item);
            }
          });
          gridStore.save();
        }
      }
      deleteButton = new dijit.form.Button({label:"Delete", onClick: deleteSome }, 'delete');
      console.log('main end');
    }
    dojo.addOnLoad(main);
  &lt;/script&gt;
&lt;/head&gt;
&lt;body class="tundra"&gt;
  &lt;div id="gridNode"&gt;&lt;/div&gt;
  &lt;button id="add"&gt;&lt;/button&gt;
  &lt;button id="delete" type="button"&gt;&lt;/button&gt;
  &lt;button id="query" type="button"&gt;&lt;/button&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://wwwx.cs.unc.edu/~gb/wp/blog/2010/01/31/connecting-a-dojo-data-grid-to-a-jsonreststore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maze Day 2010</title>
		<link>http://wwwx.cs.unc.edu/~gb/wp/blog/2010/01/22/maze-day-2010/</link>
		<comments>http://wwwx.cs.unc.edu/~gb/wp/blog/2010/01/22/maze-day-2010/#comments</comments>
		<pubDate>Fri, 22 Jan 2010 15:45:58 +0000</pubDate>
		<dc:creator>gb</dc:creator>
				<category><![CDATA[Blind]]></category>
		<category><![CDATA[Enabling Technology]]></category>

		<guid isPermaLink="false">http://wwwx.cs.unc.edu/~gb/wp/?p=612</guid>
		<description><![CDATA[Maze Day is for visually impaired and blind students in grades K-12, their parents and teachers. Your students will enjoy fun and educational computer applications developed especially for them. UNC students will learn how well their accessible applications work with real users. And everyone will have a good time!

We plan to have a wide variety [...]]]></description>
			<content:encoded><![CDATA[<p>Maze Day is for visually impaired and blind students in grades K-12, their parents and teachers. Your students will enjoy fun and educational computer applications developed especially for them. UNC students will learn how well their accessible applications work with real users. And everyone will have a good time!</p>
<p><span id="more-612"></span><br />
We plan to have a wide variety of accessible fun, educational, and exercise activities including: (preliminary)</p>
<ul>
<li>Many new prototypes for games</li>
<li>Hark the Sound</li>
<li>Braille Twister</li>
<li>Sonic Zoom</li>
<li>Descent into Madness</li>
<li>Last Crusade</li>
<li>Making music on the DDR pad.</li>
<li>Two player Simon combined with an upper body workout.</li>
<li>Accessible Guitar Hero Freeplay.</li>
<li>Life size and computer mazes.</li>
<li>Move to the Music: An accessible version of Dance Dance Revolution for a good exercise workout to music.</li>
<li>Sweet Beat: an edible drum sequencer.</li>
<li>SamiSays: a program for recording stories with sound effects.</li>
<li>And there&#8217;s always a little bit more&#8230; but you&#8217;ll have to attend to see what that is.</li>
</ul>
<p>Lunch will be provided. <strong>Free!</strong></p>
<p>To register send email to <a href="mailto:MazeDay@cs.unc.edu?subject=Maze%20Day%20Registration">MazeDay@cs.unc.edu</a>. Include the number of elementary, middle, and high school students you will be bringing and the number of adults. Let us know if you&#8217;ll need parking for a bus or van. </p>
<p>Date: Thursday April 29, 2010<br />
Time: 9am until 2pm<br />
Location: Sitterson Hall on the UNC Chapel Hill campus (<a href="http://www.cs.unc.edu/General/Directions/">click here for directions</a>)</p>
<p>Also, please complete the following forms and bring them with you:</p>
<ul>
<li><a href="http://wwwx.cs.unc.edu/~gb/wp/wp-content/uploads/2007/10/photoconsent.pdf">Photo Consent</a> &#8211; We will only include your children in photographs of the event with your permission. We also have the photo consent form in Spanish.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://wwwx.cs.unc.edu/~gb/wp/blog/2010/01/22/maze-day-2010/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Does making music have to be so hard?</title>
		<link>http://wwwx.cs.unc.edu/~gb/wp/blog/2010/01/04/does-making-music-have-to-be-so-hard/</link>
		<comments>http://wwwx.cs.unc.edu/~gb/wp/blog/2010/01/04/does-making-music-have-to-be-so-hard/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 23:14:32 +0000</pubDate>
		<dc:creator>gb</dc:creator>
				<category><![CDATA[Enabling Technology]]></category>
		<category><![CDATA[Ideas]]></category>

		<guid isPermaLink="false">http://wwwx.cs.unc.edu/~gb/wp/?p=597</guid>
		<description><![CDATA[I&#8217;ve been thinking about the trade off between difficulty and choice (or freedom) in making music. I cooked up this simple graph to illustrate the idea.

I&#8217;ve no idea what the units would be on this and the scales probably aren&#8217;t linear either.
The point is, listening to music on the radio (in the lower left) is [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been thinking about the trade off between difficulty and choice (or freedom) in making music. I cooked up this simple graph to illustrate the idea.</p>
<p><img src="http://wwwx.cs.unc.edu/~gb/wp/wp-content/uploads/2010/01/MusicGraph.png" alt="MusicGraph" title="MusicGraph" width="500" height="375" class="alignnone size-full wp-image-603" /></p>
<p>I&#8217;ve no idea what the units would be on this and the scales probably aren&#8217;t linear either.</p>
<p>The point is, listening to music on the radio (in the lower left) is really easy but you have almost no control of it besides off/on, and the station. Playing the piano is in the upper right because it is really hard, requiring years of instruction and practice, but you can choose whatever notes you want. Playing music on your mp3 player is a bit more difficult than listening to the radio and you get a bit more control. <a href="http://en.wikipedia.org/wiki/Guitar_Hero">Guitar Hero</a> makes you feel involved in the music creation but really you only have a tiny bit more control than playing an mp3. You control whether or not a note plays. <a href="http://en.wikipedia.org/wiki/Wii_music">Wii Music</a> gives you a bit of control of the timing and, if you double time, will insert flourishes but you have no control over the notes.</p>
<p>I&#8217;m interested in the space to the right of Guitar Hero and Wii Music on that graph. Expressive but easy. I want to give players, especially kids with disabilities, access to making their own music.</p>
<p><a href="http://www.ted.com/index.php/talks/view/id/246">Releasing the music in your head</a> is inspiring. I don&#8217;t know how it works but he appears to be controlling the playing of the large music &#8220;units&#8221; using gestures.</p>
<p>I&#8217;ll try to write soon about some related ideas.</p>
<ul>
<li>Spoken music input</li>
<li>Reactive music</li>
<li>Use the Guitar Hero controller for timing and whether the note goes up, down, or stays the same but let the system choose the note.</li>
<li>An accessible version of <a href="http://www.jamstudio.com/Studio/index.htm">JamStudio</a>.</li>
</ul>
<p>I&#8217;d love to find a musically minded collaborator. I think I know enough about signal processing and I&#8217;m improving my machine learning skills but I don&#8217;t know enough about music.</p>
]]></content:encoded>
			<wfw:commentRss>http://wwwx.cs.unc.edu/~gb/wp/blog/2010/01/04/does-making-music-have-to-be-so-hard/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SWAY: Switch Accessible YouTube</title>
		<link>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/12/23/sway-switch-accessible-youtube/</link>
		<comments>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/12/23/sway-switch-accessible-youtube/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 14:13:26 +0000</pubDate>
		<dc:creator>gb</dc:creator>
				<category><![CDATA[Enabling Technology]]></category>
		<category><![CDATA[Motor impaired]]></category>

		<guid isPermaLink="false">http://wwwx.cs.unc.edu/~gb/wp/?p=581</guid>
		<description><![CDATA[My friend and source of ideas for interesting projects, Karen Erickson, suggested that kids love watching YouTube videos but they aren&#8217;t readily accessible to switch users. Couldn&#8217;t we make an accessible version, she asked?
I presented this opportunity to Greg K., my latest intern from the NC School of Science and Math, a residential magnet high-school [...]]]></description>
			<content:encoded><![CDATA[<p>My friend and source of ideas for interesting projects, Karen Erickson, suggested that kids love watching <a href="http://www.youtube.com/">YouTube</a> videos but they aren&#8217;t readily accessible to switch users. Couldn&#8217;t we make an accessible version, she asked?</p>
<p>I presented this opportunity to Greg K., my latest intern from the <a href="http://www.ncssm.edu/">NC School of Science and Math</a>, a residential magnet high-school for students from around the state with aptitude and interest in science and math. In only a few weeks, Greg taught himself Javascript and the <a href="http://code.google.com/apis/youtube/overview.html">YouTube API</a> and has a working prototype. </p>
<p>Check out his work at its temporary home at <a href="http://gb.cs.unc.edu/sway/">http://gb.cs.unc.edu/sway/</a>. We&#8217;ll move it to are more permanent home when it gets a little further along in development.</p>
<p>This is just a prototype, and we are eager to get your <a href="mailto:sway-comments@cs.unc.edu">feedback</a> on what other features it needs. Right now you can choose and play videos from a YouTube playlist entered into a form.</p>
<p>Features we hope to support soon include:</p>
<ul>
<li>Browsing YouTube categories and related videos.</li>
<li>Creating your own playlist</li>
<li>Emailing video links to friends</li>
</ul>
<p>What else should we include?</p>
]]></content:encoded>
			<wfw:commentRss>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/12/23/sway-switch-accessible-youtube/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>30 years of failure: the username/password combination</title>
		<link>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/10/13/30-years-of-failure-the-usernamepassword-combination/</link>
		<comments>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/10/13/30-years-of-failure-the-usernamepassword-combination/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 00:31:31 +0000</pubDate>
		<dc:creator>gb</dc:creator>
				<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://wwwx.cs.unc.edu/~gb/wp/?p=578</guid>
		<description><![CDATA[Interesting read about what we have known all along about passwords.
In a lot of ways, the results shouldn&#8217;t surprise anyone, given what we know about the operation of human memory: if you give users a task that&#8217;s nearly impossible, they won&#8217;t do it.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://arstechnica.com/business/news/2009/10/30-years-of-failure-the-user-namepassword-combination.ars">Interesting read</a> about what we have known all along about passwords.</p>
<blockquote><p>In a lot of ways, the results shouldn&#8217;t surprise anyone, given what we know about the operation of human memory: if you give users a task that&#8217;s nearly impossible, they won&#8217;t do it.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/10/13/30-years-of-failure-the-usernamepassword-combination/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entertaining introduction to encryption</title>
		<link>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/10/01/entertaining-introduction-to-encryption/</link>
		<comments>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/10/01/entertaining-introduction-to-encryption/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 15:05:38 +0000</pubDate>
		<dc:creator>gb</dc:creator>
				<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://wwwx.cs.unc.edu/~gb/wp/?p=575</guid>
		<description><![CDATA[A Stick Figure Guide to the Advanced Encryption Standard (AES) 
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.moserware.com/2009/09/stick-figure-guide-to-advanced.html">A Stick Figure Guide to the Advanced Encryption Standard (AES) </a></p>
]]></content:encoded>
			<wfw:commentRss>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/10/01/entertaining-introduction-to-encryption/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Disable balloon tips in Thunderbird</title>
		<link>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/09/30/disable-balloon-tips-in-thunderbird/</link>
		<comments>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/09/30/disable-balloon-tips-in-thunderbird/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 12:05:25 +0000</pubDate>
		<dc:creator>gb</dc:creator>
				<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://wwwx.cs.unc.edu/~gb/wp/?p=573</guid>
		<description><![CDATA[I&#8217;ve started using Lightning for my calendar and I really like it except for the stupid balloon tips that pop up and get stuck every time my mouse passes over the Thunderbird window, even when it is below another window. I turned them off with Edit->Preferences->Advanced Tab->Config Editor&#8230; and setting browser.chrome.toolbar_tips to false. Much better [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve started using Lightning for my calendar and I really like it except for the stupid balloon tips that pop up and get stuck every time my mouse passes over the Thunderbird window, even when it is below another window. I turned them off with Edit->Preferences->Advanced Tab->Config Editor&#8230; and setting browser.chrome.toolbar_tips to false. Much better now.</p>
]]></content:encoded>
			<wfw:commentRss>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/09/30/disable-balloon-tips-in-thunderbird/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Why I don&#8217;t develop for the iPhone/iPod Touch</title>
		<link>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/07/29/why-i-dont-develop-for-the-iphoneipod-touch/</link>
		<comments>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/07/29/why-i-dont-develop-for-the-iphoneipod-touch/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 20:36:10 +0000</pubDate>
		<dc:creator>gb</dc:creator>
				<category><![CDATA[Enabling Technology]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://wwwx.cs.unc.edu/~gb/wp/?p=564</guid>
		<description><![CDATA[The iPhone and iPod Touch are very interesting platforms for enabling technology. Touch, accelerometers, portability, radio, coolness; they&#8217;ve got it all. 
But the rules of program distribution are so ridiculous that I can&#8217;t imagine playing by them. I want to give my apps away. And I want to do it without some faceless technician&#8217;s approval. [...]]]></description>
			<content:encoded><![CDATA[<p>The iPhone and iPod Touch are very interesting platforms for enabling technology. Touch, accelerometers, portability, radio, coolness; they&#8217;ve got it all. </p>
<p>But the rules of program distribution are so ridiculous that I can&#8217;t imagine playing by them. I want to give my apps away. And I want to do it without some faceless technician&#8217;s approval. </p>
<p>After you&#8217;ve done the work to develop your App they can reject it without giving any reason.</p>
<p>This recent post from <a href="http://www.riverturn.com/blog/?p=455">Riverturn</a> illustrates the problem though I&#8217;ve heard of many more cases like this.</p>
]]></content:encoded>
			<wfw:commentRss>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/07/29/why-i-dont-develop-for-the-iphoneipod-touch/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Project Ideas for Wiimote Enabled Firefox</title>
		<link>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/07/24/project-ideas-for-wiimote-enabled-firefox/</link>
		<comments>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/07/24/project-ideas-for-wiimote-enabled-firefox/#comments</comments>
		<pubDate>Sat, 25 Jul 2009 01:58:42 +0000</pubDate>
		<dc:creator>gb</dc:creator>
				<category><![CDATA[Enabling Technology]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Wiimote]]></category>

		<guid isPermaLink="false">http://wwwx.cs.unc.edu/~gb/wp/?p=561</guid>
		<description><![CDATA[I&#8217;m thinking of things we can do with the nearly ready Wiimote (and Balance Board) capability in our Outfox extension. We can use the accelerometers, IR camera, buttons, and rumble. I&#8217;m going to list game/activity ideas so I can recruit some help.


Duck Hunt: use the Wiimote as the gun.
Spelling of the Dead: Spell the word [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m thinking of things we can do with the nearly ready Wiimote (and Balance Board) capability in our Outfox extension. We can use the accelerometers, IR camera, buttons, and rumble. I&#8217;m going to list game/activity ideas so I can recruit some help.</p>
<p><span id="more-561"></span></p>
<ol>
<li>Duck Hunt: use the Wiimote as the gun.</li>
<li>Spelling of the Dead: Spell the word by blasting zombies that are labelled with letters.</li>
<li>Use the D-pad in Pete&#8217;s Space! game</li>
<li>Fly Swat: Kill a fly that you can hear and see.</li>
<li>Read Along: Shake the wiimote on each word as you read along silently. Maybe shake it harder on the key words. Shows that the user is reading.</li>
<li>Johnny Chung Lee style head or hand tracker for cursor control or on-screen keyboard.</li>
<li>Make a character (car, pony, model, etc.) on the screen move by moving the wiimote to encourage a child doing physical therapy.</li>
<li>Round up animals in sound and/or visuals by leaning on a rocking horse or exercise ball like Rockin&#8217; SafaWii.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/07/24/project-ideas-for-wiimote-enabled-firefox/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Crawl Space Humidity</title>
		<link>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/07/04/crawlspace-humidity/</link>
		<comments>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/07/04/crawlspace-humidity/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 20:38:25 +0000</pubDate>
		<dc:creator>gb</dc:creator>
				<category><![CDATA[Home]]></category>

		<guid isPermaLink="false">http://wwwx.cs.unc.edu/~gb/wp/?p=535</guid>
		<description><![CDATA[I&#8217;ve been concerned about the humidity in my crawl space since we moved in. In fact, I wondered about it at our former house but never did anything about it. At the current house we&#8217;ve had some problems with water getting under the house in heavy rains but I think I&#8217;ve got that whipped. 
I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been concerned about the humidity in my crawl space since we moved in. In fact, I wondered about it at our former house but never did anything about it. At the current house we&#8217;ve had some problems with water getting under the house in heavy rains but I think I&#8217;ve got that whipped. </p>
<p>I decided the first step was measuring the humidity under there so I bought a <a href="http://www.amazon.com/gp/product/B000EX83RU/ref=ox_ya_oh_product">Honeywell TM005X Wireless Thermo-Hygrometer</a> and put the remote unit under the house. I bought it back in January 2009 and boy was I shocked. The humidity seldom got below 75% even in the winter! As the summer came on and the humidity rose to above 90% I decided I had to do something. It is so humid down there that water condenses on the cold water pipes and drips on the floor.</p>
<p>Completing the plastic covering on the floor (about 20% was uncovered) did nothing. So I went looking for solutions. I found the <a href="http://www.smartvent.net/crawlspacevent.htm">SmartVent Crawl Space ventilator</a> and after reading their <a href="http://www.smartvent.net/docs/crawlspacestudy.pdf">convincing argument that you can&#8217;t dry under your house with wet air</a>, I decided to purchase one of their vents. It cost me $315.</p>
<p>It arrived less than 1 week after I ordered it and I installed it the next weekend. I had never removed a crawl space vent before but it turned out to be a pretty easy job. Mine were installed with mortar which I broke out using a long chisel and a hammer. It took me approximately 1/2 hour to prepare the opening to receive the smart vent. The place I chose to install it had an electrical outlet nearby so I was set for power. I used clear caulk to seal around the opening.</p>
<p>I installed it on 20 June 2009. After 2 weeks my crawl space humidity is down to 77% from 92% on the day I installed it. I&#8217;ll make a table below to record occasional readings. It has been dry here since I installed it. That, no doubt, is part of the rapid improvement but since I&#8217;m not doing any sort of controlled experiment, I&#8217;m just going to report what I see.</p>
<p>The SmartVent appears to be well made and runs a clever algorithm. It has two muffin fans, a small circuit card, and a thermometer and humidistat positioned near the front grill. It uses these sensors with the fans off to sample the outside air. If the outside air temperature is above 42 degrees F, it runs one fan for about 15 minutes to pull crawl space air over the temperature and humidity sensor. It then compares the dew point of the outside air with the dew point of the crawl space air. If the dew point outside is lower both fans run to pull wetter crawl space air out so that it will be replaced (through leakage) by dryer outside air. If the outside air is wetter than the inside air, the unit waits. </p>
<p>My sporadic observation of its habits confirm that it is behaving as expected. I&#8217;ve seen it running continuously for the last few days while the outside dew point has been low but last week it ran much less because the outside air was very humid. </p>
<p>I&#8217;ll try to record some readings here so I can track how it does.</p>
<style type="text/css">
th,td { text-align: right; padding: 5px; }
table {margin-bottom: 1em; }
</style>
<table border="1">
<tr>
<th></th>
<th colspan="3" style="text-align:center;">Crawl Space</th>
<th style="text-align:center;">Outdoor</th>
</tr>
<tr>
<th>Date</th>
<th>Temp (F)</th>
<th>Humidity(%)</th>
<th>Dew Point(F)</th>
<th>Dew Point(F)</tr>
<tr>
<td>20 June 2009</td>
<td>68.5</td>
<td>92</td>
<td>66</td>
<td>72</td>
</tr>
<tr>
<td>4 July 2009</td>
<td>69.8</td>
<td>77</td>
<td>62</td>
<td>58</td>
</tr>
<tr>
<td>11 July 2009</td>
<td>69.8</td>
<td>81</td>
<td>64</td>
<td>64</td>
</tr>
<tr>
<td>19 July 2009</td>
<td>70.3</td>
<td>81</td>
<td>64</td>
<td>59</td>
</tr>
</table>
<p>Note: On 14 July 2009 my Honeywell wireless hygrometer died and I replace it with an Oregon Scientific RMR500A. The calibration was clearly different. I calibrated the new one using the damp salt method.</p>
<p>I expect it to become gradually harder for the SmartVent to improve the situation under the house because as it lowers the dew point, there will be fewer times when the outside dew point is lower. But, I hope and expect it to be better than it was.</p>
]]></content:encoded>
			<wfw:commentRss>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/07/04/crawlspace-humidity/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
