<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="https://www.stress-free.co.nz"  xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>stressfree - google</title>
 <link>https://www.stress-free.co.nz/tech/google</link>
 <description></description>
 <language>en</language>
<item>
 <title>Integrating Google Site Search into SilverStripe</title>
 <link>https://www.stress-free.co.nz/integrating_google_site_search_into_silverstripe</link>
 <description>
  &lt;div class=&quot;field-body&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;img src=&quot;/sites/default/files/u63/silverstripe-logo.png&quot; alt=&quot;&quot; width=&quot;100&quot; height=&quot;97&quot; /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://silverstripe.org/&quot;&gt;SilverStripe&lt;/a&gt; is an excellent, user-friendly content management system but its internal search functionality is, to put it kindly, useless. Fortunately with &lt;a href=&quot;http://www.google.com/sitesearch/&quot;&gt;Google Site Search&lt;/a&gt; you can embed a Google-powered custom search engine into your SilverStripe site. Doing so requires a paid Site Search account, pricing for which starts at  $100/year.&lt;/p&gt;
&lt;p&gt;This tutorial explains how to integrate this Google Site Search XML feed into your SilverStripe site. Doing so has a number of benefits over the &lt;a href=&quot;http://www.google.com/sitesearch/#custom&quot;&gt;standard means of integrating&lt;/a&gt; Site Search, namely:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;No Javascript is required to display results within the SilverStripe site.&lt;/li&gt;
&lt;li&gt;The user is not taken to a separate, Google operated website to view results.&lt;/li&gt;
&lt;li&gt;The look and feel is consistent with the rest of the SilverStripe site.&lt;/li&gt;
&lt;li&gt;Multiple Site Search engines can be integrated into a single SilverStripe site.&lt;/li&gt;
&lt;li&gt;Site Search results pages are integrated into SilverStripe&#039;s management console.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; To integrate Site Search into SilverStripe using the described method a Site Search plan must be purchased as this provides results in XML. The free, advertising supported, Site Search engine does not provide search results in XML and cannot be used.&lt;/p&gt;
&lt;!--break--&gt;
&lt;h2&gt;Loading XML data from an external source&lt;br /&gt;&lt;/h2&gt;
&lt;p&gt;Before the search page can be added to SilverStripe we need a reliable means of loading XML content. This is complicated by the fact many Web hosts disable PHP&#039;s built in &lt;a href=&quot;http://www.php.net/function.fopen&quot;&gt;URL fetcher (fopen)&lt;/a&gt; with the following &lt;strong&gt;php.ini&lt;/strong&gt; directive:&lt;/p&gt;
&lt;p class=&quot;codesnippet&quot;&gt;allow_url_fopen = Off&lt;/p&gt;
&lt;p&gt;Assuming it is installed, the  &lt;a href=&quot;http://curl.haxx.se/&quot;&gt;cURL&lt;/a&gt; can get around this restriction, hence the XmlLoader helper library includes both methods (cURL is used by default in search.php).&lt;/p&gt;
&lt;p&gt;Create a XmlLoader.php file in your SilverStripe&#039;s mysite/code directory with the following contents:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;mysite/code/XmlLoader.php&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;codesnippet&quot;&gt;&amp;lt;?php&lt;br /&gt;class XmlLoader {&lt;br /&gt;&lt;br /&gt; public function pullXml($url, $parameters, $useCurl) {&lt;br /&gt; $urlString = $url.&quot;?&quot;.$this-&amp;gt;buildParamString($parameters);&lt;br /&gt;&lt;br /&gt; if ($useCurl) {&lt;br /&gt; return simplexml_load_string($this-&amp;gt;loadCurlData($urlString));&lt;br /&gt; } else {&lt;br /&gt; return simplexml_load_file($urlString);&lt;br /&gt; }            &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private function loadCurlData($urlString) {&lt;br /&gt;&lt;br /&gt; if ($urlString == -1) {&lt;br /&gt; echo &quot;No url supplied&amp;lt;br/&amp;gt;&quot;.&quot;/n&quot;;&lt;br /&gt; return(-1);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; $ch = curl_init();&lt;br /&gt; curl_setopt($ch, CURLOPT_URL, $urlString);&lt;br /&gt; curl_setopt($ch, CURLOPT_TIMEOUT, 180);&lt;br /&gt; curl_setopt($ch, CURLOPT_HEADER, 0);&lt;br /&gt; curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);&lt;br /&gt; $data = curl_exec($ch);&lt;br /&gt; curl_close($ch);&lt;br /&gt;&lt;br /&gt; return $data;        &lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private function buildParamString($parameters) {&lt;br /&gt; $urlString = &quot;&quot;;&lt;br /&gt;&lt;br /&gt; foreach ($parameters as $key =&amp;gt; $value) {&lt;br /&gt; $urlString .= urlencode($key).&quot;=&quot;.urlencode($value).&quot;&amp;amp;&quot;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; if (trim($urlString) != &quot;&quot;) {&lt;br /&gt; $urlString = preg_replace(&quot;/&amp;amp;$/&quot;, &quot;&quot;, $urlString);&lt;br /&gt; return $urlString;    &lt;br /&gt; } else {&lt;br /&gt; return (-1);&lt;br /&gt; }&lt;br /&gt; }    &lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;/p&gt;
&lt;p&gt;With the helper library in place to load the XML, it is now time to implement the SilverStripe &quot;search&quot; page type and logic. Create a search.php file in your SilverStripe&#039;s mysite/code directory with the following contents:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;mysite/code/search.php&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;codesnippet&quot;&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt; require_once &#039;XmlLoader.php&#039;;&lt;br /&gt;&lt;br /&gt; class Search extends Page {&lt;br /&gt; static $db = array(&lt;br /&gt; &#039;GoogleSearchId&#039; =&amp;gt; &#039;Text&#039;,&lt;br /&gt; &#039;NoResults&#039; =&amp;gt; &#039;HTMLText&#039;,&lt;br /&gt; );&lt;br /&gt; static $has_one = array(&lt;br /&gt; );&lt;br /&gt;&lt;br /&gt; function getCMSFields() {&lt;br /&gt; $fields = parent::getCMSFields();&lt;br /&gt;&lt;br /&gt; $fields-&amp;gt;addFieldToTab(&#039;Root.Content.Main&#039;, new TextField(&lt;br /&gt; &#039;GoogleSearchId&#039;, &#039;Google Site Search ID&#039;), &#039;Content&#039;);&lt;br /&gt; $fields-&amp;gt;addFieldToTab(&#039;Root.Content.Main&#039;, new HtmlEditorField(&lt;br /&gt; &#039;NoResults&#039;, &#039;No results message&#039;), &#039;Content&#039;);&lt;br /&gt;&lt;br /&gt; # Remove the content field&lt;br /&gt; $fields-&amp;gt;removeFieldFromTab(&quot;Root.Content.Main&quot;,&quot;Content&quot;);&lt;br /&gt;&lt;br /&gt; return $fields;&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; class Search_Controller extends Page_Controller {&lt;br /&gt;&lt;br /&gt; function SearchForm() {&lt;br /&gt; $input = array_merge($_GET, $_POST);&lt;br /&gt; $query = $input[&#039;q&#039;];&lt;br /&gt;&lt;br /&gt; $output = &quot;&amp;lt;form class=\&quot;search\&quot; action=\&quot;/search/results\&quot;&amp;gt;&amp;lt;fieldset&amp;gt;&quot;;&lt;br /&gt; $output .= &quot;&amp;lt;input type=\&quot;text\&quot; size=\&quot;40\&quot; name=\&quot;q\&quot; value=\&quot;$query\&quot;/&amp;gt;&quot;;&lt;br /&gt; $output .= &quot;&amp;lt;input type=\&quot;hidden\&quot; name=\&quot;p\&quot; value=\&quot;1\&quot;/&amp;gt;&quot;;&lt;br /&gt; $output .= &quot;&amp;lt;input type=\&quot;submit\&quot; value=\&quot;Search\&quot;/&amp;gt;&quot;;&lt;br /&gt; $output .= &quot;&amp;lt;/fieldset&amp;gt;&amp;lt;/form&amp;gt;&quot;;&lt;br /&gt;&lt;br /&gt; return $output;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; function SearchResults() {&lt;br /&gt;&lt;br /&gt; $output = &quot;&quot;;&lt;br /&gt;&lt;br /&gt; $input = array_merge($_GET, $_POST);&lt;br /&gt; $page = isset($input[&#039;p&#039;]) ? $input[&#039;p&#039;] : &#039;1&#039;;&lt;br /&gt; $query = $input[&#039;q&#039;];&lt;br /&gt;&lt;br /&gt; $perPage = 10;&lt;br /&gt; if ($page &amp;lt; 1) { $page = 1; }&lt;br /&gt;&lt;br /&gt; $xml = $this-&amp;gt;getGoogleSearchResults($this-&amp;gt;GoogleSearchId, $perPage, $page, $query);&lt;br /&gt; $results = $this-&amp;gt;parseGoogleSearchResults($xml);&lt;br /&gt;&lt;br /&gt; $totalResults = $this-&amp;gt;getResultCount($xml);&lt;br /&gt;&lt;br /&gt; $output .= $this-&amp;gt;getFormattedResults($results);&lt;br /&gt;&lt;br /&gt; if (count($results) == 0) {&lt;br /&gt; // Show no results message&lt;br /&gt; $output .= $this-&amp;gt;NoResults;;&lt;br /&gt; } else {&lt;br /&gt; // Append paging&lt;br /&gt; $output .= $this-&amp;gt;getPagingForResults($totalResults, $query, $perPage, $page);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; return $output;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; private function getGoogleSearchResults($googleId, $perPage, $page, $query) {&lt;br /&gt;&lt;br /&gt; $startingRecord = ($page - 1) * $perPage;&lt;br /&gt;&lt;br /&gt; $url = &quot;http://www.google.com/search&quot;;&lt;br /&gt; $parameters = array();&lt;br /&gt; $parameters[&quot;client&quot;] = &quot;google-csbe&quot;;&lt;br /&gt; $parameters[&quot;output&quot;] = &quot;xml_no_dtd&quot;;&lt;br /&gt; $parameters[&quot;num&quot;] = $perPage;&lt;br /&gt; $parameters[&quot;cx&quot;] = $googleId;&lt;br /&gt; $parameters[&quot;start&quot;] = $startingRecord;&lt;br /&gt; $parameters[&quot;q&quot;] = $query;&lt;br /&gt;&lt;br /&gt; $XmlLoader = new XmlLoader();&lt;br /&gt;&lt;br /&gt; return $XmlLoader-&amp;gt;pullXml($url, $parameters, true);&lt;br /&gt;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private function parseGoogleSearchResults($xml) {&lt;br /&gt;&lt;br /&gt; $results = array();&lt;br /&gt;&lt;br /&gt; $attr[&quot;title&quot;] = $xml-&amp;gt;xpath(&quot;/GSP/RES/R/T&quot;);&lt;br /&gt; $attr[&quot;url&quot;] = $xml-&amp;gt;xpath(&quot;/GSP/RES/R/U&quot;);&lt;br /&gt; $attr[&quot;desc&quot;] = $xml-&amp;gt;xpath(&quot;/GSP/RES/R/S&quot;);&lt;br /&gt;&lt;br /&gt; foreach($attr as $key =&amp;gt; $attribute) {&lt;br /&gt; $i = 0;&lt;br /&gt; foreach($attribute as $element) {&lt;br /&gt; $results[$i][$key] = (string)$element;&lt;br /&gt; $i++;&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; return $results;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private function getFormattedResults($results) {&lt;br /&gt;&lt;br /&gt; $output = &quot;&quot;;&lt;br /&gt;&lt;br /&gt; if (count($results) &amp;gt; 0) {&lt;br /&gt; $output .= &quot;&amp;lt;ul class=\&quot;results\&quot;&amp;gt;&quot;;&lt;br /&gt; foreach($results as $i =&amp;gt; $result) {&lt;br /&gt; $title = &quot;&quot;;&lt;br /&gt; $url = &quot;&quot;;&lt;br /&gt; $desc = &quot;&quot;;&lt;br /&gt; foreach($result as $key =&amp;gt; $value) {&lt;br /&gt; if ($key == &quot;title&quot;) {&lt;br /&gt; $title = $value;&lt;br /&gt; }&lt;br /&gt; if ($key == &quot;url&quot;) {&lt;br /&gt; $url = $value;&lt;br /&gt; }&lt;br /&gt; if ($key == &quot;desc&quot;) {&lt;br /&gt; $desc = $value;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; $output .= &quot;&amp;lt;li&amp;gt;&amp;lt;a href=\&quot;$url\&quot;&amp;gt;$title&amp;lt;/a&amp;gt;&amp;lt;p&amp;gt;&quot;;&lt;br /&gt; $output .= str_replace(&quot;&amp;lt;br&amp;gt;&quot;, &quot;&amp;lt;br/&amp;gt;&quot;, $desc);&lt;br /&gt; $output .= &quot;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;\n&quot;;&lt;br /&gt; }&lt;br /&gt; $output .= &quot;&amp;lt;/ul&amp;gt;&quot;;&lt;br /&gt; }&lt;br /&gt; return $output;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private function getResultCount($xml) {&lt;br /&gt;&lt;br /&gt; $totalResults = 0;&lt;br /&gt; $count = $xml-&amp;gt;xpath(&quot;/GSP/RES/M&quot;);&lt;br /&gt; foreach($count as $value) {&lt;br /&gt; $totalResults = $value;&lt;br /&gt; }&lt;br /&gt; return $totalResults;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; private function getPagingForResults($totalResults, $query, $perPage, $page) {&lt;br /&gt;&lt;br /&gt; $maxPage = ceil($totalResults/$perPage);&lt;br /&gt;&lt;br /&gt; if ($totalResults &amp;gt; 1) {&lt;br /&gt; $output = &quot;&amp;lt;div class=\&quot;searchPaging\&quot;&amp;gt;&amp;lt;p&amp;gt;&quot;;&lt;br /&gt;&lt;br /&gt; for($pageNum = 1; $pageNum &amp;lt;= $maxPage; $pageNum++) {&lt;br /&gt; if ($pageNum == $page) {&lt;br /&gt; $output .= &quot; &amp;lt;strong&amp;gt;$pageNum&amp;lt;/strong&amp;gt; &quot;;&lt;br /&gt; } else {&lt;br /&gt; $output .= &quot; &amp;lt;a href=\&quot;&quot;.$this-&amp;gt;AbsoluteLink().&quot;results?q=$query&amp;amp;p=$pageNum\&quot;&amp;gt;$pageNum&amp;lt;/a&amp;gt; &quot;;&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; $output .= &quot;&amp;lt;/p&amp;gt;&amp;lt;/div&amp;gt;&quot;;&lt;br /&gt; }&lt;br /&gt; return $output;&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; ?&amp;gt;&lt;/p&gt;
&lt;p&gt;This file defines a search page type with two fields, a Google Search Id and an HTML field that is displayed if no search results are found. As this page does not have any content of its own the default SilverStripe content field is also disabled to avoid confusion.&lt;/p&gt;
&lt;p&gt;With the backend logic in place it is time to implement the templates. The templates themselves will vary from site to site, but the examples given are good starting points. There are two templates, one which simply displays the search box and a second that displays the results.&lt;/p&gt;
&lt;p&gt;Create a Search.ss file in your SilverStripe&#039;s mysite/templates/Layout directory with the following contents:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;mysite/templates/Layout/Search.ss&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;codesnippet&quot;&gt;&amp;lt;% if Menu(2) %&amp;gt;&lt;br /&gt; &amp;lt;div class=&quot;pageWithMenu&quot;&amp;gt;&lt;br /&gt; &amp;lt;% end_if %&amp;gt;&lt;br /&gt; &amp;lt;div class=&quot;page&quot;&amp;gt;&lt;br /&gt; &amp;lt;% if Menu(2) %&amp;gt;&lt;br /&gt; &amp;lt;div class=&quot;content contentStandard&quot;&amp;gt;&lt;br /&gt; &amp;lt;% else %&amp;gt;&lt;br /&gt; &amp;lt;div class=&quot;content contentFull&quot;&amp;gt;&lt;br /&gt; &amp;lt;% end_if %&amp;gt;&lt;br /&gt; &amp;lt;h1&amp;gt;$Title&amp;lt;/h1&amp;gt;&lt;br /&gt; &amp;lt;div class=&quot;contentWrapper&quot;&amp;gt;&lt;br /&gt; $SearchForm&lt;br /&gt; &amp;lt;div class=&quot;clear&quot;&amp;gt;&amp;lt;!-- --&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;% if Menu(2) %&amp;gt;&lt;br /&gt; &amp;lt;div id=&quot;sidepanel&quot;&amp;gt;&lt;br /&gt; &amp;lt;% include SideBar %&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;div class=&quot;clear&quot;&amp;gt;&amp;lt;!-- --&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;% end_if %&amp;gt;&lt;/p&gt;
&lt;p&gt;Now create the results page named Search_results.ss in your SilverStripe&#039;s mysite/templates/Layout directory with the following contents:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;mysite/templates/Layout/Search_results.ss&lt;/strong&gt;&lt;/p&gt;
&lt;p class=&quot;codesnippet&quot;&gt;&amp;lt;% if Menu(2) %&amp;gt;&lt;br /&gt; &amp;lt;div class=&quot;pageWithMenu&quot;&amp;gt;&lt;br /&gt; &amp;lt;% end_if %&amp;gt;&lt;br /&gt; &amp;lt;div class=&quot;page&quot;&amp;gt;&lt;br /&gt; &amp;lt;% if Menu(2) %&amp;gt;&lt;br /&gt; &amp;lt;div class=&quot;content contentStandard&quot;&amp;gt;&lt;br /&gt; &amp;lt;% else %&amp;gt;&lt;br /&gt; &amp;lt;div class=&quot;content contentFull&quot;&amp;gt;&lt;br /&gt; &amp;lt;% end_if %&amp;gt;&lt;br /&gt; &amp;lt;h1&amp;gt;$Title&amp;lt;/h1&amp;gt;&lt;br /&gt; &amp;lt;div class=&quot;contentWrapper&quot;&amp;gt;&lt;br /&gt; $SearchForm&lt;br /&gt; &amp;lt;div id=&quot;searchResults&quot;&amp;gt;&lt;br /&gt; $SearchResults&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;div class=&quot;clear&quot;&amp;gt;&amp;lt;!-- --&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;% if Menu(2) %&amp;gt;&lt;br /&gt; &amp;lt;div id=&quot;sidepanel&quot;&amp;gt;&lt;br /&gt; &amp;lt;% include SideBar %&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;div class=&quot;clear&quot;&amp;gt;&amp;lt;!-- --&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;% end_if %&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The content of these two files will vary depending on your site. In the above example a SideBar include file is used to load the secondary menu.&lt;/p&gt;
&lt;p&gt;With the backend logic and template files in place it is time to rebuild the SilverStripe database so that the new page type can be recognised. Enter the following (modified) URL into your browser: http://yourwebsite/dev/build?flush=all&lt;/p&gt;
&lt;p&gt;All going well the rebuild command will execute correctly. If it does browse to the administration section of your site and create a &#039;search&#039; page type.&lt;/p&gt;
&lt;div class=&quot;centeredimage&quot;&gt;&lt;img src=&quot;/sites/default/files/u63/silverstripe-google-create.jpg&quot; alt=&quot;&quot; width=&quot;400&quot; height=&quot;247&quot; /&gt;&lt;br /&gt;The search page type in the create menu&lt;/div&gt;
&lt;p&gt;On the search page enter your relevant Google Search Id and Results Not Found message. For the page URL use /search as this is hard coded into the search.php file. It is possible to change this URL (or use a dynamic one) but for the purposes of this tutorial it is not necessary.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; You can get your Google Search Id from the Google Search administration console, or it can be found within the embed URL used in the Javascript or external search forms.&lt;/p&gt;
&lt;div class=&quot;centeredimage&quot;&gt;&lt;a href=&quot;/sites/default/files/u63/silverstripe-google-edit_lg.jpg&quot;&gt;&lt;img src=&quot;/sites/default/files/u63/silverstripe-google-edit_sm.jpg&quot; alt=&quot;&quot; width=&quot;400&quot; height=&quot;356&quot; /&gt;&lt;br /&gt;The search page settings (click to enlarge)&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Once published open the page and try a search. Assuming your code and settings are correct the Google search results should be displayed within your SilverStripe page. Now all there is left for you to do is style the results.&lt;/p&gt;
&lt;p&gt;For an example of this technique at work, checkout the &lt;a href=&quot;http://www.pco.parliament.govt.nz/search&quot;&gt;Parliamentary Counsel Office&#039;s search interface&lt;/a&gt; which is implemented using the method just described.&lt;/p&gt;  &lt;/div&gt;

