<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4623498046883451152</id><updated>2024-09-06T14:29:47.313-07:00</updated><category term="Windows"/><category term="JavaScript"/><category term="Web Development"/><category term="Code Katas"/><category term="Android"/><category term="C++ Projects"/><category term="Philosophy"/><category term="Programming Resources"/><category term="Travelling"/><category term="Unit Testing"/><category term="Automation"/><category term="C#"/><category term="Coding Style"/><category term="Disclaimers"/><category term="Testing"/><title type='text'>Love thy Code {Robert Liu}</title><subtitle type='html'>On software, programming and humans!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>35</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-3405908131112679035</id><published>2014-12-25T02:51:00.002-08:00</published><updated>2014-12-25T02:51:41.984-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Automation"/><category scheme="http://www.blogger.com/atom/ns#" term="Testing"/><title type='text'>Coded UI Test: Technologies Evaluation</title><content type='html'>As of this Christmas day, this is my assessment of the main technologies &amp;amp; products out there supporting Coded UI Testing. For those who don&#39;t know, &lt;b&gt;Coded UI Testing&lt;/b&gt; is about programmers writing tests in code that automate functional testing by ways of replaying user actions on an application.&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Arial&amp;quot;,sans-serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;
&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Arial&amp;quot;,sans-serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Product Comparison:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Arial&amp;quot;,sans-serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;


&lt;br /&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;thead&gt;
&lt;tr&gt;
   &lt;td style=&quot;background: #F0F0F0; border: solid #DDDDDD 1.0pt; mso-border-alt: solid #DDDDDD .75pt; padding: 5.25pt 11.25pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
   &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Category&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
   &lt;td style=&quot;background: #F0F0F0; border-left: none; border: solid #DDDDDD 1.0pt; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; padding: 5.25pt 11.25pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
   &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;MS Coded UI Tests&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
   &lt;td style=&quot;background: #F0F0F0; border-left: none; border: solid #DDDDDD 1.0pt; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; padding: 5.25pt 11.25pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
   &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Selenium&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
   &lt;td style=&quot;background: #F0F0F0; border-left: none; border: solid #DDDDDD 1.0pt; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; padding: 5.25pt 11.25pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
   &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Awesomium&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
   &lt;td style=&quot;background: #F0F0F0; border-left: none; border: solid #DDDDDD 1.0pt; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; padding: 5.25pt 11.25pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
   &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;PhantomJs&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
   &lt;td style=&quot;background: #F0F0F0; border-left: none; border: solid #DDDDDD 1.0pt; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; padding: 5.25pt 11.25pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
   &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Watir&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
   &lt;td style=&quot;background: #F0F0F0; border-left: none; border: solid #DDDDDD 1.0pt; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; padding: 5.25pt 11.25pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
   &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;TestComplete&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
   &lt;td style=&quot;background: #F0F0F0; border-left: none; border: solid #DDDDDD 1.0pt; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; padding: 5.25pt 11.25pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
   &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Unified Functional Testing (UFT)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;/tr&gt;
&lt;/thead&gt;
 &lt;tbody&gt;
&lt;tr&gt;
  &lt;td style=&quot;border-top: none; border: solid #DDDDDD 1.0pt; mso-border-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: &#39;Times New Roman&#39;, serif; font-size: 12pt; text-decoration: none;&quot;&gt;Cross Browser Support&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Not by default.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 7.5pt 0cm 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Requires Selenium
  components to be installed.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Yes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 7.5pt 0cm 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Requires
  WebDrivers.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;No (Uses Chrome core)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;No&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Yes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Yes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;No&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr&gt;
  &lt;td style=&quot;border-top: none; border: solid #DDDDDD 1.0pt; mso-border-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Ease of programming&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;A bit clunky unless additional wrapper library installed:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 7.5pt 0cm 0.0001pt;&quot;&gt;
&lt;a href=&quot;http://codeduicodefirst.codeplex.com/&quot;&gt;&lt;span style=&quot;color: #3b73af; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU; text-decoration: none; text-underline: none;&quot;&gt;CodedUI CodeFirst&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Fairly simple&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Clunky and too low level.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 7.5pt 0cm 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Missing
  documentation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Cool if you like&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 7.5pt 0cm 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;JS programming&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Cool if you like Ruby. A bit hard to setup.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Very hard to use.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 7.5pt 0cm 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Not a full
  programming language&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Clunky, using VBScript&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr&gt;
  &lt;td style=&quot;border-top: none; border: solid #DDDDDD 1.0pt; mso-border-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Testing Framework Support&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;TestTools.UITesting&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;NUnit fits well&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Any .Net testing framework&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;a href=&quot;http://phantomjs.org/headless-testing.html&quot;&gt;&lt;span style=&quot;color: #3b73af; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU; text-decoration: none; text-underline: none;&quot;&gt;Many&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;a href=&quot;https://github.com/test-unit/test-unit&quot;&gt;&lt;span style=&quot;color: #3b73af; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU; text-decoration: none; text-underline: none;&quot;&gt;test-unit&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;&amp;nbsp;fits well&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;N\A&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;N\A&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr&gt;
  &lt;td style=&quot;border-top: none; border: solid #DDDDDD 1.0pt; mso-border-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Cost&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Requires&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.visualstudio.com/en-us/products/how-to-buy-vs.aspx&quot;&gt;&lt;span style=&quot;color: #3b73af; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU; text-decoration: none; text-underline: none;&quot;&gt;VS Premium / Ultimate&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 7.5pt 0cm 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;We currently just
  have Professional.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Free (&lt;/span&gt;&lt;a href=&quot;http://www.apache.org/licenses/LICENSE-2.0&quot;&gt;&lt;span style=&quot;color: #3b73af; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU; text-decoration: none; text-underline: none;&quot;&gt;Apache 2.0&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #3b73af; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU; text-decoration: none; text-underline: none;&quot;&gt;&lt;a href=&quot;http://www.awesomium.com/buy/&quot;&gt;Professional license&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;($$)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Free (&lt;/span&gt;&lt;a href=&quot;https://github.com/ariya/phantomjs/blob/master/LICENSE.BSD&quot;&gt;&lt;span style=&quot;color: #3b73af; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU; text-decoration: none; text-underline: none;&quot;&gt;BSD&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Free (&lt;/span&gt;&lt;a href=&quot;https://github.com/watir/watir/blob/master/LICENSE&quot;&gt;&lt;span style=&quot;color: #3b73af; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU; text-decoration: none; text-underline: none;&quot;&gt;BSD&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;a href=&quot;http://smartbear.com/product/testcomplete/pricing/&quot;&gt;&lt;span style=&quot;color: #3b73af; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU; text-decoration: none; text-underline: none;&quot;&gt;Expensive&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;&amp;nbsp;($$)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Proprietary ($$)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr&gt;
  &lt;td style=&quot;border-top: none; border: solid #DDDDDD 1.0pt; mso-border-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;a href=&quot;http://stackoverflow.com/questions/2568713/vs2010-coded-ui-tests-vs-web-performance-test-whats-the-difference&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3b73af; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU; text-decoration: none; text-underline: none;&quot;&gt;Headless&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Support&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;No&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Yes (HTMLUnit)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Offscreen view&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Yes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Yes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;No&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;No&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;tr&gt;
  &lt;td style=&quot;border-top: none; border: solid #DDDDDD 1.0pt; mso-border-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Record and Playback&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Yes (can record via IE only&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 7.5pt 0cm 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;but can do cross
  browser playback)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Can be recorded with Selenium IDE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 7.5pt 0cm 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;(Firefox plugin)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;No&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Not built-in.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 7.5pt 0cm 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Can be done in&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://github.com/ebrehault/resurrectio&quot;&gt;&lt;span style=&quot;color: #3b73af; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU; text-decoration: none; text-underline: none;&quot;&gt;Resurrectio&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Minimal&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Yes but with issues when&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;margin: 7.5pt 0cm 0.0001pt;&quot;&gt;
&lt;a href=&quot;http://smartbear.com/forums/f74/t91812/testcomplete-10-x-cross-browser-playback-proble/&quot;&gt;&lt;span style=&quot;color: #3b73af; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU; text-decoration: none; text-underline: none;&quot;&gt;playback cross browser&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
  &lt;td style=&quot;border-bottom: solid #DDDDDD 1.0pt; border-left: none; border-right: solid #DDDDDD 1.0pt; border-top: none; mso-border-alt: solid #DDDDDD .75pt; mso-border-left-alt: solid #DDDDDD .75pt; mso-border-top-alt: solid #DDDDDD .75pt; padding: 5.25pt 7.5pt 5.25pt 7.5pt;&quot; valign=&quot;top&quot;&gt;
  &lt;div class=&quot;MsoNormal&quot; style=&quot;margin-bottom: 0.0001pt;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: &amp;quot;Times New Roman&amp;quot;,serif; font-size: 12.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-AU;&quot;&gt;Yes&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;&lt;div&gt;
The order of the category is in decreasing importance. For my use case, cross browser support is the most important because the applications under test are websites requiring to be run on multiple browser types. In the mean time, record and playback is least important as this style of test generation create brittle tests that can be run on a browser not another, and changing the application UI results in broken tests that are hard to maintain.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
In short, &lt;b&gt;Selenium &lt;/b&gt;is the clear winner if you want the most mature Coded UI testing support, plus it is free. Microsoft&#39;s Coded UI test is a runner up for its close integration with Visual Studio. But price is a factor since this feature is only available in the premium or ultimate edition. Watir is third to me as it is somewhat hard to setup on Windows and the documentation is a bit sketchy. But if you are in the Ruby camp, you definitely should give this a try.&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/3405908131112679035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2014/12/coded-ui-test-technologies-evaluation.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/3405908131112679035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/3405908131112679035'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2014/12/coded-ui-test-technologies-evaluation.html' title='Coded UI Test: Technologies Evaluation'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-8541073693986535563</id><published>2014-06-24T04:30:00.002-07:00</published><updated>2014-06-24T04:49:55.265-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="C#"/><title type='text'>Getting Log4Net integration with Topshelf working</title><content type='html'>I was exploring a bit on logging in &lt;b&gt;Topshelf &lt;/b&gt;using &lt;b&gt;Log4Net&lt;/b&gt;. It&#39;s quite easy to use once I figured out how to pass in the log config file and having the correct content in the config file.
Below is an example showing how to set this up with the bare minimum to get the logging to work.&lt;br /&gt;
&lt;br /&gt;
&lt;!-- Include required JS files --&gt;
&lt;script src=&quot;https://sites.google.com/site/robertkcliu/web/shCore.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
 
&lt;!--
    At least one brush, here we choose JS. You need to include a brush for every 
    language you want to highlight
--&gt;
&lt;script src=&quot;https://sites.google.com/site/robertkcliu/web/shBrushCSharp.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;https://sites.google.com/site/robertkcliu/web/shBrushXml.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
 
&lt;!-- Include *at least* the core style and default theme --&gt;
&lt;link href=&quot;https://sites.google.com/site/robertkcliu/web/shCore.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
&lt;link href=&quot;https://sites.google.com/site/robertkcliu/web/shThemeDefault.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;&lt;b&gt;&lt;i&gt;
 
