<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 <title>tabqwerty</title>
 <link href="http://www.tabqwerty.com/atom.xml" rel="self"/>
 <link href="http://www.tabqwerty.com/"/>
 <updated>2012-01-18T11:58:16-08:00</updated>
 <id>http://tabqwerty.com/</id>
 <author>
   <name>Chi Wai Lau</name>
   <email>clau@tabqwerty.com</email>
 </author>
 
 <entry>
   <title>SOPA Blackout</title>
   <link href="http://www.tabqwerty.com/2012/01/18/sopa-blackout.html"/>
   <updated>2012-01-18T00:00:00-08:00</updated>
   <id>http://tabqwerty.com/2012/01/18/sopa-blackout</id>
   <content type="html">&lt;p&gt;Wikipedia is blacking out for 24 hours in protest of &lt;a href=&quot;http://en.wikipedia.org/wiki/Stop_Online_Piracy_Act&quot;&gt;&lt;span class=&quot;caps&quot;&gt;SOPA&lt;/span&gt;&lt;/a&gt;. The &lt;span class=&quot;caps&quot;&gt;SOPA&lt;/span&gt; page is probably the only viewable page today.. Can&amp;#8217;t live without Wikipedia? Try this in the JavaScript console:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;styleSheets&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;insertRule&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;#mw-page-base, #mw-head-base, #content, #mw-head, #mw-panel, #footer {display: inherit !important;}&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;styleSheets&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;insertRule&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;#mw-sopaOverlay {display: none !important;}&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;Or sign the &lt;a href=&quot;http://americancensorship.org&quot;&gt;petition&lt;/a&gt; to say NO to &lt;span class=&quot;caps&quot;&gt;SOPA&lt;/span&gt;!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt;: The Wikipedia blackout is driven by JavaScript. In the case of emergency, you can just disable JavaScript in your browser.&lt;/p&gt;</content>
   <author>
     <name>Chi Wai Lau</name>
     <uri>http://tabqwerty.com/about.html</uri>
   </author>
 </entry>
 
 <entry>
   <title>Mastery</title>
   <link href="http://www.tabqwerty.com/2011/06/25/Mastery.html"/>
   <updated>2011-06-25T00:00:00-07:00</updated>
   <id>http://tabqwerty.com/2011/06/25/Mastery</id>
   <content type="html">&lt;p&gt;&lt;iframe width=&quot;480&quot; height=&quot;390&quot; src=&quot;http://www.youtube.com/embed/8s2GxonJDfo&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;</content>
   <author>
     <name>Chi Wai Lau</name>
     <uri>http://tabqwerty.com/about.html</uri>
   </author>
 </entry>
 
 <entry>
   <title>Likers Gonna Like</title>
   <link href="http://www.tabqwerty.com/2010/07/27/likers-gonna-like.html"/>
   <updated>2010-07-27T00:00:00-07:00</updated>
   <id>http://tabqwerty.com/2010/07/27/likers-gonna-like</id>
   <content type="html">&lt;p&gt;Adding the &lt;a href=&quot;http://developers.facebook.com/docs/reference/plugins/like&quot;&gt;Facebook Like Button&lt;/a&gt; to every post of your &lt;a href=&quot;http://wiki.github.com/mojombo/jekyll/&quot;&gt;Jekyll&lt;/a&gt; blog is extremely easy. Here are the instructions on how to do it:&lt;/p&gt;
&lt;ol start=&quot;1&quot;&gt;
	&lt;li&gt;Specify your site url in _config.yml:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;text&quot;&gt;...
url: http://tabqwerty.com
...
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ol start=&quot;2&quot;&gt;
	&lt;li&gt;Append the following code to your blog post template, i.e. _includes/post.html:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;html&quot;&gt;...