&lt;ul class=&quot;field-taxonomy-vocabulary-1&quot;&gt;

      &lt;li&gt;
      &lt;a href=&quot;/tech/search&quot;&gt;search&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/google&quot;&gt;google&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/cms&quot;&gt;cms&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/silverstripe&quot;&gt;silverstripe&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/tutorial&quot;&gt;tutorial&lt;/a&gt;    &lt;/li&gt;
  
&lt;/ul&gt;
</description>
 <pubDate>Tue, 15 Sep 2009 08:32:53 +0000</pubDate>
 <dc:creator>David</dc:creator>
 <guid isPermaLink="false">550 at https://www.stress-free.co.nz</guid>
</item>
<item>
 <title>Google O3D may finally bring 3D to the Web</title>
 <link>https://www.stress-free.co.nz/google_o3d_may_finally_bring_3d_to_the_web</link>
 <description>
  &lt;div class=&quot;field-body&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;img src=&quot;/sites/default/files/u63/google_labs.jpg&quot; alt=&quot;&quot; width=&quot;164&quot; height=&quot;71&quot; /&gt;&lt;/div&gt;
&lt;p&gt;Today Google released a very early preview of &lt;a href=&quot;http://code.google.com/apis/o3d/&quot;&gt;O3D&lt;/a&gt;, a cross-platform, open source plug-in that enables OpenGL accelerated graphics within Web browsers. Delivering 3D graphics within browsers is not a new thing, (remember &lt;a href=&quot;http://en.wikipedia.org/wiki/VRML&quot;&gt;VRML&lt;/a&gt;?) but what makes this initiative promising is that it works on all platforms and is backed by Google. Performance-wise O3D seems very snappy when compared to alternatives such as Flash 3D. As a result some of the &lt;a href=&quot;http://code.google.com/apis/o3d/docs/samplesdirectory.html&quot;&gt;initial demonstrations&lt;/a&gt; are very impressive, and it hints at a future where Google Earth and SketchUp leave their desktop roots behind to become pure web applications.&lt;/p&gt;
&lt;div style=&quot;text-align: center; margin: 5px 0px 5px 0px;&quot;&gt;
&lt;object width=&quot;560&quot; height=&quot;340&quot;&gt;
&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/z02_yj6-VCY&amp;amp;hl=en&amp;amp;fs=1&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;&lt;embed type=&quot;application/x-shockwave-flash&quot; width=&quot;560&quot; height=&quot;340&quot; src=&quot;http://www.youtube.com/v/z02_yj6-VCY&amp;amp;hl=en&amp;amp;fs=1&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;!--break--&gt;
&lt;p&gt;From an architectural collaboration perspective O3D is valuable for a number of reasons. Firstly in a review situation it would mean remote clients can experience 3D designs without having to download, install and learn a separate &quot;viewer&quot; application. Likewise within an intranet such functionality would be valuable when navigating a project or company knowledge base. Whereas at the moment textual (web) data is quite distinct from 3D models, in a O3D-enabled future the two could be seamlessly intertwined in a variety of powerful ways. Finally by freely distributing 3D capabilities to everyone with a browser O3D opens up the possibility for new types of 3D-centric web applications that allow all design team participants to more effectively communicate ideas with one and other. For examples of these potential markets checkout the section &#039;Where will Dragonfly land?&#039; in my earlier &#039;&lt;a href=&quot;/autodesk_dragonfly_emerges_from_its_larvae&quot;&gt;Autodesk Dragonfly emerges from its larvae&lt;/a&gt;&#039; post. The people behind O3D&#039;s demo applications seem to appreciate this fact too, because the &quot;Interiors&quot; demo showcases such a tool (i.e. it &#039;copies&#039; Project DragonFly).&lt;/p&gt;
&lt;div class=&quot;centeredimage&quot;&gt;&lt;img src=&quot;/sites/default/files/u63/o3d_trends.jpg&quot; alt=&quot;&quot; width=&quot;400&quot; height=&quot;361&quot; /&gt;&lt;br /&gt;A 3D, Google Trends view of the Earth in O3D&lt;/div&gt;
&lt;p&gt;I have not yet created or rendered content using O3D, but if I get the chance there is a significant amount of &lt;a href=&quot;http://code.google.com/apis/o3d/docs/devguideintro.html&quot;&gt;developer documentation&lt;/a&gt; online. Anybody with web development experience should feel at home because the rendering engine is &lt;a href=&quot;http://code.google.com/apis/o3d/docs/devguidechap01.html&quot;&gt;initiated and controlled&lt;/a&gt; using Javascript. This is a great choice, not only does it make the technology accessible, but it means 3D can be integrated into &quot;traditional&quot; web applications using standard Javascript event handlers. For example if you were creating a web-based CAD application you could create the majority of the user-interface using standard HTML/Javascript and leave O3D to handle just the rendering of the model window(s). Such an approach also means developers who already have already created 3D web applications in Flash and HTML could leverage O3D without being completely rewritten.&lt;/p&gt;
&lt;p&gt;Overall O3D comes across as a very powerful and surprisingly polished early preview. Google are obviously very serious about 3D in the browser, and this implementation seems to be the most promising yet.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;  &lt;/div&gt;

