<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Graham Nott Technology Blog</title>
	<atom:link href="http://www.grahamnott.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.grahamnott.com</link>
	<description></description>
	<pubDate>Tue, 13 Jul 2010 22:06:45 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>CiviCRM 3.1.4 Import Contacts tips</title>
		<link>http://www.grahamnott.com/2010/07/civicrm-314-import-contacts-tips/</link>
		<comments>http://www.grahamnott.com/2010/07/civicrm-314-import-contacts-tips/#comments</comments>
		<pubDate>Tue, 13 Jul 2010 21:57:52 +0000</pubDate>
		<dc:creator>graham</dc:creator>
		
		<category><![CDATA[Software Development]]></category>

		<category><![CDATA[address]]></category>

		<category><![CDATA[civicrm]]></category>

		<category><![CDATA[country]]></category>

		<category><![CDATA[crm]]></category>

		<category><![CDATA[database]]></category>

		<category><![CDATA[errors]]></category>

		<category><![CDATA[import]]></category>

		<guid isPermaLink="false">http://www.grahamnott.com/?p=40</guid>
		<description><![CDATA[Tasked with importing thousands of records from a different product into CiviCRM software, I dragged my feet. I was not looking forward to the learning curve and time required to fully understand the import procedure and how to do it error free.
To test and clean the data without messing with the live CiviCRM installation, I [...]]]></description>
			<content:encoded><![CDATA[<p>Tasked with importing thousands of records from a different product into CiviCRM software, I dragged my feet. I was not looking forward to the learning curve and time required to fully understand the import procedure and how to do it error free.</p>
<p>To test and clean the data without messing with the live CiviCRM installation, I created a separate Drupal+CiviCRM installation to test on.</p>
<p>If your data is unique or complex, importing will not be easy, regardless of the type of software. I was supplied a CSV export file, that I edited in Microsoft Excel and imported into CiviCRM 3.1.4. I could write an entire chapter on cleaning the data and planning the data import, so I will not enter into that here. In short, about the CiviCRM Import Contacts feature I found:</p>
<p><em>Likes:</em></p>
<ul>
<li>Custom data fields, with multiple values for each field, can be imported in one step from a CSV file.</li>
<li>You can create a group for each set of imported data, which allows you to view or delete the data you just imported.</li>
<li>Relationships between and Organization and a Person can be made easily enough, using matching rules.</li>
</ul>
<p><em>Dislikes:</em></p>
<ul>
<li>The speed at which contact imports occur is slow.</li>
<li>The fragility of the import procedure.</li>
</ul>
<p>Now, more about my dislikes. Regarding the import speed, I'm sure in subsequent versions of CiviCRM this will be improved. What CiviCRM lacks in import speed it makes up for in the vast amount of import features, such as the saving of import field mapping, creation of a group on import, the checking for data errors, and checking for duplicate records.</p>
<p>Regarding the fragility of the import procedure, there could be some trial and error required in order to get your data to import just right. I will address some specific problems I found that are not so straightforward to discover.</p>
<p>1. <strong>Strange characters</strong></p>
<p>The result of this example of a "strange" character was that CiviCRM stopped the import of the file on the line directly before this row. Suggested fix: change the character in your data to something acceptable.</p>
<p><a href="http://www.grahamnott.com/wp-content/uploads/2010/07/civicrm-strange-characters.png"><img class="size-full wp-image-41" style="vertical-align: middle;" title="CiviCRM import does not like strange characters" src="http://www.grahamnott.com/wp-content/uploads/2010/07/civicrm-strange-characters.png" alt="CiviCRM import does not like strange characters" width="308" height="71" /></a></p>
<p>2. <strong>Rows missing fields</strong></p>
<p>For some reason some rows in the data I was given was missing cells at the end of rows. Excel will not give you any indication the cells are missing, and it took a trick to get Excel to recognize and save them. You will only see the missing fields if you open the CSV file in a text editor, like TextPad, you will see:</p>
<p><a href="http://www.grahamnott.com/wp-content/uploads/2010/07/civicrm-missing-fields.png"><img class="alignnone size-full wp-image-42" title="CiviCRM import does not like missing fields" src="http://www.grahamnott.com/wp-content/uploads/2010/07/civicrm-missing-fields.png" alt="CiviCRM import does not like missing fields" width="174" height="48" /></a></p>
<p>The absence of commas at the end of the last two lines shows indications that fields are missing in your CSV file. To fix this, I created a new column in Excel named "Junk", and inserted a space into each cell in that column (use the fill down feature to do this quickly). When importing data in CiviCRM, simply have it ignore this last "Junk" column. In this way, every row in the CSV file will contain the same number of fields.</p>
<p><a href="http://www.grahamnott.com/wp-content/uploads/2010/07/civicrm-add-junk-column.png"><img class="alignnone size-full wp-image-44" title="CiviCRM import, add a junk column" src="http://www.grahamnott.com/wp-content/uploads/2010/07/civicrm-add-junk-column.png" alt="CiviCRM import, add a junk column" width="200" height="62" /></a></p>
<p>3. <strong>Importing Country and State values</strong></p>
<p>This was a frustrating bug until I found a working method. Organizations that should be located in the United States were importing as "Iraq" or "Suriname". If a row being imported had a State or Province, then the Country value was being ignored, and the State of some other country was selected. I found to combat this error, you can place the Country column of your import file before the other address columns.</p>
<p><a href="http://www.grahamnott.com/wp-content/uploads/2010/07/civicrm-column-order.png"><img class="alignnone size-full wp-image-43" title="CiviCRM address columns" src="http://www.grahamnott.com/wp-content/uploads/2010/07/civicrm-column-order.png" alt="CiviCRM address columns" width="369" height="248" /></a></p>
<p>With these three odd peculiarities with the CiviCRM Import Contacts feature explained, hopefully this will help others who have similar errors. If it has helped you, or if you have some more tips, your comments are welcome.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.grahamnott.com/2010/07/civicrm-314-import-contacts-tips/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Web fonts are back for good</title>
		<link>http://www.grahamnott.com/2010/05/web-fonts-are-back-for-good/</link>
		<comments>http://www.grahamnott.com/2010/05/web-fonts-are-back-for-good/#comments</comments>
		<pubDate>Fri, 21 May 2010 18:35:04 +0000</pubDate>
		<dc:creator>graham</dc:creator>
		
		<category><![CDATA[Web]]></category>

		<category><![CDATA[css]]></category>

		<category><![CDATA[font]]></category>

		<category><![CDATA[free]]></category>

		<category><![CDATA[google]]></category>

		<category><![CDATA[open source]]></category>

		<category><![CDATA[web font]]></category>

		<guid isPermaLink="false">http://www.grahamnott.com/?p=39</guid>
		<description><![CDATA[

Dear Google,
I commend you for giving us the Google Font Directory at http://code.google.com/webfonts and the API. Ever since Netscape Navigator 4 have I anticipated using web fonts again, and that day has finally come.
XOXO - Graham

]]></description>
			<content:encoded><![CDATA[<link href='http://fonts.googleapis.com/css?family=Reenie+Beanie' rel='stylesheet' type='text/css'>
<div style="font-family: 'Reenie Beanie',arial,serif; font-size: 3.5em; line-height: 120%;">
<p>Dear Google,</p>
<p>I commend you for giving us the Google Font Directory at <a href="http://code.google.com/webfonts">http://code.google.com/webfonts</a> and the API. Ever since Netscape Navigator 4 have I anticipated using web fonts again, and that day has finally come.</p>
<p>XOXO - Graham</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.grahamnott.com/2010/05/web-fonts-are-back-for-good/feed/</wfw:commentRss>
		</item>
		<item>
		<title>I like TELUS High Speed Turbo</title>
		<link>http://www.grahamnott.com/2010/01/i-like-telus-high-speed-turbo/</link>
		<comments>http://www.grahamnott.com/2010/01/i-like-telus-high-speed-turbo/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 01:41:33 +0000</pubDate>
		<dc:creator>graham</dc:creator>
		
		<category><![CDATA[Misc]]></category>

		<category><![CDATA[adsl]]></category>

		<category><![CDATA[high speed]]></category>

		<category><![CDATA[internet]]></category>

		<category><![CDATA[TELUS]]></category>

		<category><![CDATA[turbo]]></category>

		<guid isPermaLink="false">http://www.grahamnott.com/?p=37</guid>
		<description><![CDATA[The nice people at TELUS have upgraded my ASDL speed to their High Speed Turbo. I've only had it for a day, and I cannot complain getting 5Mb/second downloads. Kudos - now, please work on increasing the maximum upload speeds.

]]></description>
			<content:encoded><![CDATA[<p>The nice people at TELUS have upgraded my ASDL speed to their High Speed Turbo. I've only had it for a day, and I cannot complain getting 5Mb/second downloads. Kudos - now, please work on increasing the maximum upload speeds.</p>
<p><a href="http://www.grahamnott.com/wp-content/uploads/2010/01/telus-adsl-turbo.png"><img class="alignnone size-medium wp-image-38" title="TELUS High Speed Turbo (ADSL)" src="http://www.grahamnott.com/wp-content/uploads/2010/01/telus-adsl-turbo.png" alt="" width="586" height="187" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.grahamnott.com/2010/01/i-like-telus-high-speed-turbo/feed/</wfw:commentRss>
		</item>
		<item>
		<title>CS Cart 2.0.8 and Canada Post shipping</title>
		<link>http://www.grahamnott.com/2009/12/cs-cart-208-and-canada-post-shipping/</link>
		<comments>http://www.grahamnott.com/2009/12/cs-cart-208-and-canada-post-shipping/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 02:55:55 +0000</pubDate>
		<dc:creator>graham</dc:creator>
		
		<category><![CDATA[Software Development]]></category>

		<category><![CDATA[canada post]]></category>

		<category><![CDATA[cs cart]]></category>

		<category><![CDATA[e-commerce]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[shopping cart]]></category>

		<guid isPermaLink="false">http://www.grahamnott.com/?p=36</guid>
		<description><![CDATA[Nothing works completely. I should start by saying that CS Cart has impressed me greatly, and it is probably the best shopping cart software I've used. The administrator area is simple and powerful, and the templates (skins) are relatively easy to customize.
Getting shopping cart software to run propertly for a business in Canada is aways [...]]]></description>
			<content:encoded><![CDATA[<p>Nothing works completely. I should start by saying that <a href="http://www.cs-cart.com/">CS Cart</a> has impressed me greatly, and it is probably the best shopping cart software I've used. The administrator area is simple and powerful, and the templates (skins) are relatively easy to customize.</p>
<p>Getting shopping cart software to run propertly for a business in Canada is aways difficult. It's a combination of little effort on the developer's part to make it built to work, and what looks like no time spent on testing.</p>
<p>CS Cart gets full points for making it straightforward to create tax rates for different locations - PST for the province, GST for federal taxes, and HST for those three provinces that require it currently (the number of provinces will increase in 2010).</p>
<p>CS Cart does not get full marks for the Canada Post shipping module in <strong>CS Cart version 2.0.8</strong>. It almost does the minimum required, but it has a bug. I think the Canada Post module is relatively new, so hopefullly this will be improved in the future.</p>
<p>For more than an hour, I was troubleshooting why it would correctly estimate shipping from Canada to Canada, but it would never estimate from Canada to the USA. It always came back with the error message, "<strong>Unfortunately no shipping options are available for your location</strong>". After digging through the code, I realized that:</p>
<ol>
<li>No matter where the customer was located, the CS Cart always asked for <strong>domestic shipping</strong> products from Canada Post, and</li>
<li>After an hour of troubleshooting and debugging the AJAX enabled shipping estimator, and trying to decipher the session data used by the software, I was no where close to finding the root cause in the CS Cart code.</li>
</ol>
<p>Having given up looking for the optimal solution, I just hardcoded a fix. The code below was added to the <strong>/shippings/can.php</strong> file at line 87 (the first line is included here as a reference). It shortcircuits the bad logic to correctly state "if the customer is in the USA, get shipping quotes for the Xpresspost USA product".</p>
<pre class="brush: php; first-line: 85">	list($header, $result) = fn_http_request('POST', 'http://sellonline.canadapost.ca:30000', $request);

    // Short circuit the code used, because it continues
    //  to use a Canadian shipping code for USA customers
    if($location['country'] == 'US')
    {
      $code = '2030';
    }</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.grahamnott.com/2009/12/cs-cart-208-and-canada-post-shipping/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Be a NaNoWriMo rebel</title>
		<link>http://www.grahamnott.com/2009/09/be-a-nanowrimo-rebel/</link>
		<comments>http://www.grahamnott.com/2009/09/be-a-nanowrimo-rebel/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 19:35:25 +0000</pubDate>
		<dc:creator>graham</dc:creator>
		
		<category><![CDATA[Misc]]></category>

		<category><![CDATA[nanowrimo]]></category>

		<category><![CDATA[national novel writing month]]></category>

		<category><![CDATA[non-fiction]]></category>

		<guid isPermaLink="false">http://www.grahamnott.com/?p=35</guid>
		<description><![CDATA[After a few days time of pondering, I decided today I will participate in the 2009 NaNoWriMo (National Novel Writing Month). But I am not going to write a novel. So that leaves non-fiction, and labels me a rebel!

Over the previous nine years of NaNoWriMo, enough people have rebelled to warrant a separate special area [...]]]></description>
			<content:encoded><![CDATA[<p>After a few days time of pondering, I decided today I will participate in the 2009 <a href="http://www.nanowrimo.org/" target="_blank">NaNoWriMo</a> (National Novel Writing Month). But I am not going to write a novel. So that leaves non-fiction, and labels me a rebel!</p>
<p style="text-align: center;"><img src="http://i18.photobucket.com/albums/b116/BarbDell/nano_09_red_participant_100x100_-1.png?t=1253421583" alt="NaNoWriMo Rebel 2009" /></p>
<p>Over the previous nine years of NaNoWriMo, enough people have rebelled to warrant a separate special area in the online forums. I would have been a rebel anyway, but it's reassuring to know I'll be joined by others.</p>
<p>I've chosen non-fiction because I want whatever is produced by the end of the month to be something I've always planned to write, even if it is a first draft.</p>
<p>My procrastination to write a book is just as common as the novelist participants; I've always planned to write a book, but it's never gotten off the ground. NaNoWriMo motivates me to attempt to reach the goal and win by writing 50,000 words.</p>
<p>Other things I like:</p>
<ul>
<li>Anyone and everyone can be a NaNoWriMo winner</li>
<li>It only lasts one month</li>
<li>I'm writing with others, virtually</li>
<li>I can write anywhere at any time during November</li>
<li>It costs nothing out of pocket</li>
<li>The time spent is well spent</li>
<li>Even if you "lose", there are fringe benefits</li>
</ul>
<p>Personally, some things I hope to gain:</p>
<ul>
<li>Prove my idea is a good one (or disprove it)</li>
<li>Write a lengthy draft at the fastest speed possible</li>
<li>Force myself into a daily writing regime, hoping this will ignite my blogging and continuous writing</li>
</ul>
<p>You may ask, what is my topic? Well, the conversation would probably go something like this,</p>
<blockquote><p><strong>You:</strong> "So you're a non-fiction NaNoWriMo rebel huh? What's your topic?<br />
<strong>Me:</strong> "Oh... I see what you're after - get your own topic!"</p></blockquote>
<p>If you've ever planned to write anything - novel or otherwise - consider NaNoWriMo this year.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.grahamnott.com/2009/09/be-a-nanowrimo-rebel/feed/</wfw:commentRss>
		</item>
		<item>
		<title>DBDesigner4 is good enough for me</title>
		<link>http://www.grahamnott.com/2009/09/dbdesigner4-is-good-enough-for-me/</link>
		<comments>http://www.grahamnott.com/2009/09/dbdesigner4-is-good-enough-for-me/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 21:20:26 +0000</pubDate>
		<dc:creator>graham</dc:creator>
		
		<category><![CDATA[MySQL]]></category>

		<category><![CDATA[Software Development]]></category>

		<category><![CDATA[database]]></category>

		<category><![CDATA[dbdesigner]]></category>

		<category><![CDATA[mysql]]></category>

		<category><![CDATA[workbench]]></category>

		<guid isPermaLink="false">http://www.grahamnott.com/?p=33</guid>
		<description><![CDATA[Before:

After:

When you need to understand a new database schema, making a model like this is a big help. I still like DBDesigner4 fromfabFORCE.net to get these simple models done. Yes, I know there's a much newer GUI program, MySQL Workbench, that could do a better job. One day I'll have time to test you again, [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Before:</strong></p>
<p><a href="http://www.grahamnott.com/wp-content/uploads/2009/09/model-before.png"><img class="aligncenter size-full wp-image-32" title="Model before" src="http://www.grahamnott.com/wp-content/uploads/2009/09/model-before.png" alt="" width="655" height="379" /></a></p>
<p><strong>After:</strong></p>
<p><a href="http://www.grahamnott.com/wp-content/uploads/2009/09/model-after.png"><img class="aligncenter size-full wp-image-34" title="Model after" src="http://www.grahamnott.com/wp-content/uploads/2009/09/model-after.png" alt="" width="655" height="642" /></a></p>
<p>When you need to understand a new database schema, making a model like this is a big help. I still like <a href="http://fabforce.net/dbdesigner4/">DBDesigner4</a> fromfabFORCE.net to get these simple models done. Yes, I know there's a much newer GUI program, <a href="http://www.mysql.com/products/workbench/">MySQL Workbench</a>, that could do a better job. One day I'll have time to test you again, Workbench. But for me, DBDesigner4 is a simple yet powerful tool.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.grahamnott.com/2009/09/dbdesigner4-is-good-enough-for-me/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Smarty template engine and tomorrow</title>
		<link>http://www.grahamnott.com/2009/07/smarty-template-engine-and-tomorrow/</link>
		<comments>http://www.grahamnott.com/2009/07/smarty-template-engine-and-tomorrow/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 23:07:25 +0000</pubDate>
		<dc:creator>graham</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Software Development]]></category>

		<category><![CDATA[date functions]]></category>

		<category><![CDATA[php]]></category>

		<category><![CDATA[smarty]]></category>

		<category><![CDATA[template engine]]></category>

		<category><![CDATA[web software]]></category>

		<guid isPermaLink="false">http://www.grahamnott.com/?p=31</guid>
		<description><![CDATA[I have a short code snippet to share, if you want to do simple date calculations using the Smarty template engine. As a very short preamble, I've used Smarty off-and-on for eight years, and it's great. I find its simplicity and power outweigh bloated frameworks on a regular basis.]]></description>
			<content:encoded><![CDATA[<p>I have a short code snippet to share, if you want to do simple date calculations using the <a href="http://www.smarty.net">Smarty template engine</a>. As a very short preamble, I've used Smarty off-and-on for eight years, and it's great. I find its simplicity and power outweigh bloated frameworks on a regular basis.</p>
<p>If you need the date for tomorrow, you can do it in two ways.</p>
<p>The <strong>first way</strong> is to create the variable in the "code behind", assign it to the template and then you can use it:</p>
<p>In PHP:</p>
<pre class="brush: php">$smarty-&gt;assign('tomorrow', strtotime('+1 day'));
</pre>
<p>In Smarty template (or use a date format of your choice):</p>
<pre class="brush: php">{$tomorrow|date_format:"%Y-%m-%d"}
</pre>
<p>The <strong>second way</strong> is done in the template alone. This is useful if you did not, or did not want to, assign a variable in the code behind. It is also useful if you wanted to use multiple dates (tomorrow, the next day, next week, etc.), or you could even use it in a loop:</p>
<p>In Smarty template:</p>
<pre class="brush: php">{math equation=x+y x=$smarty.now y=86400 assign=tomorrow}
{$tomorrow|date_format:"%Y-%m-%d"}
</pre>
<p>This uses the UNIX timestamp value of $smarty.now, and adds 86,400 seconds to it. Unfortunately you cannot easily add exactly one month - or one year - using this method because each month or year could have a different number of seconds in it.</p>
<p>In future, I plan to say a little more about Smarty and its virtues.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.grahamnott.com/2009/07/smarty-template-engine-and-tomorrow/feed/</wfw:commentRss>
		</item>
		<item>
		<title>HTML 5 and great expectations</title>
		<link>http://www.grahamnott.com/2009/06/html-5-and-great-expectations/</link>
		<comments>http://www.grahamnott.com/2009/06/html-5-and-great-expectations/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 00:42:55 +0000</pubDate>
		<dc:creator>graham</dc:creator>
		
		<category><![CDATA[Software Development]]></category>

		<category><![CDATA[animation]]></category>

		<category><![CDATA[browsers]]></category>

		<category><![CDATA[firefox]]></category>

		<category><![CDATA[flash]]></category>

		<category><![CDATA[HTML 5]]></category>

		<category><![CDATA[silverlight]]></category>

		<category><![CDATA[standards]]></category>

		<guid isPermaLink="false">http://www.grahamnott.com/?p=30</guid>
		<description><![CDATA[It's a busy day full of chatter on the InterWeb about HTML 5 and its proposed features. "Could it kill Flash and Silverlight", as supposed by Paul Krill at InfoWorld?]]></description>
			<content:encoded><![CDATA[<p>HTML5 and great expectations</p>
<p>It's a busy day full of chatter on the InterWeb about HTML 5 and its proposed features. "<a href="http://www.infoworld.com/d/developer-world/html-5-could-it-kill-flash-and-silverlight-291">Could it kill Flash and Silverlight</a>", as supposed by Paul Krill at InfoWorld?</p>
<p>One thing is certain: it is not <a href="http://en.wikipedia.org/wiki/Vaporware">vaporware</a>. After a short search, I found this example implementing a coverflow-style animation from Adnan Osmani (nice work!!) <a href="http://blarnee.com/wp/an-improved-javascript-coverflow-demo-using-canvas-and-html5/">http://blarnee.com/wp/an-improved-javascript-coverflow-demo-using-canvas-and-html5/</a> If you have an HTML 5 compatible browser - it worked in my Firefox version 3.0.11 - then give it a try. It replicates the animation you'd previously require Flash to do.</p>
<p>My prediction is not can it kill Flash, but when will it kill Flash. Open standards, after gaining momentum, are unstoppable. I'm sure companies like Adobe realize this, and the newer Flash application software will just generate HTML 5 compatible elements. What provides a heavy anchor on progress is how slow users are to upgrade their web browser to be compatible with the new features.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.grahamnott.com/2009/06/html-5-and-great-expectations/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Upgrading web application software: should it be difficult?</title>
		<link>http://www.grahamnott.com/2009/06/upgrading-web-application-software-should-it-be-difficult/</link>
		<comments>http://www.grahamnott.com/2009/06/upgrading-web-application-software-should-it-be-difficult/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 22:41:54 +0000</pubDate>
		<dc:creator>graham</dc:creator>
		
		<category><![CDATA[Software Development]]></category>

		<category><![CDATA[application]]></category>

		<category><![CDATA[civicrm]]></category>

		<category><![CDATA[drupal]]></category>

		<category><![CDATA[phpBB]]></category>

		<category><![CDATA[phpBB3]]></category>

		<category><![CDATA[software]]></category>

		<category><![CDATA[upgrade]]></category>

		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.grahamnott.com/?p=29</guid>
		<description><![CDATA[Today I was waiting for files to upload to the server in order to upgrade Drupal (in fact it is Acquia Drupal) and CiviCRM for Drupal, and while I was waiting I started writing this.
If you don't know what those software programs are, I will not explain here - you can go and read about [...]]]></description>
			<content:encoded><![CDATA[<p>Today I was waiting for files to upload to the server in order to upgrade <a href="http://www.drupal.org">Drupal</a> (in fact it is <a href="http://www.acquia.com">Acquia Drupal</a>) and <a href="http://www.civicrm.org">CiviCRM</a> for Drupal, and while I was waiting I started writing this.</p>
<p>If you don't know what those software programs are, I will not explain here - you can go and read about them. What matters is they are web applications, meaning they run on a web server and you use them in your web browser.</p>
<p>Many computer users - hundreds of millions of them - have from time to time installed software or upgraded software on their own computers. On Microsoft Windows, Mac, and others it's a fairly painless procedure of clicking the "Next" button as you confirm some choices. The computer does some work, you may restart the computer, and <strong>19 times out of 20</strong> you're good to go. Web applications are not that simple.</p>
<p>The general process in upgrading web application software is:</p>
<ul>
<li> <strong>Backup</strong> the <strong>files</strong>, and the <strong>database</strong> (basically backup every single thing you can find)</li>
<li> <strong>Delete the old files,</strong> which sometimes means all the files</li>
<li> <strong>Upload the new files</strong></li>
<li> <strong>Upload the themes and customizations</strong> you had made to your system (sometimes this must be done after running upgrade scripts)</li>
<li> <strong>Run an upgrade script</strong>, to upgrade your database. Sometimes, it may even help you merge the customizations you made to templates and files, such as how <a href="http://www.phpbb.com/">phpBB3</a> does).</li>
<li> <strong>Add back all the customizations</strong> you may have done (if they were wiped out), and confirm everything is running correctly. You may use some tools to help you merge the new files with the ones you customized.</li>
</ul>
<p>These usually require any combination of FTP, tar, gzip, zip, ssh, svn, SQL, Linux, and lots of specific knowledge to debug problems that may arise. There's typically no one click install, and if there is, it may work correctly <strong>2 out of 3</strong> times.</p>
<p>The web application software, through its available functions and possible customizations, are very complex. <strong>I dread having to upgrade </strong>the software because of the possible headaches that arise. But, I don't think it should necessarily any easier to upgrade it. Making it easier would lower the bar of expertise required to upgrade the software, and lowering that bar makes those who should not be upgrading the software themselves to think "it's not that hard, why don't I do it myself".</p>
<p>Unfortunately having a difficult upgrade process causes a steep learning curve for software administrators, and ... it's probably <strong>really scary</strong> for many people. When a security update is released, they are dependent on hard to find experts to help them.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.grahamnott.com/2009/06/upgrading-web-application-software-should-it-be-difficult/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Use your wisdom to beat the odds</title>
		<link>http://www.grahamnott.com/2009/06/use-your-wisdom-to-beat-the-odds/</link>
		<comments>http://www.grahamnott.com/2009/06/use-your-wisdom-to-beat-the-odds/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 23:11:09 +0000</pubDate>
		<dc:creator>graham</dc:creator>
		
		<category><![CDATA[Software Development]]></category>

		<category><![CDATA[bugs]]></category>

		<category><![CDATA[developer]]></category>

		<category><![CDATA[it support]]></category>

		<category><![CDATA[software]]></category>

		<category><![CDATA[wisdom]]></category>

		<guid isPermaLink="false">http://www.grahamnott.com/?p=28</guid>
		<description><![CDATA[There are so many adages that apply just as well to computers and software as anywhere else in life: be prepared! An ounce of prevention is.... The wise ones will use prevention to their advantage.]]></description>
			<content:encoded><![CDATA[<p>There are so many adages that apply just as well to computers and software as anywhere else in life: be prepared! An ounce of prevention is.... The wise ones will use prevention to their advantage.</p>
<p>For example, if you run a hosting server, and a users' domain name is about to expire, would you rather:</p>
<ol>
<li>Send a short email or make a phone call to check it will be renewed by them? Or,</li>
<li>Wait until the weekend, the web site may or may not go down. If it goes down, you may be scrambling to try and fix it.</li>
</ol>
<p>You can think of it in terms of a game of chance. Let's say sending the reminder will take 10% of the time and headache a downtime causes. 50% of the time, the domain name doesn't get renewed, and the downtime is caused. Then that ounce of prevention wins.</p>
<p>It's not magic to keep computers running and keep bugs to a minimum, though to some it seems like the "black arts". Developers and IT professionals experience  much they wish never to repeat again. The good ones will learn from their experiences, and if there's a known cause, next time that situation appears they prevent the bad experience from happening again.</p>
<p>As the years go by, this experience and knowledge starts to gel into some kind of wisdom. Wisdom is not just about fixing all the problems you've seen before , but is more like a "gut feeling" about what is a good choice and what is a not so good choice, and what you should or shouldn't do.</p>
<p>A couple years ago I was discussing this with a someone. Well, I was probably just blathering on about how I had fixed something that I noticed was wrong in some software, but this error was not my responsibility. Funny enough, she has done the same thing before, and for the same reason. We didn't fix the error primarily because we care about the customer. We fixed the errors because when it goes disastrously wrong, we will have to fix it, and it will be far more time consuming and frustrating to fix it than to ensure it never happens in the first place.</p>
<p>In software development, this wisdom works in an ongoing basis. We anticipate how the application will evolve over time. Perhaps we'll add a field in a database table for the date a record was created, because there's a good chance we may need it in the future. I'm sure there are hundreds of ways wisdom allows software and computers to run more smoothly. Unfortunately wisdom cannot be taught, so to gain more wisdom always be one the lookout for ways to anticipate disaster (and prevent it).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.grahamnott.com/2009/06/use-your-wisdom-to-beat-the-odds/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