Topshelf program:&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: c#&quot;&gt;public class Program
    {
        public static void Main(string[] args)
        {

            HostFactory.Run(hostConfigurator =&amp;gt;
                {
                    hostConfigurator.UseLog4Net(&quot;..\\..\\App.config&quot;);

                    hostConfigurator.Service&amp;lt;bird&amp;gt;(serviceConfigurator =&amp;gt;
                        {
                            serviceConfigurator.ConstructUsing(name =&amp;gt; new Bird());
                            serviceConfigurator.WhenStarted(nm =&amp;gt; nm.Start());
                        });
                });
        }
    }

    public class Bird
    {
        public void Start()
        {
            HostLogger.Get&amp;lt;bird&amp;gt;().Info(&quot;Chirp, chirp!&quot;);
        }
    }
&lt;/bird&gt;&lt;/bird&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;i&gt;App.config:&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: xml&quot;&gt;&lt;configuration&gt;
  &lt;configsections&gt;
    &lt;section name=&quot;log4net&quot; type=&quot;log4net.Config.Log4NetConfigurationSectionHandler, log4net&quot;&gt;
  &lt;/section&gt;&lt;/configsections&gt;

  &lt;log4net&gt;

    &lt;root&gt;
      &lt;level value=&quot;DEBUG&quot;&gt;
      &lt;appender-ref ref=&quot;RollingFileAppender&quot;&gt;
    &lt;/appender-ref&gt;&lt;/level&gt;&lt;/root&gt;
    
    &lt;appender name=&quot;RollingFileAppender&quot; type=&quot;log4net.Appender.RollingFileAppender&quot;&gt;
      &lt;file value=&quot;log.txt&quot;&gt;
      &lt;appendtofile value=&quot;true&quot;&gt;
      &lt;rollingstyle value=&quot;Size&quot;&gt;
      &lt;maxsizerollbackups value=&quot;10&quot;&gt;
      &lt;maximumfilesize value=&quot;100KB&quot;&gt;
      &lt;staticlogfilename value=&quot;true&quot;&gt;
      &lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt;
        &lt;conversionpattern value=&quot;%date [%thread] %-5level %logger - %message%newline&quot;&gt;
      &lt;/conversionpattern&gt;&lt;/layout&gt;
    &lt;/staticlogfilename&gt;&lt;/maximumfilesize&gt;&lt;/maxsizerollbackups&gt;&lt;/rollingstyle&gt;&lt;/appendtofile&gt;&lt;/file&gt;&lt;/appender&gt;
  &lt;/log4net&gt;

&lt;/configuration&gt;
&lt;/pre&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/8541073693986535563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2014/06/getting-log4net-integration-with.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/8541073693986535563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/8541073693986535563'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2014/06/getting-log4net-integration-with.html' title='Getting Log4Net integration with Topshelf working'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-7960069950707184500</id><published>2013-07-14T07:15:00.002-07:00</published><updated>2013-07-14T07:15:06.773-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Unit Testing"/><title type='text'>Unit testing with Moq</title><content type='html'>If you&#39;re using C# at work and are a little serious about unit testing, then the Moq framework can be your friend. It&#39;s simple to use and will do the job for both classical TDDer or a mockist TDDer.&lt;br /&gt;
&lt;br /&gt;
I find this blog although written a while now, still is great as a starting point to understanding and using Moq:&amp;nbsp;&lt;a href=&quot;http://stephenwalther.com/archive/2008/06/12/tdd-introduction-to-moq&quot;&gt;http://stephenwalther.com/archive/2008/06/12/tdd-introduction-to-moq&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Referencing from the original blog, the following code completes the example so the mockist part is more correct and aligned with the real-world situation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;

&lt;!-- Include required JS files --&gt;
&lt;script src=&quot;https://sites.google.com/site/robertkcliu/web/shCore.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
 
&lt;!--
    At least one brush, here we choose JS. You need to include a brush for every 
    language you want to highlight
--&gt;
&lt;script src=&quot;https://sites.google.com/site/robertkcliu/web/shBrushCSharp.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
 
&lt;!-- Include *at least* the core style and default theme --&gt;
&lt;link href=&quot;https://sites.google.com/site/robertkcliu/web/shCore.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
&lt;link href=&quot;https://sites.google.com/site/robertkcliu/web/shThemeDefault.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
 
&lt;!-- You also need to add some content to highlight, but that is covered elsewhere. --&gt;


&lt;pre class=&quot;brush: c#&quot;&gt;

using System;
using System.Collections.Generic;
using System.Web;
using EasyAssertions;
using Moq;

namespace MoqTest
{
    class MoqTesting
    {
        static void Main()
        {
            Run();
        }

        private static void Run()
        {
            ClassicalTdd();
            MockistTdd();
        }

        private static void ClassicalTdd()
        {
            var newProduct = new Mock&amp;lt;IProduct&amp;gt;();
            newProduct.SetupGet(p =&gt; p.Id).Returns(1);
            newProduct.SetupGet(p =&gt; p.Name).Returns(&quot;Bushmills&quot;);

            newProduct.Object.Name.ShouldBe(&quot;Bushmills&quot;);

            var productRepository = new Mock&amp;lt;IProductRepository&amp;gt;();
            productRepository
                .Setup(p =&gt; p.Get(It.Is&amp;lt;int&amp;gt;(id =&amp;gt; id &amp;gt; 0 &amp;&amp; id &amp;lt; 6)))
                .Returns(newProduct.Object);

            var productReturned = productRepository.Object.Get(1);
            productReturned.Name.ShouldBe(&quot;Bushmills&quot;);
        }

        private static void MockistTdd()
        {
            var mockCache = new Mock&amp;lt;ProductCache&amp;gt;();
            var mockDatabase = new Mock&amp;lt;Database&amp;gt;();
            var mockProduct = new Mock&amp;lt;IProduct&amp;gt;();

            mockCache
                .Setup(c =&amp;gt; c.Get(1))
                .Returns&amp;lt;IProduct&amp;gt;(null)
                .Verifiable();

            mockDatabase
                .Setup(d =&amp;gt; d.Fetch(1))
                .Returns(mockProduct.Object)
                .Verifiable();

            mockCache
                .Setup(c =&amp;gt; c.Set(1, mockProduct.Object))
                .Verifiable();

            ProductRepository sut = new ProductRepository(mockCache.Object, mockDatabase.Object);
            sut.GetProduct(1);

            mockCache.Verify();
        }
    }

    public interface IProductRepository
    {
        List&amp;lt;IProductRepository&amp;gt; Select();
        IProduct Get(int id);
    }

    public class ProductRepository : IProductRepository
    {
        private readonly ProductCache _cache;
        private readonly Database _db;

        public ProductRepository(ProductCache cache, Database db)
        {
            _cache = cache;
            _db = db;
        }

        public IProduct GetProduct(int id)
        {
            var product = _cache.Get(id);
            if (product == null)
            {
                product = Get(id);
                _cache.Set(id, product);
            }
            return product;
        }

        public List&amp;lt;IProductRepository&amp;gt; Select()
        {
            throw new NotImplementedException();
        }

        public IProduct Get(int id)
        {
            return _db.Fetch(id);
        }
    }

    public class ProductCache
    {
        public virtual IProduct Get(int id)
        {
            return (IProduct)HttpContext.Current.Cache[&quot;product_&quot; + id];
        }

        public virtual void Set(int id, IProduct product)
        {
            HttpContext.Current.Cache[&quot;product_&quot; + id] = product;
        }
    }

    public class Database
    {
        public virtual IProduct Fetch(int id)
        {
            return new Product { Id = id };
        }
    }

    public interface IProduct
    {
        int Id { get; set; }
        string Name { get; set; }
    }

    public class Product : IProduct
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
}

