<?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: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-5648646076945890763</id><updated>2012-01-21T05:32:48.968-08:00</updated><category term='calendar'/><category term='Google Maps'/><category term='Visual Studio'/><category term='Windows Mobile'/><category term='pocket PC'/><category term='relationship'/><category term='address lookup'/><category term='spock'/><category term='postal address file'/><category term='paf'/><category term='collaboration'/><category term='ebay'/><category term='portable address book'/><category term='Semantic Web'/><category term='map'/><category term='instant messenger'/><category term='hosting'/><category term='skype'/><category term='tag'/><category term='pooch'/><category term='event'/><category term='crm'/><category term='linkedin'/><category term='GeneaPedia'/><category term='sync'/><category term='search people'/><category term='Pleo'/><category term='Picasa'/><category term='sharepoint'/><category term='social networking'/><category term='address'/><category term='open contacts'/><category term='web 2.0'/><category term='web service'/><category term='family'/><category term='Delphi'/><category term='Google Exchange'/><category term='PDA'/><category term='contact management'/><category term='email'/><category term='unicode'/><category term='mobile phone'/><category term='hcard'/><category term='collective intelligence'/><category term='PIM'/><category term='IM'/><category term='social network'/><category term='telephone'/><category term='sunspot'/><category term='collanos'/><category term='Poodles'/><category term='Herbert George'/><category term='MicroFormats'/><category term='web mail'/><category term='xslt'/><category term='CSV'/><category term='bookmarks'/><category term='freeware'/><category term='birthday reminder'/><category term='postal code'/><category term='open social'/><category term='genealogy'/><category term='seo'/><category term='C#'/><category term='CodeGear'/><category term='white pages'/><category term='xfn'/><category term='photo'/><category term='aggregate'/><category term='desktop'/><category term='software'/><category term='address book'/><category term='html'/><category term='japan'/><category term='face recognition'/><category term='vCard'/><category term='open graph'/><category term='network'/><category term='project management'/><category term='del.icio'/><category term='version control'/><category term='identify fraud'/><category term='bark'/><category term='scam'/><category term='rel'/><category term='mozilla firefox'/><category term='Borland'/><category term='pet'/><category term='google'/><title type='text'>Web and Life</title><subtitle type='html'>Discuss the evolution of the Web, and the development of life.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://webandlife.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>80</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-2969050289801936589</id><published>2011-12-18T21:12:00.000-08:00</published><updated>2012-01-21T05:32:49.094-08:00</updated><title type='text'>Enforce Proper Disposal of WCF Channels against a WCF defect</title><content type='html'>In WCF, when doing client programming, we are all too familiar with&lt;br /&gt;&lt;br /&gt;using (ProxyClient client = new ProxyClient(...))&lt;br /&gt;{&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;When I deploy&amp;nbsp; a WCF client program to a 2008 server for further testing. I always got such exception:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;EndpointNotFoundException:System.ServiceModel.&lt;wbr&gt;&lt;/wbr&gt;CommunicationObjectFaultedExce&lt;wbr&gt;&lt;/wbr&gt;ption: The communicationobject, System.ServiceModel.Channels.&lt;wbr&gt;&lt;/wbr&gt;ServiceChannel, cannot be used forcommunication because it is in the Faulted state.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;No specific error info was disclosed in the exception. Searching for answers, I got these posts, looking quite dim about a possible WCF bug long standing: kicking out the real exception in some scenarios.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa355056.aspx" target="_blank"&gt;&lt;span class="il"&gt;http&lt;/span&gt;://&lt;span class="il"&gt;msdn&lt;/span&gt;.&lt;span class="il"&gt;microsoft&lt;/span&gt;.&lt;span class="il"&gt;com&lt;/span&gt;/&lt;span class="il"&gt;en&lt;/span&gt;-&lt;wbr&gt;&lt;/wbr&gt;&lt;span class="il"&gt;us&lt;/span&gt;/&lt;span class="il"&gt;library&lt;/span&gt;/&lt;span class="il"&gt;aa355056&lt;/span&gt;.&lt;span class="il"&gt;aspx&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/jjameson/archive/2010/03/18/avoiding-problems-with-the-using-statement-and-wcf-service-proxies.aspx" target="_blank"&gt;&lt;span class="il"&gt;http&lt;/span&gt;://blogs.&lt;span class="il"&gt;msdn&lt;/span&gt;.&lt;span class="il"&gt;com&lt;/span&gt;/b/&lt;wbr&gt;&lt;/wbr&gt;jjameson/archive/2010/03/18/&lt;wbr&gt;&lt;/wbr&gt;avoiding-problems-with-the-&lt;wbr&gt;&lt;/wbr&gt;using-statement-and-wcf-&lt;wbr&gt;&lt;/wbr&gt;service-proxies.&lt;span class="il"&gt;aspx&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://old.iserviceoriented.com/blog/post/Indisposable+-+WCF+Gotcha+1.aspx" target="_blank"&gt;&lt;span class="il"&gt;http&lt;/span&gt;://old.iserviceoriented.&lt;wbr&gt;&lt;/wbr&gt;&lt;span class="il"&gt;com&lt;/span&gt;/blog/post/Indisposable+-+&lt;wbr&gt;&lt;/wbr&gt;WCF+Gotcha+1.&lt;span class="il"&gt;aspx&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://thorarin.net/blog/post/2010/05/30/Indisposable-WCF-clients.aspx" target="_blank"&gt;&lt;span class="il"&gt;http&lt;/span&gt;://thorarin.net/blog/post/&lt;wbr&gt;&lt;/wbr&gt;2010/05/30/Indisposable-WCF-&lt;wbr&gt;&lt;/wbr&gt;clients.&lt;span class="il"&gt;aspx&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/WCF/proper-disposal-of-wcf.aspx"&gt;http://www.codeproject.com/KB/WCF/proper-disposal-of-wcf.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;All the solutions / workarounds above suggested catching general exception.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;try&lt;br /&gt;{&lt;br /&gt;    ...&lt;br /&gt;    client.Close();&lt;br /&gt;}&lt;br /&gt;catch (CommunicationException e)&lt;br /&gt;{&lt;br /&gt;    ...&lt;br /&gt;    client.Abort();&lt;br /&gt;}&lt;br /&gt;catch (TimeoutException e)&lt;br /&gt;{&lt;br /&gt;    ...&lt;br /&gt;    client.Abort();&lt;br /&gt;}&lt;br /&gt;catch (Exception e)&lt;br /&gt;{&lt;br /&gt;    ...&lt;br /&gt;    client.Abort();&lt;br /&gt;    throw;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;However, catching general exception is smelling badly in most cases, and such workaround is very clumsy to use, for example, when you have a few dozens of such client calls to multiple WCF services of one or many Web service API in your project.&lt;br /&gt;&lt;br /&gt;So I turned to a guru who gave an elegant solution, as described in this post&lt;br /&gt;&lt;h3 class="post-title entry-title" style="font-weight: normal;"&gt;&lt;span style="font-size: small;"&gt;&lt;a href="http://do-the-right-things.blogspot.com/2011/06/safe-way-to-close-down-clientbase.html"&gt;Safe way to close down a ClientBase&lt;t&gt; object&lt;/t&gt;&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Based on Mr Mar's work, I made a slight amendment, as listed below:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;pre style="background-attachment: initial; background-clip: initial; background-color: #faf9ed; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 12px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;SafeCommunicationDisposal&lt;/span&gt;&lt;t&gt;&amp;nbsp;:&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IDisposable&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;where&lt;/span&gt;&amp;nbsp;T&amp;nbsp;:&amp;nbsp;&lt;span style="color: #2b91af;"&gt;ICommunicationObject&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #2b91af;"&gt;IDisposable&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;const&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;&amp;nbsp;traceCategory&amp;nbsp;=&amp;nbsp;&lt;span style="background: none repeat scroll 0% 0% silver; color: #a31515;"&gt;"SafeCommunicationDisposal"&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;T&amp;nbsp;Instance&amp;nbsp;{&amp;nbsp;&lt;span style="color: blue;"&gt;get&lt;/span&gt;;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;set&lt;/span&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&amp;nbsp;IsSafeToClose&amp;nbsp;{&amp;nbsp;&lt;span style="color: blue;"&gt;get&lt;/span&gt;;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;set&lt;/span&gt;;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;SafeToClose()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.IsSafeToClose&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;SafeCommunicationDisposal(T&amp;nbsp;client)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.Instance&amp;nbsp;=&amp;nbsp;client;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&amp;nbsp;disposed;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;Dispose()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Dispose(&lt;span style="color: blue;"&gt;true&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;GC&lt;/span&gt;.SuppressFinalize(&lt;span style="color: blue;"&gt;this&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;Dispose(&lt;span style="color: blue;"&gt;bool&lt;/span&gt;&amp;nbsp;disposing)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(!&lt;span style="color: blue;"&gt;this&lt;/span&gt;.disposed)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Debug&lt;/span&gt;.WriteLine(&lt;span style="background: none repeat scroll 0% 0% silver; color: #a31515;"&gt;"Need&amp;nbsp;to&amp;nbsp;dispose."&lt;/span&gt;,&amp;nbsp;traceCategory);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(disposing)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;this&lt;/span&gt;.disposed&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;true&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;void&lt;/span&gt;&amp;nbsp;Close()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;if&lt;/span&gt;&amp;nbsp;(IsSafeToClose)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Instance.Close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Instance.Abort();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/t&gt;&lt;/pre&gt;&lt;pre style="background-attachment: initial; background-clip: initial; background-color: #faf9ed; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 12px;"&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In my client codes, against each WCF client proxy class, e.g.&amp;nbsp;&lt;span style="background-color: #faf9ed; font-family: Consolas; font-size: 12px;"&gt;RemotePpsr.&lt;/span&gt;&lt;span style="background-color: #faf9ed; color: #2b91af; font-family: Consolas; font-size: 12px;"&gt;CollateralRegistrationSearchServiceClient&lt;/span&gt;&lt;/div&gt;&lt;pre style="background-attachment: initial; background-clip: initial; background-color: #faf9ed; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 12px;"&gt;&lt;/pre&gt;&lt;div&gt;create a helper class:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;pre style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; font-family: Consolas; font-size: 12px;"&gt;&lt;span style="background-color: yellow;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;class&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;SafeCollateralRegistrationSearchServiceClient&lt;/span&gt;&amp;nbsp;:&amp;nbsp;&lt;span style="color: #2b91af;"&gt;SafeCommunicationDisposal&lt;/span&gt;&lt;remoteppsr.&lt;span style="color: #2b91af;"&gt;CollateralRegistrationSearchServiceClient&lt;/remoteppsr.&lt;span&gt;&lt;/span&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;public&lt;/span&gt;&amp;nbsp;SafeCollateralRegistrationSearchServiceClient(&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;environmentTypeId)&lt;span style="background-color: #faf9ed;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;:&amp;nbsp;&lt;span style="color: blue;"&gt;base&lt;/span&gt;(GetCollateralRegistrationSearchClient(environmentTypeId))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;static&lt;/span&gt;&amp;nbsp;RemotePpsr.&lt;span style="color: #2b91af;"&gt;CollateralRegistrationSearchServiceClient&lt;/span&gt;&amp;nbsp;GetCollateralRegistrationSearchClient(&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;nbsp;environmentTypeId)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RemotePpsr.&lt;span style="color: #2b91af;"&gt;CollateralRegistrationSearchServiceClient&lt;/span&gt;&amp;nbsp;client&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;RemotePpsr.&lt;span style="color: #2b91af;"&gt;CollateralRegistrationSearchServiceClient&lt;/span&gt;(&lt;span style="background: none repeat scroll 0% 0% silver; color: #a31515;"&gt;"CollateralRegistrationSearchSoap12"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;&lt;span style="color: #2b91af;"&gt;XXXMethodsHelper&lt;/span&gt;.GetEndpointSuffix(environmentTypeId));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;client.ClientCredentials.UserName.UserName&amp;nbsp;=&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;client;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then for each client API call, I have the following conventional programming style rather than catching general exception while exposing fault error properly:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;pre style="background-attachment: initial; background-clip: initial; background-color: #faf9ed; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 12px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;try&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;using&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #2b91af;"&gt;SafeCollateralRegistrationSearchServiceClient&lt;/span&gt;&amp;nbsp;client&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;SafeCollateralRegistrationSearchServiceClient&lt;/span&gt;(request.EnvironmentTypeId))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RemotePpsr.&lt;span style="color: #2b91af;"&gt;SearchBySerialNumberRequestType&lt;/span&gt;&amp;nbsp;ppsrRequest&amp;nbsp;=&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;RemotePpsr.&lt;span style="color: #2b91af;"&gt;SearchBySerialNumberRequestType&lt;/span&gt;()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;...&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;};&lt;br /&gt;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ppsrResponse&amp;nbsp;=&amp;nbsp;client.Instance.SearchBySerialNumber(GetTargetEnvironment(request.EnvironmentTypeId),&amp;nbsp;ppsrRequest);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;catch&lt;/span&gt;&amp;nbsp;(System.ServiceModel.&lt;span style="color: #2b91af;"&gt;FaultException&lt;/span&gt;&lt;remoteppsr.&lt;span style="color: #2b91af;"&gt;PpsrCollateralRegistrationSearchFaultDetail&amp;gt;&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;nbsp;m&amp;nbsp;=&amp;nbsp;&lt;span style="color: #2b91af;"&gt;String&lt;/span&gt;.Format(&lt;span style="background: none repeat scroll 0% 0% silver; color: #a31515;"&gt;"{0};&amp;nbsp;Message:&amp;nbsp;{1}"&lt;/span&gt;,&amp;nbsp;GetPpsrSoapFaultDetail(e.Detail),&amp;nbsp;e.Message);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;Trace&lt;/span&gt;.TraceWarning(m);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: blue;"&gt;new&lt;/span&gt;&amp;nbsp;&lt;span style="color: #2b91af;"&gt;RequestResult&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;RequestExecutionStatus&lt;/span&gt;.OperationFailed,&amp;nbsp;e.Message,&amp;nbsp;&lt;span style="background: none repeat scroll 0% 0% silver; color: #a31515;"&gt;"PPSR"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;e.Detail.ErrorNumber)&amp;nbsp;{&amp;nbsp;TechnicalErrorMessage&amp;nbsp;=&amp;nbsp;m&amp;nbsp;};&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt; &lt;br /&gt;&lt;/remoteppsr.&lt;span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Notes: PPSR stands for Personal Property Securities Register which is an electronic register allowing security interests in personal property to be registered and searched in accordance with the Australian Personal Property Securities Act 2009.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-2969050289801936589?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/2969050289801936589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/2969050289801936589'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2011/12/enforce-proper-disposal-of-wcf-channels.html' title='Enforce Proper Disposal of WCF Channels against a WCF defect'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-1326767508356987583</id><published>2011-12-01T17:02:00.001-08:00</published><updated>2011-12-01T17:05:45.134-08:00</updated><title type='text'>Refactoring legacy unsafe C# codes into managed C#codes</title><content type='html'>You might have a load of legacy codes in C, Pascal or whatever language. And .NET provides a few ways to utilize the treasure of legacy codes: PInvoke and Interop etc. Alternatively, you may try to rewrite in C# according to the logics of legacy codes. However, because of the differences of language, framework and methodology, the translation won't be so straightforward like the translation between C and Pascal. For example, the use of pointer is a problem, as .NET discourages the use of pointer.&lt;br /&gt;I would like to use a piece of refactoring work that I had done to demonstrate a few basic techniques.&lt;br /&gt;In a project, I would added Quoted-Printable support for a &lt;a href="http://www.codeproject.com/KB/cs/vCard_Parser.aspx" title="vCard Parser"&gt;.NET vCardReader&lt;/a&gt;. As I did not want to reinvent the wheel, I did surely lookaround MSDN and the Internet news groups to grab some piece of codesthat satisfy such requirements:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;.NET codes&lt;/li&gt;&lt;li&gt;Efficient&lt;/li&gt;&lt;li&gt;Free&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Amazingly, not many around. And I found two pieces of C# codes, one of which was from Bill Gearhart.&lt;br /&gt;&lt;br /&gt;According to the author, this QuotedPrintable class provides "robustand fast implementation of Quoted Printable Multipart Internet MailEncoding (MIME) which encodes every character, not just specialcharacters for transmission over SMTP."&lt;br /&gt;&lt;br /&gt;Here's source code in &lt;a class="wiki_link_ext" href="http://www.aspemporium.com/classes.aspx?cid=6" rel="nofollow"&gt;QuotedPrintable Class&lt;/a&gt; from Bill Gearheart, with in-source comments removed.&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" id="pre0" style="margin-top: 0pt;"&gt;&lt;span class="code-keyword"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="code-keyword"&gt;using&lt;/span&gt; System.IO;&lt;br /&gt;&lt;span class="code-keyword"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span class="code-keyword"&gt;using&lt;/span&gt; System.Text.RegularExpressions;&lt;br /&gt;&lt;span class="code-keyword"&gt;using&lt;/span&gt; System.Security;&lt;br /&gt; &lt;br /&gt;&lt;span class="code-keyword"&gt;namespace&lt;/span&gt; mimelib&lt;br /&gt;{&lt;br /&gt;    &lt;span class="code-keyword"&gt;public&lt;/span&gt; &lt;span class="code-keyword"&gt;class&lt;/span&gt; QuotedPrintable&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="code-keyword"&gt;private&lt;/span&gt; QuotedPrintable()&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        &lt;span class="code-keyword"&gt;public&lt;/span&gt; &lt;span class="code-keyword"&gt;const&lt;/span&gt; &lt;span class="code-keyword"&gt;int&lt;/span&gt; RFC_1521_MAX_CHARS_PER_LINE = &lt;span class="code-digit"&gt;75&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;        &lt;span class="code-keyword"&gt;public&lt;/span&gt; &lt;span class="code-keyword"&gt;static&lt;/span&gt; &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; Encode(&lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; toencode)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-keyword"&gt;return&lt;/span&gt; Encode(toencode, RFC_1521_MAX_CHARS_PER_LINE);&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        &lt;span class="code-keyword"&gt;public&lt;/span&gt; &lt;span class="code-keyword"&gt;static&lt;/span&gt; &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; Encode(&lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; toencode, &lt;span class="code-keyword"&gt;int&lt;/span&gt; charsperline)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-keyword"&gt;if&lt;/span&gt; (toencode == null)&lt;br /&gt;                &lt;span class="code-keyword"&gt;throw&lt;/span&gt; &lt;span class="code-keyword"&gt;new&lt;/span&gt; ArgumentNullException();&lt;br /&gt; &lt;br /&gt;            &lt;span class="code-keyword"&gt;if&lt;/span&gt; (charsperline &lt;span class="code-keyword"&gt;&amp;lt;&lt;/span&gt;= &lt;span class="code-digit"&gt;0&lt;/span&gt;)&lt;br /&gt;                &lt;span class="code-keyword"&gt;throw&lt;/span&gt; &lt;span class="code-keyword"&gt;new&lt;/span&gt; ArgumentOutOfRangeException();&lt;br /&gt; &lt;br /&gt;            &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; line, encodedHtml = &lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;"&lt;/span&gt;;&lt;br /&gt;            StringReader sr = &lt;span class="code-keyword"&gt;new&lt;/span&gt; StringReader(toencode);&lt;br /&gt;            &lt;span class="code-keyword"&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                &lt;span class="code-keyword"&gt;while&lt;/span&gt;((line=sr.ReadLine())!=null)&lt;br /&gt;                    encodedHtml += EncodeSmallLine(line);&lt;br /&gt; &lt;br /&gt;                &lt;span class="code-keyword"&gt;return&lt;/span&gt; FormatEncodedString(encodedHtml, charsperline);&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="code-keyword"&gt;finally&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                sr.Close();&lt;br /&gt;                sr = null;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        &lt;span class="code-keyword"&gt;public&lt;/span&gt; &lt;span class="code-keyword"&gt;static&lt;/span&gt; &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; EncodeFile(&lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; filepath)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-keyword"&gt;return&lt;/span&gt; EncodeFile(filepath, RFC_1521_MAX_CHARS_PER_LINE);&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        &lt;span class="code-keyword"&gt;public&lt;/span&gt; &lt;span class="code-keyword"&gt;static&lt;/span&gt; &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; EncodeFile(&lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; filepath, &lt;span class="code-keyword"&gt;int&lt;/span&gt; charsperline)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-keyword"&gt;if&lt;/span&gt; (filepath == null)&lt;br /&gt;                &lt;span class="code-keyword"&gt;throw&lt;/span&gt; &lt;span class="code-keyword"&gt;new&lt;/span&gt; ArgumentNullException();&lt;br /&gt; &lt;br /&gt;            &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; encodedHtml = &lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;"&lt;/span&gt;, line;&lt;br /&gt;            FileInfo f = &lt;span class="code-keyword"&gt;new&lt;/span&gt; FileInfo(filepath);&lt;br /&gt; &lt;br /&gt;            &lt;span class="code-keyword"&gt;if&lt;/span&gt; (! f.Exists)&lt;br /&gt;                &lt;span class="code-keyword"&gt;throw&lt;/span&gt; &lt;span class="code-keyword"&gt;new&lt;/span&gt; FileNotFoundException();&lt;br /&gt; &lt;br /&gt;            StreamReader sr = f.OpenText();&lt;br /&gt;            &lt;span class="code-keyword"&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                &lt;span class="code-keyword"&gt;while&lt;/span&gt;((line=sr.ReadLine())!=null)&lt;br /&gt;                    encodedHtml += EncodeSmallLine(line);&lt;br /&gt; &lt;br /&gt;                &lt;span class="code-keyword"&gt;return&lt;/span&gt; FormatEncodedString(encodedHtml, charsperline);&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="code-keyword"&gt;finally&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                sr.Close();&lt;br /&gt;                sr = null;&lt;br /&gt;                f = null;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        &lt;span class="code-keyword"&gt;public&lt;/span&gt; unsafe &lt;span class="code-keyword"&gt;static&lt;/span&gt; &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; EncodeSmall(&lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; s)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-keyword"&gt;if&lt;/span&gt; (s == null)&lt;br /&gt;                &lt;span class="code-keyword"&gt;throw&lt;/span&gt; &lt;span class="code-keyword"&gt;new&lt;/span&gt; ArgumentNullException();&lt;br /&gt; &lt;br /&gt;            &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; result = &lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;"&lt;/span&gt;;&lt;br /&gt;            fixed (&lt;span class="code-keyword"&gt;char&lt;/span&gt;* pChar = s)&lt;br /&gt;            {&lt;br /&gt;                &lt;span class="code-keyword"&gt;char&lt;/span&gt;* pCurrent = pChar;&lt;br /&gt;                &lt;span class="code-keyword"&gt;do&lt;/span&gt;&lt;br /&gt;                {&lt;br /&gt;                    &lt;span class="code-keyword"&gt;int&lt;/span&gt; code = (*pCurrent);&lt;br /&gt;                    result += &lt;span class="code-SDKkeyword"&gt;String&lt;/span&gt;.Format(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;={0}"&lt;/span&gt;, code.ToString(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;X2"&lt;/span&gt;));&lt;br /&gt;                    pCurrent++;&lt;br /&gt;                }&lt;br /&gt;                &lt;span class="code-keyword"&gt;while&lt;/span&gt; (*pCurrent != &lt;span class="code-digit"&gt;0&lt;/span&gt;);&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="code-keyword"&gt;return&lt;/span&gt; result;&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        &lt;span class="code-keyword"&gt;public&lt;/span&gt; &lt;span class="code-keyword"&gt;static&lt;/span&gt; &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; EncodeSmallLine(&lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; s)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-keyword"&gt;if&lt;/span&gt; (s == null)&lt;br /&gt;                &lt;span class="code-keyword"&gt;throw&lt;/span&gt; &lt;span class="code-keyword"&gt;new&lt;/span&gt; ArgumentNullException();&lt;br /&gt; &lt;br /&gt;            &lt;span class="code-keyword"&gt;return&lt;/span&gt; EncodeSmall(s + &lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;\r\n"&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        &lt;span class="code-keyword"&gt;public&lt;/span&gt; unsafe &lt;span class="code-keyword"&gt;static&lt;/span&gt; &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; FormatEncodedString(&lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; qpstr, &lt;span class="code-keyword"&gt;int&lt;/span&gt; maxcharlen)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-keyword"&gt;if&lt;/span&gt; (qpstr == null)&lt;br /&gt;                &lt;span class="code-keyword"&gt;throw&lt;/span&gt; &lt;span class="code-keyword"&gt;new&lt;/span&gt; ArgumentNullException();&lt;br /&gt; &lt;br /&gt;            &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; strout = &lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;"&lt;/span&gt;;&lt;br /&gt;            StringWriter qpsw = &lt;span class="code-keyword"&gt;new&lt;/span&gt; StringWriter();&lt;br /&gt;            &lt;span class="code-keyword"&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                fixed(&lt;span class="code-keyword"&gt;char&lt;/span&gt;* pChr = qpstr)&lt;br /&gt;                {&lt;br /&gt;                    &lt;span class="code-keyword"&gt;char&lt;/span&gt;* pCurrent = pChr;&lt;br /&gt;                    &lt;span class="code-keyword"&gt;int&lt;/span&gt; i = &lt;span class="code-digit"&gt;0&lt;/span&gt;;&lt;br /&gt;                    &lt;span class="code-keyword"&gt;do&lt;/span&gt;&lt;br /&gt;                    {&lt;br /&gt;                        strout += pCurrent-&lt;span class="code-keyword"&gt;&amp;gt;&lt;/span&gt;ToString();&lt;br /&gt;                        i++;&lt;br /&gt;                        &lt;span class="code-keyword"&gt;if&lt;/span&gt; (i==maxcharlen)&lt;br /&gt;                        {&lt;br /&gt;                            qpsw.WriteLine(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;{0}="&lt;/span&gt;, strout);&lt;br /&gt;                            qpsw.Flush();&lt;br /&gt; &lt;br /&gt;                            i=0;&lt;br /&gt;                            strout = &lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;"&lt;/span&gt;;&lt;br /&gt;                        }&lt;br /&gt;                        pCurrent++;&lt;br /&gt;                    }&lt;br /&gt;                    &lt;span class="code-keyword"&gt;while&lt;/span&gt;(*pCurrent != &lt;span class="code-digit"&gt;0&lt;/span&gt;);&lt;br /&gt;                }&lt;br /&gt;                qpsw.WriteLine(strout);&lt;br /&gt;                qpsw.Flush();&lt;br /&gt; &lt;br /&gt;                &lt;span class="code-keyword"&gt;return&lt;/span&gt; qpsw.ToString();&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="code-keyword"&gt;finally&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                qpsw.Close();&lt;br /&gt;                qpsw = null;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        &lt;span class="code-keyword"&gt;static&lt;/span&gt; &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; HexDecoderEvaluator(Match m)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; hex = m.Groups[&lt;span class="code-digit"&gt;2&lt;/span&gt;].Value;&lt;br /&gt;            &lt;span class="code-keyword"&gt;int&lt;/span&gt; iHex = Convert.ToInt32(hex, &lt;span class="code-digit"&gt;16&lt;/span&gt;);&lt;br /&gt;            &lt;span class="code-keyword"&gt;char&lt;/span&gt; c = (&lt;span class="code-keyword"&gt;char&lt;/span&gt;) iHex;&lt;br /&gt;            &lt;span class="code-keyword"&gt;return&lt;/span&gt; c.ToString();&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        &lt;span class="code-keyword"&gt;static&lt;/span&gt; &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; HexDecoder(&lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; line)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-keyword"&gt;if&lt;/span&gt; (line == null)&lt;br /&gt;                &lt;span class="code-keyword"&gt;throw&lt;/span&gt; &lt;span class="code-keyword"&gt;new&lt;/span&gt; ArgumentNullException();&lt;br /&gt; &lt;br /&gt;            &lt;span class="code-comment"&gt;//&lt;/span&gt;&lt;span class="code-comment"&gt;parse looking for =XX where XX is hexadecimal&lt;/span&gt;&lt;br /&gt;            Regex re = &lt;span class="code-keyword"&gt;new&lt;/span&gt; Regex(&lt;br /&gt;                &lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;(\\=([0-9A-F][0-9A-F]))"&lt;/span&gt;,&lt;br /&gt;                RegexOptions.IgnoreCase&lt;br /&gt;            );&lt;br /&gt;            &lt;span class="code-keyword"&gt;return&lt;/span&gt; re.Replace(line, &lt;span class="code-keyword"&gt;new&lt;/span&gt; MatchEvaluator(HexDecoderEvaluator));&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        &lt;span class="code-keyword"&gt;public&lt;/span&gt; &lt;span class="code-keyword"&gt;static&lt;/span&gt; &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; DecodeFile(&lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; filepath)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-keyword"&gt;if&lt;/span&gt; (filepath == null)&lt;br /&gt;                &lt;span class="code-keyword"&gt;throw&lt;/span&gt; &lt;span class="code-keyword"&gt;new&lt;/span&gt; ArgumentNullException();&lt;br /&gt; &lt;br /&gt;            &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; decodedHtml = &lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;"&lt;/span&gt;, line;&lt;br /&gt;            FileInfo f = &lt;span class="code-keyword"&gt;new&lt;/span&gt; FileInfo(filepath);&lt;br /&gt; &lt;br /&gt;            &lt;span class="code-keyword"&gt;if&lt;/span&gt; (! f.Exists)&lt;br /&gt;                &lt;span class="code-keyword"&gt;throw&lt;/span&gt; &lt;span class="code-keyword"&gt;new&lt;/span&gt; FileNotFoundException();&lt;br /&gt; &lt;br /&gt;            StreamReader sr = f.OpenText();&lt;br /&gt;            &lt;span class="code-keyword"&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                &lt;span class="code-keyword"&gt;while&lt;/span&gt;((line=sr.ReadLine())!=null)&lt;br /&gt;                    decodedHtml += Decode(line);&lt;br /&gt; &lt;br /&gt;                &lt;span class="code-keyword"&gt;return&lt;/span&gt; decodedHtml;&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="code-keyword"&gt;finally&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                sr.Close();&lt;br /&gt;                sr = null;&lt;br /&gt;                f = null;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;        &lt;span class="code-keyword"&gt;public&lt;/span&gt; &lt;span class="code-keyword"&gt;static&lt;/span&gt; &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; Decode(&lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; encoded)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-keyword"&gt;if&lt;/span&gt; (encoded == null)&lt;br /&gt;                &lt;span class="code-keyword"&gt;throw&lt;/span&gt; &lt;span class="code-keyword"&gt;new&lt;/span&gt; ArgumentNullException();&lt;br /&gt; &lt;br /&gt;            &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; line;&lt;br /&gt;            StringWriter sw = &lt;span class="code-keyword"&gt;new&lt;/span&gt; StringWriter();&lt;br /&gt;            StringReader sr = &lt;span class="code-keyword"&gt;new&lt;/span&gt; StringReader(encoded);&lt;br /&gt;            &lt;span class="code-keyword"&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                &lt;span class="code-keyword"&gt;while&lt;/span&gt;((line=sr.ReadLine())!=null)&lt;br /&gt;                {&lt;br /&gt;                    &lt;span class="code-keyword"&gt;if&lt;/span&gt; (line.EndsWith(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;="&lt;/span&gt;))&lt;br /&gt;                        sw.Write(HexDecoder(line.Substring(&lt;span class="code-digit"&gt;0&lt;/span&gt;, line.Length-&lt;span class="code-digit"&gt;1&lt;/span&gt;)));&lt;br /&gt;                    &lt;span class="code-keyword"&gt;else&lt;/span&gt;&lt;br /&gt;                        sw.WriteLine(HexDecoder(line));&lt;br /&gt; &lt;br /&gt;                    sw.Flush();&lt;br /&gt;                }&lt;br /&gt;                &lt;span class="code-keyword"&gt;return&lt;/span&gt; sw.ToString();&lt;br /&gt;            }&lt;br /&gt;            &lt;span class="code-keyword"&gt;finally&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                sw.Close();&lt;br /&gt;                sr.Close();&lt;br /&gt;                sw = null;&lt;br /&gt;                sr = null;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt; &lt;/pre&gt;&lt;br /&gt;The code from Bill Gearhart looked elegant and efficient, however, there are 3 catches:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The C# code was apparently translated from C code. And the code require "unsafe" and Security namespace.&lt;/li&gt;&lt;li&gt;The code can not handle multi-byte character.&lt;/li&gt;&lt;li&gt;Everycharacter will be encoded into 3 bytes of quoted printable character.While this may be desired in Email MIME encoding, however, in vCard,the conventional practice is to encode only those out of range of theASCII printable characters (33-126).&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I want pure .NET C# codes, otherwise, I would just grab a piece of Ccode, compile it to a dll and then use PInvoke to use theQuotedPrintable function.&lt;br /&gt;&lt;br /&gt;The algorithm of producing Quoted-Printable is not a rocket science andI like the overall structure of the C# code from Bill Gearhart, so Iwould just do refactoring over Bill Gearheart's code, rather than starteverything from scratch.&lt;br /&gt;&lt;br /&gt;Handling quoted printable encoding requires byte handling, and actually.NET Framework has pretty rich supports for byte handling, so there'sno need to use PChar which result in sacrificing the safety net of .NETFramework.&lt;br /&gt;&lt;br /&gt;Here's the code which was refactored or translated from the above code.&lt;br /&gt;&lt;br /&gt;&lt;pre class="cfdg" id="pre1" style="margin-top: 0pt;"&gt;&lt;span class="code-keyword"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span class="code-keyword"&gt;using&lt;/span&gt; System.IO;&lt;br /&gt;&lt;span class="code-keyword"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;span class="code-keyword"&gt;using&lt;/span&gt; System.Text.RegularExpressions;&lt;br /&gt; &lt;br /&gt;&lt;span class="code-keyword"&gt;namespace&lt;/span&gt; Fonlow.VCard&lt;br /&gt;{&lt;br /&gt;    &lt;span class="code-SummaryComment"&gt;///&lt;/span&gt;&lt;span class="code-comment"&gt; &lt;span class="code-SummaryComment"&gt;&amp;lt;&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;summary&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="code-SummaryComment"&gt;///&lt;/span&gt;&lt;span class="code-comment"&gt; Provide encoding and decoding of Quoted-Printable.&lt;/span&gt;&lt;br /&gt;    &lt;span class="code-SummaryComment"&gt;///&lt;/span&gt;&lt;span class="code-comment"&gt; &lt;span class="code-SummaryComment"&gt;&amp;lt;&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;/&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;summary&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="code-keyword"&gt;public&lt;/span&gt; &lt;span class="code-keyword"&gt;class&lt;/span&gt; QuotedPrintable&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="code-keyword"&gt;private&lt;/span&gt; QuotedPrintable()&lt;br /&gt;        {&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        &lt;span class="code-SummaryComment"&gt;///&lt;/span&gt;&lt;span class="code-comment"&gt; &lt;span class="code-SummaryComment"&gt;&amp;lt;&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;summary&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="code-SummaryComment"&gt;///&lt;/span&gt;&lt;span class="code-comment"&gt; // so including the = connection, the length will be 76&lt;/span&gt;&lt;br /&gt;        &lt;span class="code-SummaryComment"&gt;///&lt;/span&gt;&lt;span class="code-comment"&gt; &lt;span class="code-SummaryComment"&gt;&amp;lt;&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;/&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;summary&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="code-keyword"&gt;private&lt;/span&gt; &lt;span class="code-keyword"&gt;const&lt;/span&gt; &lt;span class="code-keyword"&gt;int&lt;/span&gt; RFC_1521_MAX_CHARS_PER_LINE = &lt;span class="code-digit"&gt;75&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;        &lt;span class="code-SummaryComment"&gt;///&lt;/span&gt;&lt;span class="code-comment"&gt; &lt;span class="code-SummaryComment"&gt;&amp;lt;&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;summary&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="code-SummaryComment"&gt;///&lt;/span&gt;&lt;span class="code-comment"&gt; Return quoted printable string with 76 characters per line.&lt;/span&gt;&lt;br /&gt;        &lt;span class="code-SummaryComment"&gt;///&lt;/span&gt;&lt;span class="code-comment"&gt; &lt;span class="code-SummaryComment"&gt;&amp;lt;&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;/&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;summary&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="code-SummaryComment"&gt;///&lt;/span&gt;&lt;span class="code-comment"&gt; &lt;span class="code-SummaryComment"&gt;&amp;lt;&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;param&lt;/span&gt; &lt;span class="code-SummaryComment"&gt;name="textToEncode"&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;&amp;gt;&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;&amp;lt;&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;/&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;param&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="code-SummaryComment"&gt;///&lt;/span&gt;&lt;span class="code-comment"&gt; &lt;span class="code-SummaryComment"&gt;&amp;lt;&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;returns&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;&amp;gt;&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;&amp;lt;&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;/&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;returns&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="code-keyword"&gt;public&lt;/span&gt; &lt;span class="code-keyword"&gt;static&lt;/span&gt; &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; Encode(&lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; textToEncode)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-keyword"&gt;if&lt;/span&gt; (textToEncode == null)&lt;br /&gt;                &lt;span class="code-keyword"&gt;throw&lt;/span&gt; &lt;span class="code-keyword"&gt;new&lt;/span&gt; ArgumentNullException();&lt;br /&gt; &lt;br /&gt;            &lt;span class="code-keyword"&gt;return&lt;/span&gt; Encode(textToEncode, RFC_1521_MAX_CHARS_PER_LINE);&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        &lt;span class="code-keyword"&gt;private&lt;/span&gt; &lt;span class="code-keyword"&gt;static&lt;/span&gt; &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; Encode(&lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; textToEncode, &lt;span class="code-keyword"&gt;int&lt;/span&gt; charsPerLine)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-keyword"&gt;if&lt;/span&gt; (textToEncode == null)&lt;br /&gt;                &lt;span class="code-keyword"&gt;throw&lt;/span&gt; &lt;span class="code-keyword"&gt;new&lt;/span&gt; ArgumentNullException();&lt;br /&gt; &lt;br /&gt;            &lt;span class="code-keyword"&gt;if&lt;/span&gt; (charsPerLine &lt;span class="code-keyword"&gt;&amp;lt;&lt;/span&gt;= &lt;span class="code-digit"&gt;0&lt;/span&gt;)&lt;br /&gt;                &lt;span class="code-keyword"&gt;throw&lt;/span&gt; &lt;span class="code-keyword"&gt;new&lt;/span&gt; ArgumentOutOfRangeException();&lt;br /&gt; &lt;br /&gt;            &lt;span class="code-keyword"&gt;return&lt;/span&gt; FormatEncodedString(EncodeString(textToEncode), charsPerLine);&lt;br /&gt;        }&lt;br /&gt;        &lt;span class="code-SummaryComment"&gt;///&lt;/span&gt;&lt;span class="code-comment"&gt; &lt;span class="code-SummaryComment"&gt;&amp;lt;&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;summary&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="code-SummaryComment"&gt;///&lt;/span&gt;&lt;span class="code-comment"&gt; Return quoted printable string, all in one line.&lt;/span&gt;&lt;br /&gt;        &lt;span class="code-SummaryComment"&gt;///&lt;/span&gt;&lt;span class="code-comment"&gt; &lt;span class="code-SummaryComment"&gt;&amp;lt;&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;/&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;summary&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="code-SummaryComment"&gt;///&lt;/span&gt;&lt;span class="code-comment"&gt; &lt;span class="code-SummaryComment"&gt;&amp;lt;&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;param&lt;/span&gt; &lt;span class="code-SummaryComment"&gt;name="textToEncode"&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;&amp;gt;&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;&amp;lt;&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;/&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;param&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="code-SummaryComment"&gt;///&lt;/span&gt;&lt;span class="code-comment"&gt; &lt;span class="code-SummaryComment"&gt;&amp;lt;&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;returns&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;&amp;gt;&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;&amp;lt;&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;/&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;returns&lt;/span&gt;&lt;span class="code-SummaryComment"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="code-keyword"&gt;public&lt;/span&gt; &lt;span class="code-keyword"&gt;static&lt;/span&gt; &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; EncodeString(&lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; textToEncode)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-keyword"&gt;if&lt;/span&gt; (textToEncode == null)&lt;br /&gt;                &lt;span class="code-keyword"&gt;throw&lt;/span&gt; &lt;span class="code-keyword"&gt;new&lt;/span&gt; ArgumentNullException();&lt;br /&gt; &lt;br /&gt;            &lt;span class="code-SDKkeyword"&gt;byte&lt;/span&gt;[] bytes = Encoding.UTF8.GetBytes(textToEncode);&lt;br /&gt;            StringBuilder builder = &lt;span class="code-keyword"&gt;new&lt;/span&gt; StringBuilder();&lt;br /&gt;            foreach (&lt;span class="code-SDKkeyword"&gt;byte&lt;/span&gt; b &lt;span class="code-keyword"&gt;in&lt;/span&gt; bytes)&lt;br /&gt;            {&lt;br /&gt;                &lt;span class="code-keyword"&gt;if&lt;/span&gt; (b != &lt;span class="code-digit"&gt;0&lt;/span&gt;)&lt;br /&gt;                    &lt;span class="code-keyword"&gt;if&lt;/span&gt;  ((b &lt;span class="code-keyword"&gt;&amp;lt;&lt;/span&gt; &lt;span class="code-digit"&gt;32&lt;/span&gt;) || (b &lt;span class="code-keyword"&gt;&amp;gt;&lt;/span&gt; &lt;span class="code-digit"&gt;126&lt;/span&gt;))&lt;br /&gt;                        builder.Append(&lt;span class="code-SDKkeyword"&gt;String&lt;/span&gt;.Format(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;={0}"&lt;/span&gt;, b.ToString(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;X2"&lt;/span&gt;)));&lt;br /&gt;                    &lt;span class="code-keyword"&gt;else&lt;/span&gt;&lt;br /&gt;                    {&lt;br /&gt;                        &lt;span class="code-keyword"&gt;switch&lt;/span&gt; (b)&lt;br /&gt;                        {&lt;br /&gt;                            &lt;span class="code-keyword"&gt;case&lt;/span&gt; &lt;span class="code-digit"&gt;13&lt;/span&gt;:&lt;br /&gt;                                builder.Append(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;=0D"&lt;/span&gt;);&lt;br /&gt;                                &lt;span class="code-keyword"&gt;break&lt;/span&gt;;&lt;br /&gt;                            &lt;span class="code-keyword"&gt;case&lt;/span&gt; &lt;span class="code-digit"&gt;10&lt;/span&gt;:&lt;br /&gt;                                builder.Append(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;=0A"&lt;/span&gt;);&lt;br /&gt;                                &lt;span class="code-keyword"&gt;break&lt;/span&gt;;&lt;br /&gt;                            &lt;span class="code-keyword"&gt;case&lt;/span&gt; &lt;span class="code-digit"&gt;61&lt;/span&gt;:&lt;br /&gt;                                builder.Append(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;=3D"&lt;/span&gt;);&lt;br /&gt;                                &lt;span class="code-keyword"&gt;break&lt;/span&gt;;&lt;br /&gt;                            &lt;span class="code-keyword"&gt;default&lt;/span&gt;:&lt;br /&gt;                                builder.Append(Convert.ToChar(b));&lt;br /&gt;                                &lt;span class="code-keyword"&gt;break&lt;/span&gt;;&lt;br /&gt;                        }&lt;br /&gt;                    }&lt;br /&gt;            }&lt;br /&gt; &lt;br /&gt;            &lt;span class="code-keyword"&gt;return&lt;/span&gt; builder.ToString();&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        &lt;span class="code-keyword"&gt;private&lt;/span&gt; &lt;span class="code-keyword"&gt;static&lt;/span&gt; &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; FormatEncodedString(&lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; qpstr, &lt;span class="code-keyword"&gt;int&lt;/span&gt; maxcharlen)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-keyword"&gt;if&lt;/span&gt; (qpstr == null)&lt;br /&gt;                &lt;span class="code-keyword"&gt;throw&lt;/span&gt; &lt;span class="code-keyword"&gt;new&lt;/span&gt; ArgumentNullException();&lt;br /&gt; &lt;br /&gt;            StringBuilder builder = &lt;span class="code-keyword"&gt;new&lt;/span&gt; StringBuilder();&lt;br /&gt;            &lt;span class="code-keyword"&gt;char&lt;/span&gt;[] charArray = qpstr.ToCharArray();&lt;br /&gt;            &lt;span class="code-keyword"&gt;int&lt;/span&gt; i = &lt;span class="code-digit"&gt;0&lt;/span&gt;;&lt;br /&gt;            foreach (&lt;span class="code-keyword"&gt;char&lt;/span&gt; c &lt;span class="code-keyword"&gt;in&lt;/span&gt; charArray)&lt;br /&gt;            {&lt;br /&gt;                builder.Append(c);&lt;br /&gt;                i++;&lt;br /&gt;                &lt;span class="code-keyword"&gt;if&lt;/span&gt; (i == maxcharlen)&lt;br /&gt;                {&lt;br /&gt;                    builder.AppendLine(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;="&lt;/span&gt;);&lt;br /&gt;                    i = &lt;span class="code-digit"&gt;0&lt;/span&gt;;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt; &lt;br /&gt;            &lt;span class="code-keyword"&gt;return&lt;/span&gt; builder.ToString();&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        &lt;span class="code-keyword"&gt;static&lt;/span&gt; &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; HexDecoderEvaluator(Match m)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-keyword"&gt;if&lt;/span&gt; (&lt;span class="code-SDKkeyword"&gt;String&lt;/span&gt;.IsNullOrEmpty(m.Value))&lt;br /&gt;                &lt;span class="code-keyword"&gt;return&lt;/span&gt; null;&lt;br /&gt; &lt;br /&gt;            CaptureCollection captures = m.Groups[&lt;span class="code-digit"&gt;3&lt;/span&gt;].Captures;&lt;br /&gt;            &lt;span class="code-SDKkeyword"&gt;byte&lt;/span&gt;[] bytes = &lt;span class="code-keyword"&gt;new&lt;/span&gt; &lt;span class="code-SDKkeyword"&gt;byte&lt;/span&gt;[captures.Count];&lt;br /&gt; &lt;br /&gt;            &lt;span class="code-keyword"&gt;for&lt;/span&gt; (&lt;span class="code-keyword"&gt;int&lt;/span&gt; i = &lt;span class="code-digit"&gt;0&lt;/span&gt;; i &lt;span class="code-keyword"&gt;&amp;lt;&lt;/span&gt; captures.Count; i++)&lt;br /&gt;            {&lt;br /&gt;                bytes[i] = Convert.ToByte(captures[i].Value, &lt;span class="code-digit"&gt;16&lt;/span&gt;);&lt;br /&gt;            }&lt;br /&gt; &lt;br /&gt;            &lt;span class="code-keyword"&gt;return&lt;/span&gt; UTF8Encoding.UTF8.GetString(bytes);&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        &lt;span class="code-keyword"&gt;static&lt;/span&gt; &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; HexDecoder(&lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; line)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-keyword"&gt;if&lt;/span&gt; (line == null)&lt;br /&gt;                &lt;span class="code-keyword"&gt;throw&lt;/span&gt; &lt;span class="code-keyword"&gt;new&lt;/span&gt; ArgumentNullException();&lt;br /&gt; &lt;br /&gt;            Regex re = &lt;span class="code-keyword"&gt;new&lt;/span&gt; Regex(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;((\\=([0-9A-F][0-9A-F]))*)"&lt;/span&gt;, RegexOptions.IgnoreCase);&lt;br /&gt;            &lt;span class="code-keyword"&gt;return&lt;/span&gt; re.Replace(line, &lt;span class="code-keyword"&gt;new&lt;/span&gt; MatchEvaluator(HexDecoderEvaluator));&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;        &lt;span class="code-keyword"&gt;public&lt;/span&gt; &lt;span class="code-keyword"&gt;static&lt;/span&gt; &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; Decode(&lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; encodedText)&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-keyword"&gt;if&lt;/span&gt; (encodedText == null)&lt;br /&gt;                &lt;span class="code-keyword"&gt;throw&lt;/span&gt; &lt;span class="code-keyword"&gt;new&lt;/span&gt; ArgumentNullException();&lt;br /&gt; &lt;br /&gt;            &lt;span class="code-keyword"&gt;using&lt;/span&gt; (StringReader sr = &lt;span class="code-keyword"&gt;new&lt;/span&gt; StringReader(encodedText))&lt;br /&gt;            {&lt;br /&gt;                StringBuilder builder = &lt;span class="code-keyword"&gt;new&lt;/span&gt; StringBuilder();&lt;br /&gt;                &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; line;&lt;br /&gt;                &lt;span class="code-keyword"&gt;while&lt;/span&gt; ((line = sr.ReadLine()) != null)&lt;br /&gt;                {&lt;br /&gt;                    &lt;span class="code-keyword"&gt;if&lt;/span&gt; (line.EndsWith(&lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;="&lt;/span&gt;))&lt;br /&gt;                        builder.Append(line.Substring(&lt;span class="code-digit"&gt;0&lt;/span&gt;, line.Length - &lt;span class="code-digit"&gt;1&lt;/span&gt;));&lt;br /&gt;                    &lt;span class="code-keyword"&gt;else&lt;/span&gt;&lt;br /&gt;                        builder.Append(line);&lt;br /&gt;                }&lt;br /&gt; &lt;br /&gt;                &lt;span class="code-keyword"&gt;return&lt;/span&gt; HexDecoder(builder.ToString());&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt; &lt;/pre&gt;&lt;br /&gt;Comparing two piece codes, you will see the refactoring was based on a few measurements:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Wherever you see PChar things like "char*", then .NETFramework's char array, byte array and Stream can be used. For example,you may use functions like:&lt;/li&gt;&lt;/ul&gt;&lt;pre class="cfdg" id="pre2" style="margin-top: 0pt;"&gt;Encoding.UTF8.GetBytes(textToEncode);&lt;br /&gt;&lt;span class="code-SDKkeyword"&gt;String&lt;/span&gt;.ToCharArray(text);&lt;br /&gt; &lt;/pre&gt;&lt;ul&gt;&lt;li&gt;To rebuild a string for encoding or decoding, StringBuilder is handy and efficient.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;As you can see, conforming to .NET methodology of programming may result in shorter code and simpler algorithm.&lt;br /&gt;&lt;br /&gt;Here's the code for Unit Test:&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharp" id="pre3" style="margin-top: 0pt;"&gt;        [Test]&lt;br /&gt;        &lt;span class="code-keyword"&gt;public&lt;/span&gt; &lt;span class="code-keyword"&gt;void&lt;/span&gt; TestQuotedPrintable()&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; text = &lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;Quoted-printable, or QP encoding, is an encoding using printable characters (i.e. alphanumeric and the equals sign \" = \") to transmit 8-bit data over a 7-bit data path. It is defined as a MIME content transfer encoding for use in Internet e-mail."&lt;/span&gt; + Environment.NewLine +&lt;br /&gt;                &lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;Any 8-bit byte value may be encoded with 3 characters, an \" = \" followed by"&lt;/span&gt;;&lt;br /&gt;            &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; encodedText = QuotedPrintable.Encode(text);&lt;br /&gt;            &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; decodedText = QuotedPrintable.Decode(encodedText);&lt;br /&gt;            Assert.IsTrue(text == decodedText);&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        [Test]&lt;br /&gt;        &lt;span class="code-keyword"&gt;public&lt;/span&gt; &lt;span class="code-keyword"&gt;void&lt;/span&gt; TestQuotedPrintableUnicode()&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; text = &lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;Quoted-printable, or QP encoding, is an encoding using printable characters (i.e. alphanumeric and the equals sign \" = \") to transmit 8-bit data over a 7-bit data path. It is defined as a MIME content transfer encoding for use in Internet e-mail."&lt;/span&gt; + Environment.NewLine +&lt;br /&gt;                &lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;Any 8-bit byte value may be encoded with 3 characters, an \" = \" followed by中文"&lt;/span&gt;;&lt;br /&gt;            &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; encodedText = QuotedPrintable.Encode(text);&lt;br /&gt;            &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; decodedText = QuotedPrintable.Decode(encodedText);&lt;br /&gt;            Assert.IsTrue(text == decodedText);&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        [Test]&lt;br /&gt;        &lt;span class="code-keyword"&gt;public&lt;/span&gt; &lt;span class="code-keyword"&gt;void&lt;/span&gt; TestQuotedPrintableEscape()&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; text = &lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;Quoted-printable, or QP encoding,=0D=0A is an encoding using printable characters (i.e. alphanumeric and the equals sign \" = \") to transmit 8-bit data over a 7-bit data path. It is defined as a MIME content transfer encoding for use in Internet e-mail."&lt;/span&gt; + Environment.NewLine +&lt;br /&gt;                &lt;span class="code-string"&gt;"&lt;/span&gt;&lt;span class="code-string"&gt;# Le PS doit discuter avec François Bayrou,=0A=0D=== selon Moscovici Les valeurs suivies à la Bourse de Paris à la mi-séance L'acidification des océans rend les îles plus vulnérables"&lt;/span&gt;;&lt;br /&gt;            &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; encodedText = QuotedPrintable.Encode(text);&lt;br /&gt;            &lt;span class="code-SDKkeyword"&gt;string&lt;/span&gt; decodedText = QuotedPrintable.Decode(encodedText);&lt;br /&gt;            Assert.IsTrue(text == decodedText);&lt;br /&gt;       }&lt;br /&gt;  &lt;/pre&gt;&lt;strong&gt;The full source code including unit tests is included in &lt;a href="http://www.codeproject.com/KB/cs/vCard_Parser/vCard.zip" title="source code"&gt;this link&lt;/a&gt; of a VS 2005 solution for &lt;a href="http://www.codeproject.com/KB/cs/vCard_Parser.aspx" title="vCard Parser"&gt;vCard parser&lt;/a&gt;.&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-1326767508356987583?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/1326767508356987583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/1326767508356987583'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2011/12/refactoring-legacy-unsafe-c-codes-into.html' title='Refactoring legacy unsafe C# codes into managed C#codes'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-2713489093386285298</id><published>2010-07-14T16:57:00.000-07:00</published><updated>2011-12-18T21:23:15.892-08:00</updated><title type='text'>From Delphi to C# .NET</title><content type='html'>I was hinted by the boss that I will be the mentor of fellow Delphi programmers who want to learn C#. Though I do not consider I has mastered half of what a senior C# programmer should have, I would share some experiences in my learning path.&lt;br /&gt;&lt;br /&gt;I am well aware of the mindset of common Delphi programmers, and why we loved Delphi, as I started using Delphi since 1997, moving from C/C++. And I started object oriented programming with Turbo Pascal in 1991.&lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;I started .NET programming unwillingly in year 2003, in a project of developing some class libraries of ASP.NET. Somethings I felt badly included:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;.NET provides garbage collection. I spent years to acquire profession of developing memory-leak-free Delphi applications. With such garbage collection, the skills I developed become insignificant. In the first year or two using C#, I kept the habit of releasing objects after uses, though now I understand this is bad practice in .NET&lt;/span&gt;&lt;/span&gt;. &lt;/i&gt;&lt;/b&gt;In addition, memory management in large projects particularly distributed applications is always difficult. Leaving memory management to GC will make developers concentrate more on designs and coding, rather than busy house keeping of releasing objects.&lt;/li&gt;&lt;li&gt;The libraries of .NET framework look very foreign&amp;nbsp; to me. There are many functions available in Delphi but not in .NET framework. Nevertheless, after .NET 2, apparently Anders the farther of Delphi and C# had altered some conventions of the .NET framework dramatically to appeal to Delphi programmers. No more complaints.&lt;/li&gt;&lt;li&gt;High memory usage. Now I understand this is by design in order to lower the cost of memory allocation, and the memory usage is well managed by CLR.&lt;/li&gt;&lt;/ol&gt;Comparing with programmers from Java and C++, Delphi programmers have the following conveniences when moving to C#:&lt;br /&gt;1. The casing convention is Pascal convention.&lt;br /&gt;2. Since .NET 2, the naming convention of .NET libraries became more appealing to Delphi programmers who may research needed functions in a more speedy manner.&lt;br /&gt;3. The block convention of C# syntax is similar to Object Pascal. So Delphi programmers may read C# codes faster. I have seen some C# programmers from C background insisted on constructing blocks in C style, however, they may have harder time when reading others' C# codes.&lt;br /&gt;&lt;br /&gt;Of course Java programmers and C++ programmers may argue that they have more conveniences, as the C# syntax is more similar to the ones of Java and C++, and C# was built on the top of the concept of Java.&lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;I think, a Delphi programmer may treat C# as Delphi in Java syntax flavor at the very beginning of studying, say, when developing a few demo projects to get familiar with basic C# syntax and VS IDE. However, don't let such mindset last long, as I did lasting one year. I think, one or two months is more than enough. Otherwise, when you review conventional C# codes written by others with more experiences, you will feel very awful.&lt;br /&gt;&lt;br /&gt;There's nothing to prevent you from writing C# codes in Object Pascal style so you feel comfortable, however, staying in your comfort zone will lead to major drawbacks:&lt;br /&gt;1. You do not take advantages of those C# syntax designed by Anders.&lt;br /&gt;2. Code Analysis will complain bitterly. The warnings from Codes Analysis come with good reasons: they are the collective wisdom of programmers around the world over years.&lt;br /&gt;3. You will be re-inventing the wheel when developing enterprise applications, as many features have already been available in .NET Framework. Without mindset change for new style, you will be basically writing Delphi codes in C# syntax running on VM, but without using the powers of .NET Framework.&lt;br /&gt;4. It will be hard for you to read conventional C# codes in order to learn from others.&lt;br /&gt;5. Your C# codes designed in Delphi mindset could easily suffer performance problems and security issues.&lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Common Misconception from the mindset of RAD:&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;1. &lt;i&gt;Code Analysis find errors for you, so you write correct codes faster.&lt;/i&gt;  A handful numbers of defects found by Code Analysis became compiler  errors, that was, MS put some of the analysis rules into the parser of  .NET compiler. However, code analysis is mostly for locating vulnerable  codes and improving maintainability and extensibility. Without doing code analysis, your  codes may still run well in an ivory tower. If you buy the concept of  code review, code analysis is your good friend as it is automatic code  review. The machine is doing code review for you, so you can concentrate  on those vulnerabilities or defects which can not possibly checked by  the machine. &lt;br /&gt;2. Unit test will slow programmers down.There are  many text books about the productivity you can get from unit tests. My  experience: unit test force you to make good designs which are generally  friendly to unit tests; unit test give you assurance and confidence  when you move forward during bug fixing, refactoring and adding new  features.&lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;The following factors support the importance of mindset change:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The sole soul of Delphi is RAD, in contrast, some of the souls of C# .NET are agile and enterprise architecture, though VS .NET well support RAD. Borland/Inprise tried to transform Delphi toward enterprise architecture, but failed, partially because of the soul. There are tons of discussion in the Internet about RAD, though I was a big fan of RAD.&lt;/li&gt;&lt;li&gt;The elements illustrated below which are generally weak or absent in Delphi except Delphi 2010. And you should search MSDN as well as other resources to learn the accurate concepts of these elements.&lt;/li&gt;&lt;/ol&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;Configuration&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Delphi programmers generally use INI file, database tables or free form XML to persist settings. .NET provide a solid framework of configuration, and on the top of that, MS also provide an application block for configuration. And, you can build derived classes of ISettingsProvider to interface with settings stored in legacy storage.&lt;br /&gt;&lt;br /&gt;Configuration has significant impact on design and deployment. In many Delphi applications, a configuration file is generally for storing setting used by the business logic of the applications. In .NET, a configuration is always used by CLR for binding components together.&lt;br /&gt;&lt;br /&gt;Many .NET technologies are based on the combination of configuration and reflection, for example, unit tests.&lt;br /&gt;&lt;br /&gt;The library of configuration is vast. Studying the library is an on going process.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;Reflection&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Programmers have been long using variety of design patterns to remove couplings, and reflection provides another paradigm for removing coupling, though reflection is not only for removing coupling.&lt;br /&gt;&lt;br /&gt;Many of the .NET technologies are built on the foundation of reflection, such as attribute, configuration binding, and unit tests etc.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Assembly&lt;/b&gt;&lt;br /&gt;Actually Delphi has similar concept: Package or Borland Package Library (BPL). A BPL file is a dll file and supports object oriented interfacing.So you may consider a .NET assembly is an advanced "BPL" file with byte codes rather than machine codes. In addition, an assembly contain a chunk of meta data describing the assembly for various purposes. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Short life cycle&lt;/b&gt;&lt;br /&gt;There are many text books about&amp;nbsp; the advantage of making objects have short life cycle. In Delphi as well as other languages without automatic garbage collection, it is hard to implement a design encouraging short life cycle. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;GC&lt;/b&gt;&lt;br /&gt;While GC is for automatic garbage collection, you should still avoid unintended memory build-up which is generally caused by&amp;nbsp; a long live object holding up short live objects unnecessarily.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;GAC&lt;/b&gt;&lt;br /&gt;Global Assembly Cache is a special directory managed by .NET framework along with Windows kernels. Basically assemblies installed in GAC are trusted because only admin can install them there. .NET CLR will always search for needed assemblies in GAC first then elsewhere.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Resource management&lt;/b&gt;&lt;br /&gt;While GC will dispose unused objects automatically, however, when the collection operates is not deterministic. GC is for managing memory, not for resources which are provided by the OS and managed by OS. You as a programmer should be responsible for releasing unused resources ASAP:&lt;br /&gt;1. A class which owns a resource MUST implement IDisposable.&lt;br /&gt;2. When using an object of the class, it is desirable to put it within a Using statement which will guarantee the resource used is disposed no matter what happen even if an exception is raised withing the Using block.&lt;br /&gt;&lt;br /&gt;Without conforming to these 2 guidelines, you will see your program runs out of resources soon when requests to resources (e.g. internet connections) become frequent, for example, during unit test or stress test.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Attributes&lt;/b&gt;&lt;br /&gt;Attributes are basically meta data associated with classes, properties or methods. It is up to the CLR, framework codes or your domain specific codes to interrupt the attributes and react. Attributes give loose couplings and great flexibility. Your first encounter with Attributes would be those in unit tests, such as TestClassAttribute and TestMethodAttribute.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Unit tests/TDD&lt;/b&gt;&lt;br /&gt;There are many articles and books about unit tests and Test Driven Development. And MS Test provides powerful supports and conveniences to unit tests. Surely codes under mouse won't be good for testing, neither be good design at all. You may consider studying Object Oriented Design in addition to your Object Oriented Programming skill. If you apply OOD principles during design, you will find your codes easily fit in unit test. In commercial practice, it might be too costly, or not worthy to apply OOD principles all the time unless you are developing a framework used by millions of programmers. If you find your classes hard to unit test, it may be hard for your client codes to aggregate them as well. So writing unit tests may give you good opportunity of applying OOD principles in order to improve structures.&lt;br /&gt;&lt;br /&gt;While constructing test codes takes time, however, it will greatly reduce debugging and speed up the whole development. When you add new features to your product, you will have less worry about whether newly introduced codes will break the product, because your test codes will likely be broken first. Evaluating new codes against unit tests is easier that evaluating new codes against the whole product.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Microsoft .NET programming guidelines&lt;/b&gt;&lt;br /&gt;Borland had provided a few pages of programming guidelines, mostly focusing on naming conventions and styles. And much of the context is integrated into a few implementations of Delphi formaters.&lt;br /&gt;&lt;br /&gt;Microsoft has provided more than 100 pages of .NET programming guidelines, and much of the context is integrated into Code Analysis.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code Analysis&lt;/b&gt;&lt;br /&gt;It is not for finding bugs for you. Please check Wikipedia about Code Analysis.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Components&lt;/b&gt;&lt;br /&gt;"Programming .NET Components" by Lowy is a book must read after you have used C# in commercial projects for half year.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Common Object Model/Interoperability &lt;/b&gt;&lt;br /&gt;COM is one of the basic glue between Windows applications, and the other is Windows messages which is hard to use. In native Windows, majority of coordination between applications and components within a machine is implemented through COM. So .NET applications running on CLR should not give up the coordination with other applications running on native Windows. Interoperability is the bridge between 2 environments.&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt; &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;After all, I think the most important thing of all is changing mindset. It took me one year or two to change. Hopefully through reading this post you will take less time.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;To be continued and updated&lt;/b&gt; ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-2713489093386285298?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/2713489093386285298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/2713489093386285298'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2010/07/from-delphi-to-c-net.html' title='From Delphi to C# .NET'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-2175477029181967588</id><published>2009-07-22T17:28:00.000-07:00</published><updated>2009-07-22T17:35:40.997-07:00</updated><title type='text'>About Apollo 11 Moon Landing</title><content type='html'>I read an article about the aftermark of the event at http://www.crn.com/government/218600158;jsessionid=UMI42HAWWTY3MQSNDLPCKHSCJUNN2JVN&lt;br /&gt;&lt;br /&gt;And I found some of the comments are brilliant, as highlighted in green below.&lt;br /&gt;&lt;div id="articleheadline"&gt;&lt;h1&gt;&lt;span style="font-size:85%;"&gt;Apollo 11 Moon Landing Delivered 40 Years Of Spin-Off Tech&lt;/span&gt;&lt;/h1&gt;&lt;/div&gt;  &lt;div id="articleheaderwrapper"&gt; &lt;!--img src="http://i.cmpnet.com/crn/v3/images/article-cweb.gif" align="right" alt="ChannelWeb logo"--&gt; &lt;span class="articlebyline"&gt;By &lt;a href="mailto:dpoeter@cmp.com"&gt;Damon Poeter&lt;/a&gt;, ChannelWeb &lt;/span&gt;&lt;br /&gt;&lt;span class="articlepublishdate"&gt;2:28 PM EDT Wed. Jul. 22, 2009&lt;/span&gt; &lt;/div&gt; &lt;script language="javascript" type="text/javascript" src="http://i.cmpnet.com/crn/v3/javascript/ticker.js"&gt;&lt;/script&gt; &lt;span id="articleBody"&gt; &lt;div id="articlecontent"&gt; &lt;!--&lt;droplet src="/shared/recommends/article/showRecommendsBox.jhtml"&gt;&lt;param name="art_id" value="param:articleID"&gt;&lt;/droplet&gt;&lt;valueof param="body1"&gt;&lt;/valueof&gt; --&gt; &lt;!-- &lt;br/&gt;&lt;droplet src="/GLOBAL/apps/quickPolls/showPoll.jhtml"&gt; &lt;param name="dhandlerExtrapath" value="param:relative_url"&gt; &lt;param name="id" value="`request.getParameter("&gt; &lt;/droplet&gt;&lt;br/&gt; --&gt; &lt;!-- &lt;valueof param="body3"&gt;&lt;/valueof&gt;--&gt; &lt;!-- &lt;droplet src="/shared/recommends/article/showRecommendsBox.jhtml"&gt;&lt;param name="art_id" value="param:articleID"&gt;&lt;/droplet&gt;&lt;valueof param="bodyContent.body"&gt;&lt;/valueof&gt; --&gt; &lt;!-- &lt;droplet src="/shared/recommends/article/showRecommendsBox.jhtml"&gt;&lt;param name="art_id" value="param:articleID"&gt;&lt;/droplet&gt;&lt;valueof param="bodyContent.body"&gt;&lt;/valueof&gt; --&gt; Who says government can't ever do anything right? As the world celebrates the 40th anniversary of the Apollo 11 moon landing this week, we're also commemorating the entire NASA-led project to send Neil Armstrong and Buzz Aldrin on their historic space mission -- a massive, ambitious undertaking that &lt;a href="http://www.crn.com/it-channel/218501669"&gt;has paid dividends&lt;/a&gt; far beyond the planting of the American flag on Luna. &lt;p&gt; &lt;/p&gt;&lt;p&gt; And no, we're not talking about Tang. &lt;/p&gt;&lt;p&gt; The sugary drink is actually one of the few products associated with the Apollo missions that NASA didn't have a hand in developing. But the host of NASA's technology "spin-offs" -- conveniently documented in the space agency's &lt;a href="http://www.sti.nasa.gov/tto/"&gt;annual publication of the same name&lt;/a&gt; -- is legion. &lt;/p&gt;&lt;p&gt; From memory foam to freeze-dried food, the list of technologies and products that came directly out of our space exploits and found markets in the private sector is impressive. Perhaps none so much as the computer-based advances that resulted from the particular requirements of space exploration -- including such developments as integrated inventory and &lt;a href="http://www.crn.com/encyclopedia/defineterm.jhtml?term=process%20management&amp;amp;x=&amp;amp;y="&gt;process management&lt;/a&gt; systems for the complex process of building a rocket capable of reaching the moon, improvements to computer-assisted manufacturing of complicated space machines and compact, powerful &lt;a href="http://www.crn.com/encyclopedia/defineterm.jhtml?term=processing&amp;amp;x=&amp;amp;y="&gt;processing&lt;/a&gt; power for the spacecraft's own navigation systems. &lt;/p&gt;&lt;p&gt; When President John F. Kennedy gave voice to our lunar ambitions way back in 1961, few people knew that we also were embarking on a computing revolution. In just eight short years, the United States had landed two astronauts in the Sea of Tranquility -- and to get there, huge technological innovations such as the Apollo Guidance Computer played a major part. &lt;/p&gt;&lt;p&gt;It's safe to say that today's high-tech industry owes a debt to those early days of space exploration. No doubt the computing revolution would have happened without the Apollo Program's six successful landings on the moon -- but those missions sure helped kick-start Silicon Valley and the market for IT products. &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/div&gt; &lt;/span&gt;  &lt;a name="comm"&gt; &lt;/a&gt; &lt;!-- clearspace:community --&gt; &lt;script language="JavaScript" type="text/javascript" src="http://community.crn.com/everywhere/796?community=2000&amp;amp;key=218600158"&gt;&lt;/script&gt;    &lt;div style="border: 0px solid rgb(204, 204, 204); overflow: hidden; position: relative; float: left; width: 438px; height: auto; margin-top: 0px; margin-left: 0px; padding-bottom: 5px;"&gt;&lt;style type="text/css" media="all"&gt;         @import "http://community.crn.com/styles/jive-community-everywhere.css";     &lt;/style&gt;  &lt;style type="text/css" media="all"&gt; #jive-body-main .jive-thread-info h1 {  margin: 0;  padding: 0;  font-weight: bold;  color: #1a64b8;  font-size: 1.6em;  } &lt;/style&gt;  &lt;script type="text/javascript" language="JavaScript"&gt;     function getRefererURL() {         var url = location.href;         if (url.indexOf('#community') &gt; 0) {             url = url.substring(0, url.indexOf('#community'));         }         if (url.charAt(url.length-1) == '/') {             url = url.substring(0, url.length-1);         }         return url;     } &lt;/script&gt;  &lt;div id="jive-body-main"&gt;   &lt;!-- BEGIN main body column --&gt;  &lt;div id="jive-body-maincol-container"&gt;   &lt;div id="jive-body-maincol"&gt;     &lt;!-- BEGIN thread messages --&gt;             &lt;div class="jive-thread-messages"&gt;                            &lt;!-- BEGIN thread info --&gt;                                                  &lt;!-- END thread info --&gt;                                   &lt;!-- BEGIN reply --&gt;                                 &lt;div&gt;                                     &lt;div class="jive-thread-reply-indent-shadow"&gt;                                         &lt;div class="jive-thread-reply"&gt;                                             &lt;div class="jive-thread-reply-body"&gt;                                                 &lt;div class="jive-author"&gt;                                                         &lt;span class="jive-author-avatar-container"&gt;                                                             &lt;a href="http://community.crn.com/people/ANON1238801216022"&gt;&lt;br /&gt;&lt;/a&gt;                                                         &lt;/span&gt;                                                         &lt;div class="jive-username-link-wrapper" style="text-align: center;"&gt;                                                             &lt;a href="http://community.crn.com/people/ANON1238801216022"&gt;ANON1238801216022&lt;/a&gt;                                                         &lt;/div&gt;                                                 &lt;/div&gt;                                                  &lt;div class="jive-thread-reply-body-container"&gt;                                                     &lt;div class="jive-thread-reply-subject"&gt;                                                          &lt;div class="jive-thread-reply-date"&gt;                                                               &lt;span&gt;Jul 22, 2009 3:10 PM&lt;/span&gt;                                                                 &lt;a href="http://community.crn.com/message/36561#36561" title="in response to: frozentech"&gt;                                                                     &lt;img src="http://community.crn.com/images/up-10x10.gif" alt="" border="0" height="10" width="10" /&gt;                                                                 &lt;/a&gt; in response to: &lt;a href="http://community.crn.com/message/36561#36561" title="Go to message"&gt;frozentech&lt;/a&gt;                                                           &lt;/div&gt;                                                         &lt;strong&gt;&lt;a href="http://community.crn.com/message/36552#36552"&gt;Re: Apollo 11 Moon Landing Delivered 40 Years Of Spin-Off Tech&lt;/a&gt;&lt;/strong&gt;                                                     &lt;/div&gt;                                                      &lt;div class="jive-thread-reply-message"&gt;                                                         &lt;!-- [DocumentBodyStart:7542d8e1-1c12-46ff-b5e2-e84dcdc9a46a] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;Sorry, but apparently you are unable to read and understand the English language.  How you manage to type coherent sentences is beyond me.  Where in there do I complain about the benefits? &lt;/p&gt;&lt;p style="padding: 0px; min-height: 8pt; height: 8pt;"&gt; &lt;/p&gt;&lt;p&gt;What I am complaining about is how people continue to praise to high heaven the round about way we got them.  There are many other paths one can imagine to all this technology they trot out and say, "This is from space research, isn't it wonderful." that might have been more productive and cheaper. &lt;/p&gt;&lt;p style="padding: 0px; min-height: 8pt; height: 8pt;"&gt; &lt;/p&gt;&lt;p&gt;You honestly believe we wouldn't have computers except for the space program?  Sorry, but we already did.  Depending on how you define what you mean, we had them 20 years before the space program or even 100 years before the space program. &lt;/p&gt;&lt;p style="padding: 0px; min-height: 8pt; height: 8pt;"&gt; &lt;/p&gt;&lt;p&gt;Freeze dried food?  Come on, there are so many people in the past up to the present day doing research on food processing from the guy who won the prize from Napoleon for canning to the papers I looked at recently on new ways to dry grapes to make raisins and so many reasons for people doing so unrelated to space in any way.&lt;/p&gt;&lt;p style="padding: 0px; min-height: 8pt; height: 8pt;"&gt; &lt;/p&gt;&lt;p&gt;SCUBA gear?  Geeze, concepts and real devices from Leonardo on up.&lt;/p&gt;&lt;p style="padding: 0px; min-height: 8pt; height: 8pt;"&gt; &lt;/p&gt;&lt;p&gt;Let me put it another way.  So far as I can tell, the reason for the Apollo program was *not* to generate new technology for you and me, so to bring it out and present it as a wonderful justification is suspect.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:7542d8e1-1c12-46ff-b5e2-e84dcdc9a46a] --&gt;                                                     &lt;/div&gt;                                                      &lt;!-- BEGIN content details --&gt;                                                     &lt;div class="jive-content-controls"&gt;                                                           &lt;a href="http://www.crn.com/user/clogin.jhtml?successLoginRedirect=/" donclick="jiveShowPostForm(36552); return false;" title="Reply to this message" class="jive-thread-reply-link"&gt;Reply&lt;/a&gt;                                                     &lt;/div&gt;                                                     &lt;!-- END content details--&gt;                                                 &lt;/div&gt;                                             &lt;/div&gt;                                         &lt;/div&gt;                                     &lt;/div&gt;                                 &lt;/div&gt;                                 &lt;!-- END reply --&gt;                                                                  &lt;!-- BEGIN reply --&gt;                                 &lt;div&gt;                                     &lt;div class="jive-thread-reply-indent-shadow"&gt;                                         &lt;div class="jive-thread-reply"&gt;                                             &lt;div class="jive-thread-reply-body"&gt;                                                 &lt;div class="jive-author"&gt;                                                         &lt;span class="jive-author-avatar-container"&gt;                                                             &lt;a href="http://community.crn.com/people/Miramichier"&gt;Miramichier&lt;/a&gt;&lt;/span&gt;&lt;a href="http://community.crn.com/people/Miramichier"&gt;" border="0" height="46" width="46"&gt;&lt;/a&gt;                                                                                                                  &lt;div class="jive-username-link-wrapper" style="text-align: center;"&gt;                                                             &lt;a href="http://community.crn.com/people/Miramichier"&gt;Miramichier&lt;/a&gt;                                                         &lt;/div&gt;                                                 &lt;/div&gt;                                                  &lt;div class="jive-thread-reply-body-container"&gt;                                                     &lt;div class="jive-thread-reply-subject"&gt;                                                          &lt;div class="jive-thread-reply-date"&gt;                                                               &lt;span&gt;Jul 22, 2009 5:21 PM&lt;/span&gt;                                                                 &lt;a href="http://community.crn.com/message/36550#36550" title="in response to: Fourthrail"&gt;                                                                     &lt;img src="http://community.crn.com/images/up-10x10.gif" alt="" border="0" height="10" width="10" /&gt;                                                                 &lt;/a&gt; in response to: &lt;a href="http://community.crn.com/message/36550#36550" title="Go to message"&gt;Fourthrail&lt;/a&gt;                                                           &lt;/div&gt;                                                         &lt;strong&gt;&lt;a href="http://community.crn.com/message/36563#36563"&gt;Re: Apollo 11 Moon Landing Delivered 40 Years Of Spin-Off Tech&lt;/a&gt;&lt;/strong&gt;                                                     &lt;/div&gt;                                                      &lt;div class="jive-thread-reply-message"&gt;                                                         &lt;!-- [DocumentBodyStart:18c084f4-6f03-44e6-aa80-0e06a94925d1] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;Oops! Posted a message as a reply to another poster instead of to the article itself.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:18c084f4-6f03-44e6-aa80-0e06a94925d1] --&gt;                                                     &lt;/div&gt;                                                      &lt;!-- BEGIN content details --&gt;                                                     &lt;div class="jive-content-controls"&gt;                                                           &lt;a href="http://www.crn.com/user/clogin.jhtml?successLoginRedirect=/" donclick="jiveShowPostForm(36563); return false;" title="Reply to this message" class="jive-thread-reply-link"&gt;Reply&lt;/a&gt;                                                     &lt;/div&gt;                                                     &lt;!-- END content details--&gt;                                                 &lt;/div&gt;                                             &lt;/div&gt;                                         &lt;/div&gt;                                     &lt;/div&gt;                                 &lt;/div&gt;                                 &lt;!-- END reply --&gt;                                                                  &lt;!-- BEGIN reply --&gt;                                 &lt;div&gt;                                     &lt;div class="jive-thread-reply-indent-shadow"&gt;                                         &lt;div class="jive-thread-reply"&gt;                                             &lt;div class="jive-thread-reply-body"&gt;                                                 &lt;div class="jive-author"&gt;                                                         &lt;span class="jive-author-avatar-container"&gt;                                                             &lt;a href="http://community.crn.com/people/Miramichier"&gt;Miramichier&lt;/a&gt;&lt;/span&gt;&lt;a href="http://community.crn.com/people/Miramichier"&gt;" border="0" height="46" width="46"&gt;&lt;/a&gt;                                                                                                                  &lt;div class="jive-username-link-wrapper" style="text-align: center;"&gt;                                                             &lt;a href="http://community.crn.com/people/Miramichier"&gt;Miramichier&lt;/a&gt;                                                         &lt;/div&gt;                                                 &lt;/div&gt;                                                  &lt;div class="jive-thread-reply-body-container"&gt;                                                     &lt;div class="jive-thread-reply-subject"&gt;                                                          &lt;div class="jive-thread-reply-date"&gt;                                                               &lt;span&gt;Jul 22, 2009 5:22 PM&lt;/span&gt;                                                                 &lt;a href="http://community.crn.com/message/36550#36550" title="in response to: Fourthrail"&gt;                                                                     &lt;img src="http://community.crn.com/images/up-10x10.gif" alt="" border="0" height="10" width="10" /&gt;                                                                 &lt;/a&gt; in response to: &lt;a href="http://community.crn.com/message/36550#36550" title="Go to message"&gt;Fourthrail&lt;/a&gt;                                                           &lt;/div&gt;                                                         &lt;strong&gt;&lt;a href="http://community.crn.com/message/36564#36564"&gt;Re: Apollo 11 Moon Landing Delivered 40 Years Of Spin-Off Tech&lt;/a&gt;&lt;/strong&gt;                                                     &lt;/div&gt;                                                      &lt;div class="jive-thread-reply-message"&gt;                                                         &lt;!-- [DocumentBodyStart:6cabcc27-f206-44ff-96c0-2aa09ba05062] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;    &lt;span style="color: rgb(0, 153, 0);"&gt;I think it seems quite common that research, innovation and discovery  do not have the main effect intended for them. Edison thought the chief value of recording would be for wills. Almost all new media technologies pay off first in pornography.&lt;/span&gt;&lt;/p&gt;&lt;p style="color: rgb(0, 153, 0);"&gt;      The space race was, indeed, touched off by the cold war and naysayers spoke of what a waste it was. Now we use satellite communication every day to instantly transmit news reports around the world. I remember when the wedding of the Queen of England was filmed, hustled onto jet fighters, flown across the Atlantic and, with the assistance of later time zones,  displayed to the public within "hours" of its occurrence. Does anyone want to imagine life without satellites now?&lt;/p&gt;&lt;p style="color: rgb(0, 153, 0);"&gt;      The space program also created needs that contributed to the development of faster, smaller, better computers of all kinds. I would be surprised if there were not benefits to commercial air travel.&lt;/p&gt;&lt;p style="color: rgb(0, 153, 0);"&gt;     Finally, it is in the nature of mankind to learn, explore, invent,  build and, unfortunately, compete to the point of violence. While not purely a blessing, I think it is pointless to resist the drive to learn.&lt;/p&gt;&lt;p style="color: rgb(0, 153, 0);"&gt;      War is not the only motivator. Entertainment seems to drive technology development quite furiously. Medical treatment seems to pull technology along at an amazing pace.&lt;/p&gt;&lt;p style="color: rgb(0, 153, 0);"&gt;      From my childhood, there have been three simultaneous and continuous explosions. One is information. Another is computer processing and storage. The third is communication. I remember when every phone call was operator assisted. I remember the first commercial electronic calculator. Last week, I watched and listened to my heart pumping and squishing in real time.&lt;/p&gt;&lt;p style="color: rgb(0, 153, 0);"&gt;     It has been an amazing ride. I have a friend of 93,  26 years older than I am, who says life is so interesting he really wants to stick around to see what is coming next.&lt;/p&gt;&lt;p style="color: rgb(0, 153, 0);"&gt;     I was wildly excited when Neill Armstrong stepped onto the surface of the moon. It would have been even better with on a hi def digital colour, giant TV.&lt;/p&gt;&lt;p style="color: rgb(0, 153, 0);"&gt;     We need to smarten up a lot about we use technology but stopping research and exploration are not, I think, a useful option.&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:6cabcc27-f206-44ff-96c0-2aa09ba05062] --&gt;                                                     &lt;/div&gt;                                                      &lt;!-- BEGIN content details --&gt;                                                     &lt;div class="jive-content-controls"&gt;                                                           &lt;a href="http://www.crn.com/user/clogin.jhtml?successLoginRedirect=/" donclick="jiveShowPostForm(36564); return false;" title="Reply to this message" class="jive-thread-reply-link"&gt;Reply&lt;/a&gt;                                                     &lt;/div&gt;                                                     &lt;!-- END content details--&gt;                                                 &lt;/div&gt;                                             &lt;/div&gt;                                         &lt;/div&gt;                                     &lt;/div&gt;                                 &lt;/div&gt;                                 &lt;!-- END reply --&gt;                                                                  &lt;!-- BEGIN reply --&gt;                                 &lt;div&gt;                                     &lt;div class="jive-thread-reply-indent-shadow"&gt;                                         &lt;div class="jive-thread-reply"&gt;                                             &lt;div class="jive-thread-reply-body"&gt;                                                 &lt;div class="jive-author"&gt;                                                         &lt;span class="jive-author-avatar-container"&gt;                                                             &lt;a href="http://community.crn.com/people/Jannatech2010"&gt;&lt;br /&gt;&lt;/a&gt;                                                         &lt;/span&gt;                                                         &lt;div class="jive-username-link-wrapper" style="text-align: center;"&gt;                                                             &lt;a href="http://community.crn.com/people/Jannatech2010"&gt;Jannatech2010&lt;/a&gt;                                                         &lt;/div&gt;                                                 &lt;/div&gt;                                                  &lt;div class="jive-thread-reply-body-container"&gt;                                                     &lt;div class="jive-thread-reply-subject"&gt;                                                          &lt;div class="jive-thread-reply-date"&gt;                                                               &lt;span&gt;Jul 22, 2009 5:35 PM&lt;/span&gt;                                                                 &lt;a href="http://community.crn.com/message/36564#36564" title="in response to: Miramichier"&gt;                                                                     &lt;img src="http://community.crn.com/images/up-10x10.gif" alt="" border="0" height="10" width="10" /&gt;                                                                 &lt;/a&gt; in response to: &lt;a href="http://community.crn.com/message/36564#36564" title="Go to message"&gt;Miramichier&lt;/a&gt;                                                           &lt;/div&gt;                                                         &lt;strong&gt;&lt;a href="http://community.crn.com/message/36565#36565"&gt;Re: Apollo 11 Moon Landing Delivered 40 Years Of Spin-Off Tech&lt;/a&gt;&lt;/strong&gt;                                                     &lt;/div&gt;                                                      &lt;div class="jive-thread-reply-message"&gt;                                                         &lt;!-- [DocumentBodyStart:13e48d0d-6662-44dd-b8a6-ead2a57ec4d8] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;The moon landings were faked. Cold War propaganda. Come on folks... We're supposed to be the tech experts here.&lt;/p&gt;&lt;p class="MsoNoSpacing" style="margin: 0in 0in 0pt;"&gt;&lt;span style="color: rgb(0, 0, 0);font-family:Calibri;font-size:12pt;"  &gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;!-- [DocumentBodyEnd:13e48d0d-6662-44dd-b8a6-ead2a57ec4d8] --&gt;                                                     &lt;/div&gt;                                                      &lt;!-- BEGIN content details --&gt;                                                     &lt;div class="jive-content-controls"&gt;                                                           &lt;a href="http://www.crn.com/user/clogin.jhtml?successLoginRedirect=/" donclick="jiveShowPostForm(36565); return false;" title="Reply to this message" class="jive-thread-reply-link"&gt;Reply&lt;/a&gt;                                                     &lt;/div&gt;                                                     &lt;!-- END content details--&gt;                                                 &lt;/div&gt;                                             &lt;/div&gt;                                         &lt;/div&gt;                                     &lt;/div&gt;                                 &lt;/div&gt;                                 &lt;!-- END reply --&gt;                                                                  &lt;!-- BEGIN reply --&gt;                                 &lt;div&gt;                                     &lt;div class="jive-thread-reply-indent-shadow"&gt;                                         &lt;div class="jive-thread-reply"&gt;                                             &lt;div class="jive-thread-reply-body"&gt;                                                 &lt;div class="jive-author"&gt;                                                         &lt;span class="jive-author-avatar-container"&gt;                                                             &lt;a href="http://community.crn.com/people/Miramichier"&gt;&lt;br /&gt;&lt;/a&gt;                                                         &lt;/span&gt;                                                         &lt;div class="jive-username-link-wrapper" style="text-align: center;"&gt;                                                             &lt;a href="http://community.crn.com/people/Miramichier"&gt;Miramichier&lt;/a&gt;                                                         &lt;/div&gt;                                                 &lt;/div&gt;                                                  &lt;div class="jive-thread-reply-body-container"&gt;                                                     &lt;div class="jive-thread-reply-subject"&gt;                                                          &lt;div class="jive-thread-reply-date"&gt;                                                               &lt;span&gt;Jul 22, 2009 5:57 PM&lt;/span&gt;                                                                 &lt;a href="http://community.crn.com/message/36565#36565" title="in response to: Jannatech2010"&gt;                                                                     &lt;img src="http://community.crn.com/images/up-10x10.gif" alt="" border="0" height="10" width="10" /&gt;                                                                 &lt;/a&gt; in response to: &lt;a href="http://community.crn.com/message/36565#36565" title="Go to message"&gt;Jannatech2010&lt;/a&gt;                                                           &lt;/div&gt;                                                         &lt;strong&gt;&lt;a href="http://community.crn.com/message/36566#36566"&gt;Re: Apollo 11 Moon Landing Delivered 40 Years Of Spin-Off Tech&lt;/a&gt;&lt;/strong&gt;                                                     &lt;/div&gt;                                                      &lt;div style="color: rgb(0, 153, 0);" class="jive-thread-reply-message"&gt;                                                         &lt;!-- [DocumentBodyStart:436f3bb8-5be5-4001-a0ea-5d1d0e3eb18d] --&gt;&lt;div class="jive-rendered-content"&gt;&lt;p&gt;Someone said "Two people can keep a secret -- if one of them is dead."&lt;/p&gt;&lt;p&gt;Erasing the memories of the 11,000 co-conspirators at NASA, the contractors, politicians and bureaucrats was my real and best technological achievement.&lt;/p&gt;&lt;p&gt;Keep the faith!&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-2175477029181967588?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/2175477029181967588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/2175477029181967588'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2009/07/about-apollo-11-moon-landing.html' title='About Apollo 11 Moon Landing'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-7484551902390027479</id><published>2008-08-07T16:36:00.000-07:00</published><updated>2008-08-07T16:41:14.703-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Herbert George'/><title type='text'>Herbert George Wells on the World Encyclopaedia (1936)</title><content type='html'>&lt;a href="http://blogoscoped.com/archive/2008-08-07-n65.html"&gt;&lt;/a&gt;&lt;p&gt;&lt;em&gt;The following excerpts are from a lecture by H.G. Wells given at the Royal Institution of Great Britain on November 20th, 1936 (“World Encyclopaedia”).&lt;/em&gt;&lt;/p&gt;   &lt;h4 style="font-style: italic;"&gt;The World Brain&lt;/h4&gt;  &lt;p style="font-style: italic;"&gt;“We want a reconditioned and more powerful Public Opinion. In a universal organization and clarification of knowledge and ideas, in a closer synthesis of university and educational activities, in the evocation, that is, of what I have here called a World Brain, operating by an enhanced educational system through the whole body of mankind, a World Brain which will replace our multitude of unco-ordinated ganglia, our powerless miscellany of universities, research institutions, literatures with a purpose, national education systems and the like”&lt;/p&gt;  &lt;p style="font-style: italic;"&gt;“We do not want dictators, we do not want oligarchic parties or class rule, we want a widespread world intelligence conscious of itself.”&lt;/p&gt;   &lt;h4 style="font-style: italic;"&gt;Assembling specialists&lt;/h4&gt;  &lt;p style="font-style: italic;"&gt;“A distinguished specialist is precious because of his cultivated gift. It does not follow at all that by the standards of all-round necessity he is a superior person. Indeed by the very fact of his specialization he may be less practised and competent than the average man.”&lt;/p&gt;  &lt;p style="font-style: italic;"&gt;“I think we should get the very gist of this problem if we could compare twelve miscellaneous men of science and special skill, with twelve unspecialized men taken – let us say – from the head clerk’s morning train to the city. We should probably find that for commonplace team-work and the ordinary demands and sudden urgencies of life, the second dozen was individually quite as good as, if not better than, the first dozen. In a burning hotel or cast away on a desert island they would probably do quite as well. And yet collectively they would be ill-informed and limited men; the whole dozen of them would have nothing much more to tell you than any one of them.”&lt;/p&gt;  &lt;p style="font-style: italic;"&gt;“On the other hand our dozen specialists would each have something distinctive to tell you ... The more you got them together the more they would signify.”&lt;/p&gt;   &lt;h4 style="font-style: italic;"&gt;The World Encyclopaedia&lt;/h4&gt;  &lt;p style="font-style: italic;"&gt;“I want to suggest that something – a new social organ, a new institution – which for a time I shall call &lt;em&gt;World Encyclopaedia&lt;/em&gt;, is the means whereby we can solve the problem of that jig-saw puzzle and bring all the scattered and ineffective mental wealth of our world into something like a common understanding”&lt;/p&gt;  &lt;p style="font-style: italic;"&gt;“I will take it first from the point of view of the ordinary educated citizen ... From his point of view the World Encyclopaedia would be a row of volumes in his own home or in some neighbouring house or in a convenient public library or in any school or college, and in this row of volumes he would, without any great toil or difficulty, find in clear understandable language, and kept up to date, the ruling concepts of our social order, the outlines and main particulars in all fields of knowledge, an exact and reasonably detailed picture of our universe, a general history of the world, and if by any chance he wanted to pursue a question into its ultimate detail, a trustworthy and complete system of reference to primary sources of knowledge. In fields where wide varieties of method and opinion existed, he would find, not casual summaries of opinions, but very carefully chosen and correlated statements and arguments.”&lt;/p&gt;  &lt;p style="font-style: italic;"&gt;“The modern World Encyclopaedia should consist of selections, extracts, quotations, very carefully assembled with the approval of outstanding authorities in each subject, carefully collated and edited and critically presented. It would not be a miscellany, but a concentration, a clarification and a synthesis.”&lt;/p&gt;   &lt;h4 style="font-style: italic;"&gt;The role of the World Encyclopaedia&lt;/h4&gt;  &lt;p style="font-style: italic;"&gt;“Every fresh mind should be brought into contact with its standing editorial organization. And on the other hand its content would be the standard source of material for the instructional side of school and college work, for the verification of facts and the testing of statements – everywhere in the world.”&lt;/p&gt;  &lt;p style="font-style: italic;"&gt;“It would do just what our scattered and disoriented intellectual organizations of today fall short of doing. It would hold the world together mentally.”&lt;/p&gt;   &lt;h4 style="font-style: italic;"&gt;Dealing with conflicting opinions&lt;/h4&gt;  &lt;p style="font-style: italic;"&gt;“How often do we see men misrepresenting each other in order to exaggerate a difference and secure the gratification of an argumentative victory! A World Encyclopaedia as I conceive it would bring together into close juxtaposition and under critical scrutiny many apparently conflicting systems of statement. It might act not merely as an assembly of fact and statement, but as an organ of adjustment and adjudication, a clearing house of misunderstandings; it would be deliberately a synthesis, and so act as a flux and a filter for a very great quantity of human misapprehension. It would &lt;em&gt;compel&lt;/em&gt; men to come to terms with one another.”&lt;/p&gt;   &lt;h4 style="font-style: italic;"&gt;Amendments&lt;/h4&gt;  &lt;p style="font-style: italic;"&gt;“And next let us take this World Encyclopaedia from the point of view of the specialist and the super-intellectual ... On the assumptions that the World Encyclopaedia is based on a world-wide organization he will be ... a corresponding associate of the Encyclopaedia organization. He will be able to criticize the presentation of his subject, to suggest amendments and re-statements. For a World Encyclopaedia that was kept alive and up to date by the frequent re-issue of its volumes, could be made the basis of much fundamental discussion and controversy.”&lt;/p&gt;   &lt;h4 style="font-style: italic;"&gt;The Encyclopaedia Society&lt;/h4&gt;  &lt;p style="font-style: italic;"&gt;“How can it be set going? How can it be organized and paid for?”&lt;/p&gt;  &lt;p style="font-style: italic;"&gt;“We want, shall I call it, an Encyclopaedia Society to ask for an Encyclopaedia and get as many people as possible asking for an Encyclopaedia. Directly that Society asks for an Encyclopaedia it will probably have to resort to precautionary measures against any enterprising publisher who may see in that demand a chance for selling some sort of vamped-up miscellany as the thing required”&lt;/p&gt;   &lt;h4 style="font-style: italic;"&gt;Citing is preferred over original writing&lt;/h4&gt;  &lt;p style="font-style: italic;"&gt;“I must repeat that for the purposes of a World Encyclopaedia probably we would not want much original writing. If a thing has been stated clearly and compactly once for all, why paraphrase it or ask some inferior hand to restate it? Our job may be rather to secure the use of copyrights, and induce leading exponents of this or that field of science or criticism to co-operate in the selection, condensation, expansion or simplification of what they have already said so well.”&lt;/p&gt;   &lt;h4 style="font-style: italic;"&gt;A world monopoly&lt;/h4&gt;  &lt;p style="font-style: italic;"&gt;“[T]his World Encyclopaedia as I conceive it, if only because it will have roped in the larger part of the original sources of exposition, discussion and information, will be in effect a world monopoly, and it will be able to levy and distribute direct and indirect revenue, on a scale quite beyond the resources of any private publishing enterprise.”&lt;/p&gt;   &lt;h4 style="font-style: italic;"&gt;Dangers of buying the movement&lt;/h4&gt;  &lt;p style="font-style: italic;"&gt;“[O]f course from the very start, various opinionated cults and propagandists will be doing their best to capture or buy the movement. Well, we mustn’t be captured or bought, and in particular our silence must not be bought or captured.”&lt;/p&gt;   &lt;h4 style="font-style: italic;"&gt;Dangers of gang forming&lt;/h4&gt;  &lt;p style="font-style: italic;"&gt;“And there will be a constant danger that some of the early promoters may feel and attempt to realize a sort of proprietorship in the organization, to make a group or a gang of it. But to recognize that danger is half-way to averting it.”&lt;/p&gt;   &lt;h4 style="font-style: italic;"&gt;The Encyclopaedia’s language&lt;/h4&gt;  &lt;p style="font-style: italic;"&gt;“I think that the main text should be in one single language, from which translations in whole or part could be made ... I do not think I am giving way to any patriotic bias when I suggest that unless we contemplate a polyglot publication ... &lt;em&gt;English&lt;/em&gt; because it has a wider range than German, a greater abundance and greater subtlety of expression than French and more precision than Russian, is the language in which the original text of a World Encyclopaedia ought to stand.”&lt;/p&gt;   &lt;h4 style="font-style: italic;"&gt;Spreading like a nervous network&lt;/h4&gt;  &lt;p style="font-style: italic;"&gt;“You see how such an Encyclopaedia organization could spread like a nervous network, a system of mental control about the globe, knitting all the intellectual workers of the world through a common interest and a common medium of expression into a more and more conscious co-operating unity and a growing sense of their own dignity, informing without pressure or propaganda, directing without tyranny.”&lt;/p&gt;  &lt;p style="font-style: italic;"&gt;“I believe that in some such way as I have sketched ... the mental forces now largely and regrettably scattered and immobilized in the universities, the learned societies, research institutions and technical workers of the world could be drawn together in a real directive world intelligence, and by that mere linking and implementing of what is known, human life as a whole could be made much surer, stronger, bolder and happier than it has ever been up to the present time.”&lt;/p&gt;   &lt;h4 style="font-style: italic;"&gt;The only hope&lt;/h4&gt;  &lt;p style="font-style: italic;"&gt;“Let me be &lt;em&gt;very&lt;/em&gt; clear upon one point.”&lt;/p&gt;  &lt;p style="font-style: italic;"&gt;“I am not saying that a World Encyclopaedia in itself solve any single one of the vast problems that must be solved if man is to escape from his present dangers and distresses and enter upon a more hopeful phase of history: what I am saying – and saying with the utmost conviction – is this, that without a World Encyclopaedia to hold men’s minds together in something like a common interpretation of reality, there is no hope whatever of anything but an accidental and transitory alleviation of any of our world troubles.”&lt;/p&gt;  &lt;p style="font-style: italic;"&gt;“Our species may yet end its strange eventful history as just the last, the cleverest of the great apes. The great ape that was clever – but not clever enough. It could escape from most things but not from its own mental confusion.”&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;I admire this lecture by Herbert George.&lt;br /&gt;&lt;br /&gt;When reading through this post, things come to my mind: the Internet, Wikipedia (and other wiki things), blog, Google search (page rank), G-Brain (?) and Social etc.&lt;br /&gt;&lt;br /&gt;We have been getting closer and closer to Herbert George's vision formed in 1936.&lt;br /&gt;&lt;br /&gt;The only thing I disagree with H.G. is about Encyclopaedia’s language. HG suggested an one-way street from English to others.&lt;br /&gt;&lt;br /&gt;Firstly, language is not so important in such vision, English is just a de facto standard of international communication, just like Latin in academic field 2000 years ago; secondly and more importantly, there are load of culture issues that can not be represented by foreign languages. Unless we want to have a unify culture of all mankind, and destroy diversification of cultures, language usage in this world brain is not going to be an one-way street.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When communications and interactions between individual in a society are getting richer and richer, the whole society is becoming more like a brain, and individuals are just like brain cells.&lt;br /&gt;&lt;br /&gt;Electronic communication and computing have speed up such processes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-7484551902390027479?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7484551902390027479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7484551902390027479'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/08/herbert-george-wells-on-world.html' title='Herbert George Wells on the World Encyclopaedia (1936)'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-3394479117290255176</id><published>2008-08-07T16:29:00.000-07:00</published><updated>2008-08-07T16:30:38.653-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><category scheme='http://www.blogger.com/atom/ns#' term='collective intelligence'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Make it simple</title><content type='html'>Google's guidelines of Web design are good for both machine and human reading.&lt;br /&gt;&lt;br /&gt;Remember, Google's business is based on collective intelligence. Only when a human reader can read your web site well, the machine can collect the intelligence. Overuses of javascript, flash and keywords surely confuse human and machine, and the content will be worthless to intelligence.&lt;br /&gt;&lt;br /&gt;Make it simple, make it navigable, and make it relevant.&lt;br /&gt;&lt;br /&gt;Am I a SEO expert? no, I barely create web pages through FrontPage and Expression,  and rarely use Java script and never use Flash. My pages of index.htm mostly appear in the first page of respective search results among 500,000 to 2000,000 items returned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-3394479117290255176?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/3394479117290255176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/3394479117290255176'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/08/make-it-simple.html' title='Make it simple'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-3767103907624654963</id><published>2008-07-17T18:51:00.000-07:00</published><updated>2008-07-17T22:58:26.004-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='open social'/><category scheme='http://www.blogger.com/atom/ns#' term='open graph'/><category scheme='http://www.blogger.com/atom/ns#' term='address book'/><category scheme='http://www.blogger.com/atom/ns#' term='xfn'/><title type='text'>Missing link in making Social Graph popular</title><content type='html'>The usefulness of social graph depends on how many people would&lt;br /&gt;publish their relationships with others. I observed XFN around 2 years&lt;br /&gt;ago, and nowadays XFN or open social still haven't yet got spotlight&lt;br /&gt;of popularity.&lt;br /&gt;&lt;br /&gt;If you would publish some of your relationships to the web, what would&lt;br /&gt;you do? hand-craft some XFN codes or go to http://gmpg.org/xfn/creator&lt;br /&gt;?&lt;br /&gt;&lt;br /&gt;Look a bit redundant.&lt;br /&gt;&lt;br /&gt;You already have your contact info stored in your address books on PC,&lt;br /&gt;Web, or mobile phone, why should you key-in the info again?&lt;br /&gt;&lt;br /&gt;Most address book programs in PC and Web support category/group, and&lt;br /&gt;some of the categories may represent relationships between you and the&lt;br /&gt;contacts. So basically you may have categories like:&lt;br /&gt;Colleague&lt;br /&gt;Friend&lt;br /&gt;Relative&lt;br /&gt;Acquaintance&lt;br /&gt;Business&lt;br /&gt;&lt;br /&gt;Obviously, it is a bit overkill to create categories like:&lt;br /&gt;Parent&lt;br /&gt;Spouse&lt;br /&gt;Children&lt;br /&gt;&lt;br /&gt;But you may put the contact info of your parent and children into&lt;br /&gt;category Relative.&lt;br /&gt;&lt;br /&gt;It is logical to create XFN tags from contact info of your address&lt;br /&gt;book.&lt;br /&gt;&lt;br /&gt;So the next step is to map categories into XFN profiles as defined at&lt;br /&gt;http://gmpg.org/xfn/11. For example, Colleague -&gt; colleague, Friend-&lt;br /&gt;&gt;friend, Relative -&gt; kin, Acquaintance and Business -&gt; acquaintance.&lt;br /&gt;&lt;br /&gt;And the next question is, does your favorite support such feature?&lt;br /&gt;&lt;br /&gt;MS Outlook? no, Gmail Contacts? no, Yahoo Address Book? no.&lt;br /&gt;&lt;br /&gt;Open Contacts? yes.&lt;br /&gt;&lt;br /&gt;Open Contacts does not really have a built-in function for such&lt;br /&gt;feature. However, because Open Contacts can export selected contacts&lt;br /&gt;with info of categories into XML, it is straightforward to transform&lt;br /&gt;the XML into XFN tags using XSLT. And this XSLT was developed. Please&lt;br /&gt;check&lt;br /&gt;http://www.fonlow.com/opencontacts/Developer/publish_selected_contacts_to_xfn.htm&lt;br /&gt;&lt;br /&gt;You may either use the offline XFN creator or your favorite XML tool&lt;br /&gt;to do transformation. By the way, as you might have different settings&lt;br /&gt;of categories, you might need to edit the XSLT file to change the&lt;br /&gt;mapping between categories and XFN profiles.&lt;br /&gt;&lt;br /&gt;If you want to publish selected contacts stored in MS Outlook, Outlook&lt;br /&gt;Express, Eudora, Mozilla Thunderbird and Vista Contacts etc., you may&lt;br /&gt;import/sync the contacts into Open Contacts first.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;References:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.sitepoint.com/article/social-networks-take-friends"&gt;Portable Social Networks: Take Your Friends with You&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.veen.com/jeff/archives/000512.html"&gt;Will you be my friend?&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-3767103907624654963?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/3767103907624654963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/3767103907624654963'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/07/missing-link-in-making-social-graph.html' title='Missing link in making Social Graph popular'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-6758642179033311946</id><published>2008-07-10T16:22:00.001-07:00</published><updated>2008-07-10T19:19:56.610-07:00</updated><title type='text'>Wikipedia Chinese Search in Firefox</title><content type='html'>After installing Firefox, there is a search box at the top right corner wired to different search engines such as Google, eBay and Wikipedia en etc.&lt;br /&gt;&lt;br /&gt;Firefox add-on for Wikipedia-en search has around 15 thousands weekly downloads. Surely searching directly in the search box of Firefox rather than in the Wikipedia home page is very popular.&lt;br /&gt;&lt;br /&gt;As I need to search Chinese as well, I wished to have a shortcut in the search box for Chinese.&lt;br /&gt;&lt;br /&gt;It was fairly easy to find out how the search plug-in was implemented. In the program folder of Firefox, there's a subdirectory called "searchplugins". There are XML files each of which defines meta info of a search engine. And the default one for Wikipedia is "wikipedia.xml".&lt;br /&gt;&lt;br /&gt;So the rest of implementing the plug-in for Wikipedia Chinese is quite straightforward: simply replace all references to Wikipedia English (en) with ones to Wikipedia Chinese (zh); and save the XML file as "wikipediazh.xml".&lt;br /&gt;&lt;br /&gt;Put "wikipediazh.xml" inside directory "searchplugins" (e.g. C:\Program Files\Mozilla Firefox\searchplugins). After restarting Firefox, you will get a shortucut in the search box for Wikipedia Chinese.&lt;br /&gt;&lt;br /&gt;I have made the XML here.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Aftermark&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I would say developing a new plug-in through studying "wikipedia.xml" is like hacking, and expecting the users to download the XML and copy to the Program Files directory is not so appropriate for many users who only know how to use a Web browser, without any literate skills of exploring the file systems of Windows. So, I would study the technical specification at&lt;br /&gt;&lt;ul&gt;&lt;li&gt;http://developer.mozilla.org/en/docs/Creating_OpenSearch_plugins_for_Firefox&lt;/li&gt;&lt;li&gt;http://developer.mozilla.org/en/docs/Creating_MozSearch_plugins&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;An one-click installation is made here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-6758642179033311946?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/6758642179033311946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/6758642179033311946'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/07/wikipedia-chinese-search-in-firefox.html' title='Wikipedia Chinese Search in Firefox'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-4866332914927362182</id><published>2008-06-16T17:59:00.000-07:00</published><updated>2010-03-09T18:05:16.334-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeGear'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='Borland'/><title type='text'>Defend Delphi or Leave It Sadly</title><content type='html'>Among current and former Delphi programmers, there were a lot discussions and bitter debates about Delphi's future. As a long time Delphi programmer from the age of Turbo Pascal/Borland C++, I would share a few viewpoints, but not to replicate some great views from the others as listed below:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/khen1234/archive/2006/01/23/516375.aspx"&gt;Goodbye, My Friend&lt;/a&gt; from Ken who was long time employee of Borland, now working in Microsoft.&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.devsource.com/msdev/content/the_future_of_delphi.html"&gt;The Future of Delphi&lt;/a&gt; with a lot comments from Delphi programmers from Delphi newsgroups rushed to defend Delphi.&lt;/li&gt;&lt;li&gt;&lt;a href="http://channel9.msdn.com/forums/Coffeehouse/402086-Borland-and-Delphi-Officially-Dead/" id="ctl00_MainPlaceHolder_EntryHeader_TitleLink" title="Permalink"&gt;Borland and Delphi Officially Dead&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Though since two years ago, I started most new projects using Visual Studio C#, I would still say a few good words about Delphi. Of course, this doesn't mean I would got back to Delphi unless CodeGear will make some breakthroughs or the software project is very small, say less than 2,000 lines.&lt;br /&gt;&lt;br /&gt;I would quote Harry Betamax's comment here:&lt;br /&gt;"&lt;span style="font-style: italic;"&gt;Whatever you do, talking about system project development. is based on your logic domain.. not based on Delphi or Visual Studio. Delphi / VB / just like weapon for hero... and the advantages from this weapon just should be effective on the right hand.. &lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;Not to defense Delphi or C#, but to illustrate the deep reasons of different view points of Delphi programmers.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Language features&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Some praised great language features of C#, and claimed old Delphi syntax is not so convenient. If you even did commercial programmings in more than 2 languages in last 5 years, you will see language feature is not so critical in medium projects larger than 50,000 lines of codes. With quality design, Delphi, C++, VB or C# can deliver quality products.&lt;br /&gt;&lt;br /&gt;Some said that in Delphi you have to declare a function header twice, firstly in the prototype section, and secondly in the implementation section, and the IDE shortcut to generate implementation section is just a hack. I would consider this is an advantage, rather than a burden of code navigation. Because this forced me to think about design carefully and design the interface (function headers and properties) in advance without considering the implementation in detail. If you always want to jump to the detail of implementation, this would of course be a burden. After all, as modern IDEs have provided structural view of classes being developed, this prototyping of interface is not so significant anymore.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Price&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes, indeed, Borland's development products have been more expensive than MS products.  However, what should concern you should be how fast you can deliver reliable products to customers, and the total cost of long term maintenance.  For certain kinds of projects, if Delphi can assist you to deliver products sooner, then you get paid back sooner. Time is money. If the money you gained could not support you to afford expensive Delphi, you should review your business model.&lt;br /&gt;&lt;br /&gt;By the way, sometimes whether to buy Delphi or VS is not decided by developers, but by the the customers. In some software development projects, the customers will own the source code and may have internal programmers to maintain the code after deployment, so the customers may need to own the development tools. From the point of view of the eagle eyes of cooperate accountants, VS will surely be more appealing, because VS is often free with MSDN subscription.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%; font-weight: bold;"&gt;Bugs in Delphi&lt;/span&gt;&lt;br /&gt;The long standing and famous ones are COM and Printing etc. Thousands of programmers complained about them in last 10 years, Borland had refused to fix them. This is really disappointing. Lack of Unicode support can be consider as a bug, more exactly, architectural bug.&lt;br /&gt;&lt;br /&gt;There are many bugs which could have workaround through using 3rd components like Jedi VCL or TurboPower etc. However, adding coupling to 3rd party product for replacing existing functions in VCL is clearly not desirable, though I did without much frustration.&lt;br /&gt;&lt;br /&gt;A workmate called Leo is a long standing guru of Windows programming and .NET programming. He alway criticized Borland for its attitude to improve conformation to Windows API conventions. He's indeed unsatisfied by the fact that most Delphi programmers have very little knowledges of Windows API and messaging, and he claimed these programmers were not doing Windows programming. However, the point is, the purpose of Delphi was to release programmers from remembering tons of Windows API calls and writing massive codes of doing simple things.  The wisdom of Delphi was RAD, to allow programmers to focus on building business logics and UI rapidly. Those bugs were not so significant in small and medium cooperate environments where every workstations run as power user, as these work stations need to run many other legacy programs which do not conform to Windows security models. In a team, you do need one or two guys like Leon who have in-depth knowledge of Windows and take care of critical technical details, and other guys focus on building business models and UI.&lt;br /&gt;&lt;br /&gt;But, of course, not conforming to Windows API conventions has downgraded Delphi from the legacy frame of world class product, moved itself out of Windows upgrading path which cooperates always followed. Delphi programs could now only be sitting in the ash of legacy products running in small and medium cooperates.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Development Life Cycle&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Even many Delphi critics in MS camp admitted that Delphi was well ahead of time in early days. In development life cycle,  its elegant IDE design provided great supports for code navigation and debugging.  However, as the focus of development was shifted more to planning, designing and testings, VS has been becoming more superior since the release of VS 2003.&lt;br /&gt;&lt;br /&gt;Personally I hate debugging, not like many other technicians treating debugging as technical challenges. I preferred more testings in advance, as I consider debugging is passive and negative, and testing is proactive and positive to productivities. Estimating the cost of testing is relatively easy, and the cost of debugging is unpredictable.&lt;br /&gt;&lt;br /&gt;VS provided much more and better means of organizing source codes, resources, testings and analysis. Such advantages become more significant in large projects involving team works.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Defensive Attitude of Die-hard Delphi Programmers&lt;/span&gt;&lt;br /&gt;I consider myself one of the die-hard Delphi programmers, though with less defensive attitude. I understand that many long time Delphi programmers enjoyed the good old days of Delphi programming, while Borland had consistently provided smooth migration path. And in many projects of similar size, Delphi programmers often delivered solutions sooner than VC and VB programmers could, in addition, with less gray hairs. Such privilege, I enjoyed too.&lt;br /&gt;&lt;br /&gt;Love can often make people be blind. In a defense statement made by a commentator in &lt;a href="http://blogs.devsource.com/msdev/content/the_future_of_delphi.html"&gt;The Future of Delphi,&lt;/a&gt; a guy cried out for the fate of CodeGear: "&lt;span style="font-style: italic;"&gt;You failed to mention the deal that CodeGear just signed with the Russian Education Agency for a MILLION licenses for CodeGear RAD Studio.&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;What's the point?&lt;br /&gt;&lt;br /&gt;Will Russian universities produced more Delphi programmers? Maybe. Will cooperates use Delphi because of great availability of Russian Delphi programmers? Not likely. The good old experience of Borland in 1980s won't be easily replicated in 2000s.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%; font-weight: bold;"&gt;My Shallow Experience with VS C#&lt;/span&gt;&lt;br /&gt;I started first commercial programming with VS C# 2003 in 2004, writing some ASP.NET components -- business models only. I took the job with great reluctance, as I considered the UI of VS 2003 was poor (I know Leon the guru of Windows programming would bitterly disagree) and the .NET library was lack of many basic classes I enjoyed in Delphi VCL, and the database access was poor. I even had a conclusion that VS.NET was only good for developing server side applications like ASP.NET, because .NET was designed to strengthen MS position on the server side.&lt;br /&gt;&lt;br /&gt;I understand now my feeling at that time was partly close to the fact of the truth. My mindset of using IDE was trained by Delphi.  However, Visual Studio 2005 with .NET 2 has broken my resistance against using VS products. C# language, IDE and the library had all gained great improvements, and I could find almost whatever I wanted and wished for.&lt;br /&gt;&lt;br /&gt;The father of Delphi, Anders, knew how to gain the hearts of Delphi programmers. I could see many of such changes were designed toward Delphi programmers.&lt;br /&gt;&lt;br /&gt;Delphi may be dying, however, the spirit of Delphi lives through VS C#. Thanks, Anders.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-4866332914927362182?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4866332914927362182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4866332914927362182'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/06/defend-delphi-or-leave-it-sadly.html' title='Defend Delphi or Leave It Sadly'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-7270590305095493421</id><published>2008-06-15T20:08:00.000-07:00</published><updated>2008-06-23T19:02:50.882-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='calendar'/><category scheme='http://www.blogger.com/atom/ns#' term='address book'/><category scheme='http://www.blogger.com/atom/ns#' term='contact management'/><category scheme='http://www.blogger.com/atom/ns#' term='birthday reminder'/><title type='text'>Birthday Reminder Programs</title><content type='html'>You may have a handful of buddies for whom birthdays you would celebrate yearly through sending gifts or greetings. If you use computer often, you would immediately want to get assistant from computer programs. So, there are actually quite a load of such programs around, free or commercial, they could be found easily through searching "Birthday Reminder" in Google search.&lt;br /&gt;&lt;br /&gt;They fall into two categories:&lt;br /&gt;1. Web service.&lt;br /&gt;2. Desktop program running on PC, Mac, PDA or mobile phone.&lt;br /&gt;&lt;br /&gt;Here's a list of popular programs of birthday reminder:&lt;br /&gt; &lt;ul&gt;&lt;li&gt;www.birthdayalarm.com&lt;/li&gt;&lt;li&gt;www.happybirthday.com&lt;/li&gt;&lt;li&gt;www.birthdaytime.com&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Mozilla Sunbird&lt;/li&gt;&lt;li&gt;MS Outlook&lt;/li&gt;&lt;li&gt;iCal&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.scheduleworld.com/tg/cal/day.jsp"&gt;Google Calendar&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.scheduleworld.com/tg/cal/day.jsp"&gt;ScheduleWorld.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://calendar.live.com/"&gt;Windows Live Calendar&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://addons.mozilla.org/en-US/thunderbird/addon/3680"&gt;Birthday Reminder::Thunderbird Addon&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.zhornsoftware.co.uk/bday/index.html"&gt;Birthday Reminder from Zhorn Software&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://cweiske.de/birthday3.htm"&gt;Birthday Reminder&lt;/a&gt; from  Christian Weiske&lt;/li&gt;&lt;li&gt;&lt;a href="http://widgets.yahoo.com/widgets/birthday-reminder-1"&gt;Birthday Reminder::Yahoo Widget&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://apps.facebook.com/birthday_calendar/calendar.php"&gt;Birthday Calendar::Facebook App&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;There are so many of them, you would ask which one to choose.&lt;br /&gt;&lt;br /&gt;First, you are going to ask yourself what you want and need.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Do you use computer programs only for reminding you about your buddies' birthdays, not anything else such as appointments?&lt;/li&gt;&lt;li&gt;Are you often online?&lt;/li&gt;&lt;li&gt; Do you have a cell phone?&lt;/li&gt;&lt;li&gt;Do you want to be reminded through popup, Emal or SMS?&lt;/li&gt;&lt;li&gt;Do you mind paying a small fee?&lt;/li&gt;&lt;li&gt;Do you use computer to store contact information?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; Actually, any calendar program can take care of the job of birthday reminding. A birthday reminder can be simply a whole day event plus an alarm in advance. However, if you don't use any calendar program to remind you about appointments and meetings etc., and just want to be reminded about birthday, a dedicated birthday reminder program might be more appealing to you.&lt;br /&gt;&lt;br /&gt;If you are often online, obviously an online service can be helpful in timely manner. In addition to alarms of popup, Email or SMS, some online services can even do gift sending for you. However, there might be some catches which I will discuss later.&lt;br /&gt;&lt;br /&gt;If you have a cell phone, SMS is very handy to notify you.  Such service generally can only be provided by an online service, such as Google Calendar and BirthdayAlarm.com.&lt;br /&gt;&lt;br /&gt;If you have already used computer (PC, PDA or online address book) to store contact info, it will be good that the birthday reminder program may get the birthday info from the address book program to save you from redundant keyboarding.&lt;br /&gt;&lt;br /&gt;Have you make up your mind for which ones to choose?&lt;br /&gt;&lt;br /&gt;...?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If not, I would pick up a few apparently popular ones to evaluate (excluding those on PDA and mobile phones).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;MS Outlook&lt;/span&gt;&lt;br /&gt;Pros:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Popular in Windows, de facto standard of personal information manager, available in most cooperate Windows PCs and at home. &lt;/li&gt;&lt;li&gt;The calendar function is very good.&lt;/li&gt;&lt;li&gt;Great sync features with PDA and cell phones.&lt;/li&gt;&lt;li&gt;There might be add-on programs that can generate birthday events from Contacts. I haven't found out.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Cons&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Searching calendar is poor.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Mozilla Sunbird&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pros:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Fast&lt;/li&gt;&lt;li&gt;The UI is elegant, though less luxury than MS Outlook's UI.&lt;/li&gt;&lt;li&gt;Available in Windows, Linux and Mac etc.&lt;/li&gt;&lt;li&gt;Portable through portable drives such as USB flash disk, with Portable Sunbird.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Searching calendar is excellent.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Cons:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If you consider close integration between address book and calendar is critical, Sunbird won't be a candidate.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;BirthdayAlarm.com&lt;/span&gt;&lt;br /&gt;This long standing online service is popular in North America.&lt;br /&gt;&lt;br /&gt;Pros:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Alarm through Email and SMS. (SMS is a paid service with an annual fee)&lt;/li&gt;&lt;li&gt;Gift sending.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Cons:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Need to spam to buddies for inputting birthday info for you, and implicit invitation for joining the BirthdayAlarm.com.&lt;/li&gt;&lt;li&gt;Does not support iCalendar import which should be the basic feature of any calendar program.&lt;/li&gt;&lt;li&gt;If your friend was born on 1984-02-29, BirthdayAlarm considers the birthday is on the 1st of March in a normal year. If you consider 28th is a more reasonable day to celebrate, you get a catch.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Birthday Calendar::Facebook App&lt;/span&gt;&lt;br /&gt;It was claimed there was 2 millions subscribers within the first month.&lt;br /&gt;&lt;br /&gt;Pros:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Close integration with Facebook, thus birthday info of your Facebook buddies will be available for reminding you.&lt;/li&gt;&lt;li&gt;Gift sending&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Cons:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If your social circle is not limited to Facebook community, this Facebook app is not so appealing.&lt;/li&gt;&lt;li&gt;Though the app may import CSV from MS Outlook contacts, but if the day format is not US date format, the program will fail to recognize the date info of the birthday field. And because the CSV has to be in DOS CSV format, non-English characters will be screwed up. You don't want your Spanish friends to get greetings from you with wrong spelling of their names.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Google Calendar&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pros:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Elegant UI and fast, among the best online calendar programs.&lt;/li&gt;&lt;li&gt;Alarm through popup, Email and SMS. Best of all, the SMS notification service is basically FREE, as long as Google provides such service in your country.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Cons:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The searching calendar function is not so stable, sometimes it endless keeps retrieving info from the web. I am not sure whether this is a temp bug, or long standing problem.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The winners are:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;Mozilla Sunbird&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;MS Outlook&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:130%;"&gt;Google Calendar&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Companion Tools &lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gcaldaemon.sourceforge.net/index.html"&gt;GCALDaemon&lt;/a&gt; offers two-way synchronization between Google Calendar and various iCalendar compatible calendar applications. GCALDaemon is primarily designed as a calendar synchronizer but it can also be used as a Gmail notifier, Address Book importer, Gmail terminal and RSS feed converter.&lt;br /&gt;&lt;br /&gt;&lt;a href="https://addons.mozilla.org/en-US/thunderbird/addon/4631"&gt;Sunbird Addon for Google Calendar &lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.google.com/support/calendar/bin/answer.py?answer=89955"&gt;&lt;br /&gt;Google Calendar Sync for MS Outlook&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-7270590305095493421?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7270590305095493421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7270590305095493421'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/06/birthday-reminder-programs.html' title='Birthday Reminder Programs'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-490485386306936536</id><published>2008-05-25T21:21:00.000-07:00</published><updated>2008-05-25T22:58:23.501-07:00</updated><title type='text'>There's no reliable centralized storage for your contact info</title><content type='html'>If you only use contact info in MS Outlook, mobile phone and MSN, then congratulation, you don't have much troubles of accessing all info related to your contacts.&lt;br /&gt;&lt;br /&gt;For many people, the info related to their contacts spread through everywhere:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Business contacts in company's Exchange server&lt;/li&gt;&lt;li&gt;business Emails, calendar and tasks in company's Exchange server&lt;/li&gt;&lt;li&gt;Personal contacts in Mozilla Thunderbird&lt;/li&gt;&lt;li&gt;Personal emails in Thunderbird&lt;/li&gt;&lt;li&gt;Personal contacts in Thunderbird&lt;/li&gt;&lt;li&gt;Business contacts and personal contacts in PDA/smart phone.&lt;/li&gt;&lt;li&gt;Instant messenger conversations through MSN, Yahoo Messenger, Gtalk and ICQ etc.&lt;/li&gt;&lt;li&gt;Online social networking like Facebook, MySpace and Twitter etc.&lt;/li&gt;&lt;li&gt;Blogs&lt;/li&gt;&lt;li&gt;...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;There exist solutions to aggregate these info and use the info. Typical solutions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;GrandCentral&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Social_network_aggregation"&gt;Social Network Aggregation&lt;/a&gt; like FriendFeed&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I am not sure whether there is an aggregation service that aggregate my Email conversations in company's Exchange, my personal pop3 Email account and my Gmail. I would wish similar service occurred in MSN, ICQ and GTalk etc., since I keep multiple online identities for different online social circles, as many of you would. And I sometime just want to have a centralized place to review all conversations in different online social circles.&lt;br /&gt;&lt;br /&gt;In addition, we haven't yet dump fax machines. It would be good all fax contents can be stored and indexed in computer.&lt;br /&gt;&lt;br /&gt;There are mature solutions for business world, however, what about solutions taking both private world and business world?&lt;br /&gt;&lt;br /&gt;Is it technically hard to aggregate all information related to your contacts? I think you would have no doubt that FBI or CIA can establish the whole aggregation of all your communication activities, if you are lucky enough in their watch list. Unfortunately they don't have enough man power and computing power to do the service for everyone, and they won't let the owner of the communication activities to review the aggregation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-490485386306936536?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/490485386306936536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/490485386306936536'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/05/theres-no-reliable-centralized-storage.html' title='There&apos;s no reliable centralized storage for your contact info'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-4557993287752458570</id><published>2008-05-06T20:50:00.000-07:00</published><updated>2008-05-06T21:40:57.045-07:00</updated><title type='text'>Synchronize Open Contacts with Mobile Devices</title><content type='html'>Funambol is a web-base synchronization solution for PIM  information including contacts, calendar, tasks and Emails etc. The beauty of Funambol is, you may use either an established Funambol Web service, and a locally installed Funambol server if you don't want to publish contact info of your buddies to the Web.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.fonlow.com/opencontacts/SyncMLClient/images/BigPicture.gif"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://www.fonlow.com/opencontacts/SyncMLClient/images/BigPicture.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There were 2 public Funambol Web services used for testing SyncML Client for Open Contacts, one is &lt;a href="http://www.scheduleworld.com"&gt;Schedule World&lt;/a&gt;, and the other is &lt;a href="http://my.funambol.com"&gt;My Funambol&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;While the user interfaces of My Funambol was designed for mobile devices, the web service can interact well with programs running on PC conforming SyncML, such as Funambol Outlook Plug-in, and &lt;a href="http://www.fonlow.com/opencontacts/SyncMLClient/"&gt;SyncML Client for Open Contacts&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;After you install &lt;a href="http://www.fonlow.com/opencontacts"&gt;Open Contacts&lt;/a&gt; and the SyncML Client, you may change the preferences of the SyncML Client as following:&lt;br /&gt;&lt;br /&gt;Server URL : http://my.funambol.com/sync&lt;br /&gt;User: Your login name in My Funambol&lt;br /&gt;Password: Respective password&lt;br /&gt;&lt;br /&gt;Please test these Web services yourself to determine which one to use.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-4557993287752458570?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4557993287752458570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4557993287752458570'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/05/synchronize-open-contacts-with-mobile.html' title='Synchronize Open Contacts with Mobile Devices'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-2955204358060369204</id><published>2008-04-21T17:47:00.000-07:00</published><updated>2008-04-21T17:56:41.359-07:00</updated><title type='text'>First Hand Experience with Free Encyclopedia Britannica</title><content type='html'>Referencing to Wikipedia in blogs is popular. &lt;a href="http://en.wikipedia.org/wiki/Encyclop%C3%A6dia_Britannica"&gt;Britannica&lt;/a&gt; is trying to make a offer to blogger. There are mix of critics and praises around. Let me have a look how such free offer will go. If you click on this reference to &lt;a href="http://www.britannica.com/EBchecked/topic/186618/Encyclopaedia-Britannica"&gt;Encyclopædia Britannica&lt;/a&gt; at Britannica Online, hopefully you will see the details without blocking. Please bear in mind, as the site is implemented using Flash, it performs slower than Wikipedia.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-2955204358060369204?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/2955204358060369204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/2955204358060369204'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/04/first-hand-experience-with-free.html' title='First Hand Experience with Free Encyclopedia Britannica'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-7301260455830860730</id><published>2008-04-20T23:04:00.001-07:00</published><updated>2008-04-20T23:06:20.231-07:00</updated><title type='text'>Bowing to CCP won't necessarily benefit you</title><content type='html'>Though Google argued that it has tried to make more info available to people living in strict censorship countries like PR China, however, such stand actually and effectively helping the communism party to do propaganda (as seen in Different ways of bowing to CCP &lt;a href="http://webandlife.blogspot.com/2008/03/different-ways-of-bowing-to-ccp.html"&gt;webandlife.blogspot.com/2008/0 ...&lt;/a&gt;), and does not help its own competition against Baidu.com. Because Baidu has aggressive pro-active censorship officially approved by the communism party, it can search and present more info than Google can within the territory of PRC, even though Google has much better algorithms and machine farms.&lt;br /&gt;&lt;br /&gt;With currently stand and mindset, Google simply can not win Baidu even for cases of searching technology terms in Chinese.&lt;br /&gt;&lt;br /&gt;Google need people who understand the psychology of Chinese Communism Party to make marketing strategy and fine tune the technologies to adapt the hostile environment in PRC.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-7301260455830860730?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7301260455830860730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7301260455830860730'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/04/bowing-to-ccp-wont-necessarily-benefit.html' title='Bowing to CCP won&apos;t necessarily benefit you'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-7153373508640083944</id><published>2008-04-20T22:53:00.000-07:00</published><updated>2008-04-20T23:00:38.324-07:00</updated><title type='text'>What is Search Engine Market Shares?</title><content type='html'>I read a post about &lt;a href="http://blogoscoped.com/archive/2008-04-14.html#n18"&gt;Search Engine Market Shares in Russia&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;ComScore &lt;/span&gt;&lt;a style="font-style: italic;" href="http://www.comscore.com/method/method.asp"&gt;recruits&lt;/a&gt;&lt;span style="font-style: italic;"&gt; participants for their stats by a package including security software and sweepstakes prizes, an offer which e.g. may or may not be as attractive to tech geeks.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I am not a Russian. However, I think the ComScore's methodology for gathering the statistics was expensive and not conventional.&lt;br /&gt;&lt;br /&gt;ComScore claimed "comScore determines the size and characteristics of the total online population via a continuous survey spanning tens of thousands of persons selected randomly during the course of a year. Respondents are asked a variety of questions about their Internet use, as well as descriptive information about themselves and their households."&lt;br /&gt;&lt;br /&gt;Who got recruited? Government officers? business people? White collars?&lt;br /&gt;There are so many groups of people would simply ignore such recruitment.&lt;br /&gt;&lt;br /&gt;ComScore's methodology may be good enough for traditional marketing research for traditional products, however, for researching search market shares, the single most important factor is how many queries to each search engine, and there is a conventional way to gather the data: Almost all search queries go through ISP, the researcher may just pay a few ISPs to aggregate the search queries and get the distributions.&lt;br /&gt;&lt;br /&gt;If ComScore did not do so, I would say the data presented by it is quite misleading.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-7153373508640083944?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7153373508640083944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7153373508640083944'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/04/what-is-search-engine-market-shares.html' title='What is Search Engine Market Shares?'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-335522134199940622</id><published>2008-04-06T21:39:00.000-07:00</published><updated>2008-04-06T21:41:25.091-07:00</updated><title type='text'>China is testing limited access to Wikipedia</title><content type='html'>People have been talking about "China Allows Access to English Wikipedia" at http://yro.slashdot.org/article.pl?sid=08/04/06/1643223&lt;br /&gt;&lt;br /&gt;The communism party has been testing the partial lifting, mostly open to western visitors during the Olympic Game. Because the People Republic of China did promise the openness of the internet access to the western media, PRC will try best doing so for western media only, and this does not mean fully lifting the block to Wikipedia and alike.&lt;br /&gt;&lt;br /&gt;A possible implementation may will be like this:&lt;br /&gt;* The media center of the Game will has full access to the internet.&lt;br /&gt;* Other internet access points given to the western media like those in hotels may have 100% to 90%&lt;br /&gt;* Other access points in Beijing will have many blocked popular site open for the period of the Game.&lt;br /&gt;* In most parts of China, the censorship and the internet terror activities by the communism party may remain almost the same.&lt;br /&gt;&lt;br /&gt;So, PRC can keep the promise for the period, while keeping the censorship to most Chinese in the mainland China.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-335522134199940622?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/335522134199940622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/335522134199940622'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/04/china-is-testing-limited-access-to.html' title='China is testing limited access to Wikipedia'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-6945705872630206147</id><published>2008-03-25T21:32:00.000-07:00</published><updated>2008-03-25T21:35:06.930-07:00</updated><title type='text'>Rewrite or Refactor</title><content type='html'>&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; color: black;"&gt;In a litter I wrote to a workmate about the future development plan for a legacy product, I present some viewpoints as following.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; color: black;"&gt;&lt;o:p&gt; ==================&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; color: black;"&gt;&lt;o:p&gt;Hi John&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; color: black;"&gt;Among recent discussions about the direction of WinVictory, having things redesigned and rewritten was never discussed. I know redeveloping anything is risky, or at least sound risky to management and accounting. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 6pt; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; color: black;"&gt;&lt;o:p&gt; &lt;/o:p&gt;There are some industry statistics about redeveloping legacy applications, though I don't quite remember the source. It is not uncommon. A fresh example I just got is about Google Earth formerly known Keyhole. According to the Avibar, the co-founder of Keyhole, the code base has been rewritten several times. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 6pt; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; color: black;"&gt;http://www.realityprime.com/articles/how-google-earth-really-works&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 6pt; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; color: black;"&gt;I don't believe the programmers in Keyhole or Google have bad habit of software engineering, I tend to think they had to rewrite codes because the requirements got changed dramatically. The founders might not ever dream that the program can reach such large audiences of different levels of users. Fast expansion of broadband, evolution of graphic cards, porting things to Linux and different business models might not be in the early stages of requirement analysis and planning, and refactoring legacy codes may not necessarily always be able to adapt new requirements and take advantages of new conditions. Well written codes do not necessarily have unlimited maintainability, flexibility and extensibility. They don't need to be ashamed of, as no one in Keyhole could predict such changes. This is my interpretation for why they rewrote the code base.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 6pt; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; color: black;"&gt;&lt;o:p&gt; &lt;/o:p&gt;Quoted from the book Code Complete (Chapter 3, Measure Twice, Cut Once: Upstream Prerequisites). As with building construction, much of the success of failure of the project has already been determined before construction begins. If the foundation hasn't been laid well or the planning is inadequate, the best you can do during construction is to keep damage to a minimum.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 6pt; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; color: black;"&gt;&lt;o:p&gt; &lt;/o:p&gt;Sometimes I had to admire previous programmers having tons of memory to remember things and capacity to handle such complicated codes.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 6pt; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; color: black;"&gt;&lt;o:p&gt; &lt;/o:p&gt;Now the construction of WinVictory has long been "finished", and what's the best we can do for maintenance? Or upgrading? Or migrating?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 6pt; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; color: black;"&gt;&lt;o:p&gt; &lt;/o:p&gt;No matter which direction to go for WinVictory, using Win32 or dot Net assembly, the job is still maintenance, more exactly hacking codes which is what we have been doing in the last few years. I really have low expectation on any technical attempts of moving forward or backward. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 6pt; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; color: black;"&gt;&lt;o:p&gt; &lt;/o:p&gt;Rewriting (read legacy codes and user manuals to guess requirement) to get "WinVictory Vista" is risky regarding to costs but predictable, and migrating codes forward or backward sound not so risky to costs, but may likely be unpredictable. Almost all industry statistics showed maintenance is much more expensive in average than building.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 6pt; line-height: normal;"&gt;&lt;span style="font-size: 12pt; font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; color: black;"&gt;&lt;o:p&gt; &lt;/o:p&gt;After all, it is about vision and direction which are not clear.&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Helv&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: black;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p class="MsoNormal" style="margin-bottom: 6pt; line-height: normal;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Helv&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: black;"&gt;&lt;o:p&gt; &lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 6pt; line-height: normal;"&gt;&lt;span style="font-size: 10pt; font-family: &amp;quot;Helv&amp;quot;,&amp;quot;sans-serif&amp;quot;; color: black;"&gt;Regards&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  Andy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-6945705872630206147?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/6945705872630206147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/6945705872630206147'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/03/rewrite-or-refactor.html' title='Rewrite or Refactor'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-9070180654539780495</id><published>2008-03-16T20:49:00.000-07:00</published><updated>2008-03-16T20:59:00.187-07:00</updated><title type='text'>Not to see any depiction of Prophet Muhamad in 2-way street</title><content type='html'>&lt;p style="font-style: italic;"&gt;According to the &lt;a href="http://www.iht.com/articles/2008/02/05/technology/wiki.php"&gt;International Herald Tribune&lt;/a&gt;, the depiction of Prophet Muhammad in &lt;a href="http://en.wikipedia.org/wiki/Muhammad"&gt;Wikipedia’s article on the subject&lt;/a&gt; has triggered an online petition. The goal of the petition, which according to IHT collected more than 80,000 “signatures” (including many anonymous ones), is to remove the image of Muhammad citing a “prohibition in Islam on images of people.” IHT quotes from an FAQ explaining Wikipedia’s “polite but firm” refusal to remove the image:&lt;/p&gt;  &lt;p style="font-style: italic;"&gt;&lt;q&gt;Since Wikipedia is an encyclopedia with the goal of representing all topics from a neutral point of view, Wikipedia is not censored for the benefit of any particular group.&lt;/q&gt;&lt;/p&gt;  &lt;p style="font-style: italic;"&gt;Currently, the Wikipedia page in question is protected from editing, meaning, according to Wikipedia, “editing on the page has been restricted to either registered users or administrators.” (from &lt;a href="http://blogoscoped.com/archive/2008-02-07-n47.html"&gt;Blogoscoped.com&lt;/a&gt;)&lt;br /&gt;&lt;/p&gt;If I want to make a conclusion, I would like to make something similar to what Mr Tue Abrahamsen did:&lt;br /&gt;=================&lt;br /&gt;"your liberty ends at the point the liberty of others start." (raised by Bilal who insisting on removing the images, though he was not the one who first made that statement)&lt;br /&gt;&lt;br /&gt;Your liberty on not wanting the prophet drawn, ends where my liberty of expression starts.&lt;br /&gt;&lt;br /&gt;This is a two-way street; it is important for both sides to accept that they may have to make compromises.&lt;br /&gt;================&lt;br /&gt;I can't agree more.&lt;br /&gt;&lt;br /&gt;Anyway, I would like to provide an evidence of existing practice. In Australia, the aboriginal people have religion faith not to draw or view the images of deceased persons (dead ancestors). So the television will often warn "Aboriginal viewers attention, the follow program contains the images of deceased persons, blahbla...". I guess the aboriginal viewers will just turn the eyes away. As aboriginal people is an important part of Australian population. I think this a great compromise.&lt;br /&gt;&lt;br /&gt;However, it is obviously not reasonable to require television in UK to do the same thing because there might be aboriginal people visiting or living there. No compromised solution can possibly satisfy everybody.&lt;br /&gt;&lt;br /&gt;Backing to the subject about images of Muhammad, as Muslim people are important parts of many modern societies, I think they may deserve such compromised solution: On the top of a wiki page which contain images of Muhammad, there is a warning, the following contents contain blahblabla ... please press this button...".&lt;br /&gt;&lt;br /&gt;Many people, including myself, consider this is also a kind of censorship, since the admin editors of Wikipedia will have to censor the contents first for any page that contain the images of Muhammad. This involves moving the line of editing to introduce more censorship, such moving is always difficult. Maybe one day, the editors may loose the line a little bit to make such compromised solution to adapt viewers from the fast growing Muslim population.&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-9070180654539780495?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/9070180654539780495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/9070180654539780495'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/03/not-to-see-any-depiction-of-prophet.html' title='Not to see any depiction of Prophet Muhamad in 2-way street'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-8444150562485242893</id><published>2008-03-16T19:23:00.000-07:00</published><updated>2008-03-16T19:27:36.881-07:00</updated><title type='text'>Different ways of bowing to CCP</title><content type='html'>&lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-AU"&gt;May be this is not news, however, it might explain why Google and Yahoo were forced to bow to Chinese Communism Party (CCP) which rules the mainland China known as People Republic of China (PRC).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-AU"&gt;I searched in the following search sites hosted in the mainland China:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-AU"&gt;&lt;a href="http://www.sohu.com.cn/"&gt;www.sohu.com.cn&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-AU"&gt;&lt;a href="http://www.yahoo.com.cn/"&gt;www.yahoo.com.cn&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-AU"&gt;&lt;a href="http://www.google.com.cn/"&gt;www.google.com.cn&lt;/a&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="" lang="EN-AU"&gt;with the keyword “&lt;/span&gt;&lt;span style="font-family: SimSun;" lang="ZH-CN"&gt;亚洲周&lt;/span&gt;&lt;span style="font-family: SimSun;" lang="ZH-CN"&gt;刊&lt;/span&gt;&lt;span style="font-family: SimSun;" lang="EN-AU"&gt;”(the name of a weekly magazine from MingPao, at yzzk.com), the sohu and yahoo returned error page right away, indicating that the Web servers rejected the request. And you can not use the search engine anymore with any keyword, apparently your web connection is blocked by the search engines of yahoo and sohu.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family: SimSun;" lang="EN-AU"&gt;Google.cn did return results, indicating many web pages hosted in PRC do contain the forbidden keyword. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family: SimSun;" lang="EN-AU"&gt;Obviously Sohu owned by PRC residents and Yahoo owned by US citizens rejected serving those forbidden keywords appointed by CCP. However, Yahoo has clearly insulted those Chinese people living outside PRC, who need to search Chinese keywords in Yahoo with Simplified Chinese.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family: SimSun;" lang="EN-AU"&gt;Though Google also bows to CCP, however, the service did not look so stupid and rude by simply rejecting the search query. Google.cn shows filtered results. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family: SimSun;" lang="EN-AU"&gt;Please note, that a web page contains forbidden keywords, does not mean its content should be forbidden by CCP. For example, an article contains keyword “Fa Lunn Gong” actually criticizes Fa Lunn Gong, such article will be loved by CCP, however, if the article is not hosted in an website with official censorship in place, the article may be reached by People living in PRC, but not by queries outside PRC. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family: SimSun;" lang="EN-AU"&gt;It is known that all web queries to PRC websites will be routed to a central hub, and all contents out will be scanned by the info greatwall. Further studies revealed that, those web sites (like Sina.com, XinHuaNewsNet.com, China.com, Sohu.com) with formal censorship can be retrieved even if the web pages contain forbidden keywords, and those web pages hosted by small web sites will be blocked. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family: SimSun;" lang="EN-AU"&gt;That means, a web spider hosted outside PRC can not crawl through web pages hosted in the main China if the web pages contains forbidden passwords and the web site is not officially approved by CCP with proper censorship in place.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family: SimSun;" lang="EN-AU"&gt;When you use Google.com to search forbidden keywords, while the query returns more results including many outside PRC, however, those web pages hosted by smaller web sites in PRC will not be included, as Google.com hosted outside PRC can not crawl the content. Though in theory that Google.cn can feed the results to Google.com through private channels, however, people outside PRC still can not access those contents because of the info great wall.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family: SimSun;" lang="EN-AU"&gt;With tens of thousands of forbidden keywords appointed by CCP, large amount of web contents can not be indexed by search engine outsides the mainland China. So, Google had to place machines inside the boarder of PRC, and bow to CCP.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family: SimSun;" lang="EN-AU"&gt;Through this way, those websites with formal censorship in place will be exposed more by search engines. And CCP wills will get better propaganda.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family: SimSun;" lang="EN-AU"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family: SimSun;" lang="EN-AU"&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-8444150562485242893?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/8444150562485242893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/8444150562485242893'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/03/different-ways-of-bowing-to-ccp.html' title='Different ways of bowing to CCP'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-5638435690708394953</id><published>2008-03-09T20:57:00.001-07:00</published><updated>2008-03-09T21:16:43.480-07:00</updated><title type='text'>Please write down your PIN</title><content type='html'>The following is a screen shot from an information system.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_0Ec3HWOLHjk/R9Sx98OctrI/AAAAAAAAAD8/sPlnvwY4bBk/s1600-h/pin.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_0Ec3HWOLHjk/R9Sx98OctrI/AAAAAAAAAD8/sPlnvwY4bBk/s320/pin.jpg" alt="" id="BLOGGER_PHOTO_ID_5175957549452408498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If this is an ATM application or phone business application, it is fine to have digit only password scheme like PIN, because of the restraints of the keypads. However, why not allow starting with zero?&lt;br /&gt;&lt;br /&gt;0123456 as integer is the same value as 123456.  I would suspect the programmer stored the password as integer, as the programmer asked not to have PIN started with zero.&lt;br /&gt;&lt;br /&gt;The authentication of this info system may violate two security principle:&lt;br /&gt;1. Don't store password in the authentication server. Store hash instead.&lt;br /&gt;2. Ask customer NOT to write down PIN.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-5638435690708394953?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/5638435690708394953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/5638435690708394953'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/03/please-write-down-your-pin.html' title='Please write down your PIN'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_0Ec3HWOLHjk/R9Sx98OctrI/AAAAAAAAAD8/sPlnvwY4bBk/s72-c/pin.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-3706764132505030454</id><published>2008-02-27T21:20:00.000-08:00</published><updated>2008-02-27T21:34:48.558-08:00</updated><title type='text'>Good Old Days of OSs</title><content type='html'>I happened to visit a web site with screen shots of almost every operating systems in the market in last 2 decades.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.guidebookgallery.org/screenshots"&gt;Graphical User Interface Gallery&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This really brought my memory back to the good old days when the markets of PC and software quickly expanded. I got so excited for every pieces of high tech computing gadgets I could ever see.&lt;br /&gt;&lt;br /&gt;Who care these artifacts of old high tech? Especially when we are using more and more cross-OS web applications?&lt;br /&gt;&lt;br /&gt;If you are old enough to have experiences of touching Apple II, you might be interested in going back for a while.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-3706764132505030454?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/3706764132505030454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/3706764132505030454'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/02/good-old-days-of-oss.html' title='Good Old Days of OSs'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-4591953787431468633</id><published>2008-02-26T17:41:00.000-08:00</published><updated>2008-03-07T13:17:42.257-08:00</updated><title type='text'>Evolution of address book programs</title><content type='html'>Most business information management systems has address book functions and this article discussed only address book programs used by individuals or small businesses.&lt;br /&gt;&lt;br /&gt;Before computer was invented, people used paper address book to record contact info.&lt;br /&gt;&lt;br /&gt;It is natural to store contact info in electronically, as you can easily edit, print and copy.&lt;br /&gt;&lt;br /&gt;What is the simplest address book program?&lt;br /&gt;&lt;br /&gt;Obviously, it was a text file plug any text editor. You key in something like&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;Andy Smith&lt;br /&gt;Tel: 32434233&lt;br /&gt;Fax: 23434339&lt;br /&gt;Email: andys@somewhere.com&lt;br /&gt;&lt;br /&gt;Betta Long&lt;br /&gt;Tel: 32432432423&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I remember in the old days, back to around 30 years ago, people did maintain a text document with contact info of classmate, and print paper address books for every classmates departing.&lt;br /&gt;&lt;br /&gt;I would call this &lt;span style="font-weight: bold;"&gt;Level 1 address book&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Pros:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Simple. Require very little computer skill.&lt;/li&gt;&lt;li&gt;Cross platform. Most computer systems handle text file.&lt;/li&gt;&lt;li&gt;Can use the built-in search features of text editors.&lt;/li&gt;&lt;/ol&gt;Cons:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;No sorting.&lt;/li&gt;&lt;li&gt;Require repeating typing labels.&lt;/li&gt;&lt;li&gt;No interaction with other applications, so I have to do copy/paste all the time.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Regarding to con 2, I can actually copy and paste a set of labels. For example, I can also have a few lines of labels at the end of the text file.&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;Tel:&lt;br /&gt;Fax:&lt;br /&gt;Email:&lt;br /&gt;Address:&lt;br /&gt;Birthday:&lt;br /&gt;Hobby:&lt;br /&gt;Notes:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Every time I add a new contact to the text file, after typing the contact name, I would copy and paste these lines, and fill in content beside each label.&lt;br /&gt;&lt;br /&gt;When electronic spreadsheet like Lotus123 was invented, it is natural to store contact info in a spreadsheet, utilizing the built-in features of sorting, input constraints and formatting etc.&lt;br /&gt;&lt;br /&gt;I would call such twisted spreadsheet &lt;span style="font-weight: bold;"&gt;Level 2 address book&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Pros:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Simple. Require basic skills of using a spreadsheet program.&lt;/li&gt;&lt;li&gt;Compact. Contact info is well presented in a row and column table format.&lt;/li&gt;&lt;li&gt;Sorting is built in.&lt;/li&gt;&lt;li&gt;Input constraints to reduce human error.&lt;/li&gt;&lt;li&gt;Print in different formats.&lt;/li&gt;&lt;li&gt;Mail merge.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Cons:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Need a lot copy/paste operations to use contact info with other applications.&lt;/li&gt;&lt;/ol&gt;Both level 1 address books and level 2 address books are simply twisting existing general purpose applications like text editors and spreadsheet programs. They are both simple and easy to use, good enough for small amount of contact info, say, a few dozens contacts. Everybody with basic computing skills can create such address books.&lt;br /&gt;&lt;br /&gt;If you have hundreds or thousands of contacts, you need better category system, navigation and search etc. This was why dedicated address book programs/functions were developed since early day of PC.&lt;br /&gt;&lt;br /&gt;Developing an address book program was probably one of the easy assignments any uni students might have ever done.  And there are quite a few popular ones in use.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mac Address Book&lt;/li&gt;&lt;li&gt;Windows Address Book&lt;/li&gt;&lt;li&gt;Contacts of MS Outlook&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;A typical address book program like MS Outlook contains the following UI components:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Detail view and edit window&lt;/li&gt;&lt;li&gt;Contact list&lt;/li&gt;&lt;li&gt;Category and group system.&lt;/li&gt;&lt;li&gt;Search&lt;/li&gt;&lt;/ul&gt;More or less, an address book enable the users to use a piece of contact info to create Email item, dial or browse a web link etc.&lt;br /&gt;&lt;br /&gt;After years of evolution, MS Outlook had become de facto standard of designing address book programs or PIM programs. I would call these &lt;span style="font-weight: bold;"&gt;Level 3 address book&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Pros:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Support quick and unified inputs.&lt;/li&gt;&lt;li&gt;Easy to navigate and search&lt;/li&gt;&lt;li&gt;Well interact with other applications like Email, telephony and web browser etc.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Cons:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;When supported data fields grow, the user interfaces will become crowded.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;When web mail like Hotmail appeared around 10 years ago, web base address book was becoming popular, but playing insignificant component of Web mail programs, until social web applications like MySpace appeared. In social web applications, web functions are very much surrounding contact information.&lt;br /&gt;&lt;br /&gt;I would call web base address book as &lt;span style="font-weight: bold;"&gt;Level 4 address book.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;Pros:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Accessible through any computer with Web connection.&lt;/li&gt;&lt;li&gt;Well interact with other web applications like Web mail and social web applications.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Cons:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Accessible with internet connection only. But nowadays most westerners with PC have internet connection most of the time.&lt;/li&gt;&lt;li&gt;Privacy issues may be a concern.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Simply replicating contact info in electronic media through local PC applications or the Web is not good enough, the most important thing is how to improve contact management.&lt;br /&gt;&lt;br /&gt;An address book in a Email program natively becomes part of the contact management through Email.  Instant messengers, Skype, Web mail and CRM etc., all have an address book. Synchronizing contact info between these applications has become a way to go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-4591953787431468633?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4591953787431468633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4591953787431468633'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/02/evolution-of-address-book-programs.html' title='Evolution of address book programs'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-1314042254085030797</id><published>2008-02-26T15:13:00.001-08:00</published><updated>2008-02-26T15:24:36.954-08:00</updated><title type='text'>Inmates Are Running the Asylum</title><content type='html'>I just started reading this book again: The Inmates Are Running the Asylum, Why High-Tech Products Drive Us Crazy and How to Restore the Sanity, by Alan Cooper.&lt;br /&gt;&lt;br /&gt;&lt;h3 style="font-style: italic;" class="docSection1Title"&gt;&lt;span style="font-size:78%;"&gt;What Do You Get When You Cross a Computer with a  Bank?&lt;/span&gt;&lt;/h3&gt; &lt;p style="font-style: italic;" class="docText"&gt;A computer! Whenever I withdraw cash from an automatic teller  machine (ATM), I encounter the same sullen and difficult behavior so universal  with computers. If I make the slightest mistake, it rejects the entire  transaction and kicks me out of the process. I have to pull my card out,  reinsert it, reenter my PIN code, and then reassert my request. Typically, it  wasn't my mistake, either, but the ATM computer finesses me into a misstep. It  always asks me whether I want to withdraw money from my checking, savings, or  money-market account, even though I have only a checking account. Subsequently,  I always forget which type it is, and the question confuses me. About once a  month I inadvertently select "savings," and the infernal machine summarily boots  me out of the entire transaction to start over from the beginning. To reject  "savings," the machine has to know that I don't have a savings account, yet it  still offers it to me as a choice. The only difference between me selecting  "savings" and the pilot of Flight 965 selecting "ROMEO" is the magnitude of the  penalty.&lt;a name="idd1e2023"&gt;&lt;/a&gt;&lt;a name="idd1e2028"&gt;&lt;/a&gt;&lt;a name="idd1e2033"&gt;&lt;/a&gt;&lt;a name="idd1e2040"&gt;&lt;/a&gt;&lt;a name="idd1e2047"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p style="font-style: italic;" class="docText"&gt;The ATM also restricts me to a $200 "daily withdrawal limit."  If I go through all of the steps—identifying myself, choosing the account,  selecting the amount—and then ask for $220, the computer unceremoniously rejects  the entire transaction, informing me rudely that I have exceeded my daily  withdrawal limit. It doesn't tell me what that amount is, inform me how much  money is in my account, or give me the opportunity to key in a new, lower  amount. Instead, it spits out my card and leaves me to try the whole process  again from scratch, no wiser than I was a moment ago, as the line of people  growing behind me shifts, shuffles, and sighs. The ATM is correct and factual,  but it is no help whatsoever.&lt;/p&gt; &lt;p class="docText"&gt;&lt;span style="font-style: italic;"&gt;The ATM has rules that must be followed, and I am quite willing  to follow them, but it is unreasonably computer-like to fail to inform me of  them, give me contradictory indications, and then summarily punish me for  innocently transgressing them. This behavior—so typical of computers—is not  intrinsic to them. Actually, nothing is intrinsic to computers: They merely act  on behalf of their software, the program. And programs are as malleable as human  speech. A person can speak rudely or politely, helpfully or sullenly. It is as  simple for a computer to behave with respect and courtesy as it is for a human  to speak that way. All it takes is for someone to describe how. Unfortunately,  programmers aren't very good at teaching that to computers.&lt;/span&gt;&lt;a name="idd1e2067"&gt;&lt;/a&gt;&lt;a name="idd1e2072"&gt;&lt;/a&gt;&lt;a name="idd1e2077"&gt;&lt;/a&gt;&lt;a name="idd1e2084"&gt;&lt;/a&gt;&lt;a name="idd1e2091"&gt;&lt;/a&gt;&lt;/p&gt;I got the same things in Australia.&lt;br /&gt;&lt;br /&gt;I did programming on credit readers and smart card readers 10 years ago for banking applications. I know that security and reliability are the top issue.  However, with such poor usability for general public, the ATM machine may still be reliable from the point of view of the banks, but the customers of the banks would definitely think the ATM machine is not reliable as it is not helpful.&lt;br /&gt;&lt;br /&gt;Is it so hard to improve usability while keeping security? Not at all. Unfortunately, this is all about the attitude of the banks. Hopefully, the wind of Web2.0 will blow to the banks one day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-1314042254085030797?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/1314042254085030797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/1314042254085030797'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/02/inmates-are-running-asylum.html' title='Inmates Are Running the Asylum'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-4387254916125369428</id><published>2008-02-11T20:38:00.001-08:00</published><updated>2008-02-11T20:42:55.126-08:00</updated><title type='text'>Test Page of XFN</title><content type='html'>I have some blog conversations with these guys. XFN with the blogs of these guys is embedded here.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://googlesystem.googlepages.com/" rel="contact "&gt;Ionut Alex Chitu&lt;/a&gt;&lt;p&gt;&lt;a href="http://blogoscoped.com/" rel="contact "&gt;Philipp Lenssen&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://tim.oreilly.com/" rel="contact "&gt;Tim Oreilly&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;The XFN tags were created by &lt;a href="http://www.fonlow.com/opencontacts/Developer/publish_selected_contacts_to_xfn.htm"&gt;XFN Creator for Open Contacts&lt;/a&gt;. I will see how well the Google Social Graph API is working.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-4387254916125369428?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4387254916125369428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4387254916125369428'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/02/test-page-of-xfn.html' title='Test Page of XFN'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-4800448828772448953</id><published>2008-02-11T16:28:00.000-08:00</published><updated>2008-07-17T21:08:33.729-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hcard'/><category scheme='http://www.blogger.com/atom/ns#' term='address book'/><category scheme='http://www.blogger.com/atom/ns#' term='xfn'/><title type='text'>hCard, XFN and Social Graph</title><content type='html'>hCard and XFN have been around for a few years, and seemed remaining as research/Alpha projects by some internet geeks, until Yahoo's flickr, Google and Mozilla started using these protocols.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gmpg.org/xfn/"&gt;XFN&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.foaf-project.org/"&gt;FOAF&lt;/a&gt;&lt;br /&gt;&lt;a href="http://code.google.com/apis/socialgraph/docs/"&gt;Google Social Graph API&lt;/a&gt;&lt;br /&gt;&lt;a href="http://microformats.org/wiki/hcard"&gt;hCard&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The API is still too primitive, and the popularity of XFN/FOAF is still not sufficient enough to be useful, even though just within the bloggers community. Even many net geeks can not make bold statement about the usefulness and the future of XFN/FOAF. I haven't seen any clue that what will make XFN/FOAF become popular and useful.&lt;br /&gt;&lt;br /&gt;Nevertheless, I would still like to add a few stones and assist people to find a way to successful use cases of XFN/FOAF. I have added supports to hCard and XFN in &lt;a href="http://www.fonlow.com/opencontacts"&gt;Open Contacts&lt;/a&gt;, and users can easily then publish selected contacts in the form of hCard or XFN.&lt;br /&gt;&lt;br /&gt;Generally, you would publish your own contact info as hCard, unless you are a company and want to publish contact info of staffs. You may actually store your own contact info in your address book, for the convenience of making vCard or hCard in order to give your updated contact info away.&lt;br /&gt;&lt;br /&gt;In an address book program, some categories may represent the relationships between you and the contacts of those categories. To find out more at&lt;br /&gt;&lt;h3 class="post-title entry-title"&gt;&lt;a href="http://webandlife.blogspot.com/2008/07/missing-link-in-making-social-graph.html"&gt;Missing link in making Social Graph popular&lt;/a&gt;&lt;/h3&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-4800448828772448953?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4800448828772448953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4800448828772448953'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/02/hcard-xfn-and-social-graph.html' title='hCard, XFN and Social Graph'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-7033632368189883547</id><published>2008-02-06T20:12:00.000-08:00</published><updated>2008-02-06T20:57:41.005-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pleo'/><title type='text'>Pleo and emperor</title><content type='html'>Since the official web site of Pleo did not give description of Pleo, I visited Wikipedia for fast info. Despite of the design of the official web page, the overall business idea of Pleo is quite smart.&lt;br /&gt;&lt;br /&gt;Sony AIBO pets have been there for almost 10 years, and QRIO have been emerging. Both are really high tech with the best commercial AI in-plant, and the best machinery.  However, we have seen real dogs, and know how dogs act and react, thus our knowledges about dogs and expectations tell a long distance to something closer to a real pet.&lt;br /&gt;&lt;br /&gt;However, nobody has ever seen a real dinosaur. At most our impression about actions of dinosaurs are mostly from movies "Jurassic Park" series or other popular cultures. After all, we have no idea how a baby dinosaur in particular with an exotic genus name Camarasaurus  will act and react. So, the performance of such electronic baby dinosaur will always look real as we don't really know what is real, so the electronic bot can be closer to a real dinosaur pet, and become more attractive.&lt;br /&gt;&lt;br /&gt;In addition, the costs of producing a baby dinosaur is certainly lower than the costs of producing an electronic dog like AIBO , as the design of AIBO required fine-tuning parameters to simulate a real dog. Similarly, QRIO will still be looking dummy.&lt;br /&gt;&lt;br /&gt;Anyway, why does an emperor has anything to do with pleo? A famous Chinese actor Mr Zhang Guoli who specialized in performing Chinese emperors had ever said, it was easy, comfortable and enjoyable to perform emperors, as nobody has ever seen a Chinese emperor in throne, so he could play whatever he want to perform in order to entertain audiences. Mr Zhang became a fast rising star in early years by performing emperors to Chinese audiences who love watching TV series with a smart and great emperor as a main character.&lt;br /&gt;&lt;br /&gt;So, selling Pleo and performing emperors are in the same business model.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-7033632368189883547?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7033632368189883547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7033632368189883547'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/02/pleo-and-emperor.html' title='Pleo and emperor'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-6360055297109649517</id><published>2008-02-06T19:48:00.000-08:00</published><updated>2008-02-06T20:12:45.338-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pleo'/><title type='text'>What is Pleo?</title><content type='html'>My work mate Leon sent me a web link to check out. http://www.pleoworld.com/&lt;br /&gt;After visiting the web site, I quickly replied:&lt;br /&gt;========&lt;br /&gt;I hate the design of this Web very much. What is pleo?&lt;br /&gt;&lt;br /&gt;Why should I play flash or quicktime to see further info. Am I ape? or the web designer expected the visitors are all ape geeks of Youtube cult? (I do visit Youtube, but not one of the cult members who don't read.)&lt;br /&gt;========&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_0Ec3HWOLHjk/R6qDvUC1yDI/AAAAAAAAADc/CEAvY1MOWRc/s1600-h/pleo.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_0Ec3HWOLHjk/R6qDvUC1yDI/AAAAAAAAADc/CEAvY1MOWRc/s320/pleo.jpg" alt="" id="BLOGGER_PHOTO_ID_5164084771591407666" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Is it too old fashion to have a simple text description on the front page? Flash on the front page is for tech fashion or for better usability? Almost all of us can read.&lt;br /&gt;&lt;br /&gt;Some might argue that the web page title does include a short description "PleoWorld - The Home of Pleo, the Robotic Baby Dinosaur from UGOBE Life Forms". But the description is far away from the web page, with main menu bar, navigation bar, bookmark bar and Google tool bar in between.&lt;br /&gt;&lt;br /&gt;Despite of Pleo's business idea, its official page can be a typical case of usability design.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-6360055297109649517?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/6360055297109649517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/6360055297109649517'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/02/what-is-pleo.html' title='What is Pleo?'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_0Ec3HWOLHjk/R6qDvUC1yDI/AAAAAAAAADc/CEAvY1MOWRc/s72-c/pleo.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-8999592264391647295</id><published>2008-01-29T21:52:00.000-08:00</published><updated>2008-01-29T22:34:00.913-08:00</updated><title type='text'>Turn off that hand held camera and give me a movie</title><content type='html'>Last night I went watching a disaster movie called Cloverfield. The story was told from the viewpoint of a hand held camera. I was only aware of one of movie reviews after watching the movie.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;A deft online marketing campaign finally pays off with the release of "Cloverfield", a thrilling monster romp that'll leave adrenaline surging in your veins long after the credits roll. (http://www.ourbrisbane.com/whatson/movies/titles/cloverfield)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;I almost fell into sleep in the first 5 minutes when the hand-held camera was capturing people dong all sorts of party things. I wished the camera stopped, and real movie story line could begin. Then the disaster struck.  The camera kept shaking left and right, up and down. My girl friend felt badly and had to bury the head aside, and I gradually felt uncomfortable, though I am not too bad at playing first-person-shooting games with puzzles rotating. I just wanted to shout out at that moment: Turn of that dam hand held camera, and give me a movie.&lt;br /&gt;&lt;br /&gt;I guess the director got inspired by the popularity of online video sharing sites like YouTube and thought video clips from hand-held camera could be a good way of telling story.  But this seems to defeat the purpose and advantages of cinema movies -- telling a story through different angles, and even with multiple story lines in parallel.&lt;br /&gt;&lt;br /&gt;Using a hand-held camera telling a story through single angle is not much different from telling story through stage play. Both forms use single angle with only one story line.&lt;br /&gt;&lt;br /&gt;Generally speaking, using a hand-held camera has its own place, mostly in producing B-class movies. Using a hand-held camera to tell about disaster apparently requires audiences to do heavy forensic analysis through pieces of low quality video clips of a single camera, in order to get the big picture of the whole story.&lt;br /&gt;&lt;br /&gt;My girl friend and I left the cinema 20 minutes after the "movie" started.&lt;br /&gt;&lt;br /&gt;I felt I was cheated. The movie's poster showed a great scene of the after mark of the disaster in New York, looking like another Hollywood blockbuster. However, in turn I just got video clips of a single-hand held camera, and the director tried to tell a blockbuster story through a B-class production.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-8999592264391647295?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/8999592264391647295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/8999592264391647295'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/01/turn-off-that-hand-held-camera-and-give.html' title='Turn off that hand held camera and give me a movie'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-5964514489988481096</id><published>2008-01-02T17:05:00.000-08:00</published><updated>2008-01-02T17:24:12.689-08:00</updated><title type='text'>Losing battles but winning the war</title><content type='html'>Many people said that Google ran not well enough in social, photo sharing, IM and mobile etc., as least not as good as competitors.  GoogleSystems has a summary of how Google promoted some services as a late comer: &lt;a href="http://googlesystem.blogspot.com/2007/12/winning-even-when-you-lose.html"&gt;Winning Even When You Lost&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If it was about "Lose", I think Google did not mind losing the battles, as long as it could win the war. Google was brave, and broke the barriers protecting the short term benefits of those giants like Yahoo and Microsoft.&lt;br /&gt;&lt;br /&gt;The backbone of Google business is essentially collective intelligence, which was started from the search engine calculating back links. The success of collective intelligence is based on good algorithm, and more data.&lt;br /&gt;&lt;br /&gt;Through promoting more online services on different platforms and pushing openness (e.g. interoperability between competitors), Google will get more and more data of human intelligence.&lt;br /&gt;&lt;br /&gt;It does not matter whether Gmail, Gtalk, social or whatever GServices will win respective markets. These services are just storm troopers for greater openness of collecting data.&lt;br /&gt;&lt;br /&gt;Google is winning the war of collective intelligence when losing some markets of some services.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-5964514489988481096?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/5964514489988481096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/5964514489988481096'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2008/01/losing-battles-but-winning-war.html' title='Losing battles but winning the war'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-4027302730024779597</id><published>2007-12-19T16:05:00.000-08:00</published><updated>2007-12-19T16:37:07.750-08:00</updated><title type='text'>Interpretation services and Web 2.0</title><content type='html'>The business  of &lt;a href="http://en.wikipedia.org/wiki/Interpreting"&gt;interpretation&lt;/a&gt; has been evolving. while interpretation occurs in real time, in the physical, televised, or telephonic presence of the parties for whom the interpreter renders an interpretation, I think, the concepts of Web 2.0 with mobile and internet platforms should contribute to boarder coverage and lowing the management costs.&lt;br /&gt;&lt;br /&gt;For example, Skype and other IM services will be covered as well. In addition, Web 2.0 services may reduce the management costs and improve the sales of interpretors.&lt;br /&gt;&lt;br /&gt;A professional interpretor may setup an online ordering system, and customers may order services of physical presence, telephonic presence, IM presence or mobile presence (with or without camera). Such approach will reduce middle men. I guess such online ordering systems for interpretation services have been around for years, as I haven't done any research on such subject.&lt;br /&gt;&lt;br /&gt;Anyway, the point of this article is, any company which in engaged in machine translation business should engaged in interpretation business as well. The purpose is not to take a big share in the interpretation business, but is to collect the results of human translations in real time in order to improve the statistic base models of machine translation.&lt;br /&gt;&lt;br /&gt;I think the materials of human conversations can be more effective in improving the statistical models than the materials of translated articles, as conversations tend to use short, simple and repeated terms and sentences. And machine translation may better serve human conversations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-4027302730024779597?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4027302730024779597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4027302730024779597'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/12/interpretation-services-and-web-20.html' title='Interpretation services and Web 2.0'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-6719390447241251190</id><published>2007-12-19T15:05:00.000-08:00</published><updated>2007-12-19T15:47:29.516-08:00</updated><title type='text'>Google Talk Translation Bots</title><content type='html'>I just read a post about &lt;a href="http://blogoscoped.com/archive/2007-12-19-n41.html"&gt;Google Talk Translation Bots.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Translation is fundamentally AI subject. Experts had long realized that mathematical/syntax base models won't work. Statistic base models had become mainstream approach for Voice2Text and translation.&lt;br /&gt;&lt;br /&gt;I bet this translation bot will sooner or later evolve to a portal of gathering statistics of translation between languages, as Google may find ways to encourage users to refine translations. So, Google continue its saga of collective intelligence.&lt;br /&gt;&lt;br /&gt;Translating a sentence can not be taken out of content.  Conversations is good and easy enough for analyzing content in order to fine tune the translation models.  While I don't have any insider news, I think Google may/will be doing the following:&lt;br /&gt;1. Gather the conversations, and give the content to human translators to translate. Of course, to ease complains about privacy protections, Google should rip out identities of conversations before giving the data to translators. Also, the users should be notified whether they will allow the conversations being processed by human translators. To encourage participation of users, Google may give out some candies.&lt;br /&gt;&lt;br /&gt;2. Google may deliver a paid service of &lt;span style="font-size:-1;"&gt; interpretations&lt;/span&gt;. People engaged in business talks may desire such service.  For example, when 2 users initiate a talk, one or two human interpretors who affiliate with Google may take part in.  The audio and text contents may then be fed into the statistical models of translation which will be used in the translation bots.&lt;br /&gt;&lt;br /&gt;I will have a separated article about the interpretation/translation business of Google or Web 2.0.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-6719390447241251190?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/6719390447241251190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/6719390447241251190'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/12/google-talk-translation-bots.html' title='Google Talk Translation Bots'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-4780834314412449380</id><published>2007-12-09T15:12:00.000-08:00</published><updated>2007-12-09T17:20:57.391-08:00</updated><title type='text'>Web 2.0 follow up</title><content type='html'>Web 2.0 emphasizes accessing/sharing data through different computing platforms, anytime, anywhere, online or off line. The connections and the data sharing are so seamless, collaboration and participation eventually has become natural.&lt;br /&gt;&lt;br /&gt;Participation in turn improve content creation. Such positive cycle had changed our ways of working and living.&lt;br /&gt;&lt;br /&gt;Web 2.0 was not deliberately invented. Pioneers such as eBay, Google and Blogger had done great job on harnessing collective intelligence and providing friendly UI, and their services clearly are more user oriented: when users win, the service providers win, eventually the sponsors win as well. These service providers truly understood that the users are the real sponsors at the end.&lt;br /&gt;&lt;br /&gt;Web 2.0 was called Web 2.0 simply because the implementation of the philosophy and the principles behind was mostly through the Web.&lt;br /&gt;&lt;br /&gt;I regard &lt;a href="http://www.oreilly.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html?page=1"&gt;O'Reilly -- What Is Web 2.0&lt;/a&gt; is a must read article about Web 2.0. I agree most conclusions of the article.&lt;br /&gt;&lt;br /&gt;Quoted from the article:&lt;br /&gt;&lt;span id="intelliTxt"&gt;&lt;p style="font-style: italic;"&gt;Every significant internet application to date has been backed by a specialized database: Google's web crawl, Yahoo!'s directory (and web crawl), Amazon's database of products, eBay's database of products and sellers, MapQuest's map databases, Napster's distributed song database. As Hal Varian remarked in a personal conversation last year, "SQL is the new HTML." Database management is a core competency of Web 2.0 companies, so much so that we have sometimes referred to these applications as "&lt;a href="http://www.oreilly.com/catalog/opensources/book/tim.html"&gt;infoware&lt;/a&gt;" rather than merely software.&lt;/p&gt;  &lt;p style="font-style: italic;"&gt;This fact leads to a key question: Who owns the data?&lt;/p&gt;&lt;p style="font-style: italic;"&gt;...&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;span id="intelliTxt"&gt;A further point must be noted with regard to data, and that is user concerns about privacy and their rights to their own data. In many of the early web applications, copyright is only loosely enforced. For example, Amazon lays claim to any reviews submitted to the site, but in the absence of enforcement, people may repost the same review elsewhere. However, as companies begin to realize that control over data may be their chief source of competitive advantage, we may see heightened attempts at control.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;I regard, &lt;span style="font-weight: bold;"&gt;the users should by principle own the data&lt;/span&gt;, as the users created the content. This is very simple, you post a paper note to a bulletin board,  and you own the content, not the bulletin board.  However, &lt;span style="font-weight: bold;"&gt;the service providers own the collective intelligence&lt;/span&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="intelliTxt"&gt;Google had got it right. The CEO &lt;/span&gt;&lt;span style="font-size:-1;"&gt;Eric Schmidt&lt;/span&gt;&lt;span id="intelliTxt"&gt; claimed many times that Google tried hard to make the users truly own the data by providing convenient methods for the users to retrieve data and put the data to other platforms. As long as Google has the greatest assets of collective intelligence, Google is not in fear of users moving the data away while respecting the data ownership of the users.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-4780834314412449380?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4780834314412449380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4780834314412449380'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/12/web-20-follow-up.html' title='Web 2.0 follow up'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-6106002706713054931</id><published>2007-11-26T14:34:00.000-08:00</published><updated>2007-11-26T15:06:47.265-08:00</updated><title type='text'>Genealogy Wiki Style 2</title><content type='html'>There exist many genealogy online services. Some of them do encourage participation of family members.  The key issues to enhance the services are as following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Encourage the participation of governments around the world. Give governments some software to extract genealogy info of deceased people in order for the public to retrieve the info freely. This will also embark the interests of fellow citizens to edit genealogy info.&lt;/li&gt;&lt;li&gt;General hosting service with common functions and APIs. Allow plug-in like those in MySpace. A whole set of genealogy info may move between hosting services, so users can really own the data without the fear that one day the service provider may die.&lt;/li&gt;&lt;li&gt;A protocol similar to Google's OpenSocial will be build to improve the interoperability between existing online genealogy services.&lt;/li&gt;&lt;/ol&gt;Different from social networking services, the service provides large amount of info of deceased people. From certain point of view, the service is Genealogy + wiki + social network + open social.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-6106002706713054931?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/6106002706713054931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/6106002706713054931'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/11/genealogy-wiki-style-2.html' title='Genealogy Wiki Style 2'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-4541667572576496940</id><published>2007-11-26T14:31:00.001-08:00</published><updated>2007-11-26T14:33:30.549-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='GeneaPedia'/><category scheme='http://www.blogger.com/atom/ns#' term='genealogy'/><title type='text'>Genealogy Wiki Style</title><content type='html'>Current genealogy software running on desktop and Web are all old fashion UI, requiring an activist to maintain the data all the time. Who have time nowadays?&lt;br /&gt;&lt;br /&gt;I would purpose using Wiki is good for maintaining genealogy info. GeneaPedia.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Wiki has the following advantages:&lt;/span&gt;&lt;br /&gt;1. Encourage people in the same genealogy tree to participate and record detail info.&lt;br /&gt;2. Keep change log.&lt;br /&gt;3. Good balance of authentication, privacy and openness.&lt;br /&gt;4. Easy connections/navigations between several genealogy trees as a person might belong to several trees.&lt;br /&gt;5. Multimedia data can be integrated.&lt;br /&gt;6. Online contents can be easily copied to off-line media like CD.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The following UI elements may be introduced:&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;UI like Google Maps can be integrated in, so you may see how many relatives are living around you, or around the world.&lt;/li&gt;&lt;li&gt;Online events/calendars.&lt;/li&gt;&lt;li&gt;Forums.&lt;/li&gt;&lt;li&gt;Each member may have a wiki page, even with different versions opening to different members.&lt;/li&gt;&lt;li&gt;Prepare to merge with the other trees, and content. For example, some member of the same tree may started the work in parallel, and later found each other and agreed to merge data.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Interactions with other services:&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Interfaces with GEDCOM or GedML. Other online or off lines programs may communicate with the online service of Genealogy.&lt;/li&gt;&lt;li&gt;For the belief of liberty, the service should allow export a whole tree out.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Privacy Protections:&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Authentication systems like those in Wikipedia and moderated forums.&lt;/li&gt;&lt;li&gt;The online service allow limited indexing by web search engines in order not to expose sensitive private data to the internet directly.&lt;/li&gt;&lt;li&gt;Private addresses will generally be hidden at different levels. For example, country name and state name may have less restriction. The address info is used for generating geographic distribution chart of your relatives.&lt;/li&gt;&lt;li&gt;Friendly and responsive account recovery.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Each member may have a wiki page, even with different versions opening to different members.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Just remember, web sites and services will gone, we have to let the user to move data. XML specification based on existing XML spec will be researched first.&lt;br /&gt;&lt;br /&gt;The project may cooperate with the founders of Wikipedia, and some usability experts.&lt;br /&gt;&lt;br /&gt;For family tree, there are a few activists who are either skillful at using computers and know many members. The building of the service should consider the following:&lt;br /&gt;1. Activists has top right in the Wiki&lt;br /&gt;2. All changes will be logged. In short, Wiki style management.&lt;br /&gt;3. Prepare to merge with the other trees, and content.&lt;br /&gt;4. Each member may have a wiki page, even with different versions opening to different members.&lt;br /&gt;5. Provide shortcuts to other programs and web servces in order to establish communications.&lt;br /&gt;6. The data may be exported to XML and can be transformed to other format easily.&lt;br /&gt;7. Wiki will have multiple enhancement with built-in video host and can be extented to other video sites.&lt;br /&gt;&lt;br /&gt;People are born, growing and will decease. The genealogy of current generations are dynamic, growing and spreading in a fast changing world. Genealogy info service should encourage current generations of relatives to participate, communicate and interact. The information infrastructure of genealogy should reflect such characteristics and requirements.&lt;br /&gt;&lt;br /&gt;While there exists quite a few online services of genealogy, the important thing is, the service should not make people think that their data are being owned by a commercial vendor which may have their data sold later.&lt;br /&gt;&lt;br /&gt;(To be continued...)&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;http://en.wikipedia.org/wiki/Genealogy_software&lt;br /&gt;http://en.wikipedia.org/wiki/List_of_genealogy_portals&lt;br /&gt;http://www.familyinhistory.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-4541667572576496940?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4541667572576496940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4541667572576496940'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/11/genealogy-wiki-style.html' title='Genealogy Wiki Style'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-3387214895271344498</id><published>2007-11-19T21:51:00.000-08:00</published><updated>2007-11-26T14:07:35.956-08:00</updated><title type='text'>Plaxo, Privacy and Online Services</title><content type='html'>Plaxo had brought quite a lot controversy and criticism, and the company has recently done some refreshment in its services adapting Web 2.0 concepts, and has less privacy disturbing in practice, although in the past Plaxo insisted it was not Plaxo sent out the spam mail, but the users of Plaxo sent invitations to their buddies, effectively, buddies spam buddies. Nevertheless, Plaxo is still getting popular, and recent changes in Plaxo services indicate that Plaxo is having better practice in protecting privacy.&lt;br /&gt;&lt;br /&gt;After all, it is your own privacy policy define who really have good practice in protecting privacy and who can be trusted. And it is your choice of trade off for different factors.&lt;br /&gt;&lt;br /&gt;I had come across different articles when studying Plaxo and privacy protection.&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Plaxo"&gt;http://en.wikipedia.org/wiki/Plaxo&lt;/a&gt; and its references&lt;br /&gt;&lt;a href="http://groups.google.com.au/group/uk.media.tv.misc/browse_thread/thread/2b11d460eef70820/32b04174096f03c1?hl=en&amp;amp;lnk=st&amp;amp;q=plaxo#32b04174096f03c1"&gt;http://groups.google.com.au/group/uk.media.tv.misc/browse_thread/thread/2b11d460eef70820/32b04174096f03c1?hl=en&amp;amp;lnk=st&amp;amp;q=plaxo#32b04174096f03c1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://groups.google.com.au/group/news.admin.net-abuse.email/browse_thread/thread/a8dba9a1b896793a/271d8fc176d30e68?hl=en&amp;amp;lnk=st&amp;amp;q=plaxo+spam#271d8fc176d30e68"&gt;http://groups.google.com.au/group/news.admin.net-abuse.email/browse_thread/thread/a8dba9a1b896793a/271d8fc176d30e68?hl=en&amp;amp;lnk=st&amp;amp;q=plaxo+spam#271d8fc176d30e68&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.askdavetaylor.com/can_i_get_plaxo_spam.html"&gt;http://www.askdavetaylor.com/can_i_get_plaxo_spam.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.techcrunch.com/2006/03/22/plaxo-now-with-less-evil/"&gt;http://www.techcrunch.com/2006/03/22/plaxo-now-with-less-evil/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here's my privacy policy:&lt;br /&gt;1. Keep personal addresses in my territory only such as my PC, PDA and encrypted USB flash drive. As PDA and USB flash drive may easily be lost in street, they should be protected by password and encryption.&lt;br /&gt;2. If I need to sync, I would sync with local sync programs like Funambol.&lt;br /&gt;3. If I use online sync like Plaxo, I would sync Email address and Phone number only.&lt;br /&gt;&lt;br /&gt;The point is, keep my own address and my friends addresses in private places. Phone number is not so private as they are available in White Pages anyway.&lt;br /&gt;&lt;br /&gt;When someone asks for your address, you will definitely hesitate with cautious, even if the request may come with some bait like gifts. If you give a friend your address, and he/she publish the address to the web, this is of course a privacy violation. How about your friend just sync your address to his/her address book on Plaxo, or import the info to Google Mail? You probably feel uncomfortable or just don't mind. This is a quite gray area. Companies like Plaxo and Google do have privacy policy to assure customers that their private info is well protected, however, some people still could not trust or believe whether such promise and implementation is really solid forever.&lt;br /&gt;&lt;br /&gt;I would like to summary 3 levels of privacy policy upon electronic contact info.&lt;br /&gt;1. Keep data in private place, and the data storage is always encrypted. Never sync with online services like Plaxo and Google. Handle only encrypted Email; use Tor all the time. Spies must use such policy, as they have enough discipline.&lt;br /&gt;2.  Use private place as primary storage of contact info, and sync limited contact info to mobile devices and online services. If I need to put address info online as backup, I would encrypt them.&lt;br /&gt;3. Use mobile devices and online services most of the time, keep adding buddies to online social networking accountsss. When receiving friends' addresses, put the info online right away. Youths do this.&lt;br /&gt;&lt;br /&gt;There can be many configuration settings of privacy policy, make one of your own. The thumb of rules is, even if you are not in favor of strict privacy policy, you should respect that some of your contacts do have strict privacy policy, and don't boil their trusts on you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-3387214895271344498?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/3387214895271344498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/3387214895271344498'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/11/plaxo-privacy-and-online-services.html' title='Plaxo, Privacy and Online Services'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-7825245172955599077</id><published>2007-11-18T17:35:00.000-08:00</published><updated>2007-11-25T14:27:57.573-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PIM'/><category scheme='http://www.blogger.com/atom/ns#' term='calendar'/><category scheme='http://www.blogger.com/atom/ns#' term='address book'/><title type='text'>Build Secured and Portable PIM</title><content type='html'>There are solutions/platforms of secured and portable PIM:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Laptop PC.&lt;/li&gt;&lt;li&gt;PDA like your smart phone and pocket PC etc.&lt;/li&gt;&lt;li&gt;USB flash disk, portable hard drive, iPod.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/U3"&gt;U3&lt;/a&gt; Smart Drives.&lt;/li&gt;&lt;/ol&gt;These solutions clearly have their own advantages and weaknesses upon different scenarios and use cases.&lt;br /&gt;&lt;br /&gt;This article introduces an economic alternative solution to U3 Smart Drives. Solutions like U3 are useful when you don't need portable computing, but portable data and applications, and then borrow computing from any Windows PC you can use.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/en/4/4a/U3launch.PNG"&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://upload.wikimedia.org/wikipedia/en/4/4a/U3launch.PNG" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;(Source from Wikipedia)&lt;br /&gt;&lt;br /&gt;While U3 smart drives are very useful, however, functionally and technically it has the following shortfalls and weaknesses:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;U3 excludes the uses of portable hard drives, iPod and other external storages, effectively lock itself to USB flash disk only. Thus, this limits the choices of customers.&lt;/li&gt;&lt;li&gt;A U3 compliant application must also be packaged in U3's special program format. U3 applications will only run from a U3 device. This makes packaging and distribution of portable applications more difficult.&lt;/li&gt;&lt;li&gt;When inserting a U3 smart drive, U3 will silently install itself to the host machine. As a platform to contain portable applications, U3 itself is not portable, and silent installation make it look like a trojan.  Please read &lt;a href="http://portableapps.com/about/what_is_a_portable_app"&gt;what is a portable app&lt;/a&gt; for details.&lt;/li&gt;&lt;li&gt;U3 provides API and software development kits for 3rd party developers. However, the benefit of using the API is not great as the kits did not address the other shortfalls of U3, but made the deployment of applications difficult to developer and easier to U3 implementation.&lt;/li&gt;&lt;li&gt;U3 needs two drive letters to run, and creating drive letters in Windows requires administrator privileges.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;More expensive. Sandisk, the rights holders for U3 asks for a 5% royalty from USB flash drive manufacturers who wish to implement the platform on their products. However, your cost is not just 5% more expensive as the manufacturing quantity can not be as scalable as normal USB devices.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;I would like to introduce a fairly simple twist to your USB flash disk or any external storage to gain the benefits of portable applications while have less shortfalls than what U3 has.&lt;br /&gt;&lt;br /&gt;The solution is simple: &lt;a href="http://portableapps.com/apps"&gt;portable applications&lt;/a&gt; + &lt;a href="http://downloads.sourceforge.net/portableapps/PortableApps_Suite_Base_1.0.exe?download"&gt;portable apps menu&lt;/a&gt; + &lt;a href="http://www.truecrypt.org/"&gt;truecrypt.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_0Ec3HWOLHjk/R0EA-yOQkrI/AAAAAAAAADA/BNXfENmaJRQ/s1600-h/portablemenu.gif"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_0Ec3HWOLHjk/R0EA-yOQkrI/AAAAAAAAADA/BNXfENmaJRQ/s400/portablemenu.gif" alt="" id="BLOGGER_PHOTO_ID_5134386128812544690" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;As both PortableApps.com and TrueCrypt.org have comprehensive user manual and straightforward tutorials, I would not introduce them here in details as separated applications, and would assume you have some basic skills of using portable apps menu and TrueCrypt.&lt;br /&gt;&lt;br /&gt;The point of the solution is, portable apps menu provides convenient shortcut to portable applications, and TrueCrypt provides data protection.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Usage:&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Plug in the USB drive. Windows will scan the drive according to security settings, and may pop up a dialog for a drive letter. You should input a drive letter available in the host machine.&lt;/li&gt;&lt;li&gt;Another dialog will appear asking for the password used for unlock the TrueCrypt storage.&lt;/li&gt;&lt;li&gt;Portable apps menu will pop up ready for serving you.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Steps of construction:&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Build a TrueCrypt storage to store your portable applications and data. The size I prefer is around 600 MB so I can back up the whole storage to a CD-R if needed. It is recommended that you build the storage on a PC's hard drive first then copy the storage file to the USB drive.&lt;/li&gt;&lt;li&gt;Map the TrueCrypt storage to a drive letter, and install portable apps menu to the root of the mapped drive.&lt;/li&gt;&lt;li&gt;Copy other portable applications into directory "PortableApps".&lt;/li&gt;&lt;li&gt;Run PortableApps.exe for testing.&lt;/li&gt;&lt;li&gt;Copy the TrueCrypt storage and TrueCrypt program to your USB drive.&lt;/li&gt;&lt;li&gt;Copy the following scripts to the USB drive.&lt;/li&gt;&lt;li&gt;Run the script for testing, then unplug and plug in the USB drive for further testing.&lt;/li&gt;&lt;/ol&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_0Ec3HWOLHjk/R0EEGSOQksI/AAAAAAAAADI/ckDOkInTr4w/s1600-h/portabledrive.gif"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_0Ec3HWOLHjk/R0EEGSOQksI/AAAAAAAAADI/ckDOkInTr4w/s400/portabledrive.gif" alt="" id="BLOGGER_PHOTO_ID_5134389556196446914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Script Files:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;AutoRun.INF&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;[autorun]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;open=cscript MountWithDrive.vbs&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;action=Start TrueCrypt and PortableApp&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This file must be in the root of your USB drive. You may need to adjust the path of "MountWithDrive.vbs" according where you copy the VB script file to. The INF script shown here assumes the VBS file is stored in the root of the USB drive.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;MountWithDrive.vbs&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;Dim driveLetter&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;driveLetter = InputBox("Define which drive letter to mount")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;if driveLetter &lt;&gt; "" then&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;   Set WshShell = WScript.CreateObject("WScript.Shell")&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;   WshShell.Run "tools\TrueCrypt\TrueCrypt.exe /v Know\data.data /m rm /q /l "&amp;amp; driveLetter, 1, true&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;   &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;   WshShell.Run driveLetter &amp;amp;":\PortableApps\PortableAppsMenu\PortableAppsMenu.exe"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;   WshShell.Run "tools\TrueCrypt\TrueCrypt.exe /q preferences"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;end if&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You will need to adjust the path to "TrueCrypt.exe" according the location of the program in the USB drive. The vbscript shown assumes that TrueCrypt program files are stored in USB Root\Tools\TrueCrypt\. In addition, the script assumes that the encrypted storage file "data.data" is stored in USB Root\Know, so you need to adjust this as well.&lt;br /&gt;&lt;br /&gt;Now, you have Mozilla Thunderbird as desktop Email client, Mozilla Sunbird as calendar, and Open Contacts as address book in a secured and portable storage, what else do you need for portable Personal Information Manager?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Remarks:&lt;/span&gt;&lt;br /&gt;This solution still has some shortfalls comparing to a perfect solution not yet implemented and possible. It still requires 2 drive letters from host computer and need admin privilege. Before unplugging the USB drive, you need to first close the Portable App Menu, then dismount the encrypted drive.  Nevertheless, it has much less shortfalls than what U3 has, while having all convenience and security of U3.&lt;br /&gt;&lt;br /&gt;Though the solution is not yet a quick off-the-shelf product and need some twist to initialize, it should not be difficult technically to automate the steps of initialization illustrated above. I will suggest the rights holders of PortableApps and TrueCrypt to come up with a integrated installation program.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-7825245172955599077?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7825245172955599077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7825245172955599077'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/11/build-secured-and-portable-pim.html' title='Build Secured and Portable PIM'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_0Ec3HWOLHjk/R0EA-yOQkrI/AAAAAAAAADA/BNXfENmaJRQ/s72-c/portablemenu.gif' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-7006001055295224574</id><published>2007-11-18T16:27:00.001-08:00</published><updated>2007-11-18T16:55:01.154-08:00</updated><title type='text'>vCard and Address Book Programs</title><content type='html'>vCard was invented in 1995 merely at the beginning of the Web/Internet boom. Though it was since widely used as meta format of data exchange, its scheme is simply out of date as so many methods of communication were invented such as ICQ, MSN, Skype, blog etc.&lt;br /&gt;&lt;br /&gt;So, we developers still have to use proprietary protocols to maximize the effectiveness of exchange of address book data.&lt;br /&gt;&lt;br /&gt;The following tables from Sync4J (&lt;a href="http://www.funambol.com"&gt;Funambol&lt;/a&gt;) illustrates the limitation of capacity of vCard.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_0Ec3HWOLHjk/R0DatSOQkoI/AAAAAAAAACo/jeZCJenU8b8/s1600-h/1.gif"&gt;&lt;img style="cursor: pointer; width: 230px; height: 285px;" src="http://bp3.blogger.com/_0Ec3HWOLHjk/R0DatSOQkoI/AAAAAAAAACo/jeZCJenU8b8/s400/1.gif" alt="" id="BLOGGER_PHOTO_ID_5134344046722978434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_0Ec3HWOLHjk/R0Da2yOQkpI/AAAAAAAAACw/t64xsMpjLjQ/s1600-h/2.gif"&gt;&lt;img style="cursor: pointer; width: 261px; height: 372px;" src="http://bp1.blogger.com/_0Ec3HWOLHjk/R0Da2yOQkpI/AAAAAAAAACw/t64xsMpjLjQ/s400/2.gif" alt="" id="BLOGGER_PHOTO_ID_5134344209931735698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_0Ec3HWOLHjk/R0DbDCOQkqI/AAAAAAAAAC4/90se4GKpUtc/s1600-h/3.gif"&gt;&lt;img style="cursor: pointer; width: 250px; height: 81px;" src="http://bp2.blogger.com/_0Ec3HWOLHjk/R0DbDCOQkqI/AAAAAAAAAC4/90se4GKpUtc/s400/3.gif" alt="" id="BLOGGER_PHOTO_ID_5134344420385133218" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-7006001055295224574?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7006001055295224574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7006001055295224574'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/11/vcard-and-address-book-programs.html' title='vCard and Address Book Programs'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_0Ec3HWOLHjk/R0DatSOQkoI/AAAAAAAAACo/jeZCJenU8b8/s72-c/1.gif' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-8391802621843024973</id><published>2007-11-15T16:50:00.000-08:00</published><updated>2007-11-15T17:13:57.727-08:00</updated><title type='text'>Best Picks</title><content type='html'>&lt;h3 class="post-title entry-title"&gt;&lt;a href="http://webandlife.blogspot.com/2007/03/universal-logger-of-electronic.html"&gt;Universal Logger of Electronic Communications, Part 1&lt;/a&gt;&lt;/h3&gt;&lt;a href="http://webandlife.blogspot.com/2007/03/universal-logger-of-electronic_19.html"&gt;Universal Logger of Electronic Communications, Part 2&lt;/a&gt;&lt;br /&gt;&lt;h3 class="post-title entry-title"&gt;&lt;a href="http://webandlife.blogspot.com/2007/03/specification-of-super-pda-or-super.html"&gt;Specification of Super PDA or Super Pocket PC&lt;/a&gt;&lt;/h3&gt;&lt;a href="http://webandlife.blogspot.com/2007/03/open-contacts-and-distributed-social.html"&gt;Open Contacts and distributed social networking, Part 1&lt;/a&gt;&lt;br /&gt;&lt;h3 class="post-title entry-title"&gt;&lt;a href="http://webandlife.blogspot.com/2007/03/open-contacts-and-distributed-social_17.html"&gt;Open Contacts and distributed social networking, Part 2&lt;/a&gt;&lt;/h3&gt;&lt;a href="http://webandlife.blogspot.com/2007/03/do-you-contact-people-in-social.html"&gt;Do you contact them?&lt;/a&gt;&lt;br /&gt;&lt;h3 class="post-title entry-title"&gt;&lt;a href="http://webandlife.blogspot.com/2007/04/social-networking-web-can-only-assist.html"&gt;Social Networking Web can only assist you, it is you do the networking&lt;/a&gt;&lt;/h3&gt;&lt;a href="http://webandlife.blogspot.com/2007/04/google-and-logistics.html"&gt;Google and Logistics&lt;/a&gt;&lt;br /&gt;&lt;h3 class="post-title entry-title"&gt;&lt;a href="http://webandlife.blogspot.com/2007/04/is-web-20-address-book-silver-bullet.html"&gt;Is Web 2.0 Address Book a silver bullet?&lt;/a&gt;&lt;/h3&gt;&lt;a href="http://webandlife.blogspot.com/2007/04/google-address-lookup-services-and.html"&gt;Google Address Lookup Services and Existing Service Provider&lt;/a&gt;&lt;br /&gt;&lt;h3 class="post-title entry-title"&gt;&lt;a href="http://webandlife.blogspot.com/2007/07/wheres-place-of-desktop-applications.html"&gt;Where's the place of desktop applications under the strong wind of Web 2.0?&lt;/a&gt;&lt;/h3&gt;&lt;a href="http://webandlife.blogspot.com/2007/07/face-recognition-in-picassa.html"&gt;Face recognition in Picassa&lt;/a&gt;&lt;br /&gt;&lt;h3 class="post-title entry-title"&gt;&lt;a href="http://webandlife.blogspot.com/2007/07/google-exchange.html"&gt;Google Exchange&lt;/a&gt;&lt;/h3&gt;&lt;a href="http://webandlife.blogspot.com/2007/08/redundant-usage-of-hcard.html"&gt;Redundant usage of hCard&lt;/a&gt;&lt;br /&gt;&lt;h3 class="post-title entry-title"&gt;&lt;a href="http://webandlife.blogspot.com/2007/09/who-killed-virtual-case-file.html"&gt;Who Killed the Virtual Case File?&lt;/a&gt;&lt;/h3&gt;&lt;a href="http://webandlife.blogspot.com/2007/10/people-search-engines-for-who-and-what.html"&gt;People Search Engines for who and what&lt;/a&gt;&lt;br /&gt;&lt;h3 class="post-title entry-title"&gt;&lt;a href="http://webandlife.blogspot.com/2007/10/upcoming-call-list.html"&gt;Upcoming Call List&lt;/a&gt;&lt;/h3&gt;&lt;a href="http://webandlife.blogspot.com/2007/10/people-search-engine.html"&gt;The People Search Engine&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-8391802621843024973?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/8391802621843024973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/8391802621843024973'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/11/best-picks.html' title='Best Picks'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-3415163316243262667</id><published>2007-11-12T16:56:00.000-08:00</published><updated>2007-11-12T17:06:48.330-08:00</updated><title type='text'>Why Google Discourage SEO?</title><content type='html'>I just read a lengthy article from Aaron at http://blogoscoped.com/archive/2007-11-12-n28.html&lt;br /&gt;&lt;br /&gt;I also do love reading the posts from Matt Cutt. Yes "&lt;span style="font-style: italic;"&gt;his job requires him to be blindingly hypocritical at times.&lt;/span&gt;" In such position, he does like a king, and probably he feel like a king. I wish the industries can come up with more balanced solutions regarding to SEO.&lt;br /&gt;&lt;br /&gt;I think Google Engineers carry out hand-editing on search results mainly for training purpose, rather than influencing general search results, because there are tens of millions web sites around the world, and it is not Google's tradition and intension to do any labor intensive job. When I mentioned training purpose, I meant training the search engine using hand-crafted results.&lt;br /&gt;&lt;br /&gt;According to Matt Cutt blog, Google does want to encourage creating original contents, rather than machine generated contents of fooling search engine.&lt;br /&gt;&lt;br /&gt;My own blogs and other web sites could easily got high page ranks with intended keywords, while my web sites got very few inbond links. What I did was just to create contents with appropriate titles.&lt;br /&gt;&lt;br /&gt;I do read some SEO articles. When I wrote contents, I mostly just tried not to fall into the traps of penalty of page rank. My blog did get attention once from Google after reconstructing the structure, Google shielded it as spam site from search result and offered a chance to resolve. After I sent an Email to Google to explain, and my blog re-surfaced again from search results with high page rank.&lt;br /&gt;&lt;br /&gt;I think Google had done well on what they intend to do: encourage people to create original quality contents with human intelligent. After all, please remember Google's business was created from harvesting human intelligent, and will continue the major business this way. Google needs more human intelligent presented on the Web.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-3415163316243262667?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/3415163316243262667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/3415163316243262667'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/11/why-google-discourage-seo.html' title='Why Google Discourage SEO?'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-9194414395061376718</id><published>2007-11-11T14:44:00.000-08:00</published><updated>2007-11-11T18:10:13.739-08:00</updated><title type='text'>How to recover stolen Google account?</title><content type='html'>I just read an interesting post from &lt;span style="font-size:78%;"&gt;&lt;a href="http://blogoscoped.com/archive/2007-11-09.html#n38"&gt;What If Your Google Account Was Stolen?&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;You are awoken by a telephone call at 6 in the morning; a friend tips you off that many Google Account passwords have been revealed to abusers due to some Google security issue. You try to login to your Gmail to check this but can’t get past the password box – it turns out someone kidnapped your account already and changed your password. The kidnapper can now freely roam in your Gmails, your Google docs, your AdSense pages, your Blogspot blog (if you have one) and so on.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Because it's Google's fault, they should be the ones who block the accounts and solve the problem. And this is possible.&lt;br /&gt;&lt;br /&gt;What the bank will do if you lost your password and it was your fault? Your bank will surely provide assistant if you have cross references to prove your identify, such as ID cards, bank statements and other info.&lt;br /&gt;&lt;br /&gt;I would suggest that Google provides such service: Ownership Protection.&lt;br /&gt;&lt;br /&gt;Google has to do the job cooperating with banks, post offices or other credit organizations. You need to tell Google your identity, and associate your Google account with your bank account. If you have your Google account stolen, you will need to go to the bank and show documents of proofs. Then you or the bank may notify Google to reset the account.&lt;br /&gt;&lt;br /&gt;Because your bank is doing business with you with your real identify, so the bank is responsible to recovering your stolen bank account, and is able to.&lt;br /&gt;&lt;br /&gt;All the goodness of recovering stolen Google account is only possible provided that you give up your anonymity of Google account, and do business with Google with your real identify.&lt;br /&gt;&lt;br /&gt;Of course, such service will come with a fee charged by the bank and Google, if it was your fault losing the account, and the bank and Google together assist you to recover the priceless account.&lt;br /&gt;&lt;br /&gt;Google will provide IP addresses of last accesses to your account, if you want to pursuit the issue further with your local police force.&lt;br /&gt;&lt;br /&gt;Here's more details of the protocol, assuming that Google has established agreements with banks and credit organizations around the world:&lt;br /&gt;0. Edit the settings of Google account, associate the account with one or a few real world account, such as a bank account.&lt;br /&gt;1. Upon finding your account got stolen, you ring your bank to freeze the Google account. And the bank will notify Google to freeze the account.&lt;br /&gt;2. You go to the bank with documents of proofs. After authenticating the documents, the bank will notify Google to reset the account.&lt;br /&gt;3. Google will send you the new password to your alternative Email address, or, more securely,  Google will send the password by post via your local bank's PIN management system.&lt;br /&gt;4. If it was not Google fault, the bank will charge you a fee shared by Google.&lt;br /&gt;&lt;br /&gt;How good is this?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-9194414395061376718?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/9194414395061376718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/9194414395061376718'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/11/how-to-recover-stolen-google-account.html' title='How to recover stolen Google account?'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-484816858384910821</id><published>2007-11-07T19:08:00.000-08:00</published><updated>2008-03-26T02:47:42.538-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='address book'/><category scheme='http://www.blogger.com/atom/ns#' term='freeware'/><title type='text'>Is Open Contacts the freeware address book program you need?</title><content type='html'>There are many standalone address book programs, and integrated solutions with address book functions, such as MS Outlook, Mozilla Thunderbird, SugerCRM, mobile phones etc. You may not be satisfied by any of them.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.fonlow.com/opencontacts"&gt;Open Contacts&lt;/a&gt; was designed for manging contacts you personally know. It is not a CRM program which manages contacts for sales and marketing, however, it provides advanced features over traditional address book programs. You may consider the following questions:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Do you want to sometimes add some data fields not included in your current address book program?&lt;/li&gt;&lt;li&gt;Do you need to use MS Outlook, Mozilla Thunderbird and a Web mail program at different scenarios?&lt;/li&gt;&lt;li&gt;Do you have both personal contacts and organizational contacts?&lt;/li&gt;&lt;li&gt;Do you want to use an address book program on a portable drive such as USB flash disk?&lt;/li&gt;&lt;li&gt;Do you need to sync contact info on various devices?&lt;/li&gt;&lt;li&gt;Do you need to print contact info in various formats?&lt;/li&gt;&lt;/ul&gt;If you say yes to most of these questions, you may find &lt;a href="http://www.fonlow.com/opencontacts"&gt;Open Contacts&lt;/a&gt; is the right program for your needs of managing and using contact info.&lt;br /&gt;&lt;p&gt;There is no a single silver bullet that can hit all targets. You  need to understand and plan what you needs, before making decisions.&lt;/p&gt;  &lt;p&gt;OC was designed for managing contacts who you know personally. Though there's  nothing stopping from using OC to do mass marketing before you moving to CRM  solutions, however, the whole UI and extended functions were all  designed/optimized for handling contact info of those who you know personally.&lt;/p&gt;  &lt;p&gt;For example, a desktop CRM program will not need to run on an external drive  like a USB flash disk, however, it is handy to use your personal address book  everywhere you have access to a computer. For mass marketing, you don't need to  print contacts on paper, however, for personal contacts, sometimes you might  want to print selected contacts on paper for various purposes.&lt;/p&gt;  &lt;p&gt;The number of scenarios of using CRM is limited comparing with general  address book, as CRM is for business only. You won't put your personal contacts  into a CRM program, but you will put personal contacts and selected business  contacts into a general address book.&lt;/p&gt;  &lt;p&gt;With flexibility of features provided by Open Contacts, you may invent new  ways of using contact info for different scenarios through combining a few OC  features and other programs.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-484816858384910821?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/484816858384910821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/484816858384910821'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/11/is-open-contacts-freeware-address-book.html' title='Is Open Contacts the freeware address book program you need?'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-7620576769912816721</id><published>2007-10-15T22:24:00.000-07:00</published><updated>2007-10-15T23:19:59.363-07:00</updated><title type='text'>People Search Engines for who and what</title><content type='html'>I just reviewed a few so called people search engines like Spock, Wink, as well as other guys' reviews on these services. These engines have one flavor in common:&lt;br /&gt;Focusing on important hubs of people information like blogs, wikipedia, photo sites and, of course, social networks like facebook.&lt;br /&gt;&lt;br /&gt;Why?&lt;br /&gt;&lt;br /&gt;Because many of my friends have blogs? or many of my contacts live in social networks? or they are prominent enough to have an entry in Wikipedia?&lt;br /&gt;&lt;br /&gt;But I do have many contacts having web presence through their personal web pages,  press releases, or online news etc.   Why shouldn't a people search engine provide cross references about a person with wide range of web pages, rather than pages of hubs of people information?&lt;br /&gt;&lt;br /&gt;I regard such focus is just for the easiness of implementing these engines, as these hubs have hight quality raw materials for the machine analysis.  Obviously this also limits the usefulness of a people search engine.&lt;br /&gt;&lt;br /&gt;For example, to better know about a contact who is a CEO of a company, I would like to see press releases and news about him or her, as this kind of person rarely has presence in social network sites or blogs because business people are  most conservative and rarely have time to care about their net presence.&lt;br /&gt;&lt;br /&gt;I understand the short term goal of these search engine is to get people heads as many as possible, regardless of the distribution of user bases, and the usefulness of the information provided. Slowly burning of the VC fund and quickly attracting more people, then more cash flowing from investors.&lt;br /&gt;&lt;br /&gt;After all, the basic concept of people search is quite good, though none of the current implementations can possibly deliver useful results than Google's basic searches. Grouping the info by people entity is not good enough to standout. None of them had designed a technology model that can harvest the most of human intelligence represented in the internet.  Focusing on blogs and social network sites is just a shortcut to one part of human intelligence online, a people search engine should do more on other web pages about people, and find more ways to harvest human intelligence.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;h3 style="font-weight: normal;"&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://radar.oreilly.com/archives/2007/04/why_im_so_excit.html"&gt;Why I'm so excited about Spock&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;/li&gt;&lt;li&gt;&lt;h1 style="font-weight: normal;"&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.techcrunch.com/2007/03/15/streakr-search-makes-social-networks-bare-all/" rel="bookmark" title="Permanent Link to Streakr Search Makes Social Networks Bare All"&gt;Streakr Search Makes Social Networks Bare All&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;/li&gt;&lt;li&gt;&lt;h2 style="font-weight: normal;" class="nod"&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://webworkerdaily.com/2007/09/20/testing-the-people-search-engines/"&gt;Testing the People Search Engines&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-7620576769912816721?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7620576769912816721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7620576769912816721'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/10/people-search-engines-for-who-and-what.html' title='People Search Engines for who and what'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-4299026557563219903</id><published>2007-10-15T19:56:00.000-07:00</published><updated>2007-10-15T22:21:21.374-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spock'/><category scheme='http://www.blogger.com/atom/ns#' term='search people'/><title type='text'>The People Search Engine</title><content type='html'>Tim O'Reilly had an &lt;a href="http://radar.oreilly.com/archives/2007/04/why_im_so_excit.html"&gt;interesting post about Spock&lt;/a&gt; the so called people search engine.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Disambiguating people, and then collapsing multiple sources of information into a single entry, or &lt;/span&gt;&lt;em style="font-style: italic;"&gt;entity resolution&lt;/em&gt;&lt;span style="font-style: italic;"&gt;, is part of the secret sauce of a people search engine. (More on that in a followup post, since &lt;span style="font-weight: bold;"&gt;Spock wants your help in making this aspect of their software even better&lt;/span&gt;.) Mechanisms for ranking people are also going to be critical.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;People are self-interest. Why do they want to help Spock in making this aspect of their software even better? then Spock will go IPO or acquisition by a  giant?  if they can not get something back in return.  Nowadays people get used to Web 2.0 web sites harvesting human intelligence through so called community efforts.  Wikipedia  is fine but Spock is another story.&lt;br /&gt;&lt;br /&gt;Two key points of harvesting people intelligence by Spock:&lt;br /&gt;1. Explicit requests for indexing a name, and implicit requests through scanning web-base address books like Gmail and Linkedin.&lt;br /&gt;2. Tagging&lt;br /&gt;&lt;br /&gt;Tim had some good observations about some weakness and potentials of Spock, as he said, Spock is still in its infancy.&lt;br /&gt;&lt;br /&gt;Spock has to find a win-win mechanism to make contributors feel rewarded in long run by their volunteering efforts.&lt;br /&gt;&lt;br /&gt;At the moment, the UI designs of Spock make me feel that I am just a contributor without ownership to the information I categorized and aggregated, though Spock told plans to support private tags, so I can manage my own people information spaces.&lt;br /&gt;&lt;br /&gt;After all, I see that the whole point is to harvest human intelligence to group search results by people entity, however, I really doubt tagging is the most accurate way to harvest intelligence and the most friendly way to lookup info, as the quality of tagging can easily decrease when the sizes grow.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"There's more than a semantic difference between&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; searching for an entity and searching for textual&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; results in documents." by commentator DEM&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Many commentators pointed out Google might be stepping into People Search Engine, as well as other online community hosts like MSN and Facebook etc. will. I think Google has the best position, as aggregating search results by people entity can be the end results of page ranking, and Google has been doing the best in this field.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-4299026557563219903?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4299026557563219903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4299026557563219903'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/10/people-search-engine.html' title='The People Search Engine'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-508499635030448966</id><published>2007-10-11T22:19:00.000-07:00</published><updated>2007-10-11T22:57:08.845-07:00</updated><title type='text'>Upcoming Call List</title><content type='html'>Tim had an interesting idea of &lt;a href="http://radar.oreilly.com/archives/2007/10/scheduled_calls_phone.html"&gt;upcoming call query&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Here's one that occurred to me yesterday: I'd love to be able to send (or sync via my calendar) a set of phone numbers for upcoming calls. Let's say I have an hour and a half drive to Silicon Valley. It's usually packed with scheduled calls. Since I'm driving, I either ask people to call me, or try to dial while I'm at a stop light, or write the number on a piece of paper that I can dial from, but it's all too often a death-defying feat to look up the number in my address book. How nice it would be to have a "scheduled calls" tab in my phone memory -- not just recently made, received, or missed calls, but planned calls.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I don't think we need a startup company to implement this. Tim's idea is straightforward and obvious from a busy man point of view.&lt;br /&gt;&lt;br /&gt;When those mobile phone manufacturers designed UI or carried out usability study, did they employ busy men for improving the UI? or they just employed only teens who enjoy playing complicated gadgets?&lt;br /&gt;&lt;br /&gt;Tim has given a basic description of the UI of a scheduled call list. I would like to design the UI of managing the call list.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Creating scheduled call list:&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Call out the address book/phone book.&lt;/li&gt;&lt;li&gt;Set the status to Schedule.&lt;/li&gt;&lt;li&gt;Call out a person record which may contain multiple phone numbers. Select a number and the number will go to the schedule list, rather than make a phone call. There is an option to input a note for the schedule call. If the person has only one phone number, calling out the person record will result in inserting the number into the schedule list.&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Making call form the scheduled call list:&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Call out the list.&lt;/li&gt;&lt;li&gt;Select a person, and the note will appear (so I can think a few seconds before the conversation).&lt;/li&gt;&lt;li&gt;Ring.&lt;/li&gt;&lt;/ol&gt;After the call, the item of the list will be marked as DONE. If I need a follow-up call to the same person, I may click a button to create a new item copied from the done item.&lt;br /&gt;&lt;br /&gt;After all, the items in the call list are calendar event, though I did not create them through a calendar program.  Those done calls are done events with timestamps. The items should be part of my calendar either through exporting or though the creation of the schedule calls.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-508499635030448966?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/508499635030448966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/508499635030448966'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/10/upcoming-call-list.html' title='Upcoming Call List'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-1583274531229139130</id><published>2007-09-20T18:20:00.000-07:00</published><updated>2007-09-20T18:30:29.171-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ebay'/><title type='text'>EBay Tools on Desktop</title><content type='html'>No matter how powerful AJAX and Flash of Web 2.0 sites can be, they can not match local desktop programs regarding to usability and performance when dealing very rich functions and data.&lt;br /&gt;&lt;br /&gt;This is why EBay and some 3rd party vendors have provided some desktop programs of using EBay web services.&lt;br /&gt;&lt;br /&gt;I just read PC Authority (October 2007), and find the following rating against EBay tools:&lt;br /&gt;&lt;br /&gt;Munnin (USD19)&lt;br /&gt;www.munnin.com&lt;br /&gt;******&lt;br /&gt;&lt;br /&gt;Turbo Lister (Free)&lt;br /&gt;www.ebay.com&lt;br /&gt;*****&lt;br /&gt;&lt;br /&gt;Hammer Snipe Powertool (Free)&lt;br /&gt;www.hammertap.com/powertool&lt;br /&gt;*****&lt;br /&gt;&lt;br /&gt;Search GNOME (free)&lt;br /&gt;www.searchgnome.com&lt;br /&gt;****&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-1583274531229139130?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/1583274531229139130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/1583274531229139130'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/09/ebay-tools-on-desktop.html' title='EBay Tools on Desktop'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-3895301405538944420</id><published>2007-09-10T20:29:00.000-07:00</published><updated>2007-09-10T21:52:23.338-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSV'/><title type='text'>CSV2CSV Solutions</title><content type='html'>I am thinking of CSV2CSV solutions which will convert source CSV to target CSV. As Comma Separated Value files has been becoming more popular in exchanging Web data by end users. Though ideally it is better that the service providers can exchange data more directly, however, due to competition and enormous amount of services available, more or less the data exchange has to be done by end user twisting CSV files.&lt;br /&gt;&lt;br /&gt;For example, to import Yahoo address book to Gmail address book, you need to export Yahoo one to Y-CSV, then go to Gmail Contacts and run Import. The import function of Gmail had done a pretty good job at recognizing common header fields (name, email address, birthday, etc.), so mostly you don't need to worry about mapping between fields of two CSV files, as the Gmail Contacts importer has done the job for you. There are also online services like &lt;a href="www.trueswitch.com"&gt;TrueSwitch&lt;/a&gt; exchanging info between online service providers.&lt;br /&gt;&lt;br /&gt;However, there are still scenarios that fine-tuned mapping will do better data transferred. For examples:&lt;br /&gt;1. Full name to surname, given name and middle name. Names to full name.&lt;br /&gt;2. European generally put surname as last name, and eastern Asian mostly have surname as first name. So, when analyzing a full name to names, the importer needs to more fine gain jobs.&lt;br /&gt;3. CSV to CSV can be used for exchanging other info rather than contacts.&lt;br /&gt;&lt;br /&gt;I would expect generic CSV2CSV program had been available long ago. Searching the internet revealed the following:&lt;br /&gt;&lt;table class="t bt" border="0" cellpadding="0" cellspacing="0" width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td nowrap="nowrap"&gt;&lt;span id="sd"&gt; Web &lt;/span&gt;&lt;/td&gt;&lt;td align="right" nowrap="nowrap"&gt;&lt;span style=""&gt;Results &lt;b&gt;1&lt;/b&gt; - &lt;b&gt;10&lt;/b&gt; of about &lt;b&gt;88&lt;/b&gt; for &lt;b&gt;csv2csv&lt;/b&gt;.  (&lt;b&gt;0.13&lt;/b&gt; seconds) &lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;    &lt;!--a--&gt;&lt;div class="g"&gt;&lt;!--m--&gt;&lt;h2 class="r"&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.blazingfibre.net/manuals/csv2csv.htm" class="l" onmousedown="return clk(0,'','','res','1','')"&gt;&lt;b&gt;csv2csv&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="j"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;/b&gt;&lt;nobr&gt;&lt;span class="bl"&gt;&lt;/span&gt;&lt;/nobr&gt;&lt;/span&gt;&lt;!--n--&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt; &lt;div class="g"&gt;&lt;!--m--&gt;&lt;h2 class="r"&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.convertzone.com/all/kw-csv%20to%20csv.htm" class="l" onmousedown="return clk(0,'','','res','3','')"&gt;Code4DotNet&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 class="r"&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.convertzone.com/all/kw-csv%20to%20csv.htm" class="l" onmousedown="return clk(0,'','','res','3','')"&gt;convert csv to csv, &lt;b&gt;csv2csv&lt;/b&gt;, csvtocsv, only&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="j"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;!--n--&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt; &lt;div class="g"&gt;&lt;!--m--&gt;&lt;/div&gt; &lt;!--m--&gt;&lt;h2 class="r"&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://lorance.freeshell.org/csvutils/" class="l" onmousedown="return clk(0,'','','res','5','')"&gt;Lorance Stinson : CSV Utilities&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;span style=""&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;I had the quick review on them, and they all look too legacy or too technical.&lt;br /&gt;&lt;br /&gt;What I expect is something supporting the following operations, I would call it CSV2CSV Mapper.&lt;br /&gt;1. Export legacy data to CSV. If the CSV does not have header, I will need to add manually.&lt;br /&gt;2. Draft an empty CSV file with target header.&lt;br /&gt;3. RunCSV2CSV Mapper, and load both CSV files. Two lists of header are shown.&lt;br /&gt;4. I can draw lines between two lists to make mapping. One to one, many to one with separators, one to many with regular expressions.&lt;br /&gt;5. For analyzing full name into names, I would like to have a special engine to do the job.&lt;br /&gt;&lt;br /&gt;The user interfaces for step 1 and 2 may be further developed for broader users, while editing text file may be preferred by some.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-3895301405538944420?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/3895301405538944420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/3895301405538944420'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/09/csv2csv-solutions.html' title='CSV2CSV Solutions'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-7156820593276757376</id><published>2007-09-04T20:48:00.000-07:00</published><updated>2007-09-04T23:22:14.478-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><title type='text'>Who Killed the Virtual Case File?</title><content type='html'>My colleague Leo just recommended me a lengthy article from IEEE  &lt;a href="http://www.spectrum.ieee.org/print/1455"&gt;Who Killed the Virtual Case File?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A typical case of IT project failure repeated again and again in gigantic organizations around the worlds.&lt;br /&gt;&lt;br /&gt;I agree most conclusions that the article hinted, with basic knowledge or common sense of project management.&lt;br /&gt;&lt;br /&gt;My key question is, why other gigantic organizations like US Air Force did not fall into the same trap created by the victim?&lt;br /&gt;&lt;br /&gt;My explanations:&lt;br /&gt;1. Culture of secrecy of FBI. Habits of blocking info flow according to pay rates, even in project development, resulted in poor communication leading to project failure.&lt;br /&gt;&lt;br /&gt;2. Career practice. Almost all employees in the cooperate ladder have to care much about details which are essential to cases. This eventually reduced their ability of abstraction and global view.&lt;br /&gt;&lt;br /&gt;3. Lack of training.  Executive officers did not get proper trainings for new posts thus miss the  opportunities of getting updated knowledges and skills for new jobs.&lt;br /&gt;&lt;br /&gt;While culture of secrecy exists in all arm forces and intelligent agencies,  and  career practice is inheritance, I regard that lack of training to executive officers is top of all causes to the project failures.&lt;br /&gt;&lt;br /&gt;With proper training, the officers may adjust the culture of secrecy and make it not harm the project development. With proper training, employees may get compensation for weakness of global view, and the executives may organize people with detailed view and global view together and make them complement each other. With proper training, we know we need proper training all the time.&lt;br /&gt;&lt;br /&gt;What is proper training? I would let others answer, (Out There).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-7156820593276757376?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7156820593276757376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7156820593276757376'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/09/who-killed-virtual-case-file.html' title='Who Killed the Virtual Case File?'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-4425235176759549068</id><published>2007-08-27T21:16:00.000-07:00</published><updated>2007-08-27T21:54:42.868-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='white pages'/><category scheme='http://www.blogger.com/atom/ns#' term='address book'/><title type='text'>Publish Address Book as Private White Pages</title><content type='html'>Some people want to publish address book as private white pages on the Web from time to time, especially when traveling overseas without laptop, mobile phone or PDA, or in scenario that the digital gadgets may get stolen . While printing on paper can be a good option, paper or hand-writing notebook may be lost as well. So when traveling overseas, it is handy to keep contacts on paper, and it is even more reliable to have private white pages on the Web as backup.&lt;br /&gt;&lt;br /&gt;I just visited a product called &lt;a href="http://www.macupdate.com/info.php/id/9858/address-book-publisher"&gt;Address Book Publisher&lt;/a&gt;.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Address Book Publisher was designed for people who wish to be able to see their "Apple Adddress Book" contacts via a web browser from anywhere in the world. &lt;/span&gt;&lt;p style="font-style: italic;"&gt;Address Book Publisher is simple to use. One click of a button and AB Publisher will import all your contact data including photos of your contacts/friends and export it to html format ready for uploading to your own web server or .Mac account. &lt;/p&gt;&lt;span style="font-style: italic;"&gt;Address Book Publisher can export all your important information. i.e name, phone number, email, .Mac e-mail, website address and home address. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On Windows PC, you may have &lt;a href="http://www.fonlow.com/opencontacts"&gt;Open Contacts&lt;/a&gt; which provide such functions since early versions of 1.x. In addition to some predefined templates of exporting to HTML, you may modify or create your own XSLT to get your favorite web page layouts.&lt;br /&gt;&lt;br /&gt;Steps:&lt;br /&gt;1. Select contacts you want to publish.&lt;br /&gt;2. Go [Main menu -&gt; Tools -&gt; Export to HTML ( or phones, or with XSLT)]&lt;br /&gt;3. Save the result in a HTML file then publish to a Web site accessible by only you.&lt;br /&gt;&lt;br /&gt;There are quite a few ways of publishing:&lt;br /&gt;1. Send the HTML file to your Web mail. And for easy pickup, you may either tag the mail or put it to a folder.&lt;br /&gt;2. If you have a personal web site, you may set access control upon the HTML page.&lt;br /&gt;3. There are many Web services like &lt;a href="http://pages.google.com/"&gt;Google Pages&lt;/a&gt; allow you upload a page and set access control.&lt;br /&gt;&lt;br /&gt;Of course, you may import your contacts into your Web mail account. Just be sure, that your web mail service allow contact records without Email addresses, since you may have some contacts with phone numbers only.&lt;br /&gt;&lt;br /&gt;By the way, if you still prefer using MS Outlook or Mozilla Thunder for managing contact info, you may still use Open Contacts as a transporter to do the job, since Open Contacts can import almost every data fields of most of popular address book programs/functions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-4425235176759549068?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4425235176759549068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4425235176759549068'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/08/publish-address-book-as-private-white.html' title='Publish Address Book as Private White Pages'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-8973407108369513863</id><published>2007-08-16T22:48:00.000-07:00</published><updated>2008-05-07T22:12:15.214-07:00</updated><title type='text'>My Comments at other blogs</title><content type='html'>&lt;a href="http://googlesystem.blogspot.com/"&gt;Google Operating System&lt;/a&gt;, Unofficial new and tips about Google is one of my favorite site, and I have made &lt;a href="http://www.google.com.au/search?hl=en&amp;amp;as_qdr=all&amp;amp;sa=X&amp;amp;oi=spell&amp;amp;resnum=0&amp;amp;ct=result&amp;amp;cd=1&amp;amp;q=andy+wong+site:http://googlesystem.blogspot.com/&amp;amp;spell=1"&gt;some comments&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.google.com.au/search?hl=en&amp;amp;as_qdr=all&amp;amp;sa=X&amp;amp;oi=spell&amp;amp;resnum=0&amp;amp;ct=result&amp;amp;cd=1&amp;amp;q=andy+wong+site:http://radar.oreilly.com/&amp;amp;spell=1"&gt;Comments at O'Reilly Radar,&lt;/a&gt; Tim and his team have a lot updated and in-deep reviews on latest IT issues.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogoscoped.com/forum/posts-by-Andy+Wong.html"&gt;Comments at Blogoscoped&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.google.com/search?hl=en&amp;amp;as_q=+techcrunch&amp;amp;as_epq=andy+wong+&amp;amp;as_oq=&amp;amp;as_eq=&amp;amp;num=10&amp;amp;lr=&amp;amp;as_filetype=&amp;amp;ft=i&amp;amp;as_sitesearch=www.techcrunch.com&amp;amp;as_qdr=all&amp;amp;as_rights=&amp;amp;as_occt=any&amp;amp;cr=&amp;amp;as_nlo=&amp;amp;as_nhi=&amp;amp;safe=images"&gt;&lt;br /&gt;Comments at Techcrunch&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I think I need to find out an elegant and fashionable way of tracing back my comments made on blogs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-8973407108369513863?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/8973407108369513863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/8973407108369513863'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/08/my-comments-at-google-operating-system.html' title='My Comments at other blogs'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-7980346710390330452</id><published>2007-08-16T19:56:00.000-07:00</published><updated>2007-08-16T20:27:25.841-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vCard'/><category scheme='http://www.blogger.com/atom/ns#' term='hcard'/><category scheme='http://www.blogger.com/atom/ns#' term='xslt'/><title type='text'>Redundant usage of hCard</title><content type='html'>When I evaluated how to support hCard, I visited a lot web sites that used hCard. I found some web sites mis-understood the real purpose of hCard: Give your HTML web pages some semantic meanings of address book.&lt;br /&gt;&lt;br /&gt;You embed some hCard class tags into your normal HTML elements. They are unseen by readers generally, and are for Web spiders or Web browsers.&lt;br /&gt;&lt;br /&gt;Here's an example how redundant HTML content was used to introduce hCard.&lt;br /&gt;http://www.iworkindustries.com/contact/&lt;br /&gt;&lt;br /&gt;The web page lists some contact info, but without hCard tags. You need to access&lt;br /&gt;http://www.iworkindustries.com/contact/vcard-monique&lt;br /&gt;to access a web page with hCard tags, created by an online hCard creator.&lt;br /&gt;&lt;br /&gt;Then the same contact info were represented twice visually, with 2 styles.  Quite a bit redundant. Providing a direct vCard file download is more elegant and efficient than this implementation.&lt;br /&gt;&lt;br /&gt;An online hCard creator can generally give you only one style of HTML embedded with hCard tags. If you want your own style of presenting contact info in HTML, you need to manually embed hCard tags into your HTML tags.&lt;br /&gt;&lt;br /&gt;If you don't want to learn technical details of hCard, you may just reformat the HTML tags created by a hCard generator. &lt;br /&gt;&lt;br /&gt;If you have large amount of contact info to publish and the info may be updated from time to time, you may want a more automatic way. For example, if you may obtain contact info in XML format, like those that Open Contacts and Windows Vista can provide, you may write a XSLT style sheet file to transform the XML to HTML with your own style.&lt;br /&gt;&lt;br /&gt;I think an online hCard creator should provide styles for the end users. Technically it should not be difficult:&lt;br /&gt;After a user fills in contact info or import a vCard file, the Web program will store the data in XML format (like &lt;a href="http://www.w3.org/TR/vcard-rdf" class="external text" title="http://www.w3.org/TR/vcard-rdf" rel="nofollow"&gt;Representing vCard Objects in RDF/XML&lt;/a&gt;, or &lt;a href="http://www.jabber.org/jeps/jep-0054.html" class="external text" title="http://www.jabber.org/jeps/jep-0054.html" rel="nofollow"&gt;XML VCard specification&lt;/a&gt;), then use a specified style sheet to render HTML.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-7980346710390330452?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7980346710390330452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7980346710390330452'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/08/redundant-usage-of-hcard.html' title='Redundant usage of hCard'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-376962647080750571</id><published>2007-08-16T15:24:00.000-07:00</published><updated>2007-08-16T16:57:08.097-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hcard'/><category scheme='http://www.blogger.com/atom/ns#' term='skype'/><category scheme='http://www.blogger.com/atom/ns#' term='address book'/><category scheme='http://www.blogger.com/atom/ns#' term='xslt'/><title type='text'>hCard.xsl Explained</title><content type='html'>&lt;a href="http://andywong9000.googlepages.com/hcard.xsl"&gt;hCard.xsl&lt;/a&gt; is distributed with Open Contacts v4.1.7 and upward. This XSLT is for rendering selected contacts to HTML with hCard tags. You may either use the function at [Main manual -&gt; Tools -&gt; Export Contacts with XSLT], or use other methods to merge an exported XML file with the style sheet file.&lt;br /&gt;&lt;br /&gt;It is assumed that you know how to write HTML and XSLT. It is likely that you will modify hCard.xsl or write your own style sheet file to publish contact info according your own privacy policy. I would give you a few hints:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;When you use the built-in function of merging XSLT, Open Contacts always provide info of field action type in internal XML stream.&lt;/li&gt;&lt;li&gt;When exporting selected contacts to XML files, you may use "Export to XML with Options" and check "Field Action Type".&lt;/li&gt;&lt;li&gt;You may test a field through either field name (attribute of a field element) or field action type.&lt;/li&gt;&lt;li&gt;While hCard.xsl has similar style with defaultAdvanced.xsl, you may surely define your own style from scratch.&lt;/li&gt;&lt;li&gt;There are many ways of querying the XML elements. While hCard.xsl use for-each to loop, you may use absolute paths, and support field subtypes of vCard with HTML markups like this: "&lt;span style="font-style: italic;"&gt;&lt;abbr class="type" title="pref,home"&gt;&lt;abbr class="type" title="pref,home"&gt;Home:&lt;/abbr&gt;&lt;/abbr&gt;&lt;/span&gt;"&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Here's an example of HTML rendered by hCard.xsl from XML of Open Contacts:&lt;br /&gt;&lt;br /&gt;&lt;div class="vcard"&gt;    &lt;table id="table2" border="0" width="100%"&gt;     &lt;tbody&gt;&lt;tr&gt;      &lt;td width="80%"&gt;       &lt;span style=";font-family:Times New Roman;font-size:100%;"  &gt;&lt;b&gt;&lt;span class="fn"&gt;Andy Will&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;      &lt;/td&gt;      &lt;td&gt;&lt;br /&gt;&lt;/td&gt;     &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;        &lt;div style="margin-left: 15px;"&gt;&lt;b&gt;&lt;span style=";font-family:Times New Roman;font-size:85%;"  &gt;Personal&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;    &lt;table id="table1" border="0" cellpadding="0" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;&lt;tr&gt;      &lt;td width="15"&gt;&lt;br /&gt;&lt;/td&gt;      &lt;td bg="" style="color: rgb(195, 217, 255);" width="80"&gt;       &lt;span style=";font-family:Times New Roman;font-size:85%;"  &gt;Phone:                             &lt;/span&gt;      &lt;/td&gt;      &lt;td bg="" style="color: rgb(224, 236, 255);"&gt;       &lt;span style="font-size:100%;"&gt;&lt;span class="tel"&gt;81667181&lt;/span&gt;&lt;/span&gt;      &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;&lt;/tr&gt;     &lt;tr&gt;      &lt;td width="15"&gt;&lt;br /&gt;&lt;/td&gt;      &lt;td bg="" style="color: rgb(195, 217, 255);" width="80"&gt;       &lt;span style=";font-family:Times New Roman;font-size:85%;"  &gt;Email:                             &lt;/span&gt;      &lt;/td&gt;      &lt;td bg="" style="color: rgb(224, 236, 255);"&gt;       &lt;span style="font-size:100%;"&gt;&lt;a class="email" href="mailto:andyw@there.com"&gt;andyw@there.com&lt;/a&gt;&lt;/span&gt;      &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;      &lt;td width="15"&gt;&lt;br /&gt;&lt;/td&gt;      &lt;td bg="" style="color: rgb(195, 217, 255);" width="80"&gt;       &lt;span style=";font-family:Times New Roman;font-size:85%;"  &gt;Skype:                             &lt;/span&gt;      &lt;/td&gt;      &lt;td bg="" style="color: rgb(224, 236, 255);"&gt;       &lt;span style="font-size:100%;"&gt;&lt;a href="skype:Someone123"&gt;Someone123&lt;/a&gt;&lt;/span&gt;      &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;      &lt;td width="15"&gt;&lt;br /&gt;&lt;/td&gt;      &lt;td bg="" style="color: rgb(195, 217, 255);" width="80"&gt;       &lt;span style=";font-family:Times New Roman;font-size:85%;"  &gt;Yahoo:                             &lt;/span&gt;      &lt;/td&gt;      &lt;td bg="" style="color: rgb(224, 236, 255);"&gt;       &lt;span style="font-size:100%;"&gt;&lt;a class="url" href="ymsgr:sendIM?someone123@yahoo.com"&gt;someone123@yahoo.com&lt;/a&gt;&lt;/span&gt;      &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;&lt;/tr&gt;     &lt;tr&gt;      &lt;td width="15"&gt;&lt;br /&gt;&lt;/td&gt;      &lt;td bg="" style="color: rgb(195, 217, 255);" width="80"&gt;       &lt;span style=";font-family:Times New Roman;font-size:85%;"  &gt;Address:&lt;/span&gt;      &lt;/td&gt;      &lt;td bg="" style="color: rgb(224, 236, 255);"&gt;       &lt;span style="font-size:100%;"&gt;&lt;span class="adr"&gt;&lt;span class="extended-address"&gt;Unit 20, Building B&lt;/span&gt;&lt;span class="street-address"&gt;1100  North Dustin  Lane&lt;/span&gt;, &lt;span class="locality"&gt;Chandler&lt;/span&gt;, &lt;span class="region"&gt;Arizona&lt;/span&gt;         &lt;span class="postal-code"&gt;85226&lt;/span&gt;, &lt;span class="country-name"&gt;US&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;      &lt;/td&gt;     &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;    &lt;div class="note" style="margin-left: 15px;"&gt;         &lt;/div&gt;    &lt;div style="margin-left: 15px;"&gt;&lt;b&gt;&lt;span style=";font-family:Times New Roman;font-size:85%;"  &gt;Work&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;    &lt;table id="table1" border="0" cellpadding="0" cellspacing="0" width="100%"&gt;     &lt;tbody&gt;&lt;tr&gt;      &lt;td width="15"&gt;&lt;br /&gt;&lt;/td&gt;      &lt;td bg="" style="color: rgb(195, 217, 255);" width="80"&gt;       &lt;span style=";font-family:Times New Roman;font-size:85%;"  &gt;Phone:                             &lt;/span&gt;      &lt;/td&gt;      &lt;td bg="" style="color: rgb(224, 236, 255);"&gt;       &lt;span style="font-size:100%;"&gt;&lt;span class="tel"&gt;20 828878&lt;/span&gt;&lt;/span&gt;      &lt;/td&gt;     &lt;/tr&gt;     &lt;tr&gt;&lt;/tr&gt;     &lt;tr&gt;      &lt;td width="15"&gt;&lt;br /&gt;&lt;/td&gt;      &lt;td bg="" style="color: rgb(195, 217, 255);" width="80"&gt;       &lt;span style=";font-family:Times New Roman;font-size:85%;"  &gt;Address:&lt;/span&gt;      &lt;/td&gt;      &lt;td bg="" style="color: rgb(224, 236, 255);"&gt;       &lt;span style="font-size:100%;"&gt;&lt;span class="adr"&gt;&lt;span class="street-address"&gt;800 W Tyson St,Chandler, AZ 85225&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;      &lt;/td&gt;     &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;    &lt;div class="note" style="margin-left: 15px;"&gt;     &lt;span style="color: rgb(128, 0, 0);font-size:85%;" &gt;Work on only Monday and Thursday&lt;/span&gt;    &lt;/div&gt;       &lt;/div&gt;&lt;br /&gt;Please note, because this page is hosted by Blogger, the style is overwritten by Blogger. So you may see different style in your case.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;References:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.w3.org/TR/2007/REC-xslt20-20070123/"&gt;XSL Transformations (XSLT)     Version 2.0&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.w3.org/TR/2007/REC-xpath-functions-20070123/"&gt;XQuery 1.0 and XPath 2.0 Functions and Operators&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.w3.org/TR/2007/REC-xquery-semantics-20070123/"&gt;XQuery 1.0 and XPath 2.0 Formal Semantics&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://microformats.org/wiki/hcard"&gt;hCard Wiki&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.xfront.com/microformats/hCard.html"&gt;hCard Tutorial in slide show&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://suda.co.uk/projects/microformats/cheatsheet/microformats.cheatsheet.pdf"&gt;&lt;span style="font-size:85%;"&gt;hCard cheat sheet&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-376962647080750571?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/376962647080750571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/376962647080750571'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/08/hcardxsl-explained.html' title='hCard.xsl Explained'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-5310316051900412509</id><published>2007-08-15T20:52:00.001-07:00</published><updated>2007-08-29T22:54:08.178-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vCard'/><category scheme='http://www.blogger.com/atom/ns#' term='hcard'/><category scheme='http://www.blogger.com/atom/ns#' term='address book'/><category scheme='http://www.blogger.com/atom/ns#' term='MicroFormats'/><title type='text'>hCard and Address Book Programs</title><content type='html'>&lt;a href="http://microformats.org/wiki/hcard"&gt;hCard&lt;/a&gt; gradually got acceptances from Web developer communities, as some major players like Google, Yahoo and Firefox etc. showed&lt;a href="http://googlesystem.blogspot.com/2007/08/google-maps-adds-support-for-hcard.html"&gt; their supports&lt;/a&gt; to hCard.&lt;br /&gt;&lt;br /&gt;I first heard of hCard/MicroFormats in 2005 when I evaluated existing standards of address book and contact management. At that time, the official home pages did not give much information of the schema. Though the example driven wiki pages I don't mind, however, there were very few examples. Overall, I still thought that Microformats is very good for introducing semantic meanings to the Web, creating some useful blocks of Semantic Web.&lt;br /&gt;&lt;br /&gt;While computer intelligence and Semantic Web are all long hard stories to tell, well defined usages of these concepts will surely bring conveniences to end users. Obviously Google had shared such vision with Microformats' developers.&lt;br /&gt;&lt;br /&gt;I re-visted MicroFormats' hCard and decided to support it in &lt;a href="http://www.fonlow.com/opencontacts"&gt;Open Contacts&lt;/a&gt;, making it easier to publish selected contact info to the Web.&lt;br /&gt;&lt;br /&gt;As Open Contacts intensively uses XML, so it is relatively easy to support hCard without significant programing effort. All I did was to develop an XSLT style sheet to transform Open Contacts' XML into HTML with hCard tags. So far the the result is quite positive.&lt;br /&gt;&lt;br /&gt;To export selected contacts to hCard, do the following steps:&lt;br /&gt;1. Select contacts from the People List or the search window, and run function at [Main menu -&gt; Tools -&gt; Export Contacts with XSLT]&lt;br /&gt;2. Select an XSLT file for example &lt;a href="http://andywong9000.googlepages.com/hcard.xsl"&gt;hCard.xsl&lt;/a&gt;.&lt;br /&gt;3. Define a HTML file to save, for example hCard.html.&lt;br /&gt;4. Copy some results in hCard.html to your production web pages.&lt;br /&gt;&lt;br /&gt;You may modify &lt;a href="http://andywong9000.googlepages.com/hcard.xsl"&gt;hCard.xsl&lt;/a&gt; according to your own privacy policy.&lt;br /&gt;&lt;br /&gt;hCard serves for 2 types of applications:&lt;br /&gt;1. Give web spiders semantic meanings to mine contact info.&lt;br /&gt;2. Assist a Web Browser to highlight contact info, and make easy to import contact info from a web page.&lt;br /&gt;&lt;br /&gt;You may want to test the correctness of the XSLT file using a Web browser like Mozilla Firefox.  You may download an add-on &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/4106"&gt;Operator&lt;/a&gt;. This program can pick up hCard clusters in a Web page and list these contacts in the Tool bar area. So you may export contact info embedded into local vCard files, then you may verify whether the vCard files contain info you want to publish.&lt;br /&gt;&lt;br /&gt;If you want to publish some contact info in your MS Outlook, Mozilla Thunderbird, or Eudora etc., you may first import them to Open Contacts and then transform them to HTML.&lt;br /&gt;&lt;br /&gt;Some other interesting posts regarding the business cases of MicroFormats:&lt;br /&gt;&lt;a href="http://adactio.com/journal/1325"&gt;Big time&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-5310316051900412509?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/5310316051900412509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/5310316051900412509'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/08/hcard-and-address-book-programs.html' title='hCard and Address Book Programs'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-7304361070915349387</id><published>2007-08-06T18:42:00.000-07:00</published><updated>2007-08-06T18:51:11.481-07:00</updated><title type='text'>Trap that make you feel less guilt for environment</title><content type='html'>Trap that make you feel less guilt for environment&lt;br /&gt;&lt;br /&gt;My colleague Leo  sent me an Email&lt;br /&gt;=================&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Wonder if anyone has fallen for this kind of crap trap:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;http://www.brisbanetimes.com.au/news/web/search-site-cashes-in-on-ecoguilt/2007/08/01/1185647951527.html&lt;/span&gt;&lt;br /&gt;&lt;h1 style="font-style: italic;"&gt;&lt;span style="font-size:85%;"&gt;Search site cashes in on eco-guilt&lt;/span&gt;&lt;/h1&gt;&lt;span style="font-style: italic;"&gt;Seems to be the Hallmark of a lot of Internet Proclamation.&lt;/span&gt;&lt;br /&gt;===========================================&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;My response was as following:&lt;br /&gt;=======================================&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The only way to save energy consumsion is to turn it off, when you don't use it. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;If you still remember high school physics, you will see that a light bulb emits less than 10% of electricity consumed to light photon, 90% become heat. Both CRT and LCD were not designed to be a source of light, thus bright (lighter ) background does not have significant more energy consumsion. Reasonablly CRT is closer to a light bulb, thus you may save a few more watts. However, why not just use LCD that consume much less energy than CRT?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Neverthelss, you don't need to log to that web site to save a few watts of energy, you just need an add-on for your favoriate browser which will re-render the page.&lt;/span&gt;&lt;br /&gt;=====================================================&lt;br /&gt;&lt;br /&gt;Another colleague responded:&lt;br /&gt;=========================&lt;br /&gt;&lt;span style="font-style: italic;"&gt;1) The LCD backlight is always on regardless of the color being displayed.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;2) It actually takes more energy to make an LCD pixel black than to leave it transparent. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;It takes little energy one way or the other - it's a light polarisation effect so the TFT just stores the pixel at a certain degree of "on"-ness. It's not the colour on a TFT that consumes power, but how often you change the image - each time you have to charge and dump the TFT to open and close the LCD shutter you are pumping electricity.&lt;/span&gt;&lt;br /&gt;=========================================&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-7304361070915349387?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7304361070915349387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7304361070915349387'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/08/trap-that-make-you-feel-less-guilt-for.html' title='Trap that make you feel less guilt for environment'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-4577519773835615359</id><published>2007-07-29T15:47:00.000-07:00</published><updated>2007-07-29T16:12:25.167-07:00</updated><title type='text'>What is your plan when failure of web services happen?</title><content type='html'>I just read an interesting article about data security in case of service failure&lt;br /&gt;&lt;h3&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://radar.oreilly.com/archives/2007/07/mistakes_will_b.html" target="_self" class="title"&gt;Failure Happens: A summary of the power outage at 365 Main&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt; discussing how a major data center failed leading outage of a few popular web sites hosted. The follow-comments were also very good giving complementation and inspirations.&lt;br /&gt;&lt;br /&gt;Nowadays, literate internet users depend on many web services, in particular web 2.0 services like Yahoo Mail, Gmail, Web calendar, Facebook and MySpace etc. People live with them, and people live in them.  Though most of these services are pretty reliable most of the time, what will be your own plan and tactic when the net services fail for whatever reasons including those mentioned in the article above?&lt;br /&gt;&lt;br /&gt;Many of the web services natively live with web or the internet, like Facebook and Email. If the such net services fail, there's nothing you can do because there's no alternative platforms. However, for contact info and schedule which you need most when the net services fail, should be accessible outside the net, so you can telephone your contacts, as telephone infrastructure which was the major communication platform, now has become alternative/redundant platform along side the internet platform.  Local storage of contact info and schedule etc. may exist on paper, PDA or PC.&lt;br /&gt;&lt;br /&gt;Your in-car GPS may access handy info through the internet, however, should still be operational when the net services are down.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-4577519773835615359?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4577519773835615359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4577519773835615359'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/07/what-is-your-plan-when-failure-of-web.html' title='What is your plan when failure of web services happen?'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-542105938312822400</id><published>2007-07-24T17:45:00.000-07:00</published><updated>2007-07-24T18:40:18.553-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social networking'/><category scheme='http://www.blogger.com/atom/ns#' term='identify fraud'/><category scheme='http://www.blogger.com/atom/ns#' term='family'/><title type='text'>Prevent identity fraud when using online social networking</title><content type='html'>Very often when you rang a service department of an organization of government or cooperate, you just needed providing your name, address, birthday and mother's maiden name in order to identify you before getting service. That is, any one who can speak your name, address, birthday and your mother's maiden name could be identified as you. Social security is easy to get, and may not be the case outside US.&lt;br /&gt;&lt;br /&gt;You might have read a lot articles about identity thieves, like &lt;a href="http://articles.moneycentral.msn.com/SavingandDebt/TravelForLess/Don%27tLetIdentityThievesRuinYourTrip.aspx"&gt;this basics&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;To protect yourself while doing online social networking, you are not going to let the whole world know enough to make identity fraud.&lt;br /&gt;&lt;br /&gt;For example, if your mother has a blog talking a lot about herself, or your son has a blog, and you disclose your relationships to these close family members, then the world can easily know your mother maiden name, or your son's mother maiden name (Presumably you are female) so your son's identity will be at risk.&lt;br /&gt;&lt;br /&gt;So, don't overuse online social networking. Your close social circle already knew your family, so there's no need to tell through online social networking.  No matter how good an online social networking program work, it is always good and essential to handle your family issues in real person contact.&lt;br /&gt;&lt;br /&gt;For example, when you store your family members  contact info in an address book program, online, or off-line. It is not necessary to setup a category called "Family", you may just have put the contact info into the "Relative" category as you can pick them up from this category quickly. So if you lost your address book database to a thief, it will be harder to guess which ones are your close family member.&lt;br /&gt;&lt;br /&gt;Your friends might want to record the relationships of your family members in their address books. Don't risk publishing the relationships online. Just let them do it manually, and also advise them to take caution when doing so, otherwise, data mining on such cross references will put everyone at risk.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-542105938312822400?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/542105938312822400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/542105938312822400'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/07/prevent-identity-fraud-when-using.html' title='Prevent identity fraud when using online social networking'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-730364004992028258</id><published>2007-07-16T21:51:00.000-07:00</published><updated>2007-07-16T23:45:59.711-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='network'/><category scheme='http://www.blogger.com/atom/ns#' term='desktop'/><title type='text'>Where's the place of desktop applications under the strong wind of Web 2.0?</title><content type='html'>The following is a quote from &lt;a href="http://googlesystem.blogspot.com/2006/11/network-will-truly-be-computer.html"&gt;GoogleSystem&lt;/a&gt; and &lt;a href="http://www.economist.com/theworldin/business/displayStory.cfm?story_id=8133511&amp;d=2007"&gt;The Economist&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;Google's CEO, Eric Schmidt, wrote some interesting things in &lt;/span&gt;&lt;a style="color: rgb(102, 0, 0);" href="http://www.economist.com/theworldin/business/displayStory.cfm?story_id=8133511&amp;d=2007"&gt;The Economist&lt;/a&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;, and most of his beliefs are reflected in Google's plans.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote style="color: rgb(102, 0, 0);"&gt;The internet is much more than a technology—it's a completely different way of organizing our lives. &lt;span style="font-weight: bold;"&gt;But its success is built on technological superiority: protocols and open standards that are ingenious in their simplicity. Time after time they have trounced rival telecommunications standards that made perfect commercial sense to companies but no practical sense to consumers. &lt;/span&gt;(...)&lt;br /&gt;&lt;br /&gt;In 2007 we'll witness the increasing dominance of open internet standards. As web access via mobile phones grows, these standards will sweep aside the proprietary protocols promoted by individual companies striving for technical monopoly. Today's desktop software will be overtaken by internet-based services that enable users to choose the document formats, search tools and editing capability that best suit their needs. (...)&lt;br /&gt;&lt;br /&gt;Today we live in the clouds. We're moving into the era of "cloud" computing, with information and applications hosted in the diffuse atmosphere of cyberspace rather than on specific processors and silicon racks. The network will truly be the computer. (...)&lt;br /&gt;&lt;br /&gt;The lesson is compelling: put simple, intuitive technology in the hands of users and they will create content and share it. The fastest-growing parts of the internet all involve direct human interaction.(...)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana,geneva,arial,sans serif;font-size:-1;"&gt;&lt;span style="font-weight: bold;"&gt;Cloud computing is hardly perfect: internet-based services aren’t always reliable and there is often no way to use them offline. But the direction is clear. Simplicity is triumphing over complexity. Accessibility is beating exclusivity. &lt;/span&gt;Power is increasingly in the hands of the user. (...)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-family:verdana,geneva,arial,sans serif;font-size:-1;"  &gt;The lesson is compelling: put simple, intuitive technology in the hands of users and they will create content and share it. The fastest-growing parts of the internet all involve direct human interaction.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:verdana,geneva,arial,sans serif;font-size:-1;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;This have been happening, and this is inevitable.  You probably agree.&lt;br /&gt;&lt;br /&gt;If you have been a developer of desktop applications and do not have plan yet to develop more Web 2.0 applications, you are not going to think that Web 2.0 is a threat to your business.  As many observers would say that Web 2.0 applications are not going to replace desktop applications. The computing platforms have been expanding and extending, since the network have been becoming the computer. Web 2.0 is naturally inhabiting  the new formed lands of the Internet, it also replace some inadequate  implementations of desktop applications using proprietary network protocols.&lt;br /&gt;&lt;br /&gt;I think, after all, Web 2.0 is just a new brother of desktop applications, which is becoming more and more important. The spirits of Web 2.0 can have positive influence on the designs of desktop applications.&lt;br /&gt;&lt;br /&gt;When we develop desktop base applications (except those government and military applications), some questions can be asked:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Can we employ more open standards and protocols?&lt;/li&gt;&lt;li&gt;If we need to use some proprietary technologies in the core design/implementation for some technology supremacy, can we just use open standards and protocols for data exchanges?&lt;/li&gt;&lt;li&gt;As the application will not have monopoly position in the market, shall we provide more handy user interfaces and even programing interfaces for exchanging data with other applications running on other computing platforms?&lt;/li&gt;&lt;li&gt;Are we going to lock the users with proprietary technologies? or just give them freedom of moving their data to other computing platforms?&lt;/li&gt;&lt;li&gt;Can we organize rich features with intuitive user interfaces?&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;With such considerations, the desktop program may have spirits of Web 2.0, become a player in Web 2.0, and co-exist with web base Web 2.0 applications.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-730364004992028258?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/730364004992028258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/730364004992028258'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/07/wheres-place-of-desktop-applications.html' title='Where&apos;s the place of desktop applications under the strong wind of Web 2.0?'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-3768014261646072534</id><published>2007-07-10T18:33:00.000-07:00</published><updated>2007-07-10T20:44:39.746-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='photo'/><category scheme='http://www.blogger.com/atom/ns#' term='face recognition'/><category scheme='http://www.blogger.com/atom/ns#' term='Picasa'/><title type='text'>Face recognition in Picassa</title><content type='html'>I understand that Google people have been &lt;a href="http://googleblog.blogspot.com/2006/08/better-way-to-organize-photos.html"&gt;working hard to integrate face recognition into Picasa&lt;/a&gt; with technologies brought by Neven Vision. Google had even promoted a web service asking people to crop faces from photos and then rate them. This will surely improve the sample statistics of face recognition. I think the day of next version with face recognition will be coming within 6 months. Before that happen, I would like to imagine how the UI will be.&lt;br /&gt;&lt;br /&gt;I would call it Face Recognition Agent. You need to train the agent at the very first moment.  First the agent will scan selected photos or albums, and then list distinguished faces in groups each of which represent a person. Of course the result will be far from perfect, and need human intelligence to fine tune.&lt;br /&gt;&lt;br /&gt;For example, John's faces might be mixed with Joe's, and Sandy's might fall into different groups as different persons. You will then need to name those groups and drag the faces around. These groups will form a database of face recognition. Picasa then tags the photos with names of these group.&lt;br /&gt;&lt;br /&gt;When new photos come in, Picasa then scan and tag them, and show you a summary of tagging in case that the agent might miss something. While many users have been manually tagging photos, this kind of intelligent tagging with face recognition will greatly reduce the work load by 95% (my satisfaction rate).&lt;br /&gt;&lt;br /&gt;The tags will be integrated with other Google services, like Email, address book, and social networking etc.&lt;br /&gt;&lt;br /&gt;In a long run, the face recognition in Picasa will also adapt faces of the same person at different ages.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-3768014261646072534?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/3768014261646072534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/3768014261646072534'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/07/face-recognition-in-picassa.html' title='Face recognition in Picassa'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-868635168084242089</id><published>2007-07-08T22:05:00.000-07:00</published><updated>2007-07-08T22:12:20.506-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Semantic Web'/><title type='text'>AI and Semantic Web</title><content type='html'>I am alway skeptical about AI, as decades of development had already disappointed many researchers, however, I do think AI can be useful within well defined range, say, gaming and business data mining and special tasked robot etc.&lt;br /&gt;&lt;br /&gt;I have similar view point about semantic web. I think semantic web can be a very good concept design leading us for better practical solutions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-868635168084242089?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/868635168084242089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/868635168084242089'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/07/ai-and-semantic-web.html' title='AI and Semantic Web'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-5227144948916206335</id><published>2007-07-08T20:46:00.000-07:00</published><updated>2007-07-08T21:03:49.054-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Exchange'/><category scheme='http://www.blogger.com/atom/ns#' term='hosting'/><title type='text'>Google Exchange</title><content type='html'>I just read an interesting post about how Intermedia.NET, a company that says it is the "US Leader in Microsoft Exchange Hosting" &lt;a href="http://googlesystem.blogspot.com/2006/08/google-apps-for-domains-mocked-by.html"&gt;mocked Google Apps for Domains&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;While many items outlined by Intermedia were true, however, nothing can stop Google from stepping into Intermedia's market territory further.&lt;br /&gt;&lt;br /&gt;I think, the most concerned matter, or the most serious shortfall of Google Aps for Domains is about privacy and confidential info.  However, as one of the commentators said, "After all, if I don't believe in Google, why can I believe in my host?"&lt;br /&gt;&lt;br /&gt;Most large companies run their own data servers, hosted in a company's own secured building, or a secured 3rd party data center. They may also run VPN or citrix. For this kind of companies, Google sooner or later will provide Google Exchange which can be installed in Intranet.&lt;br /&gt;&lt;br /&gt;Google Apps for Domains can be regarded as Google Exchange public. And Google Exchange for Enterprise will be superior than MS Exchange, as it has much better search engine and other high performance service.&lt;br /&gt;&lt;br /&gt;Of course, it might take years to fine tune Google Exchange's interfaces to adapt business needs and educate enterprise users, as currently "Nobody will be fired for using MS products".&lt;br /&gt;&lt;br /&gt;I really doubt the current support models of Google can gain trusts from enterprise users. Anyway, this is another subject.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-5227144948916206335?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/5227144948916206335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/5227144948916206335'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/07/google-exchange.html' title='Google Exchange'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-2598791919971080215</id><published>2007-07-03T22:03:00.000-07:00</published><updated>2007-08-26T18:20:32.822-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PIM'/><category scheme='http://www.blogger.com/atom/ns#' term='portable address book'/><category scheme='http://www.blogger.com/atom/ns#' term='contact management'/><title type='text'>Portable Address Book Programs</title><content type='html'>I would like to introduce a few usable portable address programs. First of all, what is a portable program?&lt;br /&gt;&lt;br /&gt;Please review an excellent  site  of &lt;a href="http://portableapps.com/about/what_is_a_portable_app"&gt;portable programs&lt;/a&gt;. So we are not talking about address book running on PDA, or Web address book programs, though such applications can also be considered being portable as well.&lt;br /&gt;&lt;br /&gt;Within the definition by &lt;a href="http://portableapps.com/"&gt;PortableApps.com&lt;/a&gt;, I would like to outline a few address book programs/functions here, distributed as freeware or shareware.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://portableapps.com/apps/internet/thunderbird_portable"&gt;Portable Thunderbird (Freeware)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Mozilla Thunderbird is the most reliable Email client program I had ever seen. I used it heavily, and it has never crashed or popped up some exception message. I had used Pegasus, Eudora, Bat, Outlook Express, Netscape, MS Outlook and Lotus Notes, and they did crash from time to time. As usual, Thunderbird came with address book function. With Portable Thunderbird, you have portable address book.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.essentialpim.com/?r=products&amp;amp;pr=dvsp"&gt;Essential PIM Portable Edition (Shareware)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is a personal information manager program which looks similar to MS Outlook.  EPIM provides a portable edition of Essential PIM. If you want MS Outlook running on portable devices, you may use Essential PIM portable as an alternative solution.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.fonlow.com/opencontacts"&gt;Open Contacts (Freeware)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is a heavy weight address book, though it has no functions of Email, calendar, todo list and notes. Nevertheless, it can interact well with other Email programs, telephony, Skype, and Web programs etc. It is pretty easy to have a &lt;a href="http://www.fonlow.com/opencontacts/Overview/BuildPortablePIM.htm"&gt;free portable PIM&lt;/a&gt; composed by a few other portable programs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-2598791919971080215?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/2598791919971080215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/2598791919971080215'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/07/portable-address-book-programs.html' title='Portable Address Book Programs'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-2902294995262866340</id><published>2007-05-21T20:04:00.001-07:00</published><updated>2007-05-21T20:07:51.138-07:00</updated><title type='text'>We get only more data and information</title><content type='html'>&lt;p&gt;When talking about the rapid expansion of the Internet, people intent to explicitly or implicitly interpret data as information, information as knowledge, knowledge as intelligence, and intelligence as wisdom.&lt;/p&gt; &lt;p&gt;However, no matter how fast the data get exchanged in the networks/the Internet,&amp;nbsp;and no matter how fast the data storage of Web are expanding, can we say the&amp;nbsp;production/creation of knowledge is running at similar speed? Can we say&amp;nbsp;we get more intelligent after reading more data and information? Can our reading speed catch up with the expansion of information, necessarily? Do we have more time to do thinking, rather than&amp;nbsp;to be forced&amp;nbsp; to react against the infomation all the time?&amp;nbsp;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-2902294995262866340?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/2902294995262866340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/2902294995262866340'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/05/we-get-only-more-data-and-information.html' title='We get only more data and information'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-7904984999604381562</id><published>2007-05-10T20:03:00.001-07:00</published><updated>2007-05-10T20:07:39.583-07:00</updated><title type='text'>Test Windows Live Writer</title><content type='html'>&lt;p&gt;When searching for offline blog editor, I found this &lt;a href="http://writer.live.com/"&gt;Windows Live Writer&lt;/a&gt;, from Microsoft. &lt;/p&gt; &lt;p&gt;Microsoft rarely provide tools supporting competitors or rivals. This time, Microsoft have done a brave move.&lt;/p&gt; &lt;p&gt;I published this, then continued to edit, then post again.&lt;/p&gt; &lt;p&gt;So far I have good feelings about Windows Live Writer. Only one thing but.&amp;nbsp; I got used to spelling checking on always, and apparently there's no such preference option.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-7904984999604381562?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7904984999604381562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7904984999604381562'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/05/test-windows-live-writer.html' title='Test Windows Live Writer'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-5011254755911003737</id><published>2007-04-26T18:46:00.000-07:00</published><updated>2007-04-26T20:00:58.478-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bark'/><category scheme='http://www.blogger.com/atom/ns#' term='pet'/><category scheme='http://www.blogger.com/atom/ns#' term='scam'/><category scheme='http://www.blogger.com/atom/ns#' term='Poodles'/><category scheme='http://www.blogger.com/atom/ns#' term='pooch'/><category scheme='http://www.blogger.com/atom/ns#' term='japan'/><title type='text'>Poodles As Pets, with photo</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_0Ec3HWOLHjk/RjFZLruZPWI/AAAAAAAAAAU/6kGlnLkhoQY/s1600-h/sheepdog.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://bp2.blogger.com/_0Ec3HWOLHjk/RjFZLruZPWI/AAAAAAAAAAU/6kGlnLkhoQY/s400/sheepdog.jpg" alt="" id="BLOGGER_PHOTO_ID_5057921913764527458" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;----------&lt;br /&gt;------&lt;br /&gt;----&lt;br /&gt;--&lt;br /&gt;-&lt;br /&gt;I was watching the Sunrise of Channel 7 this morning, and people were laughing at a photo of a poodle as pet.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;(From news.com.au) THOUSANDS of Japanese have been swindled in a scam in which they were sold Australian and British sheep and told they were poodles.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Flocks of sheep were marketed as fashionable accessories - available at $1600 each - by a company called Poodles as Pets.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;A real poodle retails for twice that much in Japan.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The scam was uncovered when Japanese film star Maiko Kawamaki went on a talk-show and wondered why her new pet would not bark or eat dog food.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;She was crestfallen when told it was a sheep.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Hundreds of other women got in touch with police to say they feared their new "poodle" was also a sheep.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;One couple said they became suspicious when they took their "dog" to have its claws trimmed and were told it had hooves.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Police believe there could be 2000 people affected by the scam. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Here's another link to the story.&lt;br /&gt;http://www.thesun.co.uk/article/0,,2-2007190295,00.html&lt;br /&gt;&lt;br /&gt;Really funny. I wish someone had caught that TV talk show, and share the clip with us.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-5011254755911003737?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/5011254755911003737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/5011254755911003737'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/04/poodles-as-pets.html' title='Poodles As Pets, with photo'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_0Ec3HWOLHjk/RjFZLruZPWI/AAAAAAAAAAU/6kGlnLkhoQY/s72-c/sheepdog.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-2258963836743378670</id><published>2007-04-23T01:21:00.000-07:00</published><updated>2007-04-23T01:22:28.286-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='collanos'/><category scheme='http://www.blogger.com/atom/ns#' term='collaboration'/><title type='text'>walking around Collanos, Part 1</title><content type='html'>In the overview page at http://www.collanos.com/m1/en/solutions/overview, the protection of privacy is put at the second last item. Like many computer users who have been searching online collaboration tools, I am cautious about privacy of myself and my clients.&lt;br /&gt;&lt;br /&gt;Though there are already some offering encryption of data storing on the server of the service provider, storing sensitive data on someone else's server make me feel uneasy.&lt;br /&gt;&lt;br /&gt;I think what make Collanos outstanding is about P2P and encryption. Such decentralized solution is what I have been looking for.&lt;br /&gt;&lt;br /&gt;Free or not free is not my concern. Free is good for freelancers and small businesses. I feel comfortable to pay some bonus services.&lt;br /&gt;&lt;br /&gt;I would suggest the editor of the web would put the mentioned item at a significant place.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-2258963836743378670?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/2258963836743378670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/2258963836743378670'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/04/walking-around-collanos-part-1.html' title='walking around Collanos, Part 1'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-3277193527282051509</id><published>2007-04-23T00:51:00.000-07:00</published><updated>2007-04-23T00:59:23.720-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='collanos'/><category scheme='http://www.blogger.com/atom/ns#' term='skype'/><category scheme='http://www.blogger.com/atom/ns#' term='sharepoint'/><category scheme='http://www.blogger.com/atom/ns#' term='version control'/><category scheme='http://www.blogger.com/atom/ns#' term='collaboration'/><title type='text'>Collanos P2P Project Collaboration</title><content type='html'>I just came across a beta startup &lt;a href="http://www.collanos.com/"&gt;Collanos&lt;/a&gt;  which provides P2P project collaboration.&lt;br /&gt;&lt;br /&gt;Despite of the big fat size (46MB) of the download, the overall UI designs are pretty elegant.&lt;br /&gt;&lt;br /&gt;Collanos is comparable to SharePoint, Version Control programs (like CVS) and "Web 2.0" collaboration Web services, with outstanding bonuses of P2P and off-line mode, as well as crossing platforms as desktop program.&lt;br /&gt;&lt;br /&gt;I would presume that the Collanos team had plan of introducing p2p audio/video chat into the program, either through in-house product or integrating with existing services like Skype and MSN etc.&lt;br /&gt;&lt;br /&gt;After all, Collanos might still face a lot challenges of market competitions as it is possible that MS, Skype or other p2p vendors will develop similar products.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-3277193527282051509?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/3277193527282051509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/3277193527282051509'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/04/collanos-p2p-project-collaboration.html' title='Collanos P2P Project Collaboration'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-7886006140908146332</id><published>2007-04-22T23:35:00.000-07:00</published><updated>2007-04-23T00:05:03.773-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='postal address file'/><category scheme='http://www.blogger.com/atom/ns#' term='address lookup'/><category scheme='http://www.blogger.com/atom/ns#' term='paf'/><category scheme='http://www.blogger.com/atom/ns#' term='web service'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Maps'/><title type='text'>Google Address Lookup Services and Existing Service Provider</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Google Address Lookup Services and Existing Service Provider&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Just follow up prior post &lt;span style="font-size:85%;"&gt;&lt;a href="http://webandlife.blogspot.com/2007/04/google-and-logistics.html"&gt;Google and Logistics&lt;/a&gt;&lt;/span&gt; , I would list a few typical service providers existing:&lt;br /&gt;&lt;br /&gt;http://www.postcodeanywhere.co.uk&lt;br /&gt;&lt;br /&gt;http://www.qas.com/&lt;br /&gt;&lt;br /&gt;These providers commonly provide various levels of services:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Web&lt;/li&gt;&lt;li&gt;Web services for web sites&lt;/li&gt;&lt;li&gt;Web services for desktop&lt;/li&gt;&lt;li&gt;Desktop programs&lt;/li&gt;&lt;li&gt;Desktop API&lt;/li&gt;&lt;/ul&gt;I think one or more existing providers may be acquired by Google, not because of the superior technologies (technically not complicated at all) these companies have, but the customer bases.&lt;br /&gt;&lt;br /&gt;Of course it is not my wish that these existing providers die out because Google is going to stepping in the market, however, I think if these companies can be a bit more open to the general public, they will have a more solid stand against competition, and gain more in marketing.&lt;br /&gt;&lt;br /&gt;For example, QAS shall allow around "200" free queries a day from an IP. This is really good for some freelancers and small businesses. When they grow and need more queries, they will surely have stronger willingness to pay for the services.&lt;br /&gt;&lt;br /&gt;After all, however, I really doubt whether these providers for vertical markets have visions and philosophies similar to Google's, which are more user oriented rather than share-holder oriented.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-7886006140908146332?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7886006140908146332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7886006140908146332'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/04/google-address-lookup-services-and.html' title='Google Address Lookup Services and Existing Service Provider'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-8935916893339836293</id><published>2007-04-19T22:43:00.000-07:00</published><updated>2007-04-19T22:44:33.842-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social networking'/><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='social network'/><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='address book'/><category scheme='http://www.blogger.com/atom/ns#' term='contact management'/><category scheme='http://www.blogger.com/atom/ns#' term='mobile phone'/><category scheme='http://www.blogger.com/atom/ns#' term='relationship'/><title type='text'>Is Web 2.0 Address Book a silver bullet?</title><content type='html'>&lt;p&gt;                    &lt;span class="author"&gt;Is Web 2.0 Address Book a silver bullet?&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span class="author"&gt;In the blog by Tim &lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;h3&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://radar.oreilly.com/archives/2007/02/social_network_1.html" target="_self" class="title"&gt;Social Network Fatigue and the Missing Web 2.0 Address Book&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p style="font-style: italic;"&gt;&lt;span class="author"&gt;Tim O'Reilly  &lt;/span&gt; &lt;span class="date"&gt;[02.11.07 01:24 PM]&lt;/span&gt;           &lt;/p&gt;           &lt;p style="font-style: italic;"&gt;            &lt;/p&gt;&lt;p style="font-style: italic;"&gt;peter -- OpenID is a start, but I don't consider it the Web 2.0 address book. Here's what I'm talking about: an address book for my phone that remembers everyone I call, and everyone who calls me, and syncs with my email, which remembers every email I send and receive, and an IM client ditto -- and that uses Google-like heuristics to help me figure out who I want. And then uses P2P and various trust metrics to help me find people who are not in my immediate communication orbit.&lt;/p&gt;&lt;p style="font-style: italic;"&gt;&lt;br /&gt;&lt;/p&gt;I am not sure what Web 2.0 address book should look like. I suppose Tim wants a silver bullet address book that can do every pieces of jobs related contact info. I am looking for such bullet as well. Hopefully this bullet can hit everything in every scenarios.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1.  "&lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;for my phone that remembers everyone I call, and everyone who calls me&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;"&lt;/span&gt;&lt;br /&gt;If I make call out and receive through my PC telephony, this is easy. But I also use my normal hand set sometimes, as my wife won't use PC telephony, and I sometime accidentally pick up the phone for my wife and eventually for me. I also use mobile phone. Obviously, it is impossible to have a single silver bullet to hit such diversification of usage of phone.&lt;br /&gt;&lt;br /&gt;I can think some solutions though:&lt;br /&gt;1. Most mobile phones can register calls in and out. So, there need to be a program that can sync the the registered info of calls to my silver bullet address book, in order to merge the records of PC telephony. My handset of landline should be routed to PC telephony. Web 2.0 has nothing to do with this.&lt;br /&gt;&lt;br /&gt;In addition, I use Skype for international calls mostly. So, I need to merge these Skype call activities into my phone log.&lt;br /&gt;&lt;br /&gt;Ah, can we consider MSN audio chat is kind of phone call?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2.&lt;/span&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt; and syncs with my email, which remembers every email I send and receive&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Almost all Email programs either desktop or web can do this, as long as the addres book is integrated with the Email program. For a standalone address book, it will be up to the inbound interfaces and outbond interfaces of the Email program and the address book program. Address book can hardly be a standalone feature as you know, contact info need to interact other functions to be useful. If you use only Outlook, or only Gmail, this is not a problem. If you use both, or even more, this is really massive. There might be some programs in the market now to provide facade interfaces for multiple Email programs.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;3. and an IM client ditto &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Unless the IM vendors provide some API for extracting the log and more interaction with other programs, nobody can do more for ideal automation. Hopefully, the IM vendors will also agree on a common protocols of doing such things. Such protocols should take care of both desktop programs and Web 2.0 programs.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;4. and that uses Google-like heuristics to help me figure out who I want. And then uses P2P and various trust metrics to help me find people who are not in my immediate communication orbit.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is what Web 2.0 address book all about, I regard, though I am not sure about the common definition of Web 2.0 address book. I think both centralized social networking like Linkedln and distributed social networking have their own advantage, it is not about which will replace which.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Web 2.0 is fashionable, any new or legacy applications attached with Web 2.0 labels will be shinning. Web 2.0 Address Book is not an exception. It will have strong impact on our ways of managing contact info and doing social networking. It is a complementation. The real question is: How do we construct better automation of contact management and social networking with the assistant of Web 2.0?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-8935916893339836293?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/8935916893339836293'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/8935916893339836293'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/04/is-web-20-address-book-silver-bullet.html' title='Is Web 2.0 Address Book a silver bullet?'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-2024235894524940654</id><published>2007-04-18T18:21:00.000-07:00</published><updated>2007-04-18T23:38:06.864-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='crm'/><category scheme='http://www.blogger.com/atom/ns#' term='postal code'/><category scheme='http://www.blogger.com/atom/ns#' term='address'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google and Logistics</title><content type='html'>Google and Logistics&lt;br /&gt;&lt;br /&gt;I just read some OASIS documents about names and addresses.&lt;br /&gt;===================================&lt;br /&gt;&lt;span style="font-style: italic;"&gt;It is no surprise that vendors of ERP, CRM and Sales Force Automation packages incorporate the benefit of clean and structured address management tools and start integrating these tools in their own product propositions. Most recent on the Internet it is recognised that e- business is frustrated by the 5 to 9 % of the shipments that are being returned due to addressing errors. In a Forrester Research paper / survey of 1998 it is already described that the main barrier for implementing global e-Commerce is the shipping difficulties: determine whether the shipping and billing addresses are valid. For the on-line world the element of fraud has an even greater part in losing revenue.&lt;/span&gt;&lt;br /&gt;=====================================&lt;br /&gt;&lt;br /&gt;If the sender can check whether the address of the recipient is valid for posting/shipping, the rate of failed delivery will be dropping, so the world can save costs, and a bit greenhouse gas.&lt;br /&gt;&lt;br /&gt;I think the best service provider at present time is Google with extended services of Google Maps. Google Maps can handle different address formats in different languages, for North America, Australia and Japan (with major to minor in one line).&lt;br /&gt;&lt;br /&gt;Though there are already a load of IT vendors providing services of matching postal addresses, cooperating with national post offices which provide a subset of the postal address database, however, these vendors mostly provide services to vertical markets only, rather than general public. I think Google is more capable of providing services of different levels. For individual and small businesses, the services have better to be free for variety of reasons which I am not going to discuss here.&lt;br /&gt;&lt;br /&gt;Similar to the Google Maps service, I as a EBay vendor may input an address of a customer then Google will return whether this address is recognized by local post office. I will just call this service GPost which is primarily a web service. Furthermore, GPost can be integrated with online shops, so I can verify the customers' addresses without leaving the online shops. To make things better, the online shop can tell the customer whether the postal address is valid for posting goods.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-2024235894524940654?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/2024235894524940654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/2024235894524940654'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/04/google-and-logistics.html' title='Google and Logistics'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-4685769270955380141</id><published>2007-04-15T22:41:00.000-07:00</published><updated>2007-04-15T22:42:12.034-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vCard'/><category scheme='http://www.blogger.com/atom/ns#' term='social networking'/><category scheme='http://www.blogger.com/atom/ns#' term='rel'/><category scheme='http://www.blogger.com/atom/ns#' term='hcard'/><category scheme='http://www.blogger.com/atom/ns#' term='contact management'/><category scheme='http://www.blogger.com/atom/ns#' term='MicroFormats'/><category scheme='http://www.blogger.com/atom/ns#' term='xfn'/><category scheme='http://www.blogger.com/atom/ns#' term='relationship'/><title type='text'>Can XFN connect to people?</title><content type='html'>Can XFN connect to people?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Just read a blog from &lt;a href="http://www.oreillynet.com/pub/au/2417"&gt;Jennifer Golbeck&lt;/a&gt; about&lt;br /&gt;&lt;h2 class="post-title"&gt;&lt;a class="permalink" href="http://www.oreillynet.com/xml/blog/2005/11/xfn_delusions_of_grandeur.html"&gt;XFN Delusions of Grandeur&lt;/a&gt;&lt;/h2&gt;&lt;br /&gt;she claimed:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;The problem with this is that we are annotating URLs of webpages, not people. This annotation above reads to me as “http://jeff.example.org is a friend and someone I met”, not “The person described at http://jeff.example.org is a friend and someone I met”.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I intend to agree with her, however, before MicroFormats can make some improvement. If we can assume that &lt;span style="font-style: italic;"&gt;http://jeff.example.org &lt;/span&gt;contains a hCard of the owner of the blog, can we consider that the link is to a person?&lt;br /&gt;&lt;br /&gt;After all, how do we consider a link is to a person, not to a web page? Is vCard a good candidate.&lt;br /&gt;&lt;br /&gt;I would assume you agree that vCard may represent a person.&lt;br /&gt;&lt;br /&gt;While nowadays blog is very popular, is a url of a blog the only preferable notation to a person?&lt;br /&gt;How about a url to a vCard? or XML vCard? or just any meta data file that can represent a person?&lt;br /&gt;&lt;br /&gt;So, I think, XFN can connect to people, with complementation of other meta data.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-4685769270955380141?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4685769270955380141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4685769270955380141'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/04/can-xfn-connect-to-people.html' title='Can XFN connect to people?'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-205074874430728999</id><published>2007-04-15T22:36:00.000-07:00</published><updated>2007-04-15T22:37:29.823-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='social network'/><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='address book'/><category scheme='http://www.blogger.com/atom/ns#' term='contact management'/><title type='text'>Social Networking Web can only assist you, it is you do the networking</title><content type='html'>&lt;p&gt;Social Networking Web can only assist you, it is you do the networking&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;I just happened to read a blog by  Tim O'Reilly  "&lt;a href="http://radar.oreilly.com/archives/2007/02/social_network_1.html"&gt;Social Network Fatigue and the Missing Web 2.0 Address book&lt;/a&gt;", which sparked a lot interesting comments, in turn gave me a lot inspiration.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Though there are a lot criticisms against these web sites, I intend to think that the cause was that there were some users abusing the uses of the services. It is hard to expect that any publicly available services can possible eliminate abuses by some users. In addition, some users did not use the services through the intended way, for example, linking too many un-trusted buddies, thus getting many requests useless. The true value is based on such assumption: your contacts of the first degree must be trusted, and each of these trusted contacts must follow the same practices, thus you can reach any person reliably across degrees. Social networking sites like Linkedin essentially try to maximize and extend your networking of trusted contacts.&lt;/p&gt; &lt;p&gt;In short, your friends, and your friends' friends, and so on, must have basic discipline of letting only trusted contacts in ring. If you put all of your contacts in ring, you can't expect social networking to create trusted contacts from un-trusted contacts (Old words: garbage in, garbage out), the services can only assist you to create trusted contacts from trusted contacts of other degrees, and at the end it is up to you to decide whether to put a trusted contacts of other degrees into your ring, because at least you are not 100% sure when a contact of other degrees can really be trusted, as you are not sure whether your first degree trusted friend added only his/her trusted friends in ring. After all, you still need to pay efforts to maintain human factors. Though sometimes the marketing languages used by some social networking websites might give you some un-realistic expectations, however, it is up to you to make independent judgment whether to accept a silver bullet. &lt;/p&gt; &lt;p&gt;The real problem is, "&lt;i&gt;How many networks can one person join? How many different identities can one person sanely manage? How many different tagging or photo-uploading or friending protocols can one person deal with?&lt;/i&gt;"&lt;/p&gt; &lt;p&gt;As many had pointed out, the answer is interopertibility, not a central database. Or, a realistic central database is the Internet. And protocols like OpenID will play an important role.&lt;/p&gt; &lt;p&gt;"&lt;i&gt;What I think Jon and Tim (+ others) forget is that all that duplication occurs in different contexts across the social networks a given user belongs to. The same information and meta-data may exist in both a person’s MySpace account and their LinkedIn account… but both networks have very different contexts. Not only that but in many cases people want those two contexts to remain separate (and may even be well-advised to do so!). &lt;/i&gt;&lt;/p&gt; &lt;p&gt;&lt;i&gt;Jane’s social life is reflected on MySpace - but it may not be something she wants potential employers to see via the LinkedIn profile she gives out. Even if she is not a wild-girl, it’s highly unlikely there is anything on her MySpace account that is going to positively contribute to her job application so why would she want her recruiter to be able to check it out? Same goes with what she did at university (via Facebook) and her love of dogs (via Dogster), etc, etc.&lt;/i&gt;" (Quoted from &lt;a href="http://benmetcalfe.com/blog/index.php/2007/02/12/do-we-really-want-to-aggregate-identiy/"&gt; Ben Metcalfe&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;Yes. Users of social networking has better more web/life literate before blaming the social networking web sites are not good. No matter what automation that desktop programs and web programs can give you, it is you manage these computer applications. Jane had done good management for her own sack. With will-be widely acceptance of OpenID, Jane might want to get a few OpenIDs, so do I. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-205074874430728999?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/205074874430728999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/205074874430728999'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/04/social-networking-web-can-only-assist.html' title='Social Networking Web can only assist you, it is you do the networking'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-5838277942532994982</id><published>2007-03-28T23:14:00.000-07:00</published><updated>2007-04-11T21:34:19.310-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web 2.0'/><category scheme='http://www.blogger.com/atom/ns#' term='sunspot'/><category scheme='http://www.blogger.com/atom/ns#' term='address book'/><title type='text'>You are disconnected</title><content type='html'>&lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Web 2.0 is so popular and so fashionable, everything has better to be done  through Web 2.0. This has been becoming the only correct way to go for anything  -- for example providing services or raising venture capital funds.&lt;/p&gt; &lt;p&gt;However, if you think Web 2.0 is all about World Wide Web version 2.0, then  you will easily be connected.&lt;/p&gt; &lt;p&gt;When the service provider is down or just too busy, you are disconnected when  for example you need to contact someone through online address book.&lt;/p&gt; &lt;p&gt;When the ISP is down or too busy, you are disconnected.&lt;/p&gt; &lt;p&gt;When an earthquake breaks backbone cables, you are disconnected.&lt;/p&gt; &lt;p&gt;When the network switch of you LAN burns, you are disconnected.&lt;/p&gt; &lt;p&gt;When the fuse is melt, you are disconnected.&lt;/p&gt; &lt;p&gt;When the Sun has sunspots too active, you are disconnected.&lt;/p&gt; &lt;p&gt;Will such disconnections occur more than once a year? While you would buy car  or property insurances, will you arrange for yourself a bit more insurance for  communications? &lt;/p&gt; &lt;p&gt;Regarding to Web 2.0, I am pretty much with Tim O'Reilly. Web 2.0 is more  about providing more convenient connections exchanging info between different  programs and different platforms. Web 2.0 is an attitude to seamlessly connect  World Wide Web, desktop PC and mobile devices. Tim had come up with &lt;a href="http://radar.oreilly.com/archives/2007/02/social_network_1.html"&gt;a few  good articles&lt;/a&gt;, you may read on.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-5838277942532994982?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/5838277942532994982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/5838277942532994982'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/03/you-are-disconnected.html' title='You are disconnected'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-7039735365483181996</id><published>2007-03-27T18:35:00.000-07:00</published><updated>2007-04-11T21:38:17.096-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sync'/><category scheme='http://www.blogger.com/atom/ns#' term='mozilla firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='del.icio'/><category scheme='http://www.blogger.com/atom/ns#' term='tag'/><category scheme='http://www.blogger.com/atom/ns#' term='unicode'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='bookmarks'/><title type='text'>Bookmarks between browser and Web</title><content type='html'>I recently evaluated a few solutions of synchronizing local bookmarks of web browsers, as I used Mozilla Firefox mostly and IE at work. I often make bookmarks at home and at work while using Firefox, thus synchronizing had become an issue. &lt;br /&gt;&lt;br /&gt;After reading blogs and comments from others, I finally selected 2go.com. Though I don't really like the idea of installing a desktop client program, however, the overall features looked good, until I found 2go does not support non-English characters, namely, not support Unicode.&lt;br /&gt;&lt;br /&gt;What a shame! Web by default supports Unicode. I can guess the programmers of 2Go forgot there are people not using English, and the database design is based on ANSI rather than Unicode. So bookmark info imported through the web services got corrupted by the database.&lt;br /&gt;&lt;br /&gt;Even worse, because of the sync. feature of the desktop client of 2go, my bookmarks in Firebox got corrupted and the non-English characters had been replaced by "?????".&lt;br /&gt;&lt;br /&gt;Anyway, I will send an Email to 2go support about this.&lt;br /&gt;&lt;br /&gt;Today I found a web site &lt;a href="http://del.icio.us/"&gt;http://del.icio.us/&lt;/a&gt; that can host bookmarks. Actually hosting bookmarks is not a big issue, as I can publish my bookmarks in my personal web, Web mail or blog, however, del.icio provides some extra stuffs:&lt;br /&gt;1. Tagging bookmarks.&lt;br /&gt;2. Check duplicated bookmarks.&lt;br /&gt;3. Query how many subscribers are sharing the same bookmarks.&lt;br /&gt;&lt;br /&gt;In addition, it seems support multiple levels of tagging. I just wonder why it could not export HTML back to the schema of Mozilla Firefox  bookmark file. I regard this feature is a rehearsal of developing sync functions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-7039735365483181996?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7039735365483181996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/7039735365483181996'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/03/bookmarks-between-browser-and-web.html' title='Bookmarks between browser and Web'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-6534918986329683781</id><published>2007-03-19T06:02:00.000-07:00</published><updated>2007-03-19T07:23:55.125-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='event'/><category scheme='http://www.blogger.com/atom/ns#' term='map'/><category scheme='http://www.blogger.com/atom/ns#' term='telephone'/><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='web mail'/><category scheme='http://www.blogger.com/atom/ns#' term='calendar'/><category scheme='http://www.blogger.com/atom/ns#' term='address book'/><category scheme='http://www.blogger.com/atom/ns#' term='mobile phone'/><category scheme='http://www.blogger.com/atom/ns#' term='instant messenger'/><category scheme='http://www.blogger.com/atom/ns#' term='IM'/><title type='text'>Universal Logger of Electronic Communications, Part 2</title><content type='html'>I would regard the solution I purposed in part 1 is a kind of distributed solutions. However, even if there are huge demands for aggregating communication logs with a standard protocol, I doubt the willingnesses of those vendors to implement the protocol. Who vendor don't want to control the data of users?&lt;br /&gt;&lt;br /&gt;So, I would imagine there is a gigantic player in the data and communication market called Yaggo.&lt;br /&gt;&lt;br /&gt;Yago has provided the following service:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Web directory&lt;/li&gt;&lt;li&gt;Web mail&lt;/li&gt;&lt;li&gt;Web calendar&lt;/li&gt;&lt;li&gt;Web address book&lt;/li&gt;&lt;li&gt;IM&lt;/li&gt;&lt;li&gt;Maps&lt;/li&gt;&lt;/ol&gt;The next step, Yaggo will provide free mobile phone service with a special made handset. So, you are going throw away your land line phones and your mobile phone. Who can resist the free Yaggo mobile phone service.&lt;br /&gt;&lt;br /&gt;Yaggo mobile phone run in two mode: conventional GSM/CDMA/G3, or IP mode.&lt;br /&gt;&lt;br /&gt;When you are in metro areas with wireless internet cover, you would prefer IP mode, which is free.  The only catch is, when you dial or receive call, there's some little adv. to catch your eyeballs. The adv could be text, or just logo to give you some constant impression.&lt;br /&gt;&lt;br /&gt;As Yaggo knows your location roughly in a cell, Yaggo can always give some useful adv when you need some advices about services nearby. Of course, Yaggo will charge the service providers, and event more when the user make online order. Though this is not really new business model, however, in the past, Yaggo had to share the income with the traditional telecom providers. Now, Yaggo gives you a free handset, and get all the income.&lt;br /&gt;&lt;br /&gt;In addition, when you check back your phone log, you will always recall "when" and "where".  To recall "what", you may record the conversation. Ah? Recording? Any privacy and legislation concern? Yes. But Yaggo may convince the law makers to allow recording for 15 seconds, in order to make balance between convenience and privacy.&lt;br /&gt;&lt;br /&gt;When everyone have one only one Yaggo phone number, there won't be any hassle of aggregating multiple phone logs.&lt;br /&gt;&lt;br /&gt;How about phones in office?&lt;br /&gt;&lt;br /&gt;What? Which bosses still want to pay the bill of phone when the employees can use free mobile phone services? To prevent too much radiation, in office, people will use hand free devices or other devices to reduce the risk.&lt;br /&gt;&lt;br /&gt;Oh, deer! What will be the future of those telecom operators? Can you tell?&lt;br /&gt;&lt;br /&gt;How about logging IM from different vendors?&lt;br /&gt;&lt;br /&gt;All too easy. With free handset, people will love doing IM on the phone, then just swallow more and more of the IM market. There exist a few free program that support multiple instant messengers at the same time, so it should be easy for Yaggo to provide Yaggo Super IM running on PC desktop, Web and Yaggo phone.&lt;br /&gt;&lt;br /&gt;How about logging Emails?&lt;br /&gt;&lt;br /&gt;The approach by Yaggo can be a bit different though. Companies might still prefer using MS Exchange or Domino in the office.  So Yaggo will just provide some kind of bridge programs to extract log info from these services to aggregate with Yaggo. At the mean time, Yaggo also sell Yaggo Exchange, which can be seamlessly integrated with Yaggo online service. This is really a win win solution, as the companies can keep their own data in their own servers, while enjoying the convenience of aggregating with other online services provided by Yaggo.&lt;br /&gt;&lt;br /&gt;What a future we will have?&lt;br /&gt;When will people start calling Yaggo century?&lt;br /&gt;Which company will you nominate as Yaggo?&lt;br /&gt;Are you afraid of the future?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-6534918986329683781?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/6534918986329683781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/6534918986329683781'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/03/universal-logger-of-electronic_19.html' title='Universal Logger of Electronic Communications, Part 2'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-1560230659706588301</id><published>2007-03-18T06:13:00.000-07:00</published><updated>2007-03-19T07:21:36.191-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='telephone'/><category scheme='http://www.blogger.com/atom/ns#' term='email'/><category scheme='http://www.blogger.com/atom/ns#' term='address book'/><category scheme='http://www.blogger.com/atom/ns#' term='mobile phone'/><category scheme='http://www.blogger.com/atom/ns#' term='instant messenger'/><category scheme='http://www.blogger.com/atom/ns#' term='IM'/><title type='text'>Universal Logger of Electronic Communications, Part 1</title><content type='html'>&lt;p&gt;Previously I discussed what an ideal address can be in article &lt;/p&gt; &lt;h3 class="post-title"&gt; &lt;a href="http://webandlife.blogspot.com/2007/03/is-web-20-address-book-silver-bullet.html"&gt; &lt;span style="font-size:100%;"&gt;Is Web 2.0 Address Book a silver bullet?&lt;/span&gt;&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;Tim O'Reilly demanded that "for my phone that remembers everyone I call, and  every one who call me". I would push a bit further, the address book program  should remember all activities of contacting people, electronically or face to  face. So, if I don't have tons of memory to remember how often I had contacted a  person, I can always check the database to recall what communication I have done  with some people I rarely contact. Of course I don't need to log and recall all  contact activities with my family members, colleges and close friends. However,  it is good the use computer programs to maintain minimum levels of communication  with some buddies for keeping the friendships.&lt;/p&gt; &lt;p&gt;For logging face to face meetings, we have calendar programs to log the  activities. You will just use one or two calendar programs, one running on PC  and the other running on PDA. The search for past activities should be easy.&lt;/p&gt; &lt;p&gt;For logging electronic communications, it will be a lot more troublesome.  Let's list what electronic channels of communication that you could possibly use  for daily life.&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Telephone&lt;/li&gt;&lt;li&gt;Computer telephony&lt;/li&gt;&lt;li&gt;Mobile phone&lt;/li&gt;&lt;li&gt;Skype&lt;/li&gt;&lt;li&gt;MSN&lt;/li&gt;&lt;li&gt;ICQ&lt;/li&gt;&lt;li&gt;Yahoo Messenger, and other IM clients&lt;/li&gt;&lt;li&gt;Email at home&lt;/li&gt;&lt;li&gt;Email at work&lt;/li&gt;&lt;li&gt;Web Mail&lt;/li&gt;&lt;li&gt;Email on PDA&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Some people may strictly use only PDA to do all phone and Email activities,  so logging past activities can be very straightforward.&lt;/p&gt; &lt;p&gt;Large majority of people will use 3 or more electronic channels listed above,  on different computer platforms. To aggregate the logs of activities in these  channels could be massive.&lt;/p&gt; &lt;p&gt;Each channels listed above can keep a history of  communication. For example, on mobile phone, there's a call register of  recording in/out calls, and in any Email program, in/out Emails will be kept  unless you delete them. What we need to aggregate are the basic activities, not  necessarily the content of the communication.&lt;/p&gt; &lt;p&gt;While there are programs to sync. address book info between these channels  through vCard and SyncML, there should be some kind of protocol to aggregate the  log info. I am not sure whether there exists such protocol yet. Let me find out  what exactly I expect from such protocol. &lt;/p&gt; &lt;p&gt;The content of the log exported by a channel should include the follow items:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Type -- Communication type. For example, type "phone" will be shared by   computer telephony, mobile phone and Skype phone.&lt;/li&gt;&lt;li&gt;Vendor -- The program that provide the service. For example, yahoo IM,   ICQ. This is optional.&lt;/li&gt;&lt;li&gt;Contact Name&lt;br /&gt;&lt;/li&gt;&lt;li&gt;UserId -- This may be Email address, phone number, IM user ID etc.&lt;/li&gt;&lt;li&gt;Time Begin -- Optional&lt;/li&gt;&lt;li&gt;Time End -- Optional&lt;/li&gt;&lt;li&gt;InOrOut -- Indicate who initiate the communication.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;To find out the detail log of the conversations, you will need to access each of the services.&lt;br /&gt;&lt;br /&gt;There will be a desktop program or a web program to aggregate the logs of different channels. I might try to find out whether there exists universal logger programs and the protocol.&lt;br /&gt;&lt;br /&gt;Hold on.&lt;br /&gt;&lt;br /&gt;Before evaluating this one-million-dollar idea, I would think whether this is the only best solution to track all my electronic communications. Just as the old saying: the only solution is not the best solution.&lt;br /&gt;&lt;br /&gt;It is better to think about at least one alternative solution.&lt;br /&gt;&lt;br /&gt;This is what I going to discuss in the next charter.&lt;br /&gt;&lt;p&gt; &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-1560230659706588301?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/1560230659706588301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/1560230659706588301'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/03/universal-logger-of-electronic.html' title='Universal Logger of Electronic Communications, Part 1'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-1050977749336401840</id><published>2007-03-17T18:21:00.000-07:00</published><updated>2007-11-18T17:20:15.492-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pocket PC'/><category scheme='http://www.blogger.com/atom/ns#' term='PDA'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Mobile'/><title type='text'>Specification of Super PDA or Super Pocket PC</title><content type='html'>Based on the specification of top models of PDA in the market, I would like to draft some features that a future super PDA should have.&lt;br /&gt;&lt;br /&gt;UMPC is not a good candidate to be based on, as it is too big as hand-held device to be inserted into pocket. UMPC can mostly become handheld game device, or hand-held devices for some industries as data collector or control panel.&lt;br /&gt;&lt;br /&gt;The ultimate goal is to do all my daily electronic activities in this super PDA, and I will not need a PC except when I want to play 3-D computer games that require high-end 3-D hardware.&lt;br /&gt;&lt;br /&gt;1. Support hight resolution in external monitor up to 1024x768.&lt;br /&gt;2. Support connecting to normal keyboard and mouse.&lt;br /&gt;3. Support networking to LAN like a normal PC.&lt;br /&gt;&lt;br /&gt;Current top model of Dell Axim have built-in resolution of 640x480 which is very much the same as the resolution of early versions of MS windows, higher solution than that is not practical because of the size of pocket PC. However, when I sit in the office, I still want to have larger screen with higher resolution to do things with my PDA. So, I want my docker of PDA can connect to a normal computer monitor, keyboard and mouse, thus, I can use my PDA as normal PC. The docker can connect to LAN so I can access resources in LAN including the internet connection.&lt;br /&gt;&lt;br /&gt;To backup data, the docker can connect to an external drive like a flash disk, an external CD-R writer or an external hard-disk. I will not need to attach the docker to a PC.&lt;br /&gt;&lt;br /&gt;You may argue that a very small laptop PC can satisfy all these requirements. Yes, it does, however, who can insert a very small laptop PC into a pocket?&lt;br /&gt;&lt;br /&gt;From certain point of view, I am demanding features of laptop computer on a pocket PC combing with the docker. The only difference is pocket PC run Windows Mobile OS, which support only special made programs, and has much less resource footprint.&lt;br /&gt;&lt;br /&gt;Will it come one day?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-1050977749336401840?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/1050977749336401840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/1050977749336401840'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/03/specification-of-super-pda-or-super.html' title='Specification of Super PDA or Super Pocket PC'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-8423475245554411346</id><published>2007-03-17T18:19:00.000-07:00</published><updated>2007-03-17T18:21:07.002-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social networking'/><category scheme='http://www.blogger.com/atom/ns#' term='address book'/><category scheme='http://www.blogger.com/atom/ns#' term='open contacts'/><category scheme='http://www.blogger.com/atom/ns#' term='MicroFormats'/><category scheme='http://www.blogger.com/atom/ns#' term='xfn'/><title type='text'>Open Contacts and distributed social networking, Part 2</title><content type='html'>Open Contacts is one of very few address book program that support links of  relationship between contacts. MS Outlook is one of such kind, but supporting  links only without relationship. Generally only in CRM program you can see links  between contacts.&lt;br /&gt;&lt;br /&gt;In Open Contacts, the links between contacts represent the relationships between  your contacts. Regarding to the relationships between you and your contacts, you  might prefer to use the category system to group contacts of a certain  relationship together, though technically it is OK to have a myself contact, and  link myself to other contacts.&lt;br /&gt;&lt;br /&gt;In practice, regarding to UI, it is more natural to have a category tree to  represent relationships, business categories and others.&lt;br /&gt;&lt;br /&gt;It is normal that you maintain the relationship info between you and your  contacts. Though you might sometimes maintain the relationship info between  contacts, it is more natural that such info can be maintained by these people  you know. This is exactly what those existing social networking websites  basically do.&lt;br /&gt;&lt;br /&gt;Please refer to some blogs and web sites I previously suggested about web 2.0  and social networking.&lt;br /&gt;&lt;br /&gt;As you might have notices, in Open Contacts, predefined fields may have semantic  meanings and associated action upon other software applications. And all the  essential contact data can be exported to XML including categories and  relationships between contacts.&lt;br /&gt;&lt;br /&gt;The next thing I want to do is to introduce semantic meanings to nods of the  category tree. For example, you have a few categories for classmates in schools,  and you may associate these categories with category type "schoolmate". The  categories of relationships may be associated with category types "friend",  "workmate" etc. In addition, to visually denote these categories, each category  may be denoted with a specific icon. Ah, finally, Open Contacts has some icons  introduced. Then you may export selected contacts to an XML file.&lt;br /&gt;&lt;br /&gt;What can you do with this XML file to do social networking?&lt;br /&gt;&lt;br /&gt;Well, this XML file can be used by both centralized social network websites or  distributed social networked websites.&lt;br /&gt;&lt;br /&gt;Regarding to centralized social networking websites like Linkedln, the general  procedure is:&lt;br /&gt;1. You create an account and fill in your basic contact info, as a hub.&lt;br /&gt;2. Send invitations to your friends via Email to join this site.&lt;br /&gt;3. Request creating links to your friends who have account in this site.&lt;br /&gt;&lt;br /&gt;The shortfalls are: though you can upload contacts to Linkedln through csv,  vCard or Outlook ActiveX, Linkedln extract only contact name and Email address,  and the Email address is then used as unique id to identify people and invite  people. You can't use Linkedln as an Web address book for all you contacts,  linked or not.&lt;br /&gt;&lt;br /&gt;There are tens of thousands of articles around discussing the good things and  the shortfalls of social networking websites. I am not going to join the debates  here, just express my ideas how to better melt desktop programs with web  applications regarding to the use cases of Open Contacts.&lt;br /&gt;&lt;br /&gt;Three Objectives&lt;br /&gt; &lt;ol&gt;&lt;li&gt;Access contact info through the Web&lt;/li&gt;&lt;li&gt;Automatically update database of Open Contacts when my contacts update   their contact info hub on the internet.&lt;/li&gt;&lt;li&gt;Form distributed social networking.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Use Cases with the Web&lt;br /&gt; &lt;ol&gt;&lt;li&gt;Sometimes you may go overseas for holiday or whatever and you don't want   to bring notebook computer or USB memory drive with you. To keep a list of   handy contacts with phone number and Email address, you will print all or   selected contacts on paper. In case you will even lost the paper, to get   better data insurance policy, you will export the contact info to HTML, then   save it on the web. The HTML with contact info can be an Email to your Web   mail address, or your private blog page, or simply a web page without   inbound link. This is fully supported in Open Contacts.&lt;/li&gt;&lt;li&gt;You might be working in a work place with strict security policy. You   are not allowed to install or run any other software on the workstation. So,   the Web will be the only option to access your private contact info. In   addition to exporting to HTML, you may export to XML. With technologies of   DHTML, XHTML and JavaScript, you can make the presentation of the XML on the   Web be more navigable, for example, restoring the navigations through   categories and initials. Thus, you don't need to rely on any centralized web   service to access contact info with pretty good navigation, the access is   very much controlled by you only. The shortfall is, you can't edit contact   info online. This is supported partially.&lt;/li&gt;&lt;li&gt;You might want to use &lt;a href="http://www.gmpg.org/xfn/"&gt;XHTML Friends   Network (XFN)&lt;/a&gt; to form a distributed social networking. With exported   XML, you may convert many contacts into XFN tags in a batch. I will come up   with more technical details in next article.&lt;/li&gt;&lt;li&gt;In Open Contacts, a field type called "update" will be supported. A   dynamic field of such type will point to a url of vCard, hCard or hCard   which is maintained by a contact person. A desktop program or a Web delegate   spider will regularly crawl through these links to resources of contacts in   order to merge the latest changes to Open Contacts' database, including   contact details and the relationships of common contacts. I will come up   with more technical details in a separated article.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;How will Open Contacts supports MicroFormats?&lt;/span&gt;&lt;br /&gt;hCard is an elegant way of representing personal contact info on the Web. Rather  than having HTML presentation and vCard together, essentially hCard embeds vCard  into HTML, so there won't be problem of synchronizing HTML and vCard. hCard is  getting popular.&lt;br /&gt;&lt;br /&gt;Besides hCard, there are quite a few publicly available XML schemes which  represent vCard in XML. Pretty confusing as illustrated in &lt;a href="http://www.xml.com/pub/a/2004/03/31/qa.html"&gt;this article&lt;/a&gt;. Thought  it is not really hard to convert XML of Open Contacts into those XML schemes, I  think it is not very useful to support them, because normally you will publish  your own contact info but not others, and there are around some web programs  that can transform vCard to specific a XML format.&lt;br /&gt;&lt;br /&gt;What I would support is XFN, which can be a handy solution for  distributed/decentralized social networking.&lt;br /&gt; &lt;br /&gt;I will discuss this more in next article.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-8423475245554411346?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/8423475245554411346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/8423475245554411346'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/03/open-contacts-and-distributed-social_17.html' title='Open Contacts and distributed social networking, Part 2'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-3322040533136997637</id><published>2007-03-17T18:14:00.000-07:00</published><updated>2007-03-17T18:15:34.835-07:00</updated><title type='text'>Open Contacts and distributed social networking, Part 1</title><content type='html'>While I recognize the values of existing social networking web sites, I think  distributed social networking can be a very good complementation or an  alternative solution to some groups of people.&lt;br /&gt;&lt;br /&gt;In my blog&lt;br /&gt; &lt;h3 class="post-title"&gt;&lt;span style="font-size:85%;"&gt; &lt;a href="http://webandlife.blogspot.com/2007/03/is-web-20-address-book-silver-bullet.html"&gt; Is Web 2.0 Address Book a silver bullet?&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt; I discussed what an ideal address book could be and the difficulty of designing  such program. However, I think Open Contacts as a desktop program has a good  potential of playing part of distributed social networking.&lt;br /&gt;&lt;br /&gt;I respect that you have freedom of choosing whether to use the Internet or the  desktop as you premium/primary/central persistent storage of your contact  information.&lt;p&gt;Just summarize here the platforms that store you contact info:&lt;br /&gt; &lt;/p&gt; &lt;ol&gt;&lt;li&gt;Paper and business cards&lt;/li&gt;&lt;li&gt;PC&lt;/li&gt;&lt;li&gt;PDA and mobile phone&lt;/li&gt;&lt;li&gt;Web&lt;/li&gt;&lt;/ol&gt; Different people might have different dependencies to these platforms, have  different preferences and use cases from time to time.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;The Internet as primary storage&lt;/span&gt;&lt;br /&gt;For some groups of people, especially those with most contacts who are  contactable through the internet, they will prefer the internet as the primary  storage. Integrated with Web mail and Web base IM as well as other web based  applications, they can have most communications done. And an integrated service  can provide comprehensive logs for all of these activities.&lt;br /&gt;&lt;br /&gt;In addition, with mobile phones supporting Web capability, you can even sync  your phone logs to the integrated service. Though I don't have any insider news,  I am quite sure Google is going to do it.&lt;br /&gt;&lt;br /&gt;Though land line phones has been becoming less significant, it is good to  include land line phone in the contact log. It should be easy to involve IP  phone which was born of the Internet. To involve traditional land line phones,  there might be some hassles with those telecom operators.&lt;br /&gt;&lt;br /&gt;So, basically you can use computers anywhere with internet connection, to do all  your electronic contact management:&lt;br /&gt; &lt;ol&gt;&lt;li&gt;Edit and lookup contact info. This is basic thing.&lt;/li&gt;&lt;li&gt;Send Web Email and check Email logs.&lt;/li&gt;&lt;li&gt;Start Web base IM, and check IM logs.&lt;/li&gt;&lt;li&gt;Sync selected contacts with mobile phones, through PC port or Web.&lt;/li&gt;&lt;li&gt;Sync selected contacts with some programs that you have to use at work.&lt;/li&gt;&lt;li&gt;Print selected contacts to papers. Sometimes you still need a hard copy,   as least for insurance of data reliability.&lt;/li&gt;&lt;li&gt;Update contacts through some automatic ways, for example, importing from   other data sources.&lt;br /&gt; &lt;/li&gt;&lt;li&gt;Utilizing social networking.&lt;/li&gt;&lt;li&gt;Do birthday management, and any other activity that need contact info.&lt;/li&gt;&lt;/ol&gt; The Web will be the only place you need to live in for computing, and you just  need PDA/mobile as handy data access points, and might need a memory chip/CR-R  for some private backup if desired. You will enjoy the freedom of Web only life,  without any constraint by a specific PC. You do not need a Personal Computer.&lt;p&gt; &lt;b&gt;PDA as primary storage&lt;/b&gt;&lt;/p&gt; &lt;p&gt;PDA is handy, but not an adequate platform to manage large amount of contact  data due to the sizes of screen and input devices, I regard. However, I am sure  there are a lot people around using PDA as primary contact manager. In some  cases, they can do almost everything with PDA as the only computing platform,  without the need of using PC. They can backup data to PC, Web, flash drive or  any other external storage.&lt;br /&gt;&lt;br /&gt;I can even foreseen such trend: PDA can connect to a wireless keyboard, a  wireless mouse, and a wired big monitor (as I am not aware that there exist a  wireless monitor yet). Then a PDA can become like a PC, when it needs to.&lt;br /&gt;&lt;br /&gt;Actually, the line between PC and "pocket PC" is becoming deem. A bit off topic  now.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;The PC as primary storage&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Though I am not old enough to see the first day when computer came out of labs,  I am sure that at those days people started to use computer to store contact  info, and since the early day when PC was getting popular, there have been tens  of thousands of personal address book programs around. The trend is, the program  and the database have been moving to the internet/Web, since the first Web mail  program came out.&lt;br /&gt;&lt;br /&gt;However, for large majority of computer users, PC is still the primary platform  of computing, and contact info has to be integrated with those applications  (either desktop, LAN or the Internet) running on PC. These users will mostly  choose between PC desktop or the Web.&lt;br /&gt;&lt;br /&gt;A desktop application still have some advantages comparing with the counterpart  of the Web. A desktop application can freely access local resource, and Web  applications are limited to many local resources due to security concern. Thus,  web applications can hardly interact with non-Web applications with some  exceptions (for example, interacting with Email programs, Skype or others with  some pre-arrangements), while desktop applications can freely communicate with  the Web services as long as the services providers publish adequate protocols or  APIs.&lt;br /&gt;&lt;br /&gt;For many users, the availability of PC is more reliable than the availability of  the Internet. So, even if nowadays Web applications have been becoming more like  a desktop program, these users will still choose PC as primary platform. Desktop  programs mostly are faster and more reliable than web counterparts which  inevitably suffer from network traffic and server down/busy time.&lt;br /&gt;&lt;br /&gt;This is what I am going to discuss in the 2nd part of the article, about the  role of &lt;a href="http://www.fonlow.com/opencontacts"&gt;Open Contacts&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-3322040533136997637?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/3322040533136997637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/3322040533136997637'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/03/open-contacts-and-distributed-social.html' title='Open Contacts and distributed social networking, Part 1'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-4185037746732803985</id><published>2007-03-17T16:34:00.000-07:00</published><updated>2007-03-17T16:47:23.026-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social network'/><category scheme='http://www.blogger.com/atom/ns#' term='aggregate'/><title type='text'>Agregate our social networks</title><content type='html'>Just read "&lt;a href="http://benmetcalfe.com/blog/index.php/2007/02/12/do-we-really-want-to-aggregate-identiy/#comment-181778"&gt;Do we *Really" want to aggregate all our social networks?&lt;/a&gt;" by Ben Metcalfe. Pretty much agree the points.&lt;br /&gt;1. Some people want to form a few separated social networks of different subjects.&lt;br /&gt;2. It is good to aggregate some social networking websites with similar subjects, so you will have a few groups of social networks aggregated.&lt;br /&gt;&lt;br /&gt;This is ideal. Will those websites agree to provide some mechanism to do so?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-4185037746732803985?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4185037746732803985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/4185037746732803985'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/03/agregate-our-social-networks.html' title='Agregate our social networks'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-1824947131903850227</id><published>2007-03-17T07:08:00.000-07:00</published><updated>2007-03-17T17:01:04.743-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social networking'/><category scheme='http://www.blogger.com/atom/ns#' term='xfn'/><category scheme='http://www.blogger.com/atom/ns#' term='relationship'/><title type='text'>Do you contact them?</title><content type='html'>There are many articles/blogs around discussing about short falls of existing social networking websites, and put some hopes on Web 2.0 and XFN.&lt;br /&gt;&lt;br /&gt;Some of the problems with many social networking websites are:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The websites encourage you to make links with others. While the claims are to maintain updated info with your contacts and make new contacts through six-degree theory, the websites actually compete against each other for total number of subscribers.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Such encouragement of maximizing linked subscribers leads to the downgrade of the quality of social networking. Flooding of relationship spam is frustrating people and damaging the reputation of these websites.&lt;/li&gt;&lt;/ol&gt;Obviously, if you don't contact a person often enough, you will be losing contact/relationship/friendship with the person, even if you have some hyperlinks with the person through social networking websites.&lt;br /&gt;&lt;br /&gt;Social networking at the end is not about networking, is about contact. Without contacting to people in the networks often enough, your social network will be becoming just a set of cyber links, rather than real world relationships.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webandlife.blogspot.com/2007/03/is-web-20-address-book-silver-bullet.html"&gt;Address book and social networking&lt;/a&gt; should be integrated at some degree in order to strengthen your relationships with your contacts then expand your contacts through 6-degree theory. After all, it is you maintaining the relationships, and electronic social networking and address book along with other computer programs can assist you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-1824947131903850227?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/1824947131903850227'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/1824947131903850227'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/03/do-you-contact-people-in-social.html' title='Do you contact them?'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-5648646076945890763.post-3871424481133842940</id><published>2007-03-14T06:20:00.000-07:00</published><updated>2007-03-14T06:23:05.803-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social networking'/><category scheme='http://www.blogger.com/atom/ns#' term='linkedin'/><category scheme='http://www.blogger.com/atom/ns#' term='address book'/><title type='text'>Linkedin will become the most profitable</title><content type='html'>I just read an interesting blog from Jon Udell&lt;br /&gt;&lt;h3 class="storytitle"&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://blog.jonudell.net/2007/02/06/critical-mass-and-social-network-fatigue/" rel="bookmark"&gt;Critical mass and social network fatigue&lt;/a&gt;&lt;/span&gt;&lt;/h3&gt;&lt;span style="font-style: italic;"&gt;Recently &lt;/span&gt;&lt;a style="font-style: italic;" href="http://www.cigital.com/%7Egem/"&gt;Gary McGraw&lt;/a&gt;&lt;span style="font-style: italic;"&gt; echoed Ben Smith’s 1991 observation. “People keep asking me to join the LinkedIn network,” he said, “but I’m already part of a network, it’s called the Internet.”&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Yes, current social networking sites are more like clusters of the larger network called the Internet. Of course these clusters have their values to diversification of users. Some like Gray might prefer living outside these clusters, so do I. I agree some follow up comments stated: it is not about which replace which.&lt;br /&gt;&lt;br /&gt;I think this is just about preference, and diversification of choices.&lt;br /&gt;&lt;br /&gt;Among social networking web sites, Linkedin focuses on professional network, rather ah-ho network. I regard if Linkedin carefully maintain the reputation of high quality, Linkedin will likely be the most profitable social working web site, though not necessarily the largest community/ population. The others, if each of them focuses on too many domains, than they will becoming the same, and less profitable, and confusing users and potential users.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5648646076945890763-3871424481133842940?l=webandlife.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/3871424481133842940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5648646076945890763/posts/default/3871424481133842940'/><link rel='alternate' type='text/html' href='http://webandlife.blogspot.com/2007/03/linkedin-will-become-most-profitable.html' title='Linkedin will become the most profitable'/><author><name>Zijian A</name><uri>http://www.blogger.com/profile/13275514659971793139</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='23' src='http://bp2.blogger.com/_0Ec3HWOLHjk/R9XoY8OcttI/AAAAAAAAAEI/mFE9cOBwjAQ/S220/yoda.gif'/></author></entry></feed>