&lt;span class=&quot;nt&quot;&gt;&amp;lt;iframe&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;http://www.facebook.com/plugins/like.php?layout=standard&amp;amp;amp;show_faces=true&amp;amp;amp;width=450&amp;amp;amp;action=like&amp;amp;amp;colorscheme=light&amp;amp;amp;height=80&amp;amp;amp;href={{ site.url }}{{ post.url }}&amp;quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;scrolling=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;no&amp;quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;frameborder=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;0&amp;quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;border:none; overflow:hidden; width:450px; height:80px;&amp;quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;allowTransparency=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/iframe&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;To make sure your webpage is &amp;#8220;liked&amp;#8221; correctly, enter the url into the &lt;a href=&quot;http://developers.facebook.com/tools/lint/&quot;&gt;Facebook &lt;span class=&quot;caps&quot;&gt;URL&lt;/span&gt; Linter&lt;/a&gt;. This tool will tell you the metadata that will be extracted from your site and used to populate the &amp;#8216;like&amp;#8217; stories that show up in the user&amp;#8217;s feed. Enjoy!&lt;/p&gt;</content>
   <author>
     <name>Chi Wai Lau</name>
     <uri>http://tabqwerty.com/about.html</uri>
   </author>
 </entry>
 
 <entry>
   <title>Coming Soon - My Cooking Diary</title>
   <link href="http://www.tabqwerty.com/2010/07/18/coming-soon-my-cooking-diary.html"/>
   <updated>2010-07-18T00:00:00-07:00</updated>
   <id>http://tabqwerty.com/2010/07/18/coming-soon-my-cooking-diary</id>
   <content type="html">&lt;p&gt;Mike Matas, Sharon Hwang, and I have been working on an amazing cooking blog. Here&amp;#8217;s the wonderful teaser trailer of the website:&lt;/p&gt;
&lt;p&gt;&lt;object width=&quot;475&quot; height=&quot;267&quot;&gt;&lt;param name=&quot;allowfullscreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://vimeo.com/moogaloop.swf?clip_id=13351747&amp;amp;server=vimeo.com&amp;amp;show_title=0&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=ffffff&amp;amp;fullscreen=1&quot; /&gt;&lt;embed src=&quot;http://vimeo.com/moogaloop.swf?clip_id=13351747&amp;amp;server=vimeo.com&amp;amp;show_title=0&amp;amp;show_byline=0&amp;amp;show_portrait=0&amp;amp;color=ffffff&amp;amp;fullscreen=1&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowscriptaccess=&quot;always&quot; width=&quot;475&quot; height=&quot;267&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;</content>
   <author>
     <name>Chi Wai Lau</name>
     <uri>http://tabqwerty.com/about.html</uri>
   </author>
 </entry>
 
 <entry>
   <title>Colour Me Kubrick</title>
   <link href="http://www.tabqwerty.com/2010/07/01/colour-me-kubrick.html"/>
   <updated>2010-07-01T00:00:00-07:00</updated>
   <id>http://tabqwerty.com/2010/07/01/colour-me-kubrick</id>
   <content type="html">&lt;p&gt;I was looking for a javascript color picker. In the MooTools land, there are a couple popular options: &lt;a href=&quot;http://moorainbow.woolly-sheep.net&quot;&gt;mooRainbow&lt;/a&gt; and &lt;a href=&quot;http://mootools.net/forge/p/colorroller_color_picker&quot;&gt;ColorRoller&lt;/a&gt;. They would definitely get the job done, but I was looking for something even lighter and simpler. I really like the design and concept of a jQuery color picker called &lt;a href=&quot;http://acko.net/dev/farbtastic&quot;&gt;Farbtastic&lt;/a&gt;, so I decided to port it to MooTools. Here&amp;#8217;s a cool demo of Kubrick:&lt;/p&gt;
&lt;div id=&quot;colour-me-kubrick&quot;&gt;
	&lt;label for=&quot;colour&quot;&gt;Colour:&lt;/label&gt;
&lt;input id=&quot;colour&quot; name=&quot;colour&quot; type=&quot;text&quot; /&gt;
&lt;/div&gt;
&lt;p&gt;I hope you have fun changing the background color of my blog! &lt;a href=&quot;http://github.com/clau/Kubrick&quot;&gt;Kubrick&lt;/a&gt; is an open source project. Feel free to use it or follow the project for improvements or bug fixes.&lt;/p&gt;</content>
   <author>
     <name>Chi Wai Lau</name>
     <uri>http://tabqwerty.com/about.html</uri>
   </author>
 </entry>
 
 <entry>
   <title>Rethink Animation</title>
   <link href="http://www.tabqwerty.com/2010/06/11/rethink-animation.html"/>
   <updated>2010-06-11T00:00:00-07:00</updated>
   <id>http://tabqwerty.com/2010/06/11/rethink-animation</id>
   <content type="html">&lt;p&gt;I looked at how animations work in some of the most popular environments such as &lt;a href=&quot;http://api.jquery.com/animate/&quot;&gt;jQuery&lt;/a&gt;, &lt;a href=&quot;http://mootools.net/docs/core/Fx/Fx&quot;&gt;MooTools&lt;/a&gt;, &lt;a href=&quot;http://webkit.org/blog/324/css-animation-2/&quot;&gt;CSS3&lt;/a&gt;, and &lt;a href=&quot;http://developer.apple.com/mac/library/documentation/cocoa/conceptual/CoreAnimation_guide/Articles/AnimatingLayers.html#//apple_ref/doc/uid/TP40006085-SW1&quot;&gt;Cocoa&lt;/a&gt;. I noticed that there&amp;#8217;s a common pattern &amp;mdash; the effects are all bound by time. Those time-bound animations generally work well with simple motions.  However, the static nature of these animations becomes a limitation since the predefined movement doesn&amp;#8217;t adapt well to situations that require adjustment.&lt;/p&gt;
