<?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>Jumping Through Hoops &#187; apple</title>
	<atom:link href="http://blog.jameshiggs.com/tags/apple/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.jameshiggs.com</link>
	<description>James Higgs&#039;s Blog</description>
	<lastBuildDate>Wed, 03 Feb 2010 14:16:44 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>iPhone: how to create a transparent table header</title>
		<link>http://blog.jameshiggs.com/2009/03/01/transparent-table-header-uitableview/</link>
		<comments>http://blog.jameshiggs.com/2009/03/01/transparent-table-header-uitableview/#comments</comments>
		<pubDate>Sun, 01 Mar 2009 13:54:30 +0000</pubDate>
		<dc:creator>higgis</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[cocoa touch]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://blog.jameshiggs.com/?p=176</guid>
		<description><![CDATA[A couple of weeks ago I was wondering how you created a transparent header for a table view on the iPhone like the one that&#8217;s in the built in contacts app detail view. Here&#8217;s a video of the contacts app so that you can see what I&#8217;m trying to achieve:
  
Initially, I thought that [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago <a href="http://twitter.com/higgis/status/1224333646">I was wondering</a> how you created a transparent header for a table view on the iPhone like the one that&#8217;s in the built in contacts app detail view. Here&#8217;s a video of the contacts app so that you can see what I&#8217;m trying to achieve:</p>
<p><object width="193" height="371"><param name="movie" value="http://content.screencast.com/users/higgis/folders/Jing/media/490cd6ed-86ba-4244-a744-ae912e085f72/jingswfplayer.swf"></param><param name="quality" value="high"></param><param name="bgcolor" value="#FFFFFF"></param><param name="flashVars" value="thumb=http://content.screencast.com/users/higgis/folders/Jing/media/490cd6ed-86ba-4244-a744-ae912e085f72/FirstFrame.jpg&#038;width=386&#038;height=742&#038;content=http://content.screencast.com/users/higgis/folders/Jing/media/490cd6ed-86ba-4244-a744-ae912e085f72/00000004.swf"></param><param name="allowFullScreen" value="true"></param><param name="scale" value="showall"></param><param name="allowScriptAccess" value="always"></param><param name="base" value="http://content.screencast.com/users/higgis/folders/Jing/media/490cd6ed-86ba-4244-a744-ae912e085f72/"></param>  <embed src="http://content.screencast.com/users/higgis/folders/Jing/media/490cd6ed-86ba-4244-a744-ae912e085f72/jingswfplayer.swf" quality="high" bgcolor="#FFFFFF" width="193" height="371" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/higgis/folders/Jing/media/490cd6ed-86ba-4244-a744-ae912e085f72/FirstFrame.jpg&#038;width=386&#038;height=742&#038;content=http://content.screencast.com/users/higgis/folders/Jing/media/490cd6ed-86ba-4244-a744-ae912e085f72/00000004.swf" allowFullScreen="true" base="http://content.screencast.com/users/higgis/folders/Jing/media/490cd6ed-86ba-4244-a744-ae912e085f72/" scale="showall"></embed></object></p>
<p>Initially, I thought that the way to do this was to add an additional section to the table and add a custom cell to it. That kind of works, but is quite hard work. I think I&#8217;ve found a better and simpler way &#8211; by using the <code>tableView:viewForHeaderInSection</code> method on <code>UITableViewDelegate</code>. </p>
<p>To start with, we need to create a basic view-based Cocoa Touch app in XCode. I&#8217;ve called mine ContactStylee. I&#8217;ve <a href="http://blog.jameshiggs.com/wp-content/media/ContactStylee.zip">zipped up the completed XCode project for you</a> so that you can follow along.</p>
<p><span id="more-176"></span></p>
<p>Once we&#8217;ve got the basic project template, we need to implement the <code>UITableViewDataSource</code> in our <code>ContactStyleeViewController</code>. As usual, this consists of implementing <code>tableView:numberOfRowsInSection</code> and <code>tableView:cellForRowAtIndexPath</code>. I also create a simple <code>NSArray</code> to hold some sample data in the <code>viewDidLoad</code> method. Here&#8217;s the interface file:</p>
<pre>
@interface ContactStyleeViewController : UIViewController
	&lt;UITableViewDataSource, UITableViewDelegate&gt; {

	NSArray *data;
	ContactStyleeAppDelegate *appDelegate;
}

@property (nonatomic, retain) NSArray *data;

@end
</pre>
<p>And the implementation: </p>
<pre>
@implementation ContactStyleeViewController

@synthesize data;

- (void)viewDidLoad {
   	[super viewDidLoad];
	self.data = [NSArray arrayWithObjects:
		@"First", @"Second", @"Third", @"Fourth", nil];
}

- (NSInteger)tableView:(UITableView *)tableView
	numberOfRowsInSection:(NSInteger)section {

	return [self.data count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView
	cellForRowAtIndexPath:(NSIndexPath *)indexPath {

	UITableViewCell *cell = [tableView
		dequeueReusableCellWithIdentifier:@"normalcell"];
	if(nil == cell) {
		cell = [[[UITableViewCell alloc]
			initWithFrame:CGRectZero
			reuseIdentifier:@"normalcell"] autorelease];
	}
	cell.text = [self.data objectAtIndex:indexPath.row];
	return cell;
}

- (void)dealloc {
	[data release];
	[super dealloc];
}
@end</pre>
<p>All pretty standard stuff. In the NIB, I&#8217;ve set the table to have the &#8220;Grouped&#8221; style. Here&#8217;s what that looks like when we run it in the simulator:</p>
<p><img src="http://blog.jameshiggs.com/wp-content/uploads/2009/02/conventional-grouped-table.png" alt="Conventional Grouped Table" border="0" width="212" height="394" /></p>
<p>So now we need to create the header view. I did this by adding a new View NIB to the project, calling it <code>TableHeader</code>. I then created a new view controller class, called <code>TableHeaderViewController</code>, and then set the class for the File&#8217;s Owner in the TableHeader.xib file to the new controller class. You need to remember to tell the File&#8217;s Owner about the view. I added an image and a couple of labels. For the purposes of this demo project, that&#8217;s all that&#8217;s needed in the header view: we won&#8217;t bother hooking it up to the data source for now.</p>
<p>To be able to reference the view from the <code>ContactStyleeViewController</code>, I added a new view controller to MainWindow.xib and made its class <code>TableHeaderViewController</code>, and we tell it to load the view from <code>TableHeader.xib</code>. I then added an <code>IBOutlet</code> of type <code>TableHeaderViewController</code> to <code>ContactStyleeAppDelegate</code>. This means that I can load that controller&#8217;s view from the app delegate.</p>
<p>Now that we&#8217;ve got the controller outlet and property in our app delegate, we need to hook that up in IB. So we make the new view controller that we just added to <code>MainWindow.xib</code> point to the new <code>IBOutlet</code> that we just added in the <span>ContactStyleeAppDelegate</code>. Here's how the app delegate interface file looks now:</p>
<pre>#import &lt;UIKit/UIKit.h&gt;

@class ContactStyleeViewController;
@class TableHeaderViewController;

@interface ContactStyleeAppDelegate : NSObject &lt;UIApplicationDelegate&gt; {
	UIWindow *window;
	ContactStyleeViewController *viewController;
	TableHeaderViewController *headerViewController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet ContactStyleeViewController *viewController;
@property (nonatomic, retain) IBOutlet TableHeaderViewController *headerViewController;

@end</pre>
<p>Now we need a way for the <code>ContactStyleeViewController</code> to access our <code>TableHeaderViewController</code>. To do this, we add an <code>IBOutlet</code> of type <span>ContactSyleeAppDelegate</span> to our <code>ContactStyleeViewController</code> and then connect that up to our app delegate in IB. Here's the revised <code>ContactStyleeViewController</code> interface file:</p>
<pre>#import &lt;UIKit/UIKit.h&gt;
@class ContactStyleeAppDelegate;

@interface ContactStyleeViewController : UIViewController
	&lt;UITableViewDataSource, UITableViewDelegate&gt; {

	NSArray *data;
	ContactStyleeAppDelegate *appDelegate;
}

@property (nonatomic, retain) NSArray *data;
@property (nonatomic, retain) IBOutlet ContactStyleeAppDelegate *appDelegate;

@end</pre>
<p>Note that we need to forward declare the <code>ContactStyleeAppDelegate</code> class rather than importing the header file in order to avoid a circular include. Once we've hooked up this outlet to the app delegate in IB, we're almost ready to go. We just need to tell the table view where to get the header view from.</p>
<p>To do this, we need to implement two new methods in <code>ContactStyleeViewController</code> that are optional methods on the <code>UITableViewDelegate</code> protocol, <code>tableView:viewForHeaderInSection</code> and <code>tableView:heightForHeaderInSection</code>. These are pretty simple methods now that we've hooked up the app controller outlet:</p>
<pre>- (UIView *)tableView:(UITableView *)tableView
	viewForHeaderInSection:(NSInteger)section {

	return [[appDelegate headerViewController] view];
}

- (CGFloat)tableView:(UITableView *)tableView
	heightForHeaderInSection:(NSInteger)section {

	return 85;
}</pre>
<p>At this point, I reckoned I was done, so I built and ran the app in the simulator. What I saw wasn't quite what I had expected:</p>
<p><img src="http://blog.jameshiggs.com/wp-content/uploads/2009/02/not-transparent1.png" alt="not_transparent.png" border="0" width="414" height="216" /></p>
<p>The header cell has an opaque white background, which is not what we wanted at all. We need to make a few simple adjustments in IB. Here's what the inspector looks like when the changes have been made (and you need to be careful that its the <em>view</em> that's selected in IB, not one of the controls):</p>
<p><img src="http://blog.jameshiggs.com/wp-content/uploads/2009/02/ib-settings.png" alt="ib_settings.png" border="0" width="301" height="404" /></p>
<p>You need to make sure that the "Opaque" checkbox is cleared, and that you set the background colour to have a 0% opacity. And that's it. Here's a screenshot:</p>
<p><img src="http://blog.jameshiggs.com/wp-content/uploads/2009/02/finished-app.png" alt="finished_app.png" border="0" width="413" height="243" /></p>
<p>And here's a video showing that it scrolls just like the built-in contacts app:</p>
<p><object width="193" height="371"><param name="movie" value="http://content.screencast.com/users/higgis/folders/Jing/media/2ac67cb6-830f-49d3-ab66-13d7a2770227/jingswfplayer.swf"></param><param name="quality" value="high"></param><param name="bgcolor" value="#FFFFFF"></param><param name="flashVars" value="thumb=http://content.screencast.com/users/higgis/folders/Jing/media/2ac67cb6-830f-49d3-ab66-13d7a2770227/FirstFrame.jpg&#038;width=386&#038;height=742&#038;content=http://content.screencast.com/users/higgis/folders/Jing/media/2ac67cb6-830f-49d3-ab66-13d7a2770227/00000001.swf"></param><param name="allowFullScreen" value="true"></param><param name="scale" value="showall"></param><param name="allowScriptAccess" value="always"></param><param name="base" value="http://content.screencast.com/users/higgis/folders/Jing/media/2ac67cb6-830f-49d3-ab66-13d7a2770227/"></param>  <embed src="http://content.screencast.com/users/higgis/folders/Jing/media/2ac67cb6-830f-49d3-ab66-13d7a2770227/jingswfplayer.swf" quality="high" bgcolor="#FFFFFF" width="193" height="371" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/higgis/folders/Jing/media/2ac67cb6-830f-49d3-ab66-13d7a2770227/FirstFrame.jpg&#038;width=386&#038;height=742&#038;content=http://content.screencast.com/users/higgis/folders/Jing/media/2ac67cb6-830f-49d3-ab66-13d7a2770227/00000001.swf" allowFullScreen="true" base="http://content.screencast.com/users/higgis/folders/Jing/media/2ac67cb6-830f-49d3-ab66-13d7a2770227/" scale="showall"></embed></object></p>
<p>It took me a while to figure out that this was the best way. Hopefully this post will help someone else to get there quicker. But, since I'm strictly an iPhone development beginner, I'd be really interested to hear from people if they think there's a better way to do it.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jameshiggs.com/2009/03/01/transparent-table-header-uitableview/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>There will be no &#8220;iPhone killer&#8221;</title>
		<link>http://blog.jameshiggs.com/2009/02/27/there-will-be-no-iphone-killer/</link>
		<comments>http://blog.jameshiggs.com/2009/02/27/there-will-be-no-iphone-killer/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 14:12:20 +0000</pubDate>
		<dc:creator>higgis</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://blog.jameshiggs.com/?p=155</guid>
		<description><![CDATA[All you ever hear from the mobile phone manufacturers and pundits these days is speculation about what phone will &#8220;kill&#8221; the iPhone. I think this is evidence that they are thinking in a way that will be guarantee that they will be also-rans for as long as Apple make a mobile telephony device (and I [...]]]></description>
			<content:encoded><![CDATA[<p>All you ever hear from the mobile phone manufacturers and pundits these days is speculation about what phone will &#8220;kill&#8221; the <a href="http://www.apple.com/iphone">iPhone</a>. I think this is evidence that they are thinking in a way that will be guarantee that they will be also-rans for as long as Apple make a mobile telephony device (and I think they&#8217;ll be doing that for a *long* time).</p>
<p>It shows that they&#8217;re asking the wrong question. The flurry of new touchscreen devices &#8211; the <a href="http://www.blackberry.com/blackberrystorm/">BlackBerry Storm</a>, the <a href="http://www.lgmobilephones.com/phone.aspx?id=10398">LG Incite</a> (tagline: &#8220;Windows Mobile at its most intuitive&#8221;, which is kind of like saying &#8220;shit at its least smelly&#8221;) and so on &#8211; show that the boards of mobile phone companies have, in effect, told their R&amp;D teams to create an iPhone clone.</p>
<p>And there&#8217;s the problem. You can&#8217;t clone the iPhone, because Apple have done such an amazing job on the design, usability and functionality that, if you&#8217;re in the market for a touchscreen phone, you&#8217;re probably going to automatically choose an iPhone. And that&#8217;s before you&#8217;ve had a play with your friend&#8217;s iPhone. I&#8217;ve never owned any other device that has made my friends *laugh* when they see how awesome it is.</p>
<p>There are still a few things that might hold you back: years of hearing that Macs aren&#8217;t as good as PCs (just pop into your local Apple Store if you want to find out how wrong-headed that is), the price of the monthly contract, and maybe not wanting to be on O2 due to coverage issues in your area (or AT&amp;T or whoever the carrier is in your country). And you may just not want to be a sheep. But once the exclusive deals expire, surely the iPhone will be available on all networks and most of those concerns will go away.</p>
<p>But there are still a huge number of people who are not in the market for an iPhone at all. People who don&#8217;t want such a large phone, who don&#8217;t want email, or an iPod on their phone, or a mobile gaming device, who probably don&#8217;t even need a camera, and who will probably never download apps. Although the iPhone has been a massive success &#8211; when very few predicted it would be &#8211; it still only has a fraction of the market for handsets.</p>
<p>I boldly predict that the next big-selling phone will be designed by people who look at the iPhone and ask: &#8220;who isn&#8217;t going to want one of these?&#8221;, &#8220;why?&#8221;, and &#8220;how can we build them a phone they *do* want?&#8221; Until then, Apple will continue to eat the establish players&#8217; lunch.</p>
<p><strong>Update:</strong> fixed silly typo</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jameshiggs.com/2009/02/27/there-will-be-no-iphone-killer/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>NSConference</title>
		<link>http://blog.jameshiggs.com/2009/02/18/nsconference/</link>
		<comments>http://blog.jameshiggs.com/2009/02/18/nsconference/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 14:52:32 +0000</pubDate>
		<dc:creator>higgis</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://blog.jameshiggs.com/?p=151</guid>
		<description><![CDATA[I&#8217;ve recently taken some actual concrete steps to learn the iPhone SDK and Objective-C. So far it&#8217;s been very enjoyable, with only a couple of WTF moments.
The biggest change from using Visual Studio and .NET has been that the visual tools actually seem to work without screwing with your work. I&#8217;m not pushing it very [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently taken some actual concrete steps to learn the iPhone SDK and Objective-C. So far it&#8217;s been very enjoyable, with only a couple of WTF moments.</p>
<p>The biggest change from using Visual Studio and .NET has been that the visual tools actually seem to work without screwing with your work. I&#8217;m not pushing it very hard yet, so that will probably change. I&#8217;m still nervous that I don&#8217;t understand the underlying serialization format.</p>
<p>I&#8217;ve been using <a href="http://bill.dudney.net/roller/objc/">Bill Dudney</a>&#8217;s <a href="http://www.pragprog.com/screencasts/v-bdiphone/writing-your-first-iphone-application">Screenscasts on starting iPhone development</a>, and his forthcoming <a href="http://www.pragprog.com/titles/amiphd/iphone-sdk-development">iPhone development book</a>, both from the Pragmatic Programmers, which have both been excellent. As a result I&#8217;ve got the basics of an iPhone app that I think could turn into something that people might actually want to install on their phones. There&#8217;s a lot of work to be done before I get to that stage, though.</p>
<p>In an attempt to give myself a hard deadline for learning, I also signed up for <a href="http://www.nsconference.com/helpus/files/blocks_image_1_1.png">NSConference</a>, a Mac developers conference to be held in April, organised by Scotty from the <a href="http://www.mac-developer-network.com/">Mac Developer Network</a>. If you&#8217;re at all interested in iPhone or Mac development it looks like the place to be. Hopefully I&#8217;ll see you there.</p>
<div class="mceTemp">
<dl class="wp-caption alignnone" style="width: 478px;">
<dt class="wp-caption-dt"><a href="http://www.nsconference.com/"><img title="NSConference" src="http://www.nsconference.com/helpus/files/blocks_image_1_1.png" alt="NSConference badge" width="468" height="60" /></a></dt>
</dl>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.jameshiggs.com/2009/02/18/nsconference/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>It&#8217;s official</title>
		<link>http://blog.jameshiggs.com/2008/03/07/its-official/</link>
		<comments>http://blog.jameshiggs.com/2008/03/07/its-official/#comments</comments>
		<pubDate>Fri, 07 Mar 2008 00:02:48 +0000</pubDate>
		<dc:creator>higgis</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://blog.jameshiggs.com/2008/03/07/its-official/</guid>
		<description><![CDATA[I am the greatest. The iPhone said so:

(Click for larger version
And I didn&#8217;t Photoshop it, either.
]]></description>
			<content:encoded><![CDATA[<p>I am the greatest. The iPhone said so:</p>
<p><a href="http://blog.jameshiggs.com/wp-content/uploads/2008/03/teh-greatest-large.jpg"><img src="http://blog.jameshiggs.com/wp-content/uploads/2008/03/teh-greatest-small.jpg" border="0" alt="teh-greatest-small.jpg" width="182" height="350" /></a></p>
<p><a href="http://blog.jameshiggs.com/wp-content/uploads/2008/03/teh-greatest-large.jpg">(Click for larger version</a></p>
<p>And I didn&#8217;t Photoshop it, either.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jameshiggs.com/2008/03/07/its-official/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone development</title>
		<link>http://blog.jameshiggs.com/2008/03/06/iphone-development/</link>
		<comments>http://blog.jameshiggs.com/2008/03/06/iphone-development/#comments</comments>
		<pubDate>Thu, 06 Mar 2008 21:36:28 +0000</pubDate>
		<dc:creator>higgis</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://blog.jameshiggs.com/2008/03/06/iphone-development/</guid>
		<description><![CDATA[Now this is very exciting.

(Click for larger version)
I predict that the iPhone SDK will be seen as a watershed in the history of computing, as important as the the first PC. For the first time, proper mobile computing will be a reality.
I can&#8217;t wait to get started developing my first app.
]]></description>
			<content:encoded><![CDATA[<p>Now this is very exciting.</p>
<p><a href="http://blog.jameshiggs.com/wp-content/uploads/2008/03/iphone-dev.jpg" target="_blank"><img src="http://blog.jameshiggs.com/wp-content/uploads/2008/03/iphone-dev-small.jpg" border="0" alt="" width="400" height="223" /></a></p>
<p><a href="http://blog.jameshiggs.com/wp-content/uploads/2008/03/iphone-dev.jpg" target="_blank">(Click for larger version)</a></p>
<p>I predict that the iPhone SDK will be seen as a watershed in the history of computing, as important as the the first PC. For the first time, proper mobile computing will be a reality.</p>
<p>I can&#8217;t wait to get started developing my first app.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jameshiggs.com/2008/03/06/iphone-development/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The river of news is diverted</title>
		<link>http://blog.jameshiggs.com/2008/01/28/the-river-of-news-is-diverted/</link>
		<comments>http://blog.jameshiggs.com/2008/01/28/the-river-of-news-is-diverted/#comments</comments>
		<pubDate>Mon, 28 Jan 2008 17:03:20 +0000</pubDate>
		<dc:creator>higgis</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[RSS]]></category>

		<guid isPermaLink="false">http://blog.jameshiggs.com/2008/01/28/the-river-of-news-is-diverted/</guid>
		<description><![CDATA[I made the difficult decision to change my RSS reader the other day from the lovely NewsFire to the newly free NetNewsWire. As it happens I actually have a licence for NNW from before it was made free but I didn&#8217;t like it enough and went back to NewsFire.
Today, I achieved the nirvana of a [...]]]></description>
			<content:encoded><![CDATA[<p>I made the difficult decision to change my RSS reader the other day from the lovely <a href="http://www.newsfirerss.com">NewsFire</a> to the newly free <a href="http://www.newsgator.com/Individuals/NetNewsWire/">NetNewsWire</a>. As it happens I actually have a licence for NNW from before it was made free but I didn&#8217;t like it enough and went back to NewsFire.</p>
<p>Today, I achieved the nirvana of a news reader with no unread items in it. I feel like I&#8217;ve had my house steam cleaned or something. I&#8217;m still not 100% sold on NNW, but, like NewsFire, its integration with my blog editor <a href="http://www.red-sweater.com/marsedit/">MarsEdit</a> and my <a href="http://del.icio.us">del.icio.us</a> client <a href="http://codesorcery.net/pukka/">Pukka</a> is great and it has the killer feature of synchronising with Newsgator Online so that I can read feeds from my iPhone and keep the unread/read status consistent on my MacBook Pro and the phone.</p>
<p>I miss the beautiful interface and animations of NewsFire, but I fought the three-pane RSS reader for too long. I think I&#8217;ll be with NWW for a while. Maybe when <a href="http://www.newsfirex.com/blog/">David</a> releases NewsFire 2 I&#8217;ll give it another look.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jameshiggs.com/2008/01/28/the-river-of-news-is-diverted/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My iPhone &#8211; Week 1</title>
		<link>http://blog.jameshiggs.com/2008/01/04/my-iphone-week-1/</link>
		<comments>http://blog.jameshiggs.com/2008/01/04/my-iphone-week-1/#comments</comments>
		<pubDate>Fri, 04 Jan 2008 14:37:29 +0000</pubDate>
		<dc:creator>higgis</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://blog.jameshiggs.com/2008/01/04/my-iphone-week-1/</guid>
		<description><![CDATA[We might as well get it out of the way early on: I adore my iPhone. Today my old number ported over (although with some weird side effects) and so I should be a one portable device man from now on.
As always with Apple it&#8217;s simple touches that make all the difference. The screen is [...]]]></description>
			<content:encoded><![CDATA[<p>We might as well get it out of the way early on: I adore my <a href="http://www.apple.com/iphone/">iPhone</a>. Today my old number ported over (although with some weird side effects) and so I should be a one portable device man from now on.</p>
<p>As always with Apple it&#8217;s simple touches that make all the difference. The screen is really crisp and rendering in Safari is utterly brilliant &#8211; it&#8217;s even sharper than a MacBook Pro. The zoom in and out are just superb &#8211; you can&#8217;t keep the childlike smile off your face. The automatic orientation detection is lovely too.</p>
<p>There are, of course, some features that I want Apple to add. Top of the list is a to-do list app. Ideally, that would be <a href="http://www.omnigroup.com/applications/omnifocus/">OmniFocus</a> when the <a href="http://www.tuaw.com/2007/10/17/apple-we-plan-to-have-an-iphone-sdk-in-developers-hands-in-fe/">SDK is available (any day now, hopefully)</a>. I&#8217;d like to be able to remove the idiotic Stocks widget from my home-screen. Even better, I&#8217;d like to rearrange the screen in any way I choose. For top marks, the list of widgets should sync between the phone and my MacBook Pro.</p>
<p>Next, I&#8217;d like an RSS reader &#8211; ideally <a href="http://www.newsfirerss.com/">NewsFire</a>. Again, that should sync with my Mac. At a push I might be willing to swap to <a href="http://www.newsgator.com/Individuals/NetNewsWire/Default.aspx">NetNewsWire</a> if it synced properly.</p>
<p>Then, I&#8217;d like a mobile blogging app &#8211; ideally <a href="http://www.red-sweater.com/marsedit/">MarsEdit</a>, which I&#8217;m using to write this post.</p>
<p>Syncing generally could be better &#8211; although it works very well when you have your iPod cable available, it should also work over <a href="http://www.mac.com">.Mac</a> so that I don&#8217;t ever need to physically connect it. That would take care of Calendars, Contacts, Mail Accounts, Bookmarks and Widgets.</p>
<p>The last thing that&#8217;s missing is Copy &amp; Paste, although that&#8217;s <a href="http://www.macrumors.com/2008/01/02/iphone-1-1-3-to-include-copy-paste/">rumoured to be included in the next software update</a>.</p>
<p>But these are little gripes. The iPhone is the best device I&#8217;ve ever bought. Everyone should have one.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jameshiggs.com/2008/01/04/my-iphone-week-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting WordPress, mod_rewrite and Leopard to work together</title>
		<link>http://blog.jameshiggs.com/2007/12/25/getting-wordpress-mod_rewrite-and-leopard-to-work-together/</link>
		<comments>http://blog.jameshiggs.com/2007/12/25/getting-wordpress-mod_rewrite-and-leopard-to-work-together/#comments</comments>
		<pubDate>Tue, 25 Dec 2007 13:28:46 +0000</pubDate>
		<dc:creator>higgis</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[leopard]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.jameshiggs.com/2007/12/25/getting-wordpress-mod_rewrite-and-leopard-to-work-together/</guid>
		<description><![CDATA[I&#8217;ve been trying to get Leopard, Apache 2 and WordPress working together for a while now. I want to use the WordPress friendly URL feature, and this requires the Apache mod_rewrite module to work too. There are various places around the web that have partial solutions to these problems. Here&#8217;s the procedure I followed &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been trying to get Leopard, Apache 2 and WordPress working together for a while now. I want to use the WordPress friendly URL feature, and this requires the Apache mod_rewrite module to work too. There are various places around the web that have partial solutions to these problems. Here&#8217;s the procedure I followed &#8211; YMMV</p>
<p>First off, WordPress is installed in <code>/Users/jameshiggs/Sites/blog</code>. Leopard comes with Apache 2.2 installed, but has PHP disabled by default. To correct this, go to the console and change directory to <code>/etc/apache2</code> and open <code>httpd.conf</code> in your favourite editor. For me this means typing:</p>
<pre>sudo mate httpd.conf</pre>
<p>You&#8217;ll probably have to enter your admin password. Find the line that reads:</p>
<pre>#LoadModule php5_module libexec/apache2/libphp5.so</pre>
<p>and uncomment it so that it looks like this:</p>
<pre>LoadModule php5_module libexec/apache2/libphp5.so</pre>
<p>Next, we need to make sure that your user directory allows <code>.htaccess</code> rules. To do this, create a file called <code>jameshiggs.conf</code> (obviously, you&#8217;ll need to replace my user name with yours) in <code>/etc/apache2/users</code>. The contents of that file should read:</p>
<pre>&lt;Directory "/Users/jameshiggs/Sites"&gt;
	Options Indexes MultiViews
	AllowOverride All
	Order allow,deny
	Allow from all
&lt;/Directory&gt;</pre>
<p>Again, you&#8217;ll need to replace my user name with yours.</p>
<p>The final piece of the jigsaw is to configure WordPress to use friendly URLs &#8211; which you do from the Options &gt; Permalinks page. I&#8217;ve selected the second option which makes URLs look like this: <code>http://localhost/~jameshiggs/blog/2007/12/25/sample-post/</code>. If WordPress can write to the site root then it will automatically create the <code>.htaccess</code> file. If not, you&#8217;ll need to create it yourself in the root of your blog site. On my machine, the file should look like this:</p>
<pre>&lt;IfModule mod_rewrite.c&gt;
	Options +FollowSymLinks
	RewriteEngine On
	RewriteBase /~jameshiggs/blog/
	RewriteCond %{REQUEST_FILENAME} !-f
	RewriteCond %{REQUEST_FILENAME} !-d
	RewriteRule . /~jameshiggs/blog/index.php [L]
&lt;/IfModule&gt;</pre>
<p>Finally, you need to restart Apache &#8211; the easiest way to do that is to go to System Preferences &gt; Sharing panel and untick Web Sharing. Once Apache has stopped, tick it again and Apache should start up. And that&#8217;s it.</p>
<p>Let me know if you have any variants to this procedure.</p>
<p>Thanks to <a href="http://www.bagelturf.com/files/a47270927ba7060915782314c984c3a9-1074.html">Bagelturf</a> and <a href="http://danilo.ariadoss.com/2007/12/16/how-to-setup-apache-php-mysql-on-mac-os-x-105-leopard/">Ariadoss</a> for hints that helped me get this running.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jameshiggs.com/2007/12/25/getting-wordpress-mod_rewrite-and-leopard-to-work-together/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>iPhone beats Windows Mobile in 5 short months.</title>
		<link>http://blog.jameshiggs.com/2007/12/04/iphone-beats-windows-mobile-in-5-short-months/</link>
		<comments>http://blog.jameshiggs.com/2007/12/04/iphone-beats-windows-mobile-in-5-short-months/#comments</comments>
		<pubDate>Tue, 04 Dec 2007 17:16:43 +0000</pubDate>
		<dc:creator>higgis</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[apple]]></category>

		<guid isPermaLink="false">http://blog.jameshiggs.com/2007/12/04/iphone-beats-windows-mobile-in-5-short-months/</guid>
		<description><![CDATA[Wow. The iPhone already has a greater share of the browser market than all Windows Mobile/CE devices combined. Windows CE is 10 years old, while the iPhone is just 5 months old.
(Via 9 to 5 Mac.)
]]></description>
			<content:encoded><![CDATA[<p>Wow. <a href="http://feeds.feedburner.com/~r/9To5Mac-MacAllDay/~3/194581146/iphone-passes-windows-mobile-35445676">The iPhone already has a greater share of the browser market than all Windows Mobile/CE devices combined</a>. Windows CE is 10 years old, while the iPhone is just 5 <em>months</em> old.</p>
<p>(Via <a href="http://www.9to5mac.com/">9 to 5 Mac</a>.)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jameshiggs.com/2007/12/04/iphone-beats-windows-mobile-in-5-short-months/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook and iPhoto</title>
		<link>http://blog.jameshiggs.com/2007/12/03/facebook-and-iphoto/</link>
		<comments>http://blog.jameshiggs.com/2007/12/03/facebook-and-iphoto/#comments</comments>
		<pubDate>Mon, 03 Dec 2007 18:09:32 +0000</pubDate>
		<dc:creator>higgis</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[iphoto]]></category>
		<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://blog.jameshiggs.com/2007/12/03/facebook-and-iphoto/</guid>
		<description><![CDATA[I&#8217;m probably the last person in the known universe to find out about this, but I&#8217;ve been very impressed recently with the Facebook iPhoto Exporter. It adds another tab to the Export dialog that lets you create albums, upload photos and tag your friends in them. Very slick.
Here&#8217;s what it looks like in practice (click [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m probably the last person in the known universe to find out about this, but I&#8217;ve been very impressed recently with the <a href="http://developers.facebook.com/iphoto/">Facebook iPhoto Exporter</a>. It adds another tab to the Export dialog that lets you create albums, upload photos and tag your friends in them. Very slick.</p>
<p>Here&#8217;s what it looks like in practice (click for full-size):</p>
<p><a href="http://blog.jameshiggs.com/wp-content/uploads/2007/12/facebook-iphoto-large.jpg"><img src="http://blog.jameshiggs.com/wp-content/uploads/2007/12/facebook-iphoto.jpg" border="0" alt="A screenshot of the Facebook iPhoto plugin" width="389" height="268" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jameshiggs.com/2007/12/03/facebook-and-iphoto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
