<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:rawvoice="http://www.rawvoice.com/rawvoiceRssModule/"
>

<channel>
	<title>ITauthor</title>
	<atom:link href="http://www.itauthor.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.itauthor.com</link>
	<description>Stuff about technical writing and software</description>
	<lastBuildDate>Sat, 07 Jan 2012 12:34:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<!-- podcast_generator="Blubrry PowerPress/2.0.4" -->
	<itunes:summary>Talking about technical writing, software and technology in general. The ITauthor Podcast is an advert-free, irregularly published show by technical writers for technical writers or anyone interested in software documentation or IT generally.</itunes:summary>
	<itunes:author>Alistair Christie - ITauthor.com</itunes:author>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://www.itauthor.com/images/ITauthor-PhotoLogo-300px.jpg" />
	<itunes:owner>
		<itunes:name>Alistair Christie - ITauthor.com</itunes:name>
		<itunes:email>comments@itauthor.com</itunes:email>
	</itunes:owner>
	<managingEditor>comments@itauthor.com (Alistair Christie - ITauthor.com)</managingEditor>
	<copyright>2006-2009</copyright>
	<itunes:subtitle>Talking about technical writing, software and technology in general.</itunes:subtitle>
	<itunes:keywords>itauthor, alistair christie, technology, writing, documentation</itunes:keywords>
	<image>
		<title>ITauthor</title>
		<url>http://www.itauthor.com/images/ITauthor-PhotoLogo-144px.jpg</url>
		<link>http://www.itauthor.com</link>
	</image>
	<itunes:category text="Technology">
		<itunes:category text="Software How-To" />
		<itunes:category text="Tech News" />
		<itunes:category text="Podcasting" />
	</itunes:category>
		<item>
		<title>Convert escaped Unicode to HTML entities</title>
		<link>http://www.itauthor.com/2012/01/07/convert-escaped-unicode-to-html-entities/</link>
		<comments>http://www.itauthor.com/2012/01/07/convert-escaped-unicode-to-html-entities/#comments</comments>
		<pubDate>Sat, 07 Jan 2012 10:29:32 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[View all]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2012/01/07/convert-escaped-unicode-to-html-entities/</guid>
		<description><![CDATA[I’m posting this here just because I spent far too long looking for the answer to this problem, before eventually finding a solution at http://ho.runcode.us and then realising the information had been in Stackoverflow all along – the search terms I was using must have just been missing it. So all of the following comes [...]]]></description>
			<content:encoded><![CDATA[<p><em><img style="background-image: none; border-right-width: 0px; margin-top: 0.5em; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; margin-right: 2em; padding-top: 0px" title="unicode-characters" border="0" alt="unicode-characters" src="http://www.itauthor.com/wp-content/uploads/2012/01/unicode-characters.png" width="144" height="131" />I’m posting this here just because I spent far too long looking for the answer to this problem, before eventually finding a solution at </em><a title="http://ho.runcode.us/q/how-do-i-convert-unicode-codepoints-to-hexadecimal-html-entities" href="http://ho.runcode.us"><em>http://ho.runcode.us</em></a> <em>and then realising the information had been in Stackoverflow all along – the search terms I was using must have just been missing it.</em></p>
<p><em>So all of the following comes from:      <br /></em><a title="http://stackoverflow.com/questions/3480074/how-do-i-convert-unicode-codepoints-to-hexadecimal-html-entities" href="http://stackoverflow.com/questions/3480074/how-do-i-convert-unicode-codepoints-to-hexadecimal-html-entities"><em>http://stackoverflow.com/questions/3480074/how-do-i-convert-unicode-codepoints-to-hexadecimal-html-entities</em></a> <em>and is thanks to Stackoverflow users </em><a href="http://stackoverflow.com/users/73070/joey"><em>Joey</em></a><em> and </em><a href="http://stackoverflow.com/users/127724/artefacto"><em>Artefacto</em></a><em>.</em></p>
<h2>The problem</h2>
<p style="margin-bottom: 0.5em"><strong><em>In short: </em></strong></p>
<p>Data that I want to display on a Web page contains escaped Unicode code units in it (like <span style="font-family: &#39;Courier New&#39;, courier , monospace">\u0096</span>) that I want to convert into HTML entities (like <span style="font-family: &#39;Courier New&#39;, courier , monospace">&amp;ndash;</span>) so that they will show up correctly on the Web page.</p>
<p style="margin-bottom: 0.5em"><strong><em>In a little more detail: </em></strong></p>
<p>I have a Web page with a table control that uses JSON. I have a PHP script that takes some user input (search query terms), goes and searches a database, forms the search results into an array (called <span style="font-family: &#39;Courier New&#39;, courier , monospace">$data</span>) with the correct format to pass to <strong>json_encode()</strong>:</p>
<p><code>$str = json_encode($data);</code></p>
<p>However, the value you pass to <strong>json_encode()</strong> must be UTF-8 encoded data, and mine isn’t, so I need to pass it through <strong>utf8_encode()</strong> first, before I pass it to <strong>json_encode()</strong>. For example, for the contents of the <strong>name</strong> field:</p>
<p><code>utf8_encode($matchedRecord['name']) </code></p>
<p>The result of this is that any slightly unusual characters, like the en dash (–), come back transformed into one or more escaped Unicode code units (e.g. the en dash becomes <span style="font-family: &#39;Courier New&#39;, courier , monospace">\u0096</span>). When this is included in an HTML page and sent to a browser it’s displayed as a strange little symbol by Firefox (e.g. <img style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="escaped-unicode-on-web-page" border="0" alt="escaped-unicode-on-web-page" src="http://www.itauthor.com/wp-content/uploads/2012/01/escaped-unicode-on-web-page.jpg" width="12" height="11" />), or just not displayed at all by Internet Explorer.</p>
<p>So I need to take the string from <strong>json_encode()</strong> and pass it through something that will convert the escaped Unicode code units (like <span style="font-family: &#39;Courier New&#39;, courier , monospace">\u0096</span>) into HTML entities (like <span style="font-family: &#39;Courier New&#39;, courier , monospace">&amp;ndash;</span>) so that they will show up correctly in the browser.</p>
<h2>The solution</h2>
<p><code>$str = preg_replace('/\\\\U0*([0-9a-fA-F]{1,5})/i', '&amp;#x\1;', $str);</code></p>
<p>This did the trick for me. However, Artefacto supplies a function that handles UTF-16 code points (i.e. characters made up of one or two 16-bit code units):</p>
<p><code>$str = unenc_utf16_code_units($str);      <br />&#160;&#160;&#160; <br />function unenc_utf16_code_units($string) {       <br />&#160;&#160;&#160; /* go for possible surrogate pairs first */       <br />&#160;&#160;&#160; $string = preg_replace_callback(       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; '/\\\\U(D[89ab][0-9a-f]{2})\\\\U(D[c-f][0-9a-f]{2})/i',       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; function ($matches) {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; $hi_surr = hexdec($matches[1]);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; $lo_surr = hexdec($matches[2]);       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; $scalar = (0x10000 + (($hi_surr &amp; 0x3FF) &lt;&lt; 10) |       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ($lo_surr &amp; 0x3FF));       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return &quot;&amp;#x&quot; . dechex($scalar) . &quot;;&quot;;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }, $string);       <br />&#160;&#160;&#160; /* now the rest */       <br />&#160;&#160;&#160; $string = preg_replace_callback('/\\\\U([0-9a-f]{4})/i',       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; function ($matches) {       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //just to remove leading zeros       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return &quot;&amp;#x&quot; . dechex(hexdec($matches[1])) . &quot;;&quot;;       <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; }, $string);       <br />&#160;&#160;&#160; return $string;       <br />}&#160;&#160;&#160; </code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2012/01/07/convert-escaped-unicode-to-html-entities/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>&#8220;Adequacy is sufficient&#8221; &#8211; but it&#8217;s never going to make you proud</title>
		<link>http://www.itauthor.com/2011/11/02/adequacy-is-sufficient-but-its-never-going-to-make-you-proud/</link>
		<comments>http://www.itauthor.com/2011/11/02/adequacy-is-sufficient-but-its-never-going-to-make-you-proud/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 22:31:03 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2011/11/02/adequacy-is-sufficient-but-its-never-going-to-make-you-proud/</guid>
		<description><![CDATA[I’ve been listening to the audiobook of Walter Isaacson’s new biography of Steve Jobs. Jobs’ desire (bordering on compulsion) to produce the very highest quality products warms my heart. Admittedly, he sounds like he was an incredibly difficult person to be around a lot of the time, and you’d have needed to be able to [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right"><a href="http://www.audible.com/pd/ref=sr_1_2?asin=B005XP2NTS&amp;qid=1320272685&amp;sr=1-2"><img style="background-image: none; border-bottom-color: #eeeeee; border-right-width: 1px; margin-top: 0px; border-top-color: #eeeeee; padding-left: 0px; padding-right: 0px; display: inline; margin-bottom: 10px; border-top-width: 1px; border-bottom-width: 1px; border-right-color: #eeeeee; margin-left: 30px; border-left-color: #eeeeee; border-style: solid; border-left-width: 1px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.itauthor.com/wp-content/uploads/2011/11/image.png" width="145" height="225" /></a></div>
<p>I’ve been listening to the audiobook of Walter Isaacson’s new biography of Steve Jobs. Jobs’ desire (bordering on compulsion) to produce the very highest quality products warms my heart. Admittedly, he sounds like he was an incredibly difficult person to be around a lot of the time, and you’d have needed to be able to adopt a water-off-a-duck’s back approach to a lot of his outbursts, but I admire the fact that he allowed his intuition to tell him when something wasn’t right and he just wasn’t prepared to settle for second best.</p>
<p>Take the following quote:</p>
<blockquote><p><em>At the West Coast Computer Faire in April 1981 … Adam Osborne released the first truly portable personal computer. It was not great – it had a five-inch screen and not much memory – but it worked well enough. As Osborne famously declared, &quot;Adequacy is sufficient. All else is superfluous.&quot; Jobs found that approach to be morally appalling …</em></p>
</blockquote>
<p>Like Jobs, I find the “adequacy is sufficient” attitude appalling (though I’m not sure about <em>morally</em> appalling). It reminds me of the tenet of the Agile development methodology that you should aim to deliver goods and services that are “just barely good enough”. If a product is good enough to ship and be accepted by the customer then it’s good enough, and any effort expended on trying to make it better than that, in your opinion, is simply an opportunity cost – that is, you could have spent that time profitably on other paid work. </p>
<p>Colin Chapman, the founder of Lotus Cars, claimed that the perfect racing car would fall to pieces as soon as it crossed the finish line to win a race. If it didn’t it just showed that it was over engineered. Of course this was hyperbole. Chapman was exaggerating to make a point. You only need to look at those beautiful Lotus racing cars he designed to realise that they were engineered for more than merely crossing the finishing line first.</p>
<p>I became a convert to the Agile methodology a few years back and I still believe it’s got a lot to offer. For a while I tried to convince myself that aiming to deliver “barely good enough” was the way to go, but it always rankled with me. These days I find the idea repugnant. To me it represents one of the worst aspects of the business world: the short-termist approach of “let’s just ship whatever we can manage to persuade the customer to accept and involves the least possible work for us”. It’s an accountant’s balance sheet view of product management: the smallest possible number in red that gives the biggest possible number in blue – maximise the credits, minimise the debits, and ship whatever whatever we can get away with. This kind of thinking <em>will</em> get you sales but it will not get you repeat business and it’s not a recipe for success (by which I mean growing numbers of happy customers and happy staff).</p>
<p>Steve Jobs had the signatures of the Macintosh team moulded on the inside of the cases of the original Apple Macs. That’s right: the <em>inside</em> – and you couldn’t even open the case to see this. Why did he do this? Well imagine how you’d feel if yours was one of those names! For all the berating and bawling out he did, imagine the team-bonding, morale-boosting effect of having your name moulded into the first Apple Mac. Wouldn’t you want to produce the best computer in the world if you knew your signature was on it. <em>(If the answer to that question is no then you would never have been employed as part of that team.)</em></p>
<p>Jobs also fretted over the exact colour of the case, insisted on rounded corners for dialog boxes, obsessed over the choice of system fonts – things that the majority of buyers wouldn’t consciously even notice and wouldn’t really care about even if their attention was drawn to it. But Jobs noticed, and he cared about these things and he wanted to produce a product that he could be genuinely proud of. To an extent he was doing it for himself. He was designing the computer he wanted to own. And he continued doing this with hardware products (Apple software is another story altogether) for the rest of his life.</p>
<p>The point is that I increasingly feel, for our own self-respect and self-regard, we should always try to do the very best work we are capable of. Adopting the “adequacy is sufficient” attitude, or believing that “just barely good enough” should be the height of your aspirations, inevitably leads to a feeling that all you need to do is the minimum you need to do to avoid getting the sack so that you can continue collecting your pay cheque. The accountancy ethos rubs off: minimum personal outlay for maximum financial income.</p>
<p>For me that’s not enough. Just barely good enough is never going to be enough. It’s laziness. It’s a lazy, unambitious, unimaginative outlook on life that I want no part of – and I don’t want to have to work with people who think that way either. I want to aim to do work that is every bit as good as I can make it – whether or not anybody else ever notices. Personally, a good day for me is when I end the day feeling like I’ve done something I can be proud of. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2011/11/02/adequacy-is-sufficient-but-its-never-going-to-make-you-proud/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Does Facebook prove that bad usability and sparse documentation don&#8217;t matter?</title>
		<link>http://www.itauthor.com/2011/10/14/does-facebook-prove-that-bad-usability-and-sparse-documentation-dont-matter/</link>
		<comments>http://www.itauthor.com/2011/10/14/does-facebook-prove-that-bad-usability-and-sparse-documentation-dont-matter/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 00:22:30 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[User interface]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2011/10/14/does-facebook-prove-that-bad-usability-and-sparse-documentation-dont-matter/</guid>
		<description><![CDATA[OK, first off, I have to admit I’m not really much of a Facebook user. However, I know I’m not alone in finding Facebook’s user interface so poorly designed that it can be really difficult to do anything other than the stuff most people do in there most of the time. And yes, I know: [...]]]></description>
			<content:encoded><![CDATA[<p>OK, first off, I have to admit I’m not really much of a Facebook user. However, I know I’m not alone in finding Facebook’s user interface so poorly designed that it can be really difficult to do anything other than the stuff most people do in there most of the time. And yes, I know: a fundamental aspect of good usability is that the things you do most often in a software product should be the things you can do quickest and most easily. However, the interface should not hide away the other features in such a way that you need to spend considerable time and effort to uncover them.</p>
<p>None of what I’m saying is new or original. People have been complaining loud and long about Facebook’s user interface – not least because the folks in Palo Alto keep changing it, without warning and often for no apparent reason. And yet, despite all the changes, the usability doesn’t seem to get any better. Things that were in one place are now hidden away somewhere else. A feature that was called one thing last time you looked for it is now called something completely different. It’s insane!</p>
<p>What’s made me ponder this today is that I’ve just spent over an hour figuring out how to stop Facebook importing my blog entries as Notes – something I must have turned on at some time in the past but then forgot about and today, when I realised this was happening, decided to turn off. Easier said than done though! Go look for how to do this in the sparse Facebook Help. Nothing! Of course I then fell back on Google, however the endless changes to the user interface mean that none of the pages I found had instructions or screenshots that matched the current layout or how things currently work.</p>
<p>Now I realise I’m pissing into the wind complaining about this. As of today Facebook has around 800 million active users and revenue of over $4 billion. 800 million people can’t be wrong – right? I just find it a little depressing that so many people are prepared to put up with something so poorly designed. And Facebook is not an isolated case of a successful software product with God-awful usability. Every time I use the iTunes application it baffles me that Steve Jobs, who was such a master of usability and beautiful design when it came to hardware, could allow the Apple brand to be associated with such a rank pile of crap as iTunes.</p>
<h2>How to stop Facebook importing your blog entries as Notes</h2>
<p>So, just in case anyone else is struggling over this like I was today (although I realise the shelf-life of the following documentation will be extremely brief), here’s how you turn off the automatic importing of an RSS feed into your Facebook account.</p>
<ol>
<li>
<p>Log in to Facebook.</p>
</li>
<li>
<p>Click <strong>Notes</strong> in the left column.</p>
<p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="facebook-notes1" border="0" alt="facebook-notes1" src="http://www.itauthor.com/wp-content/uploads/2011/10/facebook-notes1.png" width="191" height="198" /></p>
</li>
<li>
<p>Click <strong>My Notes </strong>to view just your own added or imported notes.</p>
</li>
<li>
<p>At the bottom of one of the imported notes, click <strong>View full note</strong>.</p>
<p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="facebook-notes2" border="0" alt="facebook-notes2" src="http://www.itauthor.com/wp-content/uploads/2011/10/facebook-notes2.png" width="276" height="63" /></p>
</li>
<li>
<p>Click <strong>Edit import settings</strong> in the left column.</p>
<p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="facebook-notes3" border="0" alt="facebook-notes3" src="http://www.itauthor.com/wp-content/uploads/2011/10/facebook-notes3.png" width="186" height="225" /></p>
<p><strong>Important</strong>: You only see this option after you’ve displayed the full view of one of your imported notes. This was the elusive bit of information that resulted in me wasting over an hour on doing something that should have taken a couple of minutes.</p>
</li>
<li>
<p>On the Import a blog page, click <strong>Stop Importing</strong>.</p>
<p><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="facebook-notes4" border="0" alt="facebook-notes4" src="http://www.itauthor.com/wp-content/uploads/2011/10/facebook-notes4.png" width="422" height="293" /></p>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2011/10/14/does-facebook-prove-that-bad-usability-and-sparse-documentation-dont-matter/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Scan for available IP addresses</title>
		<link>http://www.itauthor.com/2011/08/28/scan-for-available-ip-addresses/</link>
		<comments>http://www.itauthor.com/2011/08/28/scan-for-available-ip-addresses/#comments</comments>
		<pubDate>Sun, 28 Aug 2011 09:33:15 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Shell scripts]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2011/08/28/scan-for-available-ip-addresses/</guid>
		<description><![CDATA[How do you connect to a device on your local network when you know a valid user name and password but the machine: Is not in your DNS system so you can’t get to it using a host name Has a static IP address that’s assigned on the machine itself - but you don’t know [...]]]></description>
			<content:encoded><![CDATA[<p>How do you connect to a device on your local network when you know a valid user name and password but the machine:</p>
<ul>
<li>Is not in your DNS system so you can’t get to it using a host name </li>
<li>Has a static IP address that’s assigned on the machine itself - but you don’t know what the address is </li>
</ul>
<p>The answer is you need to use trial and error to find and IP address that asks you for a user name and password and when you plug in the user name and password you know are valid you get a connection.</p>
<p>This is a whole lot quicker if the machine accepts <strong>ping</strong> requests (which are basically little “hello, anyone there?” messages fired at a computer, to which the machine answers “yup,” if it wants to, and your computer tells you how long it took to get a response).</p>
<p>If you don’t already have a <a title="See section below" href="#scanners">network scanner*</a> installed, here’s a little shell script you can run from a Windows command prompt. Fire up the command console (<strong>cmd.exe</strong>) and enter this (changing the bits in red to suit yourself):</p>
<p> <code>SET fl=<span style="color: red">c:\Alistair\ipaddresses.txt</span> &amp; ECHO =================================================== &gt;&gt; %fl% &amp; ECHO.%date% %time% &gt;&gt; %fl% &amp; FOR /L %i IN (<span style="color: red">0</span>,1,<span style="color: red">255</span>) DO ping -n 1 <span style="color: red">192.168.0</span>.%i | FIND /i &quot;Reply&quot; | FIND /i /v &quot;unreachable&quot; &gt;&gt; %fl%</code>
<p>In the above:</p>
<ul>
<li><strong>c:\Alistair\ipaddresses.txt</strong> is the path to the log file where I want to write the IP addresses </li>
<li><strong>(0,1,255)</strong> means set the variable %i to 0 to start with, increment by 1 each time the FOR loop loops and stop after it reaches 255 </li>
<li><strong>192.168.0.%i</strong> is the IP address range (in this case this starts at 192.168.0.0 and ends at 192.168.0.255) </li>
</ul>
<p>The first FIND command finds all lines of output containing “Reply.” These get passed to the second FIND command which removes any lines that contain “unreachable.” The result is that ping output is only logged where the ping to an IP address was responded to.</p>
<p>The output in the log file looks something like this:</p>
<pre>===================================================
28/08/2011  9:22:24.26
Reply from 192.168.0.1: bytes=32 time=24ms TTL=64
Reply from 192.168.0.41: bytes=32 time=82ms TTL=64
Reply from 192.168.0.42: bytes=32 time&lt;1ms TTL=128</pre>
<p>A variation on the script is to look for host names for the IP addresses and log these, if found. This takes much longer to run but could be useful if you need to find out what machines on your network can be pinged with their host name: </p>
<p><code>SET fl=c:\Alistair\ipaddresses.txt &amp; ECHO =================================================== &gt;&gt; %fl% &amp; ECHO.%date% %time% &gt;&gt; %fl% &amp; FOR /L %i IN (0,1,255) DO ping -a -n 1 192.168.0.%i | FINDSTR /i &quot;Pinging.*\[ Reply&quot; | FIND /i /v &quot;unreachable&quot; &gt;&gt; %fl%</code> </p>
<p>Which produces output like this:</p>
<pre>===================================================
28/08/2011  9:22:24.26
Reply from 192.168.0.1: bytes=32 time=24ms TTL=64
Reply from 192.168.0.41: bytes=32 time=82ms TTL=64
Pinging rolumus [192.168.0.42] with 32 bytes of data:
Reply from 192.168.0.42: bytes=32 time&lt;1ms TTL=128</pre>
<p>In this example, just one of the machines could be reached by a host name: romulus.</p>
<h4>Turn it into a batch file</h4>
<p>If, for some reason, you can see yourself needing to use this script now and again you might want to save it as a batch file that you can run simply by double-clicking the file in Windows Explorer. Here’s an example of a batch file that runs the second (slower) of the scripts:</p>
<p><code>@ECHO OFF<br class="workaround" />REM Created by Alistair 28/8/2011<br class="workaround" />REM See blog post on this: http://www.itauthor.com/2011/08/28/scan-for-available-ip-addresses/<br class="workaround" />REM For more batch file commands, see: http://ss64.com/nt/<br class="workaround" />SET fl=c:\Alistair\ipaddresses.txt<br class="workaround" />ECHO Scan IP addresses for ones that accept a ping request.<br class="workaround" />ECHO The output from this batch file is logged in %fl%<br class="workaround" />ECHO Scanning ...<br class="workaround" />ECHO =================================================== &gt;&gt; %fl% &amp; ECHO.%date% %time% &gt;&gt; %fl% &amp; FOR /L %%i IN (0,1,255) DO ping -a -n 1 192.168.0.%%i | FINDSTR /i &quot;Pinging.*\[ Reply&quot; | FIND /i /v &quot;unreachable&quot; &gt;&gt; %fl% &amp; ECHO 192.168.0.%%i<br class="workaround" />ECHO Scan completed. See log file (%fl%) for results. </code></p>
<p>Just save this as a file with a <strong>.bat</strong> file name extension (e.g. <strong>checkIPaddresses.bat</strong>) in a location that doesn’t require Administrator privileges. For example, if you want to run it from your desktop don’t save the batch file to your desktop, save it somewhere like <strong>C:\YourStuff\batchFiles\</strong>, then create a shortcut and put the shortcut on your desktop.</p>
<h4><a name="scanners"></a>Network scanners</h4>
<p>Be very careful if you’re considering installing a network scanner. There are a lot of port and IP addresses scanners out there and a lot of them are malware. They might do the job OK but they also come with viruses, so watch out. There are infected/corrupted versions of reputable scanners, so don’t assume something is OK just because you’ve read good stuff about it, unless you are completely confident you’re getting the kosher version of it.</p>
<h4>More information</h4>
<p>A good source of information about Windows shell commands is: <a title="http://ss64.com/nt/" href="http://ss64.com/nt/">http://ss64.com/nt/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2011/08/28/scan-for-available-ip-addresses/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Rails Chronicles &#8211; Part 2</title>
		<link>http://www.itauthor.com/2011/07/09/rails-chronicles-part-2/</link>
		<comments>http://www.itauthor.com/2011/07/09/rails-chronicles-part-2/#comments</comments>
		<pubDate>Sat, 09 Jul 2011 20:29:17 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2011/07/09/rails-chronicles-part-2/</guid>
		<description><![CDATA[Before you read any further: This is the second in a series of posts intended to capture how I went about learning how to create Web apps using Rails. I thought it might be interesting to look back in a few months and see all the things I got wrong and didn’t understand about Ruby [...]]]></description>
			<content:encoded><![CDATA[<p><img style="background-image: none; border-right-width: 0px; margin: 0px 0px 0px 1em; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" border="0" src="http://www.itauthor.com/wp-content/uploads/2011/06/150px-Ruby_on_Rails.svg_thumb.png" width="150" height="194" /><font color="#3f8287"><em><strong>Before you read any further</strong>:</em> This is the second in a series of posts intended to capture how I went about learning how to create Web apps using Rails. I thought it might be interesting to look back in a few months and see all the things I got wrong and didn’t understand about Ruby and Rails when I started out. So, if you’re looking for enlightenment about Rails, you’re in the wrong place. I’d recommend you head over to Michael Hartl’s </font><a href="http://ruby.railstutorial.org"><font color="#3f8287">Ruby on Rails Tutorial</font></a><font color="#3f8287">: that’s the site that really got me started.</font></p>
<h2 style="clear: left">Test first</h2>
<p>Chapter 3 of Michael Hartl’s Rails Tutorial introduces you to testing within Rails development. I’ve known about test-driven development (TDD) for a long time, but I’ve never actually done it. So I was looking forward to finding out how you write tests for something you’ve not built yet. </p>
<p>To be honest, not only have I never written tests before writing the code, I’ve never written tests full stop. In all my years of writing software programs (I wrote my first program, in BASIC, in 1989, then worked my way through C, Visual Basic for Applications, JavaScript, Perl and PHP) I’ve never actually <em>written</em> a test in software to test software I’ve written. So, this feels like a step up from my hacky habits towards a modicum of semi-professional rigour.</p>
<h2>RSpec</h2>
<p>RSpec (the R is for Ruby, Spec for Specification) is a Ruby package that lets you use a simple grammar to create specifications for software you intend to build. You can then test the software against the specification. The process goes something like this:</p>
<div class="quote">
<ul>
<li style="margin: 0px">You write a test. This test describes the behavior of a small element of your system. </li>
<li style="margin: 0px">You run the test. The test fails because you have not yet built the code for that part of your system. This important step tests your test case, verifying that your test case fails when it should. </li>
<li style="margin: 0px">You write enough code to make the test pass. </li>
<li style="margin: 0px">You run the tests and verify that they pass. </li>
</ul></div>
<p>The above is from <a href="http://www.ibm.com/developerworks/web/library/wa-rspec/"><em>Behavior-driven testing with RSpec</em></a> by <a href="http://www.ibm.com/developerworks/web/library/wa-rspec/#author1">Bruce Tate</a>, which is a good tutorial on RSpec if you want to stray from Michael Hartl’s tutorial for a while.</p>
<h3>Fixing the ANSICON warning</h3>
<p>When I ran the RSpec tests for the first time (<a href="http://ruby.railstutorial.org/chapters/static-pages#sec:TDD">section 3.2.2 of the Rails Tutorial</a>):</p>
<p><code style="margin: 0px">$ bundle exec rspec spec/ </code></p>
<p>it worked but the output text included the message:</p>
<pre style="margin: 0px 0px 1.8em"> *** WARNING: You must use ANSICON 1.31 or higher (<a href="http://adoxa.110mb.com/ansicon">http://adoxa.110mb.com/ansicon</a>) to get coloured
 output on Windows</pre>
<p>This sounds serious but it only means your console (in my case MINGW32 running bash – which came when I installed git from GitHub) isn’t displaying the colours it could be displaying.</p>
<p>If you want to fix this: </p>
<ol>
<li>Go to <a title="http://adoxa.110mb.com/ansicon/" href="http://adoxa.110mb.com/ansicon/">http://adoxa.110mb.com/ansicon/</a> and download ANSICON 1.40. </li>
<li>Unzip the downloaded zip file. </li>
<li>Open a command console as Administrator (i.e. type cmd into the start menu, right-click <strong>cmd.exe</strong> and choose <strong>Run as Administrator</strong>). </li>
<li>cd to the location of the unzipped files </li>
<li>You’ll find subdirectories called <strong>x86</strong> and <strong>x64</strong>. On a 32-bit machine go into the x86 directory. On a 64-bit machine go into the x64 directory. </li>
<li>
<p>If you want to see command syntax enter:</p>
<p><code>ansicon.exe -h</code></p>
</li>
<li>
<p>To install ANSICON, enter:</p>
<p><code>ansicon.exe -i</code></p>
</li>
</ol>
<h2>Autotest and Growl</h2>
<p>The tutorial describes using Autotest and Growl to run tests and notify you when your test completes by displaying a summary of the test results. The good thing about using Growl is that, you can kick off a suite of tests and then go away and do other things in Windows while the tests run. When they finish, a message is displayed on top of all other windows.</p>
<p>I’m still pretty hazy about exactly what Autotest does and doesn’t do. As its name suggests it obviously runs tests automatically, but I’ve yet to figure out why tests get triggered when you save changes to some files but not others. However, it’s very handy for something to be sitting waiting for you to change certain files and, when you do, checking the file to make sure you haven’t contravened any of the definitions in your specification. You do this by opening a dedicated console window, entering: </p>
<p><code>$ autotest </code></p>
<p>and then just leaving the window open in the background so that the autotest process keeps running and will run your tests as you work on your Rails project.</p>
<p>I set up Growl by following Michael Hartl’s instructions (plus the instructions he cross-refers to for Windows users):</p>
<p><code>$ gem install autotest -v 4.4.6 $ gem install autotest-rails-pure -v 4.1.2 $ gem install autotest-standalone $ gem install autotest-growl </code></p>
<p>Download and install Growl for Windows from:</p>
<p><a title="http://www.growlforwindows.com/gfw/" href="http://www.growlforwindows.com/gfw/">http://www.growlforwindows.com/gfw/</a>&#160;</p>
<p>Create a <strong>.autotest</strong> file as follows:</p>
<p><code>$ gvim ~/.autotest</code></p>
<p>Containing the single line of text:</p>
<p><code>require 'autotest/growl'</code></p>
<p>Of course if you want to use Growl to notify you the results of tests you’ve got to start it first. In Windows 7 just enter <span style="font-family: consolas,courier,&#39;Courier New&#39;">growl</span> in the Start menu search box and then press Enter when Windows finds the Growl program. I suppose if you were working on Ruby all the time and regularly running tests you could set up Growl to start automatically when Windows starts.</p>
<p>When you start Growl it displays a message telling you it’s running, but that’s all it does. It’s just waiting for a notification to display. Growl lives in the system tray. You can click it and change the setup options:</p>
<p class="img-holder"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="growl1" border="0" alt="growl1" src="http://www.itauthor.com/wp-content/uploads/2011/07/growl11.png" width="701" height="438" /></p>
<p class="img-holder"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="growl2" border="0" alt="growl2" src="http://www.itauthor.com/wp-content/uploads/2011/07/growl21.png" width="698" height="440" /></p>
<p>I’m not entirely sure what added Autotest to the list of applications. It wasn’t there at first but one of the command-line commands must have added it.</p>
<p>After setting up Growl when you start Autotest: </p>
<p><code>$ autotest </code></p>
<p>and your tests complete you get a sound and a visual notification telling you whether your tests passes or failed. I chose the notification style called Visor which slides down from the top of the screen:</p>
<p class="img-holder"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="growl-autotest-notification" border="0" alt="growl-autotest-notification" src="http://www.itauthor.com/wp-content/uploads/2011/07/growl-autotest-notification1.png" width="773" height="225" /></p>
<h2>No DRb server is running</h2>
<p>If, when you run autotest (or when you just run <strong>bin/rspec spec</strong>), you get:</p>
<pre style="margin: 0px 0px 1.8em">No DRb server is running. Running in local process instead ...</pre>
<p>it means Spork isn’t running.</p>
<p>Spork is a gem that you put into the Gemfile for your project. It contains a Distributed Ruby (DRb) server that enables Ruby programs to work with other Ruby programs by sending/receiving messages via the DRb server. So one Ruby program can use a method that’s defined in another Ruby program running on the same computer, or on a computer somewhere else on the network.</p>
<p>More about Distrubuted Ruby here: <a title="http://ruby.about.com/od/advancedruby/a/drb.htm" href="http://ruby.about.com/od/advancedruby/a/drb.htm">http://ruby.about.com/od/advancedruby/a/drb.htm</a></p>
<p>You need to associate your Ruby program with Spork. The setup instructions for Spork are described in the tutorial here: <a title="http://ruby.railstutorial.org/chapters/static-pages#sec:spork" href="http://ruby.railstutorial.org/chapters/static-pages#sec:spork">http://ruby.railstutorial.org/chapters/static-pages#sec:spork</a></p>
<p>To start Spork, open a new console window for the purpose, navigate to your project directory and enter:</p>
<p><code>$ bundle exec spork </code></p>
<p>You can then go back to your other console window and run autotest and it should complete the tests in less time, because it’s not having to load so much stuff (Spork has preloaded that stuff and is sitting waiting for connections).</p>
<h2>Switching Web server from WEBrick to thin</h2>
<p>Rails comes with the lightweight WEBrick Web server that you can use for testing pages – as described in the Rails Tutorial. However, I had a few odd little niggles with it, and it seemed very slow, so I switched to using an alternative called “thin”. To do this you need to install the <strong>eventmachine</strong> and <strong>thin</strong> gems. </p>
<p><em><strong>Note</strong>:</em> You need a particular version of eventmachine for thin on Windows. </p>
<ol>
<li>At the command line, change directories to your project directory. </li>
<li>
<p>Edit the <strong>Gemfile</strong> file within the project directory to:</p>
<p><code>group :development do&#160;&#160; …&#160;&#160; gem 'eventmachine', '1.0.0.beta.2'&#160;&#160; gem 'thin' end</code></p>
</li>
<li>
<p>Then run:</p>
<p><code>$ bundle install</code></p>
</li>
<li>
<p>You can then start the server like this:</p>
<p><code>$ rails s thin</code></p>
<p>Or, to redirect it’s output to a file and detach the process from the bash shell: </p>
<p><code>$ rails s thin &gt;&gt; thin_output_log.txt &amp;</code></p>
</li>
</ol>
<h2>Solving the ssh.exe problem</h2>
<p>After initially using GitHub without any problems, when I tried to update GitHub a few days later I discovered that this was no longer working. </p>
<p>Whenever I tried to do anything involving a connection to GitHub – even just<font face="Consolas"> ssh git@github.com</font> – I got a message saying: <strong>ssh.exe has stopped working</strong>.</p>
<p class="img-holder"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="ssh-stopped-working" border="0" alt="ssh-stopped-working" src="http://www.itauthor.com/wp-content/uploads/2011/07/ssh-stopped-working1.png" width="537" height="271" /></p>
<p>After much fruitless Googling, uninstalling and reinstalling Git for Windows, disabling anti-virus, etc. I finally discovered the fix, which is to set the file properties of <strong>ssh.exe</strong> and <strong>ssh-keygen.exe</strong> (in the <strong>Git/bin</strong> directory) so that they run in either Windows XP or Vista compatibility mode (either will do). </p>
<p class="img-holder"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="compatibility-mode" border="0" alt="compatibility-mode" src="http://www.itauthor.com/wp-content/uploads/2011/07/compatibility-mode1.png" width="772" height="699" /></p>
<p>I presume this is because I’m running 64-bit Windows 7. But I’ve no idea why it worked fine when I installed it initially.</p>
<p>Bizarrely, after restarting Windows I seem to have to go through this process again, even though the settings indicate that it should run in compatibility mode. It appears to be necessary to go to this tab in the Properties dialog box for these files and click OK to force this mode to be used.
  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2011/07/09/rails-chronicles-part-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How to: Get a white screen</title>
		<link>http://www.itauthor.com/2011/06/28/how-to-get-a-white-screen/</link>
		<comments>http://www.itauthor.com/2011/06/28/how-to-get-a-white-screen/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 19:15:00 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[View all]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2011/06/28/how-to-get-a-white-screen/</guid>
		<description><![CDATA[Firstly, why would you want to blank your computer screen? Answer: If you take screenshots of windows with the Windows Aero theme (i.e. semi-transparent window chrome) then it’s a good idea to always use a plain white background to avoid the distraction of other text or bits of underlying windows showing through. To quickly display [...]]]></description>
			<content:encoded><![CDATA[<p>Firstly, why would you want to blank your computer screen?</p>
<p><strong><em>Answer: </em></strong>If you take screenshots of windows with the Windows Aero theme (i.e. semi-transparent window chrome) then it’s a good idea to always use a plain white background to avoid the distraction of other text or bits of underlying windows showing through.</p>
<p>To quickly display a white screen:</p>
<ol>
<li>
<p>Copy and paste the following into the address bar of your browser:</p>
<p><code>javascript:document.write(), document.close(); void 0;</code></p>
</li>
<li>
<p>Press Enter.</p>
</li>
<li>
<p>Press F11 to get rid of the browser chrome (and F11 again to get out of full-screen mode).</p>
</li>
</ol>
<h2>Bookmark it</h2>
<p>For a quick blank screen at any time (without having to remember the Javascript), save it as a bookmark by either right-clicking the following link and choosing <strong>Bookmark This Link</strong> (in Firefox) or <strong>Add to Favorites</strong> (IE), or – if you’re using Chrome or Safari – display the Bookmarks Bar and drag the following link into it: </p>
<p><a href="javascript:document.write(), document.close(); void 0;" name="bmlink">Blank Page</a></p>
<h2>Alternative solution: Save a blank page</h2>
<p>Alternatively, you can make a blank web page and save it to your desktop (or anywhere else) for quick access whenever you need a white background:</p>
<ol>
<li>
<p>Create a text file containing the following:</p>
<p><code>&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;</code></p>
</li>
<li>
<p>Save this to your desktop (or wherever) with an HTML file name extension – e.g. <strong>WhiteScreen.html</strong>.</p>
</li>
</ol>
<p>Now you can double-click the file to display a white web page. Again, press F11 for full-screen mode. You can bookmark the page if you prefer using this method rather than the Javascript method. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2011/06/28/how-to-get-a-white-screen/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>My first (useful) Ruby program</title>
		<link>http://www.itauthor.com/2011/06/25/my-first-useful-ruby-program/</link>
		<comments>http://www.itauthor.com/2011/06/25/my-first-useful-ruby-program/#comments</comments>
		<pubDate>Sat, 25 Jun 2011 22:44:40 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2011/06/25/my-first-useful-ruby-program/</guid>
		<description><![CDATA[Summary: Batch convert files with names like 25_06_2011 21_30.wav to names like 2011-06-25_2130_Saturday.wav. I have a load of files with date/time-based file names in the format dd_mm_yyyy hh_mm.wav. I’d prefer these files to have a format that allowed them to be sorted in a directory in a meaningful way by the file name (i.e. yyyy-dd-mm). [...]]]></description>
			<content:encoded><![CDATA[<div style="padding-bottom: 13px; background-color: #eee; padding-left: 10px; padding-right: 10px; margin-bottom: 18px; padding-top: 12px"><strong>Summary</strong>: Batch convert files with names like <strong>25_06_2011 21_30.wav</strong> to names like <strong>2011-06-25_2130_Saturday.wav</strong>. </div>
<p>I have a load of files with date/time-based file names in the format <strong><em>dd_mm_yyyy hh_mm</em>.wav</strong>. I’d prefer these files to have a format that allowed them to be sorted in a directory in a meaningful way by the file name (i.e. <em>yyyy-dd-mm</em>). I also have a pet hate of file names containing spaces. It would also be useful to show the day of the week in the file name. So what I’d really like is a file name in the format <strong><em>yyyy-dd-mm_hhmm_&lt;dayname&gt;</em>.wav</strong>. </p>
<p>In the past I’d have written a Perl script to rename a batch of files, but since I’ve been looking at Ruby recently it made sense to have a bash at doing this in Ruby. </p>
<p>Here’s the program I came up with: </p>
<div><a style="text-decoration: none" href="/wp-content/uploads/2011/06/RenameWavFiles.rb">
<div style="background-color: #1b1d1e; font-family: consolas,monospace,monospace; color: #ffffff; font-size: 11pt"><span style="background-color: #232526"><font color="#bcbcbc">1 </font></span><font color="#a6e22e">#!/c/ruby/bin/ruby</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">2 </font></span><font color="#80a0ff"># Created by Alistair Christie</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">3 </font></span><font color="#80a0ff"># Date: 25 June 2011</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">4 </font></span><font color="#80a0ff"># This is my first functional Ruby program.</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">5 </font></span><font color="#80a0ff"># It's purpose is to take files in the current directory (if no arg supplied) -</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">6 </font></span><font color="#80a0ff"># or files in the specified directory (argument on command line) -</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">7 </font></span><font color="#80a0ff"># that match the pattern nn_nn_nnnn nn_nn.wav</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">8 </font></span><font color="#80a0ff"># (i.e. iPod voice memos saved as WAV files: dd_mm_yyyy hh_mm.wav)</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">9 </font></span><font color="#80a0ff"># copy them to an archive subdirectory</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">10 </font></span><font color="#80a0ff"># and rename the originals yyyy-mm-dd_hhmm_&lt;dayname&gt;.wav</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">11 </font></span>        <br /><span style="background-color: #232526"><font color="#bcbcbc">12 </font></span><font color="#a6e22e">require</font>&#160;<font color="#8f8f8f">'</font><font color="#e6db74">date</font><font color="#8f8f8f">'</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">13 </font></span><font color="#a6e22e">require</font>&#160;<font color="#8f8f8f">'</font><font color="#e6db74">fileutils</font><font color="#8f8f8f">'</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">14 </font></span>        <br /><span style="background-color: #232526"><font color="#bcbcbc">15 </font></span><font color="#f92672"><b>if</b></font>&#160;<font color="#fd971f">ARGV</font>.length &gt; <font color="#ae81ff">0</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">16 </font></span>&#160;&#160;&#160; <font color="#fd971f">$input_directory</font> = <font color="#fd971f">ARGV</font>[<font color="#ae81ff">0</font>]         <br /><span style="background-color: #232526"><font color="#bcbcbc">17 </font></span><font color="#f92672"><b>else</b></font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">18 </font></span>&#160;&#160;&#160; <font color="#fd971f">$input_directory</font> = <font color="#8f8f8f">'</font><font color="#e6db74">.</font><font color="#8f8f8f">'</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">19 </font></span><font color="#f92672"><b>end</b></font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">20 </font></span>        <br /><span style="background-color: #232526"><font color="#bcbcbc">21 </font></span><font color="#66d9ef">Dir</font>.chdir(<font color="#fd971f">$input_directory</font>)         <br /><span style="background-color: #232526"><font color="#bcbcbc">22 </font></span>        <br /><span style="background-color: #232526"><font color="#bcbcbc">23 </font></span><font color="#fd971f">$archivedir</font> = <font color="#8f8f8f">&quot;</font><font color="#e6db74">originalFiles_nowRenamed</font><font color="#8f8f8f">&quot;</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">24 </font></span><font color="#fd971f">$count</font> = <font color="#ae81ff">0</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">25 </font></span>        <br /><span style="background-color: #232526"><font color="#bcbcbc">26 </font></span>puts <font color="#8f8f8f">&quot;</font><font color="#e6db74">Processing ...</font><font color="#8f8f8f">&quot;</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">27 </font></span>        <br /><span style="background-color: #232526"><font color="#bcbcbc">28 </font></span><font color="#66d9ef">def</font>&#160;<font color="#a6e22e">file_match</font>(pattern=<font color="#8f8f8f">/</font><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>\d\d</i></font></span><font color="#e6db74">_</font><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>\d\d</i></font></span><font color="#e6db74">_</font><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>\d\d\d\d</i></font></span><font color="#e6db74">&#160;</font><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>\d\d</i></font></span><font color="#e6db74">_</font><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>\d\d</i></font></span><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>\.</i></font></span><font color="#e6db74">wav</font><font color="#8f8f8f">/</font>, path=<font color="#8f8f8f">'</font><font color="#e6db74">.</font><font color="#8f8f8f">'</font>)         <br /><span style="background-color: #232526"><font color="#bcbcbc">29 </font></span>&#160; <font color="#66d9ef">Dir</font>[<font color="#66d9ef">File</font>.join(path,<font color="#8f8f8f">'</font><font color="#e6db74">*</font><font color="#8f8f8f">'</font>)].each <font color="#f92672"><b>do</b></font> |<font color="#fd971f">file</font>|         <br /><span style="background-color: #232526"><font color="#bcbcbc">30 </font></span>&#160;&#160;&#160; <font color="#f92672"><b>if</b></font> file =~ pattern         <br /><span style="background-color: #232526"><font color="#bcbcbc">31 </font></span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#fd971f">$count</font> += <font color="#ae81ff">1</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">32 </font></span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#f92672"><b>if</b></font>&#160;<font color="#fd971f">$count</font>==<font color="#ae81ff">1</font>&#160;<font color="#f92672"><b>then</b></font>&#160;<font color="#66d9ef">Dir</font>.mkdir(<font color="#fd971f">$archivedir</font>) <font color="#f92672"><b>unless</b></font>&#160;<font color="#66d9ef">File</font>.exists?(<font color="#fd971f">$archivedir</font>)         <br /><span style="background-color: #232526"><font color="#bcbcbc">33 </font></span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#f92672"><b>end</b></font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">34 </font></span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; file =~ <font color="#8f8f8f">/</font><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>^</i></font></span><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>[^\d]</i></font></span><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>*</i></font></span><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>(</i></font></span><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>\d\d</i></font></span><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>)</i></font></span><font color="#e6db74">_</font><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>(</i></font></span><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>\d\d</i></font></span><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>)</i></font></span><font color="#e6db74">_</font><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>(</i></font></span><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>\d\d\d\d</i></font></span><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>)</i></font></span><font color="#e6db74">&#160;</font><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>(</i></font></span><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>\d\d</i></font></span><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>)</i></font></span><font color="#e6db74">_</font><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>(</i></font></span><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>\d\d</i></font></span><span style="background-color: #1b1d1e"><font color="#66d9ef"><i>)</i></font></span><font color="#8f8f8f">/</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">35 </font></span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#80a0ff">#puts &quot;Matched file: #{file}&quot; </font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">36 </font></span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; dt = <font color="#66d9ef">Date</font>.new(<font color="#fd971f">$3</font>.to_i, <font color="#fd971f">$2</font>.to_i, <font color="#fd971f">$1</font>.to_i);         <br /><span style="background-color: #232526"><font color="#bcbcbc">37 </font></span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; dy = <font color="#66d9ef">Date</font>::<font color="#66d9ef">DAYNAMES</font>[dt.wday]         <br /><span style="background-color: #232526"><font color="#bcbcbc">38 </font></span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; newfilename = <font color="#8f8f8f">&quot;</font><font color="#8f8f8f">#</font><font color="#fd971f">$3</font><font color="#e6db74">-</font><font color="#8f8f8f">#</font><font color="#fd971f">$2</font><font color="#e6db74">-</font><font color="#8f8f8f">#</font><font color="#fd971f">$1</font>_<font color="#8f8f8f">#</font><font color="#fd971f">$4</font><font color="#8f8f8f">#</font><font color="#fd971f">$5</font>_<font color="#8f8f8f">&quot;</font> + dy + <font color="#8f8f8f">&quot;</font><font color="#e6db74">.wav</font><font color="#8f8f8f">&quot;</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">39 </font></span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#66d9ef">FileUtils</font>.cp(file, <font color="#fd971f">$archivedir</font> + <font color="#8f8f8f">&quot;</font><font color="#e6db74">/</font><font color="#8f8f8f">&quot;</font> + file)         <br /><span style="background-color: #232526"><font color="#bcbcbc">40 </font></span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#66d9ef">FileUtils</font>.mv(file, newfilename)         <br /><span style="background-color: #232526"><font color="#bcbcbc">41 </font></span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; puts file + <font color="#8f8f8f">&quot;</font><font color="#e6db74"> renamed </font><font color="#8f8f8f">&quot;</font> + newfilename         <br /><span style="background-color: #232526"><font color="#bcbcbc">42 </font></span>&#160;&#160;&#160; <font color="#f92672"><b>end</b></font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">43 </font></span>&#160; <font color="#f92672"><b>end</b></font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">44 </font></span><font color="#66d9ef">end</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">45 </font></span>        <br /><span style="background-color: #232526"><font color="#bcbcbc">46 </font></span>file_match         <br /><span style="background-color: #232526"><font color="#bcbcbc">47 </font></span>        <br /><span style="background-color: #232526"><font color="#bcbcbc">48 </font></span><font color="#f92672"><b>if</b></font>&#160;<font color="#fd971f">$count</font>&gt;<font color="#ae81ff">0</font>&#160;<font color="#f92672"><b>then</b></font> puts <font color="#fd971f">$count</font>.to_s + <font color="#8f8f8f">&quot;</font><font color="#e6db74"> files were renamed.</font><font color="#8f8f8f">&quot;</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">49 </font></span><font color="#f92672"><b>else</b></font> puts <font color="#8f8f8f">&quot;</font><font color="#e6db74">No files were renamed.</font><font color="#8f8f8f">&quot;</font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">50 </font></span><font color="#f92672"><b>end</b></font>        <br /><span style="background-color: #232526"><font color="#bcbcbc">51 </font></span>        </div>
<p>   </a></div>
<p style="margin-top: 25px">Anyone looking at this who knows how to code in Ruby will, doubtless, immediately see all sorts of issues with it. But I’m quite happy with it because it didn’t take long to write and it does the job. </p>
<p>I’ve saved this file as <strong>RenameWavFiles.rb</strong> in the iTunes directory where all these files get created and I have a shortcut to that directory so that all I need to do is click the shortcut icon to open the directory in Windows Explorer, then double-click the Ruby file to rename any new files. The files are copied to a subdirectory with their original names just in case there’s a problem. Job done! </p>
<p>I wrote the code in Vim 7.2 and one nice thing about the GVim incarnation of Vim is that, in the Syntax menu, there’s a <strong>Convert to HTML</strong> option that creates the output you can see above. </p>
<p style="margin-top: -10px"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="gvim-convert-to-HTML" border="0" alt="gvim-convert-to-HTML" src="/wp-content/uploads/2011/06/gvim-convert-to-HTML_thumb2.png" width="751" height="297" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2011/06/25/my-first-useful-ruby-program/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails Chronicles &#8211; Part 1</title>
		<link>http://www.itauthor.com/2011/06/19/rails-chronicles-part-1/</link>
		<comments>http://www.itauthor.com/2011/06/19/rails-chronicles-part-1/#comments</comments>
		<pubDate>Sun, 19 Jun 2011 13:05:22 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2011/06/19/rails-chronicles-part-1/</guid>
		<description><![CDATA[Before you read any further: The purpose of this post is to capture how I went about learning how to create Web apps using Rails. I thought it might be interesting to look back in a few months and see all the things I got wrong and didn’t understand about Ruby and Rails when I [...]]]></description>
			<content:encoded><![CDATA[<p><img style="background-image: none; border-right-width: 0px; margin: 0px 0px 10px 20px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="150px-Ruby_on_Rails.svg" border="0" alt="150px-Ruby_on_Rails.svg" src="http://www.itauthor.com/wp-content/uploads/2011/06/150px-Ruby_on_Rails.svg_thumb.png" width="150" height="194" /><font color="#3f8287"><em><strong>Before you read any further</strong>:</em> The purpose of this post is to capture how I went about learning how to create Web apps using Rails. I thought it might be interesting to look back in a few months and see all the things I got wrong and didn’t understand about Ruby and Rails when I started out. So, if you’re looking for enlightenment about Rails, you’re in the wrong place. I’d recommend you head over to Michael Harl’s </font><a href="http://ruby.railstutorial.org"><font color="#3f8287">Ruby on Rails Tutorial</font></a><font color="#3f8287">: that’s the site that really got me started.</font></p>
<h2 style="clear: left">Introduction</h2>
<p>I have a stinking cold this weekend and, apart from dragging myself out to walk the dog, I’ve been fit for nothing else but sitting on the sofa (or lying in bed) with my laptop. But I thought I’d try to use the time profitably by <em>finally</em> getting around to learning how to use Rails. I’ve been meaning to do this for over five years now – i.e. since the days when all the tech podcasts I listened to hyped it up as the great new thing on the Web.</p>
<p>Back in 2006 I even bought my daughter a copy of the original edition of Chris Pine’s <em><a href="http://www.amazon.com/Learn-Program-Second-Facets-Ruby/dp/1934356360/ref=dp_ob_title_bk">Learn to Program</a></em> book – which uses Ruby to teach programming – on the off-chance that she might get interested in coding. We sat and went through some of it together but she really wasn’t interested so the book then lay unread for years, until a couple of months back when I packed it into one of several big cardboard boxes with all my other computer books and it went off to the Oxfam bookshop.</p>
<p>The trouble has been (apart from inertia, laziness and wariness about potentially wasting lots of time on yet one more thing I really don’t need to know about) that I’ve been doing most of the dynamic Web page goodness I need to do quite fine all these years using PHP (well, a combination of PHP, MySQL, Javascript, CSS and plain old HTML to be precise). So I haven’t had a <em>need</em> to learn about Rails. But PHP seems antiquated these days and I really feel like I need to move on. I also wanted to get a better understanding what Model-View-Controller (MVC) is all about. I understand the principals of MVC, but it’s not until you actually use a programming concept that you really understand it. </p>
<p>Before PHP I was a committed Perl devotee and it took me a while to switch to PHP because I really liked Perl and I was doing some fairly complex stuff with it. I got into Perl because I’d started writing Web pages in HTML, discovered you couldn’t do much with HMTL alone, started writing Javascript, discovered that that had its limitations (as well as being the source of a great deal of pain back then) and so I ended up, like many people who followed the same route, writing Perl CGI scripts. That was before PHP had really got going and, for hobbyist Web site creators like myself, Perl CGI scripts on Apache servers was about the only way to go. And I really enjoyed writing Perl. The only thing that did for Perl was the whole issue with modules: figuring out which modules you needed, which versions were installed, installing multiple versions of modules so as not to break someone else’s scripts, and so on. Modules were a bit of a nightmare. PHP just seemed to have everything built in and you could just crack on and do the coding.</p>
<p>So I switched from Perl to PHP and never looked back. But I do remember being horrified at first by the mix of HTML and code within PHP files. The recipe seemed to be: chuck all your ingredients (design, content, functionality) into one bowl and give it a good old mix. It struck me as having massive potential for confusion and maintenance issues. With my Perl scripts I’d used separate HTML templates. The Perl script requested by the browser called up other scripts as required, did the processing, worked with the database, gathered together all the dynamic content and then selected from a choice of templates and built the final HTML by replacing placeholders with the dynamic content. I really liked the idea of keeping the page design and static content as separate as possible from the code – it just seemed a lot cleaner that way. So that’s one thing I’m expecting Rails to have got right and I’m looking forward to getting back to that kind of way of doing things. We’ll see.</p>
<h2>Starting point</h2>
<p>I can’t code in Ruby. I’ve read up about it at various points during the past few years and I’ve written a few little Ruby programs in the course of dipping my toes in the subject. Specifically, I’ve spent some time with these resources:</p>
<ul>
<li>Chris Pine’s book, mentioned above (I recently downloaded the 2nd edition to my iPad) </li>
<li><em><a href="http://www.amazon.com/Beginning-Ruby-Novice-Professional-Experts/dp/1590597664/ref=pd_sim_b_93">Beginning Ruby: From Novice to Professional</a></em> by Peter Cooper </li>
<li><a title="http://tryruby.org/" href="http://tryruby.org/">http://tryruby.org/</a> – a great, try-it-online-as-you-go, getting started tutorial </li>
<li><a href="http://why's (poignant) Guide to Ruby">why's (poignant) Guide to Ruby</a> – better experienced than described; the story behind this is as intriguing as the book itself </li>
</ul>
<p>But, as of today, I have to say I really can’t code in Ruby. Should I have concentrated on this for a bit before jumping into Rails? I’ve read conflicting advice answering this question <em>definitely yes</em>, and <em>no, it’s not necessary</em>. It’ll be interesting to see how much this lack of knowledge holds me back or trips me up.</p>
<p>As far as Rails goes, before this weekend I’d watched pretty much every video I could find about Rails at one time or another – including all the ones where someone zips through and creates a (seemingly) fully functioning social media Web site in about ten minutes. For non-macho programmers like myself that kind of thing (where someone is talking super fast and typing commands even faster, and things are zapping past you on the screen: zap, there goes validation, blink and you miss it, there goes authentication …), that just puts me off, because what it says to me is: only ubergeeks will <em>really</em> find this as easy as this guy seems to – the rest of us would doubtlessly only get mired in bizarre error messages before we ever got anywhere near creating a working Web page.</p>
<p>Anyway, I’d heard a podcast a while back where Michael Hartl was being interviewed about the Rails tutorial he’d written and the screencasts he’d created, and how he makes a really good living from people buying the screencasts and the PDF of the tutorial, even though the same content that’s in the PDF is available for free as Web pages. So this weekend I finally went and looked up <a title="http://ruby.railstutorial.org/ruby-on-rails-tutorial-book" href="http://ruby.railstutorial.org/ruby-on-rails-tutorial-book">http://ruby.railstutorial.org/ruby-on-rails-tutorial-book</a> and started reading the first chapter of the tutorial book. And so far so good. I’ve done the first two chapters now and I like it. It’s up to date and it works.</p>
<h2>gvim</h2>
<p>The other thing I spent some time on was downloading, setting up and relearning <a href="http://www.vim.org/download.php">vim</a> (actually gvim). This is a lightly updated version of the UNIX vi editor. There’s a Windows version of gvim that lets you relive the experience of using a text editor originally created by a 22-year-old <a href="http://en.wikipedia.org/wiki/Bill_Joy">Bill Joy</a> back in 1976. It might sound crazy to choose to go back to using vim, but I think it might make sense – there are some definite benefits.</p>
<p>I started using vi in 2001 when I got a job as a technical author and discovered, first day on the job, that I wouldn’t be using Word or even Notepad. I had a choice between vi and Emacs, neither of which I’d heard of before. I tried them both and settled on Emacs at the time, but since leaving that job I’ve never used Emacs again but I’ve used vi regularly over the years just because it’s always available on any UNIX/Linux server you ever connect to. </p>
<p>For a long time my text editor of choice was UltraEdit. I then switched to <a href="http://notepad-plus-plus.org/">Notepad++</a> and I’ve stuck with it for the last eight or nine years now. But I thought I’d tie in learning Rails with brushing up my vi expertise (in the shape of gvim on Windows). I should point out that I’m working on Windows 7. So, after some tweaking of colours and window setup, and spending a little time revising the subject and creating a personal cheatsheet on vim (in vim), I’m using it quite happily now. I’ve never really been a mouse lover. I like keyboard shortcuts, and the great thing about vi is being able to keep your hands on the keyboard all the time: it really does allow you to get things done far quicker than you can by pointing, clicking, dragging.</p>
<h2>git</h2>
<p>git is another of those things I’ve been hearing about a lot over the past five years or so and felt I should find out more about. Back when I was learning vi and Emacs I was also learning about CVS, and I found it a steep learning curve. Fast forward a few years and, at my current job, we switched our version control from CVS to SVN and I came to really like SVN. I particularly like TortoiseSVN and its repo browser. But I’ve been thinking about looking at git for a while now – just to find out why people seem to like it better (it seems to be the most-used version control system for software source files now). </p>
<p>So I was pleased to discover that Michael Hartl’s tutorial gets you committing your Rails code to <a href="https://github.com/">github</a> right from the start. The only trouble I’ve had with the tutorial so far has been that I couldn’t push code up to github successfully to begin with and I struggled for a while (and posted a question on stackoverflow about it) before realising that I’d screwed up with one of my initial commands, meaning I had to delete the .git directory and start over. The problem was that I’d tried to push up my code before going to the github Web site and creating an account and a repository. Yes, I know: duh! But the problem seemed to be that having made this error, even though I then went and created the account and repository, something in my .git directory must have been messed up. So that held me up for a few hours, but – after backing up and redoing it – it now works fine.</p>
<p>The git commands are (like much in the world of Ruby on Rails, I suspect) the kind of thing that you just have to learn. It’s not obvious and you can’t just guess and figure it out. You need to know that exact words and syntax or it won’t work.</p>
<p>One of the things I like about having installed git from github is that I now have a bash shell on my Windows 7 machine. I can press the Windows key, type <strong>bash</strong>, press Enter and I get a console window with the bash shell, which allows you to do a lot more, a lot more easily than the standard Windows DOS-type command console.</p>
<h2>Heroku</h2>
<p>Finally, for this inaugural Rails Chronicle post, something else I’d heard about in a podcast but never used: <a href="http://www.heroku.com/">Heroku</a>. I spent a few days up in Glen Esk earlier this year and I remember one day walking the dog across the field to the river and than back up along the side of the Tarf listening to a podcast about Heroku, which is a hosting service for Web applications. Actually it’s more than that. It’s a system for continuous deployment of Web applications that’s intigrated with git to make it easy to push files up to Heroku’s cloud service and build a deployment that you can immediately browse to.</p>
<p>It seems to work incredibly easily and smoothly – but, again, working from the command line, you need to know the right commands; although these seem to amount to:</p>
<pre>$ heroku create
$ git push heroku master
$ heroku rake db:migrate</pre>
<h2 style="margin-top:18px">Conclusion</h2>
<p>So far so good. I’ve only done the first two chapters but they cover a whole lot of ground and I feel like I’ve learned a lot already. What I haven’t learned however, is <em>any</em> Ruby – so far.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2011/06/19/rails-chronicles-part-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Prevent Skype hogging port 80</title>
		<link>http://www.itauthor.com/2011/06/03/prevent-skype-hogging-port-80/</link>
		<comments>http://www.itauthor.com/2011/06/03/prevent-skype-hogging-port-80/#comments</comments>
		<pubDate>Fri, 03 Jun 2011 09:04:51 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2011/06/03/prevent-skype-hogging-port-80/</guid>
		<description><![CDATA[This is a little reminder for me for next time this happens. I create a lot of PHP/MySQL stuff, mainly for database-driven Web pages. XAMPP is brilliant for this because it allows me to write/test stuff locally on my laptop. It’s dead easy to install and has a nice little control panel for turning MySQL, [...]]]></description>
			<content:encoded><![CDATA[<p>This is a little reminder for me for next time this happens. I create a lot of PHP/MySQL stuff, mainly for database-driven Web pages. <a href="http://www.apachefriends.org/en/xampp.html">XAMPP</a> is brilliant for this because it allows me to write/test stuff locally on my laptop. It’s dead easy to install and has a nice little control panel for turning MySQL, Apache Web server and Filezilla on and off. If you develop Web pages then you probably already use XAMPP. I swear by – have done for years.</p>
<p>However, periodically, after I haven’t used my local Web server for a while, I go to the XAMPP control panel, click to start Apache, but nothing happens. It doesn’t tell you there’s been a problem, but the “STARTED” indicator doesn’t appear.</p>
<p>The problem is that something else is hogging port 80. It might be IIS if you’re running that already, but more likely (in my case anyway) it’s Skype.</p>
<p>To solve this problem:</p>
<ol>
<li>In Skype, go to <strong>Tools </strong>&gt; <strong>Options </strong>&gt; <strong>Advanced </strong>&gt; <strong>Connection</strong>.</li>
<li>Clear the check box labelled “Use port 80 and 443 as alternatives for incoming connections”.</li>
<li>Click <strong>Save</strong>.</li>
<li>Quit and restart Skype.</li>
</ol>
<p><a href="http://www.itauthor.com/wp-content/uploads/2011/06/skype-port-80.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="skype-port-80" border="0" alt="skype-port-80" src="http://www.itauthor.com/wp-content/uploads/2011/06/skype-port-80_thumb.png" width="716" height="612" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2011/06/03/prevent-skype-hogging-port-80/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>It&#8217;s got to be fun</title>
		<link>http://www.itauthor.com/2011/05/15/its-got-to-be-fun/</link>
		<comments>http://www.itauthor.com/2011/05/15/its-got-to-be-fun/#comments</comments>
		<pubDate>Sun, 15 May 2011 08:03:20 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2011/05/15/its-got-to-be-fun/</guid>
		<description><![CDATA[I haven’t posted to this blog since December 2nd last year. I’ve toyed with the idea of blogging several times since then but never actually got around to it. Why not? Well, I wasn’t exactly sure. I could just never quite bring myself to do it. But just recently I decided I’d better make my [...]]]></description>
			<content:encoded><![CDATA[<p>I haven’t posted to this blog since December 2nd last year. I’ve toyed with the idea of blogging several times since then but never actually got around to it. Why not? Well, I wasn’t exactly sure. I could just never quite bring myself to do it. But just recently I decided I’d better make my mind up what I was doing with ITauthor.com and, when I thought about it, I realised that the reason I’ve left it unattended for so long was that it just wasn’t fun any more.</p>
<p>Until a few years ago this blog was mainly a way for me to note down things that I thought might be useful:</p>
<p>a) To me, a few weeks or months later when I’d forgotten exactly how to do that thing I’d spent hours figuring out how to do   <br />b) To someone else going through the same pain. I could save <em>them</em> a few hours of figuring out time</p>
<p>Most of the stuff I wrote about wasn’t about technical writing as such, it was mainly about the other things I was working on, or playing around with, usually in my free time. So, there’s stuff in here about Plone and Zope, there’s stuff about Perl, there’s stuff about C# and JavaScript. For example, back in August 2007, while learning C#, I worked out how to create a log file - so I noted it down:</p>
<p><a title="http://www.itauthor.com/2007/08/21/writing-to-a-log-file-in-c/" href="http://www.itauthor.com/2007/08/21/writing-to-a-log-file-in-c/">http://www.itauthor.com/2007/08/21/writing-to-a-log-file-in-c/</a></p>
<p>So what changed? Well, the problem stems from vain ambition. For some bizarre reason I started to get interested in page views. I also think I had some notion of building up a reputation for myself as a documentation expert within the tech writing community. What was I thinking?</p>
<p>The result of this was that I started to restrict myself to writing about technical writing, and when I was thinking about what to blog about I began to think along the lines of: “What can I write about that technical writers might be interested in, so that I can improve ITauthor.com’s Google page ranking?” But it worked. Steadily more people <em>were</em> visiting the site. ITauthor posts were being linked to from other tech writing blogs, tweeted about by tech writers, mentioned in Parliament (OK, I made that last one up). </p>
<p>To make matters worse, the site was included in a couple of lists of influential technical writing blogs. The trouble with that was: it stirred up my competitive nature. I looked at some of the blogs above me in those lists and thought, “What’ve they got that I haven’t? How am I going to be further up that list next year?” Then I started getting people contacting me asking me to write about their products or services. Admittedly this was flattering, but now I was in the situation where there was an expectation on me to write certain things. No longer was the blog just a blog where I could dash off a quick note about something for my own future use. Now I had a reasonable expectation that people were actually reading what I wrote and some people were even waiting for me to write things. All of a sudden this seemed very familiar … hang on a minute … this felt just like … like … work!</p>
<p>ITauthor had turned into an unpaid job. And I’ve got several of those already: husband, father, gardener (well, very, very part-time gardener – you should see the state of our garden). I really didn’t need to give myself yet more unpaid work. My real, <em>paying</em>, job requires more than enough of my time, thought and energy.</p>
<p>So ITauthor entered a period of hibernation.</p>
<p>Is this me coming out of that blogging hibernation now? I don’t know. We’ll have to wait and see. What I do know is that I’ve realised that ITauthor.com is just my little personal blog. That’s all it ever has been. That’s all I now want it to be. I would quite like to start blogging again. But it’s got to be something I can do quickly and simply, without lots of prep. It’s got to be on<em> my</em> terms. It’s got to be about whatever I want it to be about: related to tech writing, or completely unrelated. And above everything else I’m not doing this for a living so it’s got to be fun again.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2011/05/15/its-got-to-be-fun/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Adding your choice of text editor to Flare&#8217;s Open With menu</title>
		<link>http://www.itauthor.com/2010/12/02/adding-your-choice-of-text-editor-to-flares-open-with-menu/</link>
		<comments>http://www.itauthor.com/2010/12/02/adding-your-choice-of-text-editor-to-flares-open-with-menu/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 01:19:37 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Flare]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/12/02/adding-your-choice-of-text-editor-to-flares-open-with-menu/</guid>
		<description><![CDATA[Madcap Flare has a pretty good built-in text editor for editing topic files in text-only format. I use this all the time. But sometimes it’s handy to be able to open a topic file in an external editor of your choice so that you can use the various features of that tool. My text editor [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.madcapsoftware.com/products/flare/overview.aspx">Madcap Flare</a> has a pretty good built-in text editor for editing topic files in text-only format. I use this all the time. But sometimes it’s handy to be able to open a topic file in an external editor of your choice so that you can use the various features of that tool. My text editor of choice is <a href="http://notepad-plus-plus.org/">Notepad++</a>.</p>
<p style="margin-top: -1em; margin-bottom: -6em; margin-left: -6em"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://www.itauthor.com/wp-content/uploads/2010/12/image.png" width="125" height="151" /></p>
<p style="margin-top: -6em; margin-right: -6em"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="http://www.itauthor.com/wp-content/uploads/2010/12/image1.png" width="129" height="94" /></p>
<p>Until now, when I right-clicked a topic file in Flare’s Content Explorer and chose <strong>Open With</strong>, all I got, apart from the internal text editor and the internal browser, was a choice of either Firefox or Notepad (the simple Microsoft text editor):     <br /><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="OpenWith-before" border="0" alt="OpenWith-before" src="http://www.itauthor.com/wp-content/uploads/2010/12/OpenWith-before.png" width="258" height="108" />     <br />I wanted to see Notepad++ in there. You might want to see Dreamweaver or something else. So here’s how to add programs to that menu.</p>
<p><strong>Note</strong>: <em>This procedure involves editing the Windows Registry. You need to treat the Registry with caution. Don’t go any further if you’re at all concerned about tweaking your Registry settings. You will also need to have an Administrator account. The following procedure worked for me today, using Windows 7. However, I provide no guarantees it will work for you.</em></p>
<ol>
<li>First, check whether Windows knows where to find the executable file.      </p>
<p>To do this, enter <font size="3" face="Courier New">run</font> in the search box in the Start menu and press Enter.       </p>
<p>In the Run dialog box, enter the name of the executable file (e.g. <strong>notepad++.exe</strong>) and click <strong>OK</strong>.       </p>
<p>If the application starts it means Windows knows where this application lives. This reduces the number of steps in this procedure. If Windows does not find the application, but you know it’s installed, the process is a bit more complex and you should read ahead through the rest of the instructions before deciding whether you really want to proceed. </li>
<li>Start the Registry Editor.
<p>To do this, enter <font size="3" face="Courier New">regedit</font> in the search box in the Start menu and press Enter.       </p>
<p>If you have Windows UAC enabled (which you should have if you know what’s good for you), you’ll be asked to confirm that you want to allow the Registry Editor to make changes to your computer. Click <strong>Yes</strong>. </li>
<li>Expand the following sections of the Registry:
<p><strong>HKEY_CLASSES_ROOT</strong> &gt; <strong>.htm</strong><strong> </strong></li>
<li>Right-click the <strong>.htm </strong>folder and choose <strong>Export</strong>.
<p>Exporting a Registry key creates a file that you can double-click later, if things go wrong, to reinstate that part of the Registry. </li>
<li>Give the <strong>.reg</strong> file a suitable name (preferably something that tells you which part of the Registry it’s for and the date it was created) and save it somewhere appropriate. </li>
<li>Expand <strong>.htm </strong>&gt; <strong>OpenWithList</strong>. </li>
<li>Right-click the <strong>OpenWithList</strong><strong> </strong>folder and choose <strong>New</strong> &gt; <strong>Key</strong>.&#160;&#160;
<p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="qwoop-key" border="0" alt="qwoop-key" src="http://www.itauthor.com/wp-content/uploads/2010/12/qwoop-key.png" width="500" height="130" /> </li>
<li>Change the default name (<strong>New Key #1</strong>) to the next name of the executable file. In my case, for Notepad++ this was:
<p><strong>notepad++.exe</strong> </li>
<li>Now do exactly the same thing for <strong>HKEY_CLASSES_ROOT</strong> &gt; <strong>.html</strong><strong>&#160;</strong>
<p>Remember to export the key before you make any changes.       </p>
<p>If there is no <strong>OpenWithList </strong>key within <strong>.html </strong>just go ahead and add one. </li>
<li>If Windows found the application in step 1, you can close the Registry Editor, start Flare and check that there’s a new <strong>Open with</strong> option.
<p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="OpenWith" border="0" alt="OpenWith" src="http://www.itauthor.com/wp-content/uploads/2010/12/OpenWith.png" width="510" height="452" />       </p>
<p><strong>Note</strong>: Changes to the Registry are applied immediately. There’s no <strong>File</strong> &gt; <strong>Save</strong> menu item and you don’t need to apply your changes. However, you do need to close and restart Flare, if it was already running, before the application is displayed in the <strong>Open with</strong> submenu.       </p>
<p>If everything went okay, go back and archive or delete the <strong>.reg</strong> file you exported from the Windows Registry. It’s generally best not to leave <strong>.reg</strong> files lying around in case you accidentally run them at a later date and overwrite any Registry changes that were made since you created the export file. </li>
<li>If Windows <em>doesn’t</em> know where to find your application, you need to tell it. You do this with some more Registry tweaking.
<p><strong>Warning</strong>: <em>The following worked for me but I need to stress here: all messing around in the Windows Registry has a risk. I accept no responsibility for anything that might occur after you edit your Registry. Do not do this unless: you are confident you know what you’re doing in the Registry, you’ve exported any Registry keys before you make any changes, and you’re not going to hold me in any way responsible for any badness that happens after you’ve done this. You have been warned!        </p>
<p></em>So, having said that, imagine you have a program called <strong>qwoop</strong> that you want to use to edit Flare topic files. The path to the executable is <strong>D:\Alistairs Imaginary Software\Qwoop\qwoop.exe</strong> but entering just <strong>qwoop</strong> in the Run dialog box doesn’t start the application.&#160; </li>
<li>Go to <strong>HKEY_CLASSES_ROOT</strong> &gt; <strong>Applications</strong> </li>
<li>Within <strong>Applications</strong>, create the following hierarchy of keys (replacing <strong>qwoop</strong> with your own application’s name):
<p><strong>qwoop.exe</strong> &gt; <strong>shell</strong> &gt; <strong>open </strong>&gt; <strong>command</strong>&#160; </p>
<p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="qwoop-registry-keys" border="0" alt="qwoop-registry-keys" src="http://www.itauthor.com/wp-content/uploads/2010/12/qwoop-registry-keys.png" width="163" height="71" />       </p>
<p>Of these, only <strong>command</strong> has any data. </li>
<li>Double-click the Default string entry in the <strong>command</strong> key and enter the path to the <strong>.exe</strong> file (in quotation marks if the path has spaces in it), followed by “%1” – this passes the name of the file you want to edit to the application for it to open.
<p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="qwoop-edit-string" border="0" alt="qwoop-edit-string" src="http://www.itauthor.com/wp-content/uploads/2010/12/qwoop-edit-string.png" width="394" height="175" />       </li>
<li>Click <strong>OK</strong>.
<p>You should have something like this in the Registry Editor:       </p>
<p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="qwoop-reg-editor" border="0" alt="qwoop-reg-editor" src="http://www.itauthor.com/wp-content/uploads/2010/12/qwoop-reg-editor.png" width="706" height="237" />       </p>
<p>Assuming you entered <strong>qwoop.exe</strong> as the name of the key within <strong>.htm</strong> &gt; <strong>OpenWithList </strong>and <strong>.html</strong> &gt; <strong>OpenWithList</strong>, in the first part of this procedure, Windows now knows what to do with this, because the new keys under <strong>Applications</strong> tell it where to find <strong>qwoop.exe</strong>. </li>
<li>Close the Registry Editor, start Flare and check that there’s a new <strong>Open with</strong> option.
<p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="qwoop-in-Flare" border="0" alt="qwoop-in-Flare" src="http://www.itauthor.com/wp-content/uploads/2010/12/qwoop-in-Flare.png" width="515" height="456" />       </li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/12/02/adding-your-choice-of-text-editor-to-flares-open-with-menu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The guilt and paranoia of the remote worker</title>
		<link>http://www.itauthor.com/2010/11/27/the-guilt-and-paranoia-of-the-remote-worker/</link>
		<comments>http://www.itauthor.com/2010/11/27/the-guilt-and-paranoia-of-the-remote-worker/#comments</comments>
		<pubDate>Sat, 27 Nov 2010 15:12:20 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/11/27/the-guilt-and-paranoia-of-the-remote-worker/</guid>
		<description><![CDATA[It’s thick snow in my part of Edinburgh this morning. I just took the dog for a walk over the golf course – an exciting treat for her as she only ever gets to do that when it’s snowy – and I listened to the latest Hanselminutes show, all about remote working at Microsoft: Show [...]]]></description>
			<content:encoded><![CDATA[<p style="margin: -1.3em -1.5em -1em 0.7em; float: right"><a href="http://www.hanselminutes.com/default.aspx?showID=261"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px; border-bottom-ptwidth: 0px" title="image" border="0" alt="image" src="http://www.itauthor.com/wp-content/uploads/2010/11/image.png" width="440" height="114" /></a></p>
<p>It’s thick snow in my part of Edinburgh this morning. <nobr>I just</nobr> took the dog for a walk over the golf course – an exciting treat for her as she only ever gets to do that when it’s snowy – and I listened to the latest Hanselminutes show, all about remote working at Microsoft:</p>
<p><a href="http://www.hanselminutes.com/default.aspx?showID=261"><strong><em>Show #242</em> - The Plight of the Remote Worker with Pete Brown</strong></a></p>
<p>I'm a partial remote worker. What I mean by this is I work four days a week: two days from home, and the other two days I drive 50 miles to work in the office, then join the queues and crawl the 50 miles back again (a round trip of typically two and a half to three hours). Some of the points Scott Hanselman makes in this podcast struck a chord with me.</p>
<p>He mentions how remote workers are often paranoid about being perceived as not doing enough work, and how they over-compensate by working extra hard – or at least by working extra long hours. This is certainly true in my case. The days I work from home I always work in the evenings – partly because there are always things I’d planned to get done that day but I didn’t get finished by six o’ clock so I spend another couple of hours or so in the evening trying to finish things off. But I also feel obliged to work evenings because I remember that, when I went to make myself a coffee, I tidied up the kitchen while the kettle boiled and I feel guilty because I know I ended up spending 10 minutes doing that and I could have gone back to my computer and worked while the kettle boiled. The fact that, while at work, everybody spends time each day getting a coffee, chatting about non-work things, sitting in meeting rooms waiting for the meeting to get started, and a hundred other things that stop you getting stuff done in the office … that all seems not to count somehow. As a remote worker – to guard against the perception that you’re slacking off, watching daytime TV – you attempt to ensure you have spent a <em>minimum</em> of 8 hours doing productive work. Even if that means some of those hours are in the evening. Even if that means choosing work over time with your kids. Even if that means leaving your partner to prepare the evening meal, and then leaving her to watch TV alone for the rest of the evening.</p>
<p>The “remote guilt” that Scott talks about is a truly bad feature of working from home. Not only do many remote workers worry that they need to be seen as providing <em>extra</em> value to the company to justify working from home, they are often, nevertheless, seen by management as less committed members of staff than the high visibility folks who make sure they’re notice around the office every day (irrespective of the actual value the company is actually getting from them). </p>
<p>As a low visibility remote worker it’s hard not to feel that, if it came to a management meeting to discuss who to make redundant, you’d be a prime candidate: “Well, he’s good – but he’s never in the office.”</p>
<p>However, there are many great things about working from home, rather than commuting long distance to work. For example: not sitting in a car for three hours every day; not spending £60 on petrol; reducing your carbon footprint; getting more work done. And there are usually good reasons for not relocating nearer the office: not forcing your family to move away from friends and family; not forcing your partner to find a new job; continuing to live somewhere you like living. </p>
<p>So, if I sound like I’m bitching, I’m not. I choose to be a (partial) remote worker, and I like it. It just worries me, that’s all.&#160; </p>
<h3>Technology to make you more visible as a remote worker</h3>
<p>Although Scott starts off the podcast by saying that Microsoft are not generally keen on remote working, it seems like they do, at least, have the technology to make the remote worker’s life easier. Scott talks about <a href="http://lync.microsoft.com/en-us/Pages/default.aspx">Microsoft Lync</a> and <a href="http://www.hanselman.com/blog/WorkingRemotelyFromHomeTelepresenceAndVideoConferencingOneYearLater.aspx">Microsoft RoundTable</a>. At Microsoft the issue seems to be getting people to <em>use</em> these technologies. For most of us though the issue would be getting our companies to invest in technology like this. The fear and paranoia of the remote worker tends to mean that, having been <em>allowed</em> to work from home, you accept that this is probably at the expense of any other discretionary goodness from your company (like pay rises) – so asking for anything that makes remote working less alienating, if it costs money, is probably not a good idea and you’d better just shut up, count yourself lucky and keep working those long hours.&#160; </p>
<p>However, Microsoft RoundTable does sound great. Here’s a promo video for it. It’s an incredibly silly video, but it does give you the gist of what RoundTable is:</p>
<p><iframe class="youtube-player" title="YouTube video player" height="390" src="http://www.youtube.com/embed/KkVfhxD5m_U" frameborder="0" width="640" type="text/html"></iframe></p>
<p>Finally, in January of this year, Scott put a video on Channel 9 showing the work Microsoft Research had been doing into &quot;Embodied Social Proxies&quot;. This is something beyond video conference: having a physical presence in a meeting that you’re attending remotely. </p>
<p>It looks fabulous, but I think it’s going to be a long time before many companies invest in something like this:    <br /><a href="http://channel9.msdn.com/blogs/glucose/hanselminutes-on-9-embodied-social-proxies-and-remote-video-heads-with-microsoft-research"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.itauthor.com/wp-content/uploads/2010/11/image1.png" width="300" height="169" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/11/27/the-guilt-and-paranoia-of-the-remote-worker/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Viewing dynamically generated HTML in the HTML Help viewer</title>
		<link>http://www.itauthor.com/2010/11/22/viewing-dynamically-generated-html-in-the-html-help-viewer/</link>
		<comments>http://www.itauthor.com/2010/11/22/viewing-dynamically-generated-html-in-the-html-help-viewer/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 20:49:00 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Online help]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/?p=1774</guid>
		<description><![CDATA[This is something I’ve blogged about twice before (in March 2004 and in January 2009), but going back to those topics just now neither of the solutions I gave at that time are working for me. So here’s the way to do it now. The problem The problem we’re trying to solve is how to [...]]]></description>
			<content:encoded><![CDATA[<p>This is something I’ve blogged about twice before (<a href="http://www.itauthor.com/2004/03/02/viewing-dynamic-html-in-a-chm-topic/">in March 2004</a> and <a href="http://www.itauthor.com/2009/01/02/viewing-dynamically-generated-html-in-a-help-topic/">in January 2009</a>), but going back to those topics just now neither of the solutions I gave at that time are working for me. So here’s the way to do it now.</p>
<h3>The problem</h3>
<p>The problem we’re trying to solve is how to debug a topic in a CHM file where you’ve got JavaScript that dynamically changes the HTML at runtime (i.e. when the topic is displayed in the Microsoft HTML Help viewer). If you’re debugging issues in WebHelp output you have the fabulous <a href="http://getfirebug.com/downloads">Firebug</a> plugin that allows you (amongst other things) to click on objects in the output page and see what their HTML looks like right now. But unfortunately you can’t add Firebug to the help viewer. Or can you?</p>
<h3>Online solution</h3>
<p>This is the best solution, but it relies on you having:</p>
<ul>
<li>Internet access </li>
<li>JavaScript enabled (a safe assumption as it’s probably JavaScript you’re debugging here) </li>
<li>No firewall settings that might block code being downloaded from <strong>getfirebug.com</strong> (unlikely) </li>
</ul>
<p>If any of the above aren’t true then you’ll need to use the offline solution (<a href="#offline">below</a>).</p>
<p>The online solution uses the <a href="http://getfirebug.com/firebuglite#Stable">Firebug Lite bookmarklet</a> to add much of the functionality of the Firebug plugin for Firefox to the browser pane within the HTML Help Viewer. </p>
<ol>
<li>
<p>Do one of the following (these are just alternative ways of copying the same JavaScript to the clipboard):&#160; </p>
<p><strong><em>Either:</em></strong> Right-click this link – <a href="javascript:(function(F,i,r,e,b,u,g,L,I,T,E){if(F.getElementById(b))return;E=F[i+'NS']&amp;&amp;F.documentElement.namespaceURI;E=E?F[i+'NS'](E,'script'):F[i]('script');E[r]('id',b);E[r]('src',I+g+T);E[r](b,u);(F[e]('head')[0]||F[e]('body')[0]).appendChild(E);E=new%20Image;E[r]('src',I+L);})(document,'createElement','setAttribute','getElementsByTagName','FirebugLite','4','firebug-lite.js','releases/lite/latest/skin/xp/sprite.png','https://getfirebug.com/','#startOpened');">Firebug Lite</a> – and copy the link location (“Copy Shortcut” in IE).</p>
<p><strong><em>Or:</em></strong> Copy the following code:</p>
<p><code>javascript:(function(F,i,r,e,b,u,g,L,I,T,E){if(F.getElementById(b))return;E=F[i+'NS']&amp;&amp;F.documentElement.namespaceURI;E=E?F[i+'NS'](E,'script'):F[i]('script');E[r]('id',b);E[r]('src',I+g+T);E[r](b,u);(F[e]('head')[0]||F[e]('body')[0]).appendChild(E);E=new%20Image;E[r]('src',I+L);})(document,'createElement','setAttribute','getElementsByTagName','FirebugLite','4','firebug-lite.js','releases/lite/latest/skin/xp/sprite.png','https://getfirebug.com/','#startOpened');</code></p>
</li>
<li>Right-click the title bar of the HTML Help Viewer. </li>
<li>
<p>Choose <strong>Jump to URL</strong>.</p>
<p style="margin-top: -20pt; margin-bottom: -8pt"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="jump-to-url" border="0" alt="jump-to-url" src="http://www.itauthor.com/wp-content/uploads/2010/11/jump-to-url.jpg" width="247" height="82" /></p>
</li>
<li>
<p>In the Jump to URL dialog box, paste the text you copied in step 1.</p>
<p style="margin-top: -20pt; margin-bottom: -8pt"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="JumpToURL" border="0" alt="JumpToURL" src="http://www.itauthor.com/wp-content/uploads/2010/11/JumpToURL.png" width="322" height="235" /></p>
</li>
<li>
<p>Click <strong>OK</strong>.</p>
<p>After a moment (while it downloads files) the Firebug panes are displayed across the bottom of the browser pane in the HTML Help viewer.</p>
</li>
<li>
<p>Click <strong>Inspect</strong>, then click an object in the topic pane.</p>
<p>The HTML for this object (including any dynamic modifications) is displayed in the HTML tab of the main Firebug pane:</p>
<p style="margin-top: -20pt; margin-bottom: -8pt"><a href="http://www.itauthor.com/wp-content/uploads/2010/11/Firebug-in-HelpViewer.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Firebug-in-HelpViewer" border="0" alt="Firebug-in-HelpViewer" src="http://www.itauthor.com/wp-content/uploads/2010/11/Firebug-in-HelpViewer_thumb.png" width="709" height="493" /></a></p>
</li>
</ol>
<p><strong><em></em></strong></p>
<p><strong><em>Note:</em></strong> External JavaScript and CSS files aren’t recognised because they reside at another domain. So, when you click the CSS tab all you’ll see it “There are no rules in this stylesheet” and in the Script tab you’ll get “Access to restricted URI denied”. However, the functionality of the HTML tab is enough to make this technique extremely valuable for debugging.</p>
<h3><a anchor="offline"></a>Offline solution</h3>
<p>The alternative is just to display the current, dynamically modified HTML in the browser pane. You can then select and copy/paste it into an editor for debugging.</p>
<p>To do this, copy and paste the following JavaScript into the Jump to URL dialog box:</p>
<p><code>javascript:'&lt;xmp&gt;'+window.document.documentElement.outerHTML+'&lt;/xmp&gt;';</code></p>
<p><strong><em>Note:</em></strong> The xmp element is deprecated and you shouldn't generally use it. However, in this case we know that we're using it in IE (the browser part of the HTML Help viewer) and IE, as of writing, still supports this element. If this stops being the case in future, the following is a less elegant (but standards-compliant) way of doing the same thing: </p>
<p><code>javascript:'&lt;pre&gt;'+window.document.documentElement.outerHTML.replace(/&lt;/g,'&amp;lt;')+'&lt;/pre&gt;';</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/11/22/viewing-dynamically-generated-html-in-the-html-help-viewer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fix &#8220;No topics found&#8221; issue in CHM output</title>
		<link>http://www.itauthor.com/2010/11/21/fix-no-topics-found-issue-in-chm-output/</link>
		<comments>http://www.itauthor.com/2010/11/21/fix-no-topics-found-issue-in-chm-output/#comments</comments>
		<pubDate>Sun, 21 Nov 2010 19:34:00 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Flare]]></category>
		<category><![CDATA[Online help]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/11/21/fix-no-topics-found-issue-in-chm-output/</guid>
		<description><![CDATA[A recurring problem with generating Microsoft HTML Help output is that, if you don’t have the correct DLLs registered, then you can encounter issues. A common issue is not getting any search results. You open the CHM file, click the Search tab, enter a word that you know is in the help file, but all [...]]]></description>
			<content:encoded><![CDATA[<p>A recurring problem with generating Microsoft HTML Help output is that, if you don’t have the correct DLLs registered, then you can encounter issues. A common issue is not getting any search results. You open the CHM file, click the Search tab, enter a word that you <em>know</em> is in the help file, but all you get back is:</p>
<p style="margin-top: -20pt; margin-bottom: -4pt"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="&quot;No topics found&quot;" border="0" alt="&quot;No topics found&quot;" src="http://www.itauthor.com/wp-content/uploads/2010/11/no-topics-found.png" width="186" height="183" /></p>
<p>Almost certainly the issue here is that <strong>itcc.dll</strong> is not registered. This must be registered on the PC on which the CHM file is compiled. After the CHM has been built, registering <strong>itcc.dll</strong> has no effect on the existing CHM – the Search tab still won’t work. You need to register <strong>itcc.dll</strong> and then rebuild the HTML Help output.</p>
<p>I’ve just run across this problem with Madcap Flare 6.1, but this is not a Flare problem. <strong>itcc.dll</strong> is Microsoft’s HTML Help Workshop, an old, old Microsoft DLL that Flare uses when compiling the CHM file. If this DLL wasn’t registered successfully by the Flare installer, or if it gets unregistered (which seems to happen now and again for no apparent reason), then you need to register it manually.</p>
<p>To register <strong>itcc.dll</strong> in Windows Vista or Windows 7:</p>
<ol>
<li>In the search box at the bottom of the Windows start menu, type <strong>cmd</strong>. </li>
<li>In the result list, right-click <strong>cmd.exe</strong> and choose <strong>Run as administrator</strong>.
<p><strong>Note</strong>: This is important. If you have Windows UAC enabled (you should!), then you won’t be able to register the DLL unless you do so as an administrator (even if you’re logged on as a user with administrator privileges). </li>
<li>In the command console window, type: <strong>regsvr32 itcc.dll</strong> and press Enter.
<p>A message is displayed confirming that the DLL was registered successfully.       </p>
<p><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="DllRegisterService" border="0" alt="DllRegisterService" src="http://www.itauthor.com/wp-content/uploads/2010/11/DllRegisterService.png" width="397" height="161" /> </li>
<li>Restart Flare and rebuild the CHM output. </li>
</ol>
<p><font color="#666666">     <br />Related post: </font><a href="http://www.itauthor.com/2008/07/25/fixing-search-in-flare-html-help/"><font color="#666666">Fixing Search in Flare HTML Help</font></a><font color="#666666">.</font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/11/21/fix-no-topics-found-issue-in-chm-output/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Watch out for PHP shorthand</title>
		<link>http://www.itauthor.com/2010/11/20/watch-out-for-php-shorthand/</link>
		<comments>http://www.itauthor.com/2010/11/20/watch-out-for-php-shorthand/#comments</comments>
		<pubDate>Sat, 20 Nov 2010 23:52:00 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/11/20/watch-out-for-php-shorthand/</guid>
		<description><![CDATA[Coders of a certain persuasion love shorthand: where two or three characters can work the same magic as six or seven characters. This frame of mind has a venerable history in UNIX programming (and before) where commands, tools and programs got names like rm, ls, man, cat, vi and so on. Giving commands cryptic names [...]]]></description>
			<content:encoded><![CDATA[<p>Coders of a certain persuasion love shorthand: where two or three characters can work the same magic as six or seven characters. This frame of mind has a venerable history in UNIX programming (and before) where commands, tools and programs got names like <strong>rm</strong>, <strong>ls</strong>, <strong>man</strong>, <strong>cat</strong>, <strong>vi</strong> and so on.</p>
<p>Giving commands cryptic names just to save a few key presses might seem weird but if everything has to be typed at a command line, then the shorter the command the better – once you’ve memorised them. And the cryptic names have the added benefit of bolstering the guru culture that ruled in programming until IDEs like Visual Studio spoiled the party by allowing any snot-nosed kid to create great software just by selecting from IntelliSense popups. <em><font color="#666666">[I’m joking – just in case that isn’t clear.&#160; :-) ]</font></em></p>
<p>PHP also has its shorthand, and today – thanks to this fact – I wasted a good 10 minutes scratching my head over a broken PHP script I wrote back in 2006. </p>
<p>The script was outputting this in a form field on the Web page:</p>
<p style="margin-top: -6pt; font-family: &#39;Courier New&#39;,courier,monospace">&lt;?=trim($fields['issuetext'])?&gt;</p>
<p>I couldn’t figure out why. I knew it had been working before. And, yes, I was running the PHP from a different Web server – but my <strong>phpinfo.php</strong> page showed me that PHP was working okay. I realised that<span style="font-family: &#39;Courier New&#39;,courier,monospace"> &lt;?=trim </span>was non-standard, but changing it to<span style="font-family: &#39;Courier New&#39;,courier,monospace"> &lt;?php =trim </span>broke the page entirely, and I knew it had been working okay before.</p>
<p>The answer, <a href="http://mattsblog.ca/2007/07/26/tip-of-the-day-php-shorthand/">this page</a> eventually reminded me,&#160; is that<span style="font-family: &#39;Courier New&#39;,courier,monospace"> &lt;?=<em>WHATEVER</em>?&gt; </span>is the PHP shorthand for<span style="font-family: &#39;Courier New&#39;,courier,monospace"> &lt;?php echo(<em>WHATEVER</em>) ?&gt; </span>and to make it work you need to set <var>short_open_tag</var> to “On” in the server’s <strong>php.ini</strong> file.</p>
<p>Scrolling down my <strong>phpinfo.php</strong> page confirmed that I didn’t have this enabled:</p>
<p style="margin-top: -20pt"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="short_open_tag" border="0" alt="short_open_tag" src="http://www.itauthor.com/wp-content/uploads/2010/11/short_open_tag.png" width="600" height="98" /></p>
<p><strong><em>Memo to self:</em></strong>     <br />Think twice before doing stuff that’ll save me seconds today if it might cost me (or someone else) minutes of aggravation in 6 or 12 months time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/11/20/watch-out-for-php-shorthand/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Online JavaScript scratchpads</title>
		<link>http://www.itauthor.com/2010/11/20/online-javascript-scratchpads/</link>
		<comments>http://www.itauthor.com/2010/11/20/online-javascript-scratchpads/#comments</comments>
		<pubDate>Sat, 20 Nov 2010 09:26:42 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/11/20/online-javascript-scratchpads/</guid>
		<description><![CDATA[Writing JavaScript used to be a tricky and tedious business. Now, with Dojo, script.aculo.us and particularly jQuery it’s easy - and even fun - to write JavaScript. And if, like me, you’re an occasional JavaScript coder, and your skills are rusty every time you return to do something in JavaScript, another innovation you’ll find really [...]]]></description>
			<content:encoded><![CDATA[<p>Writing JavaScript used to be a tricky and tedious business. Now, with <a href="http://dojotoolkit.org/">Dojo</a>, <a href="http://script.aculo.us/">script.aculo.us</a> and particularly <a href="http://jquery.org/">jQuery</a> it’s easy - and even fun - to write JavaScript. And if, like me, you’re an occasional JavaScript coder, and your skills are rusty every time you return to do something in JavaScript, another innovation you’ll find really useful is the online scratchpad. These are Web sites where you can quickly try out some JavaScript. </p>
<p>The two I’ve been using recently are <a href="http://jsbin.com"><strong>jsbin</strong></a> and <a href="http://pastebin.me"><strong>pastebin</strong></a>.</p>
<p>For example:</p>
<ul>
<li><a title="http://jsbin.com/ejoye4/edit" href="http://jsbin.com/ejoye4/edit">http://jsbin.com/ejoye4/edit</a> – click <strong>Preview</strong> to see the output</li>
<li><a title="http://pastebin.me/6ddbefe3185f806d5903c7ab5664a673" href="http://pastebin.me/6ddbefe3185f806d5903c7ab5664a673">http://pastebin.me/6ddbefe3185f806d5903c7ab5664a673</a> – click <strong>EDIT CODE</strong> to see the code</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/11/20/online-javascript-scratchpads/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Use the existence of a file on the server to determine Javascript behaviour in the browser</title>
		<link>http://www.itauthor.com/2010/11/19/use-jquery-to-check-whether-a-file-exists-on-the-server/</link>
		<comments>http://www.itauthor.com/2010/11/19/use-jquery-to-check-whether-a-file-exists-on-the-server/#comments</comments>
		<pubDate>Fri, 19 Nov 2010 09:12:18 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Flare]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/11/19/use-jquery-to-check-whether-a-file-exists-on-the-server/</guid>
		<description><![CDATA[Rewritten post: Thanks to Janet Swisher for helping me avoid misleading folks with this. In this post I describe how (with the help of jQuery’s $.ajax() function) to use the existence of a file on the server as a switch to determine behaviour in the browser. Case study In my case, the problem I had [...]]]></description>
			<content:encoded><![CDATA[<p><em><font color="#808080">Rewritten post: Thanks to Janet Swisher for helping me avoid misleading folks with this.</font></em></p>
<p>In this post I describe how (with the help of jQuery’s <strong>$.ajax()</strong> function) to use the existence of a file on the server as a switch to determine behaviour in the browser. </p>
<h3>Case study</h3>
<p>In my case, the problem I had was that I use Madcap Flare to generate WebHelp output, and sometimes I want to build a customer version of the WebHelp and other times I want to build an internal version that has issue reporting functionality turned on. This adds little icons to the page that call some PHP for reporting, listing or searching for issues for the current page in the help system.</p>
<p>The issue reporting functionality is governed by a Javascript file, and I want to use a Flare condition to turn that functionality on or off. Flare can’t condition lines within a Javascript file to be included or not included in the output, but you <em>can</em> use Flare conditions to determine which files end up in the output. So I wanted a little bit of Javascript that said: if a particular file exists on the server turn on the issue reporting functionality, otherwise leave it turned off.</p>
<p>As with so many things Javascript, jQuery makes this easy. </p>
<link rel="stylesheet" type="text/css" href="/css/codemirror.css" />
<link rel="stylesheet" type="text/css" href="/css/codeframe.css" />
<h3><script type="text/javascript" src="/js/vendor/codemirror/basefiles.js"></script><script type="text/javascript" src="/js/vendor/codemirror/parsejavascript.js"></script>Code</h3>
<p style="margin-bottom: 0px">Here’s the jQuery code. Obviously you can replace the alert statements with something more useful.</p>
<p style="margin-top: -8pt; font-family: &#39;Courier New&#39;,courier,monospace; margin-bottom: 18pt"><span class="js-variable">     <br />$</span><span class="js-punctuation">.</span><span class="js-property">ajax</span><span class="js-punctuation">(</span><span class="js-punctuation">{</span>     <br /><span class="whitespace">&#160;&#160;&#160; </span><span class="js-property">url</span><span class="js-punctuation">:</span><span class="js-string">'/somedirectory/onyourserver/filetofind.html'</span><span class="js-punctuation">,</span>&#160; <br /><span class="whitespace">&#160;&#160;&#160; type</span><span class="js-punctuation">:</span><span class="js-string">'HEAD'</span><span class="js-punctuation">,</span>     <br /><span class="whitespace">&#160;&#160;&#160; </span><span class="js-property">error</span><span class="js-punctuation">:</span>     <br /><span class="whitespace">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span><span class="js-keyword">function</span><span class="js-punctuation">(</span><span class="js-punctuation">)</span><span class="js-punctuation">{</span>     <br /><span class="whitespace">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span><span class="js-variable">alert</span><span class="js-punctuation">(</span><span class="js-string">&quot;ERROR: File not found. \n:-(&quot;</span><span class="js-punctuation">)</span><span class="js-punctuation">;</span>     <br /><span class="whitespace">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span><span class="js-punctuation">}</span><span class="js-punctuation">,</span>     <br /><span class="whitespace">&#160;&#160;&#160; </span><span class="js-property">success</span><span class="js-punctuation">:</span>     <br /><span class="whitespace">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span><span class="js-keyword">function</span><span class="js-punctuation">(</span><span class="js-punctuation">)</span><span class="js-punctuation">{</span>     <br /><span class="whitespace">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span><span class="js-variable">alert</span><span class="js-punctuation">(</span><span class="js-string">&quot;Nice one! File found. \n8-)&quot;</span><span class="js-punctuation">)</span><span class="js-punctuation">;</span>     <br /><span class="whitespace">&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span><span class="js-punctuation">}</span>     <br /><span class="js-punctuation">}</span><span class="js-punctuation">)</span><span class="js-punctuation">;</span> </p>
<p><strong>Note</strong>: The file isn’t important. It’s purely being used as a switch. The file I use as the switch is actually the barest of bare-bones HTML files that is valid XHTML (which Flare demands). The <span style="font-family: &#39;Courier New&#39;,courier,monospace">type</span><span class="js-punctuation">:</span><span class="js-string">'HEAD'</span> statement in the code tells browsers just to request the HTTP response header for the file, not the contents of the file. However, as this is not supported on all browsers, you should only use this method if you know that the file being used as the switch is either empty of very small.</p>
<h3>Try it out</h3>
<p>To try this out, go to:    <br /><a title="http://jsbin.com/avalo4/2/edit" href="http://jsbin.com/avalo4/2/edit">http://jsbin.com/avalo4/2/edit</a></p>
<p>Click <strong>Preview</strong> to see the output. You should see the “File found” message.</p>
<p>Click <strong>Code</strong>, change the file name in the Javascript and click <strong>Preview</strong> again and this time (assuming the file doesn’t exist on the <strong>jsbin.com</strong> Web site) you’ll get the error message.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/11/19/use-jquery-to-check-whether-a-file-exists-on-the-server/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Madcap Flare tip &#8211; given key error</title>
		<link>http://www.itauthor.com/2010/11/18/madcap-flare-tip-given-key-error/</link>
		<comments>http://www.itauthor.com/2010/11/18/madcap-flare-tip-given-key-error/#comments</comments>
		<pubDate>Thu, 18 Nov 2010 18:47:00 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Flare]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/11/18/madcap-flare-tip-given-key-error/</guid>
		<description><![CDATA[If you’re checking in several files in Madcap Flare (e.g. File &#62; Source Control &#62; Project &#62; Check In All) and you get the error: The given key was not present in the dictionary. Then try checking files in individually, or in smaller batches, from the Pending Check-Ins panel. It worked for me!]]></description>
			<content:encoded><![CDATA[<p><img style="background-image: none; border-right-width: 0px; margin-top: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; margin-left: 2em; border-left-width: 0px; margin-right: 0px; padding-top: 0px" title="flare-given-key-error" border="0" alt="flare-given-key-error" src="http://www.itauthor.com/wp-content/uploads/2010/11/flare-given-key-error.png" width="390" height="184" /></p>
<p>If you’re checking in several files in Madcap Flare (e.g. <strong>File</strong> &gt; <strong>Source Control</strong> &gt; <strong>Project</strong> &gt; <strong>Check In All</strong>) and you get the error:</p>
<p><strong>The given key was not present in the dictionary.</strong></p>
<p>Then try checking files in individually, or in smaller batches, from the Pending Check-Ins panel.</p>
<p>It worked for me!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/11/18/madcap-flare-tip-given-key-error/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Possibly the most useless error message ever</title>
		<link>http://www.itauthor.com/2010/11/09/possibly-the-most-useless-error-message-ever/</link>
		<comments>http://www.itauthor.com/2010/11/09/possibly-the-most-useless-error-message-ever/#comments</comments>
		<pubDate>Tue, 09 Nov 2010 10:06:44 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[User interface]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/11/09/possibly-the-most-useless-error-message-ever/</guid>
		<description><![CDATA[I just clicked on a link to a PDF in a Web page (using Firefox 3.6) and up popped the following: It’s kind of alarming when you’re being asked to OK an invisible question and there’s no Cancel button. Do you want Adobe Acrobat to erase your hard disk?]]></description>
			<content:encoded><![CDATA[<p>I just clicked on a link to a PDF in a Web page (using Firefox 3.6) and up popped the following:    <br /><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Acrobat-blank-message" border="0" alt="Acrobat-blank-message" src="http://www.itauthor.com/wp-content/uploads/2010/11/Acrobat-blank-message.png" width="521" height="194" />     <br />It’s kind of alarming when you’re being asked to OK an invisible question and there’s no Cancel button.</p>
<p><strong><em>Do you want Adobe Acrobat to erase your hard disk?</em></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/11/09/possibly-the-most-useless-error-message-ever/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Transfer your PuTTY settings between computers</title>
		<link>http://www.itauthor.com/2010/10/31/transfer-your-putty-settings-between-computers/</link>
		<comments>http://www.itauthor.com/2010/10/31/transfer-your-putty-settings-between-computers/#comments</comments>
		<pubDate>Sun, 31 Oct 2010 12:22:59 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[I liked this]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/?p=1742</guid>
		<description><![CDATA[How To: Transfer your PuTTY settings between computers.]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.downloadsquad.com/2007/02/01/howto-transfer-your-putty-settings-between-computers/">How To: Transfer your PuTTY settings between computers</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/10/31/transfer-your-putty-settings-between-computers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5 cool Notepad++ tricks</title>
		<link>http://www.itauthor.com/2010/10/31/5-cool-notepad-tricks/</link>
		<comments>http://www.itauthor.com/2010/10/31/5-cool-notepad-tricks/#comments</comments>
		<pubDate>Sun, 31 Oct 2010 12:06:02 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[I liked this]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/?p=1740</guid>
		<description><![CDATA[Notepad++ (that's NotepadPlusPlus) is my text editor of choice. Igor Ljubuncic's article 5 cool Notepad++ tricks gives you some reasons why you might want to switch from plain old Notepad. Also it's free.]]></description>
			<content:encoded><![CDATA[<p><a href="http://notepad-plus-plus.org/">Notepad++</a> (that's NotepadPlusPlus) is my text editor of choice.</p>
<p>Igor Ljubuncic's article <a href="http://www.dedoimedo.com/computers/notepadpp-tricks.html">5 cool Notepad++ tricks</a> gives you some reasons why you might want to switch from plain old Notepad.</p>
<p>Also it's free.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/10/31/5-cool-notepad-tricks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>YOURLS: Your Own URL Shortener</title>
		<link>http://www.itauthor.com/2010/10/24/yourls-your-own-url-shortener/</link>
		<comments>http://www.itauthor.com/2010/10/24/yourls-your-own-url-shortener/#comments</comments>
		<pubDate>Sun, 24 Oct 2010 00:15:09 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[View all]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/?p=1720</guid>
		<description><![CDATA[Shorteners in brief If you use twitter you'll be familiar with the concept of URL shortening. You want to tweet about that video where the dog thinks its own leg is trying to steal the bone but you've only got 140 characters to say what the video is and include the link to YouTube. URL [...]]]></description>
			<content:encoded><![CDATA[<h3>Shorteners in brief</h3>
<p>If you use twitter you'll be familiar with the concept of URL shortening. You want to tweet about that video where the dog thinks its own leg is trying to steal the bone but you've only got 140 characters to say what the video is <em>and</em> include the link to YouTube. URL shorteners allow you to change: </p>
<p><a title="http://www.youxxxtube.com/watch?v=tJgMueh-zLM&amp;feature=youtu.be" href="http://www.youtube.com/watch?v=tJgMueh-zLM&amp;feature=youtu.be">http://www.youtube.com/watch?v=tJgMueh-zLM&amp;feature=youtu.be</a>     <br />to:     <br /><a title="http://bit.ly/dfzFE6" href="http://bit.ly/dfzFE6">http://bit.ly/dfzFE6</a></p>
<p>Even if you don't use twitter URL shorteners can come in handy. For example, at the beginning and end of the ITauthor podcast I use some music by Amplifico and I like to put a link to their page on <strong>musically.com</strong> in the MP3 description that you can read on your iPod when you're listening to the podcast. It's much nicer to give the URL <a title="http://tinyurl.com/amplifico" href="http://tinyurl.com/amplifico">http://tinyurl.com/amplifico</a>, rather than <a title="http://www.musicalley.com/music/listeners/artistdetails.php?BandHash=cdef1ecef0d12844ed816b922fcada5d" href="http://www.musicalley.com/music/listeners/artistdetails.php?BandHash=cdef1ecef0d12844ed816b922fcada5d">http://www.musicalley.com/music/listeners/artistdetails.php?BandHash=cdef1ecef0d12844ed816b922fcada5d</a>.</p>
<h3>Some popular URL shorteners</h3>
<ul>
<li><strong>tinyurl</strong> – This was the first URL shortener most of us will have come across - way back before twitter appeared and ramped up demand for short URLs, leading to a proliferation of shortening services. </li>
<li><strong>bit.ly</strong> – twitter supported use of bit.ly which made it a popular service. Recently there have been doubts raised about the wisdom of using a Libyan registered domain (<strong>.ly</strong>) as the Libyan government have said they will take down domains that contain immoral content. </li>
<li><strong>j.mp</strong> – This is just bit.ly but with 2 fewer characters. If you already have a bit.ly URL you can use the same shortened path, stick it on the end of the j.mp domain and save yourself those 2 precious characters. For example, the dog video gets shortened to <a title="http://j.mp/dfzFE6" href="http://j.mp/dfzFE6">http://j.mp/dfzFE6</a>. </li>
<li><strong>goo.gl</strong> – Google are one of the many big companies that have now got into the URL shortening business. </li>
<li><strong>is.gd</strong> – just a nice simple Web page that produces nice short URLs. </li>
<li>... I could go on, but there's not a whole lot of difference between these services. </li>
</ul>
<h3>Your very own URL shortener</h3>
<p>Shortening URLs isn't difficult to do and there are a selection of free URL shorteners that allow you to produce your own short URLs. All you need is your own Web site and your own domain name. So, for example, I own the domain name <strong>itauthor.com</strong>, so I can produce short URLs like <a title="http://itauthor.com/1" href="http://itauthor.com/1">http://itauthor.com/1</a> or (more descriptively) <a title="http://itauthor.com/podcast36" href="http://itauthor.com/podcast36">http://itauthor.com/podcast36</a>. </p>
<p><a href="http://yourls.org/"><img style="background-image: none; border-right-width: 0px; margin: 0px 0px 12pt 2.5em; padding-left: 0px; padding-right: 0px; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://www.itauthor.com/wp-content/uploads/2010/10/image4.png" width="196" height="79" /></a>The solution I'm using is called <a href="http://yourls.org/">yourls</a>. It's a series of PHP scripts with a MySQL database behind it. So if you're already running a Web site based on PHP and MySQL (for example, a WordPress blog) then you've already got everything you need. Just upload it and browse to the admin page. The yourls contains all the instructions you need.</p>
<p>The only problem I had was as a result of some changes not getting written to my <strong>.htaccess</strong> file in my root Web directory. I had to go and manually add the following at the start of the <strong>.htaccess</strong> file :</p>
<p><code># BEGIN YOURLS      <br />&lt;IfModule mod_rewrite.c&gt;       <br />RewriteEngine On       <br />RewriteBase /       <br />RewriteCond %{REQUEST_FILENAME} !-f       <br />RewriteCond %{REQUEST_FILENAME} !-d       <br /><strong><font color="#ff0000">RewriteCond %{HTTP_HOST} !^itauthor.com$          <br />RewriteRule . - [S=3]           <br /></font></strong>RewriteRule ^([0-9A-Za-z]+)/?$ /yourls-go.php?id=$1 [L]       <br />RewriteRule ^([0-9A-Za-z]+)\+/?$ /yourls-infos.php?id=$1 [L]       <br />RewriteRule ^([0-9A-Za-z]+)\+all/?$ /yourls-infos.php?id=$1&amp;all=1 [L]       <br />&lt;/IfModule&gt;       <br /># END YOURLS</code> </p>
<p>You don't need the two lines highlighted in red if you're not running WordPress, or anything similar that relies on being able to rewrite URLs. The yourls documentation says, in this situation, you need to put all the yourls files and directories in a subdirectory of your root Web directory (e.g. in a directory called &quot;u&quot;). However, this means that you need to include the subdirectory in the YOURLS_SITE configuration setting and it'll then be part of the shortened URL (e.g. <strong>http://itauthor.com/u/123</strong>, which kind of defeats the purpose. So the two red lines get around this by diverting URLs without &quot;www&quot; to yourls.</p>
<p>The first of the red lines says &quot;only apply the following rule if the URL doesn't begin <strong>http://itauthor.com</strong>&quot;. The second red line says &quot;if the previous condition resolved as true then skip the following three rules&quot;. </p>
<p>This seems a bit like a double negative but it's necessary because RewriteCond only applies to the RewriteRule that immediately follows it, so we need the skip rule. The result is that, on my site, the three RewriteRules that divert page requests to the yourls PHP scripts are only applied to URLs beginning <strong>http://itauthor.com</strong>. The &quot;[L]&quot; means &quot;last&quot; - in other words, if this RewriteRule is applied don't go any further, so we never reach the rules that WordPress uses, which are further down the <strong>.htaccess</strong> file. If a URL begins <strong>http://www.itauthor.com</strong> then the yourls rules are skipped and the URL is processed using the WordPress rules. </p>
<p>This means that <a href="http://itauthor.com/2"><strong>http://itauthor.com/2</strong></a> is sent to yourls to retrieve the original, long URL from its database, whereas <a title="http://www.itauthor.com/podcasts/" href="http://www.itauthor.com/podcasts"><strong>http://www.itauthor.com/podcasts</strong></a> is sent to WordPress to create a Web page using content from <em>its</em> database.</p>
<h3>What's the point?</h3>
<p>Well, okay, there's really no point other than a bit of personal domain name vanity. Why have your tweets full of <strong>bit.ly</strong> or <strong>goo.gl</strong> URLs when you could have your own domain name showing up – even if clicking the link doesn't take your tweet readers to your Web site.</p>
<p>And to finish, just because I find it very funny, here's that video of the back leg bone thief:</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:ad635d3b-a1d8-4632-96df-c1221cd6ea87" class="wlWriterEditableSmartContent">
<div><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/tJgMueh-zLM&amp;hl=en"></param><embed src="http://www.youtube.com/v/tJgMueh-zLM&amp;hl=en" type="application/x-shockwave-flash" width="425" height="355"></embed></object></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/10/24/yourls-your-own-url-shortener/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ITauthor podcast #36 &#8211; Acrobat and shared review of Web pages</title>
		<link>http://www.itauthor.com/2010/10/20/itauthor-podcast-36-acrobat-and-shared-review-of-web-pages/</link>
		<comments>http://www.itauthor.com/2010/10/20/itauthor-podcast-36-acrobat-and-shared-review-of-web-pages/#comments</comments>
		<pubDate>Wed, 20 Oct 2010 11:12:38 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Authoring tools]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/?p=1717</guid>
		<description><![CDATA[ITauthor Podcast 36 - Acrobat and Shared Review of Web Pages

Looking for a better way of reviewing a WebHelp system brought it home to me how good Adobe Acrobat shared review is. I want something that does pretty much exactly the same thing but for Web pages. However, it seems like there's nothing out there.

In this podcast I describe why Acrobat shared review is so good and why the closest things I could find (WebNotes and SharedCopy) just don't do what I'm looking for.

Links:
http://www.adobe.com/products/acrobatpro.html
http://www.webnotes.net/
http://sharedcopy.com/
 

--------------------------

The music I play in the show is by Amplifico. 
You can hear more of their music at Podshow:
http://tinyurl.com/amplifico

--------------------------

Get in touch!
I'd love to know who's listening, where you are and what you think of the podcast, so contact me at:
comments@itauthor.com

Alternatively, if you enjoyed the podcast, or have anything say about it, please post a comment:
- Go to www.itauthor.com/podcastarchive.
- Click the link to this show.
- The comment form is at the bottom of the page.
]]></description>
			<content:encoded><![CDATA[<p>Looking for a better way of reviewing a WebHelp system recently brought it home to me how good Adobe Acrobat's shared review functionality is. I want something that does pretty much exactly the same thing but for Web pages. However, it seems like no such thing exists. </p>
<p>In this podcast I describe why Acrobat shared review is so good and why the closest things I could find (<a href="http://www.webnotes.net/">WebNotes</a> and <a href="http://sharedcopy.com/">SharedCopy</a>) just don't do what I'm looking for. </p>
<h3>Links</h3>
<ul>
<li>Acrobat Pro: <a href="http://www.adobe.com/products/acrobatpro.html">http://www.adobe.com/products/acrobatpro.html</a>       <br /><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.itauthor.com/wp-content/uploads/2010/10/image.png" width="205" height="249" />&#160; </li>
<li>WebNotes: <a href="http://www.webnotes.net/">http://www.webnotes.net/</a>       <br /><a href="http://www.itauthor.com/wp-content/uploads/2010/10/image1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.itauthor.com/wp-content/uploads/2010/10/image_thumb.png" width="190" height="67" /></a> </li>
<li>SharedCopy: <a href="http://sharedcopy.com/">http://sharedcopy.com/</a>       <br /><a href="http://sharedcopy.com/"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.itauthor.com/wp-content/uploads/2010/10/image2.png" width="233" height="47" /></a> </li>
</ul>
<p>This video shows how to configure and create a shared review in Acrobat Pro. Because it goes through the configuration steps for setting things up, it makes it all look much more time-consuming than it actually is. Once you've set this up, generating the shared review is simple. We used the same internal server approach demonstrated here (using a WebDav folder on the server) and it works really well for us.</p>
<p align="center"><iframe style="text-align: center" class="youtube-player" title="YouTube video player" height="510" src="http://www.youtube.com/embed/ZpeRnL4SwmY?rel=0" frameborder="0" width="640" type="text/html"></iframe></p>
</p>
<hr />
<form method="post" action="http://www.feedblitz.com/f/f.fbz?AddNewUserDirect">
<input type="hidden" name="sub" />
<p style="text-align: center">Want to get emailed next time I publish a podcast? <label for="email">Enter your email address:</label></p>
<p style="text-align: center">
<input name="EMAIL" />
<input type="hidden" name="FEEDID" />
<input type="hidden" name="PUBLISHER" />
<input type="submit" />&#160;&#160; <a href="http://www.feedblitz.com/f?previewfeed=226103">Preview</a></p>
</p></form>
<div id="subscription-services">
<p style="text-align: center"><a title="RSS Feed" href="http://feeds.feedburner.com/itauthor"><img alt="RSS Feed" src="/wp-content/uploads/podcasts/feedreader-icons/feed_16x16.png" /></a> <a title="RSS Feed" href="http://feeds.feedburner.com/itauthor">RSS Feed</a>&#160;&#160; <a title="Add to del.icio.us" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.itauthor.com%2Fpodcastarchive"><img alt="Add to del.icio.us" src="/wp-content/uploads/podcasts/feedreader-icons/delicious.gif" /></a> <a title="Add to del.icio.us" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.itauthor.com%2Fpodcastarchive">Add to del.icio.us</a>&#160;&#160; <a title="Add to Digg" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.itauthor.com%2Fpodcastarchive%2F"><img alt="Add to del.icio.us" src="/wp-content/uploads/podcasts/feedreader-icons/digg.gif" /></a> <a title="Add to Digg" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.itauthor.com%2Fpodcastarchive%2F">Add to Digg</a>&#160;&#160; <a title="Add to iTunes" href="itpc://feeds.feedburner.com/itauthor"><img alt="Add to iTunes" src="/wp-content/uploads/podcasts/feedreader-icons/itunes.gif" /></a> <a title="Add to iTunes" href="itpc://feeds.feedburner.com/itauthor">Add to iTunes</a>&#160;&#160; <a title="Add to Zune" href="zune://subscribe/?ITauthor%20Podcast=http://feeds.feedburner.com/itauthor"><img alt="Add to Zune" src="/wp-content/uploads/podcasts/feedreader-icons/zune.png" /></a> <a title="Add to Zune" href="zune://subscribe/?ITauthor%20Podcast=http://feeds.feedburner.com/itauthor">Add to Zune</a>&#160;&#160; <a title="Add to Google" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fitauthor"><img alt="Add to Google" src="/wp-content/uploads/podcasts/feedreader-icons/google.png" /></a> <a title="Add to Google" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fitauthor">Add to Google</a></p>
<p style="text-align: center; font-family: tahoma,verdana,arial; color: rgb(153,153,153); font-size: x-small">ITauthor.com/podcasts – the technical writing podcast</p>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/10/20/itauthor-podcast-36-acrobat-and-shared-review-of-web-pages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://media.blubrry.com/itauthor/www.itauthor.com/wp-content/uploads/podcasts/ITauthor-podcast36-Acrobat-Oct2010.mp3" length="34519499" type="audio/mpeg" />
			<itunes:subtitle>ITauthor Podcast 36 - Acrobat and Shared Review of Web Pages - Looking for a better way of reviewing a WebHelp system brought it home to me how good Adobe Acrobat shared review is. I want something that does pretty much exactly the same thing but for ...</itunes:subtitle>
		<itunes:summary>ITauthor Podcast 36 - Acrobat and Shared Review of Web Pages

Looking for a better way of reviewing a WebHelp system brought it home to me how good Adobe Acrobat shared review is. I want something that does pretty much exactly the same thing but for Web pages. However, it seems like there&#039;s nothing out there.

In this podcast I describe why Acrobat shared review is so good and why the closest things I could find (WebNotes and SharedCopy) just don&#039;t do what I&#039;m looking for.

Links:
http://www.adobe.com/products/acrobatpro.html
http://www.webnotes.net/
http://sharedcopy.com/
 

--------------------------

The music I play in the show is by Amplifico. 
You can hear more of their music at Podshow:
http://tinyurl.com/amplifico

--------------------------

Get in touch!
I&#039;d love to know who&#039;s listening, where you are and what you think of the podcast, so contact me at:
comments@itauthor.com

Alternatively, if you enjoyed the podcast, or have anything say about it, please post a comment:
- Go to www.itauthor.com/podcastarchive.
- Click the link to this show.
- The comment form is at the bottom of the page.</itunes:summary>
		<itunes:author>Alistair Christie - ITauthor.com</itunes:author>
		<itunes:explicit>no</itunes:explicit>
		<itunes:duration>35:52</itunes:duration>
	</item>
		<item>
		<title>Great example of how to explain something</title>
		<link>http://www.itauthor.com/2010/10/19/great-example-of-how-to-explain-something/</link>
		<comments>http://www.itauthor.com/2010/10/19/great-example-of-how-to-explain-something/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 08:09:51 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Documentation]]></category>
		<category><![CDATA[I liked this]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/10/19/great-example-of-how-to-explain-something/</guid>
		<description><![CDATA[Here's how Google explain Gmail Priority Inbox simply, clearly and engagingly:]]></description>
			<content:encoded><![CDATA[<p>Here's how Google explain Gmail Priority Inbox simply, clearly and engagingly:</p>
<p> <object width="640" height="390"><param name="movie" value="http://www.youtube.com/v/5nt3gE9dGHQ&amp;hl=en_US&amp;feature=player_embedded&amp;version=3"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/5nt3gE9dGHQ&amp;hl=en_US&amp;feature=player_embedded&amp;version=3" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="390"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/10/19/great-example-of-how-to-explain-something/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AudioBoo makes (mini) podcasting easy</title>
		<link>http://www.itauthor.com/2010/09/26/audioboo-makes-mini-podcasting-easy/</link>
		<comments>http://www.itauthor.com/2010/09/26/audioboo-makes-mini-podcasting-easy/#comments</comments>
		<pubDate>Sun, 26 Sep 2010 22:03:40 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Podcasting]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/09/26/audioboo-makes-mini-podcasting-easy/</guid>
		<description><![CDATA[Yesterday I made a recording and posted it up to AudioBoo as a couple of recordings. I forgot about the 5-minute maximum so I had to chop and edit my 12-minute ramble into two and then post up the second of it. Today I posted an ITauthor podcast onto this site. And the comparative ease [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://audioboo.fm/itauthor"><img style="border-right-width: 0px; margin: 0px 0px 0px 15px; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="audioboo" border="0" alt="audioboo" src="http://www.itauthor.com/wp-content/uploads/2010/09/audioboo1.png" width="176" height="55" /></a> Yesterday I made a recording and posted it up to <a href="http://audioboo.fm/itauthor">AudioBoo</a> as a couple of recordings. I forgot about the 5-minute maximum so I had to chop and edit my 12-minute ramble into two and then post up the second of it.</p>
<p>Today I posted an ITauthor podcast onto this site. And the comparative ease and difficulty of the two process became immediately apparent. </p>
<p>Although I have some niggles with AudioBoo (there are some very obvious improvements they could make), it certainly does make publishing a podcast very, very easy. This is especially true if: </p>
<p>a) you have an iPhone   <br />b) you're happy to record your podcast episodes directly into your phone and post them without any editing</p>
<p>Editing is the bane of podcasting - so I actually see a lack of editing as a good thing. However, the bad thing is that you can't slip over 5 minutes. If you try to post a recording that's longer than 5 minutes then it just stops dead after 4.59.</p>
<p>I don't have an iPhone, so my experience was a degraded one of recording onto a little digital recording, uploading to my computer, uploading a photo from my Blackberry, then uploading recording and photo to AudioBoo via the upload web page. But even still, it was way, <em>way</em> quicker than how I currently produce my ITauthor podcast. Here's the ridiculously complicated process I trawl through for that:</p>
<ol>
<li>Record the podcast. </li>
<li>Upload it to my PC. </li>
<li>Edit it in Audacity. </li>
<li>Export it as a .wav file (I've tried exporting to MP3 but the sound quality is rubbish). </li>
<li>Convert the .wav file to MP3 using Format Factory. </li>
<li>Add tags and photo to the MP3 using ID3-TagIT 3. </li>
<li>Upload the MP3 to my Dreamhost server using WinSCP. </li>
<li>Open a previous ITauthor podcast blog post in Live Writer. </li>
<li>Copy it and use this to create a new blog post. </li>
<li>Post this to my WordPress blog as a draft. </li>
<li>Go to the web page for editing the blog post and add the MP3 using the Blubrry PowerPress plugin. </li>
<li>Publish the blog post. </li>
</ol>
<p>This is a long and tedious enough process to discourage me from podcasting regularly.</p>
<p>There's got to be a better way. And if all you want is a mini, 5-minute podcast then AudioBoo probably <em>is</em> that better way. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/09/26/audioboo-makes-mini-podcasting-easy/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ITauthor podcast #35 &#8211; On Crammond Island, thinking about technical writing</title>
		<link>http://www.itauthor.com/2010/09/26/itauthor-podcast-35-on-crammond-island-thinking-about-technical-writing/</link>
		<comments>http://www.itauthor.com/2010/09/26/itauthor-podcast-35-on-crammond-island-thinking-about-technical-writing/#comments</comments>
		<pubDate>Sun, 26 Sep 2010 11:54:36 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Podcast]]></category>
		<category><![CDATA[View all]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/?p=1706</guid>
		<description><![CDATA[Took the dog for a walk and talked to myself about documentation. Crazy? Or just missing technical writing? Didn't have my camera with me, but I snapped these with my Blackberry: View Full Album Want to get emailed next time I publish a podcast? Enter your email address: &#160;&#160; Preview RSS Feed&#160;&#160; Add to del.icio.us&#160;&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Took the dog for a walk and talked to myself about documentation. Crazy? Or just missing technical writing?</p>
<p>Didn't have my camera with me, but I snapped these with my Blackberry:</p>
</p>
<p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:66721397-FF69-4ca6-AEC4-17E6B3208830:ce0d5ae6-9430-4caf-b918-4bc4378f366b" class="wlWriterEditableSmartContent"><a style="border:0px" href="http://cid-a36c2ec3c9888749.skydrive.live.com/redir.aspx?page=browse&amp;resid=A36C2EC3C9888749!177&amp;type=5"><img style="border:0px" alt="View Walking Lottie at Crammond - 25 Sept 2010" src="http://www.itauthor.com/wp-content/uploads/2010/09/InlineRepresentation42c9808cff8d4bd19e67241c53c34e0e1.jpg" /></a>
<div style="width:732px;text-align:right;" ><a href="http://cid-a36c2ec3c9888749.skydrive.live.com/redir.aspx?page=browse&amp;resid=A36C2EC3C9888749!177&amp;type=5">View Full Album</a></div>
</div>
<hr />
<form method="post" action="http://www.feedblitz.com/f/f.fbz?AddNewUserDirect">
<input type="hidden" name="sub" />
<p style="text-align: center">Want to get emailed next time I publish a podcast? <label for="email">Enter your email address:</label></p>
<p style="text-align: center">
<input name="EMAIL" />
<input type="hidden" name="FEEDID" />
<input type="hidden" name="PUBLISHER" />
<input type="submit" />&#160;&#160; <a href="http://www.feedblitz.com/f?previewfeed=226103">Preview</a></p>
</p></form>
<div id="subscription-services">
<p style="text-align: center"><a title="RSS Feed" href="http://feeds.feedburner.com/itauthor"><img alt="RSS Feed" src="/wp-content/uploads/podcasts/feedreader-icons/feed_16x16.png" /></a> <a title="RSS Feed" href="http://feeds.feedburner.com/itauthor">RSS Feed</a>&#160;&#160; <a title="Add to del.icio.us" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.itauthor.com%2Fpodcastarchive"><img alt="Add to del.icio.us" src="/wp-content/uploads/podcasts/feedreader-icons/delicious.gif" /></a> <a title="Add to del.icio.us" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.itauthor.com%2Fpodcastarchive">Add to del.icio.us</a>&#160;&#160; <a title="Add to Digg" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.itauthor.com%2Fpodcastarchive%2F"><img alt="Add to del.icio.us" src="/wp-content/uploads/podcasts/feedreader-icons/digg.gif" /></a> <a title="Add to Digg" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.itauthor.com%2Fpodcastarchive%2F">Add to Digg</a>&#160;&#160; <a title="Add to iTunes" href="itpc://feeds.feedburner.com/itauthor"><img alt="Add to iTunes" src="/wp-content/uploads/podcasts/feedreader-icons/itunes.gif" /></a> <a title="Add to iTunes" href="itpc://feeds.feedburner.com/itauthor">Add to iTunes</a>&#160;&#160; <a title="Add to Zune" href="zune://subscribe/?ITauthor%20Podcast=http://feeds.feedburner.com/itauthor"><img alt="Add to Zune" src="/wp-content/uploads/podcasts/feedreader-icons/zune.png" /></a> <a title="Add to Zune" href="zune://subscribe/?ITauthor%20Podcast=http://feeds.feedburner.com/itauthor">Add to Zune</a>&#160;&#160; <a title="Add to Google" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fitauthor"><img alt="Add to Google" src="/wp-content/uploads/podcasts/feedreader-icons/google.png" /></a> <a title="Add to Google" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fitauthor">Add to Google</a></p>
<p style="text-align: center; font-family: tahoma,verdana,arial; color: rgb(153,153,153); font-size: x-small">ITauthor.com/podcasts – the technical writing podcast</p>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/09/26/itauthor-podcast-35-on-crammond-island-thinking-about-technical-writing/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://media.blubrry.com/itauthor/www.itauthor.com/wp-content/uploads/podcasts/ITauthor-podcast35-Crammond-Sept2010.mp3" length="26090328" type="audio/mpeg" />
			<itunes:subtitle>Took the dog for a walk and talked to myself about documentation. Crazy? Or just missing technical writing?  Didn&#039;t have my camera with me, but I snapped these with my Blackberry:       View Full Album        Want to get emailed next time I publish a p...</itunes:subtitle>
		<itunes:summary>Took the dog for a walk and talked to myself about documentation. Crazy? Or just missing technical writing?  Didn&#039;t have my camera with me, but I snapped these with my Blackberry:       View Full Album        Want to get emailed next time I publish a podcast? Enter your email address:          Preview       RSS Feed    Add to del.icio.us    Add to Digg    Add to iTunes    Add to Zune    Add to Google    ITauthor.com/podcasts – the technical writing podcast</itunes:summary>
		<itunes:author>Alistair Christie - ITauthor.com</itunes:author>
		<itunes:explicit>no</itunes:explicit>
		<itunes:duration>27:05</itunes:duration>
	</item>
		<item>
		<title>Audioboo: nice idea, badly executed!</title>
		<link>http://www.itauthor.com/2010/09/12/audioboo-nice-idea-badly-executed/</link>
		<comments>http://www.itauthor.com/2010/09/12/audioboo-nice-idea-badly-executed/#comments</comments>
		<pubDate>Sun, 12 Sep 2010 12:13:00 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/09/12/audioboo-nice-idea-badly-executed/</guid>
		<description><![CDATA[In July 2002 I read the following in Russell Beattie's blog: Hi, I'm playing with a new idea - or actually a retread of an old idea of mine - an Audio Blog! I just quickly recorded a bunch of my thoughts and put them into a MP3 file to post here: That was three [...]]]></description>
			<content:encoded><![CDATA[<p>In July 2002 I read the following in <a href="http://www.russellbeattie.com/notebook/1000024.html">Russell Beattie's blog</a>:</p>
<blockquote><p>Hi, I'm playing with a new idea - or actually a retread of an old idea of mine - an Audio Blog! I just quickly recorded a bunch of my thoughts and put them into a MP3 file to post here:<font color="#333333"></font></p>
<p>   <center><object width="300" height="20"><param name="src" value="http://www.itauthor.com/wp-content/uploads/2010/09/russellbeattie-audioblog1.mp3"><param name="autoplay" value="False"><param name="controller" value="true"><embed src="http://www.itauthor.com/wp-content/uploads/2010/09/russellbeattie-audioblog1.mp3" autostart="False" loop="false" width="300" height="20" controller="true"></embed></object></center>
</p>
</blockquote>
<p>That was three years before podcasting really started to take off. And the thing that I really liked was the idea of listening to someone rather than having to sit there reading. The internet is still quite a texty medium (think of Twitter, and even FaceBook - although some people, insanely, keep all their photos there - is still largely just text), but back then in 2002, boy did you spend a lot of time reading off a flickering CRT! I spent most of my working day reading, so, although I liked the idea of blogs, sometimes the reading of them felt like a bit of a chore. Hearing the voice of a blogger you'd been reading for a long time was wonderful. As Russell says: &quot;instead of just reading their thoughts you could hear their voices ... their inflexion and their enthusiasm&quot;. I was really surprised that audioblogging didn't take off and even Russell Beattie gave it up after a short while.</p>
<p>Then of course podcasting came along and for a while everybody who leapt on the idea thought they were broadcasting to the world when in fact, to begin with at least, the only people listening were other podcasters. And yes, I've made sporadic stabs at podcasting myself - and hope to do so again. My plans are currently on hold thanks to the utterly abysmal internet service I currently endure from Sky Broadband which makes any sort of internet experience tedious at best and renders the recording of Skype interviews completely unfeasible ... but I digress.</p>
<p><img style="border-right-width: 0px; margin: 5px 0px 0px 20px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="audioboo" border="0" alt="audioboo" src="http://www.itauthor.com/wp-content/uploads/2010/09/audioboo.png" width="176" height="55" /> Now there's an easy way to do pretty much what Russell Beattie was doing back in 2002, it's called <a href="http://audioboo.fm/">Audioboo</a>. It's an application for the iPhone, Android and the Web that allows you to record up to 5 minutes of audio, tag it and post it to your Audioboo profile. They've branded these recordings &quot;boos&quot; - which gives you a clue as to how this must have been pitched to the venture capitalists who no doubt funded the site: trendy social media, with an audio twist. However, for podcast lovers like myself a really nice feature is that every tag and profile has an RSS feed, which means you can subscribe to any of these as a podcast. </p>
<p>Sounds great. And it <em>could</em> be great if it wasn't so difficult to find anything worth listening to. The problem is the lack of classification. I want to find people who generally record stuff on a certain subject, but there's no way to do this, other than stumbling upon something by blind luck. The only way to find &quot;boos&quot; is to browse: </p>
<ul>
<li>everyone's boos (the most recent boos: completely random) </li>
<li>featured boos (also seemingly random - you just don't get all the &quot;This is a test&quot; recordings of people trying out AudioBoo) </li>
<li>popular boos (a perplexing selection if these are really the most listened to recordings - the list is also strangely static) </li>
</ul>
<p>On the iPhone you can also browse for boos that have been geotagged to somewhere near to your current location. I can see how this <em>might </em>occasionally throw up interesting recordings. Unfortunately I don't own an iPhone.</p>
<p>However, there's no classification of booers (boozers?), so it's impossible to find people who might be talking about things you want to listen to. Yes there's tagging, but try searching for &quot;software&quot; and you just get a ragbag of boos that people decided to tag as &quot;software&quot;. What I'm looking for are people who generally record their thoughts about software. </p>
<p>This highlights the problem with tagging versus less free-for-all methods of classification. If AudioBoo allowed people to choose to classify their profile with a maximum of three keywords, only the people who generally talked about software would choose &quot;software&quot; as their classification. Then I'd be able to find them.</p>
<p>It's frustrating because I'm sure there is a lot of audio in Audioboo that I'd enjoy listening to. I just can't find it. I can <em>try</em>, but all the rubbish and nonsense is going to put me off the effort very quickly. It's like a going into a huge library to find something to read, but the books are stacked in a completely random order and they have unmarked spines so I have to open them up, one by one, to find out which book each one is. After opening a couple of cheesy romances, a car repair manual, several books in foreign languages and a biography of a 1980s cricketer I give up and head home to buy something off Amazon.</p>
<p>Good luck Audioboo, but I can't see me visiting very often until you put a bit of thought into usability.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/09/12/audioboo-nice-idea-badly-executed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mag+ video: How to sell an idea</title>
		<link>http://www.itauthor.com/2010/09/11/mag-video-how-to-sell-an-idea/</link>
		<comments>http://www.itauthor.com/2010/09/11/mag-video-how-to-sell-an-idea/#comments</comments>
		<pubDate>Sat, 11 Sep 2010 21:19:07 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/09/11/mag-video-how-to-sell-an-idea/</guid>
		<description><![CDATA[From December 2009 - prior to Apple's announcement of the iPad - this video shows a visualisation of a tablet-based magazine. I love it because it is so persuasively convincing. Very soon after the video starts you already want to own one of these. Source: Bonnier I wouldn't have liked to have rushed out and [...]]]></description>
			<content:encoded><![CDATA[<p>From December 2009 - prior to Apple's announcement of the iPad - this video shows a visualisation of a tablet-based magazine. I love it because it is so persuasively convincing. Very soon after the video starts you already want to own one of these.</p>
<p><object width="400" height="225"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=8217311&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=ffffff&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=8217311&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=ffffff&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="225"></embed></object>    <br />Source: <a href="http://www.bonnier.com/en/content/digital-magazines-bonnier-mag-prototype">Bonnier</a></p>
<p>I wouldn't have liked to have rushed out and bought an iPad having previously watched this video because, while all the other proud owners were swooning over their new toy, I think I might have been disappointed that it didn't match up to what I'd seen in this video.</p>
<p>You can read more about the creation of this video and the subsequent creation of an iPad application that used some of the Mag+ concepts on the website of BERG, the design consultancy that worked on the video: <a title="http://berglondon.com/projects/magplus/" href="http://berglondon.com/projects/magplus/">http://berglondon.com/projects/magplus/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/09/11/mag-video-how-to-sell-an-idea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Video plays locally but not on the web</title>
		<link>http://www.itauthor.com/2010/08/26/video-plays-locally-but-not-on-the-web/</link>
		<comments>http://www.itauthor.com/2010/08/26/video-plays-locally-but-not-on-the-web/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 18:29:00 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Video]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/08/26/video-plays-locally-but-not-on-the-web/</guid>
		<description><![CDATA[This is a gotcha to watch out for if you post videos on a website. The problem I created a video in Camtasia and output it as a Flash file to put on a website. I chose FLV format in Camtasia, but the file that runs initially is a .swf file. This displays a little [...]]]></description>
			<content:encoded><![CDATA[<p>This is a gotcha to watch out for if you post videos on a website.</p>
<h3>The problem</h3>
<p>I created a video in Camtasia and output it as a Flash file to put on a website. I chose FLV format in Camtasia, but the file that runs initially is a <strong>.swf</strong> file. This displays a little animation and shows the first frame with a big play button on top. It all worked fine locally on my PC but when I uploaded it to the website it just displayed as a black box with no initial animation. This suggested a problem with the .swf file and, sure enough, when I tried loading the .swf file directly in the browser all I got was a grey page (that's gray for anyone Googling for that spelling).</p>
<h3>The debugging</h3>
<p>The strange thing was that I'd previously added another video elsewhere on the site and it worked fine. It wasn't anything to do with the size of the <strong>.flv</strong> file because the working video had a larger <strong>.flv</strong> file, and anyway I was convinced the problem was the <strong>.swf</strong> file.</p>
<p>My immediate thought was that it was a permissions problem. So I blew the permissions wide open but it wasn't that. I then thought it could be a security issue but telling the browser to trust the website didn't help either.</p>
<p>I'd actually added this within the help authoring tool Madcap Flare, and this took me down all sorts of wrong paths. And, eventually, paths were the problem. I fell back to more Googling and eventually came across a <a href="http://forums.techsmith.com/showthread.php?t=6329">Techsmith forum post</a> by &quot;Showland&quot; that had the solution. </p>
<h3>The solution</h3>
<p>Showland's forum comment said:</p>
<blockquote><p>Hi. I had this problem as well, where the compiled file would play locally but not over the Web. I discovered that it didn't like a super long path to the files. Once I stored them with a shorter path, the screencast played fine over the Web. Hope this helps!</p>
</blockquote>
<p>Eureka!</p>
<p>The URL for my <strong>.swf</strong> file was something like this:</p>
<p><strong>http://www.my.website.xyz/documentation/authoringDocs/videos/Flare-adding-glossary-popups-FLV/adding-glossary-popups_controller.swf</strong></p>
<p>So I moved the file up the hierarchy and gave it a simple name:</p>
<p><strong>http://www.my.website.xyz/documentation/authoringDocs/videos/test.swf</strong></p>
<p>and, hey presto, it worked just fine.</p>
<p>I don't know what the character limit is, but it's worth bearing this in mind if you work with videos on websites.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/08/26/video-plays-locally-but-not-on-the-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Help is just a search and a click away</title>
		<link>http://www.itauthor.com/2010/08/25/help-is-just-a-search-and-a-click-away/</link>
		<comments>http://www.itauthor.com/2010/08/25/help-is-just-a-search-and-a-click-away/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 22:21:11 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Online help]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/08/25/help-is-just-a-search-and-a-click-away/</guid>
		<description><![CDATA[I've written before (see Does online help need an overall structure? and What online help needs is really good search results) that I think the best way to present online help is with a simple page with a big search box at the top, above a selection of links likely to be useful to users [...]]]></description>
			<content:encoded><![CDATA[<p>I've written before (see <a href="http://www.itauthor.com/2010/06/11/what-online-help-needs-is-really-good-search-results/">Does online help need an overall structure?</a> and <a href="http://www.itauthor.com/2010/06/11/what-online-help-needs-is-really-good-search-results/">What online help needs is really good search results</a>) that I think the best way to present online help is with a simple page with a big search box at the top, above a selection of links likely to be useful to users needing help. Do away with the book metaphor used in many help systems: the table of contents and the index. Just make sure the search gives really spot-on results.</p>
<p>So I happened to be resurrecting an old Yahoo email account this evening and I couldn't resist clicking the Help link to see how Yahoo do their online help. And, lo and behold: a big search box at the top with a well-chosen selection of links below.    <br /><a href="http://www.itauthor.com/wp-content/uploads/2010/08/YahooHelp.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="YahooHelp" border="0" alt="YahooHelp" src="http://www.itauthor.com/wp-content/uploads/2010/08/YahooHelp_thumb.png" width="590" height="594" /></a>     <br />It's an email system, so I tried searching for &quot;spam&quot; and I got a very decent set of results:     <br /><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="YahooHelpSearchResults" border="0" alt="YahooHelpSearchResults" src="http://www.itauthor.com/wp-content/uploads/2010/08/YahooHelpSearchResults.png" width="590" height="491" />     <br />And clicking on a link took me to a nicely pitched little tutorial topic on avoiding spam:     <br /><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="YahooHelpTopic" border="0" alt="YahooHelpTopic" src="http://www.itauthor.com/wp-content/uploads/2010/08/YahooHelpTopic.png" width="590" height="643" />     <br />So the result is that from the help page I just have to do a search and click a link to get straight to some useful help. That's how it <em>should</em> be to get help with something on a computer. Anything more complicated than that has a problem.&#160; </p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/08/25/help-is-just-a-search-and-a-click-away/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deleting those pesky lines in Microsoft Word</title>
		<link>http://www.itauthor.com/2010/08/23/deleting-those-pesky-lines-in-microsoft-word/</link>
		<comments>http://www.itauthor.com/2010/08/23/deleting-those-pesky-lines-in-microsoft-word/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 10:45:10 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Word]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/08/23/deleting-those-pesky-lines-in-microsoft-word/</guid>
		<description><![CDATA[Here's something that's annoyed me for years in Microsoft Word and I've finally got to the bottom of it. In Word, type three hyphens, or three underline characters, then press Enter. With the default setup, Word will replace the characters you typed with a line that stretches across the whole text width on the page. [...]]]></description>
			<content:encoded><![CDATA[<p>Here's something that's annoyed me for years in Microsoft Word and I've finally got to the bottom of it. </p>
<p>In Word, type three hyphens, or three underline characters, then press Enter. With the default setup, Word will replace the characters you typed with a line that stretches across the whole text width on the page. Great if you want a divider to split up sections. </p>
<p>But now try deleting this line. Click below it and delete backwards. The line is immune to deletion. Try to select it. You can't.</p>
<p>The secret to deleting the line is understanding what Word did. The line isn't quite what it seems. In fact it's a border that is applied to the bottom of the previous paragraph.</p>
<p>So to delete it:</p>
<ol>
<li>Click anywhere in the paragraph above where you were when you entered the three hyphens of underscores. </li>
<li>Choose <strong>Format </strong>&gt; <strong>Borders and Shading</strong>. </li>
<li>Select the <strong>None</strong> border setting.      <br /><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="bordersandshading" border="0" alt="bordersandshading" src="http://www.itauthor.com/wp-content/uploads/2010/08/bordersandshading.png" width="567" height="435" /> </li>
<li>Click <strong>OK</strong>. </li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/08/23/deleting-those-pesky-lines-in-microsoft-word/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Perl basics for beginners (on Windows)</title>
		<link>http://www.itauthor.com/2010/08/07/perl-basics-for-beginners-on-windows/</link>
		<comments>http://www.itauthor.com/2010/08/07/perl-basics-for-beginners-on-windows/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 23:46:50 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/08/07/perl-basics-for-beginners-on-windows/</guid>
		<description><![CDATA[I've been writing some Perl again recently. The scripts I've been writing have all been sitting on a Solaris server to which I've been connecting remotely. But today my connection was super slow (thanks Sky Broadband) so I decided to work locally on my PC for a change. This meant getting Perl working on my [...]]]></description>
			<content:encoded><![CDATA[<p>I've been writing some Perl again recently. The scripts I've been writing have all been sitting on a Solaris server to which I've been connecting remotely. But today my connection was <em>super</em> slow (thanks Sky Broadband) so I decided to work locally on my PC for a change.</p>
<p>This meant getting Perl working on my laptop. It's pretty easy. So I thought I'd blog the steps involved. </p>
<p>Read on if you want to try writing some Perl but:</p>
<ul>
<li>You don't know how to get Perl set up </li>
<li>You don't have access to a server where Perl is already set up </li>
<li>You use Windows and you really don't want to become a Linux guru (at least not today) </li>
</ul>
<p><img style="border-right-width: 0px; margin: 0px 0px 0px 1.5em; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Xampplogo" border="0" alt="Xampplogo" src="http://www.itauthor.com/wp-content/uploads/2010/08/Xampplogo.png" width="200" height="59" /> There are a variety of ways to do this. This is just the way I used a few minutes ago. It uses XAMPP which means that, by the end of the process not only will you have Perl (one of the Ps in &quot;XAMPP&quot;), you'll also have the <strong>A</strong>pache Web Server, <strong>M</strong>ySQL and <strong>P</strong>HP. In case you're wondering, the X apparently stands for cross-platform. You might not want all of these right now but, unless you're really tight for disk space, I'd advise getting them anyway. If you're ever going to do any Web development, having this package of technologies on your laptop, ready to switch on with the click of a button, is fantastically useful.</p>
<p>So here we go:</p>
<ol>
<li>Browse to <a title="http://www.apachefriends.org/en/xampp-windows.html" href="http://www.apachefriends.org/en/xampp-windows.html">http://www.apachefriends.org/en/xampp-windows.html</a> </li>
<li>Scroll down the page to the download section for XAMPP for Windows. </li>
<li>Click the link for the EXE file (content description: &quot;Self-extracting RAR archive&quot;). </li>
<li>Once downloaded, double-click the <strong>xampp-win32-<em>n.n.n</em>.exe</strong> file and confirm you want to run it. </li>
<li>
<p>In the XAMPP for Windows dialog box, change the destination folder if required. </p>
<p>The installer installs XAMPP in an <strong>xampp</strong> directory within the destination you specify. So if you leave the destination at <strong>C:\</strong> then you'll get a <strong>C:\xampp</strong> directory. I prefer to install things in<strong> D:\programs</strong>, so I changed the destination to this.</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="xampp-install" border="0" alt="xampp-install" src="http://www.itauthor.com/wp-content/uploads/2010/08/xamppinstall.png" width="537" height="400" /></p>
</li>
<li>
<p>Click <strong>Install</strong>.</p>
<p>From here on it's just a case of following the on-screen instructions. </p>
</li>
<li>After XAMPP is installed,&#160; open the Windows Control Panel and double-click <strong>System</strong>. </li>
<li>Under Tasks, click <strong>Advanced system settings</strong>. </li>
<li>
<p>In the System Properties dialog box, click <strong>Environment Variables</strong>.</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="systemProperties" border="0" alt="systemProperties" src="http://www.itauthor.com/wp-content/uploads/2010/08/systemProperties.png" width="420" height="472" /></p>
<p>We're going to add the path to Perl to your system's Path environment variable, so that it knows where to find the Perl executable for running Perl programs.</p>
</li>
<li>
<p>In the Environment Variables dialog box, scroll down the list of system variables and double-click the entry for Path.</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="environVariables" border="0" alt="environVariables" src="http://www.itauthor.com/wp-content/uploads/2010/08/environVariables.png" width="394" height="434" /></p>
</li>
<li>
<p>In the Edit System Variable dialog box, click in the Variable value field, move the cursor to the end of the text and add a semicolon followed by <strong><em>&lt;destination&gt;</em>\xampp\perl\bin</strong>. For example, if you installed xampp in C:\ you would enter</p>
<p><strong>;C:\xampp\perl\bin</strong></p>
<p>In my case, my path to Perl is <strong>D:\programs\xampp\perl\bin</strong>.</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="editSysVariables" border="0" alt="editSysVariables" src="http://www.itauthor.com/wp-content/uploads/2010/08/editSysVariables.png" width="357" height="151" /></p>
</li>
<li>
<p>Click <strong>OK</strong> in this and the other two dialog boxes. </p>
<p>We'll now test that Perl is installed correctly.</p>
</li>
<li>
<p>Click the Windows button (that is, go to what used to be called the Start menu).</p>
</li>
<li>
<p>Enter <font face="Courier New">cmd</font> into the search box.</p>
<p>A command console window opens.</p>
</li>
<li>
<p>Enter: <font face="Courier New">perl -v</font></p>
<p>If everything's working correctly you'll get a message that shows the Perl version that's installed - for example:</p>
<p><font face="Courier New">This is perl, v5.10.1</font></p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="perl-v" border="0" alt="perl-v" src="http://www.itauthor.com/wp-content/uploads/2010/08/perlv.png" width="677" height="340" /></p>
<p>What this means is that, once you have a Perl script, you'll be able to <font face="Courier New">cd</font> to the directory in the command console and run the script by entering <font face="Courier New">perl myscript.pl</font>.</p>
</li>
<li>
<p>Close the command console window.</p>
<p>Now we're going to start doing the interesting stuff: writing a Perl script.</p>
</li>
<li>
<p>Open you're favourite text editor - for example, <a href="http://notepad-plus-plus.org/">Notepad++</a>.</p>
</li>
<li>
<p>Enter the following:</p>
<div style="font-family: consolas,; font-size: small" class="perl" #ffffff;?="#ffffff;?" background-color:="background-color:" monospace;="monospace;" courier,="courier," New?,="New?," Courier="Courier">
<pre style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; font: 1em/1.2em monospace; background: none transparent scroll repeat 0% 0%; vertical-align: top; padding-top: 0px"><span style="font-style: italic; color: #666666">#!D:\programs\xampp\perl\bin\perl.exe</span>&#160;&#160; &#160;&#160; <span style="color: #000000; font-weight: bold">use</span> strict<span style="color: #339933">;</span>
<span style="color: #000000; font-weight: bold">use</span> warnings<span style="color: #339933">;</span>&#160;&#160; &#160; <a href="http://perldoc.perl.org/functions/print.html"><span style="color: #000066">print</span></a> <span style="color: #ff0000">&quot;Hello world!<span style="color: #000099; font-weight: bold">\n</span>&quot;</span><span style="color: #339933">;</span>
<a href="http://perldoc.perl.org/functions/print.html"><span style="color: #000066">print</span></a> <span style="color: #ff0000">&quot;Press Return to exit.<span style="color: #000099; font-weight: bold">\n</span>&quot;</span><span style="color: #339933">;</span>&#160;&#160; 

&#160;&#160; <span style="color: #b1b100">my</span> <span style="color: #0000ff">$userInput</span> <span style="color: #339933">=</span> <span style="color: #339933">&lt;&gt;;</span></pre>
</p></div>
<p>
      <br />Note: You'll need to change the first line to match the path to <strong>perl.exe</strong> on your computer.</p>
</li>
<li>
<p>Save the file as <strong>myscript.pl</strong>. </p>
</li>
<li>
<p>Open Windows Explorer and navigate to the folder where you saved the script.</p>
</li>
<li>
<p>Right-click <strong>myscript.pl </strong>and choose <strong>Open With</strong> &gt; <strong>Choose Default Program</strong>.</p>
</li>
<li>
<p>In the Open With dialog box, click <strong>Browse</strong>.</p>
</li>
<li>
<p>Browse to your <strong>perl\bin</strong> directory and double-click <strong>perl.exe</strong>.</p>
</li>
<li>
<p>In the Open With dialog box, select the check box labelled <strong>Always use the selected program to open this kind of file</strong> and click <strong>OK</strong>.</p>
<p>&#160;<img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="perlOpenWith" border="0" alt="perlOpenWith" src="http://www.itauthor.com/wp-content/uploads/2010/08/perlOpenWith.png" width="579" height="476" /> </p>
<p>You've now associated the <strong>.pl</strong> file name extension with the <strong>perl.exe</strong> executable. Windows now knows to use <strong>perl.exe</strong> to run <strong>.pl</strong> files. </p>
<p>So let's test it out.</p>
</li>
<li>
<p>In Windows Explorer, double-click <strong>myscript.pl</strong>.</p>
</li>
<li>
<p>A command console window opens to run the script. Our two lines are printed to standard output (in layman's terms they're displayed) and (thanks to <font face="Courier New">$userInput = &lt;&gt;</font>) the script waits for you to enter something before exiting. If you didn't have this line the console window would just close and you wouldn't have time to read what was on the screen.</p>
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="helloworld-output" border="0" alt="helloworld-output" src="http://www.itauthor.com/wp-content/uploads/2010/08/helloworldoutput.png" width="677" height="340" /> </p>
<p>Job done. From now on you can write Perl scripts in your text editor and run them by just double-clicking the file in Windows Explorer.</p>
</li>
</ol>
<h2>So what?</h2>
<p>Yeh, okay, so it's just another &quot;Hello world!&quot; program. </p>
<p>But now that you've got Perl set up and you know how to run a program, you can go off and learn to do lots of stuff with Perl.</p>
<p>Me, I'm going off to write a Perl script that will run every half an hour to: parse a table on a &quot;Revision history&quot; Web page within a WebHelp site generated from Madcap Flare, look for new rows in the table (i.e. details of new changes to the WebHelp) and, if it finds any, email the details to a mailing list and then alter the HTML of the Web page adding a style tag to the rows to indicate that the mailing list has been mailed the details. </p>
<p>I hope you find this useful. Drop me a comment to let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/08/07/perl-basics-for-beginners-on-windows/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Gotchas with running a Perl script as a cron job</title>
		<link>http://www.itauthor.com/2010/08/03/gotchas-with-running-a-perl-script-as-a-cron-job/</link>
		<comments>http://www.itauthor.com/2010/08/03/gotchas-with-running-a-perl-script-as-a-cron-job/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 20:20:00 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/08/03/gotchas-with-running-a-perl-script-as-a-cron-job/</guid>
		<description><![CDATA[So you've written a Perl script and it runs fine from the command line using a command such as: perl /home/alistair/scripts/myscript.pl Great, so now you set up a cron job so that the script will run automatically. For example, let's say you want to run it every Monday morning at 4.20 am: 20 4 * [...]]]></description>
			<content:encoded><![CDATA[<p>So you've written a Perl script and it runs fine from the command line using a command such as:</p>
<p> <code>perl /home/alistair/scripts/myscript.pl </code>
<p>Great, so now you set up a cron job so that the script will run automatically. For example, let's say you want to run it every Monday morning at 4.20 am:</p>
<p> <code>20 4 * * 1 perl /home/alistair/scripts/myscript.pl </code>
<p>&#160; <br />However, when this runs it generates the following email: </p>
<p> <code>Your &quot;cron&quot; job on myserver    <br />perl /home/alistair/scripts/myscript.pl     </p>
<p>produced the following output:     </p>
<p>Can't locate DBI.pm in @INC (@INC contains: /usr/perl5/5.6.1/lib/sun4-solaris-64int /usr/perl5/5.6.1/lib /usr/perl5/site_perl/5.6.1/sun4-solaris-64int /usr/perl5/site_perl/5.6.1 /usr/perl5/site_perl /usr/perl5/vendor_perl/5.6.1/sun4-solaris-64int /usr/perl5/vendor_perl/5.6.1 /usr/perl5/vendor_perl .) at /home/alistair/scripts/myscript.pl line 15.     <br />BEGIN failed--compilation aborted at /home/alistair/scripts/myscript.pl line 15. </code>
<p>&#160; <br />What this means is that your script uses a Perl module (in this example, DBI.pm) which can't be found. The error message shows all the paths in the @INC list of paths where Perl looks for modules. So, for some reason, Perl found the module when <em>you</em> ran the script, but didn't find the module when cron ran the script as you.</p>
<p>The reason is that cron doesn't run in the same environment that you're using. When you connect to the server, you probably automatically change to your preferred shell (e.g. csh, ksh or bash) and load up a whole set of environment variables. This happens within the startup file – for example, <strong>.bashrc</strong> or <strong>.cshrc</strong>. But cron doesn't load up any of this, and it uses sh by default.</p>
<p>To see what's in @INC within <em>your</em> environment use this command:</p>
<p> <code>perl -le 'print for grep {$_ ne q{.}and -d} @INC' </code>
<p>&#160; <br />And you'll probably notice differences between the output you get and the contents of @INC listed in the error message.</p>
<p>So, to make sure @INC contains the necessary paths in any environment, load it up from within your Perl script. To do this, add something like the following to the top of your Perl script, just after the path to Perl: </p>
<p> <code>BEGIN {    <br />&#160;&#160;&#160;&#160; push @INC,( '/usr/local/lib/perl5/5.8.2/sun4-solaris',     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; '/usr/local/lib/perl5/site_perl/5.8.2/sun4-solaris',     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; '/usr/local/lib/perl5/site_perl/5.8.0/sun4-solaris',     <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; '/usr/local/lib/perl5/site_perl/5.6.1/sun4-solaris' );     <br />} </code>
<p>So now Perl will be able to find the missing Perl module. Sorted! Well maybe not.</p>
<p>If you now try running the script from the cron job you may get something like: </p>
<p> <code>Your &quot;cron&quot; job on myserver    <br />perl /home/alistair/scripts/myscript.pl     </p>
<p>produced the following output:     </p>
<p>ld.so.1: perl: fatal: relocation error: file /usr/local/lib/perl5/site_perl/5.8.0/sun4-solaris/auto/DBI/DBI.so: symbol Perl_PerlIO_stderr: referenced symbol not found Killed </code>
<p><em>Now</em> it's complaining about not finding something called <strong>ld.so.1</strong>. The problem here is with your PATH. </p>
<p>On my server, <strong>ld.so.1</strong> lives in <strong>/usr/lib</strong>. You should be able to find out where <strong>ld.so.1</strong> is by running:</p>
<p> <code>whereis ld.so.1</code>
<p><strong>/usr/lib</strong> isn't exactly an obscure place to look, but it's not in the PATH when the cron job runs. So the easy solution is to explicitly set the contents of the PATH environment variable in the cron job:</p>
<p> <code>20 4 * * 1 PATH=/usr/local/bin:/usr/bin:/usr/sbin:/usr/lib; perl /home/alistair/scripts/myscript.pl </code>
<p>Now, just before the Perl script is run, the PATH gets set to three paths: <strong>/usr/local/bin</strong>, <strong>/usr/bin</strong>, <strong>/usr/sbin</strong> and <strong>/usr/lib</strong>. The syntax used here is that required by the sh shell in which cron runs.</p>
<p>At last, job done. The script runs and you'll be emailed any output it generates.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/08/03/gotchas-with-running-a-perl-script-as-a-cron-job/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Madcap giveth and they taketh away</title>
		<link>http://www.itauthor.com/2010/08/02/madcap-giveth-and-they-taketh-away-2/</link>
		<comments>http://www.itauthor.com/2010/08/02/madcap-giveth-and-they-taketh-away-2/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 08:15:21 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Flare]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/08/02/madcap-giveth-and-they-taketh-away-2/</guid>
		<description><![CDATA[The context menu for a span in Flare 5 Madcap Flare 6.1 has been out for a while now and, if you haven't already, you really should upgrade to it if you're a Flare user – and if you're a tech writer and you're not using Flare to produce online help then do yourself a [...]]]></description>
			<content:encoded><![CDATA[<div style="display: inline; float: right; margin-left: 16pt"><img style="border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Flare-name-element" border="0" alt="Flare-name-element" src="http://www.itauthor.com/wp-content/uploads/2010/07/Flarenameelement.png" width="318" height="337" />
<p style="text-align: center; font-style: italic; margin-top: 12pt">The context menu for a span in Flare 5</p>
</p></div>
<p><a href="http://kb.madcapsoftware.com/Default_Left.htm#CSHID=Flare%2FGeneral%2FGEN1026F_FlareV6.1_Release_Notes.htm|StartTopic=Content%2FFlare%2FGeneral%2FGEN1026F_FlareV6.1_Release_Notes.htm|SkinName=MadCap-Skin">Madcap Flare 6.1</a> has been out for a while now and, if you haven't already, you really should upgrade to it if you're a Flare user – and if you're a tech writer and you're not using Flare to produce online help then do yourself a favour and <a href="http://www.madcapsoftware.com/products/flare/overview.aspx">go and take a look at it</a>.</p>
<p>Release 6.1 is confirmation that Flare is the best documentation creation tool out there. In particular, for me, this release is important because it allows you to use Subversion (SVN) from within Flare, which was broken in 6.0.</p>
<p><em>However ...</em></p>
<p>Isn't it annoying when a new release of a software application removes something that you'd got used to using in previous releases? In Flare 6.1 – for no discernable reason – you can no longer change the attributes of a span by clicking on the &quot;span&quot; marker. We use the Name attribute of a span with a certain class to create a link to our own home-grown glossary popups. This worked great in previous releases, as follows:</p>
<ul>
<li style="margin: 5pt">Select a word or phrase </li>
<li style="margin: 5pt">Choose span.glossPop from the Styles list </li>
<li style="margin: 5pt">Click &quot;span&quot; &gt; Name </li>
<li style="margin: 5pt">Add the appropriate glossary reference </li>
</ul>
<p>In 6.1 you can't do this any more. Now, just to increase your click count, you have to get to the Manage Named Elements dialog box from the Format menu.</p>
<p>Okay, so there's a workaround. But why remove something that was useful and we'd got used to using? Is it a bug or is there some sort of rationale to this change? I'll raise a Support call and report back.</p>
<p>But in my view more clicks to achieve the same result is never a good thing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/08/02/madcap-giveth-and-they-taketh-away-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP: swapping round columns &amp; rows in field/record data</title>
		<link>http://www.itauthor.com/2010/07/20/php-swapping-round-columns-rows-in-fieldrecord-data/</link>
		<comments>http://www.itauthor.com/2010/07/20/php-swapping-round-columns-rows-in-fieldrecord-data/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 18:09:22 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/07/20/php-swapping-round-columns-rows-in-fieldrecord-data/</guid>
		<description><![CDATA[I'm blogging this just because I couldn't find a solution via Google so I had to figure this out myself and it might save you some time if you're trying to do the same thing. I have some PHP script that grabs some data out of a MySQL table. However, rather than display it in [...]]]></description>
			<content:encoded><![CDATA[<p>I'm blogging this just because I couldn't find a solution via Google so I had to figure this out myself and it might save you some time if you're trying to do the same thing.</p>
<p>I have some PHP script that grabs some data out of a MySQL table. However, rather than display it in the normal way:</p>
<table border="0" cellspacing="0" cellpadding="2" width="433">
<tbody>
<tr>
<td valign="top" width="80"><strong>resultField1</strong></td>
<td valign="top" width="80"><strong>resultField2</strong></td>
<td valign="top" width="80"><strong>resultField3</strong></td>
<td valign="top" width="80"><strong>resultField4</strong></td>
<td valign="top" width="111"><strong>resultField5</strong></td>
</tr>
<tr>
<td valign="top" width="80">2010-12-24</td>
<td valign="top" width="80">55</td>
<td valign="top" width="80">red</td>
<td valign="top" width="80">1</td>
<td valign="top" width="111">Miles Davis</td>
</tr>
<tr>
<td valign="top" width="80">2011-03-30</td>
<td valign="top" width="80">65</td>
<td valign="top" width="80">yellow</td>
<td valign="top" width="80">0</td>
<td valign="top" width="111">Kevin Coyne</td>
</tr>
<tr>
<td valign="top" width="80">2011-06-16</td>
<td valign="top" width="80">82</td>
<td valign="top" width="80">purple</td>
<td valign="top" width="80">1</td>
<td valign="top" width="111">Kate Bush</td>
</tr>
</tbody>
</table>
<p>I want to swap round the rows and columns so that I display it like this:</p>
<table border="0" cellspacing="0" cellpadding="2" width="433">
<tbody>
<tr>
<td valign="top" width="80"><strong>resultField1</strong></td>
<td valign="top" width="80">2010-12-24</td>
<td valign="top" width="81">2011-03-30</td>
<td valign="top" width="79">2011-06-16</td>
</tr>
<tr>
<td valign="top" width="80"><strong>resultField2</strong></td>
<td valign="top" width="80">55</td>
<td valign="top" width="81">65</td>
<td valign="top" width="79">82</td>
</tr>
<tr>
<td valign="top" width="80"><strong>resultField3</strong></td>
<td valign="top" width="80">red</td>
<td valign="top" width="81">yellow</td>
<td valign="top" width="79">purple</td>
</tr>
<tr>
<td valign="top" width="80"><strong>resultField4</strong></td>
<td valign="top" width="80">1</td>
<td valign="top" width="81">0</td>
<td valign="top" width="79">1</td>
</tr>
<tr>
<td valign="top" width="80"><strong>resultField5</strong></td>
<td valign="top" width="80">Miles Davis</td>
<td valign="top" width="81">Kevin Coyne</td>
<td valign="top" width="79">Kate Bush</td>
</tr>
</tbody>
</table>
<p>The thing to be aware of is that when you use mysql_fetch_assoc to get stuff out of a database, for example: </p>
<p> <code>while($resultArray = mysql_fetch_assoc($selectQuery)) {   <br />&#160;&#160;&#160; <i>Do stuff here ...</i>    <br />}</code>
<p>what you get back is an associative array (that's a hash for folks like me who learnt this stuff in Perl before arriving at PHP). So in the above example $resultArray is an associative array - that is, a set of key/value pairs where the key is the field name and the value is the value in that field for that record. Each iteration through the while loop you get a different record.</p>
<p>So, in effect, it's like an array of associative arrays.</p>
<p>However, what you want in order to be able to swap round fields and columns is an associative array of arrays - that is, a set of key/value pairs where each key is a field name and each value is an array of the values for that field in each record in the data set. So what you need to do is:</p>
<ul>
<li>Iterate through each record in the data set (i.e. each row in your results) .</li>
<li>For each field in the record, assign the field value to an array, a reference to which is the value of the key/value pair in the outer associative array.</li>
</ul>
<p>If it sounds complicated, then I'm glad I'm not the only one. Actually, it's probably easier to understand by looking at the code:</p>
<p><a title="http://www.itauthor.com/wp-content/uploads/2010/07/assocArrayOfArrays-example-PrettyPrinting.html" href="http://www.itauthor.com/wp-content/uploads/2010/07/assocArrayOfArrays-example-PrettyPrinting.html">assocArrayOfArrays-example-PrettyPrinting.html</a> - This is a syntax-highlighted representation of the PHP.    <br /><a title="http://www.itauthor.com/wp-content/uploads/2010/07/assocArrayOfArrays-example.php.txt" href="http://www.itauthor.com/wp-content/uploads/2010/07/assocArrayOfArrays-example.php.txt">assocArrayOfArrays-example.php.txt</a> - This is the actual PHP saved as a .txt file so that you can see and download it.</p>
<p>And here's the PHP in action:   <br /><a title="http://www.itauthor.com/wp-content/uploads/2010/07/assocArrayOfArrays-example.php" href="http://www.itauthor.com/wp-content/uploads/2010/07/assocArrayOfArrays-example.php">assocArrayOfArrays-example.php</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/07/20/php-swapping-round-columns-rows-in-fieldrecord-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Madcap fixes PushOK issue in Flare 6.1</title>
		<link>http://www.itauthor.com/2010/07/20/madcap-fixes-pushok-issue-in-flare-6-1/</link>
		<comments>http://www.itauthor.com/2010/07/20/madcap-fixes-pushok-issue-in-flare-6-1/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 08:30:09 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Flare]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/07/20/madcap-fixes-pushok-issue-in-flare-6-1/</guid>
		<description><![CDATA[The title of this post pretty much says it all. We were using the PushOK plugin to allow us to check files in and out of our Subversion (SVN) version control system from within Madcap Flare. When we upgraded to 6.0 this broke and we duly reported it to Madcap. After a bit of to-ing [...]]]></description>
			<content:encoded><![CDATA[<p>The title of this post pretty much says it all. We were using the PushOK plugin to allow us to check files in and out of our Subversion (SVN) version control system from within Madcap Flare. When we upgraded to 6.0 this broke and we duly reported it to Madcap. After a bit of to-ing and fro-ing of questions/answers with my colleague Graham, Madcap promised to try and fix the issue for the next release.</p>
<p>And, lo and behold, version control is now working again in release 6.1.</p>
<p>Thanks Madcap - much appreciated!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/07/20/madcap-fixes-pushok-issue-in-flare-6-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Richard Hamilton: &quot;Great idea, but &#8230;&quot;</title>
		<link>http://www.itauthor.com/2010/07/05/richard-hamilton-great-idea-but/</link>
		<comments>http://www.itauthor.com/2010/07/05/richard-hamilton-great-idea-but/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 08:41:54 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[I liked this]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/07/05/richard-hamilton-great-idea-but/</guid>
		<description><![CDATA[Richard Hamilton writes about the most common reason why good ideas fail. We underestimate the pain of our current situation and overestimate the pain of adopting a new idea. In discussing what a manager can do, faced with this situation, he quotes President Harry Truman: It is amazing what you can accomplish if you do [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://managingwriters.com/2010/07/01/great-idea-but/?utm_source=feedburner&amp;utm_medium=email&amp;utm_campaign=Feed%3A+ManagingTechnicalDocumentation+%28Managing+Technical+Documentation%29">Richard Hamilton writes</a> about the most common reason why good ideas fail. We underestimate the pain of our current situation and overestimate the pain of adopting a new idea.</p>
<p>In discussing what a manager can do, faced with this situation, he quotes President Harry Truman: </p>
<blockquote><p>It is amazing what you can accomplish if you do not care who gets the credit.</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/07/05/richard-hamilton-great-idea-but/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Embrace your inner sloth</title>
		<link>http://www.itauthor.com/2010/07/01/embrace-your-inner-sloth/</link>
		<comments>http://www.itauthor.com/2010/07/01/embrace-your-inner-sloth/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 05:53:17 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[I liked this]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/?p=1674</guid>
		<description><![CDATA[Flare Single-Sourcing: My Ten Best Practices &#124; June 2010 MadNewz 10 useful tips from Chris Sullivan, Director of Technical Communication and Social Media at AVST]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.madcapsoftware.com/madnewz/june2010.aspx">Flare Single-Sourcing: My Ten Best Practices | June 2010 MadNewz</a></p>
<p>10 useful tips from Chris Sullivan, Director of Technical Communication and Social Media at AVST</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/07/01/embrace-your-inner-sloth/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sky Broadband Support &#8211; Are they taking the mickey, or what?</title>
		<link>http://www.itauthor.com/2010/06/22/sky-broadband-support-are-they-taking-the-mickey-or-what/</link>
		<comments>http://www.itauthor.com/2010/06/22/sky-broadband-support-are-they-taking-the-mickey-or-what/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 19:32:09 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/06/22/sky-broadband-support-are-they-taking-the-mickey-or-what/</guid>
		<description><![CDATA[Over the past few days my broadband connection from Sky Broadband (&#34;up to 20 Mb/s&#34; so they claim) has been getting steadily more of a bad joke. In the mornings it's workable (today I was generally getting around 2.5 Mb/s download). After lunch it becomes sluggish and tiresome to use (round about 0.75 Mb/s). But [...]]]></description>
			<content:encoded><![CDATA[<p>Over the past few days my broadband connection from Sky Broadband (&quot;up to 20 Mb/s&quot; so they claim) has been getting steadily more of a bad joke. In the mornings it's workable (today I was generally getting around 2.5 Mb/s download). After lunch it becomes sluggish and tiresome to use (round about 0.75 Mb/s). But from about 5pm you may as well give up.&#160; </p>
<p>As I write my download connection is 0.06 Mb/s. Yes, that's right, a measly 60 kilobits per second. That means a long, long wait between clicking a link on a Web page and eventually having the result page in a readable state in front of you. </p>
<p>At this speed iTunes and Tweetdeck simply don't work.</p>
<p>This, I'm assuming, is due to Sky's wonderful Traffic Management policy: the more useful you find the internet, the more we're going to try and discourage you from using it. </p>
<p>So I logged into my Sky account and went to try and raise a Support call. Here's the form they present you with, saying: <em>&quot;tell us about your query&quot;:     <br /></em><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.itauthor.com/wp-content/uploads/2010/06/image.png" width="734" height="558" />    <br />What?!!! In that space? Now they're <em>really</em> just rubbing salt in my wounds.</p>
<p>OK, so, after writing out my complaint elsewhere and then copying it into this field and submitting it, lo and behold, as I suspected (but didn't want to assume, in case I had to get all the way back there again if I was wrong) there's a follow-up screen where you can pick from options and <em>then</em> you can send Sky Support an email. But honestly! Usability: ever heard of it Sky? Did you ever roadtest this on anyone? Did you ever think how it feels to spend 10 minutes on a grindingly slow connection waiting for pages to slowly load, just to <em>get</em> to this page.</p>
<p>So I'm off to have a cold beer now, watch some football and cool down a bit.</p>
<p>And maybe by tomorrow this page will have uploaded to Web host. And maybe Sky will get back to me. But at the moment I'm not optimistic.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/06/22/sky-broadband-support-are-they-taking-the-mickey-or-what/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t sweat the spelling &#8211; they can read it just fine!</title>
		<link>http://www.itauthor.com/2010/06/22/dont-sweat-the-spelling-they-can-read-it-just-fine/</link>
		<comments>http://www.itauthor.com/2010/06/22/dont-sweat-the-spelling-they-can-read-it-just-fine/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 00:01:26 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Documentation]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/06/22/dont-sweat-the-spelling-they-can-read-it-just-fine/</guid>
		<description><![CDATA[Lots of people get all fretted up about grammar. The Grammar Nazis of this world continue to put the frighteners on the many who are impressed by rules known only by the few. But, since you're reading this, you're probably in the words business, in one way or another, so you may be like many [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.itauthor.com/wp-content/uploads/2010/06/spelling.jpg"><img style="border-bottom: 0px; border-left: 0px; margin-top: 0px; display: inline; float: right; margin-left: 15px; margin-right:0; margin-bottom: 6; border-top: 0px; border-right: 0px" title="" border="0" alt="" src="http://www.itauthor.com/wp-content/uploads/2010/06/spelling_thumb.jpg" width="271" height="377" /></a> Lots of people get all fretted up about grammar. The Grammar Nazis of this world continue to put the frighteners on the many who are impressed by rules known only by the few. But, since you're reading this, you're probably in the words business, in one way or another, so you may be like many of us who, after going through a phase of flirting with grammar fascism, have learned to relax and enjoy the magnificent beauty and power of the English language, with its huge expressive scope. And, with a little reading, you've probably figured out for yourself that if the greatest writers in the English language don't worry themselves with strict adherence to the rules laid down by the great grammar expert of the day, then there's no reason <em>you</em> should be so hampered. And if linguistics is your thing, <a href="http://languagelog.ldc.upenn.edu/nll/">Language Log</a> is a great place to go if you're looking for a sane and inquisitive approach to grammar.</p>
<p>But spelling's different. <em>Isn't it?</em></p>
<p>Surely we can never afford to lower our defences against misspelling? Spelling comes in two flavours: right and wrong. Right? And if you let spelling errors slip through then no one will be able to understand what you're on about. One spelling slip and your credibility crumbles ...&#160; You get the picture.</p>
<p>Well, that's what I've always thought. So I was surprisingly interested in an email Patricia forwarded on to me today. &quot;Surprisingly&quot; because it was one of those pass-it-on emails that used to do the rounds but which, thankfully, you don't get so much any more. Usually they have a list of lame jokes or pictures and at the end they tell you to email it to your friends. Usually I save them straight to my Trash folder. But this one contained some simple editing-type tests (for example, spotting a single N in a block of Ms) and then ended with this:</p>
<blockquote><p><font color="#334316" size="5">I cdnuolt blveiee that I cluod aulaclty uesdnatnrd what I was rdanieg. The phaonmneal pweor of the hmuan mnid, aoccdrnig to a rscheearch at Cmabrigde Uinervtisy, it dseno't mtaetr in what oerdr the ltteres in a word are, the olny iproamtnt tihng is that the frsit and last ltteer be in the rghit pclae. The rset can be a taotl mses and you can still raed it whotuit a pboerlm. This is bcuseae the huamn mnid deos not raed ervey lteter by istlef, but the word as a wlohe. Azanmig huh? Yaeh and I awlyas tghuhot slpeling was ipmorantt! If you can raed this forwrad it</font>&#160;</p>
</blockquote>
<p>It is amazing how easy it is to read this. And it did make me stop and ask myself: maybe I should lay off the obsessive marking up of every piddling little spelling mistake when I'm sent documents to review. As long as the first and last letter are correct, why worry?</p>
<p>Yeh, right! </p>
<p>I take a liberal, progressive approach to grammar. But I think I'll stick to my hard-line approach to spelling.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/06/22/dont-sweat-the-spelling-they-can-read-it-just-fine/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Tech writer: a rose by any other name &#8230;</title>
		<link>http://www.itauthor.com/2010/06/19/tech-writer-a-rose-by-any-other-name/</link>
		<comments>http://www.itauthor.com/2010/06/19/tech-writer-a-rose-by-any-other-name/#comments</comments>
		<pubDate>Sat, 19 Jun 2010 17:39:00 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Technical writer profession]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/06/19/tech-writer-a-rose-by-any-other-name/</guid>
		<description><![CDATA[There's a Russian saying I once heard at a funeral. It goes like this: A loved child has many names. I'd like to think that maybe the multiplicity of titles given to people who do the same or similar role as me suggests that we are a well beloved function within our organisations. However, experience [...]]]></description>
			<content:encoded><![CDATA[<p>There's a Russian saying I once heard at a funeral. It goes like this:</p>
<blockquote><p><em>A loved child has many names.</em></p>
</blockquote>
<p>I'd like to think that maybe the multiplicity of titles given to people who do the same or similar role as me suggests that we are a well beloved function within our organisations. However, experience tends to suggest otherwise. More likely is that the many names signify an identity crisis in the profession, or an attempt at aggrandisement or a search for job security - or a mixture of these and other factors.</p>
<p>Whatever the reason, I thought I'd list some of the names I've come across for jobs that, behind the title, can sometimes be very similar:</p>
<ul>
<li>communications officer</li>
<li>content curator</li>
<li>documentation developer</li>
<li>e-learning author</li>
<li>information architect</li>
<li>information designer</li>
<li>information engineer</li>
<li>knowledge engineer</li>
<li>technical author <em>(inf. tech author or TA)</em></li>
<li>technical communicator</li>
<li>technical writer <em>(inf: tech writer)</em></li>
<li>user assistance developer</li>
</ul>
<p>Have you come across any others?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/06/19/tech-writer-a-rose-by-any-other-name/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>EasyListener resurrected</title>
		<link>http://www.itauthor.com/2010/06/18/easylistener-resurrected/</link>
		<comments>http://www.itauthor.com/2010/06/18/easylistener-resurrected/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 16:08:00 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Podcasting]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/06/18/easylistener-resurrected/</guid>
		<description><![CDATA[One of these days browsers will be able to play audio files natively. You'll just be able to write an audio element in the HTML, point it at either an audio file, or a list of audio files, or an RSS feed containing audio files, and it'll display a smart looking audio player in the [...]]]></description>
			<content:encoded><![CDATA[<p>One of these days browsers will be able to play audio files natively. You'll just be able to write an <strong>audio</strong> element in the HTML, point it at either an audio file, or a list of audio files, or an RSS feed containing audio files, and it'll display a smart looking audio player in the Web page. </p>
<p>This got a little bit nearer with HTML5, but Firefox 3.6 doesn't support MP3 files (which most people still use for audio files on the Web), just Ogg Vorbis. IE9, on the other hand, supports MP3 but not Ogg.</p>
<p>There is a jQuery plugin called <a href="http://www.happyworm.com/jquery/jplayer/latest/demo-02.htm">jPlayer</a> which goes part of the way to providing a cross-browser solution, but it's a very techie solution and not easy to configure.</p>
<p>So, until all of this gets sorted out finally, most of us just follow the path of least resistance and use a Flash-based audio player and accept that, because Steve Jobs is on a crusade to kill off Flash, no one browsing your pages on an iPhone or an iPad is going to see the player.</p>
<p>As I write this, in June 2010, the podcast pages I produce to accompany my podcasts use a Flash player that comes as part of the Blubrry PowerPress plugin for WordPress. And at the top of the sidebar on each page I use the Easylistener player. Here's a screenshot, just to remember it by, as it's only a matter of time before I have to remove it:    <br /><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="EasyListener screenshot" border="0" alt="EasyListener screenshot" src="http://www.itauthor.com/wp-content/uploads/2010/06/EasyListener.png" width="191" height="216" />     <br />I periodically scour the internet for small, nice-looking audio players that can be pointed at an RSS feed, and Easylistener is the only one I've found that I really like. </p>
<p>William White describes the origins of Easylistener:</p>
<blockquote><p><b>Easylistener</b> was developed in the Yahoo! Media Innovation Group by William White and Joseph Magnani. It was inspired by the work of <a href="http://musicplayer.sourceforge.net/">Fabricio Zuardi</a>, <a href="http://gonze.com/blog/">Lucas Gonze</a> and many other <a href="http://yahoomediaplayer.wikia.com/wiki/History">amazing and talented engineers</a> working for Yahoo! Music in San Diego and Santa Monica, who were developing the <a href="http://mediaplayer.yahoo.com/">Yahoo! Media Player</a>.</p>
</blockquote>
<p>Easylistener feeds off <a href="http://xspf.org/quickstart/">XSPF</a>, a venerable XML format for playlists. The little chunk of code that places the player on your Web page includes a reference to a Web site that will take the URL of a Web page and will go and read that page, extract details of any audio files it finds and build them into XSPF that it then feeds back to the Easylistener Flash application.</p>
<p>The trouble is all of this was developed by Yahoo! and they provided the &quot;playthispage&quot; service that produced the XSPF for the player. But Yahoo! lost interest in (or never really noticed) Easylistener, so it was left to rot. Back in July of last year <a href="http://www.itauthor.com/2009/07/07/the-sad-and-silent-death-of-yahoos-easylistener/">I blogged</a> that the URL for the &quot;playthispage&quot; service no longer worked, which resulted in no content appearing in the player. After a while they seemed to have moved it to another server and I got the player working again. However, it recently stopped again, and this time I was sure it was dead for good.</p>
<p>I emailed William White, who had commented on my original blog post, and I asked if he could help. He got back to me to say he'd set up a PHP script that provided the same XSPF generation service. As a result, for the time being, the player is working again.</p>
<p>To get it working again I added: </p>
<pre>playthispage_url =http://musiclibre.org/playthispage/?url=</pre>
<p>to the <strong>flashVars </strong>attribute within the <strong>embed </strong>element. </p>
<p>So my <strong>embed </strong>element now looks like this <em>(note: the <strong>flashVars</strong> value should be one long string, I've broken it into lines here just for good looks)</em>: </p>
<pre>&lt;p style=&quot;margin-left:-10px; margin-top:0&quot;&gt;&#160;&#160;&#160;&#160; &#160;&#160;&#160; &lt;embed src='http://l.yimg.com/us.yimg.com/i/mig/playlistbadge/25.swf?referer='&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160; width='170'&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160; height='200'&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160; wmode='transparent'&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160; flashVars='playlist_url=http://www.itauthor.com/category/podcasts/feed&amp;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#800000"><strong>playthispage_url=http://musiclibre.org/playthispage/?url=&amp;&#160;&#160; </strong></font>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; rounded_corner=1&amp;skin_color_1=0,-100,-29,18&amp;skin_color_2=0,-100,-27,20'&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160; type='application/x-shockwave-flash'&#160;&#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160; pluginspage='http://www.adobe.com/go/getflashplayer'&#160;&#160;&#160;&#160; &#160;&#160; /&gt;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; &lt;/p&gt;&#160; </pre>
<p>
  <br />However, if you&#160; want to use Easylistener to your own Web pages, the easy way to get it is to go to: </p>
<p><a title="http://www.musiclibre.org/easylistener/" href="http://www.musiclibre.org/easylistener/">http://www.musiclibre.org/easylistener/</a></p>
<p>There's a nice little Web application there for setting the page that gets scraped for content and choosing the way you want the player to look. You then just copy the <strong>embed</strong> code and change &quot;http://webjay.org/flash/xspf_player&quot; to either &quot;http://musiclibre.org/xspf_player&quot; or &quot;http://musiclibre.org/dark_player&quot;.</p>
<p>For example, here's one I just went and grabbed. </p>
<p><embed src="http://musiclibre.org/dark_player" width="550" height="234" wmode="transparent" flashVars="playlist_url=http://feeds.feedburner.com/itauthor&#038;metadata_enabled=1&#038;metadata_position=left&#038;rounded_corner=1&#038;skin_color_1=0,0,0,0&#038;skin_color_2=0,0,0,0" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" /></p>
</p>
<p></embed></p>
</p>
</p>
</p>
</p>
<p>And if you don't see anything (or the player is empty), it means it's broken again. </p>
<p>Such a shame Yahoo! didn't continue supporting this because it's still way better than anything else out there that tries to do the same thing.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/06/18/easylistener-resurrected/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Tech Writers Need to Learn to Say Yes. However &#8230;</title>
		<link>http://www.itauthor.com/2010/06/17/tech-writers-need-to-learn-to-say-yes-however/</link>
		<comments>http://www.itauthor.com/2010/06/17/tech-writers-need-to-learn-to-say-yes-however/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 20:51:54 +0000</pubDate>
		<dc:creator>Alistair</dc:creator>
				<category><![CDATA[Technical writer profession]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/?p=1658</guid>
		<description><![CDATA[Our Sales Director phoned me up today and asked for help with some bid work that's coming up. I've already rearranged my plans for next week to help someone else with some other bid work, so I apologised and said no. As I was turning him down I was already feeling bad about it because [...]]]></description>
			<content:encoded><![CDATA[<p>Our Sales Director phoned me up today and asked for help with some bid work that's coming up. I've already rearranged my plans for next week to help someone else with some other bid work, so I apologised and said no. As I was turning him down I was already feeling bad about it because I've made a point of telling people that tech writers <em>should</em> be involved in bid writing.</p>
<p>Then this evening I read this blog post by Mark Metcalfe: <a href="http://geekswithblogs.net/TechnicalWriting/archive/2009/06/22/tech-writers-need-to-learn-to-say-yes.aspx">Tech Writers Need to Learn to Say Yes</a></p>
<p>Maybe if I'd read this I would have set out the options, rather than saying no. However, I worry that it's not quite as easy as Mark suggests. Very often requests for time come out of the blue and the start date is today. If you give a qualified yes, the person may hear what they want to hear - the yes - and conveniently forget the discussion of workload, cost and priorities. Often you are responsible to deliver work for several people at a similar managerial level and each of them thinks their work is the priority. Escalating to a more senior managerial level can be problematic because escalation generally has to happen through one of the managers concerned, who have little incentive to trouble their boss for arbitration.</p>
<p>So maybe, as well as learning to say yes more often, the tech writer needs to learn diplomacy and negotiation skills. Give a tentative yes to everybody and then get them to sort it out between them. Get everybody in a room if possible. Who's going to give way, because there's only so much you can do? So doing C means rescheduling A and B.</p>
<p>But if doing C is the best thing for the company then it would be crazy not to do it just because you'd already planned to work full-time on A and B.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/06/17/tech-writers-need-to-learn-to-say-yes-however/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The four levels of software support</title>
		<link>http://www.itauthor.com/2010/06/14/the-four-levels-of-software-support/</link>
		<comments>http://www.itauthor.com/2010/06/14/the-four-levels-of-software-support/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 05:45:00 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Documentation]]></category>
		<category><![CDATA[Technical writer profession]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/06/14/the-four-levels-of-software-support/</guid>
		<description><![CDATA[In a recent post on the Cherryleaf Technical Authors Blog, Ellis Pratt describes four levels of support that users turn to when they need help using a piece of software. I'm not sure I agree with the order Ellis places these in, so this is my reordering (and rewording) of the four levels: Ask a [...]]]></description>
			<content:encoded><![CDATA[<p>In a recent post on the <a href="http://www.cherryleaf.com/blog/2010/05/digital-natives-and-the-end-of-traditional-hotline-support/">Cherryleaf Technical Authors Blog</a>, Ellis Pratt describes four levels of support that users turn to when they need help using a piece of software. </p>
<p>I'm not sure I agree with the order Ellis places these in, so this is my reordering (and rewording) of the four levels:</p>
<ul>
<li><strong>Ask a friend</strong> - usually by instant messaging, maybe by text or email, increasingly via twitter</li>
<li><strong>Ask the local expert</strong> - Ellis calls this the 50-foot guru: &quot;the person within 50 foot of your desk who is more knowledgeable than you&quot;</li>
<li><strong>Search for help yourself </strong>- most of the time this means Googling for it. You <em>might</em> use another search engine, but Google remains the default means of finding information for most computer users</li>
<li><strong>Call support </strong>- this might mean phoning your internal IT helpdesk at work, or it might mean emailing the company that produces the software with a support question and then waiting for a reply</li>
</ul>
<p>I haven't numbered this list because the order is debatable. Some people don't like admitting they don't know stuff, so they'll always search for themselves before asking someone else. Other people have the attitude: I've got a helpdesk and I'm gonna use it - and they'll pick up the phone to support whenever they get stuck. On the other hand, I suspect people increasingly aren't prepared to wait for a reply to a support call - they've got to have the answer right now, which is usually when a local expert is required. And then for some any excuse is a good excuse to text, tweet or instant message their friends.</p>
<p>These four levels relate particularly to younger users - Ellis says &quot;primarily those under 27&quot;, I'm not sure why 27 specifically, but I know what he means. Google first emerged into the public consciousness in 1998, when today's 27 year olds were 15. By that time ICQ and AIM were well established instant messaging platforms. So people around that age and younger have lived their entire adult lives in the Google world, and often they've been using instant messaging as an everyday way of chatting to friends since they were in school. I definitely think people in their late twenties and below are less prepared to invest time digging around researching a subject to find answers than people over 40 (like me).</p>
<p>But even I sometimes don't bother looking up the documentation provided by the software company. In particular, these days I <em>never</em> bother looking up the help systems in Microsoft Office products. Experience has time and time again proved to me that it's simply a waste of time. There's obviously lots of information available from Microsoft - usually when you search the Word or Excel help you get <em>lots</em> of results - but you just spend far too long doing all the leg work, looking through page after page, and often don't find what you're looking for. Go to Google and search from there and you'll usually find the information you need among the hits on the first page of results.</p>
<p>But going back to the four levels of support identified by Ellis Pratt. What about the manual, he asks, where does that fit in? Well, in many cases, that's now one of those things users find by Googling:</p>
<blockquote><p>many may not recognise it as a manual. It might not have an index, page numbers or a table of contents, but it serves the same function.</p>
</blockquote>
<p>The traditional manual is, in most cases, an anachronism now. And traditional ways of creating documentation, based on the way we used to produce printed manuals, are equally anachronistic, even if they're now applied to creating online help. And hey, if most people get their answers about using an application by asking their friends or the local expert, do we even need documentation at all?</p>
<p>Well the answer is yes. Information still needs to be packaged and presented. It's just that this can be done in a different way now, and the information very often gets to the end consumer second or third hand. For a variety of psychological and sociological reasons there are still people who are prepared to invest time learning <em>all </em>about an application. This person becomes the guru. The guru gains some sort of reward from this role and he/she passes on the information to others, who can then share the information with their friends. These second-hand recipients of knowledge are not gurus but they can still, from time to time, supply answers to IMs or tweets asking for help.</p>
<p>Apart from the gurus, the other group that still regularly finds documentation useful is support staff. They'll search a help system on behalf of users who can't be bothered to do so for themselves. And the support staff may even be involved in writing the documentation (this is the <a href="http://www.bluemangolearning.com/">ScreenSteps</a> philosophy). Either way, the documentation is the knowledgebase or knowledge repository in which answers to users' questions are to be found, and the support staff can answer a support call with a link to a page in the documentation - typically a specific help topic.</p>
<p>As technical writers we should have no fear that there will be no work for us to do in a few years. Software is going to be around for some time to come and all but the simplest software applications need <em>some</em> sort of user assistance. But it might be that we're not working in a role called &quot;technical writer&quot; - and we almost certainly won't be writing traditional manuals with a title page, table of contents, chapters, appendixes and an index.</p>
<p>But then - despite what many people imagine - I believe most user assistance professionals aren't spending much of their time writing that sort of traditional manual right now anyway.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/06/14/the-four-levels-of-software-support/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Does online help need an overall structure?</title>
		<link>http://www.itauthor.com/2010/06/13/does-online-help-need-an-overall-structure/</link>
		<comments>http://www.itauthor.com/2010/06/13/does-online-help-need-an-overall-structure/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 09:25:00 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Online help]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/06/13/does-online-help-need-an-overall-structure/</guid>
		<description><![CDATA[The way I learned to write documentation was that you started work on a new project by spending a decent amount of time getting to know your subject matter. I don't mean getting to know the software, I mean getting an understanding of the environment in which the software will be used and the reason [...]]]></description>
			<content:encoded><![CDATA[<p>The way I learned to write documentation was that you started work on a new project by spending a decent amount of time getting to know your subject matter. I don't mean getting to know the software, I mean getting an understanding of the environment in which the software will be used and the reason for its existence - that is: what's the real value of the software to its users and what do they want to achieve by using it? This is a period of talking to the product managers and subject matter experts and reading up on everything you can find that sheds light on the world in which the product will live.</p>
<p>Next, after you've got a decent understanding of the subject matter, you then start looking at the application (what there is of it so far, plus any plans/designs/user stories you can find for what will be appearing in future iterations of work) and you talk to the project managers, developers and testers, and hopefully you also get to talk to some beta users or user advocates.</p>
<p>Then you can begin to plan your help system. What's the top-level structure going to look like? How are you going to break it down into sections and subsections. Several years ago I worked on a help system where we spent weeks drawing up a complete TOC for the help, and getting it reviewed and signed off, before we started writing a single topic. Needless to say, that was long before I'd heard of the Agile development approach.</p>
<p>But my previous couple of posts have got me thinking. If we could do away with the TOC maybe we could do away with any structure outside of individual topics. And if we could do that then we could cut out a lot of the preliminary process outlined above. It might mean we could get to the point of creating useful content much more quickly.</p>
<p>The <a href="http://www.bluemangolearning.com/screenstepslive/">ScreenSteps</a> approach is worth considering here. It goes something like this:</p>
<ul>
<li>At initial release, the help system just contains 10-20 questions that you <em>know</em> users are likely to have </li>
<li>After release of the software, the help system grows over time as users ask questions and you add the answers to those questions to the help. But note: you only add new content <em>in response to real questions</em> </li>
<li>New help topics get dropped into the help as you write them. Users can find them in a search and you can send them a link that'll get them straight to that topic. Consumers of the help don't <em>need</em> a TOC. </li>
</ul>
<p>The <a href="http://help.screensteps.com/">ScreenSteps Documentation home page</a> is a great example of a simple documentation interface:     <br /><a href="http://help.screensteps.com/"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="screensteps-docs-homepage-June2010" border="0" alt="screensteps-docs-homepage-June2010" src="http://www.itauthor.com/wp-content/uploads/2010/06/screenstepsdocshomepageJune2010.png" width="725" height="353" /></a></p>
<p>Notice how predominant the search box is. You could claim this page has a table of contents - it kind of does - but it's not like the traditional, elaborate expanding-tree TOCs you find in many online help systems. It's just a simple series of links. If you click one of these links you get to a similar page with more links, from which you go to an actual topic. So there's never more than one hierarchical level of links on screen at once, and you're never more than two clicks from a help topic.</p>
<p>And what I really like is that this allows you to keep adding topics without always having to decide where to place a link in a tree TOC. Just write the topic and get it in there for users to see. If it merits a link in one of the secondary links pages you can go and add one, but I'm pretty sure most people using this system will get to content via a search. </p>
<p>I'm convinced these days the majority of us are searchers rather than looker-uppers. So the search box serves the majority searcher community, and the links are there:</p>
<ol>
<li>For the minority looker-uppers </li>
<li>To direct people quickly to popular topics. Hopefully you're able to use the logs from your web server to spot the topics that most people go to and you can design appropriate first and second-level links to get people there fast. </li>
</ol>
<p>Maybe it's time to retire the old tri-pane online help:    <br /><a href="http://webhelp.esri.com/arcgisserver/9.3.1/dotNet/index.htm"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="ESRI-WebHelp-June2010" border="0" alt="ESRI-WebHelp-June2010" src="http://www.itauthor.com/wp-content/uploads/2010/06/ESRIWebHelpJune2010.png" width="729" height="450" /></a>    <br /><em><font color="#808080">Apologies to ESRI. I'm really not slagging their online help (acually I think it's very good). It's just the first internet-visible tri-pane WebHelp I could think of.</font></em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/06/13/does-online-help-need-an-overall-structure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Documentation the ScreenSteps way</title>
		<link>http://www.itauthor.com/2010/06/12/documentation-the-screensteps-way/</link>
		<comments>http://www.itauthor.com/2010/06/12/documentation-the-screensteps-way/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 17:33:00 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Documentation]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/06/12/documentation-the-screensteps-way/</guid>
		<description><![CDATA[I'd never heard of ScreenSteps until I got a comment on my previous blog post on putting the technical writer in touch with the software user. Greg DeVore of ScreenSteps pointed me to a post he wrote about getting the people who work the customer help desk to write the documenation. His post includes a [...]]]></description>
			<content:encoded><![CDATA[<p>I'd never heard of ScreenSteps until I got a comment on my previous blog post on putting the technical writer in touch with the software user. <cite><a href="http://www.bluemangolearning.com/blog">Greg DeVore</a></cite> of ScreenSteps pointed me to a post he wrote about <a href="http://www.bluemangolearning.com/blog/2010/05/who-should-write-your-software-documentation-not-tech-pubs/">getting the people who work the customer help desk to write the documenation</a>. His post includes a section provocatively headed &quot;Technical Publication Departments Are Ill Equipped to Create Software Documentation&quot; in which he writes:</p>
<blockquote><p>Tech Pubs have almost no interaction with actual users ... they rarely ask users what <em>they</em> need. </p>
<p>This lack of direct connection with end users means that tech pubs has no idea what information is actually important to their users. They don’t know what <em>questions</em> the users have. They don’t know how best to <em>answer</em> those questions. The end result is software documentation that meets the requirements of “stakeholders” but not users.</p>
<p>Guess what? The stakeholders aren’t going to use the documentation.</p>
</blockquote>
<p>It's thought-provoking stuff. I also love an article on the bluemango website entitled &quot;<a href="http://www.bluemangolearning.com/methodologies/software_documentation.html">5 Steps to Improving Your Software Documentation</a>&quot;. I think I love it because I feel like I wrote it myself. It sums up some of the things I believe in about documenting software - for example: make good use of screenshots and videos and, whatever you do, don't just go through the application screen by screen writing up a description of what's on each screen.</p>
<p>The guys at ScreenSteps also have an interesting take on planning documentation: don't plan. </p>
<blockquote><p>You can't possibly anticipate every question your users will ask. So don't. Just: write down actual questions people have and then answer them.</p>
</blockquote>
<p>This video, while being very much a marketing piece aimed at selling ScreenSteps, contains a lot of very sensible ideas that are worth thinking about:</p>
<p><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/ie9l7Lj5ieQ&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/ie9l7Lj5ieQ&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="480" height="385"></embed></object></p>
<p>The <em>don't plan your documentation, just answer users' questions</em> approach sounds great. But it requires a shift in how documentation gets created that will involve a whole restructuring of roles and responsibilities between departments. This might be too much of a leap for some businesses to make. </p>
<p>And what happens if you're working on a new system that hasn't got any users yet? This <em>shouldn't</em> be a problem if you have a truly Agile development process. In this case real live would-be users are getting their hands on beta versions of parts of the system at regular intervals, as it's being developed. The trick for those responsible in creating the documentation has got to be involvement in this process: tapping into the reactions of those early users, soliciting questions from them and using those questions to shape your documentation.</p>
<p>However, for old-style software development (long development cycles against long lists of requirements, followed by an eventual release) it's going to be difficult to use the ScreenSteps approach to come up with an initial help system.</p>
<p>Here's another ScreenSteps quote that echoes a personal mantra of mine:</p>
<blockquote><p>People don't <em>read</em> documentation, they reference it.</p>
<p>Your users aren’t going to cuddle up by the fire and read your software manual. They are going to read it when they get “stuck” using your software. They are going to read it when they have a question. Make sure that your documentation makes it easy for them to find the answers to their questions.</p>
</blockquote>
<p>This is something I repeatedly tell in-house staff (generally, but not exclusively, staff who've worked in the software development business for years) who still equate documentation with printed manuals and who expect technical writers to spend most of their time creating printed books. No! That's not what we're about. We're about helping users to get the most out of the software and we do that in whatever way is most effective - and that's usually <em>not</em> in the form of a printed book.</p>
<p>The <a href="http://www.bluemangolearning.com">bluemango website</a> and their blog (<a href="http://www.bluemangolearning.com/blog/">Talking in Pictures</a>) are worth having a browse around. Lots of really sound advice in there. Note: I'm not recommending ScreenSteps as a documentation platform - I've never used it, I just discovered it today - but it definitely looks like a great solution for documenting certain types of software applications.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/06/12/documentation-the-screensteps-way/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>5 Steps to Improving Your Software Documentation</title>
		<link>http://www.itauthor.com/2010/06/12/5-steps-to-improving-your-software-documentation/</link>
		<comments>http://www.itauthor.com/2010/06/12/5-steps-to-improving-your-software-documentation/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 06:39:52 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[I liked this]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/06/12/5-steps-to-improving-your-software-documentation/</guid>
		<description><![CDATA[The guys responsible for ScreenSteps talk some good sense about how to create effective documentation: http://www.bluemangolearning.com/blog/2010/05/who-should-write-your-software-documentation-not-tech-pubs/ I feel like I could have written this myself!]]></description>
			<content:encoded><![CDATA[<p>The guys responsible for ScreenSteps talk some good sense about how to create effective documentation:</p>
<p><a href="http://www.bluemangolearning.com/blog/2010/05/who-should-write-your-software-documentation-not-tech-pubs/">http://www.bluemangolearning.com/blog/2010/05/who-should-write-your-software-documentation-not-tech-pubs/</a></p>
<p>I feel like I could have written this myself!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/06/12/5-steps-to-improving-your-software-documentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What online help needs is really good search results</title>
		<link>http://www.itauthor.com/2010/06/11/what-online-help-needs-is-really-good-search-results/</link>
		<comments>http://www.itauthor.com/2010/06/11/what-online-help-needs-is-really-good-search-results/#comments</comments>
		<pubDate>Fri, 11 Jun 2010 22:35:54 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Online help]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/06/11/what-online-help-needs-is-really-good-search-results/</guid>
		<description><![CDATA[Tom Johnson recently wrote a really though-provoking post about the scope of help content. What you’re reading here is based on a comment I added to Tom’s post. Tom describes helping out with user support for an application. He also works on the online help for this application. He describes how useful this contact with [...]]]></description>
			<content:encoded><![CDATA[<p>Tom Johnson recently wrote <a href="http://idratherbewriting.com/2010/06/11/faulty-assumptions-about-the-scope-of-help-content-organizing-content-1/comment-page-1/#comment-153765">a really though-provoking post</a> about the scope of help content. What you’re reading here is based on a comment I added to Tom’s post.</p>
<p>Tom describes helping out with user support for an application. He also works on the online help for this application. He describes how useful this contact with users can be. He writes:</p>
<blockquote><p>I know that this support role, while annoying at times, is also advantageous because it gives me an insight into the real problems users are having. Through this close connection and user-informed perspective, my help can provide real answers that users want.</p>
</blockquote>
<p>Talking to users. Wow! That's how it <i>should</i> work. My own experience, documenting enterprise-level software, is that the tech writers and the end users often never come into contact. Our end users (yes, I know, horrible expression, but what I mean is not the administrative users, or the managers, or the customer’s support staff, and not the decision makers who you sold the system to originally but who will never actually use it, but the people who have to use the software day-in, day-out as part of their jobs) … hang on, let me start that sentence again. Our end users contact their internal support staff and, if <i>they</i> can't help, those support people log a support call with our third-party call centre and it then gets picked up by our support people who generally manage to solve the issue very quickly and without reference to anyone else. The tech writers usually never find out about these support calls <i>unless</i> they take the time to check the support system regularly, or they hang out with the support guys (which tends not to happen just because we're in a different part of the building). So it's not unusual for tech writers to work on a product for months, or years, and never talk to an end user. Their knowledge of the end user tends to come second hand, through the product manager or some other SME. And it just stands to reason that if you had a direct line to your end users your documentation would inevitably be much more fit for purpose, and would get better over time.</p>
<p>So Tom’s post got me thinking: maybe working periodically in support is something all tech writers should do.</p>
<p>Tom’s post also referred to <a href="http://www.itauthor.com/2008/08/30/itauthor-podcast-14-august-29th-2008-documentation-and-agile-software-development/">an old ITauthor podcast</a> where Graham and I discussed how much you should document. I must admit I’d completely forgotten about that one. I should probably listen to it again some time.</p>
<p>But what I think I probably said in that podcast, and it’s what I really believe, is that tech writers have to get away from the habit of just bashing on and documenting stuff. Time and time again I've seen tech writers succumb to the temptation to just document whatever they see in the user interface. This is always going to result in pointlessly bloated documentation. It's the scatter-gun approach: <em>&quot;How should I know what users will want to know about? So I'm just going to document as much as possible.&quot;</em></p>
<p>I'm convinced the result is that a lot of time is wasted documenting things that, in a well designed interface, are obvious to the user. Those things tend to be the things users do most of the time: the basic, nuts and bolts operations that were in the original design of the application. The interface makes it easy to figure out how to do those things, so users don't need help with that. It tends to be the secondary things - the stuff that got added to the application in later iterations, and which are accessed via a menu item rather than being immediately obvious - it's those things that users tend to need some help with. But generally, to make the initial help system at least adequate for release, the tech writer needs to do a lot of thinking up front, ask a lot of questions, and get a pretty good understanding of the workflow through the application, and what tasks different sorts of users are trying to complete, and a fairly clear picture of how the application will really be used in day-to-day practice, before he or she starts writing help topics.</p>
<p>Tom’s post and the comments after it talk about how, as a result of users asking questions, and perhaps contributing answers to user forums, a help system can continue to grow and improve. And it’s obviously a good idea: after the initial, good-enough-for-release version of the help, with the assistance of users the user assistance gets better and better over time. In practice I think this is still all too often an aspiration rather than a reality. </p>
<p>Tom, who I’m assuming works on hosted WebHelp, describes how whenever he gets a support question that is now answered in the help, he goes and writes a topic answering the question, rebuilds the help and then replies to the user with a reference to the new topic. I think this is a great idea, but it only works where you host the WebHelp. If your customers host the help on their own server, or if the online help is traditional client-side CHM files, then it can be months before users see the next version of the help system.</p>
<p>One of the comments I really liked was by Larry Kunz. He writes: </p>
<blockquote><p>As community-based documentation really takes off, I envision users’ requests going into forums (or something similar), and the answers being posted to the same forums - either by you or by other users. If the user community really becomes active, your role evolves into more of a curator (editing user-generated content and tagging it for findability) and less of a content producer.</p>
</blockquote>
<p>Is this yet another alternative title for our role: <b>information curator</b>?</p>
<p>After commenting on the post I continued to mull it over, in particular the issue of finding information in a help system that just keeps growing and growing. Tom writes:</p>
<blockquote><p>in a thoroughly massive help file, it becomes more difficult to find information. If a user expands a TOC to find dozens of subfolders and sub-subfolders and scores of topics within each subfolder, the system of navigation will become intimidating and cumbersome. The user will revert to keyword searches as a primary means of finding searches. After a few fruitless keyword searches without the right results, he or she may simply give up. The easy-to-use navigation system suffocates under the load of help topics</p>
</blockquote>
<p>This gave me a radical thought. Isn’t it about time to do away with the TOC and the index in online help systems? Both the table of contents and the index features of printed books that were pulled across into online help, way before Google appeared in our lives, and maybe they’re just not appropriate for online help.</p>
<p>Surely what we need is <i>really good search results</i>. How do 99.9999…% of people find information online? Through a search engine. The more I think about it the more convinced I am that, if your online help had a great search engine, you wouldn’t need to worry about the system growing and growing as questions and feedback from users helped you add the information they wanted to find. Better still would be the situation where a user community forum helped you build into the help the answers to questions people had <i>actually</i> asked, rather than the tech writer’s best guess of what they <i>might</i> ask.</p>
<p>So come on help tool vendors, give us <i>really good search results</i>. The search functionality in Madcap Flare’s WebHelp leaves a lot to be desired - try doing quoted searches. If you publish WebHelp that’s publicly visible, you can use Google as your search engine and, while far from perfect, that’s probably going to give you the best available search results right now. But what if your WebHelp is hosted on an isolated corporate network? Or what if you’re tied to delivering old-style CHM help for the foreseeable future? Back to the help tool vendors in that case. Come on: give us <i>really good search results</i>.</p>
<p>From making a habit of talking to non-technical people about how they figure out how to use software, I’m convinced the majority of people wouldn’t bat an eyelid if the TOC and index disappeared from help system and the landing page for help was just a simple, Google-like page with a box to type in your question and a big old <b>Search</b> button.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/06/11/what-online-help-needs-is-really-good-search-results/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Tips for document collaboration</title>
		<link>http://www.itauthor.com/2010/05/23/tips-for-document-collaboration/</link>
		<comments>http://www.itauthor.com/2010/05/23/tips-for-document-collaboration/#comments</comments>
		<pubDate>Sun, 23 May 2010 14:55:52 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[I liked this]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/2010/05/23/tips-for-document-collaboration/</guid>
		<description><![CDATA[Some tips for document collaboration from the Agilewords Blog. I'm not sure I'm sold on Agilewords. How's it better than all the countless other ways of doing shared documents? How's it better for reviewing than Acrobat Pro? But these tips are worth a look.]]></description>
			<content:encoded><![CDATA[<p> Some <a href="http://blog.agilewords.com/2010/04/tips-for-document-collaboration/">tips for document collaboration</a> from the Agilewords Blog. </p>
<p>I'm not sure I'm sold on Agilewords. How's it better than all the countless other ways of doing shared documents? How's it better for reviewing than Acrobat Pro?</p>
<p>But these tips are worth a look.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/05/23/tips-for-document-collaboration/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ITauthor podcast #34 &#8211; Testing testing 123</title>
		<link>http://www.itauthor.com/2010/05/23/itauthor-podcast-34-testing-testing-123/</link>
		<comments>http://www.itauthor.com/2010/05/23/itauthor-podcast-34-testing-testing-123/#comments</comments>
		<pubDate>Sun, 23 May 2010 14:29:53 +0000</pubDate>
		<dc:creator>ac</dc:creator>
				<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://www.itauthor.com/?p=1632</guid>
		<description><![CDATA[Test Manager Richard Paterson joins Graham Campbell and me over lunchtime sandwiches in a rather noisy office to talk about software testing. Technical writers in a software development department often feel like third-class citizens, with programmers as the top-dogs and testers being granted second-class status. This engenders a certain camaraderie between fellow poor relations, testers [...]]]></description>
			<content:encoded><![CDATA[<p><img style="padding-bottom: 0px; border-right-width: 0px; margin: 0px; padding-left: 13px; padding-right: 0px; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Richard Paterson" border="0" alt="Richard Paterson" src="http://www.itauthor.com/wp-content/uploads/2010/05/richard.jpg" width="286" height="264" />Test Manager <strong>Richard Paterson</strong> joins Graham Campbell and me over lunchtime sandwiches in a rather noisy office to talk about software testing.</p>
<p>Technical writers in a software development department often feel like third-class citizens, with programmers as the top-dogs and testers being granted second-class status. This engenders a certain camaraderie between fellow poor relations, testers and tech writers, filling, as they do, roles that are sometimes viewed as subordinate or auxiliary to the majority party within the development department. The work of testers and tech writers often starts at around the same time, and both roles can be subject to &quot;ship early&quot; pressure to keep the time available to them to a minimum.</p>
<p>But like tech writers, testers - rightly - believe that what they do is a crucial, if undervalued, function for the creation of quality software products.</p>
<p>Amongst other things, I ask Richard:</p>
<ul>
<li>What is software testing? </li>
<li>Why do we need testers? (Can't programmers just test their own code?) </li>
<li>What's the difference between: unit tests, integration tests, regression tests, functional tests, user acceptance tests, lean testing ...? </li>
<li>How do testers and programmers get on? (Don't programmers get really irritated by testers finding bugs in software the programmer thought was working fine?) </li>
<li>Why can't we introduce automated testing and save on all the money we're paying all those testers? </li>
<li>Are technical writers as useful to testers as testers are to technical writers? </li>
<li>Who'd be a tester?      </li>
</ul>
<p>Got any thoughts on the matter? Leave a comment below.</p>
<p>For something completely different, have a read of Richard's blog:    <br /><a href="http://rocketbootkid.blogspot.com/">ROCKETBOOTKID AND BOOSTERBOY'S PALACE OF RIGHTEOUS JUSTICE.</a></p>
</p>
<hr />
<p style="text-align: center">The music I play at the beginning and end of the show is by Amplifico. You can hear more of their music at <a href="http://music.podshow.com/music/listeners/artistdetails.php?BandHash=cdef1ecef0d12844ed816b922fcada5d">Podshow</a>.</p>
<form method="post" action="http://www.feedblitz.com/f/f.fbz?AddNewUserDirect">
<input type="hidden" name="sub" />
<p style="text-align: center">Want to get emailed next time I publish a podcast? <label for="email">Enter your email address:</label></p>
<p style="text-align: center">
<input name="EMAIL" />
<input type="hidden" name="FEEDID" />
<input type="hidden" name="PUBLISHER" />
<input type="submit" />&#160;&#160; <a href="http://www.feedblitz.com/f?previewfeed=226103">Preview</a></p>
</p></form>
<div id="subscription-services">
<p style="text-align: center"><a title="RSS Feed" href="http://feeds.feedburner.com/itauthor"><img alt="RSS Feed" src="/wp-content/uploads/podcasts/feedreader-icons/feed_16x16.png" /></a> <a title="RSS Feed" href="http://feeds.feedburner.com/itauthor">RSS Feed</a>&#160;&#160; <a title="Add to del.icio.us" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.itauthor.com%2Fpodcastarchive"><img alt="Add to del.icio.us" src="/wp-content/uploads/podcasts/feedreader-icons/delicious.gif" /></a> <a title="Add to del.icio.us" href="http://del.icio.us/post?url=http%3A%2F%2Fwww.itauthor.com%2Fpodcastarchive">Add to del.icio.us</a>&#160;&#160; <a title="Add to Digg" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.itauthor.com%2Fpodcastarchive%2F"><img alt="Add to del.icio.us" src="/wp-content/uploads/podcasts/feedreader-icons/digg.gif" /></a> <a title="Add to Digg" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.itauthor.com%2Fpodcastarchive%2F">Add to Digg</a>&#160;&#160; <a title="Add to iTunes" href="itpc://feeds.feedburner.com/itauthor"><img alt="Add to iTunes" src="/wp-content/uploads/podcasts/feedreader-icons/itunes.gif" /></a> <a title="Add to iTunes" href="itpc://feeds.feedburner.com/itauthor">Add to iTunes</a>&#160;&#160; <a title="Add to Zune" href="zune://subscribe/?ITauthor%20Podcast=http://feeds.feedburner.com/itauthor"><img alt="Add to Zune" src="/wp-content/uploads/podcasts/feedreader-icons/zune.png" /></a> <a title="Add to Zune" href="zune://subscribe/?ITauthor%20Podcast=http://feeds.feedburner.com/itauthor">Add to Zune</a>&#160;&#160; <a title="Add to Google" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fitauthor"><img alt="Add to Google" src="/wp-content/uploads/podcasts/feedreader-icons/google.png" /></a> <a title="Add to Google" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fitauthor">Add to Google</a></p>
<p style="text-align: center; font-family: tahoma,verdana,arial; color: rgb(153,153,153); font-size: x-small">ITauthor.com/podcasts – the technical writing podcast</p>
</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.itauthor.com/2010/05/23/itauthor-podcast-34-testing-testing-123/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
<enclosure url="http://media.blubrry.com/itauthor/www.itauthor.com/wp-content/uploads/podcasts/ITauthor-podcast34-May2010.mp3" length="62376249" type="audio/mpeg" />
			<itunes:subtitle>Test Manager Richard Paterson joins Graham Campbell and me over lunchtime sandwiches in a rather noisy office to talk about software testing.  Technical writers in a software development department often feel like third-class citizens,</itunes:subtitle>
		<itunes:summary>Test Manager Richard Paterson joins Graham Campbell and me over lunchtime sandwiches in a rather noisy office to talk about software testing.  Technical writers in a software development department often feel like third-class citizens, with programmers as the top-dogs and testers being granted second-class status. This engenders a certain camaraderie between fellow poor relations, testers and tech writers, filling, as they do, roles that are sometimes viewed as subordinate or auxiliary to the majority party within the development department. The work of testers and tech writers often starts at around the same time, and both roles can be subject to &quot;ship early&quot; pressure to keep the time available to them to a minimum.  But like tech writers, testers - rightly - believe that what they do is a crucial, if undervalued, function for the creation of quality software products.  Amongst other things, I ask Richard:     What is software testing?     Why do we need testers? (Can&#039;t programmers just test their own code?)     What&#039;s the difference between: unit tests, integration tests, regression tests, functional tests, user acceptance tests, lean testing ...?     How do testers and programmers get on? (Don&#039;t programmers get really irritated by testers finding bugs in software the programmer thought was working fine?)     Why can&#039;t we introduce automated testing and save on all the money we&#039;re paying all those testers?     Are technical writers as useful to testers as testers are to technical writers?     Who&#039;d be a tester?         Got any thoughts on the matter? Leave a comment below.  For something completely different, have a read of Richard&#039;s blog:    ROCKETBOOTKID AND BOOSTERBOY&#039;S PALACE OF RIGHTEOUS JUSTICE.        The music I play at the beginning and end of the show is by Amplifico. You can hear more of their music at Podshow.      Want to get emailed next time I publish a podcast? Enter your email address:          Preview       RSS Feed    Add to del.icio.us    Add to Digg    Add to iTunes    Add to Zune    Add to Google    ITauthor.com/podcasts – the technical writing podcast</itunes:summary>
		<itunes:author>Alistair Christie - ITauthor.com</itunes:author>
		<itunes:explicit>no</itunes:explicit>
		<itunes:duration>1:04:53</itunes:duration>
	</item>
	</channel>
</rss>