&lt;p&gt;To address that issue, I implemented Fx.Spring &amp;mdash; a custom animation effect that is modeled after &lt;a href=&quot;http://www.myphysicslab.com/spring1.html&quot;&gt;the physics of a spring&lt;/a&gt;. The effect is not time-bound; instead, the effect duration is dynamic and is dictated by 2 constants: &lt;em&gt;spring stiffness&lt;/em&gt; and &lt;em&gt;friction&lt;/em&gt;. When friction is zero, you get a bouncy effect that goes on forever and greater spring stiffness means higher bounce frequency. When friction is present, the bounce will stop eventually and greater friction means that the bounce frequency decays faster over time. Not only does the spring animation render a realistic effect, it also adapts to varying situations more naturally as the movement is not predefined and is calculated dynamically. A demo of Fx.Spring here is probably worth a thousand words:&lt;/p&gt;
&lt;div id=&quot;mangosteen-container&quot;	&gt;
&lt;div id=&quot;mangosteen-controls&quot;&gt;
&lt;div class=&quot;col&quot;&gt;
&lt;div class=&quot;label&quot;&gt;
				&lt;label for=&quot;fxTransition&quot;&gt;Transition:&lt;/label&gt;
&lt;/div&gt;
&lt;select id=&quot;fxTransition&quot;&gt;
				&lt;option value=&quot;Spring&quot;&gt;Spring&lt;/option&gt;
				&lt;option value=&quot;linear&quot;&gt;Linear&lt;/option&gt;
				&lt;option value=&quot;Quad&quot;&gt;Quadratic&lt;/option&gt;
				&lt;option value=&quot;Cubic&quot;&gt;Cubic&lt;/option&gt;
				&lt;option value=&quot;Quart&quot;&gt;Quartic&lt;/option&gt;
				&lt;option value=&quot;Quint&quot;&gt;Quintic&lt;/option&gt;
				&lt;option value=&quot;Sine&quot;&gt;Sinusoidal&lt;/option&gt;
				&lt;option value=&quot;Expo&quot;&gt;Exponential&lt;/option&gt;
				&lt;option value=&quot;Circ&quot;&gt;Circular&lt;/option&gt;
				&lt;option value=&quot;Bounce&quot;&gt;Bouncing&lt;/option&gt;
				&lt;option value=&quot;Back&quot;&gt;Back&lt;/option&gt;
				&lt;option value=&quot;Elastic&quot;&gt;Elastic&lt;/option&gt;
&lt;/select&gt;
&lt;/div&gt;
&lt;div class=&quot;col time&quot; id=&quot;ease&quot;&gt;
&lt;div class=&quot;label&quot;&gt;
				&lt;label for=&quot;fxEase&quot;&gt;Easing:&lt;/label&gt;
&lt;/div&gt;
&lt;select id=&quot;fxEase&quot;&gt;
				&lt;option value=&quot;easeIn&quot;&gt;easeIn&lt;/option&gt;
				&lt;option value=&quot;easeOut&quot;&gt;easeOut&lt;/option&gt;
				&lt;option value=&quot;easeInOut&quot;&gt;easeInOut&lt;/option&gt;
&lt;/select&gt;
&lt;/div&gt;
&lt;div class=&quot;col time&quot;&gt;
&lt;div class=&quot;label&quot;&gt;
				&lt;label for=&quot;duration&quot;&gt;Duration(ms):&lt;/label&gt;
&lt;/div&gt;
&lt;input type=&quot;text&quot; id=&quot;fxDuration&quot; value=&quot;300&quot; /&gt;
&lt;/div&gt;
&lt;div class=&quot;col physics&quot;&gt;
&lt;div class=&quot;label&quot;&gt;
				&lt;label for=&quot;stiffness&quot;&gt;Stiffness:&lt;/label&gt;
