<?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/"
	>

<channel>
	<title>Gordon Turner</title>
	<atom:link href="http://blog.gordonturner.ca/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.gordonturner.ca</link>
	<description>A waste of bandwidth</description>
	<lastBuildDate>Wed, 23 Mar 2011 12:53:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>Swipe gesture in UIAutomation</title>
		<link>http://blog.gordonturner.ca/2011/03/23/swipe-gesture-in-uiautomation/</link>
		<comments>http://blog.gordonturner.ca/2011/03/23/swipe-gesture-in-uiautomation/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 12:44:54 +0000</pubDate>
		<dc:creator>Gordo</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[UIAutomation]]></category>

		<guid isPermaLink="false">http://blog.gordonturner.ca/?p=378</guid>
		<description><![CDATA[It took me a while to figure this out, but the key is that in your gesture coordinates, the values cannot result in a perfect translation left to right (and presumable up and down, but I didn&#8217;t test a vertical gesture.) I use a horizontal swipe gesture on the navigationBar to bring up an alert [...]]]></description>
			<content:encoded><![CDATA[<p>It took me a while to figure this out, but the key is that in your gesture coordinates, the values cannot result in a perfect translation left to right (and presumable up and down, but I didn&#8217;t test a vertical gesture.)</p>
<p>I use a horizontal swipe gesture on the navigationBar to bring up an alert that contains diagnostic information.</p>
<p><code>
// Boiler plate code.
var target = UIATarget.localTarget();
var application = target.frontMostApp();
var mainWindow = application.mainWindow();
// Swipe gesture to bring up console.
var navigationBar = mainWindow.navigationBar();
navigationBar.dragInsideWithOptions({startOffset:{x:0.0, y:0.0}, endOffset:{x:0.8, y:0.10}, duration:0.1});</code></p>
<p>Reference: <a href="http://confluence.gordonturner.ca/x/HIBL">wiki</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gordonturner.ca/2011/03/23/swipe-gesture-in-uiautomation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iOS Simulator detection</title>
		<link>http://blog.gordonturner.ca/2011/03/23/ios-simulator-detection/</link>
		<comments>http://blog.gordonturner.ca/2011/03/23/ios-simulator-detection/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 12:25:07 +0000</pubDate>
		<dc:creator>Gordo</dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://blog.gordonturner.ca/?p=373</guid>
		<description><![CDATA[When working with iOS features that are only available on the devices and not in the Simulator, it can be helpful for testing to pop an alert or provide &#8216;stub&#8217; data. Fortunately there are some definitions provided by Apple to help identify what the code is targeted for. #if TARGET_IPHONE_SIMULATOR // Code for simulator. #else [...]]]></description>
			<content:encoded><![CDATA[<p>When working with iOS features that are only available on the devices and not in the Simulator, it can be helpful for testing to pop an alert or provide &#8216;stub&#8217; data.</p>
<p>Fortunately there are some definitions provided by Apple to help identify what the code is targeted for.</p>
<p><code>#if TARGET_IPHONE_SIMULATOR
  // Code for simulator.
#else
  // Code for device
#endif</code></p>
<p>Reference: <a href="http://confluence.gordonturner.ca/x/AYAe">wiki</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gordonturner.ca/2011/03/23/ios-simulator-detection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UIAutomation &#8216;typing&#8217; on the keyboard</title>
		<link>http://blog.gordonturner.ca/2011/03/21/uiautomation-typing-on-the-keyboard/</link>
		<comments>http://blog.gordonturner.ca/2011/03/21/uiautomation-typing-on-the-keyboard/#comments</comments>
		<pubDate>Mon, 21 Mar 2011 19:21:30 +0000</pubDate>
		<dc:creator>Gordo</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[UIAutomation]]></category>

		<guid isPermaLink="false">http://blog.gordonturner.ca/?p=364</guid>
		<description><![CDATA[I was looking for a way to use the iOS keyboard directly, Stack oveflow to the rescue again: // Boiler plate code. var target = UIATarget.localTarget(); var application = target.frontMostApp(); var mainWindow = application.mainWindow(); var keyBoard=application.keyboard(); var keys = keyBoard.keys(); keys.firstWithName("g").tap(); target.delay(0.5); keys.firstWithName("o").tap(); target.delay(0.5); keys.firstWithName("r").tap(); target.delay(0.5); keys.firstWithName("d").tap(); target.delay(0.5); keys.firstWithName("o").tap(); target.delay(0.5); Reference: stackoverflow wiki]]></description>
			<content:encoded><![CDATA[<p>I was looking for a way to use the iOS keyboard directly, Stack oveflow to the rescue again:</p>
<p><code> 
// Boiler plate code.
var target = UIATarget.localTarget();
var application = target.frontMostApp();
var mainWindow = application.mainWindow();
var keyBoard=application.keyboard();
var keys = keyBoard.keys(); 
keys.firstWithName("g").tap();
target.delay(0.5);
keys.firstWithName("o").tap();
target.delay(0.5);
keys.firstWithName("r").tap();
target.delay(0.5);
keys.firstWithName("d").tap();
target.delay(0.5);
keys.firstWithName("o").tap();
target.delay(0.5);</code></p>
<p>Reference:
<a href="http://stackoverflow.com/questions/4859842/need-help-automate-iphone-keyboard-input-throught-javascript">stackoverflow</a> <a href="http://confluence.gordonturner.ca/x/HIBL">wiki</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gordonturner.ca/2011/03/21/uiautomation-typing-on-the-keyboard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setting ORGANIZATIONNAME in Xcode</title>
		<link>http://blog.gordonturner.ca/2011/03/13/setting-organizationname-in-xcode/</link>
		<comments>http://blog.gordonturner.ca/2011/03/13/setting-organizationname-in-xcode/#comments</comments>
		<pubDate>Sun, 13 Mar 2011 14:42:09 +0000</pubDate>
		<dc:creator>Gordo</dc:creator>
				<category><![CDATA[iOS]]></category>

		<guid isPermaLink="false">http://blog.gordonturner.ca/?p=353</guid>
		<description><![CDATA[When a new file is created in Xcode, there is a boiler plate copyright section at the top of the document, which by default is set to &#8216;ORGANIZATIONNAME&#8217;. The easiest way to change this is to use the *defaults* app to write to the Xcode config: defaults write com.apple.Xcode PBXCustomTemplateMacroDefinitions '{ORGANIZATIONNAME="Gordon Turner";}' Works with Xcode [...]]]></description>
			<content:encoded><![CDATA[<p>When a new file is created in Xcode, there is a boiler plate copyright section at the top of the document, which by default is set to &#8216;ORGANIZATIONNAME&#8217;.</p>
<p>The easiest way to change this is to use the *defaults* app to write to the Xcode config:</p>
<p><code>defaults write com.apple.Xcode PBXCustomTemplateMacroDefinitions '{ORGANIZATIONNAME="Gordon Turner";}'</code></p>
<p>Works with Xcode 3.2.6.</p>
<p>Reference:
<a href="http://confluence.gordonturner.ca/x/DAA_">wiki</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gordonturner.ca/2011/03/13/setting-organizationname-in-xcode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using gdb to print out Objective-C objects</title>
		<link>http://blog.gordonturner.ca/2011/03/07/using-gdb-to-print-out-objective-c-objects/</link>
		<comments>http://blog.gordonturner.ca/2011/03/07/using-gdb-to-print-out-objective-c-objects/#comments</comments>
		<pubDate>Tue, 08 Mar 2011 00:41:28 +0000</pubDate>
		<dc:creator>Gordo</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[iOS Objective-C]]></category>

		<guid isPermaLink="false">http://blog.gordonturner.ca/?p=346</guid>
		<description><![CDATA[Sometimes the object that you want to debug is more complicated then an int or string. In those situations, you will need to &#8216;pass a message&#8217; to the object: po (int)[textField superview] Even then, there are occasions where you will have to use a selector: print (int)[receivedData performSelector:@selector(count) ] And finally, use a selector with [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes the object that you want to debug is more complicated then an int or string.  </p>
<p>In those situations, you will need to &#8216;pass a message&#8217; to the object:</p>
<p><code>po (int)[textField superview]</code></p>
<p>Even then, there are occasions where you will have to use a selector:</p>
<p><code>print (int)[receivedData performSelector:@selector(count) ]</code></p>
<p>And finally, use a selector with an object as an argument:</p>
<p><code>print (int)[receivedData performSelector:@selector(count) withObject:myObject ]</code></p>
<p>Reference: 
<a href="http://stackoverflow.com/questions/56472/sending-messages-to-objects-while-debugging-objective-c-in-gdb-without-symbols">stackoverflow</a>
<a href="http://confluence.gordonturner.ca/x/GoAR">wiki</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gordonturner.ca/2011/03/07/using-gdb-to-print-out-objective-c-objects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TypeLess v2.1 is live!</title>
		<link>http://blog.gordonturner.ca/2010/10/18/typeless-v2-1-is-live/</link>
		<comments>http://blog.gordonturner.ca/2010/10/18/typeless-v2-1-is-live/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 12:47:52 +0000</pubDate>
		<dc:creator>Gordo</dc:creator>
				<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://blog.gordonturner.ca/?p=341</guid>
		<description><![CDATA[Minor bug fix release to v2.0, check it out here: http://gordonturner.ca/TypeLess/ G.]]></description>
			<content:encoded><![CDATA[<p>Minor bug fix release to v2.0, check it out here:</p>
<p><a href="http://gordonturner.ca/TypeLess/">http://gordonturner.ca/TypeLess/</a></p>
<p>G.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gordonturner.ca/2010/10/18/typeless-v2-1-is-live/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TypeLess v1.1 is live!</title>
		<link>http://blog.gordonturner.ca/2010/06/13/typeless-v1-1-is-live/</link>
		<comments>http://blog.gordonturner.ca/2010/06/13/typeless-v1-1-is-live/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 11:31:54 +0000</pubDate>
		<dc:creator>Gordo</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[PSA]]></category>

		<guid isPermaLink="false">http://blog.gordonturner.ca/?p=338</guid>
		<description><![CDATA[A little behind the release, but v1.1 is available, check out the website here.]]></description>
			<content:encoded><![CDATA[<p>A little behind the release, but v1.1 is available, check out the website <a href="http://gordonturner.ca/TypeLess/">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gordonturner.ca/2010/06/13/typeless-v1-1-is-live/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TypeLess v1.0 is live!</title>
		<link>http://blog.gordonturner.ca/2010/05/14/typeless-v1-0-is-live/</link>
		<comments>http://blog.gordonturner.ca/2010/05/14/typeless-v1-0-is-live/#comments</comments>
		<pubDate>Fri, 14 May 2010 18:49:10 +0000</pubDate>
		<dc:creator>Gordo</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[PSA]]></category>

		<guid isPermaLink="false">http://blog.gordonturner.ca/?p=335</guid>
		<description><![CDATA[It is a version 1.0, so go easy on the reviews please: http://gordonturner.ca/TypeLess/ Accepting bug reports, feature requests and language localization offers G.]]></description>
			<content:encoded><![CDATA[<p>It is a version 1.0, so go easy on the reviews please:</p>
<p><a href="http://gordonturner.ca/TypeLess/">http://gordonturner.ca/TypeLess/</a></p>
<p>Accepting bug reports, feature requests and language localization offers <img src='http://blog.gordonturner.ca/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>G.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gordonturner.ca/2010/05/14/typeless-v1-0-is-live/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TypeLess v1.0 submitted</title>
		<link>http://blog.gordonturner.ca/2010/05/06/typeless-v1-0-submitted/</link>
		<comments>http://blog.gordonturner.ca/2010/05/06/typeless-v1-0-submitted/#comments</comments>
		<pubDate>Thu, 06 May 2010 13:32:44 +0000</pubDate>
		<dc:creator>Gordo</dc:creator>
				<category><![CDATA[iPhone]]></category>
		<category><![CDATA[PSA]]></category>

		<guid isPermaLink="false">http://blog.gordonturner.ca/?p=332</guid>
		<description><![CDATA[Submitted TypeLess v1.0 to the AppStore for approval on 2010-05-05, happy to get v1.0 shipped. There are still things to fix, but sometimes you have to publish it and work on the next release. http://gordonturner.ca/TypeLess]]></description>
			<content:encoded><![CDATA[<p>Submitted TypeLess v1.0 to the AppStore for approval on 2010-05-05, happy to get v1.0 shipped.  </p>
<p>There are still things to fix, but sometimes you have to publish it and work on the next release.</p>
<p><a href="http://gordonturner.ca/TypeLess">http://gordonturner.ca/TypeLess</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gordonturner.ca/2010/05/06/typeless-v1-0-submitted/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wireshark</title>
		<link>http://blog.gordonturner.ca/2010/04/21/wireshark/</link>
		<comments>http://blog.gordonturner.ca/2010/04/21/wireshark/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 17:20:59 +0000</pubDate>
		<dc:creator>Gordo</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[howto]]></category>

		<guid isPermaLink="false">http://blog.gordonturner.ca/?p=316</guid>
		<description><![CDATA[Technical difficulty 4 You should know what http means and how to play a flv file. Wireshark is my new Toy. Let me tell you why. Ever try to save a Youtube video? Save a streamed song or lecture? In Canada, both actions usually are protected as long as it is for private or personal [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Technical difficulty 4</strong> You should know what http means and how to play a flv file.</p>
<p>Wireshark is my new Toy.  Let me tell you why.</p>
<p><strong>Ever try to save a Youtube video?</strong></p>
<p><strong>Save a streamed song or lecture?</strong></p>
<p>In Canada, both actions usually are protected as long as it is for private or personal use.  Practically, saving flash embedded content is a pain.</p>
<p><strong>Aside</strong> It is possible to examine the browser cache directory or install plugins to intercept the embedded content.  If that works for you great.</p>
<p><strong>That is where Wireshark comes in.</strong>  It is a cross platform network protocol analyzer based on Ethereal.  </p>
<p><strong>What does that really mean?</strong>   Well it lets you examine the traffic coming into your computer, including the embedded content.</p>
<p>First grab Wireshark here: <a href="http://www.wireshark.org/">http://www.wireshark.org/</a></p>
<p>Next, install it and fire it up.</p>
<p>The following are instructions for capturing video from Youtube:</p>
<ol>
<li>Start capture on network card.</li>
<li>Navigate to youtube video page, wait for video to completely load into the cache.</li>
<li>Stop caputure on the network card.</li>
<li>In the &#8216;Filter:&#8217;, paste &#8216;frame.len == 1434&#8242;, this should match the length of the segments of the video as it was downloading.</li>
<li>Right click on one of the segments and click on &#8216;Follow TCP Stream&#8217;.</li>
<li>This will assemble the TCP stream of the video with the headers.</li>
<li>Click on the &#8216;Save As&#8217; and save locally.</li>
<li>Open a editor, like textpad and strip all the headers out of the top of the file.</li>
<li>Test it in a player like vlc.</li>
</ol>
<p>Similar steps are required for flash files.</p>
<p><strong>For more details see my <a href="http://confluence.gordonturner.ca/display/NOTES/Wireshark">Wireshark notes</a>.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.gordonturner.ca/2010/04/21/wireshark/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