&lt;ul class=&quot;field-taxonomy-vocabulary-1&quot;&gt;

      &lt;li&gt;
      &lt;a href=&quot;/thesis&quot;&gt;thesis&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/google&quot;&gt;google&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/autodesk&quot;&gt;autodesk&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/dragonfly&quot;&gt;dragonfly&lt;/a&gt;    &lt;/li&gt;
  
&lt;/ul&gt;
</description>
 <pubDate>Wed, 22 Apr 2009 11:23:22 +0000</pubDate>
 <dc:creator>David</dc:creator>
 <guid isPermaLink="false">543 at https://www.stress-free.co.nz</guid>
</item>
<item>
 <title>Safari 4 on Windows looks good</title>
 <link>https://www.stress-free.co.nz/safari_4_on_windows_looks_good</link>
 <description>
  &lt;div class=&quot;field-body&quot;&gt;
    &lt;p&gt;It is really nice to see Apple have dropped the unsightly bushed metal look in their latest &lt;a href=&quot;http://www.apple.com/safari/whats-new.html#windows&quot;&gt;Safari 4 beta&lt;/a&gt; on Windows. Whilst that aesthetic worked fine in OSX, in a Windows world next to &quot;traditional&quot; applications it came across as being really unsightly. Let&#039;s hope this is a sign iTunes will take on more of a native Windows aesthetic in a future release.&lt;/p&gt;
&lt;div class=&quot;centeredimage&quot;&gt;&lt;a href=&quot;/sites/default/files/u63/safari4_chrome_lg.jpg&quot;&gt;&lt;img src=&quot;/sites/default/files/u63/safari4_chrome_sm.jpg&quot; alt=&quot;&quot; width=&quot;400&quot; height=&quot;358&quot; /&gt;&lt;br /&gt;Identical twins: Safari 4 and Google Chrome (click to enlarge)&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;However what is really crazy is how much Safari 4 looks and behaves like &lt;a href=&quot;http://www.google.com/chrome&quot;&gt;Google Chrome&lt;/a&gt; on Windows. Apple&#039;s developers have spent the last few months &quot;borrowing&quot; many of Chrome&#039;s features, such as the top-sites view and browser tabs on top, but on Windows they have gone a step further with the menu system itself. This is not a bad thing as the result looks nice, but beyond the little Google logo in the top right, your average Windows user is going to have a hard time telling the difference between the two browsers.&lt;/p&gt;
&lt;p&gt;Now if only the Apple engineers would implement process isolation for each tab or window like in Chrome. It is hugely annoying to have all the Safari windows disappear just because somebody at Adobe cannot write a stable Flash plug-in.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;!--break--&gt;  &lt;/div&gt;

&lt;ul class=&quot;field-taxonomy-vocabulary-1&quot;&gt;

      &lt;li&gt;
      &lt;a href=&quot;/tech/apple&quot;&gt;apple&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/google&quot;&gt;google&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/windows&quot;&gt;windows&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/safari&quot;&gt;safari&lt;/a&gt;    &lt;/li&gt;
  
&lt;/ul&gt;
</description>
 <pubDate>Wed, 25 Feb 2009 23:37:47 +0000</pubDate>
 <dc:creator>David</dc:creator>
 <guid isPermaLink="false">538 at https://www.stress-free.co.nz</guid>
</item>
<item>
 <title>StressFree Webmin theme version 2.0 released</title>
 <link>https://www.stress-free.co.nz/stressfree_webmin_theme_version_20_released</link>
 <description>
  &lt;div class=&quot;field-body&quot;&gt;
    &lt;p&gt;Version 2.0 of the &lt;a href=&quot;/webmin-theme&quot;&gt;StressFree Webmin theme&lt;/a&gt; adds limited support for &lt;a href=&quot;http://gears.google.com/&quot;&gt;Google Gears&lt;/a&gt;. Whilst this addition does not provide true &quot;offline&quot; functionality it does help speed up the performance of the Webmin theme, especially over slow connections. In a nutshell Gears is used to cache a significant portion of Webmin&#039;s static content (images, javascript and CSS).&lt;/p&gt;
&lt;p&gt;To enable Gears click the Gears link on the top right of the screen and follow the instructions. If your browser does not have Gears installed you will be provided a link to install the library. A demonstration of this functionality is given in the video below. There is not much to see, but the performance improvement is noticeable if you use Webmin a lot.&lt;/p&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;object width=&quot;480&quot; height=&quot;295&quot;&gt;
&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/8bsdTNs86J8&amp;amp;hl=en&amp;amp;fs=1&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;&lt;embed type=&quot;application/x-shockwave-flash&quot; width=&quot;480&quot; height=&quot;295&quot; src=&quot;http://www.youtube.com/v/8bsdTNs86J8&amp;amp;hl=en&amp;amp;fs=1&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/div&gt;
&lt;p&gt;The concept and initial code for this functionality was kindly provided by &lt;a href=&quot;http://design.ebali.web.id/&quot;&gt;Dwi Kristianto&lt;/a&gt;. I have integrated his proposal into the core StressFree theme and in the process tweaked it a fair bit to ensure it works in a variety of Webmin configurations.&lt;/p&gt;
&lt;p&gt;This release also fixes a login screen rendering bug introduced since version 1.450 of Webmin. Unfortunately to resolve this bug backwards compatibility with Webmin versions &amp;gt; 1.450 is broken. If you are not using Webmin 1.450+ it is recommended that you do not install this theme, or better yet, &lt;strong&gt;upgrade Webmin&lt;/strong&gt; prior to installing this theme.&lt;/p&gt;
&lt;p&gt;The updated theme can be &lt;a href=&quot;/sites/default/files/theme-stressfree.tar.gz&quot;&gt;downloaded from here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;!--break--&gt;  &lt;/div&gt;