&lt;/pre&gt;
&lt;!-- Finally, to actually run the highlighter, you need to include this JS on your page --&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
     SyntaxHighlighter.all()
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/7960069950707184500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2013/07/unit-testing-with-moq.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/7960069950707184500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/7960069950707184500'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2013/07/unit-testing-with-moq.html' title='Unit testing with Moq'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-6417457293849534523</id><published>2013-03-17T06:17:00.003-07:00</published><updated>2013-03-17T06:17:51.135-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Development"/><title type='text'>Functions of blackbird.js</title><content type='html'>In today&#39;s blog, I will go through each function of the blackbird.js as an exercise. Basically, I thought going through some JS code would be nice as a way to brush up and learn more about the beautiful and fluid language of JavaScript.&lt;br /&gt;
&lt;br /&gt;
I find the naming of these functions are pretty evident in what it does. Looking at the code closer does helps one to grasp the branches and leaves of the code with greater confidence.&lt;br /&gt;
&lt;br /&gt;
Below are the functions in more details:&lt;br /&gt;
&lt;br /&gt;
generateMarkup: Generates the tool&#39;s content markup, including the header (filters and controls), main log body, and the footer (checkbox).&lt;br /&gt;
&lt;br /&gt;
addMessage: Addes the log message to the output list.&lt;br /&gt;
&lt;br /&gt;
clear: Clears the output list.&lt;br /&gt;
&lt;br /&gt;
clickControl: Event handler for clicking to clear, resize, or hide log.&lt;br /&gt;
&lt;br /&gt;
clickFilter: Event handler for filtering out logs based on type (debug, error, warning, etc)&lt;br /&gt;
&lt;br /&gt;
clickVis: Event handler for setting to start tool on load.&lt;br /&gt;
&lt;br /&gt;
scrollToBottom: Scrolls to the bottom of the log output list.&lt;br /&gt;
&lt;br /&gt;
isVisible: This determines whether the display is visible or not by checking the css display style.&lt;br /&gt;
&lt;br /&gt;
hide: This hides the display by setting the css style display attribute to none.&lt;br /&gt;
&lt;br /&gt;
show: This gets the body element, then remove and add the tool content code into the body element. Also, it sets to display the tool.&lt;br /&gt;
&lt;br /&gt;
reposition: Sets the position according the the position argument. If no argument is provided, use the default topRight or move to the next position as stored in the state. This calls setState after the classes have been set accordingly.&lt;br /&gt;
&lt;br /&gt;
resize: Resizes the tool display to either small or large based on the argument, default or state value.&lt;br /&gt;
&lt;br /&gt;
setState: Goes thru the state object and sets the property (props) array to be written to the cookie. Then it sets the class attribute for CSS styling.&lt;br /&gt;
&lt;br /&gt;
getState: Retrieves the state object from cookie.&lt;br /&gt;
&lt;br /&gt;
readKey: This is the event handler for keyup. Based on the F2 key combination with alt and shift, as well as the current visible state, the function clears the log, reposition or hide/show the tool display.</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/6417457293849534523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2013/03/functions-of-blackbirdjs.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/6417457293849534523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/6417457293849534523'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2013/03/functions-of-blackbirdjs.html' title='Functions of blackbird.js'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-989456421202931326</id><published>2013-03-14T06:09:00.000-07:00</published><updated>2013-03-14T06:09:21.482-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Development"/><title type='text'>Examining blackbird.js</title><content type='html'>The code to blackbird.js can be found &lt;a href=&quot;http://blackbirdjs.googlecode.com/files/blackbirdjs-1.0.zip&quot;&gt;here&lt;/a&gt;. Today, I will examine the inner working of blackbird.js, line by line.&lt;br /&gt;
&lt;br /&gt;
To start off with, let&#39;s understand the self-executing anonymous function.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; font-family: Arial, Helvetica, sans-serif;&quot;&gt;(function () {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; ... some code&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; font-family: Arial, Helvetica, sans-serif;&quot;&gt;})();&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The use of it, helps to provide function level scoping while making the code executing on its own. For more detailed explanation, refer to this nicely written &lt;a href=&quot;http://markdalgleish.com/2011/03/self-executing-anonymous-functions/&quot;&gt;blog&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Next, at the top level within the main function, we can see that there are some variables defined, including cache array, and objects like classes, profiler and messageTypes. At the same time, some inner functions are there:&amp;nbsp;generateMarkup,&amp;nbsp;clickControl,&amp;nbsp;isVisible,&amp;nbsp;getState,&amp;nbsp;addEvent, and&amp;nbsp;removeEvent. The window object is set with a namespace, i.e. the log object with methods such as toggle, clear, debug, warn and profile. These methods provide the API of the library. The initialization code is performed on window&#39;s load. This is achieved by calling addEvent with window, &#39;load&#39; event and the callback function as the arguments. The addEvent &amp;amp; removeEvent code look a bit long but have &lt;a href=&quot;http://ejohn.org/projects/flexible-javascript-events/&quot;&gt;good reasons&lt;/a&gt;. The main idea is to be cross-browser compatible.&lt;br /&gt;
&lt;br /&gt;
The initialization code requires some describing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;addEvent(window, &#39;load&#39;,&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;/* initialize Blackbird when the page loads */&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;function () {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&amp;nbsp; &amp;nbsp; var body = document.getElementsByTagName(&#39;BODY&#39;)[0];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&amp;nbsp; &amp;nbsp; bbird = body.appendChild(generateMarkup());&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;&amp;nbsp; &amp;nbsp; outputList = bbird.getElementsByTagName(&#39;OL&#39;)[0];&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;backgroundImage();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;//add events&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;addEvent(IDs.checkbox, &#39;click&#39;, clickVis);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;addEvent(IDs.filters, &#39;click&#39;, clickFilter);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;addEvent(IDs.controls, &#39;click&#39;, clickControl);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;addEvent(document, &#39;keyup&#39;, readKey);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;resize(state.size);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;reposition(state.pos);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;if (state.load) {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;show();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;document.getElementById(IDs.checkbox).checked = true;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;scrollToBottom();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;window[NAMESPACE].init = function () {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;show();&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;window[NAMESPACE].error([&#39;&lt;b&gt;&#39;, NAMESPACE, &#39;&lt;/b&gt; can only be initialized once&#39;]);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;addEvent(window, &#39;unload&#39;, function () {&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;removeEvent(IDs.checkbox, &#39;click&#39;, clickVis);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;removeEvent(IDs.filters, &#39;click&#39;, clickFilter);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;removeEvent(IDs.controls, &#39;click&#39;, clickControl);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;removeEvent(document, &#39;keyup&#39;, readKey);&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt; &amp;nbsp; &amp;nbsp;});&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt; &lt;/span&gt;});&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Line by line, first it grabs the body element, then append to it the generated markup. The outputList element is set. Next, events are registered for clicking the checkbox, filters, additional controls, and key ups. Base on the current state, the log display is resized and repositioned. If indicated to load, the display will be shown and the checkbox checked. Then the log content is scrolled to the bottom. The init method on window namespace object is defined. Finally, window on unload will remove the before-mentioned event registration.&lt;br /&gt;
&lt;br /&gt;
In the next blog, we&#39;ll go and visit the individual functions and the relevant variable data.&lt;br /&gt;
</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/989456421202931326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2013/03/examining-blackbirdjs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/989456421202931326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/989456421202931326'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2013/03/examining-blackbirdjs.html' title='Examining blackbird.js'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-7322284283570739964</id><published>2013-03-13T05:53:00.002-07:00</published><updated>2013-03-13T05:53:36.488-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Development"/><title type='text'>JS logger: Blackbird</title><content type='html'>The &lt;a href=&quot;http://www.gscottolson.com/blackbirdjs/&quot;&gt;Blackbird project&lt;/a&gt; is a neat little JS project that helps one to not write alert for debugging. Although you may argue much of the functionality has been superseded by developer tool in various browsers, this Blackbird logger tool is still nice in terms of its ease of use, cool UI and simplicity.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjssBB5DAHLvfbJEC34ayubc1Q3-dbd3wkdm3kiLr_kMksw7UVr_1ylbIA3WWzKJGTTv7hsKPy1k4mcKonB9_KEEHSAUhaXqjDW1zYu3rwAKOC7q9oG0S4v-g51ZyDizwn63vok3JbZxoM/s1600/bb.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;185&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjssBB5DAHLvfbJEC34ayubc1Q3-dbd3wkdm3kiLr_kMksw7UVr_1ylbIA3WWzKJGTTv7hsKPy1k4mcKonB9_KEEHSAUhaXqjDW1zYu3rwAKOC7q9oG0S4v-g51ZyDizwn63vok3JbZxoM/s640/bb.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
In the next post, we&#39;ll dissect its JS source code to understand how it works behind the scene as an exercise!</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/7322284283570739964/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2013/03/js-logger-blackbird.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/7322284283570739964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/7322284283570739964'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2013/03/js-logger-blackbird.html' title='JS logger: Blackbird'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjssBB5DAHLvfbJEC34ayubc1Q3-dbd3wkdm3kiLr_kMksw7UVr_1ylbIA3WWzKJGTTv7hsKPy1k4mcKonB9_KEEHSAUhaXqjDW1zYu3rwAKOC7q9oG0S4v-g51ZyDizwn63vok3JbZxoM/s72-c/bb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-1922133972539437944</id><published>2012-12-01T21:51:00.000-08:00</published><updated>2012-12-02T01:36:10.577-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Code Katas"/><title type='text'>Code Kata: Coin Counters</title><content type='html'>&lt;b&gt;Problem:&lt;/b&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
There are four types of common coins in US currency:&lt;br /&gt;
&amp;nbsp; quarters (25 cents)&lt;br /&gt;
&amp;nbsp; dimes (10 cents)&lt;br /&gt;
&amp;nbsp; nickels (5 cents)&lt;br /&gt;
&amp;nbsp; pennies (1 cent)&lt;br /&gt;
&lt;br /&gt;
There are 6 ways to make change for 15 cents:&lt;br /&gt;
&amp;nbsp; A dime and a nickel;&lt;br /&gt;
&amp;nbsp; A dime and 5 pennies;&lt;br /&gt;
&amp;nbsp; 3 nickels;&lt;br /&gt;
&amp;nbsp; 2 nickels and 5 pennies;&lt;br /&gt;
&amp;nbsp; A nickel and 10 pennies;&lt;br /&gt;
&amp;nbsp; 15 pennies.&lt;br /&gt;
&lt;br /&gt;
How many ways are there to make change for a dollar&lt;br /&gt;
using these common coins? (1 dollar = 100 cents).&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Solution:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The idea is to work out the composition of the coins to make up an amount from the higher to the lower value coins. The remainder amount can be determined recursively.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Source Code:&lt;/b&gt;
&lt;br /&gt;
&lt;!-- Include required JS files --&gt;
&lt;script src=&quot;https://sites.google.com/site/robertkcliu/web/shCore.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
 
&lt;!--
    At least one brush, here we choose JS. You need to include a brush for every 
    language you want to highlight
--&gt;
&lt;script src=&quot;https://sites.google.com/site/robertkcliu/web/shBrushCSharp.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
 
&lt;!-- Include *at least* the core style and default theme --&gt;
&lt;link href=&quot;https://sites.google.com/site/robertkcliu/web/shCore.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
&lt;link href=&quot;https://sites.google.com/site/robertkcliu/web/shThemeDefault.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
 
&lt;!-- You also need to add some content to highlight, but that is covered elsewhere. --&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: c#&quot;&gt;using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace _03_Count_Coins
{
    class CountCoins
    {
        private static readonly int[] CoinValues = { 25, 10, 5, 1 };
        private static int _waysToMakeUp;

        static void Main(string[] args)
        {
            int amountInCents = 100;
            Debug.WriteLine(string.Format(&quot;There are {0} ways to make up {1} cents&quot;, WaysToMakeUpValue(amountInCents), amountInCents));
        }

        private static int WaysToMakeUpValue(int cents)
        {
            MakeUpValueBy(cents, 0, &quot;&quot;);
            return _waysToMakeUp;
        }

        private static void MakeUpValueBy(int cents, int coinValueIndex, string outputPrefix)
        {
            for (int i = coinValueIndex; i &amp;lt; CoinValues.Length; i++)
            {
                Coin coin = new Coin(CoinValues[i]);
                List&amp;lt;coinnumberandremainder&amp;gt; cnrList = coin.GetCoinNumberAndRemainders(cents);
                foreach (CoinNumberAndRemainder cnr in cnrList)
                {
                    if (cnr.remainder == 0)
                    {
                        coin.printLine(outputPrefix, cnr.coinNumber);
                        _waysToMakeUp++;
                    }
                    else
                        MakeUpValueBy(cnr.remainder, i + 1, coin.ToString(outputPrefix, cnr.coinNumber));
                }
            }
        }
    }

    class Coin
    {
        private int _value;

        public Coin(int value)
        {
            _value = value;
        }

        public List&amp;lt;coinnumberandremainder&amp;gt; GetCoinNumberAndRemainders(int amount)
        {
            int numberOfCoins = amount / _value;

            if (_value == 1)
                return new List&amp;lt;coinnumberandremainder&amp;gt;() { GenerateCoinNumberAndRemainder(amount, numberOfCoins) };

            List&amp;lt;coinnumberandremainder&amp;gt; list = new List&amp;lt;coinnumberandremainder&amp;gt;();

            for (int i = numberOfCoins; i &amp;gt; 0; i--)
                list.Add(GenerateCoinNumberAndRemainder(amount, i));

            return list;
        }

        private CoinNumberAndRemainder GenerateCoinNumberAndRemainder(int amount, int numberOfCoins)
        {
            int remainder = amount - (numberOfCoins * _value);
            CoinNumberAndRemainder cnr = new CoinNumberAndRemainder()
            {
                coinNumber = numberOfCoins,
                remainder = remainder
            };
            return cnr;
        }

        public void printLine(string prefix, int coinNumber)
        {
            Debug.WriteLine(ToString(prefix, coinNumber));
        }

        public string ToString(string prefix, int coinNumber)
        {
            if (!string.IsNullOrEmpty(prefix))
                prefix += &quot;, &quot;;

            return prefix + string.Format(&quot;{0} cents with {1} coins&quot;, _value, coinNumber);
        }
    }

    struct CoinNumberAndRemainder
    {
        public int coinNumber;
        public int remainder;
    }
}

&lt;/pre&gt;
&lt;!-- Finally, to actually run the highlighter, you need to include this JS on your page --&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
     SyntaxHighlighter.all()
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/1922133972539437944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2012/12/code-kata-coin-counters.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/1922133972539437944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/1922133972539437944'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2012/12/code-kata-coin-counters.html' title='Code Kata: Coin Counters'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-1642926072769823729</id><published>2012-11-03T04:23:00.000-07:00</published><updated>2012-11-03T04:30:05.735-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Code Katas"/><title type='text'>Code Kata: Bowling Game</title><content type='html'>&lt;b&gt;Problem:&lt;/b&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
Write a program, to score a game of Ten-Pin Bowling.&lt;br /&gt;
&lt;br /&gt;
The scoring rules:&lt;br /&gt;
&lt;br /&gt;
Each game, or &quot;line&quot; of bowling, includes ten turns,&amp;nbsp;or &quot;frames&quot; for the bowler.&lt;br /&gt;
&lt;br /&gt;
In each frame, the bowler gets up to two tries to&amp;nbsp;knock down all ten pins.&lt;br /&gt;
&lt;br /&gt;
If the first ball in a frame knocks down all ten pins,&amp;nbsp;this is called a &quot;strike&quot;. The frame is over. The score&amp;nbsp;for the frame is ten plus the total of the pins knocked&amp;nbsp;down in the next two balls.&lt;br /&gt;
&lt;br /&gt;
If the second ball in a frame knocks down all ten pins,&amp;nbsp;this is called a &quot;spare&quot;. The frame is over. The score&amp;nbsp;for the frame is ten plus the number of pins knocked&amp;nbsp;down in the next ball.&lt;br /&gt;
&lt;br /&gt;
If, after both balls, there is still at least one of the&amp;nbsp;ten pins standing the score for that frame is simply&amp;nbsp;the total number of pins knocked down in those two balls.&lt;br /&gt;
&lt;br /&gt;
If you get a spare in the last (10th) frame you get one&amp;nbsp;more bonus ball. If you get a strike in the last (10th)&lt;br /&gt;
frame you get two more bonus balls.&amp;nbsp;These bonus throws are taken as part of the same turn.&amp;nbsp;If a bonus ball knocks down all the pins, the process&amp;nbsp;does not repeat. The bonus balls are only used to&amp;nbsp;calculate the score of the final frame.&lt;br /&gt;
&lt;br /&gt;
The game score is the total of all frame scores.&lt;br /&gt;
&lt;br /&gt;
Examples:&lt;br /&gt;
&lt;br /&gt;
X indicates a strike&lt;br /&gt;
/ indicates a spare&lt;br /&gt;
- indicates a miss&lt;br /&gt;
| indicates a frame boundary&lt;br /&gt;
&lt;br /&gt;
X|X|X|X|X|X|X|X|X|X||XX&lt;br /&gt;
Ten strikes on the first ball of all ten frames.&lt;br /&gt;
Two bonus balls, both strikes.&lt;br /&gt;
Score for each frame == 10 + score for next two&lt;br /&gt;
balls == 10 + 10 + 10 == 30&lt;br /&gt;
Total score == 10 frames x 30 == 300&lt;br /&gt;
&lt;br /&gt;
9-|9-|9-|9-|9-|9-|9-|9-|9-|9-||&lt;br /&gt;
Nine pins hit on the first ball of all ten frames.&lt;br /&gt;
Second ball of each frame misses last remaining pin.&lt;br /&gt;
No bonus balls.&lt;br /&gt;
Score for each frame == 9&lt;br /&gt;
Total score == 10 frames x 9 == 90&lt;br /&gt;
&lt;br /&gt;
5/|5/|5/|5/|5/|5/|5/|5/|5/|5/||5&lt;br /&gt;
Five pins on the first ball of all ten frames.&lt;br /&gt;
Second ball of each frame hits all five remaining&amp;nbsp;pins, a spare.&lt;br /&gt;
One bonus ball, hits five pins.&lt;br /&gt;
Score for each frame == 10 + score for next one&lt;br /&gt;
ball == 10 + 5 == 15&lt;br /&gt;
Total score == 10 frames x 15 == 150&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Solution:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
The written program allows the user to input their bowling score into the console ball by ball. Then the program prints out the summary tally along with the final score.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Source Code:&lt;/b&gt;
&lt;br /&gt;
&lt;!-- Include required JS files --&gt;
&lt;script src=&quot;https://sites.google.com/site/robertkcliu/web/shCore.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
 
&lt;!--
    At least one brush, here we choose JS. You need to include a brush for every 
    language you want to highlight
--&gt;
&lt;script src=&quot;https://sites.google.com/site/robertkcliu/web/shBrushCSharp.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
 
&lt;!-- Include *at least* the core style and default theme --&gt;
&lt;link href=&quot;https://sites.google.com/site/robertkcliu/web/shCore.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
&lt;link href=&quot;https://sites.google.com/site/robertkcliu/web/shThemeDefault.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;&lt;/link&gt;
 
&lt;!-- You also need to add some content to highlight, but that is covered elsewhere. --&gt;
&lt;pre class=&quot;brush: c#&quot;&gt;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace _02_TenPinBowling
{
    public class TenPinBowling
    {
        static void Main(string[] args)
        {
            ScoreKeeper scoring = new ScoreKeeper();
            scoring.Start();
            scoring.PrintTally();
            WaitForEnterToExit();
        }

        sealed class ScoreKeeper
        {
            private string[] _frameNumbers = {  &quot;1st&quot;, &quot;2nd&quot;, &quot;3rd&quot;, &quot;4th&quot;, &quot;5th&quot;, 
                              &quot;6th&quot;, &quot;7th&quot;, &quot;8th&quot;, &quot;9th&quot;, &quot;10th (last)&quot; };
            private string[] _frameResults = new string[TotalFrames];
            private List&amp;lt;string&amp;gt; _ballResults = new List&amp;lt;string&amp;gt;();
            private string _bonusBallResults;

            public void Start()
            {
                PrintWelcomeMessage();
                InputPlayerScores();
            }

            private static void PrintWelcomeMessage()
            {
                Console.WriteLine(&quot;Welcome to Ten Pin Bowling Alley DownUnder!&quot;);
            }

            private void InputPlayerScores()
            {
                for (int i = 0; i &amp;lt; _frameNumbers.Length; i++)
                {
                    Console.WriteLine(&quot;Pins knocked down on first ball in {0} frame? [number, X, /]&quot;, 
                    _frameNumbers[i]);
                    InputBallScoresInFrame(i);
                }
            }

            private void InputBallScoresInFrame(int index)
            {
                string firstBallResult = Console.ReadLine();
                _ballResults.Add(firstBallResult);
                string secondBallResult = InputSecondBallScoreInFrame(index, firstBallResult);
                _frameResults[index] = firstBallResult + secondBallResult;
                InputBonusBallScores(index, firstBallResult, secondBallResult);
            }

            private string InputSecondBallScoreInFrame(int index, string firstBallResult)
            {
                string secondBallResult = string.Empty;
                if (!firstBallResult.Equals(Strike, StringComparison.InvariantCultureIgnoreCase))
                {
                    Console.WriteLine(&quot;Pins knocked down on second ball in {0} frame? [number, X, /]&quot;, 
                    _frameNumbers[index]);
                    secondBallResult = Console.ReadLine();
                    _ballResults.Add(secondBallResult);
                }
                return secondBallResult;
            }

            private void InputBonusBallScores(int index, string firstBallResult, string secondBallResult)
            {
                if (index == _frameNumbers.Length - 1)
                {
                    if (firstBallResult.Equals(Strike, StringComparison.InvariantCultureIgnoreCase) 
                    || secondBallResult == Spare)
                    {
                        Console.WriteLine(&quot;Pins knocked down on first bonus ball? [number, X]&quot;);
                        string firstBonusBallResult = Console.ReadLine();
                        _ballResults.Add(firstBonusBallResult);
                        string secondBonusBallResult = GetSecondBonusBallScore(firstBallResult);
                        _bonusBallResults = firstBallResult + secondBonusBallResult;
                    }
                }
            }

            private string GetSecondBonusBallScore(string firstBallResult)
            {
                string secondBonusBallResult = string.Empty;
                if (firstBallResult.Equals(Strike, StringComparison.InvariantCultureIgnoreCase))
                {
                    Console.WriteLine(&quot;Pins knocked down on second bonus ball? [number, X]&quot;);
                    secondBonusBallResult = Console.ReadLine();
                    _ballResults.Add(secondBonusBallResult);
                }
                return secondBonusBallResult;
            }

            public void PrintTally()
            {
                Console.WriteLine(&quot;The tally of your game: &quot;);
                for (int i = 0; i &amp;lt; _frameNumbers.Length; i++)
                    Console.Write(_frameResults[i] + &quot;|&quot;);
                Console.WriteLine(&quot;||&quot; + _bonusBallResults);
                Console.WriteLine(&quot;Final score is {0}&quot;, GetFinalScore());
            }

            private int GetFinalScore()
            {
                int finalScore = 0;
                for (int i = 0; i &amp;lt; _ballResults.Count; i++)
                {
                    finalScore += GetBallScore(i) + GetScoreForNextBalls(ref i);
                }
                return finalScore;
            }

            private int GetScoreForNextBalls(ref int index)
            {
                int currentIndex = index;
                string result = _ballResults[index];
                if (result.Equals(Strike, StringComparison.InvariantCultureIgnoreCase))
                {
                    if (index == _ballResults.Count - 3)
                        index += 2;
                    return GetBallScore(currentIndex + 1) + GetBallScore(currentIndex + 2);
                }
                else if (result == Spare)
                {
                    if (index == _ballResults.Count - 2)
                        index++;
                    return GetBallScore(currentIndex + 1);
                }
                return 0;
            }

            private int GetBallScore(int index)
            {
                string score = _ballResults[index];
                if (score.Equals(Strike, StringComparison.InvariantCultureIgnoreCase))
                    return TotalPins;
                else if (score == &quot;/&quot;)
                    return TotalPins - Convert.ToInt32(_ballResults[index - 1]);
                return Convert.ToInt32(score);
            }
        }

        private const string Strike = &quot;x&quot;;
        private const string Spare = &quot;/&quot;;
        private const int TotalPins = 10;
        private const int TotalFrames = 10;

        private static void WaitForEnterToExit()
        {
            Console.WriteLine(&quot;Press enter to exit&quot;);
            Console.Read();
        }
    }
}
&lt;/pre&gt;
&lt;!-- Finally, to actually run the highlighter, you need to include this JS on your page --&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
     SyntaxHighlighter.all()
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/1642926072769823729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2012/11/code-kata-bowling-game.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/1642926072769823729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/1642926072769823729'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2012/11/code-kata-bowling-game.html' title='Code Kata: Bowling Game'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-5357595975476096261</id><published>2012-10-27T05:54:00.002-07:00</published><updated>2012-10-27T08:32:44.088-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Code Katas"/><title type='text'>Code Kata: Anagrams</title><content type='html'>Let&#39;s do some code katas. Starting with ones from&amp;nbsp;&lt;a href=&quot;http://cyber-dojo.com/&quot;&gt;cyber-dojo&lt;/a&gt;. The programming language is in C#. Please let me know if &amp;nbsp;you have any comments. Thanks~&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Problem:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Write a program to generate all potential&lt;br /&gt;
anagrams of an input string.&lt;br /&gt;
&lt;br /&gt;
For example, the potential anagrams of &quot;biro&quot; are&lt;br /&gt;
&lt;br /&gt;
biro bior brio broi boir bori&lt;br /&gt;
ibro ibor irbo irob iobr iorb&lt;br /&gt;
rbio rboi ribo riob roib robi&lt;br /&gt;
obir obri oibr oirb orbi orib&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Solution:&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
The solution comes with two flavors: recursive and non-recursive ones. The recursive one is more intuitive and easier to come up with. The non-recursive one I had to reference from the existing Knuth algorithms.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Source Code:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;

&lt;!-- Include required JS files --&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://sites.google.com/site/robertkcliu/web/shCore.js&quot;&gt;&lt;/script&gt;
 
&lt;!--
    At least one brush, here we choose JS. You need to include a brush for every 
    language you want to highlight
--&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://sites.google.com/site/robertkcliu/web/shBrushCSharp.js&quot;&gt;&lt;/script&gt;
 
&lt;!-- Include *at least* the core style and default theme --&gt;
&lt;link href=&quot;https://sites.google.com/site/robertkcliu/web/shCore.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
&lt;link href=&quot;https://sites.google.com/site/robertkcliu/web/shThemeDefault.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;
 
&lt;!-- You also need to add some content to highlight, but that is covered elsewhere. --&gt;
&lt;pre class=&quot;brush: c#&quot;&gt;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace _01_Anagrams
{
    class Anagrams
    {
        static void Main(string[] args)
        {
            RecursivePermutation();
            NonRecursivePermutation();
        }

        private static void RecursivePermutation()
        {
            new Anagrams().ProduceAnagrams(&quot;biro&quot;, &quot;&quot;);
        }

        private static void NonRecursivePermutation()
        {
            Permutation perm = new Permutation(&quot;biro&quot;);
            do
            {
                string value = perm.GetNext();
                Debug.WriteLine(value);
            }
            while (perm.NextPermutation());
        }

        private void ProduceAnagrams(string input, string prefix)
        {
            for (int i = 0; i &lt; input.Length; i++)
            {
                if (input.Length &gt; 1)
                {
                    string remainingInput = input.Remove(i, 1);
                    ProduceAnagrams(remainingInput, prefix + input[i]);
                }
                else if (input.Length == 1)
                {
                    Debug.WriteLine(prefix + input[i]);
                }
            }
        }
    }

    class Permutation
    {
        private List&amp;lt;string&amp;gt; _input = new List&amp;lt;string&amp;gt;();
        private int[] _indices;

        public Permutation(string input)
        {
            foreach (char c in input)
                _input.Add(c.ToString());
            _indices = new int[input.Length];
            for (int i = 0; i &lt; _indices.Length; i++)
                _indices[i] = i;
        }

        public string GetNext()
        {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i &lt; _indices.Length; i++)
                sb.Append(_input[_indices[i]]);
            return sb.ToString();
        }

        public bool NextPermutation()
        {
            int i, j, l;
            for (j = _input.Count - 2; j &gt;= 0; j--)
                if (_indices[j + 1] &gt; _indices[j])
                    break;
            if (j == -1)
                return false;
            
            for (l = _input.Count - 1; l &gt; j; l--)
                if (_indices[l] &gt; _indices[j])
                    break;
            
            int swap = _indices[j];
            _indices[j] = _indices[l];
            _indices[l] = swap;

            for (i = j + 1; i &lt; _input.Count; i++)
            {
                if (i &gt; _indices.Length - i + j)
                    break;
                swap = _indices[i];
                _indices[i] = _indices[_indices.Length - i + j];
                _indices[_indices.Length - i + j] = swap;
            }
            return true;
        }
    }
}
&lt;/pre&gt;
 
