<?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>Mumboe Development &#187; Lindsey Simon</title>
	<atom:link href="http://development.mumboe.com/?feed=rss2&#038;author=3" rel="self" type="application/rss+xml" />
	<link>http://development.mumboe.com</link>
	<description>Inside with the Mumboe Development Team</description>
	<lastBuildDate>Thu, 01 Oct 2009 19:30:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>OpenAjax Alliance Meeting Update</title>
		<link>http://development.mumboe.com/?p=27</link>
		<comments>http://development.mumboe.com/?p=27#comments</comments>
		<pubDate>Sat, 14 Oct 2006 18:06:36 +0000</pubDate>
		<dc:creator>Lindsey Simon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://development.finetooth.com/?p=27</guid>
		<description><![CDATA[

Last week was the second face-to-face meeting of the OpenAjax Alliance membership, fresh on the heels of the AJAXWorld conference in Santa Clara, CA. The meeting was two-days long, with day one focused on a mix of show-and-tell, group breakout discussions, and objective proposals. Day two focussed on the future of Ajax and mobile development. [...]]]></description>
			<content:encoded><![CDATA[<p><img id="image26" src="http://development.finetooth.com/wp-content/uploads/2006/10/OpenAjaxAllianceBanner.thumbnail.jpg" alt="OAA" /><br />
</p>
<p>Last week was the second face-to-face meeting of the OpenAjax Alliance membership, fresh on the heels of the AJAXWorld conference in Santa Clara, CA. The meeting was two-days long, with day one focused on a mix of show-and-tell, group breakout discussions, and objective proposals. Day two focussed on the future of Ajax and mobile development. The result is that the group has solidified plans to produce an event and markup scanner component for developers to help ensure framework and code compatibility as well as toolkit interoperability &#8211; i.e. say you want to use a MooTools Accordion and a Dojo Fisheye together somehow. That might actually be perverse, but anyhow you get the drift. California was beautiful and Sun has a great layout and cafeteria. The Chinese Steamed Fish was superb!</p>
]]></content:encoded>
			<wfw:commentRss>http://development.mumboe.com/?feed=rss2&amp;p=27</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BarCampTexas</title>
		<link>http://development.mumboe.com/?p=25</link>
		<comments>http://development.mumboe.com/?p=25#comments</comments>
		<pubDate>Sun, 27 Aug 2006 22:42:58 +0000</pubDate>
		<dc:creator>Lindsey Simon</dc:creator>
				<category><![CDATA[Conferences]]></category>

		<guid isPermaLink="false">http://development.finetooth.com/?p=25</guid>
		<description><![CDATA[ Despite a close call where the original venue pulled out at the last minute, BarCampTexas took place without a hitch at Club Elysium in Austin, TX. The goth bar scene + noon o&#8217;clock beer + many caffeinate barcampers was both fun and educational. I heard presentations on search engine optimization, programming in Cocoa, better [...]]]></description>
			<content:encoded><![CDATA[<p><img id="image24" src="http://development.finetooth.com/wp-content/uploads/2006/08/BarCampTexas.png" alt="BarCampTexas" /> Despite a close call where the original venue pulled out at the last minute, BarCampTexas took place without a hitch at Club Elysium in Austin, TX. The goth bar scene + noon o&#8217;clock beer + many caffeinate barcampers was both fun and educational. I heard presentations on search engine optimization, programming in Cocoa, better ways at describing user interface interactions in Visio, and some unique ways to fund ideas. I even took a crack at my presentation on the XSLDataGrid. All in all, it was cozy, initimate, and the spirit of bar camp was in full effect. We attendants are forever in debt to the hard work that <a href="http://geekaustin.com/">Lynn Bender</a>, <a href="http://whurley.com/">Whurley</a>, Erica, and <a href="http://wordlife.net/">Wordlife Productions</a> put in to set up such an awesome un-conference. </p>
]]></content:encoded>
			<wfw:commentRss>http://development.mumboe.com/?feed=rss2&amp;p=25</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XSLDataGrid published at XML.com</title>
		<link>http://development.mumboe.com/?p=21</link>
		<comments>http://development.mumboe.com/?p=21#comments</comments>
		<pubDate>Wed, 23 Aug 2006 22:20:29 +0000</pubDate>
		<dc:creator>Lindsey Simon</dc:creator>
				<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://development.finetooth.com/?p=21</guid>
		<description><![CDATA[Just a quick link to an article I&#8217;ve been working on for awhile that started off here as a post after playing with Google&#8217;s AJAXSLT &#8211; check out: The XSLDataGrid: XSLT Rocks Ajax over at XML.com. The source code and examples are hosted here on our site, so if you have any questions or find [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick link to an article I&#8217;ve been working on for awhile that started off here as a post after playing with Google&#8217;s AJAXSLT &#8211; check out: <a href="http://www.xml.com/pub/a/2006/08/23/xsldatagrid-xslt-ajax.html">The XSLDataGrid: XSLT Rocks Ajax</a> over at XML.com. The source code and examples are hosted here on our site, so if you have any questions or find any bugs, I&#8217;d love to hear from you!</p>
<p>Demos:</p>
<ul>
<li><a href="http://development.finetooth.com/wp-content/uploads/XSLDataGrid/test/Dynamic.php">Dynamic XSLDataGrid</a></li>
<li><a href="http://development.finetooth.com/wp-content/uploads/XSLDataGrid/test/ClientTransformFromServer.html">Client Transform from data on server</a></li>
<li><a href="http://development.finetooth.com/wp-content/uploads/XSLDataGrid/test/Multiple.html">Multiple Grids transformed from inline html</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://development.mumboe.com/?feed=rss2&amp;p=21</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2007 SXSW Interactive Panel Proposal Picker</title>
		<link>http://development.mumboe.com/?p=18</link>
		<comments>http://development.mumboe.com/?p=18#comments</comments>
		<pubDate>Wed, 16 Aug 2006 19:16:50 +0000</pubDate>
		<dc:creator>Lindsey Simon</dc:creator>
				<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://development.finetooth.com/?p=18</guid>
		<description><![CDATA[This year, the coordinators of SXSW Interactive are taking it to the streets, soliciting votes about what panel ideas seem most exciting and relevant for next year&#8217;s conference. When Shawn O&#8217;Keefe and Hugh Forrest of SXSW approached me with this concept, I got really excited about it. I put together what I hope folks will [...]]]></description>
			<content:encoded><![CDATA[<p>This year, the coordinators of <a href="www.sxsw.com/interactive/">SXSW Interactive</a> are taking it to the streets, soliciting votes about what panel ideas seem most exciting and relevant for next year&#8217;s conference. When Shawn O&#8217;Keefe and Hugh Forrest of SXSW approached me with this concept, I got really excited about it. I put together what I hope folks will find to be an intuitive and simple user interface for choosing 10 panels and sorting them from top to bottom, using the scriptaculous Sortable. I&#8217;ve gotten feedback from some users so far and I&#8217;ve tried to implement as many of their suggestions as I could (thanks to Khoi Vinh, Gordon Montgomery, Michael Mahemoff, and some others). Head on over and pick your favorites!</p>
<p>I&#8217;ve got a Panel Proposal in the &#8220;browsers / web apps&#8221; category that will essentially be about a forthcoming article I&#8217;m working on regarding using XSLT in the browser and on the server for AJAX widgets. So if that sounds interesting to you, <a href="http://2007.sxsw.com/interactive/panel_picker/#panel_68">go vote for it!</a></p>
<p><a href="http://2007.sxsw.com/interactive/panel_picker/" title="Go vote!"><img id="image20" src="http://development.finetooth.com/wp-content/uploads/2006/08/2006-08-16-1155751033_1280x800.png" alt="screenshot" /></a></p>
<p>On a side note, the folks working on BarCamp mentioned the panel picker on <a href="http://groups.google.com/group/barcamp/browse_thread/thread/153c916c8b838c8c">their listserve</a>, which my friend whurley pointed out to me. It seems like maybe this thing might have some other uses and people are interested. Feel free to download it at <a href="http://www.commoner.com/~lsimon/PanelPicker.tgz">http://www.commoner.com/~lsimon/PanelPicker.tgz</a></p>
]]></content:encoded>
			<wfw:commentRss>http://development.mumboe.com/?feed=rss2&amp;p=18</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FineTooth Joins OpenAjax Alliance</title>
		<link>http://development.mumboe.com/?p=16</link>
		<comments>http://development.mumboe.com/?p=16#comments</comments>
		<pubDate>Mon, 19 Jun 2006 16:29:47 +0000</pubDate>
		<dc:creator>Lindsey Simon</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://development.finetooth.com/?p=16</guid>
		<description><![CDATA[
FineTooth is proud to announce joining the OpenAjax Alliance. A big thanks goes out to Jon Ferraiolo at IBM for getting us involved as well as attempting to organize what is quickly becoming a fragmenting technology. With so many frameworks, so many libraries, and so many vendors &#8211; all with different goals and applications &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://openajaxalliance.org/images/OpenAjax%20Alliance.png" alt="OpenAjax Alliance" /></p>
<p>FineTooth is proud to announce joining the <a href="http://openajaxalliance.org/">OpenAjax Alliance</a>. A big thanks goes out to Jon Ferraiolo at IBM for getting us involved as well as attempting to organize what is quickly becoming a fragmenting technology. With so many frameworks, so many libraries, and so many vendors &#8211; all with different goals and applications &#8211; now seems like a very opportune time to try to develop some standards. Hopefully, this will empower future developers to take advantage of the trials and tribulations when considering which patterns or libraries to use in their projects. At FineTooth, we hope to offer some contributions in the Markup and Interoperability Committees. Most of the major software players seem to be throwing some weight into this endeavor too &#8211; something that makes us want to have the voice of some smaller development shops heard as the Alliance moves forward..  </p>
]]></content:encoded>
			<wfw:commentRss>http://development.mumboe.com/?feed=rss2&amp;p=16</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>XSLDataGrid / Sarissa / AJAXSLT</title>
		<link>http://development.mumboe.com/?p=15</link>
		<comments>http://development.mumboe.com/?p=15#comments</comments>
		<pubDate>Fri, 16 Jun 2006 22:56:36 +0000</pubDate>
		<dc:creator>Lindsey Simon</dc:creator>
				<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://development.finetooth.com/?p=15</guid>
		<description><![CDATA[Two weeks later &#8230;
With some tinkering and coding, now I&#8217;m really jazzed about the idea of clientside XSLT for widget creation. With Sarissa, it&#8217;s not slow at all. Hats off to Manos Batsis for Sarissa, he&#8217;s done some really cool work. And for those who want to do it on the server, being able to [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Two weeks later &#8230;</strong><br />
With some tinkering and coding, now I&#8217;m really jazzed about the idea of clientside XSLT for widget creation. With Sarissa, it&#8217;s not slow at all. Hats off to Manos Batsis for Sarissa, he&#8217;s done some really cool work. And for those who want to do it on the server, being able to leverage the <em>exact same code and technique</em> seems really great to me. A dispatcher could even look at the bandwidth of the client and the version of the browser to decide how to optimally deliver the experience. To read about the advantages I see to this approach overall, check out a prior post <a href="http://development.finetooth.com/?p=14">Google’s AJAXSLT and UI Widgetry Thoughts</a>. I&#8217;m getting most of the original DataGrid features working in this XSLT version, so check back as this demo page will get updated. I&#8217;d like to offer some profiling statistics too, but even with recordsets of 200 rows, I can barely tell the difference between the Sarissa client-side transform speed and the server/render speed.<br />
References:<br />
The XSL file: <a href="http://development.finetooth.com/wp-content/uploads/XSLDataGrid/XSLDataGrid.xsl" target="_blank">XSLDataGrid.xsl</a><br />
<a href="http://sarissa.sourceforge.net/doc/">Sarissa</a><br />
<a href="http://goog-ajaxslt.sourceforge.net/">Google’s AJAXSLT</a><br />
Below is a test page to tinker with:</p>
<p><iframe width="450" scrolling="auto" height="550" frameborder="0" src="http://development.finetooth.com/wp-content/uploads/XSLDataGrid/XSLDataGridTest.php"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://development.mumboe.com/?feed=rss2&amp;p=15</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Google&#8217;s AJAXSLT and UI Widgetry Thoughts</title>
		<link>http://development.mumboe.com/?p=14</link>
		<comments>http://development.mumboe.com/?p=14#comments</comments>
		<pubDate>Tue, 06 Jun 2006 16:12:58 +0000</pubDate>
		<dc:creator>Lindsey Simon</dc:creator>
				<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://development.finetooth.com/?p=14</guid>
		<description><![CDATA[I&#8217;ve recently spent a little time tinkering with Google&#8217;s JavaScript XSLT library. It is available online at: goog-ajaxslt.sourceforge.net. I started to wonder if client-side XSLT would be one cool way to implement the OpenRico LiveGrid&#8217;s and/or my DataGrid&#8217;s functionality to xhtml tables. One of Richard&#8217;s goals for the OpenRico project is for it to be [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently spent a little time tinkering with Google&#8217;s JavaScript XSLT library. It is available online at: <a href="http://goog-ajaxslt.sourceforge.net/">goog-ajaxslt.sourceforge.net</a>. I started to wonder if client-side XSLT would be one cool way to implement the OpenRico LiveGrid&#8217;s and/or my DataGrid&#8217;s functionality to xhtml tables. One of Richard&#8217;s goals for the OpenRico project is for it to be able to &#8220;fail gracefully&#8221; &#8211; in other words, to not be crippling to roll back out of; this is a principle I like too. The idea of taking a semantically correct representation of tabular data and then &#8220;live-ifying&#8221; it, and or adding certain kinds of dynamic functionality(reorderable columns, resizable columns, etc&#8230;) to it, is very, very appealing to me &#8211; an analogy being something like a taking a house frame and building everything else on top of and into it &#8211; and being able to go, &#8220;You know what, I don&#8217;t need a bathroom!&#8221; and voila, you can lose it and use that space for something else. Google&#8217;s XSLT via JavaScript/DOM looks like it will be too slow to do what I want, but it is a neat approach, at least in theory.</p>
<p><strong>Why not CSS only?</strong><br />
One of the classic problems with tables is trying to achieve the scrolling table-body. <a href="http://www.imaputz.com/cssStuff/bigFourVersion.html">It has been done</a> with some quirky looking CSS (mostly for IE&#8217;s sake) but a CSS-only approach will never achieve some of the functionality I crave in a table beyond scrollability. (Until XForms &#8211; jk)</p>
<p><strong>Why not DOM then?</strong><br />
So introducing a slew browser-centric CSS selectors doesn&#8217;t appeal to me if DOM manipulation can achieve the same thing more simply. <a href="http://kered.org/article-2005.07.20-scrolling_table_body.html">Derek Anderson has created a nice demo of this approach</a>. I think the Google AJAXSLT approach might offer a clean way of doing what Derek did, but what if you want all the extra bells and whistles? DOM just seems too slow &#8211; and Google&#8217;s AJAXSLT seems too slow (it also being an interface to browser DOM). You can see a test of a really simple table with like 100 rows being rewritten into two tables ala our DataGrid <a href="http://commoner.com/~lsimon/ajaxslt-0.4/test/xslt.php">here</a>. </p>
<p><strong>So what then?</strong><br />
I don&#8217;t believe that it&#8217;s using Java to produce JavaScript! Currently, at FineTooth, we&#8217;re writing dynamic Smarty templates with inline functionality and using Ajax to completely repopulate container divs with the template-driven XHTML &#8211; basically bypassing all DOM interaction for setup, but using and relying on DOM for interactivity. This approach works for us now, but if we stopped using PHP or Smarty, we&#8217;d have to reimplement things. I&#8217;m going to check out <a href="http://www.rcode.net/blog/tlaurenzo/introducing-protowidget">Protowidget</a>, but I&#8217;m already not a fan of its syntax &#8211; &#8220;leveraging custom attributes in order to do all of the wiring&#8221;. I guess I have this aversion to repurposing structural tags (anchors as buttons, spans as text) &#8211; but perhaps I&#8217;m just being semantically snotty. Server-side XSLT is an approach I&#8217;m looking into. I&#8217;d like to be able to produce these widgets somewhat server-agnostically, or at least have very similar implementations for ASP, Ruby on Rails, PHP, etc.. I&#8217;d rather not have the Rails way and an ASP way that looked totally foreign to one another. The hunt goes on then&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://development.mumboe.com/?feed=rss2&amp;p=14</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Update: Reorganizable DataGrid built on Ajax / Smarty / Prototype / Scriptaculous</title>
		<link>http://development.mumboe.com/?p=13</link>
		<comments>http://development.mumboe.com/?p=13#comments</comments>
		<pubDate>Tue, 30 May 2006 17:30:22 +0000</pubDate>
		<dc:creator>Lindsey Simon</dc:creator>
				<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://development.finetooth.com/?p=13</guid>
		<description><![CDATA[Welcome! Since many of you are arriving here from a recent mention on Ajaxian I wanted to let you know about a more bandwidth-optimized, working prototype of an XSLT version of this component &#8211; this is the direction I really want to see this grid move in!
Updated to version 0.3
README
LICENSE
Download: DataGrid-0.3.tar.gz (check out the QuickSearch [...]]]></description>
			<content:encoded><![CDATA[<p>Welcome! Since many of you are arriving here from a recent mention on <a href="http://ajaxian.com/archives/scriptaculous-datagrid">Ajaxian</a> I wanted to let you know about a more bandwidth-optimized, working prototype of an <a href="http://development.finetooth.com/?p=15">XSLT version of this component</a> &#8211; this is the direction I really want to see this grid move in!</p>
<p><strong>Updated to version 0.3</strong><br />
<a target="_blank" href="http://development.finetooth.com/wp-content/uploads/DataGrid/README">README</a><br />
<a target="_blank" href="http://development.finetooth.com/wp-content/uploads/DataGrid/LICENSE">LICENSE</a><br />
<strong>Download:</strong> <a href="http://development.finetooth.com/wp-content/uploads/DataGrid/DataGrid-0.3.tar.gz">DataGrid-0.3.tar.gz (check out the QuickSearch filter feature by rightclicking on the &#8220;Owner&#8221; column!)</a><br />
Note: Vendor column is intentionally non-draggable, non-reorderable, and non-resizable.</p>
<p><iframe width="450" scrolling="auto" height="430" frameborder="1" src="http://development.finetooth.com/wp-content/uploads/DataGrid/DataGridTest.php"></iframe></p>
<p><strong>Changes</strong><br />
* Simpler template design for right-click column menus<br />
* Patch to script.aculo.us allows mouse dragging outside of the Sortable container to update the list<br />
   (<a href="http://development.finetooth.com/wp-content/uploads/DataGrid/scriptaculous/delay_and_ignorePosition_forSortables.diff">delay_and_ignorePosition_forSortables.diff</a>, <a href="http://development.finetooth.com/wp-content/uploads/DataGrid/scriptaculous/test/functional/sortable7_test.html">Functional Test of the patch</a>)<br />
* Improved speed on column reordering and resizing<br />
* Removed a div inside the data table td&#8217;s which made an incredible speed boost to IE&#8217;s rendering<br />
* Recoded some of the for loops to use do {} while structures<br />
* General cleanup</p>
<p><strong>Notes</strong><br />
Primarily, there have been many changes made to improve speed of the DOM operations, and we plan on doing more! Many thanks to this article which I found to be exhaustive and interesting: <a href="http://www.devwebpro.com/devwebpro-39-20030514OptimizingJavaScriptforExecutionSpeed.html">Optimizing JavaScript for Execution Speed</a>. Also, I&#8217;ve been analyzing the code in the latest update to FogBugz by <a href="http://www.fogcreek.com">Fog Creek Software</a> &#8211; they&#8217;ve included resizability and column reordering. Their mechanisms seem to use XML parsing a lot &#8211; anyhow, I can confirm very similar speed results in our DataGrid to theirs. They&#8217;ve chosen to make the column headers completely draggable which is intuitive if you don&#8217;t know that feature is there for sure. And you click the actual text of the column label to sort. I like that too. Anyhow, I&#8217;ve restyled the grid here too to be more pleasant on the eyes and I hope to get some feedback from other developers out there!</p>
]]></content:encoded>
			<wfw:commentRss>http://development.mumboe.com/?feed=rss2&amp;p=13</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>A Better File Upload Progress Bar using Python, Ajax Prototype, &amp; JSON</title>
		<link>http://development.mumboe.com/?p=11</link>
		<comments>http://development.mumboe.com/?p=11#comments</comments>
		<pubDate>Fri, 31 Mar 2006 15:54:48 +0000</pubDate>
		<dc:creator>Lindsey Simon</dc:creator>
				<category><![CDATA[User Interface]]></category>

		<guid isPermaLink="false">http://development.finetooth.com/?p=11</guid>
		<description><![CDATA[
   Update: Aug 22, 2006: Download the Code and a working Demo!
   Also, read our documentation on the inner workings of the python CGI.

Demo:

The Python File Input CGI
About four months ago, Christopher Bottaro, another developer here at FineTooth, worked on a Python CGI script to handle file uploads and it is [...]]]></description>
			<content:encoded><![CDATA[<p><strong><br />
   Update: Aug 22, 2006: <a href="http://development.finetooth.com/wp-content/uploads/FileUploadExample.tgz">Download the Code and a working Demo</a>!<br />
   <a href="">Also, read our documentation on the inner workings of the python CGI</a>.<br />
</strong></p>
<p><strong>Demo:</strong><br />
<iframe width="400" scrolling="no" height="230" frameborder="0" src="http://development.finetooth.com/wp-content/uploads/FileUploadExample/"></iframe></p>
<p><strong>The Python File Input CGI</strong><br />
About four months ago, Christopher Bottaro, another developer here at FineTooth, worked on a Python CGI script to handle file uploads and it is mighty ingenious. The CGI uses standard input as a stream, which PHP cannot do. The CGI writes the stream data as it arrives, in blocks, to a file buffer. This enables us to use another PHP server-side script to to poll the size of the file buffer while it&#8217;s being written to. With this, we can calculate the parameters necessary for a progress bar user interface (time remaining, speed of upload). We integrated the whole kit and kaboodle into our PHP Form class so that if a form indeed had a file input, the progress bar was all set up to popup automagically, and the form&#8217;s action was set to point to the CGI. Upon file upload completion, the CGI would perform a redirect to the &#8216;original&#8217; action URI for data processing. </p>
<p><strong>The Problem Case &#8211; File Inputs &#038; JavaScript</strong><br />
As we&#8217;ve moved more and more towards using JavaScript to control our application&#8217;s form processing (as opposed to using the standard form action attribute as an URL) one problem situation has been caused by the file input. Since the file input is essentially an OS level object, JavaScript can&#8217;t access the information (thank goodness!) in order to send it programmatically to a handler. So what we&#8217;ve done in the past has been to use iframes for forms that needed file inputs. I&#8217;ve read that the Dojo Toolkit basically does this technique &#8211;  by detecting if the form has a file input on it, and if so, it uses an iframe mechanism to submit the form. For awhile this was a good workaround. However, for aesthetic and programmatic design reasons, I wanted to come up with another solution.</p>
<p><strong>Why not just use Iframes for those forms?</strong><br />
For one thing, iframes are just kind of annoying. If you want to access your JavaScript framework, you have to program in the scope of window.parent. Hopefully, the browser is caching your stylesheets and javascripts, but I&#8217;ve sometimes seen otherwise watching apache logs, so I don&#8217;t believe the iframe solution is always efficient. More importantly, though, using the classic form post technique and then rewriting output from the server to the iframe&#8217;s window is just not how I want to process forms in our application. I prefer to use Prototype&#8217;s Form.serialize and then Ajax.Request to deal with form transactions. Our application doesn&#8217;t have page refreshes overall, so introducing them into little iframes if and only when a form needed a file input just feels so cowardly. And, all that *really* needs to post is the file input data. So suddenly, the brain dinger started going off.</p>
<p><strong>Embedding N-Iframes</strong><br />
Instead of using an iframe for the entirety of the form, I wanted to try embedding iframes individually for each file input that needed to be on the form. I could have an iframe that loaded up its own form object into its window.body with only the file input and some session information. Then, via the controlling form, we can use javascript to submit each embedded iframe&#8217;s form programmatically. Once the poller running in the main form detects that all of the files are safely on the server, we can submit the rest of the form data using Ajax.Request along with some logic to capture the information about the freshly uploaded files. It sounded funky, but lo-and-behold, it works and it scales. </p>
<p>A diagram might help make more sense of this approach:</p>
<pre>
Form
   *text input
   *text input
   *Iframe
        *form
            *file input
   *text input
   etc...
</pre>
<p>What&#8217;s key here is that instead of having a single CGI try to deal with multiple file inputs and all the other inputs on the form, our CGI is doing only what we originally wanted it for in the first place &#8211; the file upload.</p>
<p>Here&#8217;s the form processing logic:</p>
<pre>
* User chooses file(s) to upload in the form.
* User presses submit.
* JavaScript validation runs against the form.
* JavaScript looks inside the form for any embedded iframes.
* If it finds them, it submits the embedded form to the CGI.
* An interval runs again and again until all the files
   are reporting 100% upload
* The rest of the form data is at last sent using
   Ajax.Request
</pre>
<p><strong>A few other niceties</strong><br />
Since our CGI is writing data in chunks, and since the juciest information about the file is in the first little bit of data, the CGI can do a little regular expression matching early on in the process to capture the file&#8217;s mimetype and name. Our poller can then read this information and we can show a purty little icon for the filetype and also reference the actual file name in the poller window &#8211; making it look pretty slick! </p>
<p><strong>The Poller</strong><br />
The return data from the poller comes back to the browser as JSON and looks like this:<br />
<code><br />
({"success":true,<br />
   "percent_done":3,<br />
   "kps":3,<br />
   "timeleft":"21 mins  8 secs",<br />
   "filename":"01 Mistakes.mp3",<br />
   "mimetype":"audio\/mpeg",<br />
   "mimetype_iconsrc":"music.png",<br />
   "current_size":126676,<br />
   "total_size":4044948})<br />
</code></p>
<p><strong>So Why can&#8217;t we do multiple files all at once?</strong><br />
Originally I wanted a display that resembled Firefox&#8217;s Dowload Manager. One problem I haven&#8217;t found an adequate answer to is, why does it seem that I can&#8217;t be sending up multiple CGI requests from the embedded iframes at once? I can see that apache seems to be blocking until all but the last CGI are left in terms of sending responses back to the browser. Maybe it is the browser doing that; I did find one mention of that being the case back in old versions of Netscape, but I can&#8217;t seem to find any other validation of this limitation anywhere. So until that issue is resolved, files will be sent and polled sequentially in this version.</p>
]]></content:encoded>
			<wfw:commentRss>http://development.mumboe.com/?feed=rss2&amp;p=11</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>SXSW Interactive 2006</title>
		<link>http://development.mumboe.com/?p=9</link>
		<comments>http://development.mumboe.com/?p=9#comments</comments>
		<pubDate>Mon, 13 Mar 2006 22:32:22 +0000</pubDate>
		<dc:creator>Lindsey Simon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://development.finetooth.com/?p=9</guid>
		<description><![CDATA[I figured this would be a good place to record some thoughts that have come up at SXSW as well as to record some notes about the panels I&#8217;ve attended this year. So here goes:
Saturday: Daniel Gilbert Presentation: How to Do Precisely the Right Thing at All Possible Times

I accidentally just deleted my entire review [...]]]></description>
			<content:encoded><![CDATA[<p>I figured this would be a good place to record some thoughts that have come up at SXSW as well as to record some notes about the panels I&#8217;ve attended this year. So here goes:</p>
<p><strong>Saturday: Daniel Gilbert Presentation: How to Do Precisely the Right Thing at All Possible Times<br />
</strong><br />
I accidentally just deleted my entire review of this panel by typing Ctrl-W a la emacs cut. In the end, it must not have been karmically all that useful!</p>
<p><strong>Saturday: Jim Coudal / Jason Fried Opening Remarks </strong><br />
37signals spokesman and his partner in marketing, Jim Coudal, made strong cases for the value of curiosity and the waste of time that is dogma. Curiosity empowers individuals to know how to learn better and more quickly, as opposed to being just purely information libraries. By ditching the dogma (technical specs, documentation, etc.. ) developers can focus on developing itself &#8211; trying new ideas, challenging ways of doing things, etc. It was a very uplifting conversation, but I heard a great deal of mumbling, that &#8220;Yeah, that works for your little company, but I don&#8217;t think it would work for mine&#8221;. Mr. Fried had indeed said that their conclusions would not work for everyone, but rather to just be open to the possibilities that there is &#8220;no right way&#8221;. Start small, fail in obsucrity, iterate, and succeed!</p>
<p><strong>Sunday: What&#8217;s Hot in Web Applications </strong><br />
Fix a pain-point for people, and wait patiently for the cash to start rolling in &#8211; that was the theme of these Silicon Valley webapp folks. They stressed the importance of solving a real life problem that you are actually having as being the key motivator behind successful startups. If you&#8217;re only trying to solve other people&#8217;s problems you will both tire of that and come to resent it. The sites demo&#8217;d were:</p>
<p><a href="http://www.yackpack.com">YackPack</a>  &#8211; an audio-based email webapp. Mostly struck me as being a pain in the butt and slow. I don&#8217;t want to use the web to listen to people talk myself, but it was certainly interesting to see how it could be used that way. Maybe when the speed isn&#8217;t such of an issue this technology will be cooler.</p>
<p><a href="http://www.meebo.com">Meebo</a> &#8211; web based IM client integrator. This was really cool &#8211; and made some great cases for how web-based apps are really making a web-based OS more possible.</p>
<p><a href="http://www.zimbra.com">Zimbra</a> &#8211; competitor to the Exchange behemoth. Zimbra&#8217;s mail client was totally impressive. Really cool integration tools (Blackberry, Calendar, etc.. ) and made me start to wonder if mutt/vim isn&#8217;t the ultimate email tool&#8230;</p>
<p><strong>Sunday: Making Web 2.0 Accessible</strong><br />
This was an unfortunately useless panel &#8211; unfortunate, because it left so much hanging. Short on usable advice and remiss on any truly hard-to-find information, the best way to sum up the theme would be to &#8220;get back to basics, and make sure there are ALT tags in your images&#8221;. Sure, that&#8217;s always good advice. But what the folks in the crowd are hungry for are options and useful examples and advice. There was only one code example in the whole presentation, and yet the conversation centered mostly on code.</p>
<p>If, as Shawn () from the W3C suggested, WCAG 2.0 is was designed from the bottom up for testability as opposed to readability, why was there no demo of a test we could all go replicate on our sites? Maybe the &#8220;testability&#8221; she meant involved getting users to test and watch them only, and not programmatic testing. Sure, Bank of America can create a team dedicated to doing Accessibility testing (only out of fear of lawsuit, mind you), but what can the developers in the crowd do? It&#8217;s easy to shoot down AJAX frameworks and applications(BaseCamp) for NOT being Accessible, but where was the demo of a truly good accessible site? What are the best techniques? What tools are better than others and how should we use them?  </p>
<p>No one had a decent suggestion of a framework that had been was more accessibility minded than others. Did anybody &#8220;fix&#8221; one of these frameworks and post it for download? Now that would have been useful! Until we have the resources to hire less enabled to test our applications or the threat of a lawsuit on our hands, we are left as helpless as we started before the panel. It is indeed noble to code towards Accessibility. Do not mistake my bummed out reaction to this panel as apathy toward the goal of having webapps be truly accessible.</p>
<p><strong>Monday: CSS Problem Solving</strong></p>
<p>This was a fairly fun and useful panel that dealt with a variety of CSS problems and how to solve them. Not a whole lot to say about it really. I didn&#8217;t see much going on there that blew my mind, but I don&#8217;t think that was the intention. It did seem like everyone wanted to promote their new BSS book however.</p>
<p><strong>Monday: Microformats</strong></p>
<p>Now this was a really great panel. Tantek Celik is a great moderator. He was well prepared and his slides are worth downloading. The panel didn&#8217;t ever feel rushed, but still crammed a ton of info and examples into it. Examples of using hCard and vCard translation from <a href="http://www.technorati.com">technorati</a>, mashups of SXSW speakers and after-parties &#8211; mapped on Google maps, Flock recognizing all this extra content.. Man, this was cool! But, I think it&#8217;s a technology that&#8217;s waiting for the killer app to take advantage of it, and even Flock seemed not to have convinced me that it was it. I&#8217;m going to install tails right now though and see if I can make use of these things. My gadget collection is currently pretty weak &#8211; my cell phone has trouble holding a charge, nevermind vCards <img src='http://development.mumboe.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://development.mumboe.com/?feed=rss2&amp;p=9</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