&lt;ul class=&quot;field-taxonomy-vocabulary-1&quot;&gt;

      &lt;li&gt;
      &lt;a href=&quot;/tech/webmin&quot;&gt;webmin&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/google&quot;&gt;google&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/gears&quot;&gt;gears&lt;/a&gt;    &lt;/li&gt;
  
&lt;/ul&gt;
</description>
 <pubDate>Mon, 16 Feb 2009 09:30:05 +0000</pubDate>
 <dc:creator>David</dc:creator>
 <guid isPermaLink="false">535 at https://www.stress-free.co.nz</guid>
</item>
<item>
 <title>Google Chrome rethinks the browser</title>
 <link>https://www.stress-free.co.nz/google_chrome_rethinks_the_browser</link>
 <description>
  &lt;div class=&quot;field-body&quot;&gt;
    &lt;div class=&quot;image&quot; style=&quot;margin-bottom: 35px;&quot;&gt;&lt;img src=&quot;/sites/default/files/u63/gchrome_logo.jpg&quot; alt=&quot;&quot; width=&quot;172&quot; height=&quot;72&quot; /&gt;&lt;/div&gt;
&lt;p&gt;Yesterday (&lt;a id=&quot;w13z&quot; title=&quot;after a comic strip teaser&quot; href=&quot;http://www.portfolio.com/interactive-features/2008/09/Google-Comic&quot;&gt;after a comic strip teaser&lt;/a&gt;) Google finally took the plunge and released their own web browser &lt;a id=&quot;jcuz&quot; title=&quot;web browser named Chrome&quot; href=&quot;http://gears.google.com/chrome/intl/en/features.html&quot;&gt;named Chrome&lt;/a&gt;. For years they have had a defacto relationship with Mozilla Firefox, but now they have decided to go it alone with their own, radically different offering. How this affects the Firefox/Google relationship is anyone&#039;s guess, but presumably for Mozilla having your &lt;a id=&quot;dpu3&quot; title=&quot;number one revenue stream&quot; href=&quot;http://www.techcrunch.com/2007/10/23/google-continues-to-bankroll-mozilla/&quot;&gt;number one revenue stream&lt;/a&gt; release a competing product is not a good sign.&lt;/p&gt;
&lt;h2 id=&quot;du3r&quot;&gt;So why should I care?&lt;/h2&gt;
&lt;p id=&quot;e1l:0&quot;&gt;Rather than a simple re-branding of Firefox, Google Chrome is a completely new beast built on top of the &lt;a id=&quot;jg3-&quot; title=&quot;Webkit rendering engine&quot; href=&quot;http://webkit.org/&quot;&gt;WebKit rendering engine&lt;/a&gt; (the same engine that drives Apple&#039;s &lt;a id=&quot;apli&quot; title=&quot;Safari&quot; href=&quot;http://www.apple.com/safari/&quot;&gt;Safari&lt;/a&gt;). Innovation is a term used pretty lightly in the technology industry, but in this case Google has really tried to break conventions and create something that is genuinely a generation better than the competition.&lt;/p&gt;
&lt;div class=&quot;centeredimage&quot;&gt;&lt;a href=&quot;/sites/default/files/u63/gchrome_taskmanager_lg.jpg&quot;&gt; &lt;img id=&quot;cbub&quot; style=&quot;width: 400px; height: 307px;&quot; src=&quot;/sites/default/files/u63/gchrome_taskmanager_sm.jpg&quot; alt=&quot;&quot; width=&quot;400&quot; height=&quot;307&quot; /&gt;&lt;br /&gt;The Chrome interface with its Task Manager (click to enlarge) &lt;/a&gt;&lt;/div&gt;
&lt;h2 id=&quot;kh7s&quot;&gt;Process isolation comes to tabs&lt;/h2&gt;
&lt;p id=&quot;e1l:1&quot;&gt;The biggest conceptual leap the developers have made is thinking of each tab as its own distinct process. Traditionally your browser has run as a single process, which means when one tab or window goes haywire the whole thing goes up in a puff of smoke. By running each tab as a distinct, protected process the browser gains a level of robustness never considered possible. In fact in some respects Google Chrome is a lightweight operating system unto itself, it even has its own Task Manager for monitoring and selectively killing errand tabs.&lt;/p&gt;
&lt;!--break--&gt;
&lt;div class=&quot;centeredimage&quot;&gt;&lt;a href=&quot;/sites/default/files/u63/gchrome_killtab_lg.jpg&quot;&gt; &lt;img id=&quot;ojyx&quot; style=&quot;width: 400px; height: 307px;&quot; src=&quot;/sites/default/files/u63/gchrome_killtab_sm.jpg&quot; alt=&quot;&quot; width=&quot;400&quot; height=&quot;307&quot; /&gt;&lt;br /&gt;What it looks like when you kill a tab (click to enlarge) &lt;/a&gt;&lt;/div&gt;
&lt;h2 id=&quot;jmy-&quot;&gt;A lightweight, tab-centric interface&lt;/h2&gt;
&lt;p id=&quot;e1l:2&quot;&gt;Google have also taken the interface concept of tabs to a new level by making it the primary interface element. Whereas conventionally the browser tab has been subservient to the navigation bar, in Chrome this relationship is reversed. Tabs are the high-level interface element which everything else is related to. Also gone is the 90&#039;s concept of a &#039;home page&#039;. When you create a new tab in Chrome you are presented with a very tidy activity overview which displays frequently visited sites, new bookmarks, closed tabs and of course a big search box.&lt;/p&gt;
&lt;div class=&quot;centeredimage&quot;&gt;&lt;a href=&quot;/sites/default/files/u63/gchrome_newtab_lg.jpg&quot;&gt; &lt;img id=&quot;s05w&quot; style=&quot;width: 400px; height: 307px;&quot; src=&quot;/sites/default/files/u63/gchrome_newtab_sm.jpg&quot; alt=&quot;&quot; width=&quot;400&quot; height=&quot;307&quot; /&gt;&lt;br id=&quot;qz7_&quot; /&gt; The activity overview tab (click to enlarge) &lt;/a&gt;&lt;/div&gt;
&lt;h2 id=&quot;jmy-0&quot;&gt;Chrome is fast... really fast&lt;/h2&gt;
&lt;p id=&quot;e1l:3&quot;&gt;The decision to use WebKit over Mozilla&#039;s Gecko rendering engine helps in the speed stakes. For a while now Apple has been trumpeting how fast their browser is, but now Google have trumped them with this effort. Given that the majority of Google&#039;s web properties rely heavily on Javascript it is unsurprising to see that they have used a new and &lt;a id=&quot;ftow&quot; title=&quot;very fast Javascript engine&quot; href=&quot;http://scriptnode.com/article/google-chrome-benchmarks/&quot;&gt;very fast Javascript engine&lt;/a&gt;. Thanks to the recent developments in Javascript run-time technology the language can no longer be considered &#039;dead slow&#039;. Whilst it may not be as fast as compiled C, for most day to day tasks it is now more than adequate.&lt;/p&gt;
&lt;h2 id=&quot;kt450&quot;&gt;What does it mean for me the poor old web developer?&lt;br id=&quot;l.-8&quot; /&gt;&lt;/h2&gt;
&lt;p id=&quot;e1l:4&quot;&gt;With Chrome&#039;s WebKit rendering engine you can be fairly confident that if your website displays correctly in Safari 3 it will work fine. In all the tests I did there were no obvious rendering differences between the two browsers. As far a Javascript goes this will be a different story as Chrome uses a custom engine. My guess is as long as you stick to well trodden tracks and make use of popular Javascript libraries such as Prototype, JQuery and Dojo you will not experience too many issues. To help developers out a &lt;a id=&quot;sqww&quot; title=&quot;Firebug-like inspector&quot; href=&quot;http://getfirebug.com/&quot;&gt;Firebug-like inspector&lt;/a&gt; is included which lets you drill down into your HTML and Javascript for easy troubleshooting. Chrome also ships with &lt;a id=&quot;l13l&quot; title=&quot;Google Gears built in&quot; href=&quot;http://gears.google.com/&quot;&gt;Google Gears built in&lt;/a&gt;, so if you have been considering whether adding offline support to your applications is worthwhile, now maybe a good time to look into it.&lt;/p&gt;
&lt;div class=&quot;centeredimage&quot;&gt;&lt;a href=&quot;/sites/default/files/u63/gchrome_inspector_lg.jpg&quot;&gt; &lt;img id=&quot;g5y80&quot; style=&quot;width: 400px; height: 300px;&quot; src=&quot;/sites/default/files/u63/gchrome_inspector_sm.jpg&quot; alt=&quot;&quot; width=&quot;400&quot; height=&quot;300&quot; /&gt;&lt;br /&gt; The HTML/Javascript inspector (click to enlarge)&lt;/a&gt;&lt;/div&gt;
&lt;h2 id=&quot;ka21&quot;&gt;The beta for Windows is available now, OSX and Linux to follow&lt;/h2&gt;
&lt;p id=&quot;e1l:5&quot;&gt;Like most things, first out of the starting blocks is a Windows beta release. It sounds like OSX and Linux versions &lt;a id=&quot;mdy0&quot; title=&quot;will not be too far behind&quot; href=&quot;http://googlemac.blogspot.com/2008/09/platforms-and-priorities.html&quot;&gt;will not be too far behind&lt;/a&gt;, but releases will not be anytime this month. Installation is very straightforward, simply run the small (475kb) installer and it will go ahead and pull the latest release off the network. When the browser first starts you can import your settings from Firefox. Then to ward off any anti-trust lawsuits a prominent opportunity is provided to change the default search engine to something other than Google (does anyone actually use Live.com?).&lt;/p&gt;
&lt;div class=&quot;centeredimage&quot;&gt;&lt;img id=&quot;klne&quot; style=&quot;width: 400px; height: 206px;&quot; src=&quot;/sites/default/files/u63/gchrome_search_default.jpg&quot; alt=&quot;&quot; width=&quot;400&quot; height=&quot;206&quot; /&gt;&lt;br /&gt;The &#039;don&#039;t sue us&#039; change the default search engine pop-up&lt;/div&gt;
&lt;h2 id=&quot;klne0&quot;&gt;Final thoughts&lt;/h2&gt;
&lt;p id=&quot;e1l:6&quot;&gt;Google Chrome is a great beta release of a truly next generation web browser. For anyone like myself who writes web applications for a living the introduction of tab-level process isolation is a very welcome sight. Whether or not the average user accepts Chrome will be another story. Many businesses will hesitate due to the privacy cloud hanging over anything from Google (even though the majority of their desktops, servers and mobile phones are exclusively Microsoft). Even if Google Chrome does not succeed in the market lets hope that some of its innovations at least rub off on its competitors.&lt;/p&gt;
&lt;p&gt;&lt;br id=&quot;q1r9&quot; /&gt;&lt;/p&gt;  &lt;/div&gt;

&lt;ul class=&quot;field-taxonomy-vocabulary-1&quot;&gt;

      &lt;li&gt;
      &lt;a href=&quot;/tech/web_2_0&quot;&gt;web 2.0&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/google&quot;&gt;google&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/mozilla&quot;&gt;mozilla&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/internet&quot;&gt;internet&lt;/a&gt;    &lt;/li&gt;
  
&lt;/ul&gt;
</description>
 <pubDate>Wed, 03 Sep 2008 11:15:45 +0000</pubDate>
 <dc:creator>David</dc:creator>
 <guid isPermaLink="false">522 at https://www.stress-free.co.nz</guid>
</item>
<item>
 <title>Web Forms in Google Docs</title>
 <link>https://www.stress-free.co.nz/web_forms_in_google_docs</link>
 <description>
  &lt;div class=&quot;field-body&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;img src=&quot;/sites/default/files/u63/google-docs-logo.jpg&quot; title=&quot;undefined&quot; width=&quot;150&quot; height=&quot;65&quot; onmouseover=&quot;undefined&quot; onmouseout=&quot;undefined&quot; /&gt;&lt;/div&gt;&lt;p&gt;Yesterday &lt;a href=&quot;http://docs.google.com/&quot;&gt;Google Docs&lt;/a&gt; users where given the ability to &lt;a href=&quot;http://googledocs.blogspot.com/2008/02/stop-sharing-spreadsheets-start.html&quot;&gt;define spreadsheet-backed Web Forms&lt;/a&gt; for gathering feedback from people. The interface for doing this is very clean and it is a piece of functionality that could prove to be a real time-saver for those wishing to conduct quick surveys or gather structured feedback on a topic. Even though Google Docs doesn&#039;t compare well in a straight-up comparison with Microsoft Excel it is Web-centric functionality like this that put it ahead, especially in environments where spreadsheets are used more for communication than data crunching.&lt;/p&gt;&lt;p&gt;Below is a screen-cast demonstrating the use of Web Forms within Google Docs. It runs for a couple of minutes and covers the creation of the form, filling it out and receiving the data.&lt;/p&gt;&lt;div style=&quot;text-align: center; margin: 5px&quot;&gt;&lt;object classid=&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;	&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/bme4z2gFoas&amp;amp;rel=1&quot; /&gt;&lt;param name=&quot;quality&quot; value=&quot;high&quot; /&gt;&lt;param name=&quot;menu&quot; value=&quot;false&quot; /&gt;&lt;param name=&quot;wmode&quot; value=&quot;&quot; /&gt;&lt;embed src=&quot;http://www.youtube.com/v/bme4z2gFoas&amp;amp;rel=1&quot; wmode=&quot;&quot; quality=&quot;high&quot; menu=&quot;false&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;!--break--&gt;&lt;p&gt;Although this new functionality is very powerful there are many areas where Google Docs need to evolve in order to become a compelling application suite.&lt;/p&gt;&lt;h2&gt;Copying Documents&lt;/h2&gt;&lt;p&gt;It may seem trivial but there does not seem to be a way of making a copy of a document within Google Docs. Setting up a Web Form takes time and the ability to make a copy of an existing form without modifying the original would seem like a simple yet very useful piece of functionality to include.&lt;/p&gt;&lt;h2&gt;Templates&lt;/h2&gt;&lt;p&gt;Along the same line of thought the ability to define and share document templates would be very useful especially in a business environment. When it comes to data collection a lot of companies have standardised forms that need to be completed at various times. The ability for staff to create a new document based on one of these templates would save time and ensure that data/form consistency is maintained. Even better would be if these templates could be exposed as list of hyperlinks so that staff could browse and instantiate documents from websites outside of the Google Docs environment (i.e. the company Intranet).&lt;/p&gt;&lt;h2&gt;Smart logging of respondents&lt;/h2&gt;&lt;p&gt;Whilst a timestamp is recorded in the spreadsheet for each set of results there is no option to automatically record who responded to the Web Form, it is up to the Web Form designer to ask. It would seem relatively straight forward to embed an id key into the returned Web Form so that respondents could be more efficiently monitored. Also as currently each response is in effect anonymous there is no validation that someone has not submitted the form multiple times. Again including some form of identification within the returned form would mean that respondents could be limited to only one response. In a casual environment this is not such a big deal, but in formal studies or for business use having this level of validation is a necessity.&lt;/p&gt;&lt;h2&gt;Embedding Web Forms in Text Documents&lt;/h2&gt;&lt;p&gt;The current client-side presentation of Web Forms is pretty sparse even by Google standards and quite often a Web Form will need to relate to a larger document. This maybe because the feedback sought is about the referenced document or there maybe legal requirements to satisfy such as a statement of ethics and privacy terms. It would seem like the best way of solving this problem would be to enable Web Forms to be embedded within other Google Docs document types. This would provide a flexible tool-set for presenting and gathering feedback from people, especially if more than one Web Form could be embedded within a document or presentation.&lt;/p&gt;&lt;p&gt;Even though these functional shortcomings currently exist the Web Form functionality in Google Docs is a brilliant step towards creating a collaborative office suite that isn&#039;t just a striped down copy of Microsoft Office. Hopefully this represents just the tip of the functionality iceberg and over time we see its feature-set and integration with other Google offerings expand and evolve.&lt;/p&gt;  &lt;/div&gt;

&lt;ul class=&quot;field-taxonomy-vocabulary-1&quot;&gt;

      &lt;li&gt;
      &lt;a href=&quot;/tech/google&quot;&gt;google&lt;/a&gt;    &lt;/li&gt;
  
&lt;/ul&gt;
</description>
 <pubDate>Thu, 07 Feb 2008 21:59:33 +0000</pubDate>
 <dc:creator>David</dc:creator>
 <guid isPermaLink="false">500 at https://www.stress-free.co.nz</guid>
</item>
<item>
 <title>Off-line enabling existing applications with Gears</title>
 <link>https://www.stress-free.co.nz/off_line_enabling_existing_applications_with_gears</link>
 <description>
  &lt;div class=&quot;field-body&quot;&gt;
    &lt;div style=&quot;margin: 10px; float: left&quot;&gt;&lt;img src=&quot;/sites/default/files/u63/gears_sm.png&quot; width=&quot;153&quot; height=&quot;53&quot; /&gt;&lt;/div&gt;
&lt;p&gt;Today Google released their open source &lt;a href=&quot;http://gears.google.com/&quot;&gt;Google Gears extension&lt;/a&gt; for Firefox and Internet Explorer. Also announced at the same time was upcoming support for the Safari and Opera browsers and inclusion of the technology into &lt;a href=&quot;http://labs.adobe.com/wiki/index.php/Apollo&quot;&gt;Adobe&amp;#39;s Apollo framework&lt;/a&gt;. All these things should help make the concepts underpinning the software fairly ubiquitous. You may at this point be asking yourself what is Gears? In a sentence it is a set of Javascript API&amp;#39;s and supporting backend functionality to enable offline use of Web applications. For more information on the subject I would recommend checking out &lt;a href=&quot;http://blogs.zdnet.com/Berlind/?p=504&quot;&gt;David Berlind&amp;#39;s recent podcast interview with Linus Upson&lt;/a&gt; of Google on the topic. &lt;/p&gt;
&lt;p&gt;Google Gears is big news because a Web-based application&amp;#39;s biggest stumbling block has always been the fact that if there is no Internet access your application stops working. If you are like me and write Web-based database applications then this is really interesting because it opens up opportunities for your users to access their data in a variety of ways that are currently impossible. For example WhichDoctor manages physician information ranging from their contact information through to their training history. From my perspective it would be nice for a user of this application to be able to pull down a sub-set of this data so they can take it away to a secluded beach to work on for the weekend. Gears helps in realising this functional requirement on the browser but for existing and complex applications like WhichDoctor there is still a great many problems to overcome before such a possibility becomes reality.&lt;/p&gt;
&lt;!--break--&gt;&lt;div style=&quot;margin: 10px; text-align: center&quot;&gt;&lt;img src=&quot;/sites/default/files/u63/gears_legacy_webapp.jpg&quot; width=&quot;567&quot; height=&quot;200&quot; /&gt;&lt;/div&gt;
&lt;h2&gt;Off-line enabling a legacy Web application &lt;/h2&gt;
&lt;p&gt;Gears is great if you are starting out with a brand new application because you have the opportunity to design the architecture and interface from scratch to work seamlessly with this new on-line/off-line paradigm. However in an existing application where there is already a well-entrenched user-interface and code base that cannot be simply thrown away taking advantage of Gears is a more complicated process. For example it is unrealistic to suggest that each client keep even partial copy of the entire database schema if it is complicated and has a lot of business logic associated with it. In this case it is my opinion (at the moment) that the wisest course of action is to utilise the &lt;a href=&quot;http://code.google.com/apis/gears/api_localserver.html&quot;&gt;page-caching capability&lt;/a&gt; of Gears alongside a greatly simplified &lt;a href=&quot;http://code.google.com/apis/gears/api_database.html&quot;&gt;browser-based SQL database&lt;/a&gt; for basic searching. Such a strategy would provide a limited yet functional off-line experience whilst working within the constraints of the existing codebase and database schema. &lt;/p&gt;
&lt;div style=&quot;margin: 10px; text-align: center&quot;&gt;&lt;img src=&quot;/sites/default/files/u63/gears_offline_webapp.jpg&quot; width=&quot;582&quot; height=&quot;493&quot; /&gt;&lt;/div&gt;
&lt;p&gt;In the above diagram above the user of the application would identify a subset of the total database population they would like to have &amp;#39;synced&amp;#39; to their browser. The server would return this subset in XML or JSON format so that it could be parsed by the browser and inserted into the off-line database. The resultset would include basic search fields, for example if related to people it would break the names down to their first and last components so that relatively basic, browser-side searches could be performed (e.g. everyone with a last name of Harrison). Once inserted the routine would then loop through the dataset and request the associated HTML &amp;#39;view&amp;#39; of each piece of data from the server for storing in the file cache. During the server-side page rendering process any application functionality not available in the offline, cached version would be excluded to ensure a smooth user experience (there is no point confusing the user with options that do not work). With the dataset and cached pages all stored locally on the browser the user would then be able to go on holiday and use the application in partnership with their data-subset quite happily. &lt;/p&gt;
&lt;h2&gt;Off-line write operations &lt;/h2&gt;
&lt;p&gt;The example given above does not include write functionality which would need to be implemented at a later date. Whilst possible with Gears version control in the event of an off-line data change would raise a couple of issues that would need dealing with. Firstly any offline data change would require some notification or re-rendering of the cached version of the page view so to notify the user the underlying data had been modified. Secondly when returning to an on-line state and the change committed to the primary database a consistency check would need to be made to ensure newer data did not already exist in the database, the last thing we want to do is overwrite new data with old.&lt;/p&gt;
&lt;h2&gt;Conclusion &lt;/h2&gt;
&lt;p&gt;Google Gears is a great development that holds significant potential for Web applications designed with it in mind. Off-line enabling existing Web applications, especially complicated ones is a challenging task that will only be achieved through a number of small but logical first steps. Still it is great to see off-line capability enter the vocabulary of the Web application. In the long-term off-line innovations such as Gears will have as significant an effect on the Web application market as AJAX has had in the last few years.  &lt;/p&gt;
  &lt;/div&gt;

&lt;ul class=&quot;field-taxonomy-vocabulary-1&quot;&gt;

      &lt;li&gt;
      &lt;a href=&quot;/tech/google&quot;&gt;google&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/javascript&quot;&gt;javascript&lt;/a&gt;    &lt;/li&gt;
  
&lt;/ul&gt;
</description>
 <pubDate>Thu, 31 May 2007 12:21:28 +0000</pubDate>
 <dc:creator>David</dc:creator>
 <guid isPermaLink="false">438 at https://www.stress-free.co.nz</guid>
</item>
<item>
 <title>Google Apps gets serious but where is the offline option?</title>
 <link>https://www.stress-free.co.nz/google_apps_gets_serious_but_where_is_the_offline_option</link>
 <description>
  &lt;div class=&quot;field-body&quot;&gt;
    &lt;p&gt;On February 21st Google &lt;a href=&quot;http://www.techcrunch.com/2007/02/21/google-launches-apps-premier/&quot;&gt;released their anticipated Premier and Education versions&lt;/a&gt; of its &lt;a href=&quot;http://www.google.com/a/&quot;&gt;Google Apps service&lt;/a&gt;. In a rare move for Google the Premier option actually costs the business US$50 per user per year rather than simply relying on advertising revenue. For your money you get &lt;a href=&quot;https://www.google.com/a/help/intl/en/admins/editions.html&quot;&gt;quite a few more features&lt;/a&gt;: 10gig of storage per user, some interesting looking API&#039;s and a guarantee of 99.9% uptime with support.&lt;/p&gt;&lt;p&gt;On the whole deal is pretty good but Google has gone out of their way to stress that this service is targeted at the significant portion of employees who do not actually have email accounts on the basis that it is too expensive for the business to maintain them internally. Aiming at this market is a good strategy considering Google Apps lacks one significant feature that will see it struggle to gain acceptance in the majority of businesses where staff email is an entrenched and essential service: &lt;strong&gt;offline access&lt;/strong&gt;.&lt;/p&gt;&lt;p&gt;&lt;!--break--&gt;Offline access from a businesses perspective is not a question of whether the computer is connected to an internal network but whether this internal network can access to the Internet. This internal network is generally very reliable but Internet access will never be 100% reliable due to its inherit complexities. Consequently whilst network administrators can comfortably guarantee their bosses that the internal network will function during business hours they cannot provide the same assurance with the Internet, especially considering many factors are beyond their control. From a business perspective this is an important issue because even when the Internet is not accessible employees need to be digitally productive. To do so they need to reliably achieve three basic tasks:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Send messages&lt;/li&gt;&lt;li&gt;Receive messages&lt;/li&gt;&lt;li&gt;Review old messages&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;In a GMail-centric environment if the Internet fails none of these primary tasks can be undertaken. In an internally hosted email environment employees are still able to review and compose new messages for sending as soon as Internet access is restored. Anyone will tell you having two thirds of some functionality available during a disaster is a lot better than none at all:&lt;/p&gt;&lt;h6&gt;&lt;a href=&quot;http://pages.citebite.com/v1r1a7c2p8xkv&quot;&gt;&quot;I want the people to know that they still have 2 out of 3 branches of the government working for them, and that ain&#039;t bad.&quot;&lt;/a&gt; &lt;sub&gt;Mars Attacks&lt;/sub&gt;&lt;/h6&gt;&lt;p&gt;How can Google Apps provide a similar level of offline service even in the event of Internet downtime? For the most part people have answered this question by pointing to emerging, &lt;a href=&quot;http://www.readwriteweb.com/archives/firefox_3_offline_apps.php&quot;&gt;browser-based offline caching technologies like that planned in Firefox 3&lt;/a&gt;. The problem with this solution is that it dictates the client-side software requirements. Web-based services like GMail have become popular because they allow any standards complaint Internet browser to provide the same level of functionality to its user. Therefore to move away from such a generic and easily deployable strategy is detrimental to the overall value of the Google Apps experience.&lt;/p&gt;&lt;div class=&quot;centeredimage&quot;&gt;&lt;a href=&quot;/sites/default/files/u63/googleapps_proxy_lg.png&quot;&gt;&lt;img src=&quot;/sites/default/files/u63/googleapps_proxy_sm.png&quot; alt=&quot;&quot; width=&quot;400&quot; height=&quot;204&quot; /&gt;&lt;br /&gt;An outline of how a Google Apps Local Proxy could operate (click to enlarge)&lt;/a&gt;&lt;/div&gt;&lt;p&gt;I think a far more practical approach to providing offline access to business users would be for Google to offer a &#039;Google Apps Local Data Proxy&#039; application. This would be a Java application installed on an office server or integrated into a &lt;a href=&quot;http://www.google.com/enterprise/mini/index.html&quot;&gt;Google search appliance&lt;/a&gt;. The data proxy would be accessed via the  businesses&#039; Web-proxy server (e.g. &lt;a href=&quot;http://www.squid-cache.org/&quot;&gt;Squid&lt;/a&gt;, &lt;a href=&quot;http://www.microsoft.com/isaserver/default.mspx&quot;&gt;ISA Server&lt;/a&gt;, &lt;a href=&quot;http://www.novell.com/products/bordermanager/&quot;&gt;BorderManager&lt;/a&gt;) which would redirect calls to the proxy in instances where the Google Apps online service was not available or the quality of service was poor (slow response times). Using this methodology to resolve the offline problem would ensure all Internet browsers would provide the same level of Google Apps service. From a deployment and maintenance perspective the solution would be more efficient because administrators would be focused on one central service instead of troubleshooting issues at the Internet browser level.   &lt;/p&gt;&lt;p&gt; The Local Data Proxy would be a local cache of some or all user data. The exact size of this cache would depend on the rules established by the system administrator and resources available. For example it could be set to cache all managerial level data and only emails sent to staff in the last week. Along with data the service would also cache offline versions of the Google Apps family and act as an SMTP relay. This would allow employees to use the productivity applications in an offline state almost oblivious to the fact the Internet is not available. Once Internet access is restored or reaches acceptable levels Local Data Proxy would synchronise all data changes back to the Google cloud and relay sent mail. From the users perspective nothing much would change apart from the fact they would regain access to all of their data and not be limited to a recent subset.&lt;/p&gt;&lt;p&gt;A setup such as this would not provide offline access to those people working outside the office network. Such an approach would also require the maintenance of an internal proxy service and the Google Local Data Proxy. This is a small price to pay especially considering most businesses already maintain an internal server infrastructure. Even with these shortcomings in mind such a service would still go a long way to solving many of the offline access issues posed without resorting to client-side, browser specific solutions.  &lt;/p&gt;&lt;p&gt; &lt;/p&gt;  &lt;/div&gt;

&lt;ul class=&quot;field-taxonomy-vocabulary-1&quot;&gt;

      &lt;li&gt;
      &lt;a href=&quot;/tech/google&quot;&gt;google&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/software_as_a_service&quot;&gt;software as a service&lt;/a&gt;    &lt;/li&gt;
  
&lt;/ul&gt;
</description>
 <pubDate>Mon, 26 Feb 2007 22:01:00 +0000</pubDate>
 <dc:creator>David</dc:creator>
 <guid isPermaLink="false">414 at https://www.stress-free.co.nz</guid>
</item>
<item>
 <title>Google Reader is now my primary RSS experience</title>
 <link>https://www.stress-free.co.nz/google_reader_is_now_my_primary_rss_experience</link>
 <description>
  &lt;div class=&quot;field-body&quot;&gt;
    &lt;p&gt;I have been using &lt;a href=&quot;http://www.newsgator.com/NGOLProduct.aspx?ProdID=NetNewsWire&quot;&gt;NewsGator&#039;s NetNewsWire for Mac&lt;/a&gt; RSS reader for years but yesterday I moved all my RSS feeds over to Google Reader and closed NetNewsWire for good. There are &lt;a href=&quot;http://www.newsgator.com/NGOLProduct.aspx?ProdId=NetNewsWire&amp;amp;ProdView=screenshots&quot;&gt;lots of things to like&lt;/a&gt; about NetNewsWire like its tabbed windows, responsiveness and polished look and feel, but even with these things in mind it struggles to compete with the best online RSS readers out there today. &lt;/p&gt;&lt;p&gt;I played around with Google Reader in its first carnation last year but its interface went over my head. It seemed to me they were &lt;a href=&quot;http://www.techcrunch.com/2005/10/08/google-reader-beautiful-needs-work/&quot;&gt;trying to be clever&lt;/a&gt; with news rather than give users an interface they were used to and actually wanted. Recently Google &lt;a href=&quot;http://www.techcrunch.com/2006/09/28/google-reader-steps-it-up-with-new-version/&quot;&gt;re-released Reader&lt;/a&gt; in a far more conventional guise making the overall experience very similar to traditional RSS readers with a few added bonuses.&lt;/p&gt; &lt;div class=&quot;centeredimage&quot;&gt; &lt;a href=&quot;/sites/default/files/u63/googlereader_screenshot_lg.jpg&quot;&gt; &lt;img src=&quot;/sites/default/files/u63/googlereader_screenshot_sm.jpg&quot; alt=&quot;&quot; width=&quot;400&quot; height=&quot;379&quot; /&gt;&lt;br /&gt; Google Reader with the Google Reader Firefox extension visible in the bottom right corner of the window (click to enlarge)&lt;/a&gt;&lt;/div&gt;&lt;p&gt;So how does Google Reader, a Web-based application overcome NetNewsWire&#039;s OSX savvy advantages? &lt;/p&gt;&lt;h4&gt;&lt;!--break--&gt;Responsiveness&lt;/h4&gt;&lt;p&gt;Thanks to a hefty dose of AJAX Google Reader is almost as responsive as NetNewsWire even though it is running in a browser. Also to keep an eye on unread news I have also installed the &lt;a href=&quot;https://addons.mozilla.org/firefox/3977&quot;&gt;Google Reader Firefox extension&lt;/a&gt; which gives brief summary of the current unread news without having to open Reader. &lt;/p&gt;&lt;h4&gt;Aesthetics&lt;/h4&gt;&lt;p&gt;Google&#039;s aesthetics with Reader seem to be significantly more polished than that of its more mature products like search and GMail. Sure it does not have all of the OSX bling that NetNewsWire supports but it is clean and stylish enough to be used without getting sore eyes.&lt;/p&gt;&lt;h4&gt;Always synchronised&lt;/h4&gt;&lt;p&gt;Being Web-based Google Reader is always available and synchronised no matter which computer you maybe using. NetNewsWire supports synchronisation to NewsGator&#039;s online reader and between different NetNewsWire instances but it has never quite worked. This all stems back to the fact NewsGator does not appear to be focusing on sorting out these bugs and seems quite content to let their users struggle along or move to another service.&lt;/p&gt;&lt;h4&gt;Web-centric functionality&lt;/h4&gt;&lt;p&gt;Google Reader offers little pieces of Web-centric functionality like a one-click option to share a selected story with other people via RSS or &lt;a href=&quot;/interesting_things&quot;&gt;embedded within a web page&lt;/a&gt;. This means you can go through your news highlighting and sharing things that maybe of interest to others with minimal effort. Easy to use functionality like this just is not available in NetNewsWire without signing up to a third party service like &lt;a href=&quot;http://del.icio.us/&quot;&gt;del.icio.us&lt;/a&gt;.&lt;/p&gt;&lt;h4&gt;Resource Usage&lt;/h4&gt;&lt;p&gt;NetNewsWire can also be a resource hog once it has been running for a while with multiple tabs open. Generally this equates to about 100meg of RAM and anywhere between 300-600meg of swap space consumed. Google Reader on the other hand works within an Internet browser so it only uses as much as what its host browser needs. With Firefox this can equate to a lot of resources but by not having NetNewsWire open the overall system resource hit is not nearly as bad.&lt;/p&gt;&lt;h2&gt;Conclusion&lt;/h2&gt;&lt;p&gt;Given these benefits and the functionality of Google Reader making the decision to switch from a program I have used for many years was not that difficult. So far I am enjoying the experience and my Mac is welcoming the extra system resources. Rather ironically the only thing Google Reader needs now is &lt;a href=&quot;http://www.convertup.com/usability/where-is-google-readers-search-function/&quot;&gt;search functionality&lt;/a&gt; and the ability to tag news items based on these search results and I will be content.  &lt;/p&gt;  &lt;/div&gt;

&lt;ul class=&quot;field-taxonomy-vocabulary-1&quot;&gt;

      &lt;li&gt;
      &lt;a href=&quot;/tech/google&quot;&gt;google&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/rss&quot;&gt;rss&lt;/a&gt;    &lt;/li&gt;
  
&lt;/ul&gt;
</description>
 <pubDate>Mon, 19 Feb 2007 19:37:54 +0000</pubDate>
 <dc:creator>David</dc:creator>
 <guid isPermaLink="false">410 at https://www.stress-free.co.nz</guid>
</item>
<item>
 <title>Forget about fetchmail thanks to Gmail</title>
 <link>https://www.stress-free.co.nz/forget_about_fetchmail_thanks_to_gmail</link>
 <description>
  &lt;div class=&quot;field-body&quot;&gt;
    &lt;div class=&quot;image&quot; style=&quot;margin-top: 20px; margin-bottom: 15px&quot;&gt;&lt;img src=&quot;/sites/default/files/u63/gmail.png&quot; alt=&quot;&quot; width=&quot;143&quot; height=&quot;59&quot; /&gt;&lt;/div&gt;&lt;p&gt;Gmail&#039;s &lt;a href=&quot;http://www.techcrunch.com/2006/12/09/uh-oh-gmail-just-got-perfect/&quot;&gt;highly anticipated mail fetcher&lt;/a&gt; service went fully operational over the weekend. It is a nice addition for existing Gmail users but an even better option for those currently using &lt;a href=&quot;http://fetchmail.berlios.de/&quot;&gt;fetchmail&lt;/a&gt;, &lt;a href=&quot;http://pyropus.ca/software/getmail/&quot;&gt;getmail&lt;/a&gt; or some other pop3 checking tool for multiple email accounts. Traditionally you would have to run one of these applications or pay for a service such as &lt;a href=&quot;http://www.runbox.com/&quot;&gt;Runbox&lt;/a&gt; to consolidate your email around a single account, but with Gmail this process has become significantly easier and cheaper.&lt;/p&gt;&lt;p&gt;Simply &lt;a href=&quot;https://www.google.com/accounts/NewAccount?service=mail&amp;amp;t=cac5bcbb-47b2d4b2-1d34b41e7aa4597138f9&amp;amp;continue=http%3A%2F%2Fmail.google.com%2Fmail%2Fe-11-1041d5ed9045f588cde347ecda61c56d-430496b7c10a0db2596581c2ae79c4df70fbb8c3&amp;amp;type=2&quot;&gt;sign up&lt;/a&gt; for a free Gmail account (or log onto your existing one) and set Gmail to &lt;a href=&quot;http://mail.google.com/support/bin/answer.py?answer=10957&quot;&gt;forward all incoming email&lt;/a&gt; to your primary account (assuming it isn&#039;t Gmail). Once the forwarder is in place &lt;a href=&quot;http://mail.google.com/support/bin/answer.py?ctx=%67mail&amp;amp;hl=en&amp;amp;answer=21288&quot;&gt;configure the mail fetcher&lt;/a&gt; to retrieve mail from the accounts you want to check. Before you know it you have in place a free, spam filtered and highly redundant fetchmail/getmail replacement all without the cost and stress of  maintaining your own server or application on your desktop for this task.&lt;br /&gt;&lt;!--break--&gt;&lt;br /&gt;&lt;/p&gt;  &lt;/div&gt;

&lt;ul class=&quot;field-taxonomy-vocabulary-1&quot;&gt;

      &lt;li&gt;
      &lt;a href=&quot;/tech/google&quot;&gt;google&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/fetchmail&quot;&gt;fetchmail&lt;/a&gt;    &lt;/li&gt;
  
&lt;/ul&gt;
</description>
 <pubDate>Wed, 14 Feb 2007 11:33:15 +0000</pubDate>
 <dc:creator>David</dc:creator>
 <guid isPermaLink="false">403 at https://www.stress-free.co.nz</guid>
</item>
<item>
 <title>Google to replace Microsoft Exchange &amp; Office at Pixar?</title>
 <link>https://www.stress-free.co.nz/google_to_replace_microsoft_exchange_office_at_pixar</link>
 <description>
  &lt;div class=&quot;field-body&quot;&gt;
    &lt;p&gt;This Business Week article &lt;a href=&quot;http://www.businessweek.com/magazine/content/07_07/b4021070.htm&quot;&gt;&#039;Google Steps Into Microsoft&#039;s Office&#039;&lt;/a&gt; is interesting because it is the first time I have seen a rather large corporate entity (Pixar/Disney) express an interest in moving to a non-Microsoft, Web-based platform like &lt;a href=&quot;http://www.google.com/a/&quot;&gt;Google Apps for your Domain&lt;/a&gt;.  The other interesting point to note is published user-base of Microsoft Office Live which is sitting at 250,000 businesses, quite a respectable number for a new, non-free service.&lt;/p&gt;&lt;p&gt;I have been a user of Google Apps for your Domain for a while now on a number of domains and have got a few other well entrenched in-house email fans to sign up as well. By far and away the best things about it has been the spam protection and the fact that within an evening you can have a fully functioning email and calendar service up and running with no fuss at all. It has been slightly disappointing that the applications list has not grown to cover the &lt;a href=&quot;http://docs.google.com/&quot;&gt;Docs and Spreadsheets&lt;/a&gt; products already and many of the new GMail features such as the very handy &lt;a href=&quot;http://www.techcrunch.com/2006/12/09/uh-oh-gmail-just-got-perfect/&quot;&gt;retrieve mail service&lt;/a&gt; or increased storage sizes have not become available to Apps users sooner. &lt;/p&gt;&lt;p&gt;&lt;!--break--&gt;&lt;/p&gt;  &lt;/div&gt;

&lt;ul class=&quot;field-taxonomy-vocabulary-1&quot;&gt;

      &lt;li&gt;
      &lt;a href=&quot;/tech/web_2_0&quot;&gt;web 2.0&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/google&quot;&gt;google&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/software_as_a_service&quot;&gt;software as a service&lt;/a&gt;    &lt;/li&gt;
  
&lt;/ul&gt;
</description>
 <pubDate>Wed, 14 Feb 2007 10:00:21 +0000</pubDate>
 <dc:creator>David</dc:creator>
 <guid isPermaLink="false">401 at https://www.stress-free.co.nz</guid>
</item>
<item>
 <title>Chris DiBona Wellington meetup on Tuesday</title>
 <link>https://www.stress-free.co.nz/chris_dibona_wellington_meetup_on_tuesday</link>
 <description>
  &lt;div class=&quot;field-body&quot;&gt;
    &lt;p&gt;This Tuesday the 6th of February &lt;a href=&quot;http://en.wikipedia.org/wiki/Chris_DiBona&quot;&gt;Chris DiBona from Google&lt;/a&gt; will be in Wellington to talk open source. I am organising a meet-up and dinner with him at a local Wellington restaurant. There will be people from a wide variety of backgrounds there (government, small business, academic) and if you would like to come along please &lt;a href=&quot;/contact&quot;&gt;contact me&lt;/a&gt; and I will send you more details. I only hope the weather is as good next Tuesday as it was yesterday...&lt;/p&gt;&lt;p style=&quot;text-align: center&quot;&gt;&lt;img src=&quot;/sites/default/files/u63/wellington_skyline.jpg&quot; alt=&quot;&quot; width=&quot;600&quot; height=&quot;219&quot; /&gt;&lt;/p&gt;&lt;p&gt;&lt;!--break--&gt;&lt;/p&gt;  &lt;/div&gt;

&lt;ul class=&quot;field-taxonomy-vocabulary-1&quot;&gt;

      &lt;li&gt;
      &lt;a href=&quot;/tech/google&quot;&gt;google&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/open_source&quot;&gt;open source&lt;/a&gt;    &lt;/li&gt;
  
&lt;/ul&gt;
</description>
 <pubDate>Wed, 31 Jan 2007 01:03:14 +0000</pubDate>
 <dc:creator>David</dc:creator>
 <guid isPermaLink="false">392 at https://www.stress-free.co.nz</guid>
</item>
<item>
 <title>Google Trends: A cool comparison tool</title>
 <link>https://www.stress-free.co.nz/google_trends_a_cool_comparison_tool</link>
 <description>
  &lt;div class=&quot;field-body&quot;&gt;
    &lt;!-- wTU9nM9k0602mEM --&gt;&lt;p&gt;When you think of Google you think search but a consequence of all of those searches is some very useful trends. This is where &lt;a href=&quot;http://www.google.com/trends&quot;&gt;Google Trends&lt;/a&gt; comes into play. With it you can enter a few different terms (separated by commas) and then the tool will return a graph of the number of search hits for each term over the last few years. Not only that you can break down the search to look at from where people are searching for these terms. I did a quick &lt;a href=&quot;http://google.com/trends?q=c%23%2C+java%2C+ruby%2C+php&amp;amp;ctab=0&amp;amp;geo=all&amp;amp;date=all&quot;&gt;trend analysis of C#, Java, PHP and Ruby&lt;/a&gt; and the results are pretty interesting, especially the fact that six of the top ten cities searching for these terms are in India (although in hindsight it is hardly surprising). &lt;/p&gt;&lt;p&gt;&lt;!--break--&gt; &lt;br /&gt;&lt;/p&gt;  &lt;/div&gt;

&lt;ul class=&quot;field-taxonomy-vocabulary-1&quot;&gt;

      &lt;li&gt;
      &lt;a href=&quot;/tech/google&quot;&gt;google&lt;/a&gt;    &lt;/li&gt;
  
&lt;/ul&gt;
</description>
 <pubDate>Fri, 26 Jan 2007 00:57:36 +0000</pubDate>
 <dc:creator>David</dc:creator>
 <guid isPermaLink="false">390 at https://www.stress-free.co.nz</guid>
</item>
<item>
 <title>The emerging future: Software as electricity</title>
 <link>https://www.stress-free.co.nz/a_potential_future_treat_your_software_like_electricity</link>
 <description>
  &lt;div class=&quot;field-body&quot;&gt;
    &lt;div class=&quot;image&quot; style=&quot;margin-top: 16px; margin-bottom: 10px&quot;&gt;&lt;img src=&quot;/sites/default/files/u63/office20.png&quot; alt=&quot;&quot; width=&quot;100&quot; height=&quot;37&quot; /&gt;&lt;/div&gt;&lt;p&gt;There has been rumblings about software as a service and Web 2.0 revolutionising the way people work with their computers and data but very little to really illustrate this point. Whilst the average person is comfortable with having their email and chat hosted by Google, Microsoft or Yahoo the idea of businesses trusting third parties with hosting their software and data is a foreign one.&lt;/p&gt;&lt;p&gt;Companies like Google, SalesForce.com and now &lt;a href=&quot;http://zoho.com/&quot;&gt;Zoho&lt;/a&gt; are out to change this attitude with a direct push at the business marketplace. You know an I.T. concept has momentum when it has its own conference, and now with the &lt;a href=&quot;http://office20con.com/&quot;&gt;Office 2.0 Conference&lt;/a&gt; there is a showcase for business orientated, software as a service applications. TechCrunch has been doing a very good job &lt;a href=&quot;http://www.techcrunch.com/2006/10/10/zoho-virtual-office-launching-tommorow-racing-google-to-market/&quot;&gt;covering the new applications&lt;/a&gt; released during this conference. Zoho seems very interesting from a software capability perspective although successfully marketing this service within the industry as it stands today will no doubt be difficult. However it is probably more likely that Zoho is concentrating on their application feature-set with an end-game of being purchased by a larger company (Yahoo, AOL). This larger company will then rebrand Zoho and use it to compete with &lt;a href=&quot;http://docs.google.com/&quot;&gt;Google&#039;s emerging online office suite&lt;/a&gt; and &lt;a href=&quot;http://officelive.microsoft.com/&quot;&gt;Microsoft Office Live&lt;/a&gt;.&lt;!--break--&gt;&lt;/p&gt;&lt;p&gt;Whilst promising the major barrier to serious online office migration is psychological rather than physical. Arguably the Web applications and infrastructure exists to move many traditional office tasks and accompanying data to a remote, online environment. Sun&#039;s CEO Jonathan Schwartz has been talking and &lt;a href=&quot;http://blogs.sun.com/jonathan/entry/computing_in_the_strangest_places&quot;&gt;blogging a great deal&lt;/a&gt; about businesses ability to centralise and externalise their data-centers and in a completely practical world this makes sense. However the largest barrier to all this is people&#039;s assumption that the Internet will go down. Unfortunately in many places this belief is a reality, such as with low-end DSL/cable connections in New Zealand, but at the high-end Internet connections are just as reliable as electricity or other established services. &lt;/p&gt;&lt;p&gt;As Internet reliability improves there will come a time when network access is viewed in the same light as phone, gas and electricity services; as long as you pay your monthly fee it will work. When that time comes there will no doubt be a significant shift in offices from internally hosted identity, email, file services and applications to remote services maintained by third parties. The office space and infrastructure savings alone will justify the remote hosting costs and  more importantly removing the headache of maintaining internal data-center infrastructure will, in theory at least, allow businesses to concentrate on the things they do best.&lt;/p&gt;&lt;p&gt;The company that stands to potentially loose the most from all this is Novell as their primary market is internal server infrastructure. In an environment where office server infrastructure declines Microsoft will still have the desktop whilst online companies such as Google and Yahoo will be at a greater advantage compared to Novell with their compartmentalised application suites. In this light it is especially unfortunate that &lt;a href=&quot;http://www.ifolder.com&quot;&gt;iFolder&lt;/a&gt;, Novell&#039;s most promising product in this emerging environment, appears to have been &lt;a href=&quot;http://www.mail-archive.com/ifolder-dev@forge.novell.com/msg00024.html&quot;&gt;put out to pasture&lt;/a&gt; without it ever gaining the emphasis or adoption it so greatly deserves. Whilst it will be a long time before software as a service and the whole Office 2.0 concept becomes a reality when it does I hope Novell is not caught napping like they were with every other technology change that has occurred in the last ten years. &lt;/p&gt;&lt;p&gt; &lt;/p&gt;  &lt;/div&gt;

&lt;ul class=&quot;field-taxonomy-vocabulary-1&quot;&gt;

      &lt;li&gt;
      &lt;a href=&quot;/tech/web_2_0&quot;&gt;web 2.0&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/google&quot;&gt;google&lt;/a&gt;    &lt;/li&gt;
  
&lt;/ul&gt;
</description>
 <pubDate>Wed, 11 Oct 2006 10:04:23 +0000</pubDate>
 <dc:creator>David</dc:creator>
 <guid isPermaLink="false">332 at https://www.stress-free.co.nz</guid>
</item>
<item>
 <title>Google surprises all with its purchase of YouTube</title>
 <link>https://www.stress-free.co.nz/google_surprises_all_with_its_purchase_of_youtube</link>
 <description>
  &lt;div class=&quot;field-body&quot;&gt;
    &lt;p&gt;YouTube provides online video quickly when you want it and those related video links are just addictive. My favourites are &lt;a href=&quot;http://www.youtube.com/results?search_query=warcraft&amp;amp;search=Search&quot;&gt;World of Warcraft clips&lt;/a&gt; and comedian videos like &lt;a href=&quot;http://www.youtube.com/results?search_query=bill+hicks&amp;amp;search=Search&quot;&gt;Bill Hicks&lt;/a&gt;. If you have not had your head stuck in the sand over the last few days you would have heard Google has purchased YouTube, or more precisely they have given the owners a tonne of Google stock ($1.65 billion worth) and not a single real dollar changed hands. Hopefully this purchase by Google provides a search speed increase, at the moment searching for videos is often very slow when compared to just browsing which is always very snappy. &lt;/p&gt;&lt;p&gt;Probably the most interesting reaction to this came from &lt;a href=&quot;http://www.calacanis.com/2006/10/06/google-to-buy-youtube-perfect-match/&quot;&gt;Jason Calacanis&lt;/a&gt; who was all for the deal which is quite unlike his tone on the &lt;a href=&quot;http://www.podshow.com/shows/?mode=detail&amp;amp;episode_id=25572&quot;&gt;Gillmor Gang of late&lt;/a&gt;. The most unsurprising reaction was from &lt;a href=&quot;http://www.blogmaverick.com/2006/10/09/i-still-think-google-is-crazy/&quot;&gt;Mark Cuban&lt;/a&gt; who stuck to his guns by saying YouTube is a copyright lawsuit waiting to happen and bad news for any future owner.&lt;br /&gt;&lt;!--break--&gt;&lt;br /&gt;&lt;/p&gt;  &lt;/div&gt;

&lt;ul class=&quot;field-taxonomy-vocabulary-1&quot;&gt;

      &lt;li&gt;
      &lt;a href=&quot;/tech/google&quot;&gt;google&lt;/a&gt;    &lt;/li&gt;
      &lt;li&gt;
      &lt;a href=&quot;/tech/youtube&quot;&gt;youtube&lt;/a&gt;    &lt;/li&gt;
  
&lt;/ul&gt;
</description>
 <pubDate>Wed, 11 Oct 2006 08:53:47 +0000</pubDate>
 <dc:creator>David</dc:creator>
 <guid isPermaLink="false">330 at https://www.stress-free.co.nz</guid>
</item>
</channel>
</rss>
