<?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>Ajax Bestiary &#187; Uncategorized</title>
	<atom:link href="http://www.ajaxbestiary.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ajaxbestiary.com</link>
	<description>AJAX Development, News, Techniques &#38; More</description>
	<lastBuildDate>Wed, 01 Feb 2012 12:46:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Tilt: The &#8220;joys&#8221; of mobile web</title>
		<link>http://www.ajaxbestiary.com/2011/12/15/tilt-the-joys-of-mobile-web/</link>
		<comments>http://www.ajaxbestiary.com/2011/12/15/tilt-the-joys-of-mobile-web/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 22:54:51 +0000</pubDate>
		<dc:creator>Dave Mahon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ajaxbestiary.com/?p=547</guid>
		<description><![CDATA[We are fast reaching the end of the 25KB era. 3G network speeds mean we no longer need to keep our pages (and all of their assets, cached or otherwise) under 25KB for reasonable performance. That said, iPhone and Android users expect a rich web experience, 3G isn&#8217;t all that fast and like Firefox and [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>We are fast reaching the end of the 25KB era. 3G network speeds mean we no longer need to keep our pages (and all of their assets, cached or otherwise) under 25KB for reasonable performance.</p>
<p>That said, iPhone and Android users expect a rich web experience, 3G isn&#8217;t all <em>that</em> fast and like Firefox and IE of old, Mobile Safari and Mobile Chrome come with bizarre incompatibilities.</p>
<p>Take rotation for example.</p>
<p>Resize events happened on the desktop, but they happened in relatively controlled, incremental steps and you always knew what was happening. Resize events would fire on the window object and you could relatively easily determine the height and width, especially with libraries.</p>
<p>Not so in mobile. Mobile Safari fires a resize event, but may not present the new height and width to you. It all depends on which version of iOS you&#8217;re running. Android, however, does. Frankly, I&#8217;m not sure how Mobile Firefox and Opera 5 behave on those devices, not having one to test on.</p>
<p>Both browsers do update the window.orientation property, but for some reason, Mobile Safari doesn&#8217;t present 270 degrees (portrait, but with the button at the top), overloading 0 for that purpose.</p>
<p>Confusingly, the same version of Mobile Safari doesn&#8217;t behave the same across dissimilar devices. You can have a slightly different experience between an iPod Touch, an iPhone 3GS, an iPhone 4, an iPhone 4S, the iPad 1 and the iPad 2. (These being the Apple devices that commonly require support).</p>
<p>For example, on certain versions of iOS, <a href="http://www.nczonline.net/blog/2010/04/06/ipad-web-development-tips/">media selectors can be applied differently</a>.</p>
<p>Both platforms fire both <code>onresize</code> and <code>onorientationchange</code> events, but not always in the <a href="http://stackoverflow.com/questions/1649086/detect-rotation-of-android-phone-in-the-browser-with-javascript">same order</a>.</p>
<p>Worse still, the versions of Android can behave differently as well. Today, there is still a significant user base on 1.5, 1.6, 2.0, 2.2, 2.3, 3.0 and 4.0 is now entering the market.</p>
<p>In short, assume very little when working in the mobile space and try to test in a wide array of devices, because each browser can be very subtly different.</p>
<p><img src="http://www.ajaxbestiary.com/?voyeur=1"></p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.ajaxbestiary.com/2011/12/15/tilt-the-joys-of-mobile-web/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>The future of Ajax Bestiary</title>
		<link>http://www.ajaxbestiary.com/2009/10/07/the-future-of-ajax-bestiary/</link>
		<comments>http://www.ajaxbestiary.com/2009/10/07/the-future-of-ajax-bestiary/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 02:41:34 +0000</pubDate>
		<dc:creator>Don Albrecht</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Meta]]></category>
		<category><![CDATA[Update]]></category>

		<guid isPermaLink="false">http://www.ajaxbestiary.com/?p=344</guid>
		<description><![CDATA[One of my colleagues pointed out the rather high ranking of Ajax Bestiary in his Net News Wire Dinosaur Report today.  While 2nd place isn&#8217;t the worst possible ranking, It demonstrates that I haven&#8217;t posted anything in quite a while. I&#8217;ve had the best of intentions to resume blogging, but time concerns and the high [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>One of my colleagues pointed out the rather high ranking of Ajax Bestiary in his Net News Wire Dinosaur Report today.  While 2nd place isn&#8217;t the worst possible ranking, It demonstrates that I haven&#8217;t posted anything in quite a while.</p>
<p>I&#8217;ve had the best of intentions to resume blogging, but time concerns and the high level of secrecy around my current projects have both pushed me away from regular blog updates.  I&#8217;ll be making a bigger effort in the future, but I&#8217;ve also recruited a second author for the blog.  David Mahon is a talented front-end web developer who has agreed to produce regular content for AB.</p>
<p>You can expect Dave&#8217;s first post sometime in the next few days.</p>
<p><img src="http://www.ajaxbestiary.com/?voyeur=1"></p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.ajaxbestiary.com/2009/10/07/the-future-of-ajax-bestiary/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Fast &amp; Easy Prototype Based Curry</title>
		<link>http://www.ajaxbestiary.com/2008/12/17/a-fast-easy-prototype-based-curry/</link>
		<comments>http://www.ajaxbestiary.com/2008/12/17/a-fast-easy-prototype-based-curry/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 15:44:20 +0000</pubDate>
		<dc:creator>Don Albrecht</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ajaxbestiary.com/?p=338</guid>
		<description><![CDATA[in Javascript the Good Parts, Douglas Crockford presents a simple method to curry functions.  It&#8217;s a great tool that allows you to build functions with arguments predefined in them dynamically.  In his implementation Array.splice &#38; an indirect method declaration is used.  In my version, I use prototype&#8217;s enhanced Array object &#38; a direct call to [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>in <span style="text-decoration: underline;">Javascript the Good Parts</span>, Douglas Crockford presents a simple method to curry functions.  It&#8217;s a great tool that allows you to build functions with arguments predefined in them dynamically.  In his implementation Array.splice &amp; an indirect method declaration is used.  In my version, I use prototype&#8217;s enhanced Array object &amp; a direct call to the Function object to the same effect.</p>
<p>Function.curry = function() {<br />
var args = $A(arguments), that = this;<br />
return function() {<br />
return that.apply( null, args.concat(arguments));<br />
};<br />
};</p>
<p>I&#8217;ve been using this method for a few months now in both its prototype &amp; jquery forms and find it invaluable, especially when faced with a need to manipulate a large number of similar objects.</p>
<p><img src="http://www.ajaxbestiary.com/?voyeur=1"></p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.ajaxbestiary.com/2008/12/17/a-fast-easy-prototype-based-curry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Roll your own datagrid with prototype (part 1 the table)</title>
		<link>http://www.ajaxbestiary.com/2008/05/27/roll-your-own-datagrid-with-prototype-part-1-the-table/</link>
		<comments>http://www.ajaxbestiary.com/2008/05/27/roll-your-own-datagrid-with-prototype-part-1-the-table/#comments</comments>
		<pubDate>Tue, 27 May 2008 16:40:08 +0000</pubDate>
		<dc:creator>Don Albrecht</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ajaxbestiary.com/?p=325</guid>
		<description><![CDATA[Today I’m going to start a three part tutorial in implementing a custom datagrid with prototype &#38; scriptaculous. In part 1 we’ll explore the html &#38; css underlying the widget. Parts 2 &#38; 3 will look at interactivity and legacy browser support (IE 6). Disclaimer: this project is designed to work on IE 7 and [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Today I’m going to start a three part tutorial in implementing a custom datagrid with prototype &amp; scriptaculous.  In part 1 we’ll explore the html &amp; css underlying the widget.  Parts 2 &amp; 3 will look at interactivity and legacy browser support (IE 6).</p>
<p>Disclaimer: this project is designed to work on IE 7 and later.  It will not render properly on IE 6.  We will look into that more with part 3.</p>
<p>So it starts with a table. Tables are much maligned nowadays.  The focus is on semantic markup and creative uses of &lt;div&gt; and &lt;span&gt;.  In the energy behind css layouts over the past few years, the new markup elements available to the venerable table have been slightly overlooked.  Sure the reign of table based layouts is over, but tables are now able to display data more semantically and style it more simply than ever before.</p>
<p>Here’s a traditional HTML table to start from.</p>
<table border="0">
<tbody>
<tr>
<td>Item Number</td>
<td>Description</td>
<td>Qty</td>
<td>Unit Price</td>
<td>Total Price</td>
</tr>
<tr>
<td>0023</td>
<td>Apples</td>
<td>3</td>
<td>.56</td>
<td>1.68</td>
</tr>
<tr>
<td>0057</td>
<td>Pears</td>
<td>13</td>
<td>.74</td>
<td>9.62</td>
</tr>
<tr>
<td>0137</td>
<td>Bananas</td>
<td>8</td>
<td>.31</td>
<td>2.48</td>
</tr>
<tr>
<td>0587</td>
<td>Kumquats</td>
<td>17</td>
<td>.26</td>
<td>4.42</td>
</tr>
<tr>
<td>0054</td>
<td>Oranges</td>
<td>3</td>
<td>.45</td>
<td>1.35</td>
</tr>
<tr>
<td></td>
<td>Total</td>
<td>44</td>
<td></td>
<td>19.55</td>
</tr>
</tbody>
</table>
<p><code>&lt;table&gt;<br />
&lt;tr&gt;&lt;td&gt; Item Number&lt;/td&gt;&lt;td&gt;Description&lt;/td&gt;&lt;td&gt;Qty&lt;/td&gt;&lt;td&gt;Unit Price&lt;/td&gt;&lt;td&gt;Total Price&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;td&gt;0023&lt;/td&gt;&lt;td&gt; Apples&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;.56&lt;/td&gt;&lt;td&gt;1.68&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;td&gt;0057&lt;/td&gt;&lt;td&gt; Pears&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;.74&lt;/td&gt;&lt;td&gt;9.62&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;td&gt;0137&lt;/td&gt;&lt;td&gt; Bananas&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;.31&lt;/td&gt;&lt;td&gt;2.48&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;td&gt;0587&lt;/td&gt;&lt;td&gt; Kumquats&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;.26&lt;/td&gt;&lt;td&gt;4.42&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;td&gt;0054&lt;/td&gt;&lt;td&gt; Oranges&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;.45&lt;/td&gt;&lt;td&gt;1.35&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Total&lt;/td&gt;&lt;td&gt;44&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;19.55&lt;/td&gt;&lt;/tr&gt;<br />
&lt;/table&gt;</code></p>
<p>It’s a decent start, but we can do better.  First lets separate the body from the head with &lt;thead&gt; &amp; &lt;tbody&gt; tags.  We’ll also replace the header cells with &lt;th&gt; tags to denote their importance.  We’re also going to add a set of row numbers.  We’ll use &lt;th&gt; for these as well to signify that they aren’t really part of the data (note the empty &lt;th/&gt; we added to the header to make everything stay consistent).</p>
<p>&lt;table&gt;<br />
&lt;thead&gt;<br />
&lt;tr&gt;&lt;th /&gt;&lt;th&gt; Item Number&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Qty&lt;/th&gt;&lt;th&gt;Unit Price&lt;/th&gt;&lt;th&gt;Total Price&lt;/th&gt;&lt;/tr&gt;<br />
&lt;/thead&gt;&lt;tbody&gt;<br />
&lt;tr&gt;&lt;th&gt;1&lt;/th&gt;&lt;td&gt;0023&lt;/td&gt;&lt;td&gt; Apples&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;.56&lt;/td&gt;&lt;td&gt;1.68&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;th&gt;2&lt;/th&gt;&lt;td&gt;0057&lt;/td&gt;&lt;td&gt; Pears&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;.74&lt;/td&gt;&lt;td&gt;9.62&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;th&gt;3&lt;/th&gt;&lt;td&gt;0137&lt;/td&gt;&lt;td&gt; Bananas&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;.31&lt;/td&gt;&lt;td&gt;2.48&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;th&gt;4&lt;/th&gt;&lt;td&gt;0587&lt;/td&gt;&lt;td&gt; Kumquats&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;.26&lt;/td&gt;&lt;td&gt;4.42&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;th&gt;5&lt;/th&gt;&lt;td&gt;0054&lt;/td&gt;&lt;td&gt; Oranges&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;.45&lt;/td&gt;&lt;td&gt;1.35&lt;/td&gt;&lt;/tr&gt;<br />
&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;Total&lt;/td&gt;&lt;td&gt;44&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;19.55&lt;/td&gt;&lt;/tr&gt;<br />
&lt;/tbody&gt;&lt;/table&gt;</p>
<p>The &lt;thead&gt; specifies the header content.  When printed, a browser should print it on every page the table spans.  More importantly for us, it is a unique dom node we can grab for styling instructions.  &lt;tbody&gt; works in a similar way,  It allows us to break the internals of a table into a set of segments.  This will come in handy later.  &lt;th&gt; is a different beast entirely.  I like to think of it as the ying to &lt;td&gt;’s yang.  &lt;th&gt; &amp; &lt;td&gt; are to &lt;table&gt; what &lt;dt&gt; &amp; &lt;dd&gt; are to &lt;dl&gt;: a semantic way to denote name / value pairs.</p>
<p>Now that our table has a header and a body, It’s time to give it a footer.  We’ll do this by using the &lt;tfoot&gt;  tag.</p>
<p>At first glance, there is visually no difference between the 2nd and 3rd examples.  Both of them look identical.  The source, tells a different story.  In the 3rd example, the footer row is actually ahead of the &lt;tbody&gt;  in the source.  This is the beauty of &lt;tfoot&gt;  It lets us place the footer early in the table and cleanly separate it from the tbody that follows.  It also guarantees that the &lt;tfoot&gt; appears last no matter what we append to the table via script.</p>
<p>All of this looks good, except it would be great if the columns were better styled.  The two columns with financial data especially should be aligned left to ensure that the decimal points align.  In a perfect world, we&#8217;d be able to do this with column groups, but that&#8217;s something for part 2.</p>
<p><img src="http://www.ajaxbestiary.com/?voyeur=1"></p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.ajaxbestiary.com/2008/05/27/roll-your-own-datagrid-with-prototype-part-1-the-table/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>DOMAssistant 2.7 Has Landed</title>
		<link>http://www.ajaxbestiary.com/2008/04/09/domassistant-27-has-landed/</link>
		<comments>http://www.ajaxbestiary.com/2008/04/09/domassistant-27-has-landed/#comments</comments>
		<pubDate>Wed, 09 Apr 2008 13:45:19 +0000</pubDate>
		<dc:creator>Don Albrecht</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[DOMAssistant]]></category>
		<category><![CDATA[Release]]></category>

		<guid isPermaLink="false">http://www.ajaxbestiary.com/?p=319</guid>
		<description><![CDATA[DOMAssitant 2.7 is a solid improvement to the DOMAssistant framework with a clear focus on CSS. New functions: cssSelect AJAX setStyle setErrorHandling first Other Improvements Dramatic Improvements to the CSS Selector performance: I personally consider CSS selectors the most important feature of a framework so the dramatic improvements really help sell me the benefits of [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>DOMAssitant 2.7 is a solid improvement to the DOMAssistant framework with a clear focus on CSS.</p>
<p><strong>New functions:</strong></p>
<ul>
<li><a href="http://www.domassistant.com/documentation/DOMAssistantCore-module.php#cssSelect"><code>cssSelect</code></a></li>
<li><a href="http://www.domassistant.com/documentation/DOMAssistantAJAX-module.php#ajax"><code><acronym title="Asynchronous Javascript and XML">AJAX</acronym></code></a></li>
<li><a href="http://www.domassistant.com/documentation/DOMAssistantCSS-module.php#setStyle"><code>setStyle</code></a></li>
<li><a href="http://www.domassistant.com/documentation/DOMAssistantLoad-module.php#setErrorHandling"><code>setErrorHandling</code></a></li>
<li><a href="http://www.domassistant.com/documentation/DOMAssistantCore-module.php#first"><code>first</code></a></li>
</ul>
<h2>Other Improvements</h2>
<ul>
<li>Dramatic Improvements to the CSS Selector performance: I personally consider CSS selectors the most important feature of a framework so the dramatic improvements really help sell me the benefits of the 2.7 release.</li>
<li>Unicode Support.  This can be a really big one for a variety of reasons.  Personally, I think it should be built into all frameworks from day one (It is built into javascript after all).</li>
</ul>
<p>You can find out more about the new release here:</p>
<p><a href="http://www.robertnyman.com/2008/04/09/domassistant-27-released-better-faster-slimmer-new-features/">http://www.robertnyman.com/2008/04/09/domassistant-27-released-better-faster-slimmer-new-features/</a></p>
<p><img src="http://www.ajaxbestiary.com/?voyeur=1"></p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.ajaxbestiary.com/2008/04/09/domassistant-27-has-landed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Back in Action</title>
		<link>http://www.ajaxbestiary.com/2008/03/17/back-in-action/</link>
		<comments>http://www.ajaxbestiary.com/2008/03/17/back-in-action/#comments</comments>
		<pubDate>Tue, 18 Mar 2008 01:08:15 +0000</pubDate>
		<dc:creator>Don Albrecht</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ajaxbestiary.com/2008/03/17/back-in-action/</guid>
		<description><![CDATA[It&#8217;s been a crazy several months, new town, new job etc&#8230; I&#8217;m finally in a position to start posting again, so you can expect semi regular updates from here on.]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>It&#8217;s been a crazy several months, new town, new job etc&#8230;</p>
<p>I&#8217;m finally in a position to start posting again, so you can expect semi regular updates from here on.</p>
<p><img src="http://www.ajaxbestiary.com/?voyeur=1"></p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.ajaxbestiary.com/2008/03/17/back-in-action/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apologies</title>
		<link>http://www.ajaxbestiary.com/2008/02/13/apologies/</link>
		<comments>http://www.ajaxbestiary.com/2008/02/13/apologies/#comments</comments>
		<pubDate>Wed, 13 Feb 2008 14:42:06 +0000</pubDate>
		<dc:creator>Don Albrecht</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ajaxbestiary.com/2008/02/13/apologies/</guid>
		<description><![CDATA[Hi everyone, I haven&#8217;t been posting lately and I apologize for that.  I&#8217;m in the process of orchestrating a move and all the headaches that entails as well as finalizing all of my projects at my current job.  I simply don&#8217;t have time for AB right now. Regular updates will resume in March.]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Hi everyone,</p>
<p>I haven&#8217;t been posting lately and I apologize for that.  I&#8217;m in the process of orchestrating a move and all the headaches that entails as well as finalizing all of my projects at my current job.  I simply don&#8217;t have time for AB right now.<br />
Regular updates will resume in March.</p>
<p><img src="http://www.ajaxbestiary.com/?voyeur=1"></p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.ajaxbestiary.com/2008/02/13/apologies/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>In The Trenches, Perspectives on Rich Web Development from Entrepreneurs Vol 1: Ian Lotinsky</title>
		<link>http://www.ajaxbestiary.com/2007/12/21/in-the-trenches-perspectives-on-rich-web-development-from-entrepreneurs-vol-1-ian-lotinsky/</link>
		<comments>http://www.ajaxbestiary.com/2007/12/21/in-the-trenches-perspectives-on-rich-web-development-from-entrepreneurs-vol-1-ian-lotinsky/#comments</comments>
		<pubDate>Fri, 21 Dec 2007 17:02:29 +0000</pubDate>
		<dc:creator>Don Albrecht</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.ajaxbestiary.com/2007/12/21/in-the-trenches-perspectives-on-rich-web-development-from-entrepreneurs-vol-1-ian-lotinsky/</guid>
		<description><![CDATA[Today I bring you the first in what I hope will be an entire series interviewing startup developers on the technical speedbumps they faced in bringing a web based software product from conception to production.  Today&#8217;s interview is with Ian Lotinksy, one of the two founders of SandwichBoard a web based CMS targeted at restaurants. [...]]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Today I bring you the first in what I hope will be an entire series interviewing startup developers on the technical speedbumps they faced in bringing a web based software product from conception to production.  Today&#8217;s interview is with Ian Lotinksy, one of the two founders of SandwichBoard a web based CMS targeted at restaurants.</p>
<p>If you are interested in participating in an interview and getting some free publicity for your product, or know someone who might be, please use <a href="http://www.ajaxbestiary.com/2007/12/11/promote-your-project-on-ajax-bestiary/" title="this form to let me know" id="r33x">this form to let me know</a>.</p>
<p>The interview is after the jump<br />
<span id="more-288"></span><br />
<strong>In September you and Patrick Joyce decided to build SandwichBoard.  Were you already Ruby on Rails developers?</strong></p>
<p>We were not doing that for work, at work we were dealing primarily with ASP.NET version 2.0.  We started with ASP.NET 1.1 and upgraded some sites to 2.0.   We were also doing some development in J2EE and were doing client side languages and so on.</p>
<p><strong>Had either of you played with Ruby on Rails before or was this an extra step you took to learn this?</strong></p>
<p>It was an extra step for me.  Patrick had been dealing with Ruby on Rails for I believe an entire year prior to our departure.  He had built an invitation *web app* called easily invited which was supposed to be an improvement on eVite.  I don&#8217;t believe it is hosted right now but I think he has plans to re-host it.  He was initially hosting it on Amazon&#8217;s EC2 but he wasn&#8217;t getting the traffic he needed to justify the cost of hosting of about $75 a month I believe it was costing him to keep the website running.  He decided he wanted to switch it to something else, but I don&#8217;t think he&#8217;s had time to do that recently.</p>
<p>So, he had experience, I didn&#8217;t. I had been following it from an onlookers standpoint.  I was reading about it. Reading blog posts about it, absorbing some of it.  But it really wasn&#8217;t until May that I just went out and bought the Agile Web Development with Ruby on Rails Development, the Pickaxe book, Chad Fowler&#8217;s Rails Recipes Book &amp; started building a toy application.</p>
<p><strong>So were you already used to Agile Development?  Because you did Agile / Extreme Programing on top of Ruby. Was that new to you as well?</strong></p>
<p>As a formal practice yes.  At Lockheed Martin we&#8217;d used the waterfall method to develop our applications.  With our last big project at Lockheed, Patrick and I were on the same team.  We weren&#8217;t able to convince management to let us do it in an agile way.  But we ended up doing it in an agile way in that we took the requirements that were known and take a stab at implementing them.  We&#8217;d then present it to either the customer that was paying for the project or the user that would be using the project and then do the changes.  So we would do these small iterations.  I wouldn&#8217;t call them Agile iterations because they were a little bit longer than a week or two, But it was a break from traditional waterfall method.  It was a bit of a relief for us, at least in our environment.</p>
<p><strong>You chose to develop on a Mac, is that something you&#8217;d done before? </strong></p>
<p>Patrick had been using a Mac.  He had purchased both a Mac Mini &amp; a Powerbook and had been using them for a little over a year as well.  He really liked the integration of Unix and because a lot of the material that was already out there on Rails assumed you were using a Mac and because of the power that Patrick saw in Mac OS.  He basically made the decision that we were going to use this.  So he gave me the Mac Mini to use during the project. I&#8217;ve been using it as my primary machine.  So, I had to learn that with a little help from Patrick.  Whenever I got stuck I had to rely on just Googling stuff.  There are several white papers that IBM has on UNIX so I read those to get familiar with all the different commands.<br />
<br style="font-weight: bold" /><strong>You had to do a lot of learning, especially relative to your partner.  How did that work for you guys?</strong></p>
<p>The good news is that Patrick had lots of experience.  When I was at Lockheed I developed a habit of being able to learn stuff quickly.  Usually what that looked like was not trying to understand everything about the particular technology but to get at  the main point of each technology?  What are the main features? What&#8217;s the power behind it?  What&#8217;s the strength that it has?  I focused on the core competencies of each language and framework.  Once I learned that if I needed to look up something that was more obscure or hard to understand I could do the research to find it.  I figured out I could do just as well focusing on the core of the technology.  That sort of mentality lent itself to learning Ruby on Rails as well.</p>
<p>What&#8217;s nice about Ruby on Rails as well is that it&#8217;s a very opinionated framework. Typically, there&#8217;s a best way of doing things and that really helped me.  It wasn&#8217;t that there was 2 or 3 ways of doing things.  Rails is opinionated and it chooses this one way of doing things.  If you want to take a different route you could, but it&#8217;s difficult and most of the decisions that they&#8217;ve made is stuff that I would agree with naturally.</p>
<p>Also having books and blogs that I was visiting helped.  Railscast is a blog by Ryan Bates of 2 to 5 minute videos you can watch.  He just does little tasks in Rails and teaches you different aspects of it.  Watching those consistently and using a lot of plugins and open-source helped as well.  The Rails Community has a lot of developers who are a little bit more mature than your average ASP.Net developer, so you know the code your looking at, while not perfect, is likely better than your regular ASP.Net web application.  We had the ability to look at some really nice Rails code that gave us the ability to learn that way.</p>
<p><strong>About how early in the process did you bring in your beta testers.</strong></p>
<p>We brought them in in late August / early September.  We had been doing development for over a month and had the basics of our web app done.  That&#8217;s when we started talking with them and getting them started.  One of them was running off our stuff in October.  We&#8217;ve just been staying in touch with them periodically and watching their sites pretty closely just to see how they&#8217;re using it and how things are performing.  Just to make sure that it is running the way they expect it to run and that they&#8217;re using all the features that are there.</p>
<p>We&#8217;re about to push our latest and last revisions to the code-base before going to public beta.  Once we get that pushed out, we can really push hard at the marketing end to really get people signed up and using it and giving us a lot more feedback.</p>
<p><strong>How much feedback did you actually have with your beta testers?</strong></p>
<p>It&#8217;s largely been over telephone, a little bit over email. What it&#8217;s looked like is just calling them up or sending emails saying &#8220;How&#8217;s SandwichBoard functioning for you?  Is there anything you&#8217;re running into that&#8217;s a problem?  Are there any features that should be added?&#8221;</p>
<p>So far we haven&#8217;t gotten many comments about things that haven&#8217;t worked or worked well.  The best comment we&#8217;ve gotten wasn&#8217;t from one of the beta testers but was instead from one of the beta testers girlfriend who was upset that her boyfriend was up til 3 AM working on his restaurant&#8217;s site because he was having too much fun.</p>
<p><strong>Looking back, are you happy with some of the decisions you&#8217;ve made?  Are there things you would have done differently?</strong></p>
<p>No, I think one of the strengths of what we&#8217;re doing and our team is really Patrick&#8217;s ability to evaluate the scope of our project as well as direct the architecture of what we&#8217;re building.  In &#8220;Mythical Man Month&#8221;, Fred Brooks talks about having an architect on the team.  The architect may not be the only one with ideas, but he&#8217;s the one responsible for the overall architecture for the system. He&#8217;s the one who chooses what goes in and what goes out and how things are implemented.  We discussed early on before we started coding just how we were going to work and I suggested he take that role because of his technical aptitude, his prior experience with Rails and Mac OSX and his ability to learn things quickly.  I thought &#8220;he needs to be the architect of this&#8221; and so far that&#8217;s worked well.<br />
<br style="font-weight: bold" /><strong>Any final remarks?</strong></p>
<p>Making the commitment to leave secure jobs to go do this, although assumes some risk, has been quite enjoyable.  We&#8217;ve learned a lot doing this so that even if this fails miserably, we will have taken away a lot from the experience.  From the frameworks we&#8217;ve used, the open-source code that we&#8217;ve seen and the architecture that we&#8217;ve been able to piece together has made us stronger developers.  Even if this only means a four or five months hiatus from being part of a larger organization it will have paid off in making us better developers.</p>
<p><strong>About Ian Lotinksy<br />
</strong><br />
Ian Lotinsky (<a href="http://www.ianlotinsky.com/" title="ianlotinsky.com" id="m7.m">ianlotinsky.com</a>) is a cofounder of <a href="http://www.getsandwichboard.com/" title="SandwichBoard" id="a5ky">SandwichBoard</a>, located just outside Washington, D.C. If he&#8217;s not helping restaurants with their online branding, he&#8217;s probably spending time with his family, his friends, or his Lord.</p>
<p><img src="http://www.ajaxbestiary.com/?voyeur=1"></p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.ajaxbestiary.com/2007/12/21/in-the-trenches-perspectives-on-rich-web-development-from-entrepreneurs-vol-1-ian-lotinsky/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Minor Safari 3 Frustration:</title>
		<link>http://www.ajaxbestiary.com/2007/12/07/minor-safari-3-frustration/</link>
		<comments>http://www.ajaxbestiary.com/2007/12/07/minor-safari-3-frustration/#comments</comments>
		<pubDate>Fri, 07 Dec 2007 15:49:48 +0000</pubDate>
		<dc:creator>Don Albrecht</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Browser Quirk]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://www.ajaxbestiary.com/2007/12/07/minor-safari-3-frustration/</guid>
		<description><![CDATA[Alright, so I&#8217;ve been developing a minor frustration with Safari 3 on my Mac.  When I cut and paste between a url in firefox and a Tiny MCE window in Safari, a styled span is applied to the paste.  I&#8217;m not sure where it&#8217;s coming from. Ex.  http://nurey.com/corners.html]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>Alright, so I&#8217;ve been developing a minor frustration with Safari 3 on my Mac.  When I cut and paste between a url in firefox and a Tiny MCE window in Safari, a styled span is applied to the paste.  I&#8217;m not sure where it&#8217;s coming from. Ex.  <span style="font-family: Helvetica; font-size: 12px; line-height: normal" class="Apple-style-span">http://nurey.com/corners.html</span></p>
<p><img src="http://www.ajaxbestiary.com/?voyeur=1"></p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.ajaxbestiary.com/2007/12/07/minor-safari-3-frustration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Excellent Introduction to jQuery</title>
		<link>http://www.ajaxbestiary.com/2007/11/30/excellent-introduction-to-jquery/</link>
		<comments>http://www.ajaxbestiary.com/2007/11/30/excellent-introduction-to-jquery/#comments</comments>
		<pubDate>Fri, 30 Nov 2007 18:48:38 +0000</pubDate>
		<dc:creator>Don Albrecht</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://www.ajaxbestiary.com/2007/11/30/excellent-introduction-to-jquery/</guid>
		<description><![CDATA[John Resig has just posted an excellent resource for getting your feet wet with jQuery and even introducing some advanced features you may not yet be familiar with. The presentation &#38; source files are available here: http://ejohn.org/blog/building-interactive-prototypes-with-jquery/]]></description>
			<content:encoded><![CDATA[
<!-- google_ad_section_start -->
<p>John Resig has just posted an excellent resource for getting your feet wet with jQuery and even introducing some advanced features you may not yet be familiar with.</p>
<p>The presentation &amp; source files are available here:</p>
<p><a href="http://ejohn.org/blog/building-interactive-prototypes-with-jquery/">http://ejohn.org/blog/building-interactive-prototypes-with-jquery/</a></p>
<p><img src="http://www.ajaxbestiary.com/?voyeur=1"></p>
<!-- google_ad_section_end -->
]]></content:encoded>
			<wfw:commentRss>http://www.ajaxbestiary.com/2007/11/30/excellent-introduction-to-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

