<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Robertdot, A Web Design Blog</title>
	
	<link>http://robertdot.org</link>
	<description>A web design blog for designers that develop or developers that design.</description>
	<lastBuildDate>Mon, 12 Oct 2009 15:17:12 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/robertdot" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Two Odd IE Behaviors</title>
		<link>http://feedproxy.google.com/~r/robertdot/~3/GNRWeYzojXU/</link>
		<comments>http://robertdot.org/2009/10/12/two-odd-ie-behaviors/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 15:17:12 +0000</pubDate>
		<dc:creator>Robert</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://robertdot.org/?p=191</guid>
		<description><![CDATA[
 I noticed two odd Internet Explorer (or IE for short) behaviors while I was working on a beta version of a network tools app my boss wanted.  I also figured out the workaround.

Dynamically Visible DIVs Don&#8217;t Appear

 I used a tab-based navigation for the beta version.  When you click on a tab [...]]]></description>
			<content:encoded><![CDATA[<p>
 I noticed two odd Internet Explorer (or IE for short) behaviors while I was working on a beta version of a <a href="http://inetfor.us/">network tools app</a> my boss wanted.  I also figured out the workaround.
</p>
<h3>Dynamically Visible <code>DIV</code>s Don&#8217;t Appear</h3>
<p>
 I used a tab-based navigation for the beta version.  When you click on a tab (composed of an <code>h2</code> and an <code>a</code>), the corresponding <code>div</code> would appear, hiding all the others.  This was achieved by adding and removing a value in the <code>.className</code>.  In IE, though, the tab would work for two tabs, but would only hide tabs after that.  The new tab wouldn&#8217;t appear.
</p>
<p>
 To make matters worse, if I <code>alert</code>ed something in the loop that set or unset the <code>.className</code>s, it would work.  I tried various things like <code>.display="none"</code> while I was modifying things, then setting it back to <code>block</code> when I was done, but none worked.
</p>
<p>
 The solution turns out to be that you need to remove the container element, then reinsert it.  For example:
</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> tabcont <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'tab-container'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	pn <span style="color: #339933;">=</span> tabcont.<span style="color: #660066;">parentNode</span><span style="color: #339933;">,</span>
	ns <span style="color: #339933;">=</span> tabcont.<span style="color: #660066;">nextSibling</span><span style="color: #339933;">;</span>
pn.<span style="color: #660066;">insertBefore</span><span style="color: #009900;">&#40;</span>pn.<span style="color: #660066;">removeChild</span><span style="color: #009900;">&#40;</span>tabcont<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> ns<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h3><abbr title="Document Object Model">DOM</abbr> Created <code>TABLE</code>s Don&#8217;t Show Content</h3>
<p>
 I also needed to dynamically create tables.  This can be done via straight text with <code>.innerHTML</code> or via the DOM with <code>document.createElement</code> and <code>.appendChild</code>.  In some areas, the <code>table</code>s could use <code>thead</code> because the row headers were on top of the table.  Other times, the <code>th</code> was in the same <code>tr</code> as the <code>td</code> it matches.
</p>
<p>
 In instances where there was a <code>thead</code>, I also created a <code>tbody</code>.  Where there weren&#8217;t, I didn&#8217;t bother because the browser usually figures that stuff out.  IE does not.  So, if you&#8217;re using the DOM method of creating tables, make sure you explicitly use a <code>tbody</code>.
</p>
<p>
 For the record, I was also using a <code>caption</code>.  So, that may have triggered something in IE that wanted an explicit <code>tbody</code>.  If your stuff seems to be working fine without the <code>tbody</code>, it may have more to do with <code>caption</code> being present.</p>
<img src="http://feeds.feedburner.com/~r/robertdot/~4/GNRWeYzojXU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://robertdot.org/2009/10/12/two-odd-ie-behaviors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://robertdot.org/2009/10/12/two-odd-ie-behaviors/</feedburner:origLink></item>
		<item>
		<title>Site Specific Hacks</title>
		<link>http://feedproxy.google.com/~r/robertdot/~3/0jj_PcSTRqc/</link>
		<comments>http://robertdot.org/2009/04/08/site-specific-hacks/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 14:18:03 +0000</pubDate>
		<dc:creator>Robert</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Browser Compatibility]]></category>
		<category><![CDATA[Browsers]]></category>

		<guid isPermaLink="false">http://robertdot.org/?p=186</guid>
		<description><![CDATA[
 The other day, I finally got curious about the Site Specific Hacks option in the Develop menu of Safari.  It turns out that browsers do their own hacks to certain known problem sites to make them work.  Safari allows developers to turn off these hacks in the event that the developer is [...]]]></description>
			<content:encoded><![CDATA[<p>
 The other day, I finally got curious about the <samp>Site Specific Hacks</samp> option in the <samp>Develop</samp> menu of Safari.  It turns out that browsers do their own hacks to certain known problem sites to make them work.  Safari allows developers to turn off these hacks in the event that the developer is fixing a site that has hacks in Safari.
</p>
<p>
 Opera, on the other hand, has <a href="http://my.opera.com/core/blog/show.dml/3130540">a very advanced method for dealing with site specific hacks</a>.  It&#8217;s worth a read just so to know what kind of stuff goes on in the browser that most people, including developers, never think about.  They also link to how other browsers deal with the problem.</p>
<img src="http://feeds.feedburner.com/~r/robertdot/~4/0jj_PcSTRqc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://robertdot.org/2009/04/08/site-specific-hacks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://robertdot.org/2009/04/08/site-specific-hacks/</feedburner:origLink></item>
		<item>
		<title>Triangles in CSS</title>
		<link>http://feedproxy.google.com/~r/robertdot/~3/YHqnmnNYtCQ/</link>
		<comments>http://robertdot.org/2009/03/25/triangles-in-css/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 17:46:52 +0000</pubDate>
		<dc:creator>Robert</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Tricks]]></category>

		<guid isPermaLink="false">http://robertdot.org/?p=179</guid>
		<description><![CDATA[
I was reading Image-free CSS Tooltip Pointers and realized the trick of triangles in CSS.  These odd little polygonal things have been around for awhile, but I just now figured out how the triangle works.


 Basically, where two borders meet (e.g. border-top and border-left), a diagonal line is drawn where they meet, making a [...]]]></description>
			<content:encoded><![CDATA[<p>
I was reading <a href="http://www.filamentgroup.com/lab/image_free_css_tooltip_pointers_a_use_for_polygonal_css/">Image-free CSS Tooltip Pointers</a> and realized the trick of triangles in <abbr title="Cascading Style Sheets">CSS</abbr>.  These odd little polygonal things have been around for awhile, but I just now figured out how the triangle works.
</p>
<p>
 Basically, where two borders meet (e.g. <code>border-top</code> and <code>border-left</code>), a diagonal line is drawn where they meet, making a neat bezel effect, rather than having the top border sit above the left border.  For example:
</p>
<div style="margin: auto; border: 10px solid red; border-left-color: blue; border-right-color: green; border-bottom-color: yellow; height: 20px; width: 20px; background: gray;"></div>
<p>
 On the <code>div</code> above, you can see the diagonal lines where the borders meet.
</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="htmlstrict" style="font-family:monospace;">&lt;div style=&quot;margin: auto; border: 10px solid red; border-left-color: blue; border-right-color: green; border-bottom-color: yellow; height: 20px; width: 20px; background: gray;&quot;&gt;&lt;/div&gt;</pre></td></tr></table></div>

<p>
 Taking advantage of this, it&#8217;s easy to set the color of some borders to transparent and end up with a polygon.
</p>
<div style="margin: auto; border: 10px solid red; border-left-color: transparent; border-right-color: transparent; border-bottom-color: transparent; height: 0px; width: 20px;"></div>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="htmlstrict" style="font-family:monospace;">&lt;div style=&quot;margin: auto; border: 10px solid red; border-left-color: transparent; border-right-color: transparent; border-bottom-color: transparent; height: 20px; width: 20px;&quot;&gt;&lt;/div&gt;</pre></td></tr></table></div>

<p>
 Take that principle and mess around with it, and you can make triangles.  For example:
</p>
<div style="position: relative; width: 100px; height: 100px; margin: auto;">
<div style="width:0; height:0; border-left: 5px solid transparent;  border-right: 5px solid transparent; border-top: 5px solid blue; border-bottom: 0; position: absolute; bottom: 0px; left: 50%;"></div>
<div style="width:0; height:0; border-left: 5px solid transparent;  border-right: 5px solid transparent; border-bottom: 5px solid blue; border-top: 0; position: absolute; top: 0px; left: 50%;"></div>
<div style="width:0; height:0; border-top: 5px solid transparent;  border-bottom: 5px solid transparent; border-right: 5px solid blue; border-left: 0; position: absolute; top: 50%; left: 0px;"></div>
<div style="width:0; height:0; border-top: 5px solid transparent;  border-bottom: 5px solid transparent; border-left: 5px solid blue; border-right: 0; position: absolute; top: 50%; right: 0px;""></div>
<div style="width:0; height:0; border-left: 7px solid blue;  border-right: 7px solid transparent; border-top: 7px solid transparent; border-bottom: 0; position: absolute; bottom: 0px; left: 0px;""></div>
<div style="width:0; height:0; border-left: 7px solid blue;  border-right: 7px solid transparent; border-bottom: 7px solid transparent; border-top: 0; position: absolute; top: 0px; left: 0px;""></div>
<div style="width:0; height:0; border-left: 7px solid transparent;  border-right: 7px solid blue; border-bottom: 7px solid transparent; border-top: 0; position: absolute; top: 0px; right: 0px;""></div>
<div style="width:0; height:0; border-left: 7px solid transparent;  border-right: 7px solid blue; border-top: 7px solid transparent; border-bottom: 0; position: absolute; bottom: 0px; right: 0px;""></div>
</p></div>
<p>
 Above, you have north, south, east, west, northeast, northwest, southeast, and southwest (in no particular order).
</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="htmlstrict" style="font-family:monospace;"> &lt;div style=&quot;position: relative; width: 100px; height: 100px; margin: auto;&quot;&gt;
  &lt;div style=&quot;width:0; height:0; border-left: 5px solid transparent;  border-right: 5px solid transparent; border-top: 5px solid blue; border-bottom: 0; position: absolute; bottom: 0px; left: 50%;&quot;&gt;&lt;/div&gt; 
  &lt;div style=&quot;width:0; height:0; border-left: 5px solid transparent;  border-right: 5px solid transparent; border-bottom: 5px solid blue; border-top: 0; position: absolute; top: 0px; left: 50%;&quot;&gt;&lt;/div&gt; 
  &lt;div style=&quot;width:0; height:0; border-top: 5px solid transparent;  border-bottom: 5px solid transparent; border-right: 5px solid blue; border-left: 0; position: absolute; top: 50%; left: 0px;&quot;&gt;&lt;/div&gt; 
  &lt;div style=&quot;width:0; height:0; border-top: 5px solid transparent;  border-bottom: 5px solid transparent; border-left: 5px solid blue; border-right: 0; position: absolute; top: 50%; right: 0px;&quot;&quot;&gt;&lt;/div&gt; 
  &lt;div style=&quot;width:0; height:0; border-left: 7px solid blue;  border-right: 7px solid transparent; border-top: 7px solid transparent; border-bottom: 0; position: absolute; bottom: 0px; left: 0px;&quot;&quot;&gt;&lt;/div&gt; 
  &lt;div style=&quot;width:0; height:0; border-left: 7px solid blue;  border-right: 7px solid transparent; border-bottom: 7px solid transparent; border-top: 0; position: absolute; top: 0px; left: 0px;&quot;&quot;&gt;&lt;/div&gt; 
  &lt;div style=&quot;width:0; height:0; border-left: 7px solid transparent;  border-right: 7px solid blue; border-bottom: 7px solid transparent; border-top: 0; position: absolute; top: 0px; right: 0px;&quot;&quot;&gt;&lt;/div&gt; 
  &lt;div style=&quot;width:0; height:0; border-left: 7px solid transparent;  border-right: 7px solid blue; border-top: 7px solid transparent; border-bottom: 0; position: absolute; bottom: 0px; right: 0px;&quot;&quot;&gt;&lt;/div&gt; 
 &lt;/div&gt;</pre></td></tr></table></div>

<p>
 So, as you can see, it&#8217;s pretty easy to make a triangle.  Adjust the border widths to make them bigger.</p>
<img src="http://feeds.feedburner.com/~r/robertdot/~4/YHqnmnNYtCQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://robertdot.org/2009/03/25/triangles-in-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://robertdot.org/2009/03/25/triangles-in-css/</feedburner:origLink></item>
		<item>
		<title>Internet Explorer 8 Released</title>
		<link>http://feedproxy.google.com/~r/robertdot/~3/wbxdqJIdVZc/</link>
		<comments>http://robertdot.org/2009/03/19/internet-explorer-8-released/#comments</comments>
		<pubDate>Fri, 20 Mar 2009 00:07:50 +0000</pubDate>
		<dc:creator>Robert</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[IE8]]></category>
		<category><![CDATA[Internet Explorer]]></category>

		<guid isPermaLink="false">http://robertdot.org/?p=177</guid>
		<description><![CDATA[If you didn&#8217;t already hear (and I bet you already did), Internet Explorer 8 has been released.  For several months, I&#8217;ve been using the release candidates with the Internet Explorer 7 Compatibility Mode to test sites in IE7 and IE8.  So far, IE8 seems like a pretty good release.  I haven&#8217;t had [...]]]></description>
			<content:encoded><![CDATA[<p>If you didn&#8217;t already hear (and I bet you already did), Internet Explorer 8 has been released.  For several months, I&#8217;ve been using the release candidates with the Internet Explorer 7 Compatibility Mode to test sites in IE7 and IE8.  So far, IE8 seems like a pretty good release.  I haven&#8217;t had a chance to update yet, but I&#8217;m hoping hard that things have only gotten better.</p>
<img src="http://feeds.feedburner.com/~r/robertdot/~4/wbxdqJIdVZc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://robertdot.org/2009/03/19/internet-explorer-8-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://robertdot.org/2009/03/19/internet-explorer-8-released/</feedburner:origLink></item>
		<item>
		<title>Browsers and Form Collection</title>
		<link>http://feedproxy.google.com/~r/robertdot/~3/qSMv21AdkfI/</link>
		<comments>http://robertdot.org/2009/02/18/browsers-and-form-collection/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 21:19:09 +0000</pubDate>
		<dc:creator>Robert</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Browser Compatibility]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Forms]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Opera]]></category>

		<guid isPermaLink="false">http://robertdot.org/?p=175</guid>
		<description><![CDATA[
 I&#8217;ve been writing a new form hijacker.  Since this one is a pretty big deal for me, I wanted to make sure it was properly implemented.  I implemented against my interpretation of the HTML 4 specification and did a pretty good job since I&#8217;m exactly compatible with Firefox, Opera, and Internet Explorer [...]]]></description>
			<content:encoded><![CDATA[<p>
 I&#8217;ve been writing a new form hijacker.  Since this one is a pretty big deal for me, I wanted to make sure it was properly implemented.  I implemented against my interpretation of the <abbr title="HyperText Markup Language">HTML</abbr> 4 specification and did a pretty good job since I&#8217;m exactly compatible with Firefox, Opera, and Internet Explorer 8.  Safari, Internet Explorer 6, and Internet Explorer 7 seem to have some bugs.
</p>
<p>
 Safari seems to send the values of un<code>name</code>ed <code>select</code>s, despite these elements being invalid.  So, you may get a query string like <samp>text1=test&amp;=selval</samp> if your <code>select</code> that contained an <code>option="selval"</code> doesn&#8217;t have a <code>name</code>.
</p>
<p>
 Internet Explorer 6 and 7 both mishandle <code>button</code>s.  Internet Explorer 6 sends all <code>buttons</code> with <code>name</code> attributes set, even though it should only send the <code>button</code> if it was clicked.  Internet Explorer 7 doesn&#8217;t send unclicked <code>buttons</code>, but any time Internet Explorer 6 or 7 sends a <code>button</code> it sends the <code>button</code>&#8217;s <code>innerHTML</code> instead of the value.
</p>
<p>
 So, given the deficiencies above, here&#8217;s how to compensate.  If you&#8217;re using PHP, you don&#8217;t need to worry about Safari sending <code>name</code>less <code>select</code>s as PHP seems to ignore them (or at least in <code>parse_str</code>).  If you plan to use <code>button</code>s, never give them names or values.  Use <code>radio</code> controls if you have to do conditional actions based on what the user clicks.
</p>
<p>
 I still have some other testing to do, but these findings should help you cover your bases if you&#8217;re working with forms.</p>
<img src="http://feeds.feedburner.com/~r/robertdot/~4/qSMv21AdkfI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://robertdot.org/2009/02/18/browsers-and-form-collection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://robertdot.org/2009/02/18/browsers-and-form-collection/</feedburner:origLink></item>
		<item>
		<title>Yahoo! Updates Graded Browser Support</title>
		<link>http://feedproxy.google.com/~r/robertdot/~3/JytTmpQyI40/</link>
		<comments>http://robertdot.org/2009/01/29/yahoo-updates-graded-browser-support/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 16:22:54 +0000</pubDate>
		<dc:creator>Robert</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Browser Support]]></category>
		<category><![CDATA[Browsers]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[Safari]]></category>

		<guid isPermaLink="false">http://robertdot.org/?p=173</guid>
		<description><![CDATA[
 Yahoo! updated it&#8217;s Graded Browser Support yesterday.  The changes involved dropping support for non-Safari browsers on Mac OS X 10.4 and non-Internet Explorer browsers on Windows 2000.  Support for Internet Explorer 8 was added for Windows XP and Windows Vista.


 This has given clout to support Internet Explorer 8 (which is in [...]]]></description>
			<content:encoded><![CDATA[<p>
 Yahoo! updated it&#8217;s <a href="http://yuiblog.com/blog/2009/01/28/gbs-update-20090128/">Graded Browser Support</a> yesterday.  The changes involved dropping support for non-Safari browsers on Mac OS X 10.4 and non-Internet Explorer browsers on Windows 2000.  Support for Internet Explorer 8 was added for Windows XP and Windows Vista.
</p>
<p>
 This has given clout to support Internet Explorer 8 (which is in Release Candidate version now) in addition to versions 6 and 7.  Here&#8217;s hoping Microsoft forces Internet Explorer 8 upgrades now that version targeting has been implemented.</p>
<img src="http://feeds.feedburner.com/~r/robertdot/~4/JytTmpQyI40" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://robertdot.org/2009/01/29/yahoo-updates-graded-browser-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://robertdot.org/2009/01/29/yahoo-updates-graded-browser-support/</feedburner:origLink></item>
		<item>
		<title>Old Stuff Up, New Stuff On The Way</title>
		<link>http://feedproxy.google.com/~r/robertdot/~3/D3WUQmQHVI8/</link>
		<comments>http://robertdot.org/2009/01/20/old-stuff-up-new-stuff-on-the-way/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 19:40:35 +0000</pubDate>
		<dc:creator>Robert</dc:creator>
				<category><![CDATA[Meta]]></category>

		<guid isPermaLink="false">http://robertdot.org/?p=169</guid>
		<description><![CDATA[
 I finally finished importing all the relevant old content from Robertdots of yore.  It amounted to about 36-ish posts.  I&#8217;ve set up all the 301 redirects and pulled the 503 I&#8217;ve had running for a month or more.

 I still have some editing to do on older stuff and I there are [...]]]></description>
			<content:encoded><![CDATA[<p>
 I finally finished importing all the relevant old content from Robertdots of yore.  It amounted to about 36-ish posts.  I&#8217;ve set up all the 301 redirects and pulled the 503 I&#8217;ve had running for a month or more.</p>
<p><p>
 I still have some editing to do on older stuff and I there are still some areas of the <abbr title="Cascading Style Sheets">CSS</abbr> that I need to address.  The pressing stuff is done, though.  In the days ahead, I&#8217;ll concern myself with new stuff.</p>
<img src="http://feeds.feedburner.com/~r/robertdot/~4/D3WUQmQHVI8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://robertdot.org/2009/01/20/old-stuff-up-new-stuff-on-the-way/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://robertdot.org/2009/01/20/old-stuff-up-new-stuff-on-the-way/</feedburner:origLink></item>
		<item>
		<title>Apologies For Old Content</title>
		<link>http://feedproxy.google.com/~r/robertdot/~3/q-5HpLoFNj0/</link>
		<comments>http://robertdot.org/2009/01/14/apologies-for-old-content/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 17:16:11 +0000</pubDate>
		<dc:creator>Robert</dc:creator>
				<category><![CDATA[Meta]]></category>

		<guid isPermaLink="false">http://robertdot.org/?p=121</guid>
		<description><![CDATA[
 I started working on importing all the old content I planned on keeping on the site.  So far, I&#8217;ve only posted two or three old stories, but I have another 30-something in the queue.  So, I want to apologize to anyone who reads my news feeds for all this old content showing [...]]]></description>
			<content:encoded><![CDATA[<p>
 I started working on importing all the old content I planned on keeping on the site.  So far, I&#8217;ve only posted two or three old stories, but I have another 30-something in the queue.  So, I want to apologize to anyone who reads my news feeds for all this old content showing up.  At this point, I don&#8217;t know how to make WordPress understand that these posts are old and need to (at least) be appended to the feed.
</p>
<p>
 Until I get through all the old stuff (hopefully by the end of the week), please be patient.</p>
<img src="http://feeds.feedburner.com/~r/robertdot/~4/q-5HpLoFNj0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://robertdot.org/2009/01/14/apologies-for-old-content/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://robertdot.org/2009/01/14/apologies-for-old-content/</feedburner:origLink></item>
		<item>
		<title>Adding Location Awareness to Your Site</title>
		<link>http://feedproxy.google.com/~r/robertdot/~3/39fUvdGpqfQ/</link>
		<comments>http://robertdot.org/2009/01/09/adding-location-awareness-to-your-site/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 19:46:52 +0000</pubDate>
		<dc:creator>Robert</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Fire Eagle]]></category>
		<category><![CDATA[Google Maps]]></category>
		<category><![CDATA[Location Services]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[Yahoo Weather]]></category>

		<guid isPermaLink="false">http://robertdot-org.robertb.org/?p=18</guid>
		<description><![CDATA[
 I recently launched a new personal site.  I wanted to integrate some level of location awareness to it.  My initial design sketches called for the weather information and a position on a map of my last known location.


 Initially, I was using a program on my iPhone called Loopt.  Loopt is like Twitter with [...]]]></description>
			<content:encoded><![CDATA[<p>
 I recently launched a new personal site.  I wanted to integrate some level of location awareness to it.  My initial design sketches called for the weather information and a position on a map of my last known location.
</p>
<p>
 Initially, I was using a program on my iPhone called Loopt.  Loopt is like Twitter with location.  That involved jumping through hoops, as Loopt&#8217;s RSS feed only shows the GPS position of the last post.  Not only would I have to post a message every time I got somewhere, I&#8217;d have to reverse geocode my position to grab the zip code to send to get the weather information.  I achieved this through JavaScript with the Google Maps API.  This worked until I found out about <a href="http://fireeagle.yahoo.net/">Fire Eagle</a>.
</p>
<p>
 All Fire Eagle does is log your location.  Luckily, Fire Eagle has an <abbr title="Application Programming Interface">API</abbr>.  <a href="http://www.eaglefeed.me">Eagle Feed</a> turns your location into a publicly accessible <abbr title="Really Simple Syndication">RSS</abbr> feed.  So, getting your location is as easy as parsing an RSS feed.  By setting the read level of Eagle Feed to <samp>my zip code</samp>, the <code>title</code> of the single <code>item</code> in the RSS feed reports my city, state, and zip (e.g. <samp>Birmingham, AL 35223</samp>), and my GPS coordinates are also in the feed.
</p>
<p>
 You can update Fire Eagle by manually by entering your location on the site.  However, there are mobile applications, such as Active Eagle on the iPhone, that use the <abbr title="Global Positioning Satellite">GPS</abbr> functionality of your device to update Fire Eagle.  In Active Eagle, I simply tap &#8220;Update Fire Eagle&#8221; to update my location, and my Eagle Feed.
</p>
<p>
 Once you can get your feed there are plenty of cool things you can do.
</p>
<p>
 I wrote a simple <abbr title="PHP Hypertext Preprocessor">PHP</abbr> script to open my feed (or pull it from a cached file), grab the human-readable location from the <code>title</code> and parse out the zip code and my GPS position.
</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$out</span> <span style="color: #339933;">=</span> <span style="color: #990000;">file_get_contents</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$feed_url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">preg_match_all</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/&lt;title&gt;(.*?)&lt;\/title&gt;/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$out</span><span style="color: #339933;">,</span> <span style="color: #000088;">$loc_matches</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$human_loc</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$loc_matches</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/\d{5}/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$human_loc</span><span style="color: #339933;">,</span> <span style="color: #000088;">$loc_matches</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$human_zip</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$loc_matches</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/&lt;abbr class=&quot;latitude&quot;.*?&gt;(.*?)&lt;\/abbr&gt;/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$out</span><span style="color: #339933;">,</span> <span style="color: #000088;">$lat</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$loc_lat</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$lat</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/&lt;abbr class=&quot;longitude&quot;.*?&gt;(.*?)&lt;\/abbr&gt;/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$out</span><span style="color: #339933;">,</span> <span style="color: #000088;">$long</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$loc_long</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$long</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>
 I then pass my zip code to <a href="http://developer.yahoo.com/weather/">Yahoo&#8217;s weather feeds</a> to get weather data.  I also pass my GPS position to <a href="http://code.google.com/apis/maps/documentation/staticmaps/">Google Maps Static API</a> to get a map of where I am.
</p>
<p>
 Another idea would be to show Flickr photos in your area via the <a href="http://www.flickr.com/services/api/">Flickr API</a>.  I&#8217;m sure there are tons of other things that would be fun or useful.  Come up with some more ideas and make some cool stuff.</p>
<img src="http://feeds.feedburner.com/~r/robertdot/~4/39fUvdGpqfQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://robertdot.org/2009/01/09/adding-location-awareness-to-your-site/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://robertdot.org/2009/01/09/adding-location-awareness-to-your-site/</feedburner:origLink></item>
		<item>
		<title>The State of Web Fonts</title>
		<link>http://feedproxy.google.com/~r/robertdot/~3/5Nv7lItO0kc/</link>
		<comments>http://robertdot.org/2009/01/08/the-state-of-web-fonts/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 15:23:55 +0000</pubDate>
		<dc:creator>Robert</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Browser Support]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Web Fonts]]></category>
		<category><![CDATA[Web Standards]]></category>

		<guid isPermaLink="false">http://robertdot.org/?p=33</guid>
		<description><![CDATA[
 A long time ago, Microsoft started making use of @font-face (also called web fonts) in CSS.  This would have been revolutionary if not for the fact that using fonts required the designer to encode them into a weak DRM file called an EOT, which stands for Embedded OpenType.  Open indeed.  Things [...]]]></description>
			<content:encoded><![CDATA[<p>
 A long time ago, Microsoft started making use of <code>@font-face</code> (also called web fonts) in <abbr title="Cascading Style Sheets">CSS</abbr>.  This would have been revolutionary if not for the fact that using fonts required the designer to encode them into a weak <abbr title="Digital Rights Management">DRM</abbr> file called an EOT, which stands for Embedded OpenType.  Open indeed.  Things are starting to look up now.
</p>
<p>
 The great thing about Microsoft trying to introduce this is that it would have ended an era of Web Safe fonts and &#8220;download this font to view my page properly&#8221; messaging before Web Safe fonts were understood.  Unfortunately, no other browser bothered implementing the CSS or EOT and <code>@font-face</code> fell into obscurity for many years, forcing web designers to use images of text.  EOT&#8217;s major flaw was that it pandered to font makers and left web designers jumping through hoops to create font files.
</p>
<p>
 Microsoft apparently has strong corporate ties to certain Font Industry big-wigs, and they didn&#8217;t want to upset them.  Better to make life hard for your developers than help font makers come up with workable solutions for licensing web fonts (like hosting font files and checking the <code>HTTP_REFERER</code> for the correct domain before allowing access to the font file, which seems as good as the weak DRM of EOT files).  When you are the most commonly used browser, I guess you can do stuff like that and still have your CEO chant, &#8220;Developers! Developers! Developers!&#8221;  The problem is that Microsoft didn&#8217;t anticipate empowering font creation software like <a href="http://fontstruct.fontshop.com/">FontStruct</a> that lets mere mortals create fonts under Creative Commons licenses.  Frankly, it&#8217;s unfair to force me to put DRM on stuff I create if I don&#8217;t want it.
</p>
<p>
 Eventually, some good people created <a href="http://www.mikeindustries.com/sifr">sIFR</a>, which allowed designers to (with great effort) cobble together a Flash file that embedded a font.  Adding some JavaScript code to the page allowed designers to add fonts in a more accessible, user-friendly manner than simply using images of text.  While sIFR had some problems (for example, links in headings were buggy and the text wouldn&#8217;t resize with the browser), it was a breath of fresh air.  Suddenly, it was only a little work to have nice typographic options for limited use in headers and the like.
</p>
<p>
 Recently, Apple (in the form of WebKit) and Opera have brought back the <code>@font-face</code>.  Luckily, Apple and Opera didn&#8217;t bend over for the Font Industry.  They boldly allowed support of plain-old TrueType fonts.  With half of the major rendering engines supporting easy web fonts (and Firefox support on the way), I decided to give EOT another shot.  That would allow me to have four out of five browsers (that I support) rendering my fonts out-of-the-box with sIFR as a worse-case fallback.
</p>
<p>
 The results were mixed.  Using <code>@font-face</code> is progressive enhancement with CSS and using sIFR is progressive enhancement with JavaScript and Flash.  To start, I went through the lengthy and buggy trial and error process of creating an EOT with <a href="http://www.microsoft.com/typography/web/embedding/weft3/">WEFT</a>.  After getting that worked out, I added the following to my screen stylesheet:
</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #a1a100;">@font-face {</span>
	<span style="color: #000000; font-weight: bold;">font-family</span><span style="color: #00AA00;">:</span> <span style="color: #ff0000;">&quot;MyFont Sans&quot;</span><span style="color: #00AA00;">;</span>
	src<span style="color: #00AA00;">:</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">&quot;../media/myfont_sans.ttf&quot;</span><span style="color: #00AA00;">&#41;</span> format<span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">&quot;truetype&quot;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
&nbsp;
<span style="color: #a1a100;">@font-face {</span>
	<span style="color: #000000; font-weight: bold;">font-family</span><span style="color: #00AA00;">:</span> <span style="color: #ff0000;">&quot;MyFont Sans IE&quot;</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">font-style</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">normal</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">font-weight</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">normal</span><span style="color: #00AA00;">;</span>
	src<span style="color: #00AA00;">:</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000;">&quot;../media/MYFONTS0.eot&quot;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>
 I could then set a font by specifying <code>font-family: MyFont Sans, MyFont Sans IE, sans-serif;</code>.  In Safari, Opera, and Internet Explorer, my site used a custom font.  Other browsers fell back so a system chosen sans serif font if the font <code>MyFont Sans</code> was not installed on the system.  That gets us half way there.
</p>
<p>
 The next step is to create the sIFR and load it only if it is needed.
</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> MYSITE <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
	sifr<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>
	init<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>window.<span style="color: #660066;">getComputedStyle</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #003366; font-weight: bold;">var</span> ff <span style="color: #339933;">=</span> document.<span style="color: #660066;">defaultView</span>.<span style="color: #660066;">getComputedStyle</span><span style="color: #009900;">&#40;</span>h<span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">getPropertyValue</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'font-family'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #000066; font-weight: bold;">switch</span><span style="color: #009900;">&#40;</span>ff.<span style="color: #660066;">toLowerCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">'myfont sans'</span><span style="color: #339933;">:</span>
				<span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">'&quot;myfont sans&quot;'</span><span style="color: #339933;">:</span>
				<span style="color: #000066; font-weight: bold;">case</span> <span style="color: #3366CC;">&quot;'myfont sans'&quot;</span><span style="color: #339933;">:</span>
					MYSITE.<span style="color: #660066;">sifr</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
			MYSITE.<span style="color: #660066;">sifr</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>MYSITE.<span style="color: #660066;">sifr</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			MYSITE.<span style="color: #660066;">setSifr</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
	setSifr<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #006600; font-style: italic;">// Code enabling sIFR</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>window.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	window.<span style="color: #660066;">addEventListener</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'load'</span><span style="color: #339933;">,</span> MYSITE.<span style="color: #660066;">init</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>window.<span style="color: #660066;">attachEvent</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	window.<span style="color: #660066;">attachEvent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'onload'</span><span style="color: #339933;">,</span> MYSITE.<span style="color: #660066;">init</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
	window.<span style="color: #000066;">onload</span> <span style="color: #339933;">=</span> MYSITE.<span style="color: #660066;">init</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>
 The script runs after the page loads.  Checking for <code>window.getComputedStyle</code> ensures that any standards compliant browser that supports web fonts will not get sIFR, since the browser will report that it is using <code>MyFont Sans</code>.  Firefox, if I remember correctly, reports a list of fonts, but it ends up in the result of Firefox getting sIFR.  Once Firefox has web fonts support, this script will need to be reevaluated.  If the browser doesn&#8217;t support <code>getComputedStyle</code>, the browser is (probably) Internet Explorer, which supports web fonts.  So, we can turn sIFR off.
</p>
<p>
 Finally, any browser that needs sIFR will execute <code>MYSITE.setSifr();</code>, adding the custom fonts to the page.
</p>
<p>
 This should provide custom font support in most major browsers.  The only caveat is that a suitable fallback should be chosen (one that looks similar to the <code>@font-face</code> font, rather than <code>sans-serif</code> mentioned above), as browsers without Flash or without JavaScript will see the fallback font if the browser doesn&#8217;t support web fonts.
</p>
<p>
 Since we have a suitable fallback with sIFR when web fonts aren&#8217;t available to the browser, there is a good enough methodology for implementing custom typography on live sites that don&#8217;t support web fonts.  Until Firefox releases support for web fonts, it may be too much trouble to implement.  However, in the spirit of progressive enhancement, one could skip the sIFR step and simply allow the installed system font fallback, <a href="http://boagworld.com/technology/effective_browser_support/">as pixel-perfect cross browser support is turning into an obsolete, undesirable practice</a> and <a href="http://forabeautifulweb.com/blog/about/five_css_design_browser_differences_i_can_live_with/">progressive enhancement is becoming common place</a>.
</p>
<p>
 The final rub is Microsoft&#8217;s persistence in supporting EOT and not TrueType or OpenType fonts.  While it is possible to get web fonts in Internet Explorer, it is a royal pain to create EOT files.  If it&#8217;s too much effort, using sIFR or keeping the tenants of progressive enhancement with CSS may be a workable solution.
</p>
<p>
 So, it seems web fonts have almost come of age.  Once Firefox supports <code>@font-face</code>, web fonts can be used on a wide scale.  While you may not want to jump on the bandwagon yet, it is definitely time to start looking into web fonts.</p>
<img src="http://feeds.feedburner.com/~r/robertdot/~4/5Nv7lItO0kc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://robertdot.org/2009/01/08/the-state-of-web-fonts/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://robertdot.org/2009/01/08/the-state-of-web-fonts/</feedburner:origLink></item>
	</channel>
</rss>