&lt;!-- Finally, to actually run the highlighter, you need to include this JS on your page --&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
     SyntaxHighlighter.all()
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/5357595975476096261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2012/10/code-kata-anagrams.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/5357595975476096261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/5357595975476096261'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2012/10/code-kata-anagrams.html' title='Code Kata: Anagrams'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-3897698193594664041</id><published>2012-09-28T04:05:00.001-07:00</published><updated>2012-09-28T04:05:48.825-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><title type='text'>Touchscreen no longer works =&gt; Remote control your android device</title><content type='html'>So I have a case of an android device (HTC tattoo, almost three years in running) with its touchscreen not functioning anymore. I was like OK, there&#39;s got to be a way for me to still use it with the hardware inputs/buttons. I wanted to connect to Wifi but I had no idea how I can possibly enter the password. Moreover, I wanted to register my Line application by email, so I can use Line on other devices, e.g. iPad. Again, malfunctioned touchscreen equates to no keyboard input.&lt;br /&gt;
&lt;br /&gt;
The way around this is to remote control my android device via USB debugging, accompanied by the useful androidscreencast Java program. The steps are simple:&lt;br /&gt;
&lt;br /&gt;
(1) Enable debugging by USB on your device&lt;br /&gt;
(2) Download the &lt;a href=&quot;http://developer.android.com/sdk/index.html&quot;&gt;Android SDK&lt;/a&gt; and then the Android SDK Platform tools&lt;br /&gt;
(3) Download the &lt;a href=&quot;http://code.google.com/p/androidscreencast/&quot;&gt;androidscreencast &lt;/a&gt;application&lt;br /&gt;
(4) Connect the Android device to your computer via USB&lt;br /&gt;
(5) Run the androidscreencast application&lt;br /&gt;
&lt;br /&gt;
Long and behold, you will see and feel your Android device in a new light!&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiceHbGcHt-R3-4kk6_iEYGLvvxEzZ4nCSyfvcza9ZVNTpB-XA-vOcTPm4yMqqw4ZePntb_DndDcmMR9si8ywXA4eJtzRBOLkrQ7D6A8wW2q9gFpu97Dj8YPsIhKkKfci6eH22ugXfMdEU/s1600/androidscreencast_example.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiceHbGcHt-R3-4kk6_iEYGLvvxEzZ4nCSyfvcza9ZVNTpB-XA-vOcTPm4yMqqw4ZePntb_DndDcmMR9si8ywXA4eJtzRBOLkrQ7D6A8wW2q9gFpu97Dj8YPsIhKkKfci6eH22ugXfMdEU/s1600/androidscreencast_example.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
More details can be found &lt;a href=&quot;http://www.howtogeek.com/howto/42491/how-to-remote-view-and-control-your-android-phone/&quot;&gt;here&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/3897698193594664041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2012/09/touchscreen-no-longer-works-remote.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/3897698193594664041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/3897698193594664041'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2012/09/touchscreen-no-longer-works-remote.html' title='Touchscreen no longer works =&gt; Remote control your android device'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiceHbGcHt-R3-4kk6_iEYGLvvxEzZ4nCSyfvcza9ZVNTpB-XA-vOcTPm4yMqqw4ZePntb_DndDcmMR9si8ywXA4eJtzRBOLkrQ7D6A8wW2q9gFpu97Dj8YPsIhKkKfci6eH22ugXfMdEU/s72-c/androidscreencast_example.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-3411202496765579310</id><published>2012-08-20T20:10:00.000-07:00</published><updated>2012-08-20T20:10:46.614-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Travelling"/><title type='text'>How to pack your luggage</title><content type='html'>This link&amp;nbsp;&lt;a href=&quot;http://www.realsimple.com/work-life/travel/planning/pack-suitcase-00000000002225/index.html&quot;&gt;How To: Pack a Suitcase&lt;/a&gt;&amp;nbsp;is titled for busy moms. But I think it can very well suit most folks as well. I googled this topic on how to pack a luggage as I will soon travel and live in Australia. And today, I got heaps of stuff to pack with a maximum limit of 20 kg to bring!</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/3411202496765579310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2012/08/how-to-pack-your-luggage.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/3411202496765579310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/3411202496765579310'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2012/08/how-to-pack-your-luggage.html' title='How to pack your luggage'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-3544919197064025728</id><published>2012-07-27T03:06:00.000-07:00</published><updated>2013-03-13T06:03:18.626-07:00</updated><title type='text'>A High Availability problem that can only be guided by the expert availability</title><content type='html'>Sometimes, after searching on ends for a possible and most elegant solution for a technical problem just doesn&#39;t come up with the goods. Then it is time to deploy your question on a domain/expert forum. In my case, I had a High Availability (HA) setup problem. I won&#39;t go into the specifics here. But it is just interesting that I find asking your own question on a forum like the SQL server forum can draw the attention of experts who will be able to offer their opinions most tailored to your problem!&lt;br /&gt;
&lt;br /&gt;
So here&#39;s my&amp;nbsp;&lt;a href=&quot;http://social.msdn.microsoft.com/Forums/en-US/sqlreplication/thread/ee3a576c-3a2e-420f-babc-133ec0e8805f&quot;&gt;Forum Question of the Day&lt;/a&gt;&amp;nbsp;as a sample~</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/3544919197064025728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2012/07/a-high-availability-problem-that-can.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/3544919197064025728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/3544919197064025728'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2012/07/a-high-availability-problem-that-can.html' title='A High Availability problem that can only be guided by the expert availability'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-5917663143307332558</id><published>2012-07-22T10:48:00.001-07:00</published><updated>2013-03-14T04:42:39.310-07:00</updated><title type='text'>Interop Las Vegas (May, 2012)</title><content type='html'>&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Interop, the leading business technology event, is held at
different times of the year at locations including Las Vegas, New York, Tokyo,
and Mumbai. This year, I was very privileged to attend the one in Las Vegas,
where there were over 300 exhibitors in the expo and 100 conferences by topics.
Here, except for gambling, the areas covered in the conference are very wide
range: cloud computing, virtualization, security, mobility and data center
advances. &lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
In the enterprise cloud summit, firstly, there is a fact
that cloud is becoming generally accepted as companies gain experience with the
concepts. According to CompTIA’s survey, 69% (vs. 42% last year) of individuals
rated themselves as familiar with the cloud. And 69% of companies are using
some form of SaaS application, whilst 36% of companies not using IaaS/PaaS
currently plan to do so in the future. So the reliance on cloud is every so
increasing. The sited reasons are lower costs, simpler/quicker implementation,
and expanded capabilities. There are challenges however, such as integration
with existing systems, vendor lock-in &amp;amp; selection, and changes to IT policy
and staff training. And there are hidden costs of the cloud as suggested by
company like Cloudability. If not under control (which can be hard), high costs
due to unused instances and over-provisioning are expected. &lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Other points of interests as mentioned in this cloud summit
are:&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;span style=&quot;background-color: white; text-indent: -0.25in;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;background-color: white; text-indent: -0.25in;&quot;&gt;Openness in cloud platforms are starting to see
momentum as initiatives such as OpenStack gains success. The open cloud
ecosystem is now very rich. Rackspace, Cloud Stack, Cloud Foundry, Eucalyptus
and cloudscaling are just some to name a few. Diversity and cheaper
implementation are the two key reasons to adopt these open cloud systems. And
since the code is open, these systems should be secure and more trustworthy.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: white; text-indent: -0.25in;&quot;&gt;Generally, users tend to choose fun(ctionality)
over security. And this brings lots of headaches to the IT administrators. One
of the solutions at the virtualization level is that the Hypervisor will undergo
massive changes starting this year to become the root of security for clients
and clouds alike. Startups like Bromium looks toward a Byzantine Secure System
as a part of the change.&lt;span style=&quot;font-size: 9px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: white; text-indent: -0.25in;&quot;&gt;To be in the economic game these days, companies
are building and opening APIs for accessing their data services. The data
services can be monetized by APIs to sell to external vendors and partners. In
turn, the ecosystem of your business consolidates and grows at a higher level
of pace.&lt;span style=&quot;font-size: 9px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: white; text-indent: -0.25in;&quot;&gt;The increasing number of people bring their own
devices (BYOD) to work is an open security question left still largely
unaddressed at this point.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
Interop has been mostly a business driven event. The number
of topics and products on display at the expo were staggering. And security
will continue to be the cornerstone and concern from both the vendor’s and
customer’s points of views. It will be very interesting to see how new security
problems and opportunities will be created in this every changing cloud era!&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD7l5qYVgj7AJjKX2whCnGfv-WldBus2eP0gZOGD0vvRzn9wyN2Knw6juWEZK_n3NklbxuPx2jtvfj5XVjIX4Us2BfAB-g8pzH6ZqM_VKFZv255MIP7d3OBap0Mx_HBJ-9DdjiVASGyVA/s1600/Panelists.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;265&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD7l5qYVgj7AJjKX2whCnGfv-WldBus2eP0gZOGD0vvRzn9wyN2Knw6juWEZK_n3NklbxuPx2jtvfj5XVjIX4Us2BfAB-g8pzH6ZqM_VKFZv255MIP7d3OBap0Mx_HBJ-9DdjiVASGyVA/s400/Panelists.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;MsoNormal&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/5917663143307332558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2012/07/interop-las-vegas-may-2012.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/5917663143307332558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/5917663143307332558'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2012/07/interop-las-vegas-may-2012.html' title='Interop Las Vegas (May, 2012)'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD7l5qYVgj7AJjKX2whCnGfv-WldBus2eP0gZOGD0vvRzn9wyN2Knw6juWEZK_n3NklbxuPx2jtvfj5XVjIX4Us2BfAB-g8pzH6ZqM_VKFZv255MIP7d3OBap0Mx_HBJ-9DdjiVASGyVA/s72-c/Panelists.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-7941604356551135900</id><published>2012-07-17T01:21:00.001-07:00</published><updated>2012-07-17T01:23:09.549-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>Oh, why that DLL is not found!</title><content type='html'>I was testing a piece of code to do with KMIP (Key Management Interoperability Protocol). The KMIP client code includes a C# wrapper that loads a C++ client library. However, I was stuck in a weird problem where I was getting the exception saying that this particular C++ KmipClient.dll is not found. But in fact, the file is located where the program expects it to be. So a chat with a fellow worker led me to check the DLL dependency for the DLL. I then went onto using the&amp;nbsp;&lt;a href=&quot;http://www.dependencywalker.com/&quot;&gt;Dependency Walker&lt;/a&gt;&amp;nbsp;tool. Below is the result of loading the KmipClient.dll.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvUpZkz951hEuEXZTISZC-2hh8QuY_0mLgZL2LhgbYTKCglQIJRPd8GMXw-64s589l-TKPgI6u-2cKtUS9YFRnL8Ev0RNPKTW60NyJwxth0G4D1ydhWBwV6TkyO5F7Ge5Mydu8w5yDjNs/s1600/dependency.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;219&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvUpZkz951hEuEXZTISZC-2hh8QuY_0mLgZL2LhgbYTKCglQIJRPd8GMXw-64s589l-TKPgI6u-2cKtUS9YFRnL8Ev0RNPKTW60NyJwxth0G4D1ydhWBwV6TkyO5F7Ge5Mydu8w5yDjNs/s640/dependency.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
The issue has been discovered! The root cause was the INGICAPI.DLL which is needed by KmipClient.dll was not loaded because it was not placed along with KmipClient.dll. So check your dependencies, folks :)</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/7941604356551135900/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2012/07/oh-why-that-dll-is-not-found.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/7941604356551135900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/7941604356551135900'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2012/07/oh-why-that-dll-is-not-found.html' title='Oh, why that DLL is not found!'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvUpZkz951hEuEXZTISZC-2hh8QuY_0mLgZL2LhgbYTKCglQIJRPd8GMXw-64s589l-TKPgI6u-2cKtUS9YFRnL8Ev0RNPKTW60NyJwxth0G4D1ydhWBwV6TkyO5F7Ge5Mydu8w5yDjNs/s72-c/dependency.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-655238804249276007</id><published>2012-04-19T01:50:00.000-07:00</published><updated>2012-04-19T01:50:20.307-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>OMG, how to recover your Window&#39;s administrator password</title><content type='html'>I was&amp;nbsp;logging into my development VM machine when I found out that the administrator password that I set just a day before is invalid for some weird reason... (later, I think it&#39;s because of some password expiry policy that I cannot reuse this previous password again). This got me really frustrated since much of my code changes have yet to be submitted and are located on this machine. The impasse of not able to login to access your work code changes feels like someone has just finished writing a long section of thesis but forgot to press the &quot;save&quot; button then due to power failure, the section in work is no longer available.&lt;br /&gt;
&lt;br /&gt;
Onto the road of recovery...&lt;br /&gt;
&lt;br /&gt;
Thankfully, there&#39;s a solution to the password dilemma. I was able to reset my Windows Server 2003 administrator password by using&amp;nbsp;&lt;a href=&quot;http://www.petri.co.il/uri/?pogostick.net/~pnh/ntpasswd/cd080802.zip&quot; style=&quot;background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; text-decoration: none;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;cd080802.zip&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;span style=&quot;background-color: white; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px;&quot;&gt;&amp;nbsp;CD image as found in&amp;nbsp;&lt;a href=&quot;http://www.petri.co.il/forgot_administrator_password.htm&quot;&gt;Windows Password Recovery&lt;/a&gt;. I simply mounted the bootable CD image as the first thing to run on system startup in VM. Then following the on-screen script instructions and using the default values mostly, the password reset was done. And life is back to normal again! Sweet~&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/655238804249276007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2012/04/omg-how-to-recover-your-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/655238804249276007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/655238804249276007'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2012/04/omg-how-to-recover-your-windows.html' title='OMG, how to recover your Window&#39;s administrator password'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-1096638510829656351</id><published>2012-04-05T08:46:00.001-07:00</published><updated>2012-04-05T08:50:26.562-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Travelling"/><title type='text'>Day trip to Hong Kong</title><content type='html'>I was visiting Hong Kong for a day because of the mandatory every-four-month-need-to-go-out-for-an-overseas-Taiwanese-guy-not-wanting-to-be-enlisted-into-the-military thing. This time, rather than just staying for a few hours at the airport then fly back to Taiwan on the next available flight, I decided to be more of a tourist.&lt;br /&gt;
&lt;br /&gt;
Thanks to a travel guide book I bought at the airport bookshop in Taoyuan international airport, I got a sense of the place to visit and have meals, and the transportation allowing so. Once arrived in Hong Kong, the weather was a welcoming and balmy 23 degree&amp;nbsp;Celsius. And I got the 100 HKD airport express ticket to/from Hong Kong station and the airport. (This is a special one-day round trip ticket). Since it was noon when I arrived, I went to this beef noodle place famous for it&#39;s fine beef stock and meat. [九記牛腩]&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUsyXHb_INXzu6gpHOLkJT3bgf0X1D34cREnw6fEE7mUf9DQ-b5STDgwiRlt-8BunOt8lNktZKz_c7So_aNudozDGYfGKulR1uGU4fgj6cDXGC4-W0AXyElBkeRoP9rMu_49TKVWs5N-I/s1600/IMG_20120402_130939.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUsyXHb_INXzu6gpHOLkJT3bgf0X1D34cREnw6fEE7mUf9DQ-b5STDgwiRlt-8BunOt8lNktZKz_c7So_aNudozDGYfGKulR1uGU4fgj6cDXGC4-W0AXyElBkeRoP9rMu_49TKVWs5N-I/s320/IMG_20120402_130939.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
As you can tell from the photo, there was quite a line!&lt;br /&gt;
Next stop after the lunch was St Johns Cathedral. Visiting this place in&amp;nbsp;solitude was quite relaxing! And the brief walk about helps digestion and soul cleansing at the same time :)&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaK3P12vo8jPuI37YZW_5CI2D-sRauPa9s4nSlpF5jqjYQ1ZINuh24zrDWsUOvqJCNGynxbCtsi4pqMorKdfnY-2f1Ajc6c1OIiTNP-7RxDkp6wDZa3znUXF72nhmsH6Q7esiwRoCTk1c/s1600/IMG_20120402_140640.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaK3P12vo8jPuI37YZW_5CI2D-sRauPa9s4nSlpF5jqjYQ1ZINuh24zrDWsUOvqJCNGynxbCtsi4pqMorKdfnY-2f1Ajc6c1OIiTNP-7RxDkp6wDZa3znUXF72nhmsH6Q7esiwRoCTk1c/s320/IMG_20120402_140640.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK12wDkc62FKr4ivJpIY7pC2JTx_D4jUACZbwAtvGrfAHelZl6QxHFGh_Gs9cnAon9o49RffxXJtWXibP3YkT19EjUfxbpvI3xj1a2F7YB2bxW-7sRkeMf6bXZciy4W-b_d2cBAk1Nd8M/s1600/IMG_20120402_140651.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK12wDkc62FKr4ivJpIY7pC2JTx_D4jUACZbwAtvGrfAHelZl6QxHFGh_Gs9cnAon9o49RffxXJtWXibP3YkT19EjUfxbpvI3xj1a2F7YB2bxW-7sRkeMf6bXZciy4W-b_d2cBAk1Nd8M/s320/IMG_20120402_140651.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqGptuufNfGkVQu6fRvnf-rJ2iFUYvi7y1EOzMPKsZQv6dqPs3JJORG-mQpuRNVJHdzDPHm_uerw6CBGlYYMJQnfTGg-M85NXZuMw-waftJt7P8yAaCgia6GKdamqwx313dVr3gS3NinA/s1600/IMG_20120402_140754.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqGptuufNfGkVQu6fRvnf-rJ2iFUYvi7y1EOzMPKsZQv6dqPs3JJORG-mQpuRNVJHdzDPHm_uerw6CBGlYYMJQnfTGg-M85NXZuMw-waftJt7P8yAaCgia6GKdamqwx313dVr3gS3NinA/s320/IMG_20120402_140754.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKhMLi8NOA-1SYStzXVx9tYMdgq9reM_nH4LhMqzWcc9rzqatR-RSZI_N0s6QLbGUaOZoVeRqrDuK3JTT1mvRhpRiEU4SGy-GePWM_Bjhxrl85yzd1rgywQCSZYWCbZoigK7zHsvC3zrM/s1600/IMG_20120402_141257.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKhMLi8NOA-1SYStzXVx9tYMdgq9reM_nH4LhMqzWcc9rzqatR-RSZI_N0s6QLbGUaOZoVeRqrDuK3JTT1mvRhpRiEU4SGy-GePWM_Bjhxrl85yzd1rgywQCSZYWCbZoigK7zHsvC3zrM/s320/IMG_20120402_141257.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
The Hong Kong park was inviting as a little getaway from the hectic and crowded city atmosphere.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT5hfg5Id_v1c1y5JmGBY-jtNx2Tesr3mXK0-Wd52OGunguRxPgvql7xvVL-kfiY4pu84r0yz88_T0oiny7AUZRffr-5ceRdQtS3xHFSZYtDVRaPqeSGBMUSZBX1salC9hUiijgyq4uUo/s1600/IMG_20120402_143747.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT5hfg5Id_v1c1y5JmGBY-jtNx2Tesr3mXK0-Wd52OGunguRxPgvql7xvVL-kfiY4pu84r0yz88_T0oiny7AUZRffr-5ceRdQtS3xHFSZYtDVRaPqeSGBMUSZBX1salC9hUiijgyq4uUo/s320/IMG_20120402_143747.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5rvJym6j6J9nrscE_s17Mb-fxjQ8AKRjKKI6wK_5olCFO3ECI9dKsAz8OA_LlrPk7JHjhTwMea7FxegF0KvTtVyJVZEaJuJm5lc1V_THoy6soL_zXFbp_gl1gLC3wEkdXrdBzwyKEu7g/s1600/IMG_20120402_144234.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5rvJym6j6J9nrscE_s17Mb-fxjQ8AKRjKKI6wK_5olCFO3ECI9dKsAz8OA_LlrPk7JHjhTwMea7FxegF0KvTtVyJVZEaJuJm5lc1V_THoy6soL_zXFbp_gl1gLC3wEkdXrdBzwyKEu7g/s320/IMG_20120402_144234.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
The tramcars here offer easy accessibility to major stops on Hong Kong island. It&#39;s an unique hop onto the 2nd floor of a train experience if you&#39;ve never had before.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqUf_DxfQjs8YDqEtoXAOmHZh2ygxv5gpHfIOJDguFw22iJCjUy6p_Ice5X97MqSoydYcsdbjk1VpIfti87Yu7QNlOSAVX3EjKwoWj4gob16Vriw66QiBHY6zYDb2AO5yd6wlWEYQAaTI/s1600/IMG_20120402_151559.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqUf_DxfQjs8YDqEtoXAOmHZh2ygxv5gpHfIOJDguFw22iJCjUy6p_Ice5X97MqSoydYcsdbjk1VpIfti87Yu7QNlOSAVX3EjKwoWj4gob16Vriw66QiBHY6zYDb2AO5yd6wlWEYQAaTI/s320/IMG_20120402_151559.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;br /&gt;
For afternoon tea, I had some famous&amp;nbsp;con-gees with pork and 皮蛋.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG2zuSkCTup-6zDcM97pTR0pu3LRllK3aXF-xsMwoo6Y98mI-8r3X5kIJjfVc8h5wCnlTFGCuED1V8_pHgPT80dlCPRQ-9sgiPkwj9_x-QR8-ILVg3J4vZ2_IYp8ROcCrE6Wao8q8fMpA/s1600/IMG_20120402_153743.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG2zuSkCTup-6zDcM97pTR0pu3LRllK3aXF-xsMwoo6Y98mI-8r3X5kIJjfVc8h5wCnlTFGCuED1V8_pHgPT80dlCPRQ-9sgiPkwj9_x-QR8-ILVg3J4vZ2_IYp8ROcCrE6Wao8q8fMpA/s320/IMG_20120402_153743.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuEYCAazHNSKbcdVGld3__0RCV41mMKL4jiICYh3qmSTB378KAT4aDcHhZEublAYyJ5_FCFwzCWQw_PlTB-sOand4ITmi5cPQyZQ3TmdDmj4Pm5fTCW22G4eushXV5pJ5robUQhRTihP4/s1600/IMG_20120402_154255.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjuEYCAazHNSKbcdVGld3__0RCV41mMKL4jiICYh3qmSTB378KAT4aDcHhZEublAYyJ5_FCFwzCWQw_PlTB-sOand4ITmi5cPQyZQ3TmdDmj4Pm5fTCW22G4eushXV5pJ5robUQhRTihP4/s320/IMG_20120402_154255.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Further still, I had some whole milk pudding that comes with a flaky thin films on the surface. The combined texture was amazing and satisfying to taste.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLAFAZbCB5NTrEy-vWYu8wTINXHmMLVYK08Td7a2hYLd4CXaGihEsFZtFg9YaEDWKaVwzatCVXCyCM1p8rxD8GfZDAv8ekyWWgKm8fPz_XUqbZT_UnVd6cQG7e3Kiy59A2fo_ctkRt8iM/s1600/IMG_20120402_160946.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLAFAZbCB5NTrEy-vWYu8wTINXHmMLVYK08Td7a2hYLd4CXaGihEsFZtFg9YaEDWKaVwzatCVXCyCM1p8rxD8GfZDAv8ekyWWgKm8fPz_XUqbZT_UnVd6cQG7e3Kiy59A2fo_ctkRt8iM/s320/IMG_20120402_160946.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
A little stop at the western market to see the its antique architecture was a good way to round off the day&#39;s visit.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6OuzLciKHYLbQGbqgYwvPSoqxGYYia10zUyWvnz-Chwyk-wps5ZmP60EJ_bfkhHxd55wuusNO5ngJk3oRPJcVu1hTI2OO3S5W8c-T_PtDaOonTHYtUK4ToAo2PzckqmRtpkXkI_xLzdU/s1600/IMG_20120402_171329.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6OuzLciKHYLbQGbqgYwvPSoqxGYYia10zUyWvnz-Chwyk-wps5ZmP60EJ_bfkhHxd55wuusNO5ngJk3oRPJcVu1hTI2OO3S5W8c-T_PtDaOonTHYtUK4ToAo2PzckqmRtpkXkI_xLzdU/s320/IMG_20120402_171329.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
I was home sweet home at 11 pm. Time for bed!</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/1096638510829656351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2012/04/day-trip-to-hong-kong.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/1096638510829656351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/1096638510829656351'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2012/04/day-trip-to-hong-kong.html' title='Day trip to Hong Kong'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUsyXHb_INXzu6gpHOLkJT3bgf0X1D34cREnw6fEE7mUf9DQ-b5STDgwiRlt-8BunOt8lNktZKz_c7So_aNudozDGYfGKulR1uGU4fgj6cDXGC4-W0AXyElBkeRoP9rMu_49TKVWs5N-I/s72-c/IMG_20120402_130939.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-4584977124224449355</id><published>2012-03-26T02:19:00.000-07:00</published><updated>2012-03-26T02:19:37.857-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Philosophy"/><title type='text'>Engineering Mantra of the Day</title><content type='html'>As an engineer/software developer, I cannot stop but thinking about the importance of usability in the products and services that we produce. Thus I come up with my quote of the day:&lt;br /&gt;
&lt;br /&gt;
&quot;User is the king. We (engineers) bow only to the king!&quot;</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/4584977124224449355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2012/03/engineering-mantra-of-day.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/4584977124224449355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/4584977124224449355'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2012/03/engineering-mantra-of-day.html' title='Engineering Mantra of the Day'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-7518549240872501744</id><published>2012-03-07T06:37:00.003-08:00</published><updated>2013-03-14T04:41:40.547-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Philosophy"/><title type='text'>Why Work?</title><content type='html'>Been feeling like a bum for the last few days for some weird reasons. Maybe it&#39;s the beginning of the spring&#39;s warm weather that brings about this feeling. Or maybe it&#39;s just the general lethargy about work and the point of it all that make me wondering &quot;why work&quot;?&lt;br /&gt;
&lt;br /&gt;
I thought about this question for a moment. Then what follows are the answers that came to my mind~&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Work is something there for us to do. It&#39;s like the &quot;thing&quot; to do. On the other hand if not work, what else is there meaningful to do that we&#39;re willing to spend 40+ hours on it? I don&#39;t think I want to do &quot;nothing&quot; for most of my time.&lt;/li&gt;
&lt;li&gt;Money power: Work pays (usually). And the derived money can be used for other things/services otherwise hard to produce by ourselves e.g. dining out to eat delicious cuisine, or putting a roof over our heads.&lt;/li&gt;
&lt;li&gt;Enjoyment, fun and passion. It&#39;s what we love to do. Work can give us a sense of fun and enjoyment! (For me, it&#39;s writing useful software and solving interesting user/technical problems that give me the greatest satisfaction).&lt;/li&gt;
&lt;li&gt;Along the line of enjoyment. Work can be team-oriented. The teamwork and social aspect of work can be why people enjoy their jobs.&lt;/li&gt;
&lt;li&gt;Contribution to the public society: maybe the product/service you provide helps with the growth and evolution of society in a good way!&lt;/li&gt;
&lt;li&gt;From a Christian perspective, work is in itself the expression of the glorification of God. Simply put, doing good work serves God well.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
This topic on work and the reason behind work is a philosophical one that has been much debated and examined before. Here are some insightful articles I found to be very related and interesting. Enjoy!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://www.thesimpledollar.com/2010/02/16/why-work/&quot;&gt;Why work and what work you dream of doing?&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://www.lifehack.org/articles/lifestyle/why-work.html&quot;&gt;Work and Passion&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://opensource.com/business/10/11/why-work&quot;&gt;Why work? (more from a management perspective)&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://www.faith-at-work.net/Docs/WhyWork.pdf&quot;&gt;Why work? (more from a Christian perspective)&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/7518549240872501744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2012/03/why-work.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/7518549240872501744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/7518549240872501744'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2012/03/why-work.html' title='Why Work?'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-3673222404268523351</id><published>2012-03-02T01:48:00.003-08:00</published><updated>2012-03-06T19:26:02.873-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>Know your IIS Log Folder Naming?</title><content type='html'>Ever wonder which IIS log folder belongs to which website? The answer is fairly straight forward.&lt;br /&gt;
&lt;br /&gt;
The folder in which IIS logs are located is called W3SVC[Website ID]&lt;website id=&quot;&quot;&gt;&lt;website id=&quot;&quot;&gt;\.&lt;/website&gt;&lt;/website&gt;&lt;br /&gt;
&lt;br /&gt;
For IIS 7+, you can find out the website ID by visiting the website&#39;s advanced properties as below:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglhJ4dCJXUOqrCg9saOnPJ1Efuvr6SY36kSrMPVHilA4b5Pw2fks1CVYIoNqyEkWqhS-ooQsRHzbMTy1RsTf0VQ_HMyASeMaFNkdpx8Qixg4IsdWKmqGHmfCjGm7e51yYwxrj7s010xWc/s1600/IIS7LogFolder.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglhJ4dCJXUOqrCg9saOnPJ1Efuvr6SY36kSrMPVHilA4b5Pw2fks1CVYIoNqyEkWqhS-ooQsRHzbMTy1RsTf0VQ_HMyASeMaFNkdpx8Qixg4IsdWKmqGHmfCjGm7e51yYwxrj7s010xWc/s640/IIS7LogFolder.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
For IIS 6, you can view the exact website&#39;s log folder here:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxE-GXhQv0wBA04kwUnIlpCs6Os2vpzfryYA3A93oVbyDnXxGsarFLmbolm9gBCFMUCL2Bpkjhxu0HnL9Riow5alfA987H8vvdHBY2QVJD6ACFm7FlwQqhl6i0EkfXiMmbSSLEGRa1yCE/s1600/IIS6LogFolder.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;328&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxE-GXhQv0wBA04kwUnIlpCs6Os2vpzfryYA3A93oVbyDnXxGsarFLmbolm9gBCFMUCL2Bpkjhxu0HnL9Riow5alfA987H8vvdHBY2QVJD6ACFm7FlwQqhl6i0EkfXiMmbSSLEGRa1yCE/s640/IIS6LogFolder.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/3673222404268523351/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2012/03/iis-log-folder-naming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/3673222404268523351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/3673222404268523351'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2012/03/iis-log-folder-naming.html' title='Know your IIS Log Folder Naming?'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglhJ4dCJXUOqrCg9saOnPJ1Efuvr6SY36kSrMPVHilA4b5Pw2fks1CVYIoNqyEkWqhS-ooQsRHzbMTy1RsTf0VQ_HMyASeMaFNkdpx8Qixg4IsdWKmqGHmfCjGm7e51yYwxrj7s010xWc/s72-c/IIS7LogFolder.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-5845941380741320402</id><published>2012-02-03T02:54:00.000-08:00</published><updated>2013-03-13T06:04:34.353-07:00</updated><title type='text'>How to resize your VM image disk</title><content type='html'>When your VMware image size is not large enough, yet you don&#39;t want to create a new image with OS installation from scratch, one can perform the resizing of the VM image. One of the easiest ways to do so is with the VMware converter.&lt;br /&gt;
&lt;br /&gt;
Steps:&lt;br /&gt;
&lt;br /&gt;
1. Download &lt;a href=&quot;http://www.vmware.com/products/converter/&quot;&gt;&lt;b&gt;VMware converter&lt;/b&gt;&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
2. Shutdown the virtual machine.&lt;br /&gt;
&lt;br /&gt;
3. Start the VMware converter software tool.&lt;br /&gt;
&lt;br /&gt;
4. Click on &quot;&lt;b&gt;Convert machine&lt;/b&gt;&quot; button.&lt;br /&gt;
&lt;br /&gt;
5. In the source type field, choose the option &quot;&lt;b&gt;VMware Workstation or other VMware virtual machine&lt;/b&gt;&quot;. And click next.&lt;br /&gt;
&lt;br /&gt;
6. In the Destination System panel, choose also the option&amp;nbsp;&quot;&lt;b&gt;VMware Workstation or other VMware virtual machine&lt;/b&gt;&quot; for the destination type field.&lt;br /&gt;
&lt;br /&gt;
7. For the &lt;b&gt;VMware product&lt;/b&gt;, select the version of the VMware product on which your image is based on.&lt;br /&gt;
&lt;br /&gt;
8. Specify the &lt;b&gt;virtual machine name&lt;/b&gt; and &lt;b&gt;location &lt;/b&gt;accordingly to your environment. And click next.&lt;br /&gt;
&lt;br /&gt;
9. Edit the &quot;&lt;b&gt;Data to copy&lt;/b&gt;&quot; part, and choose &quot;&lt;b&gt;Select volumes to copy&lt;/b&gt;&quot; for the data copy type. Then choose &quot;&lt;b&gt;&lt;type gb=&quot;&quot; in=&quot;&quot; size=&quot;&quot;&gt;&lt;/type&gt;&lt;/b&gt;&quot; in the destination size drop-down field. Specify the size in GB, e.g. 60.&lt;br /&gt;
&lt;br /&gt;
10. Click &lt;b&gt;next &lt;/b&gt;and &lt;b&gt;finish &lt;/b&gt;to start the conversion job. Wait for the conversion is complete. The new VM image now should have the specified disk size to go with it!</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/5845941380741320402/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2012/02/how-to-resize-your-vm-image-disk.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/5845941380741320402'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/5845941380741320402'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2012/02/how-to-resize-your-vm-image-disk.html' title='How to resize your VM image disk'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-1533812495109859288</id><published>2012-02-03T00:37:00.000-08:00</published><updated>2012-02-03T00:37:50.930-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>Question of the Day: Know your in-use IIS &amp; SQL server versions?</title><content type='html'>&lt;span style=&quot;font-family: inherit;&quot;&gt;Ever wonder what versions are in use for IIS and MS SQL server? For server-side development, this can be a common questions that get asked often.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;For IIS, visit the registry:&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;&quot;&gt;HKEY_LOCAL_MACHINE&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;pln&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;&quot;&gt;SOFTWARE&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;&quot;&gt;Microsoft&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;&quot;&gt;InetStp&lt;/span&gt;&lt;span class=&quot;pun&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;typ&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;&quot;&gt;VersionString&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style=&quot;font-family: inherit; line-height: 18px; text-align: left;&quot;&gt;For MS SQL server:&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;span class=&quot;typ&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;(1) Connect to the SQL server via the Management Studio tool&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;typ&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span class=&quot;typ&quot; style=&quot;background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; border-bottom-width: 0px; border-color: initial; border-image: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; line-height: 18px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; vertical-align: baseline;&quot;&gt;(2) Run the query -&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;background-color: white; line-height: 16px; text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;background-color: white; line-height: 16px; text-align: left;&quot;&gt;Select @@version&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; line-height: 16px; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; line-height: 16px; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;The result is then shown ~&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; line-height: 16px; text-align: left;&quot;&gt;==================================================&lt;/span&gt; &lt;br /&gt;
&lt;span style=&quot;background-color: white; font-family: inherit; line-height: 16px; text-align: left;&quot;&gt;Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (X64)   Mar 29 2009&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; font-family: inherit; line-height: 16px; text-align: left;&quot;&gt;10:11:52   Copyright (c) 1988-2008 Microsoft Corporation  Express&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; font-family: inherit; line-height: 16px; text-align: left;&quot;&gt;Edition (64-bit) on Windows NT 6.1 &lt;x64&gt; (Build 7600: )&lt;/x64&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; font-family: inherit; line-height: 16px; text-align: left;&quot;&gt;==================================================&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; font-family: inherit; line-height: 16px; text-align: left;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white; font-family: inherit; line-height: 16px; text-align: left;&quot;&gt;BTW, thank goodness it&#39;s Friday!&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/1533812495109859288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2012/02/question-of-day-know-your-in-use-iis.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/1533812495109859288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/1533812495109859288'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2012/02/question-of-day-know-your-in-use-iis.html' title='Question of the Day: Know your in-use IIS &amp; SQL server versions?'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-1580438733001429677</id><published>2012-02-03T00:25:00.000-08:00</published><updated>2012-02-03T00:29:54.422-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Windows"/><title type='text'>How to change the default windows log-on user</title><content type='html'>&lt;span style=&quot;font-family: inherit;&quot;&gt;For windows server 2008, I once had a problem where the default windows log-on page still showed the deleted user. To change the log-on user, simply go to the registry:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;HKLM\Software\Microsoft\WindowsNT\CurretnVersion\winlogon&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;background-color: white;&quot;&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;and change the value of&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;DefaultUsername&lt;/span&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&amp;nbsp;to the user that you would like to show up on the windows log-on page!&lt;/span&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/1580438733001429677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2012/02/how-to-change-default-windows-log-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/1580438733001429677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/1580438733001429677'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2012/02/how-to-change-default-windows-log-on.html' title='How to change the default windows log-on user'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-7262559160543381607</id><published>2012-01-20T03:10:00.000-08:00</published><updated>2012-01-20T03:10:13.205-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Development"/><title type='text'>A free JavaScript IDE? Aptana to the rescue</title><content type='html'>Just thought I share one cent: for those of us doing web development and looking for a good, free IDE, Aptana fits the bill well!&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://aptana.com/&quot;&gt;http://aptana.com/&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/7262559160543381607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2012/01/free-javascript-ide-aptana-to-rescue.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/7262559160543381607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/7262559160543381607'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2012/01/free-javascript-ide-aptana-to-rescue.html' title='A free JavaScript IDE? Aptana to the rescue'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-4999337258026619329</id><published>2012-01-08T04:57:00.000-08:00</published><updated>2013-03-13T06:00:05.083-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Coding Style"/><title type='text'>Visual Studio Code Formatting (tab spaces)</title><content type='html'>In our project at work, we have a visual studio code base that contains server codes of various languages, including C#, JS, HTML, XML, SQL, and CSS. The issue we have is that the format of the code is very much inconsistent: some code are tabbed at two spaces while others at four spaces. The reason for this mixture is because the code has been passed on by a few teams, who have been following different coding standards.&amp;nbsp;This problem can be common among project code, especially legacy code.&lt;br /&gt;
&lt;br /&gt;
To solve this problem, there are recommendations to use the VS macro to run the &quot;Format Code&quot; command on the solution. And I found such a recommendation:&amp;nbsp;&lt;a href=&quot;http://timwise.blogspot.com/2009/01/format-all-document-in-visual-studio.html&quot;&gt;Format all document in visual studio&lt;/a&gt;. However, for some undiscovered reasons, it was not able to re-format our project code. Then I was quite lucky enough to find an existing tool called &lt;a href=&quot;http://visualstudiogallery.msdn.microsoft.com/76293c4d-8c16-4f4a-aee6-21f83a571496/&quot;&gt;CodeMaid &lt;/a&gt;that does this job wonderfully. I could simply run the cleanup all files function, then all code will be automatically re-formatted with the same tab spacing. Afterwards, the inconsistent itches in our code are gone!&lt;br /&gt;
&lt;br /&gt;
P.S. if you&#39;re looking for some coding style suggestions, &lt;a href=&quot;http://stylecop.codeplex.com/&quot;&gt;StyleCop &lt;/a&gt;as an add-on may fit the bill. It prints out possible coding style problems as warnings for your consideration.</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/4999337258026619329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2012/01/visual-studio-code-formatting-tab.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/4999337258026619329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/4999337258026619329'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2012/01/visual-studio-code-formatting-tab.html' title='Visual Studio Code Formatting (tab spaces)'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4623498046883451152.post-5569432812310434304</id><published>2011-10-29T09:21:00.000-07:00</published><updated>2011-10-29T09:22:24.147-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Android"/><title type='text'>Got my HTC tattoo updated to Android 2.3 with CyanogenMod</title><content type='html'>Recently a friend told me that he&#39;s got his HTC tattoo to use Android 2.3. He proceeded to showing me the upgraded phone with cool-looking UI and new features. On top of this, his phone now has a much better performance (UI response) along with a longer battery life.&lt;br /&gt;
&lt;br /&gt;
So five days later, on a free Friday night when the clock struck 12 midnight, I googled on the way to update my Tattoo from Android 1.6 to 2.3. What follow are the results and steps to doing so.&lt;br /&gt;
&lt;br /&gt;
The main instruction page on how to flash can be found here:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://wiki.cyanogenmod.com/wiki/HTC_Tattoo:_Full_Update_Guide&quot;&gt;http://wiki.cyanogenmod.com/wiki/HTC_Tattoo:_Full_Update_Guide&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I then followed the instruction prescribed here but found I was having trouble rooting my device using the adb command line. The error that I always encounter was unable to &quot;exit&quot; debug shell correctly. Many messages were printed such as &quot;reboot...&quot;. So when I tried to perform a &quot;su&quot;, I got permission denied. It turns out there&#39;s a much easier way to root my device, as it can be found here using Universal Androot:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.addictivetips.com/mobile/how-to-root-android-devices-with-universal-androot-app/&quot;&gt;http://www.addictivetips.com/mobile/how-to-root-android-devices-with-universal-androot-app/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
After this first hurdle is overcome, the rest seems like much doable and effortless (well, relatively). The next thing on the agenda is installing the ClockworkMod Recovery. While using the instructions from the update guide, I had a problem with flash_image: it simply won&#39;t work. Either it&#39;s not found or illegal instruction. The solution was found there:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://forum.cyanogenmod.com/topic/24333-flash-image-not-found/&quot;&gt;http://forum.cyanogenmod.com/topic/24333-flash-image-not-found/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Basically, I downloaded the flash_image version as detailed here (file hosted on rapidshare). Voila, the flash_image executable now works and recovery was installed. To boot into ClockworkMod Recovery, the instruction is: adb reboot recovery&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.addictivetips.com/mobile/what-is-clockworkmod-recovery-and-how-to-use-it-on-android-complete-guide/&quot;&gt;http://www.addictivetips.com/mobile/what-is-clockworkmod-recovery-and-how-to-use-it-on-android-complete-guide/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Then after flashing CyanogenMod via Recovery, I was a happy man with his Tattoo upgraded :-)&lt;br /&gt;
&lt;br /&gt;
P.S. If you find that the newly upgraded phone does not work with Wifi, you may need to replace a new file: wlan_loader, as detailed here:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://code.google.com/p/cyanogenmod/issues/detail?id=4370&quot;&gt;http://code.google.com/p/cyanogenmod/issues/detail?id=4370&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Happy hacking, flashing or bricking!!!</content><link rel='replies' type='application/atom+xml' href='http://lovethycode.blogspot.com/feeds/5569432812310434304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://lovethycode.blogspot.com/2011/10/got-my-htc-tattoo-updated-to-android-23.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/5569432812310434304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4623498046883451152/posts/default/5569432812310434304'/><link rel='alternate' type='text/html' href='http://lovethycode.blogspot.com/2011/10/got-my-htc-tattoo-updated-to-android-23.html' title='Got my HTC tattoo updated to Android 2.3 with CyanogenMod'/><author><name>Roberto</name><uri>http://www.blogger.com/profile/12904918611982248458</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>