&lt;/div&gt;
&lt;input type=&quot;text&quot; id=&quot;fxStiffness&quot; value=&quot;70&quot; /&gt;
&lt;/div&gt;
&lt;div class=&quot;col physics&quot;&gt;
&lt;div class=&quot;label&quot;&gt;
				&lt;label for=&quot;friction&quot;&gt;Friction:&lt;/label&gt;
&lt;/div&gt;
&lt;input type=&quot;text&quot; id=&quot;fxFriction&quot; value=&quot;10&quot; /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&quot;/demos/Fx.Spring/mangosteen.png&quot; id=&quot;mangosteen&quot;/&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;In an effort to show how the spring animation works, I made Fx.Spring an open source project on &lt;a href=&quot;http://github.com/clau/Fx.Spring&quot;&gt;Github&lt;/a&gt;. I hope it helps you rethink about animation!&lt;/p&gt;</content>
   <author>
     <name>Chi Wai Lau</name>
     <uri>http://tabqwerty.com/about.html</uri>
   </author>
 </entry>
 
 <entry>
   <title>Playing with @Anywhere</title>
   <link href="http://www.tabqwerty.com/2010/06/04/playing-with-anywhere.html"/>
   <updated>2010-06-04T00:00:00-07:00</updated>
   <id>http://tabqwerty.com/2010/06/04/playing-with-anywhere</id>
   <content type="html">&lt;p&gt;I have been meaning to check out the new &lt;a href=&quot;http://platform.twitter.com/js-api.html&quot;&gt;Twitter @Anywhere Javascript &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;&lt;/a&gt; for a while. I decided to use it to build a simple Twitter client. Traditionally, if developers are using the Twitter &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;, they are required to set up some web service to handle authentication. However, I was able to complete the client without writing a single line of server code because @Anywhere pretty much takes care of authentication for you. @Anywhere also works well with Javascript frameworks such as jQuery and MooTools. I named my pure client-side Twitter client &lt;a href=&quot;http://www.tabqwerty.com/anywhere&quot;&gt;TabAnywhere&lt;/a&gt; and the source code is available on &lt;a href=&quot;http://github.com/clau/TabAnywhere&quot;&gt;Github&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Like the Twitter &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;, @Anywhere is very simple and straightforward to deploy. My only complaints would be that 1) the documentation is not comprehensive and 2) the &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; does not seem to have a callback mechanism to report failures. Overall, I am very happy with the &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt; and I think it has the potentials to revolutionize the industry like the &lt;span class=&quot;caps&quot;&gt;REST&lt;/span&gt; &lt;span class=&quot;caps&quot;&gt;API&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Oh, I would like to thank &lt;a href=&quot;http://twitter.com/ded&quot;&gt;ded&lt;/a&gt; for his help.&lt;/em&gt;&lt;/p&gt;</content>
   <author>
     <name>Chi Wai Lau</name>
     <uri>http://tabqwerty.com/about.html</uri>
   </author>
 </entry>
 
 <entry>
   <title>Improved MooTools Slider</title>
   <link href="http://www.tabqwerty.com/2010/04/21/improved-mootools-slider.html"/>
   <updated>2010-04-21T00:00:00-07:00</updated>
   <id>http://tabqwerty.com/2010/04/21/improved-mootools-slider</id>
   <content type="html">&lt;p&gt;MooTools has a pretty slick &lt;a href=&quot;http://mootools.net/docs/more/Drag/Slider&quot;&gt;slider&lt;/a&gt;. It&amp;#8217;s flexible and easy to use, but I notice the user interaction isn&amp;#8217;t perfect. When I click on the slider track, the knob will move to where I click. Now when I hold the click and try to drag the knob, it won&amp;#8217;t follow where I move.&lt;/p&gt;
&lt;p&gt;To support the click and drag interaction, we would want the slider to listen to both mousemove and mouseup events when users click on the track. Mousemove is for notifying the slider about the drag. Mouseup is for notifying the slider when to stop following the mouse. Here&amp;#8217;s how I did it by extending the current slider:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;SliderEx&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Class&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;({&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;Extends&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;Slider&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;// Binds does not support inheritance..&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;// Therefore, we have to declare the new bindings&lt;/span&gt;
  &lt;span class=&quot;c1&quot;&gt;// as well as the existing ones.&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;Binds&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;clickedElement&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;draggedKnob&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;scrolledElement&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;s1&quot;&gt;&amp;#39;releasedElement&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;

  &lt;span class=&quot;nx&quot;&gt;releasedElement&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;removeEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;mousemove&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clickedElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;removeEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;mouseup&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;releasedElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;

  &lt;span class=&quot;nx&quot;&gt;clickedElement&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;target&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;knob&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;addEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;mousemove&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;clickedElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
      &lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;stop&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;addEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;mouseup&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;releasedElement&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;parent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The second part of the code is only there for suppressing the text-selection cursor when dragging. I wish &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt; could just take care of that instead. Oh well, I keep the code above and some demos in &lt;a href=&quot;http://github.com/clau/SliderEx&quot;&gt;github&lt;/a&gt;. Feel free to follow it for improvements or bug fixes.&lt;/p&gt;
