<?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 &#187; Programming</title>
	<atom:link href="http://wwwx.cs.unc.edu/~gb/wp/blog/category/programming/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>Wed, 14 Oct 2009 00:31:31 +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>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>CVtypes status</title>
		<link>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/02/25/cvtypes-status/</link>
		<comments>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/02/25/cvtypes-status/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 12:57:36 +0000</pubDate>
		<dc:creator>gb</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://wwwx.cs.unc.edu/~gb/wp/?p=454</guid>
		<description><![CDATA[I haven&#8217;t used CVtypes recently so it hasn&#8217;t gotten any of my (very limited) attention. I see that Minh-Tri Pham has forked a version that he is maintaining over at Google Code. I recommend folks use and support his version. Next time I need it, I&#8217;ll probably adopt his.
]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t used <a href="http://wwwx.cs.unc.edu/~gb/wp/blog/2007/02/04/python-opencv-wrapper-using-ctypes/">CVtypes</a> recently so it hasn&#8217;t gotten any of my (very limited) attention. I see that Minh-Tri Pham has forked a <a href="http://code.google.com/p/ctypes-opencv/">version</a> that he is maintaining over at Google Code. I recommend folks use and support his version. Next time I need it, I&#8217;ll probably adopt his.</p>
]]></content:encoded>
			<wfw:commentRss>http://wwwx.cs.unc.edu/~gb/wp/blog/2009/02/25/cvtypes-status/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash 10 ignores files served with Content-Disposition attachment</title>
		<link>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/10/21/flash-10-ignores-files-served-with-content-disposition-attachment/</link>
		<comments>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/10/21/flash-10-ignores-files-served-with-content-disposition-attachment/#comments</comments>
		<pubDate>Tue, 21 Oct 2008 19:01:13 +0000</pubDate>
		<dc:creator>gb</dc:creator>
				<category><![CDATA[Links]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://wwwx.cs.unc.edu/~gb/wp/?p=423</guid>
		<description><![CDATA[I got a report that Tar Heel Reader wasn&#8217;t speaking on some newer computers. Thankfully it also didn&#8217;t work on my Vista VM. I painfully tracked down the problem to the Content-Disposition: attachment header I had added to make debugging easier. After figuring out the problem I found this Adobe info describing the change.
]]></description>
			<content:encoded><![CDATA[<p>I got a report that <a href="http://tarheelreader.org">Tar Heel Reader</a> wasn&#8217;t speaking on some newer computers. Thankfully it also didn&#8217;t work on my Vista VM. I painfully tracked down the problem to the <code>Content-Disposition: attachment</code> header I had added to make debugging easier. After figuring out the problem I found this <a href="http://www.adobe.com/devnet/flashplayer/articles/fplayer10_security_changes_02.html#head32">Adobe info describing the change</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/10/21/flash-10-ignores-files-served-with-content-disposition-attachment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making pyibmtts work when ibmtts is installed in a non-standard place</title>
		<link>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/08/14/making-pyibmtts-work-when-ibmtts-is-installed-in-a-non-standard-place/</link>
		<comments>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/08/14/making-pyibmtts-work-when-ibmtts-is-installed-in-a-non-standard-place/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 15:46:03 +0000</pubDate>
		<dc:creator>gb</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://wwwx.cs.unc.edu/~gb/wp/?p=410</guid>
		<description><![CDATA[I needed to get pyibmtts working for the new Tar Heel Reader installation over at ibiblio.org. I couldn&#8217;t install ibmtts in the usual /opt place over there because I don&#8217;t have root access (and only I&#8217;m authorized to use it anyway). To make it work, I installed ibmtts in $HOME/opt and $HOME/var. And I hacked [...]]]></description>
			<content:encoded><![CDATA[<p>I needed to get pyibmtts working for the new Tar Heel Reader installation over at ibiblio.org. I couldn&#8217;t install ibmtts in the usual /opt place over there because I don&#8217;t have root access (and only I&#8217;m authorized to use it anyway). To make it work, I installed ibmtts in $HOME/opt and $HOME/var. And I hacked the paths in $HOME/var/IBM/ibmtts/cfg/eci.ini to point to the libraries. I modified Pete&#8217;s setup.py for pyibmtts to add $HOME to the search paths and one tricky bit. To help it find the shared libraries that are part of ibmtts I set the LD_RUN_PATH environment variable to point to the ibmtts lib folder. I understand from <a href="http://www.eyrie.org/~eagle/notes/rpath.html">this page</a> that setting this environment variable at compile time causes the search path to be encoded into the shared library. </p>
<p>Here is the area of setup.py that I modified:</p>
<pre>
LIBS = ['ibmeci']

HOME = os.environ['HOME']

os.environ['LD_RUN_PATH'] = os.path.join(HOME, 'opt/IBM/ibmtts/lib')

if sys.platform.startswith('linux'):
  INC_DIRS = [os.path.join('../'),
              os.path.join(HOME, 'opt/IBM/ibmtts', 'inc'),
              os.path.join(HOME, 'opt/IBM/ibmtts-devel', 'inc')]
  LIB_DIRS = [os.path.join('../'),
              os.path.join(HOME, 'opt/IBM/ibmtts', 'lib'),
              os.path.join(HOME, 'opt/IBM/ibmtts-devel', 'lib')]
elif sys.platform == 'win32':
</pre>
<p>I also had to link eci.ini into the folder with my python code in order to properly find it. I bet updateECI is supposed to fix that but I couldn&#8217;t figure out how to run it.</p>
]]></content:encoded>
			<wfw:commentRss>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/08/14/making-pyibmtts-work-when-ibmtts-is-installed-in-a-non-standard-place/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Outfox: speech, sound, and more for Firefox</title>
		<link>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/07/27/outfox-speech-sound-and-more-for-firefox/</link>
		<comments>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/07/27/outfox-speech-sound-and-more-for-firefox/#comments</comments>
		<pubDate>Sun, 27 Jul 2008 20:09:43 +0000</pubDate>
		<dc:creator>gb</dc:creator>
				<category><![CDATA[Enabling Technology]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://wwwx.cs.unc.edu/~gb/wp/?p=391</guid>
		<description><![CDATA[Quick net
Outfox is a Firefox extension that allows in-page JavaScript to access local platform services and devices such as text-to-speech synthesis, sound playback and game controllers. You can read all about it at its Google Code page and discuss it in its Google Group.
Motivation
In our continuing pursuit of the best platform for delivering accessible games [...]]]></description>
			<content:encoded><![CDATA[<h3>Quick net</h3>
<p><a href="https://addons.mozilla.org/en-US/firefox/addon/8283">Outfox</a> is a <a href="http://www.mozilla.com/en-US/firefox/">Firefox</a> extension that allows in-page JavaScript to access local platform services and devices such as text-to-speech synthesis, sound playback and game controllers. You can read all about it at its <a href="http://code.google.com/p/outfox/">Google Code page</a> and discuss it in its <a href="http://groups.google.com/group/outfox-discuss/topics">Google Group</a>.</p>
<h3>Motivation</h3>
<p>In our continuing pursuit of the best platform for delivering accessible games and tools to people with disabilities we are now focusing on Firefox to see what we can accomplish from inside the browser. Up until recently, we&#8217;ve used Python. Its a great language and we&#8217;ve delivered thousands of copies of our apps to people all over the world but I kept thinking we could do better. For example, the ability to author games in <a href="http://wwwx.cs.unc.edu/~gb/wp/research/hark-the-sound/">Hark the Sound</a> has enabled teachers to do things we never imagined but sharing games is so complicated that is almost never happens. In contrast, the exciting response we&#8217;ve seen to <a href="http://gb-cs.cs.unc.edu/TarHeelReader">Tar Heel Reader</a> with 419 books in 3 languages after just 10 weeks online has convinced me that browser-based apps can have a big place in our work.</p>
<p>Firefox is a nearly perfect platform; it runs everywhere we want to be and it is easy to program but it has a few deficiencies that limit what we can do. Many of our users are blind or visually impaired. For these kids, speech and sound are a must. Speech and sound are important for kids who can see as well. For example, many beginning readers benefit from having text read to them. Unfortunately, sound in the browser gets little respect. </p>
<p>We used <a href="http://www.schillmania.com/projects/soundmanager2/">SoundManager2</a> with a web-based text-to-speech server in Tar Heel Reader. It works well enough but the delays associated with fetching speech as mp3s over the web and the requirement to be online to get speech look bad in comparison locally hosted program.</p>
<h3>Outfox</h3>
<p>Outfox provides a simple programming interface to JavaScript running in the browser so it can access services on the computer that aren&#8217;t normally available. In this first release, we enable access to speech and multi-channel sound with callbacks into JavaScript at the beginning and ends of words and sounds. Soon we expect to extend it to include joysticks, DDR pads, and such. With access to these capabilities I believe we can implement browser-based versions of our most popular games such as <a href="http://wwwx.cs.unc.edu/~gb/wp/research/hark-the-sound/">Hark the Sound</a>, Sonic Zoom, and Descent into Madness. If things work as I hope, teachers will have access to hundreds of curriculum-related games and a simple way to write and share their own. I hope we&#8217;ll get cross-over between the amazing community behind Tar Heel Reader and the community of teachers of the visually impaired and orientation and mobility teachers who use our games for blind children. When we start seeing books about games and games about books, we&#8217;ll know that synergy is taking hold.</p>
<p>I&#8217;m excited about offering Firefox with speech and sound to my students to see what amazing things they&#8217;ll think of doing. How about self-voicing web pages and maps? How about books with interactive, switch-accessible games embedded?</p>
<p>This initial version is likely buggy on at least one of the three operating systems we&#8217;re supporting. Please give it a <a href="http://www.cs.unc.edu/Research/assist/outfox">try</a>. Or better yet, download the source, and help us make it better. </p>
<p>Also, help us get it out of the sandbox at Mozilla Addons by trying and commenting on it.</p>
]]></content:encoded>
			<wfw:commentRss>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/07/27/outfox-speech-sound-and-more-for-firefox/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>atool enables DDR pad or webcam input</title>
		<link>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/06/12/atool-enables-ddr-pad-or-webcam-input/</link>
		<comments>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/06/12/atool-enables-ddr-pad-or-webcam-input/#comments</comments>
		<pubDate>Thu, 12 Jun 2008 13:47:22 +0000</pubDate>
		<dc:creator>gb</dc:creator>
				<category><![CDATA[Blind]]></category>
		<category><![CDATA[Enabling Technology]]></category>
		<category><![CDATA[Motor impaired]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://wwwx.cs.unc.edu/~gb/wp/?p=386</guid>
		<description><![CDATA[Atool is an extension to our previous CamKeys project. Like CamKeys, atool allows keyboard input based on a cheap webcam. Atool adds DDR pads (or other game controller buttons) as an additional input and it allows playing recorded sounds on input events.

My teacher friends in the Progress Education Program over at Asheville wanted to experiment [...]]]></description>
			<content:encoded><![CDATA[<p>Atool is an extension to our previous <a href="http://wwwx.cs.unc.edu/~gb/wp/blog/2007/11/18/camkeys-is-a-simple-camera-based-alternative-keyboard/">CamKeys</a> project. Like CamKeys, atool allows keyboard input based on a cheap webcam. Atool adds DDR pads (or other game controller buttons) as an additional input and it allows playing recorded sounds on input events.<br />
<span id="more-386"></span><br />
My teacher friends in the Progress Education Program over at Asheville wanted to experiment with alternative computer interfaces in their classrooms for kids with multiple disabilities. I demonstrated MusicPad (a simple DDR pad driven sound player) and CamKeys to them. They were excited by the possibilities but daunted by editing files to control it all and depending on keyboard focus to get events to the right places. </p>
<p>So I hacked on CamKeys to add a GUI for configuring all sorts of events. I&#8217;ll include a few screen shots below. Now the teachers are recording their own speech and music sounds and hooking them to events on the DDR pad or camera.</p>
<p><a href='http://wwwx.cs.unc.edu/~gb/wp/wp-content/uploads/2008/06/screenshot-aac-tool.png'><img src="http://wwwx.cs.unc.edu/~gb/wp/wp-content/uploads/2008/06/screenshot-aac-tool-300x232.png" alt="atool main screen" title="screenshot-aac-tool" width="300" height="232" class="alignnone size-medium wp-image-387" /></a><a href='http://wwwx.cs.unc.edu/~gb/wp/wp-content/uploads/2008/06/screenshot-aac-tool-1.png'><img src="http://wwwx.cs.unc.edu/~gb/wp/wp-content/uploads/2008/06/screenshot-aac-tool-1-300x232.png" alt="atool create event dialog" title="screenshot-aac-tool-1" width="300" height="232" class="alignnone size-medium wp-image-388" /></a></p>
<p>The CamKeys roots of this project were funded by the Mozilla foundation.</p>
<p>The source is in CVS at <a href="http://uncassist.cvs.sourceforge.net/uncassist/atool/">sourceforge uncassist</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/06/12/atool-enables-ddr-pad-or-webcam-input/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Combining WordPress and Flickr to make accessible books for beginning readers</title>
		<link>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/06/03/combining-wordpress-and-flickr-to-make-accessible-books-for-beginning-readers/</link>
		<comments>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/06/03/combining-wordpress-and-flickr-to-make-accessible-books-for-beginning-readers/#comments</comments>
		<pubDate>Tue, 03 Jun 2008 17:03:16 +0000</pubDate>
		<dc:creator>gb</dc:creator>
				<category><![CDATA[Enabling Technology]]></category>
		<category><![CDATA[Literacy]]></category>
		<category><![CDATA[Motor impaired]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://wwwx.cs.unc.edu/~gb/wp/?p=377</guid>
		<description><![CDATA[Tar Heel Reader is a web site designed to help teachers make easy-to-read books for children with disabilities. It has a growing selection of books to read and a simple process for creating new books using pictures found on Flickr.


img.alignleft { margin: 0pt; padding: 0pt; }

These pages are from a typical book at the site.

My [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://tarheelreader.org/">Tar Heel Reader</a> is a web site designed to help teachers make easy-to-read books for children with disabilities. It has a growing selection of books to read and a simple process for creating new books using pictures found on <a href="http://www.flickr.com/">Flickr</a>.<br />
<span id="more-377"></span></p>
<style type="text/css">
img.alignleft { margin: 0pt; padding: 0pt; }
</style>
<p>These pages are from a typical <a href="http://tarheelreader.org/2008/05/21/my-birthday/">book</a> at the site.<br />
<a href='http://wwwx.cs.unc.edu/~gb/wp/wp-content/uploads/2008/06/05-page1fit.jpg'><img src="http://wwwx.cs.unc.edu/~gb/wp/wp-content/uploads/2008/06/05-page1fit-150x150.jpg" alt="At my birthday, I want balloons." title="At my birthday, I want balloons." width="150" height="150" class="alignleft" size-thumbnail wp-image-379" /></a><a href='http://wwwx.cs.unc.edu/~gb/wp/wp-content/uploads/2008/06/06-page2.jpg'><img src="http://wwwx.cs.unc.edu/~gb/wp/wp-content/uploads/2008/06/06-page2-150x150.jpg" alt="At my birthday, I want a cake." title="At my birthday, I want a cake." width="150" height="150" class="alignleft" size-thumbnail wp-image-380" /></a><a href='http://wwwx.cs.unc.edu/~gb/wp/wp-content/uploads/2008/06/07-page3.jpg'><img src="http://wwwx.cs.unc.edu/~gb/wp/wp-content/uploads/2008/06/07-page3-150x150.jpg" alt="At my birthday, I want some friends." title="At my birthday, I want some friends." width="150" height="150" class="alignleft" size-thumbnail wp-image-381" /></a><a href='http://wwwx.cs.unc.edu/~gb/wp/wp-content/uploads/2008/06/08-page4.jpg'><img src="http://wwwx.cs.unc.edu/~gb/wp/wp-content/uploads/2008/06/08-page4-150x150.jpg" alt="At my birthday, I want candy." title="At my birthday, I want candy." width="150" height="150" class="alignleft" size-thumbnail wp-image-382" /></a></p>
<p>My friends Karen Erickson and Gretchen Hanser of the <a href="http://www.med.unc.edu/ahs/clds/">Center for Literacy and Disability Studies</a> tell me that children with limited ability to speak or handle traditional books have few opportunities to learn to read and write. While typically developing children have access to dozens or even hundreds of books, severely disabled kids often have access to very few. Imagine being fifteen years old, unable to speak or to reliably use your hands to manipulate a book and getting your first opportunity to read. Books about baby farm animals aren&#8217;t going to cut it. You might be interested NASCAR, fashion, or spacecraft but beginner books on those subjects are rare and even more rarely accessible. Could we do something to make creating accessible books easier?</p>
<p>At the Tar Heel Reader site you can select a book and then advance through the pages with just about any of the characters commonly generated by switch interfaces (let me know if you need something not currently supported). You can have each page read out loud by a computer-generated voice if you wish. Also, each book is automatically available for download as a PowerPoint, Impress, or Flash show. </p>
<p>If you don&#8217;t find a book to suit your reader&#8217;s interest, making a new book is very easy. The book creator wizard guides you through the process of finding pictures on Flickr, and providing a simple sentence to go with each. Then, with the click of a button, you can create a new book that will immediately be available for reading or download.</p>
<h3>How it works</h3>
<p>I started hacking <a href="http://www.php.net/">PHP</a> using the <a href="http://www.flickr.com/services/api/">Flickr API</a> and quickly had a primitive book creator wizard working. When I started thinking about all the supporting infrastructure I would need to provide logins, searches, and multiple authors, it hit me that <a href="http://wordpress.org/">WordPress</a> already had everything I&#8217;d need. A <a href="http://www.nixonmcinnes.co.uk/2008/04/25/building-micro-web-applications-using-wordpress-pages/">blog post by Steve Winton</a>  encouraged me to examine the possibilities further. I&#8217;m very impressed with the ease of integrating the wizard and switch-accessible reading into WordPress by only hacking on the <a href="http://codex.wordpress.org/Using_Themes">theme</a>.</p>
<p><a href='http://wwwx.cs.unc.edu/~gb/wp/wp-content/uploads/2008/06/14-write1.jpg'><img src="http://wwwx.cs.unc.edu/~gb/wp/wp-content/uploads/2008/06/14-write1-300x225.jpg" alt="Book wizard" title="Book wizard in use." width="300" height="225" class="alignright" size-medium wp-image-378" /></a> I started with the default theme and hacked the <a href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets">css</a> a bit to create more space on the page. Then I created an empty <a href="http://codex.wordpress.org/Pages">page</a> for the wizard and gave it a custom template containing my PHP code. Working within the page framework in this way gave me access to all the great WordPress functions while leaving me free to program the page however I wished.  In the screen shot to the left you can see the wizard in use. The two rows of pictures at the top are the result of a Flickr search for the tag <em>squirrels</em>. The two boxes near the bottom are the pages constructed so far with an area in each for the short sentence for that page. I used the cool <a href="http://host.sonspring.com/hoverbox/">Hoverbox Image Gallery</a> css to make the Flickr search images zoom when you move your cursor over them.</p>
<p>The wizard would be much cooler if it used AJAX but the current version is simply a single <code>html form</code> that does a POST to the page URL. At the very top of the code I call the WordPress <code>auth_redirect</code> function to make sure the author is logged in. Then I check to see if the request method is GET or POST. A GET request signals starting to write; all other calls will use method POST. I used the <a href="http://phpflickr.com/">phpFlickr class</a> to manage access to Flickr. When the author has completed the book, pressing the Create my book button uses the WordPress <code><a href="http://codex.wordpress.org/Function_Reference/wp_insert_post">wp_insert_post</a></code> function to create post representing the book and then redirects the browser to the newly created post.</p>
<p>Each book is simply a multi-page post using the WordPress &lt;!&#8211;nextpage&#8211;> tag. They have a regular structure that allows me to parse them with a regular expression when invoking the wizard for editing a book. I customized the book display by modifying the <code>single.php</code> file to make a <code>singlebook.php</code> file that is used for posts in the <em>Book</em> category. The singlebook template eliminates the sidebar and other navigation to unclutter the layout. Switch enabling the reading is done with a bit of <a href="http://en.wikipedia.org/wiki/JavaScript">JavaScript</a> that advances to the next page on a KeyPress event. Speech enabling the books is implemented with a <a href="http://python.org">Python</a> CGI script that uses pyibmtts to convert the caption to a Flash movie that is embedded in the page.</p>
<p>Teachers sometimes use slide show tools such as PowerPoint to make accessible books for their disabled students. To support this and to allow reading books offline each book may be downloaded in Microsoft PowerPoint, OpenOffice Impress, and Adobe Flash format. I generate the Impress format XML using the PHP DOM functions and then convert to PowerPoint and/or Flash using soffice running as a server with the PyODConverter as described in <a href="http://wwwx.cs.unc.edu/~gb/wp/blog/2008/05/29/creating-powerpoint-slide-shows-from-wordpress-posts/">another post</a>.</p>
<h3>Future directions</h3>
<p>The <a href="http://tarheelreader.org/2008/05/19/jeff-gordon/">book on Jeff Gordon</a> illustrates a possible future direction for these books. I used the built-in WordPress editor to modify the last page to include a <a href="http://www.youtube.com/">YouTube</a> video instead of a static picture. I think we could extend the wizard to include YouTube searches if there is enough interest.</p>
<p>Karen suggested including <em>sentence frames</em> to encourage authors to create easy to read texts.  I didn&#8217;t understand her well enough to try to implement something. Hey, I&#8217;m just a computer guy!</p>
<p>Gretchen would like a way to make whatever book the class is currently reading available in this format. I think we could do something with a web cam and a bit of uploading assistance.</p>
<p>Developing this prototype was both fun and educational for me. If we get enough interest from teachers perhaps I&#8217;ll get a group of students to program an enhanced version this fall.</p>
]]></content:encoded>
			<wfw:commentRss>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/06/03/combining-wordpress-and-flickr-to-make-accessible-books-for-beginning-readers/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Creating PowerPoint Slide Shows from Wordpress Posts</title>
		<link>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/05/29/creating-powerpoint-slide-shows-from-wordpress-posts/</link>
		<comments>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/05/29/creating-powerpoint-slide-shows-from-wordpress-posts/#comments</comments>
		<pubDate>Thu, 29 May 2008 15:49:30 +0000</pubDate>
		<dc:creator>gb</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://wwwx.cs.unc.edu/~gb/wp/?p=375</guid>
		<description><![CDATA[For the Tar Heel Reader project I needed to convert very simple multi-page WordPress posts into PowerPoint slide shows. I chose the circuitous route of making an OpenOffice Impress show by bashing XML and then converting it to PowerPoint. I manually created a prototype slide show with a title page and a single book page [...]]]></description>
			<content:encoded><![CDATA[<p>For the Tar Heel Reader project I needed to convert very simple multi-page WordPress posts into PowerPoint slide shows. I chose the circuitous route of making an OpenOffice Impress show by bashing XML and then converting it to PowerPoint. I manually created a prototype slide show with a title page and a single book page in Impress and saved it in their native <code>.odp</code> format. These files are simply zip archives containing <a href="http://books.evc-cit.info/odbook/ch02.html">several XML documents</a> and the images. Why they didn&#8217;t include the sounds, I don&#8217;t understand. The important file is <code>content.xml</code>. Examining it in Firefox revealed the bits I&#8217;d have to change on the title page and for each page of the book. I found several useful hints in a <a href="http://www.linuxjournal.com/article/9319">Linux Journal article by Collin Park</a>. I used the <a href="http://us3.php.net/manual/en/book.dom.php">PHP DOM module</a> to read in the prototype, update it for the current book (retrieved with the WordPress <code>get_post</code> function), and write it out along with the images. Zipping this result up produces a new Impress presentation for the book. </p>
<p>Then I needed to convert the Impress format to PowerPoint. Thankfully, I found <a href="http://www.artofsolving.com/opensource/PyODConverter">PyODConverter</a> to automate that part of the job. It worked fine when I ran it from the command prompt but I could not get it to find the server when I ran it from PHP. Again the web came to my rescue with a <a href="http://forums.knowledgetree.com/viewtopic.php?p=12596">post</a> by Piero. I&#8217;ll reproduce the code here so I don&#8217;t forget it.</p>
<pre>
cd /var/www                                      #www-data user home
sudo mkdir .openoffice.org2                      #create the openoffice working dir
sudo chown -R www-data:www-data .openoffice.org2 #set the owner
sudo chmod 700 .openoffice.org2                  #change permissions
sudo -s                                          #you need to be root
su - www-data                                    #if you want to be www-data

#start openoffice headless
xvfb-run -a soffice -accept="socket,host=localhost,port=8100;urp;StarOffice.ServiceManager" -nologo -headless -invisible
</pre>
<p>Now I need to figure out how to get this into /etc/init.d so that it will automatically start on reboot.</p>
]]></content:encoded>
			<wfw:commentRss>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/05/29/creating-powerpoint-slide-shows-from-wordpress-posts/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Wordpress makes a fine application framework</title>
		<link>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/05/21/wordpress-makes-a-fine-application-framework/</link>
		<comments>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/05/21/wordpress-makes-a-fine-application-framework/#comments</comments>
		<pubDate>Wed, 21 May 2008 13:27:42 +0000</pubDate>
		<dc:creator>gb</dc:creator>
				<category><![CDATA[Enabling Technology]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://wwwx.cs.unc.edu/~gb/wp/?p=374</guid>
		<description><![CDATA[I really like using Wordpress for my website and blog but I hadn&#8217;t thought until recently about using it as an application framework. Karen and I talked about a site to enable teachers to quickly build topical beginning readers for people with varied interests and abilities. I began thinking about the features such a site [...]]]></description>
			<content:encoded><![CDATA[<p>I really like using <a href="http://wordpress.org/">Wordpress</a> for my website and blog but I hadn&#8217;t thought until recently about using it as an application framework. <a href="http://wwwx.cs.unc.edu/~gb/wp/blog/2008/05/14/karen_notes/">Karen and I talked</a> about a site to enable teachers to quickly build topical beginning readers for people with varied interests and abilities. I began thinking about the features such a site would have and found lots of overlap with what Wordpress already provides. A <a href="http://www.nixonmcinnes.co.uk/2008/04/25/building-micro-web-applications-using-wordpress-pages/">blog post</a> by <a href="http://www.nixonmcinnes.co.uk/people/steve/">Steve Winton</a> over at <a href="http://www.nixonmcinnes.co.uk/">NixonMcInnes</a> encouraged me to examine the possibilities further. </p>
<p>I&#8217;m pleased to report that it is really easy to integrate a PHP web-app into Wordpress. I use ordinary blog posts as the books with the &lt;!&#8211;nextpage&#8211;> tag for pagination and a bit of Javascript for switch accessibility and text to speech. The book creator wizard is simply a set of pages with custom templates. You select some images, provide some captions and a title, and it creates the blog post that is your book. Wordpress provides logins, all the database manipulation, comments, tags, categories, etc. Redirects work fine because Wordpress is silent until you invoke get_header. Query parameters work fine; Wordpress seems to ignore them. Session variables work fine too. So far Wordpress hasn&#8217;t gotten in my way once and has helped a ton. </p>
]]></content:encoded>
			<wfw:commentRss>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/05/21/wordpress-makes-a-fine-application-framework/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tools for classification</title>
		<link>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/04/09/tools-for-classification/</link>
		<comments>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/04/09/tools-for-classification/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 01:06:10 +0000</pubDate>
		<dc:creator>gb</dc:creator>
				<category><![CDATA[Enabling Technology]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://wwwx.cs.unc.edu/~gb/wp/?p=367</guid>
		<description><![CDATA[Links I found related to classification.

SHOGUN: SHOGUN Project Documentation
pychem
Resources for Discriminant Analysis
Linear discriminant analysis
Principal components analysis

]]></description>
			<content:encoded><![CDATA[<p>Links I found related to classification.</p>
<ul>
<li><a href="http://www.shogun-toolbox.org/doc/main.html">SHOGUN: SHOGUN Project Documentation</a></li>
<li><a href="http://pychem.sourceforge.net/">pychem</a></li>
<li><a href="http://people.revoledu.com/kardi/tutorial/LDA/Resources.htm">Resources for Discriminant Analysis</a></li>
<li><a href="http://en.wikipedia.org/wiki/Linear_discriminant_analysis">Linear discriminant analysis</a></li>
<li><a href="http://en.wikipedia.org/wiki/Principal_components_analysis">Principal components analysis</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://wwwx.cs.unc.edu/~gb/wp/blog/2008/04/09/tools-for-classification/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
