<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>XUL</title><link>http://blogs.acceleration.net/ryan/category/26.aspx</link><description>XUL development</description><managingEditor>Ryan</managingEditor><dc:language>en-US</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>Ryan</dc:creator><title>Contributing to Firefox cont.</title><link>http://blogs.acceleration.net/ryan/archive/2005/12/15/2807.aspx</link><pubDate>Thu, 15 Dec 2005 09:29:00 GMT</pubDate><guid>http://blogs.acceleration.net/ryan/archive/2005/12/15/2807.aspx</guid><description>&lt;p&gt;
				  A few weeks ago I wrote about &lt;a href="http://blogs.acceleration.net/ryan/archive/2005/11/30/2805.aspx"&gt;Contributing to Firefox on WinXP&lt;/a&gt;,
				  and last night, my patch got committed to the trunk!  Whenever the next Firefox point release comes out, millions of people
				  will be using the simple for loop that I wrote.  Here's how the process worked:
				&lt;/p&gt;
				&lt;ol&gt;
				  &lt;li&gt;11-30-2005: submitted patch and requested review&lt;/li&gt;
				  &lt;li&gt;12-04-2005: passed review&lt;/li&gt;
				  &lt;li&gt;12-14-2005: I politely asked around on &lt;a href="irc://irc.mozilla.org/xul"&gt;#xul&lt;/a&gt; and 
					 &lt;a href="irc://irc.mozilla.org/developers"&gt;#developers&lt;/a&gt; if there was anything else I was expected to do 
					 before the patch was committed.  I was told to email the reviewer or make a comment on the bug.  I opted to make
					 a comment on the bug.&lt;/li&gt;
				  &lt;li&gt;12-14-2005: Gavin Sharp replied to my comment apologizing for the delay, and committed my patch.&lt;/li&gt;
				&lt;/ol&gt;
				&lt;p&gt;
				  So, except for the 10-day delay and slight confusion over my role, I'd say it went pretty smoothly.  This experience
				  certainly encourages me to make more contributions.  I've been using 
				  &lt;a href="http://www.mozilla.org/projects/calendar/sunbird.html"&gt;Sunbird&lt;/a&gt; for calendar stuff, and have seen a few minor
				  glitches in that, maybe I'll toss in a patch or two there next.
				&lt;/p&gt;&lt;img src ="http://blogs.acceleration.net/ryan/aggbug/2807.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>
				  A few weeks ago I wrote about <a href="http://blogs.acceleration.net/ryan/archive/2005/11/30/2805.aspx">Contributing to Firefox on WinXP</a>,
				  and last night, my patch got committed to the trunk!  Whenever the next Firefox point release comes out, millions of people
				  will be using the simple for loop that I wrote.  Here's how the process worked:
				</p>
				<ol>
				  <li>11-30-2005: submitted patch and requested review</li>
				  <li>12-04-2005: passed review</li>
				  <li>12-14-2005: I politely asked around on <a href="irc://irc.mozilla.org/xul">#xul</a> and 
					 <a href="irc://irc.mozilla.org/developers">#developers</a> if there was anything else I was expected to do 
					 before the patch was committed.  I was told to email the reviewer or make a comment on the bug.  I opted to make
					 a comment on the bug.</li>
				  <li>12-14-2005: Gavin Sharp replied to my comment apologizing for the delay, and committed my patch.</li>
				</ol>
				<p>
				  So, except for the 10-day delay and slight confusion over my role, I'd say it went pretty smoothly.  This experience
				  certainly encourages me to make more contributions.  I've been using 
				  <a href="http://www.mozilla.org/projects/calendar/sunbird.html">Sunbird</a> for calendar stuff, and have seen a few minor
				  glitches in that, maybe I'll toss in a patch or two there next.
				</p><img src ="http://blogs.acceleration.net/ryan/aggbug/2807.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Ryan</dc:creator><title>Contributing to Firefox on WinXP</title><link>http://blogs.acceleration.net/ryan/archive/2005/11/30/2805.aspx</link><pubDate>Wed, 30 Nov 2005 12:54:00 GMT</pubDate><guid>http://blogs.acceleration.net/ryan/archive/2005/11/30/2805.aspx</guid><description>&lt;p&gt;
				  In the process of converting my remote XUL apps to use Firefox 1.5, I found a bug in &lt;code&gt;&amp;lt;tree&amp;gt;&lt;/code&gt;.
				  The column picker breaks when you've added things to Array.prototype.  That took many hours to find, after removing and re-adding
				  countless lines of XUL and javascript.  It came down to some functions we were adding to Array.prototype in one of
				  our libraries.  When I commented those out, it worked just fine.  I installed the 
				  &lt;a href="http://forums.mozillazine.org/viewtopic.php?t=318102"&gt;Console&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; extension, which gives some better
				  error reporting, and found the a javascript error occurring in a file called &lt;code&gt;tree.xml&lt;/code&gt;.  It was a mess of XBL,
				  but the problem was apparent.
				&lt;/p&gt;
				
				The orignal code:
				&lt;div class="CodeBlock"&gt;

				  &lt;table class="dp-c" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="line"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt; hidden = !tree.enableColumnDrag; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="line"&gt;&lt;span class="keyword"&gt;const&lt;/span&gt;&lt;span&gt; anonids = [&lt;/span&gt;&lt;span class="string"&gt;"menuseparator"&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span class="string"&gt;"menuitem"&lt;/span&gt;&lt;span&gt;]; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="line"&gt;&lt;span class="keyword"&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt; anonid &lt;/span&gt;&lt;span class="keyword"&gt;in&lt;/span&gt;&lt;span&gt; anonids) { &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="line"&gt;  &lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt; element = document.getAnonymousElementByAttribute(&lt;/span&gt;&lt;span class="keyword"&gt;this&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span class="string"&gt;"anonid"&lt;/span&gt;&lt;span&gt;, anonids[anonid]); &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="line"&gt;  element.hidden = hidden; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="line"&gt;} &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
				&lt;/div&gt;
				&lt;p&gt;
				  The problem is the usage of &lt;code&gt;in&lt;/code&gt;.  &lt;code&gt;in&lt;/code&gt; is rather introspective, and  will iterate over all 
				  the properties on the object, including user-added functions.  
				  My guess is the author of this code is used to the Python &lt;code&gt;in&lt;/code&gt; keyword, which
				  just iterates over the values in the object.  I figure changing that to not use the in keyword should solve the problem:
				&lt;/p&gt;
				&lt;div class="CodeBlock"&gt;
				  &lt;table class="dp-c" border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="line"&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt; hidden = !tree.enableColumnDrag; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="line"&gt;&lt;span class="keyword"&gt;const&lt;/span&gt;&lt;span&gt; anonids = [&lt;/span&gt;&lt;span class="string"&gt;"menuseparator"&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span class="string"&gt;"menuitem"&lt;/span&gt;&lt;span&gt;]; &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="line"&gt;&lt;span class="keyword"&gt;for&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt; i = 0; i &amp;lt; anonids.length; i++) { &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="line"&gt;  &lt;span class="keyword"&gt;var&lt;/span&gt;&lt;span&gt; element = document.getAnonymousElementByAttribute(&lt;/span&gt;&lt;span class="keyword"&gt;this&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span class="string"&gt;"anonid"&lt;/span&gt;&lt;span&gt;, anonids[i]); &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="line"&gt;  element.hidden = hidden; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="line"&gt;} &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
				&lt;/div&gt;
				&lt;p&gt;
				  To test this out, I went into my Firefox chrome directory (&lt;code&gt;C:\Program Files\Mozilla Firefox\chrome&lt;/code&gt; for me), 
				  unpacked &lt;code&gt;toolkit.jar&lt;/code&gt;, and made that change in &lt;code&gt;chrome\toolkit\content\global\bindings\tree.xml&lt;/code&gt;.  
				  &lt;a href="http://forums.mozillazine.org/viewtopic.php?t=318102"&gt;Console&lt;sup&gt;2&lt;/sup&gt;&lt;/a&gt; let me know where to look.  In 
				  order to get Firefox to read my files, I had to edit &lt;code&gt;chrome\toolkit.manifest&lt;/code&gt; to look in the unpacked 
				  directory instead of the jar.
				&lt;/p&gt;
				Original toolkit reference:
				&lt;div class="CodeBlock"&gt;
				  content mozapps jar:toolkit.jar!/content/mozapps/ xpcnativewrappers=yes
				&lt;/div&gt;
				New toolkit reference:
				&lt;div class="CodeBlock"&gt;
				  content mozapps toolkit/content/mozapps/ xpcnativewrappers=yes
				&lt;/div&gt;
				&lt;p&gt;
				  Now that Firefox is looking at the unpacked source with the updated &lt;code&gt;tree.xml&lt;/code&gt;, I restarted Firefox and 
				  saw that it worked.  The next step was to file a bug, and submit a patch.
				&lt;/p&gt;
				&lt;p&gt;
				  As this was the first time I filed a bug at &lt;a href="https://bugzilla.mozilla.org/"&gt;Bugzilla&lt;/a&gt;, I did it wrong.
				  Asking
				  around on &lt;a href="irc://irc.mozilla.org/js"&gt;#js&lt;/a&gt;, Hannibal kindly told me to make a diff from CVS, and request a review.  I had to install 
				  &lt;a href="http://www.cygwin.com"&gt;cygwin&lt;/a&gt;, and 
				  partially followed &lt;a href="http://whereswalden.com/"&gt;Jeff&lt;/a&gt;'s instructions for 
				  &lt;a href="http://whereswalden.com/mozilla/msvcfree/"&gt;setting up an MSVC toolkit Firefox/Thunderbird build environment&lt;/a&gt;.
				  I wasn't concerned with needing to actually build it, so I only followed the bits about &lt;a href="http://www.cygwin.com"&gt;cygwin&lt;/a&gt;.
				  After getting a bash shell working, I followed the 
				  &lt;a href="http://developer.mozilla.org/en/docs/Mozilla_Source_Code_Via_CVS"&gt;Mozilla Source Code via CVS&lt;/a&gt; 
				  instructions, and got the source on my machine.  The build failed, but I didn't need it to build me anything, I just needed all
				  the source.
				&lt;/p&gt;
				&lt;p&gt;
				  Once I had the source, it was all very easy, following the 
				  &lt;a href="http://developer.mozilla.org/en/docs/Mozilla_Source_Code_Via_CVS"&gt;Mozilla Source Code via CVS&lt;/a&gt; verbatim.
				  After some browsing, I found a policy page for Toolkit patches, the 
				  &lt;a href="http://www.mozilla.org/projects/toolkit/review.html"&gt;Tookit Review Requirements&lt;/a&gt;.
				  From there I uploaded my patch to &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=318036"&gt;my bug&lt;/a&gt;, and
				  requested review.  Within an hour or so, my request had been bumped to another toolkit dev, (the original guy is on vacation),
				  and  &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=318036"&gt;my bug&lt;/a&gt;'s status had gone from UNCONFIRMED to NEW, and its looking to be put in the mozilla1.9alpha1 milestone.
				&lt;/p&gt;
				&lt;p&gt;
				  So, it looks like I might get a very trivial piece of code into Firefox, and have learned a lot more about how Mozilla's internals
				  work, and how open source development works.  If I get ambitious, I might get the source for other Mozilla projects and see 
				  if I can contribute to those.
				&lt;/p&gt;&lt;img src ="http://blogs.acceleration.net/ryan/aggbug/2805.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>
				  In the process of converting my remote XUL apps to use Firefox 1.5, I found a bug in <code>&lt;tree&gt;</code>.
				  The column picker breaks when you've added things to Array.prototype.  That took many hours to find, after removing and re-adding
				  countless lines of XUL and javascript.  It came down to some functions we were adding to Array.prototype in one of
				  our libraries.  When I commented those out, it worked just fine.  I installed the 
				  <a href="http://forums.mozillazine.org/viewtopic.php?t=318102">Console<sup>2</sup></a> extension, which gives some better
				  error reporting, and found the a javascript error occurring in a file called <code>tree.xml</code>.  It was a mess of XBL,
				  but the problem was apparent.
				</p>
				
				The orignal code:
				<div class="CodeBlock">

				  <table class="dp-c" border="0" cellpadding="0" cellspacing="0"><tbody><tr></tr><tr><td class="line"><span></span><span class="keyword">var</span><span> hidden = !tree.enableColumnDrag; </span></td></tr><tr><td class="line"><span class="keyword">const</span><span> anonids = [</span><span class="string">"menuseparator"</span><span>, </span><span class="string">"menuitem"</span><span>]; </span></td></tr><tr><td class="line"><span class="keyword">for</span><span> (</span><span class="keyword">var</span><span> anonid </span><span class="keyword">in</span><span> anonids) { </span></td></tr><tr><td class="line">  <span class="keyword">var</span><span> element = document.getAnonymousElementByAttribute(</span><span class="keyword">this</span><span>, </span><span class="string">"anonid"</span><span>, anonids[anonid]); </span></td></tr><tr><td class="line">  element.hidden = hidden; </td></tr><tr><td class="line">} </td></tr></tbody></table>
				</div>
				<p>
				  The problem is the usage of <code>in</code>.  <code>in</code> is rather introspective, and  will iterate over all 
				  the properties on the object, including user-added functions.  
				  My guess is the author of this code is used to the Python <code>in</code> keyword, which
				  just iterates over the values in the object.  I figure changing that to not use the in keyword should solve the problem:
				</p>
				<div class="CodeBlock">
				  <table class="dp-c" border="0" cellpadding="0" cellspacing="0"><tbody><tr></tr><tr><td class="line"><span></span><span class="keyword">var</span><span> hidden = !tree.enableColumnDrag; </span></td></tr><tr><td class="line"><span class="keyword">const</span><span> anonids = [</span><span class="string">"menuseparator"</span><span>, </span><span class="string">"menuitem"</span><span>]; </span></td></tr><tr><td class="line"><span class="keyword">for</span><span> (</span><span class="keyword">var</span><span> i = 0; i &lt; anonids.length; i++) { </span></td></tr><tr><td class="line">  <span class="keyword">var</span><span> element = document.getAnonymousElementByAttribute(</span><span class="keyword">this</span><span>, </span><span class="string">"anonid"</span><span>, anonids[i]); </span></td></tr><tr><td class="line">  element.hidden = hidden; </td></tr><tr><td class="line">} </td></tr></tbody></table>
				</div>
				<p>
				  To test this out, I went into my Firefox chrome directory (<code>C:\Program Files\Mozilla Firefox\chrome</code> for me), 
				  unpacked <code>toolkit.jar</code>, and made that change in <code>chrome\toolkit\content\global\bindings\tree.xml</code>.  
				  <a href="http://forums.mozillazine.org/viewtopic.php?t=318102">Console<sup>2</sup></a> let me know where to look.  In 
				  order to get Firefox to read my files, I had to edit <code>chrome\toolkit.manifest</code> to look in the unpacked 
				  directory instead of the jar.
				</p>
				Original toolkit reference:
				<div class="CodeBlock">
				  content mozapps jar:toolkit.jar!/content/mozapps/ xpcnativewrappers=yes
				</div>
				New toolkit reference:
				<div class="CodeBlock">
				  content mozapps toolkit/content/mozapps/ xpcnativewrappers=yes
				</div>
				<p>
				  Now that Firefox is looking at the unpacked source with the updated <code>tree.xml</code>, I restarted Firefox and 
				  saw that it worked.  The next step was to file a bug, and submit a patch.
				</p>
				<p>
				  As this was the first time I filed a bug at <a href="https://bugzilla.mozilla.org/">Bugzilla</a>, I did it wrong.
				  Asking
				  around on <a href="irc://irc.mozilla.org/js">#js</a>, Hannibal kindly told me to make a diff from CVS, and request a review.  I had to install 
				  <a href="http://www.cygwin.com">cygwin</a>, and 
				  partially followed <a href="http://whereswalden.com/">Jeff</a>'s instructions for 
				  <a href="http://whereswalden.com/mozilla/msvcfree/">setting up an MSVC toolkit Firefox/Thunderbird build environment</a>.
				  I wasn't concerned with needing to actually build it, so I only followed the bits about <a href="http://www.cygwin.com">cygwin</a>.
				  After getting a bash shell working, I followed the 
				  <a href="http://developer.mozilla.org/en/docs/Mozilla_Source_Code_Via_CVS">Mozilla Source Code via CVS</a> 
				  instructions, and got the source on my machine.  The build failed, but I didn't need it to build me anything, I just needed all
				  the source.
				</p>
				<p>
				  Once I had the source, it was all very easy, following the 
				  <a href="http://developer.mozilla.org/en/docs/Mozilla_Source_Code_Via_CVS">Mozilla Source Code via CVS</a> verbatim.
				  After some browsing, I found a policy page for Toolkit patches, the 
				  <a href="http://www.mozilla.org/projects/toolkit/review.html">Tookit Review Requirements</a>.
				  From there I uploaded my patch to <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=318036">my bug</a>, and
				  requested review.  Within an hour or so, my request had been bumped to another toolkit dev, (the original guy is on vacation),
				  and  <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=318036">my bug</a>'s status had gone from UNCONFIRMED to NEW, and its looking to be put in the mozilla1.9alpha1 milestone.
				</p>
				<p>
				  So, it looks like I might get a very trivial piece of code into Firefox, and have learned a lot more about how Mozilla's internals
				  work, and how open source development works.  If I get ambitious, I might get the source for other Mozilla projects and see 
				  if I can contribute to those.
				</p><img src ="http://blogs.acceleration.net/ryan/aggbug/2805.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Ryan</dc:creator><title>People using my software?</title><link>http://blogs.acceleration.net/ryan/archive/2005/10/06/2784.aspx</link><pubDate>Thu, 06 Oct 2005 11:17:00 GMT</pubDate><guid>http://blogs.acceleration.net/ryan/archive/2005/10/06/2784.aspx</guid><description>I made some small changes to &lt;a href="http://blogs.acceleration.net/ryan/articles/2018.aspx"&gt;TaskPool&lt;/a&gt;, in preparation for some folks at &lt;a href="http://www.infinitesoft.com/"&gt;ISI&lt;/a&gt; to start trying it out.  (those of you who know me know how that one came about :)&lt;img src ="http://blogs.acceleration.net/ryan/aggbug/2784.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml">I made some small changes to <a href="http://blogs.acceleration.net/ryan/articles/2018.aspx">TaskPool</a>, in preparation for some folks at <a href="http://www.infinitesoft.com/">ISI</a> to start trying it out.  (those of you who know me know how that one came about :)<img src ="http://blogs.acceleration.net/ryan/aggbug/2784.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Ryan</dc:creator><title>Remote XUL and ASP.NET</title><link>http://blogs.acceleration.net/ryan/archive/2005/10/04/2782.aspx</link><pubDate>Tue, 04 Oct 2005 18:21:00 GMT</pubDate><guid>http://blogs.acceleration.net/ryan/archive/2005/10/04/2782.aspx</guid><description>&lt;p&gt;
         I've now gotten permission to use XUL for another client, and this time around, 
         I'm trying it a little differently.
      &lt;/p&gt;
      &lt;p&gt;
         Rather than serving up a &lt;code&gt;.xul&lt;/code&gt; file, and doing everything with 
         overlays, DOM manipulation, and XBL, I'm serving up a &lt;code&gt;.aspx&lt;/code&gt; file, 
         setting its content-type to &lt;code&gt;application/vnd.mozilla.xul+xml&lt;/code&gt;, and 
         then using ASP.NET to render XUL instead of HTML. Jeb (do you have a link, 
         Jeb?) said he was creating XUL apps this way using JSP, so I figured I'd give 
         it a try. So far I like it. This method lets me lean on my ASP.NET skills while 
         I build up the XUL skills.
      &lt;/p&gt;
      &lt;h2&gt;How I have it set up:&lt;/h2&gt;
      &lt;p&gt;
         &lt;/p&gt;&lt;ul&gt;
            &lt;li&gt;
               One &lt;code&gt;.aspx&lt;/code&gt; page per XUL layout, using &lt;code&gt;&amp;lt;html:a&amp;gt;&lt;/code&gt; tags 
               to navigate between them.&lt;/li&gt;
            &lt;li&gt;
               One ASP.NET user control is on each page, ensuring all XUL layouts have the 
               same template and include the same javascript and css files. I had tried do 
               this with &lt;a href="http://www.xulplanet.com/forum/viewtopic.php?t=844"&gt;overlays&lt;/a&gt;, 
               but didn't have much luck.
            &lt;/li&gt;
            &lt;li&gt;
               A few &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebIHttpHandlerClassTopic.asp"&gt;
                  IHttpHandler&lt;/a&gt;s to send RDF to my XUL, and &lt;a href="http://www.crockford.com/JSON/index.html"&gt;
                  JSON&lt;/a&gt; to my javascript.
            &lt;/li&gt;
            &lt;li&gt;
               A few webservices that get called by my javascript, and the work is done in C#.&lt;/li&gt;
         &lt;/ul&gt;
         This seems to work pretty well. The UI and the business logic is completely 
         seperate, and by using RDF I can take advantage of XUL templates to do lots of 
         nifty things on the client.
      
      &lt;p&gt;
         For now, I'm only using this on applications that require windows 
         authentication to access the site, so to access the web services you'll need to 
         be logged in. Security is still a concern, though, and eventually I'll have to 
         expose some of these web services to wild. I've been considering some token 
         system where the server passes a token to the client when it renders the xul 
         aspx page, and then the javascript passes that token to the web services, but I 
         haven't fleshed anything out yet.
      &lt;/p&gt;&lt;img src ="http://blogs.acceleration.net/ryan/aggbug/2782.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>
         I've now gotten permission to use XUL for another client, and this time around, 
         I'm trying it a little differently.
      </p>
      <p>
         Rather than serving up a <code>.xul</code> file, and doing everything with 
         overlays, DOM manipulation, and XBL, I'm serving up a <code>.aspx</code> file, 
         setting its content-type to <code>application/vnd.mozilla.xul+xml</code>, and 
         then using ASP.NET to render XUL instead of HTML. Jeb (do you have a link, 
         Jeb?) said he was creating XUL apps this way using JSP, so I figured I'd give 
         it a try. So far I like it. This method lets me lean on my ASP.NET skills while 
         I build up the XUL skills.
      </p>
      <h2>How I have it set up:</h2>
      <p>
         </p><ul>
            <li>
               One <code>.aspx</code> page per XUL layout, using <code>&lt;html:a&gt;</code> tags 
               to navigate between them.</li>
            <li>
               One ASP.NET user control is on each page, ensuring all XUL layouts have the 
               same template and include the same javascript and css files. I had tried do 
               this with <a href="http://www.xulplanet.com/forum/viewtopic.php?t=844">overlays</a>, 
               but didn't have much luck.
            </li>
            <li>
               A few <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebIHttpHandlerClassTopic.asp">
                  IHttpHandler</a>s to send RDF to my XUL, and <a href="http://www.crockford.com/JSON/index.html">
                  JSON</a> to my javascript.
            </li>
            <li>
               A few webservices that get called by my javascript, and the work is done in C#.</li>
         </ul>
         This seems to work pretty well. The UI and the business logic is completely 
         seperate, and by using RDF I can take advantage of XUL templates to do lots of 
         nifty things on the client.
      
      <p>
         For now, I'm only using this on applications that require windows 
         authentication to access the site, so to access the web services you'll need to 
         be logged in. Security is still a concern, though, and eventually I'll have to 
         expose some of these web services to wild. I've been considering some token 
         system where the server passes a token to the client when it renders the xul 
         aspx page, and then the javascript passes that token to the web services, but I 
         haven't fleshed anything out yet.
      </p><img src ="http://blogs.acceleration.net/ryan/aggbug/2782.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Ryan</dc:creator><title>TaskPool update again</title><link>http://blogs.acceleration.net/ryan/archive/2005/09/15/2779.aspx</link><pubDate>Thu, 15 Sep 2005 12:24:00 GMT</pubDate><guid>http://blogs.acceleration.net/ryan/archive/2005/09/15/2779.aspx</guid><description>Made a bug fix, the latest is available at the &lt;a href="http://blogs.acceleration.net/ryan/articles/2018.aspx"&gt;Taskpool article&lt;/a&gt;.&lt;img src ="http://blogs.acceleration.net/ryan/aggbug/2779.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml">Made a bug fix, the latest is available at the <a href="http://blogs.acceleration.net/ryan/articles/2018.aspx">Taskpool article</a>.<img src ="http://blogs.acceleration.net/ryan/aggbug/2779.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Ryan</dc:creator><title>TaskPool update</title><link>http://blogs.acceleration.net/ryan/archive/2005/08/11/2019.aspx</link><pubDate>Thu, 11 Aug 2005 14:50:00 GMT</pubDate><guid>http://blogs.acceleration.net/ryan/archive/2005/08/11/2019.aspx</guid><description>Made some more changes, and moved the details of TaskPool to it's own page:
&lt;a href="http://blogs.acceleration.net/ryan/articles/2018.aspx"&gt;behold!&lt;/a&gt;&lt;img src ="http://blogs.acceleration.net/ryan/aggbug/2019.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml">Made some more changes, and moved the details of TaskPool to it's own page:
<a href="http://blogs.acceleration.net/ryan/articles/2018.aspx">behold!</a><img src ="http://blogs.acceleration.net/ryan/aggbug/2019.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Ryan</dc:creator><title>XUL init.el additions</title><link>http://blogs.acceleration.net/ryan/archive/2005/08/11/2017.aspx</link><pubDate>Thu, 11 Aug 2005 13:59:00 GMT</pubDate><guid>http://blogs.acceleration.net/ryan/archive/2005/08/11/2017.aspx</guid><description>&lt;p&gt;
I've been doing XUL work in XEmacs, and it has been pissing me off that &lt;code&gt;xml-mode&lt;/code&gt; wasn't doing indenting or syntax highlighting automatically.  I finally asked &lt;a title="Nathan's blog" href="http://blogs.acceleration.net/birdman/"&gt;Nathan&lt;/a&gt; about it, and we figured out this addition to my init.el to make working with XML and XUL files indent nicer:
&lt;/p&gt;&lt;pre&gt;
;;make xul files start in xml mode
(setq auto-mode-alist
		(append '(("\.xul$" . xml-mode)) auto-mode-alist))

;;make xml-mode indent
(add-hook 'xml-mode-hook
			 (lambda ()
				(setq sgml-indent-data 'T)))
&lt;/pre&gt;
Much, much, much better.
&lt;img src ="http://blogs.acceleration.net/ryan/aggbug/2017.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>
I've been doing XUL work in XEmacs, and it has been pissing me off that <code>xml-mode</code> wasn't doing indenting or syntax highlighting automatically.  I finally asked <a title="Nathan's blog" href="http://blogs.acceleration.net/birdman/">Nathan</a> about it, and we figured out this addition to my init.el to make working with XML and XUL files indent nicer:
</p><pre>
;;make xul files start in xml mode
(setq auto-mode-alist
		(append '(("\.xul$" . xml-mode)) auto-mode-alist))

;;make xml-mode indent
(add-hook 'xml-mode-hook
			 (lambda ()
				(setq sgml-indent-data 'T)))
</pre>
Much, much, much better.
<img src ="http://blogs.acceleration.net/ryan/aggbug/2017.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Ryan</dc:creator><title>TaskPool update</title><link>http://blogs.acceleration.net/ryan/archive/2005/07/28/1857.aspx</link><pubDate>Thu, 28 Jul 2005 20:42:00 GMT</pubDate><guid>http://blogs.acceleration.net/ryan/archive/2005/07/28/1857.aspx</guid><description>&lt;p&gt;
		I'm pretty confident no one but me uses the &lt;a href="http://blogs.acceleration.net/ryan/archive/2005/07/07/1748.aspx"&gt;taskpool app&lt;/a&gt;, but just in case, 
		I just made a pretty major update.  In the last version, the
		tasks would get serialized to disk (in &lt;code&gt;rdf:local-store&lt;/code&gt;) when you closed
		the program.  Seeing as I leave my workstation on all the time, I rarely had the need to close the program.  
	&lt;/p&gt;
	&lt;p&gt;
		Today windows decided I had done one "ctrl-shift-b" too many and spontaneously rebooted, losing all the tasks I had built up over the
                  previous weeks of stability.  I spent some time tonight refactoring the code and making things save automagically, so now
		not even killing the xulrunner process loses my precious, precious data.  I also found some bugs where the rdf was getting corrupted, so that is
		fixed as well.
	&lt;/p&gt;
	&lt;p&gt;
	Downloads:
	&lt;/p&gt;&lt;ul&gt;
         &lt;li&gt;&lt;a href="http://birdman.acceleration.net/ryan/taskPoolBundled.zip"&gt;taskPoolBundled.zip&lt;/a&gt; (5685 KB)
            &lt;div style="MARGIN-LEFT: 10px"&gt;
               To run, unzip the file whereever you want, and run the "taskPool.bat".
            &lt;/div&gt;
         &lt;/li&gt;
         &lt;li&gt;&lt;a href="http://birdman.acceleration.net/ryan/taskPool.zip"&gt;taskPool.zip&lt;/a&gt; (55 KB)
            &lt;div style="MARGIN-LEFT: 10px"&gt;

               To run, unzip the file whereever you want, and run the "taskPool.bat".  You must have 
               &lt;a href="http://ftp.mozilla.org/pub/mozilla.org/xulrunner/nightly/latest-trunk/"&gt;downloaded XulRunner&lt;/a&gt;, and 
               have xulrunner.exe in your path.
            &lt;/div&gt;
         &lt;/li&gt;
      &lt;/ul&gt;
	&lt;img src ="http://blogs.acceleration.net/ryan/aggbug/1857.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>
		I'm pretty confident no one but me uses the <a href="http://blogs.acceleration.net/ryan/archive/2005/07/07/1748.aspx">taskpool app</a>, but just in case, 
		I just made a pretty major update.  In the last version, the
		tasks would get serialized to disk (in <code>rdf:local-store</code>) when you closed
		the program.  Seeing as I leave my workstation on all the time, I rarely had the need to close the program.  
	</p>
	<p>
		Today windows decided I had done one "ctrl-shift-b" too many and spontaneously rebooted, losing all the tasks I had built up over the
                  previous weeks of stability.  I spent some time tonight refactoring the code and making things save automagically, so now
		not even killing the xulrunner process loses my precious, precious data.  I also found some bugs where the rdf was getting corrupted, so that is
		fixed as well.
	</p>
	<p>
	Downloads:
	</p><ul>
         <li><a href="http://birdman.acceleration.net/ryan/taskPoolBundled.zip">taskPoolBundled.zip</a> (5685 KB)
            <div style="MARGIN-LEFT: 10px">
               To run, unzip the file whereever you want, and run the "taskPool.bat".
            </div>
         </li>
         <li><a href="http://birdman.acceleration.net/ryan/taskPool.zip">taskPool.zip</a> (55 KB)
            <div style="MARGIN-LEFT: 10px">

               To run, unzip the file whereever you want, and run the "taskPool.bat".  You must have 
               <a href="http://ftp.mozilla.org/pub/mozilla.org/xulrunner/nightly/latest-trunk/">downloaded XulRunner</a>, and 
               have xulrunner.exe in your path.
            </div>
         </li>
      </ul>
	<img src ="http://blogs.acceleration.net/ryan/aggbug/1857.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Ryan</dc:creator><title>TaskPool</title><link>http://blogs.acceleration.net/ryan/archive/2005/07/07/1748.aspx</link><pubDate>Thu, 07 Jul 2005 11:52:00 GMT</pubDate><guid>http://blogs.acceleration.net/ryan/archive/2005/07/07/1748.aspx</guid><description>&lt;p&gt;
      I've mentioned a little while back that I was working on a 
      &lt;a href="http://blogs.acceleration.net/ryan/archive/2005/05/06/1073.aspx"&gt;XULRunner app to keep track of my time&lt;/a&gt;, and I
      finally packaged it up for people to use.  It's pretty basic, allowing you to add tasks to a list, and click on the task to 
      start a timer.  I end up adding a handful of tasks to the list, then clicking between them as people call or I receive emails, 
      then every couple of days I punch the numbers into my billing system.
   &lt;/p&gt;
   &lt;p&gt;
      There are two distributions, one with the actual Win32 XULRunner app included, and one without.
      &lt;/p&gt;&lt;ul&gt;
         &lt;li&gt;&lt;a href="http://birdman.acceleration.net/ryan/taskPoolBundled.zip"&gt;taskPoolBundled.zip&lt;/a&gt; (5635 KB)
            &lt;div style="MARGIN-LEFT: 10px"&gt;
               To run, unzip the file whereever you want, and run the "taskPool.bat".
            &lt;/div&gt;
         &lt;/li&gt;
         &lt;li&gt;&lt;a href="http://birdman.acceleration.net/ryan/taskPool.zip"&gt;taskPool.zip&lt;/a&gt; (5 KB)
            &lt;div style="MARGIN-LEFT: 10px"&gt;
               To run, unzip the file whereever you want, and run the "taskPool.bat".  You must have 
               &lt;a href="http://ftp.mozilla.org/pub/mozilla.org/xulrunner/nightly/latest-trunk/"&gt;downloaded XulRunner&lt;/a&gt;, and 
               have xulrunner.exe in your path.
            &lt;/div&gt;
         &lt;/li&gt;
      &lt;/ul&gt;
      So, check it out, lemme know what you think.  I've got some plans to re-work the internals and store more data about the tasks, but 
      that will have to wait until I have some more spare time.  For now, back to &lt;a href="http://www.google.com/search?hl=en&amp;amp;q=define%3Acrud&amp;amp;btnG=Google+Search"&gt;CRUD&lt;/a&gt;!
   &lt;img src ="http://blogs.acceleration.net/ryan/aggbug/1748.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml"><p>
      I've mentioned a little while back that I was working on a 
      <a href="http://blogs.acceleration.net/ryan/archive/2005/05/06/1073.aspx">XULRunner app to keep track of my time</a>, and I
      finally packaged it up for people to use.  It's pretty basic, allowing you to add tasks to a list, and click on the task to 
      start a timer.  I end up adding a handful of tasks to the list, then clicking between them as people call or I receive emails, 
      then every couple of days I punch the numbers into my billing system.
   </p>
   <p>
      There are two distributions, one with the actual Win32 XULRunner app included, and one without.
      </p><ul>
         <li><a href="http://birdman.acceleration.net/ryan/taskPoolBundled.zip">taskPoolBundled.zip</a> (5635 KB)
            <div style="MARGIN-LEFT: 10px">
               To run, unzip the file whereever you want, and run the "taskPool.bat".
            </div>
         </li>
         <li><a href="http://birdman.acceleration.net/ryan/taskPool.zip">taskPool.zip</a> (5 KB)
            <div style="MARGIN-LEFT: 10px">
               To run, unzip the file whereever you want, and run the "taskPool.bat".  You must have 
               <a href="http://ftp.mozilla.org/pub/mozilla.org/xulrunner/nightly/latest-trunk/">downloaded XulRunner</a>, and 
               have xulrunner.exe in your path.
            </div>
         </li>
      </ul>
      So, check it out, lemme know what you think.  I've got some plans to re-work the internals and store more data about the tasks, but 
      that will have to wait until I have some more spare time.  For now, back to <a href="http://www.google.com/search?hl=en&amp;q=define%3Acrud&amp;btnG=Google+Search">CRUD</a>!
   <img src ="http://blogs.acceleration.net/ryan/aggbug/1748.aspx" width = "1" height = "1" /></body></item><item><dc:creator>Ryan</dc:creator><title>*sigh*</title><link>http://blogs.acceleration.net/ryan/archive/2005/07/06/1737.aspx</link><pubDate>Wed, 06 Jul 2005 11:16:00 GMT</pubDate><guid>http://blogs.acceleration.net/ryan/archive/2005/07/06/1737.aspx</guid><description>Javascript:

&lt;pre class="Code"&gt;
var uhoh = new Boolean('false');

if(uhoh) 
   alert('Aww, no...');
&lt;/pre&gt;

Aww, no...&lt;img src ="http://blogs.acceleration.net/ryan/aggbug/1737.aspx" width = "1" height = "1" /&gt;</description><body xmlns="http://www.w3.org/1999/xhtml">Javascript:

<pre class="Code">
var uhoh = new Boolean('false');

if(uhoh) 
   alert('Aww, no...');
</pre>

Aww, no...<img src ="http://blogs.acceleration.net/ryan/aggbug/1737.aspx" width = "1" height = "1" /></body></item></channel></rss>