&lt;h4&gt;Demo / Slider&lt;/h4&gt;
&lt;div id=&quot;slider&quot; class=&quot;slider&quot;&gt;
	&lt;div class=&quot;knob&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4&gt;Demo / SliderEx&lt;/h4&gt;
&lt;div id=&quot;sliderEx&quot; class=&quot;slider&quot;&gt;
	&lt;div class=&quot;knob&quot;&gt;&lt;/div&gt;
&lt;/div&gt;</content>
   <author>
     <name>Chi Wai Lau</name>
     <uri>http://tabqwerty.com/about.html</uri>
   </author>
 </entry>
 
 <entry>
   <title>Supporting Mouse Events on Mobile Safari</title>
   <link href="http://www.tabqwerty.com/2010/04/08/supporting-mouse-events-in-mobile-safari.html"/>
   <updated>2010-04-08T00:00:00-07:00</updated>
   <id>http://tabqwerty.com/2010/04/08/supporting-mouse-events-in-mobile-safari</id>
   <content type="html">&lt;p&gt;Mobile Safari does a good job for making websites work seamlessly in a mouse-free environment. In general, it is pretty painless for both users and developers. For example, if you tap on something, the event would automatically be interpreted and handled as a mouse click. However, not everything is automatic; if the websites have any interactions involving mousedown, mousemove, and mouseup, they will not work well on Mobile Safari.&lt;/p&gt;
&lt;p&gt;To support those interactions everywhere, developers need to take care of both touch and mouse events. One approach is to have additional event listeners for touch, but it gets tedious and ugly very quickly. A more elegant approach is to implement a global adapter that automatically map mouse events to touch events. Here&amp;#8217;s how I did it with &lt;a href=&quot;http://appden.com/javascript/fun-with-custom-events-on-elements-in-mootools/&quot;&gt;Scott&amp;#8217;s help&lt;/a&gt; using MooTools:&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;javascript&quot;&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;document&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;createEvent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;TouchEvent&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&amp;#39;touchstart&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;touchmove&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;touchend&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;each&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;){&lt;/span&gt;
      &lt;span class=&quot;nx&quot;&gt;Element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;NativeEvents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;

  &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;mapping&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;s1&quot;&gt;&amp;#39;mousedown&amp;#39;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;touchstart&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;s1&quot;&gt;&amp;#39;mousemove&amp;#39;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;touchmove&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;s1&quot;&gt;&amp;#39;mouseup&amp;#39;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;touchend&amp;#39;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

  &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;condition&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;touch&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;changedTouches&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;event&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;page&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;nx&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;touch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;pageX&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;nx&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;touch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;pageY&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;mapping&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nx&quot;&gt;Element&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;Events&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;nx&quot;&gt;base&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;mapping&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt;
      &lt;span class=&quot;nx&quot;&gt;condition&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;condition&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;The code above is kept at &lt;a href=&quot;http://github.com/clau/Mouse2Touch&quot;&gt;Github&lt;/a&gt;. You can follow it for improvements or bug fixes.&lt;/p&gt;
&lt;p&gt;Touch is the new mouse! To fully embrace touch, you should definitely check out the &lt;a href=&quot;http://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html&quot;&gt;Safari Web Content Guide&lt;/a&gt; and learn more about the new touch events.&lt;/p&gt;</content>
   <author>
     <name>Chi Wai Lau</name>
     <uri>http://tabqwerty.com/about.html</uri>
   </author>
 </entry>
 
 <entry>
   <title>Got RSS?</title>
   <link href="http://www.tabqwerty.com/2010/04/06/got-rss.html"/>
   <updated>2010-04-06T00:00:00-07:00</updated>
   <id>http://tabqwerty.com/2010/04/06/got-rss</id>
   <content type="html">&lt;p&gt;&lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; asks for a compact and structured version of a website, so users can easily subscribe and receive the latest updates. I heard a lot about &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; for years, but I never managed to adopt it. I guess I am happy with discovering content from social networks, where information is mostly ranked by human interest, not merely by time or artificial intelligence.&lt;/p&gt;
&lt;p&gt;Anyway, I recently learned more about &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; from adding &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; support for &lt;a href=&quot;http://www.mikematas.com&quot;&gt;Mike Matas&amp;#8217; website&lt;/a&gt;. If you are using blogging services like Blogger or WordPress, you probably get &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; support for free. For those who don&amp;#8217;t, there are two steps:&lt;/p&gt;
&lt;ol start=&quot;1&quot;&gt;
	&lt;li&gt;Create a &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; feed. There are two popular &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; feed formats: &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; 2.0 and Atom 1.0. I decided to go with Atom, which is basically a &lt;span class=&quot;caps&quot;&gt;XML&lt;/span&gt; document with self-explanatory tags: &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;xml&quot;&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;feed&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;xmlns=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;http://www.w3.org/2005/Atom&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&lt;/span&gt;tabqwerty&lt;span class=&quot;nt&quot;&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;link&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;http://tabqwerty.com/atom.xml&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;rel=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;self&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;application/atom+xml&amp;quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;link&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;http://tabqwerty.com/&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;rel=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;alternate&amp;quot;&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;text/html&amp;quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;id&amp;gt;&lt;/span&gt;http://tabqwerty.com/&lt;span class=&quot;nt&quot;&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;updated&amp;gt;&lt;/span&gt;2010-04-06T21:53:19-07:00&lt;span class=&quot;nt&quot;&gt;&amp;lt;/updated&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;author&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;name&amp;gt;&lt;/span&gt;Chi Wai Lau&lt;span class=&quot;nt&quot;&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;email&amp;gt;&lt;/span&gt;clau@tabqwerty.com&lt;span class=&quot;nt&quot;&gt;&amp;lt;/email&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;/author&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;entry&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Hello World&lt;span class=&quot;nt&quot;&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;link&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;http://tabqwerty.com/hello-world.html&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;updated&amp;gt;&lt;/span&gt;2010-04-06T00:00:00-07:00&lt;span class=&quot;nt&quot;&gt;&amp;lt;/updated&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;id&amp;gt;&lt;/span&gt;http://tabqwerty.com/hello-world.html&lt;span class=&quot;nt&quot;&gt;&amp;lt;/id&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;content&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;html&amp;quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Hello World!&lt;span class=&quot;nt&quot;&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/content&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;/entry&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;entry&amp;gt;&lt;/span&gt;...&lt;span class=&quot;nt&quot;&gt;&amp;lt;/entry&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;entry&amp;gt;&lt;/span&gt;...&lt;span class=&quot;nt&quot;&gt;&amp;lt;/entry&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/feed&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ol start=&quot;2&quot;&gt;
	&lt;li&gt;Reference the feed. Similar to how you would reference a &lt;span class=&quot;caps&quot;&gt;CSS&lt;/span&gt; file in the html document, you would include the link of the &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; feed to the header: &lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;xml&quot;&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    ...
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;link&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;rel=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;alternate&amp;quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;application/atom+xml&amp;quot;&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;title=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;Recent Entries&amp;quot;&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;href=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&amp;quot;http://tabqwerty.com/atom.xml&amp;quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
  ...
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That&amp;#8217;s it! I was expecting some kind of notification step when the &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; feed was updated, but then I realized that &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; is a &lt;em&gt;pull&lt;/em&gt; technology, which means that the readers get updates from pulling the feed periodically.&lt;/p&gt;
&lt;p&gt;In the process of working with &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt;, I discovered a Google product called &lt;a href=&quot;http://feedburner.google.com&quot;&gt;FeedBurner&lt;/a&gt;. I was a bit skeptical about it because its website looked quite run-down. Nonetheless, it is useful for tracking your feed and generating an &amp;#8220;adaptive&amp;#8221; feed that supports both &lt;span class=&quot;caps&quot;&gt;RSS&lt;/span&gt; 2.0 and Atom 1.0 readers. FeedBurner does the magic by adding a layer of indirection; instead of referencing your own feed in the header, you would create and reference a FeedBurner feed that references your feed. FeedBurner works, but I really hope that Google can just give it a facelift..&lt;/p&gt;</content>
   <author>
     <name>Chi Wai Lau</name>
     <uri>http://tabqwerty.com/about.html</uri>
   </author>
 </entry>
 
</feed>
