<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Daniel Tull</title>
	
	<link>http://www.danieltull.co.uk/blog</link>
	<description>Just a few words from a Cocoa developer.</description>
	<lastBuildDate>Wed, 28 Oct 2009 20:32:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/DanielTull" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>DTGridView</title>
		<link>http://feedproxy.google.com/~r/DanielTull/~3/1L4nOlILc6w/</link>
		<comments>http://www.danieltull.co.uk/blog/2009/10/28/dtgridview/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 20:32:54 +0000</pubDate>
		<dc:creator>Daniel Tull</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.danieltull.co.uk/blog/?p=126</guid>
		<description><![CDATA[For some reason I never posted about this when I released it, and I fully intended to, but such is life&#8230; DTGridView is an iPhone UIKit component for implementing large (or small) gridded views in a memory efficient way. It occurred to me earlier in the year that it may be useful to have a [...]]]></description>
			<content:encoded><![CDATA[<p>For some reason I never posted about this when I released it, and I fully intended to, but such is life&#8230; <a title="DTGridView src page on BitBucket." href="http://bitbucket.org/danielctull/dtkit/src/tip/DTGridView/" target="_blank">DTGridView</a> is an iPhone UIKit component for implementing large (or small) gridded views in a memory efficient way. It occurred to me earlier in the year that it may be useful to have a two-dimensional table view, and since it&#8217;s conception I have been able to make grids and horizontal scrolling elements as fast as I could make a nice looking table view.</p>
<p>It uses the same technique as UITableView, by having cells have a reuse identifier and using this to reuse cells that happen to move offscreen. The algorithm for working out off-screen cells went through about three re-writes before I found one that was efficient enough to give smooth scrolling, but accurate checks.</p>
<p>The grid view itself is a proper UIScrollView, so you get all the benefits (scroll bars, deceleration, bouncing&#8230;) plus the automatic layout and memory handling that grid view adds.</p>
<p>It follows the same methodology as UITableView by having you provide a dataSource and gridDelegate (as it itself  is a delegate of the superclass, I needed a new name for the delegate) to gather data and let you know about important events, the protocols of which are shown in the <a title="DTGridView.h on BitBucket.org" href="http://bitbucket.org/danielctull/dtkit/src/tip/DTGridView/DTGridView.h" target="_blank">grid view&#8217;s header</a>. In all seriousness, I looked at UITableView, took it&#8217;s API and modified it only slightly to give me what I needed.</p>
<h3>The future of DTGridView</h3>
<p>There are still loads of things I want to add. In fact some of them I added view subclasses, such as <a title="DTInfiniteGridView on BitBucket.org" href="http://bitbucket.org/danielctull/dtkit/src/tip/DTInfiniteGridView/" target="_blank">InfiniteGridView</a> to allow infinite scrolling, but I really want to round up these extensions and bolt-ons to the main grid view class. I&#8217;d love to add pinch zooming to zoom into views, which I&#8217;ve just not had time to look into yet. I&#8217;ve seen examples and I&#8217;m sure it&#8217;s completely doable with some thought.</p>
<p>Also, I was recently asked whether it could be used to layout a grid for a timeline, where data can be inserted when it comes. I realised then that grid view isn&#8217;t really very good at loading specific pieces of data like this, however (and here&#8217;s the confession), this is the exact thing that inspired DTGridView int he first place!</p>
<p>I worked on a project that involved laying out a grid of information, and realised that it would be nicer if I had something to lay out the views on the scroll view automatically. So I definitely want to tackle this, I&#8217;m sure being a timeline, there&#8217;d be a certain amount of infiniteness about it too&#8230;</p>
<p>Hopefully, I get a chance to work on some of these things soon, and as I tidy up the current implementation, I&#8217;ll try to add better documentation to what&#8217;s happening, if only so I know how the hell it works.</p>
<img src="http://feeds.feedburner.com/~r/DanielTull/~4/1L4nOlILc6w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.danieltull.co.uk/blog/2009/10/28/dtgridview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.danieltull.co.uk/blog/2009/10/28/dtgridview/</feedburner:origLink></item>
		<item>
		<title>Presentation: Designing for the iPhone Developer</title>
		<link>http://feedproxy.google.com/~r/DanielTull/~3/TkYgrLlGG9Y/</link>
		<comments>http://www.danieltull.co.uk/blog/2009/09/01/presentation-designing-for-the-iphone-developer/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 21:45:33 +0000</pubDate>
		<dc:creator>Daniel Tull</dc:creator>
				<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.danieltull.co.uk/blog/?p=96</guid>
		<description><![CDATA[The slides from the talk I gave to the Brighton iPhone Creators group last wednesday are available on slide share here. The Ribot team were there, and after my presentation, the whole group got talking about general user experience in iPhone apps.
Antony backed me up on my thoughts that the polish of an app&#8217;s interface and [...]]]></description>
			<content:encoded><![CDATA[<p>The slides from the talk I gave to the <a href="http://groups.google.com/group/brighton-iphone-creators" target="_blank">Brighton iPhone Creators</a> group last wednesday are available on <a href="http://www.slideshare.net/danielctull/designing-for-the-iphone-developer" target="_blank">slide share here</a>. The <a href="http://www.ribot.co.uk" target="_blank">Ribot</a> team were there, and after my presentation, the whole group got talking about general user experience in iPhone apps.</p>
<p><a href="http://twitter.com/ribot" target="_blank">Antony</a> backed me up on my thoughts that the polish of an app&#8217;s interface and the user&#8217;s experience really convinces the user that the developer took care in creating the program as a whole, even if you never know it. I know I still find that if an app feels good, I&#8217;m more likely to trust that it&#8217;s good under the hood.</p>
<p>Thanks to all that came and at least appeared to be interested. Tomorrow I&#8217;ll be talking about Core Data at the Apple Store on Regent Street for the <a href="http://www.linkedin.com/groups?home=&amp;gid=1798655" target="_blank">London iPhone Developer Group</a>, I&#8217;ve already posted the code I plan to use for it on <a href="http://bitbucket.org/danielctull/dtmusicmodel/" target="_blank">BitBucket</a>, so you can follow the code while I talk about it.</p>
<img src="http://feeds.feedburner.com/~r/DanielTull/~4/TkYgrLlGG9Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.danieltull.co.uk/blog/2009/09/01/presentation-designing-for-the-iphone-developer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.danieltull.co.uk/blog/2009/09/01/presentation-designing-for-the-iphone-developer/</feedburner:origLink></item>
		<item>
		<title>iPhone presentations</title>
		<link>http://feedproxy.google.com/~r/DanielTull/~3/CWoux93Z-A8/</link>
		<comments>http://www.danieltull.co.uk/blog/2009/08/24/presentations/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 16:57:56 +0000</pubDate>
		<dc:creator>Daniel Tull</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPhone Developer]]></category>

		<guid isPermaLink="false">http://www.danieltull.co.uk/blog/?p=86</guid>
		<description><![CDATA[I am doing two talks over the next couple of weeks on the subject of iPhone development for the Brighton iPhone Creators group and the London iPhone Developer Group.
The first is in Brighton at the Skiff at 7pm on Wednesday 26th August, titled Designing for the iPhone Developer. It&#8217;s aimed at bringing into focus the [...]]]></description>
			<content:encoded><![CDATA[<p>I am doing two talks over the next couple of weeks on the subject of iPhone development for the <a href="http://groups.google.com/group/brighton-iphone-creators" target="_blank">Brighton iPhone Creators</a> group and the <a href="http://www.linkedin.com/groups?gid=1798655" target="_blank">London iPhone Developer Group</a>.</p>
<p>The first is in <a href="http://upcoming.yahoo.com/event/4228762/?ps=5" target="_blank">Brighton at the Skiff at 7pm on Wednesday 26th August</a>, titled <strong>Designing for the iPhone Developer</strong>. It&#8217;s aimed at bringing into focus the information that an (iPhone) developer needs or should be asking for from a designer to complete a project in an efficient way.</p>
<p>The second is the following Wednesday (2nd September, again at 7pm) at the Apple Store on Regent Street, where I&#8217;ll present an <strong>Introduction to Core Data</strong>. This will be the second evening hosted by the Apple Store, which gained a fantastic gathering of about 75 iPhone developer types last time, so hopefully we can pack out the seating area this time around.</p>
<p>I&#8217;ll be posting the slides up here after the events, so if you can&#8217;t come along but still want to see what I said, you can.</p>
<img src="http://feeds.feedburner.com/~r/DanielTull/~4/CWoux93Z-A8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.danieltull.co.uk/blog/2009/08/24/presentations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.danieltull.co.uk/blog/2009/08/24/presentations/</feedburner:origLink></item>
		<item>
		<title>The issues with Weather Maps</title>
		<link>http://feedproxy.google.com/~r/DanielTull/~3/xKKHKXaq87c/</link>
		<comments>http://www.danieltull.co.uk/blog/2009/08/21/weather-maps-issues/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 11:54:20 +0000</pubDate>
		<dc:creator>Daniel Tull</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Bugs]]></category>
		<category><![CDATA[Weather Maps]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.danieltull.co.uk/blog/?p=52</guid>
		<description><![CDATA[Weather Maps (iTunes link) is an application that displays downloaded maps detailing the UK weather. It was my first iPhone application and although it did what I wanted it to do and little more, it was a fairly unpolished application. It loaded maps synchronously, meaning when it was loading a new map it would block [...]]]></description>
			<content:encoded><![CDATA[<p>Weather Maps (<a title="iTunes link" href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=309229631&amp;mt=8" target="_blank">iTunes link</a>) is an application that displays downloaded maps detailing the UK weather. It was my first iPhone application and although it did what I wanted it to do and little more, it was a fairly unpolished application. It loaded maps synchronously, meaning when it was loading a new map it would block all interactions from the user. However, as with these things time became an issue, and the 1.0 of Weather Maps was this old slow loading version that I had written in July 2008.</p>
<div id="attachment_75" class="wp-caption aligncenter" style="width: 330px"><img class="size-full wp-image-75" title="Weather Maps" src="http://www.danieltull.co.uk/blog/wp-content/uploads/2009/08/IMG_0134.PNG" alt="Weather Maps" width="320" height="460" /><p class="wp-caption-text">Weather Maps showing the rain and clouds along with temperatures for the UK.</p></div>
<p style="text-align: center;">
<p>As soon as I launched that version, I knew I had to do an update to make it better; download the images faster, let the user move freely in the app without downloads blocking their way. And so the <span style="background-color: #ffffff;">ill-fated release of 1.1, one that has led me down a dark road for nearly two months, was born.</span></p>
<p><span style="background-color: #ffffff;">The reason it was bug ridden was a fairly simple one; my original version had little to contend with, you pressed a button, it downloaded the map, and displayed it when it had done so. There was nothing really to go wrong. In 1.1, each tab would download all its images asynchronously when it was displayed and the buttons would navigate through these images without needing to wait.</span></p>
<p>A lot of testing went into this download mechanism, the storage and traversal of the maps and animating between the images. I had however, overlooked one problem: M<span style="background-color: #ffffff;">y code was getting the time from an NSDateFormatter to fetch the images. I wanted the hour in a 24 format, however even when setting the date formatter to give back &#8220;HH&#8221; I still got a 12-hour format when the user&#8217;s iPhone was in that mode.</span></p>
<p><span style="background-color: #ffffff;">This didn&#8217;t give a crash, it just meant the app would only download images for the morning, as all the times I was getting were the 12-hour ones. Looking back, I honestly don&#8217;t think too many people noticed.</span></p>
<p><span style="background-color: #ffffff;">At any rate I hurriedly tried to fix it. Unfortunately, I continued to try to use NSDateFromatter and so I coded in asking for a 12-hour version, checking whether it was AM or PM and adding 12 hours if it was in the PM (there&#8217;s a few other things to juggle like when it is midday). This now fixed it for an iPhone set to 12-hour mode and worked for my 24-hour mode iPhone. I promptly and confidently submitted.</span></p>
<p><span style="background-color: #ffffff;">Then after the release of 1.1.1, I had a lot of negative reviews. In fact, loads. It was a much greater number than the ones I got with 1.1. It now it wasn&#8217;t working for people running in 24-hour mode. I stressed for much of the following week, I couldn&#8217;t replicate the bug myself. Then on Thursday, I took my iPod touch and reset it, installed Weather Maps and instantly saw the problem. Though it was now downloading the right images, they weren&#8217;t getting named properly. All the times were in a 12-hour format. Now both 9am and 9pm read &#8220;09:00&#8243;.</span></p>
<p><span style="background-color: #ffffff;">A quick solution I found for users was to toggle the 24-hour mode switch in the system settings. I now figure that getting the AM or PM symbol in NSDateFormatter, when the device has never been in 12-hour mode yields a duff response; though I admit, I haven&#8217;t thoroughly checked this out.</span></p>
<p><span style="background-color: #ffffff;">It&#8217;s worth noting here that if you are honest with your users, they will try their best to help. I set up a <a title="GetSatisfaction page" href="http://www.getsatisfaction.com/weathermaps" target="_blank">GetSatisfation page</a> as soon as the issue came up and updated the description of the app in iTunes almost daily to inform the users of the status. Yes, many people were frustrated that this app was broken for them, but reviews after that turned from 1 star &#8220;OMG you&#8217;ve ruined it. How could you!&#8221; reviews to 3-4 star &#8220;This version is broken, it was great. Am hoping the developer releases a fix soon&#8221; reviews.</span></p>
<p><span style="background-color: #ffffff;">So to cut this expanding post short, NSDateFormatter is an awful way of getting the figures as strings to use for anything other than displaying to the user; after all that is what it is for. So In the 1.1.2 fix, I looked away from NSDateFormatter. I created two categories which will give you the ability to create strings with the components of a date, prefixing these values if required with zeros, which makes sure you have a two figure hours for example. I have included these categories as part of DTKit and can be found at <a title="bitbucket.org/danielctull/dtkit" href="http://bitbucket.org/danielctull/dtkit/" target="_blank">bitbucket.org/danielctull/dtkit</a>.</span></p>
<p><code>NSString *hourString = [[NSString stringWithFormat:@"%i", [aDate hour]] stringByPrefixingWithString:@"0" resultingInLength:2];</code></p>
<p>The NSDate category adds methods for retrieving the components (hour, minute, second, year, etc) as integer values using the NSDateComponents and NSCalendar classes. To add prefixing zeros, I&#8217;ve made an NSString category which adds stringByPrefixingWithString:resultingInLength: which prefixes the receiver with the  the given string  enough times such that it meets the length requirement. In the example above if the hour was 4, we would have the string &#8220;04&#8243; and if it were 16 would would get back &#8220;16&#8243;.</p>
<p>Never rely on formatters in Cocoa to gain information, they can and will give different results depending on the user&#8217;s settings. However, you should always use them for user-facing data so that the format is in their preferred style.</p>
<p><span style="background-color: #ffffff;">Lastly, if you have an app on the app store, you must manage your personal relations; be honest with users, explain to them mistakes and that you&#8217;re working flat out to solve them. Hopefully they&#8217;ll still be there when the fix is released.</span></p>
<img src="http://feeds.feedburner.com/~r/DanielTull/~4/xKKHKXaq87c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.danieltull.co.uk/blog/2009/08/21/weather-maps-issues/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.danieltull.co.uk/blog/2009/08/21/weather-maps-issues/</feedburner:origLink></item>
		<item>
		<title>iPhoto Faces and Facebook</title>
		<link>http://feedproxy.google.com/~r/DanielTull/~3/NKA1rn_pSLE/</link>
		<comments>http://www.danieltull.co.uk/blog/2009/03/15/iphoto-faces-and-facebook/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 20:21:18 +0000</pubDate>
		<dc:creator>Daniel Tull</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.danieltull.co.uk/blog/?p=48</guid>
		<description><![CDATA[I&#8217;ve been a generally big fan of iPhoto, it does what I need and in my opinion it does it well. I can quickly skim my photos and show them off. iPhoto &#8216;09 detected hundreds, if not thousands, of faces correctly. I put in their names and tidied up the lingering untagged faces.
Uploading to Facebook [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been a generally big fan of iPhoto, it does what I need and in my opinion it does it well. I can quickly skim my photos and show them off. iPhoto &#8216;09 detected hundreds, if not thousands, of faces correctly. I put in their names and tidied up the lingering untagged faces.</p>
<p>Uploading to Facebook sounded great, it will automatically tag the same faces in the photos it synchronises. Now &#8216;automatic&#8217; is a great word. It conjures up a lot of meaning. The top of the list (as suggested by Apple&#8217;s own dictionary) is &#8220;<span>working</span> <span>by itself</span> <span>with</span> little or no direct human control&#8221;. Yes! That&#8217;s what I want in life; At least from my software.</p>
<p>So imagine my surprise after spending a few hours tagging faces in iPhoto to learn that I now needed to get the emails of the people I tagged. WHAT?</p>
<p>I have precisely one friend on Facebook called Aaron and I have exactly one person in iPhoto called Aaron. In my mind a piece of software should be able to work out that maybe I have just one connection I know in my life called Aaron, and that perhaps these two identities refer to that single friend of mine. That is automatic.</p>
<p>What I am presented with isn&#8217;t even the next step down; Which would have been to present me with a list of people I know on Facebook and let me pick which Facebook friend my iPhoto tag refers to. That would be acceptable, though a little annoying.</p>
<p>However, I must enter my friend&#8217;s email address. Yes, email. People have many different email addresses these days, how do I pick the right one? I have to go through each of my friend&#8217;s pages and go to their information and copy the email address? Well that&#8217;s annoying.</p>
<p>Except I don&#8217;t. Because the email addresses aren&#8217;t text, they&#8217;re images, so I can&#8217;t copy them across. I must have both windows near each other (or a fairly good memory) so I can &#8220;manually&#8221; copy the email addresses into iPhoto.</p>
<p>This is the worst act of &#8220;claims to be automatic&#8221; I&#8217;ve seen from Apple in some time.</p>
<p>And I also wonder what will happen if they change their email address on Facebook.</p>
<img src="http://feeds.feedburner.com/~r/DanielTull/~4/NKA1rn_pSLE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.danieltull.co.uk/blog/2009/03/15/iphoto-faces-and-facebook/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.danieltull.co.uk/blog/2009/03/15/iphoto-faces-and-facebook/</feedburner:origLink></item>
		<item>
		<title>I need a Genius over here!</title>
		<link>http://feedproxy.google.com/~r/DanielTull/~3/v0ZPDATdaH8/</link>
		<comments>http://www.danieltull.co.uk/blog/2008/09/10/i-need-a-genius-over-here/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 08:26:21 +0000</pubDate>
		<dc:creator>Daniel Tull</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[iPhone OS 2.1]]></category>
		<category><![CDATA[iPod touch]]></category>

		<guid isPermaLink="false">http://www.danieltull.co.uk/blog/?p=46</guid>
		<description><![CDATA[Aaah, iPhone OS 2.1; It brings speed increases, bug fixes and an increased battery life. After installing 2.1 on my first generation iPod touch, I also expected Genius to be everywhere and anywhere, but I found it nowhere.
Looking at the tutorial videos online, there should be a Genius button under the track position slider, but [...]]]></description>
			<content:encoded><![CDATA[<p>Aaah, iPhone OS 2.1; It brings speed increases, bug fixes and an increased battery life. After installing 2.1 on my first generation iPod touch, I also expected Genius to be everywhere and anywhere, but I found it nowhere.</p>
<p>Looking at the tutorial videos online, there should be a Genius button under the track position slider, but all I find is a big gapping hole:</p>
<div class="pic"><img src="http://lh3.ggpht.com/danielctull/SMd_qNGvihI/AAAAAAAAEhY/DnfngoDMxp0/s800/IMG_0021.PNG" alt="Playing the Ting Tings with no Genius button under the slider." /></div>
<p>At first I wasn&#8217;t looking for the Genius function, and wondered why the hole was there, it looks completely ugly, especially as to how it was beforehand.</p>
<p>So I ask the question, where is my Genius?</p>
<img src="http://feeds.feedburner.com/~r/DanielTull/~4/v0ZPDATdaH8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.danieltull.co.uk/blog/2008/09/10/i-need-a-genius-over-here/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.danieltull.co.uk/blog/2008/09/10/i-need-a-genius-over-here/</feedburner:origLink></item>
		<item>
		<title>Radio Alarm Clock Applescript</title>
		<link>http://feedproxy.google.com/~r/DanielTull/~3/8BJpjEGsYnA/</link>
		<comments>http://www.danieltull.co.uk/blog/2008/05/09/radio-alarm-clock-applescript/#comments</comments>
		<pubDate>Fri, 09 May 2008 14:10:43 +0000</pubDate>
		<dc:creator>Daniel Tull</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.danieltull.co.uk/blog/2008/05/09/radio-alarm-clock-applescript/</guid>
		<description><![CDATA[Getting back to uni a couple of weeks ago, my radio alarm clock died. I&#8217;m not sure what is wrong with it, but for a week I was being woken by the sound of my mobile phone alarm. I found myself missing the sound of Chris Moyles in the morning, so what does any self [...]]]></description>
			<content:encoded><![CDATA[<p>Getting back to uni a couple of weeks ago, my radio alarm clock died. I&#8217;m not sure what is wrong with it, but for a week I was being woken by the sound of my mobile phone alarm. I found myself missing the sound of <a class="ext" href="http://www.bbc.co.uk/radio1/chrismoyles/">Chris Moyles</a> in the morning, so what does any self respecting geek do? I write a script to turn my laptop into a radio alarm clock, with the help of <a class="ext" href="http://www.elgato.com">EyeTV</a>.</p>
<pre class="textmate-source mac_classic"><span class="source source_applescript"><span class="keyword keyword_control keyword_control_applescript">set</span> volume <span class="constant constant_numeric constant_numeric_applescript">2.5</span>
<span class="keyword keyword_control keyword_control_applescript">set</span> <span class="variable variable_other variable_other_applescript">today</span> <span class="keyword keyword_control keyword_control_applescript">to</span> <span class="support support_class support_class_built-in support_class_built-in_applescript">date</span> <span class="support support_class support_class_built-in support_class_built-in_applescript">string</span> <span class="keyword keyword_control keyword_control_reference keyword_control_reference_applescript">of</span> <span class="punctuation punctuation_section punctuation_section_group punctuation_section_group_applescript">(</span><span class="support support_function support_function_standardadditions support_function_standardadditions_miscellaneous support_function_standardadditions_miscellaneous_applescript">current date</span><span class="punctuation punctuation_section punctuation_section_group punctuation_section_group_applescript">)</span>
<span class="keyword keyword_control keyword_control_applescript">set</span> <span class="variable variable_other variable_other_applescript">title_to_play</span> <span class="keyword keyword_control keyword_control_applescript">to</span> <span class="string string_quoted string_quoted_double string_quoted_double_applescript"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_applescript">"</span>Chris Moyles<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_applescript">"</span></span>
<span class="meta meta_tell-block meta_tell-block_application meta_tell-block_application_generic meta_tell-block_application_generic_applescript"><span class="keyword keyword_control keyword_control_applescript">tell</span> <span class="support support_class support_class_built-in support_class_built-in_applescript">application</span> <span class="string string_quoted string_quoted_double string_quoted_double_application-name string_quoted_double_application-name_applescript"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_applescript">"</span>EyeTV<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_applescript">"</span></span>
    <span class="support support_function support_function_standard-suite support_function_standard-suite_applescript">activate</span>
    volume_change level <span class="constant constant_numeric constant_numeric_applescript">1</span>
    <span class="keyword keyword_control keyword_control_applescript">set</span> <span class="variable variable_other variable_other_applescript">no_recordings</span> <span class="keyword keyword_control keyword_control_applescript">to</span> <span class="support support_function support_function_built-in support_function_built-in_applescript">number of</span> <span class="support support_class support_class_standard-suite support_class_standard-suite_applescript">items</span> <span class="keyword keyword_control keyword_control_reference keyword_control_reference_applescript">in</span> recordings
    <span class="keyword keyword_control keyword_control_applescript">set</span> <span class="variable variable_other variable_other_applescript">i</span> <span class="keyword keyword_control keyword_control_applescript">to</span> <span class="constant constant_numeric constant_numeric_applescript">0</span>
    <span class="keyword keyword_control keyword_control_applescript">repeat until</span> i <span class="keyword keyword_operator keyword_operator_applescript">is equal to</span> no_recordings
        <span class="keyword keyword_control keyword_control_applescript">set</span> <span class="variable variable_other variable_other_applescript">i</span> <span class="keyword keyword_control keyword_control_applescript">to</span> i <span class="keyword keyword_operator keyword_operator_applescript">+</span> <span class="constant constant_numeric constant_numeric_applescript">1</span>
        <span class="keyword keyword_control keyword_control_applescript">set</span> <span class="variable variable_other variable_other_applescript">recording_item</span> <span class="keyword keyword_control keyword_control_applescript">to</span> <span class="support support_class support_class_standard-suite support_class_standard-suite_applescript">item</span> i <span class="keyword keyword_control keyword_control_reference keyword_control_reference_applescript">of</span> recordings
        <span class="keyword keyword_control keyword_control_applescript">set</span> <span class="variable variable_other variable_other_applescript">recording_time</span> <span class="keyword keyword_control keyword_control_applescript">to</span> start time <span class="keyword keyword_control keyword_control_reference keyword_control_reference_applescript">of</span> recording_item
        <span class="keyword keyword_control keyword_control_applescript">if</span> <span class="support support_class support_class_built-in support_class_built-in_applescript">date</span> <span class="support support_class support_class_built-in support_class_built-in_applescript">string</span> <span class="keyword keyword_control keyword_control_reference keyword_control_reference_applescript">of</span> <span class="punctuation punctuation_section punctuation_section_group punctuation_section_group_applescript">(</span>recording_time<span class="punctuation punctuation_section punctuation_section_group punctuation_section_group_applescript">)</span> <span class="keyword keyword_operator keyword_operator_applescript">is equal to</span> today <span class="keyword keyword_control keyword_control_applescript">then</span>
            <span class="keyword keyword_control keyword_control_applescript">if</span> title <span class="keyword keyword_control keyword_control_reference keyword_control_reference_applescript">of</span> recording_item <span class="keyword keyword_operator keyword_operator_applescript">contains</span> title_to_play <span class="keyword keyword_control keyword_control_applescript">then</span>
                play recording_item
            <span class="keyword keyword_control keyword_control_applescript">end if</span>
        <span class="keyword keyword_control keyword_control_applescript">end if</span>
    <span class="keyword keyword_control keyword_control_applescript">end repeat</span>
<span class="keyword keyword_control keyword_control_applescript">end tell</span></span></span></pre>
<p>Firstly, it sets the volume, so I can have my Mac muted through the night and when the script is activated, the volume will be turned up. It then sets the date to a string and we give a name which needs to be in the title of recordings we wish to play. The script then loops through all the recordings to find any made today. When it finds one, which also contains &#8220;Chris Moyles&#8221; in the title, we tell EyeTV to play it.</p>
<p>You could look for any string or take out the check completely to play all of today&#8217;s recordings.</p>
<p>You also need to set up a schedule in EyeTV to record the shows you want to play back, making sure that they start recording before you want to be woken up. In the event that EyeTV didn&#8217;t record (through error or Moyles not actually being on) I have extended the script by adding the following if no recordings were found.</p>
<pre class="textmate-source mac_classic"><span class="source source_applescript"><span class="meta meta_tell-block meta_tell-block_application meta_tell-block_application_itunes meta_tell-block_application_itunes_applescript"><span class="keyword keyword_control keyword_control_applescript">tell</span> <span class="support support_class support_class_itunes support_class_itunes_applescript">application</span> <span class="string string_quoted string_quoted_double string_quoted_double_application-name string_quoted_double_application-name_applescript"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_applescript">"</span>iTunes<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_applescript">"</span></span>
    <span class="support support_function support_function_standard-suite support_function_standard-suite_applescript">activate</span>
    <span class="support support_function support_function_itunes support_function_itunes_applescript">play</span> <span class="support support_class support_class_itunes support_class_itunes_applescript">playlist</span> <span class="string string_quoted string_quoted_double string_quoted_double_applescript"><span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_applescript">"</span>Party Shuffle<span class="punctuation punctuation_definition punctuation_definition_string punctuation_definition_string_applescript">"</span></span>
<span class="keyword keyword_control keyword_control_applescript">end tell</span></span></span></pre>
<p>This will play my party shuffle playlist in iTunes so I&#8217;ll always have something to wake up to.</p>
<p>At the moment, I&#8217;m triggering this script using an event in iCal, using the &#8220;Run Script&#8221; option in the alarms section. I&#8217;m trying to find a better solution to this, so if anyone has any suggestions, please post them.</p>
<img src="http://feeds.feedburner.com/~r/DanielTull/~4/8BJpjEGsYnA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.danieltull.co.uk/blog/2008/05/09/radio-alarm-clock-applescript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.danieltull.co.uk/blog/2008/05/09/radio-alarm-clock-applescript/</feedburner:origLink></item>
		<item>
		<title>Tomorrows iPhone “Roadmap” Announcement</title>
		<link>http://feedproxy.google.com/~r/DanielTull/~3/62toYcEIKRg/</link>
		<comments>http://www.danieltull.co.uk/blog/2008/03/05/tomorrows-iphone-roadmap-announcement/#comments</comments>
		<pubDate>Wed, 05 Mar 2008 16:52:34 +0000</pubDate>
		<dc:creator>Daniel Tull</dc:creator>
				<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">http://www.danieltull.co.uk/blog/2008/03/05/tomorrows-iphone-roadmap-announcement/</guid>
		<description><![CDATA[I&#8217;m going to talk about the event tomorrow which will surely announce what iPhone/iPod touch owners have been waiting for: the iPhone SDK, that&#8217;s Software Development Kit for those that don&#8217;t know. An SDK allows developers to build upon foundations to create pieces of software in a quicker time, which will often look and feel [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m going to talk about the event tomorrow which will surely announce what iPhone/iPod touch owners have been waiting for: the iPhone SDK, that&#8217;s Software Development Kit for those that don&#8217;t know. An SDK allows developers to build upon foundations to create pieces of software in a quicker time, which will often look and feel better than software built without an SDK.</p>
<p>Everyone loves predictions and here are mine:</p>
<h2>The SDK will be announced tomorrow and released as beta</h2>
<p>It will use Xcode and Interface Builder, like many Mac developers already know and will be available to everyone with a free ADC account. Yes, everyone (except the Linux guys&#8230; sorry). Windows users will get an Xcode and Interface Builder that can create iPhone applications too.</p>
<p>This would be a great positive. Firstly it increases the number of overall iPhone developers, creating a platform which many can create for. Secondly, it lets those developers experience Xcode, if they like it, they may just start building for Mac OS X proper, and that would mean buying a Mac. This would be the iPod halo for developers.</p>
<p>The SDK will allow the developer to access the multi-touch features, accelerometer (to determine which way up it is), network connections. I wonder whether they will allow access to the dock connector, I hope so. </p>
<h2>A major iPhone software update will be released</h2>
<p>A few changes need to be made as I see, mostly to do with security. As far as I know the iPhone software runs all processes as root, which essentially means all software has access to everything on the device.</p>
<p>Obviously third party apps need to be restricted so they don&#8217;t mess up your devices settings or worse start sending unwarranted text messages left, right and center. This should be done with a refinement to the iPhone&#8217;s users, creating a non-root account for apps to run under. They can&#8217;t rely on a restricted distribution model to keep out the viruses.</p>
<h2>Software will be distributed through iTunes</h2>
<p>This is painfully obvious to me and has been well before rumours started; Apple are a company who like to control *everything*. The iPod model has worked well: hardware, software and content distribution. Well this is exactly the same situation.</p>
<p>Now the question is whether they will allow all apps to exist, for example a Skype app would surely harm their relationship with the phone carriers? Hopefully they&#8217;ll be quite open about what they allow, or they&#8217;ll just push people underground (hell there is already an underground in the form of the hacked apps out now) and that will mean Apple isn&#8217;t in control of that sector of the market.</p>
<p>There&#8217;s been much concern over pricing on the iTunes store. Well the iTunes store also caters for podcasts, which are free, so it&#8217;s not unreasonable to think that they would allow for free and open-source apps to go up there. I personally believe that this model couldn&#8217;t be better for the developer AND consumer.</p>
<p>Firstly, it allows the developer to have a marketplace without needing a website or payment system. It also allows them to develop the app without the worry of piracy. They needn&#8217;t worry about software keys for customers when distributing through iTunes. From the consumer&#8217;s point of view, they will get automatic updates through iTunes and a guarantee that the software isn&#8217;t a virus.</p>
<p>That&#8217;s my big three: Xcode for development: Mac + Win, iTunes for distribution including open source and free software and an iPhone update to the user accounts to allow it to happen. Not ground-breaking predictions, but I think anyone who thinks the SDK will be ground-breaking is kidding themselves completely.</p>
<p>Apple&#8217;s major issue with this announcement is that they will get scrutinised. So Apple need to give as much as they can without letting their grip of the system go. If Apple require apps to go through iTunes, as long as anything (within reason &#8211; no viruses etc) can get into the catalog, then I&#8217;d guess the majority of developers will be happy. If Apple start refusing access to apps they don&#8217;t like, they&#8217;ll be put in the dog house and the hacking community will resume, leaving Apple completely out of control; Not a position they like to be in.</p>
<img src="http://feeds.feedburner.com/~r/DanielTull/~4/62toYcEIKRg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.danieltull.co.uk/blog/2008/03/05/tomorrows-iphone-roadmap-announcement/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.danieltull.co.uk/blog/2008/03/05/tomorrows-iphone-roadmap-announcement/</feedburner:origLink></item>
		<item>
		<title>After the London to Brighton Bike Ride</title>
		<link>http://feedproxy.google.com/~r/DanielTull/~3/qHQfIiU0NUo/</link>
		<comments>http://www.danieltull.co.uk/blog/2007/06/17/after-the-london-to-brighton-bike-ride/#comments</comments>
		<pubDate>Sun, 17 Jun 2007 14:59:39 +0000</pubDate>
		<dc:creator>Daniel Tull</dc:creator>
				<category><![CDATA[British Heart Foundation]]></category>

		<guid isPermaLink="false">http://www.danieltull.co.uk/blog/2007/06/17/after-the-london-to-brighton-bike-ride/</guid>
		<description><![CDATA[Well, to be truthful, I don&#8217;t ache as much as I thought I would. That&#8217;s not to say it was easy, but it was a lot of fun. Rob and I enjoyed weaving through the traffic of bikes early on and throughout the morning. I&#8217;m definitely up for it again next year, where hopefully I [...]]]></description>
			<content:encoded><![CDATA[<p>Well, to be truthful, I don&#8217;t ache as much as I thought I would. That&#8217;s not to say it was easy, but it was a lot of fun. Rob and I enjoyed weaving through the traffic of bikes early on and throughout the morning. I&#8217;m definitely up for it again next year, where hopefully I can beat my time.</p>
<p>The time then. 54 miles and my ride time (the time I was actually pedaling) from my speedometer was 4 hours 15 minutes and 44 seconds, although in the real world it took me around 5 hours. I never envisioned the amount of people that would be there, which made the early sections longer than I thought they&#8217;d be. Seriously though, there were loads of people. I&#8217;ve never had to deal with riding with that many people before. I did encounter a family cycle day in Exeter once, but that was tiny when compared to this.</p>
<p>Thanks to all those who sponsored me, I should break the hundred pounds mark, which is awesome. Also, as ever, I&#8217;ve uploaded some photos. Some of them were taken by my Dad when he saw us about and by myself when we stopped.</p>
<img src="http://feeds.feedburner.com/~r/DanielTull/~4/qHQfIiU0NUo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.danieltull.co.uk/blog/2007/06/17/after-the-london-to-brighton-bike-ride/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.danieltull.co.uk/blog/2007/06/17/after-the-london-to-brighton-bike-ride/</feedburner:origLink></item>
		<item>
		<title>London to Brighton sponsor request</title>
		<link>http://feedproxy.google.com/~r/DanielTull/~3/ZyuJbBCu5J4/</link>
		<comments>http://www.danieltull.co.uk/blog/2007/06/16/london-to-brighton-sponsor-request/#comments</comments>
		<pubDate>Sat, 16 Jun 2007 09:39:47 +0000</pubDate>
		<dc:creator>Daniel Tull</dc:creator>
				<category><![CDATA[British Heart Foundation]]></category>

		<guid isPermaLink="false">http://www.danieltull.co.uk/blog/2007/06/16/london-to-brighton-sponsor-request/</guid>
		<description><![CDATA[My posts on this have been much more sparse than I had wanted to, due to not being able to train because of a bad ankle for two weeks, then the university work I had to do in the weeks after that.
So tomorrow is the big day. And I need your help. I have set [...]]]></description>
			<content:encoded><![CDATA[<p>My posts on this have been much more sparse than I had wanted to, due to not being able to train because of a bad ankle for two weeks, then the university work I had to do in the weeks after that.</p>
<p>So tomorrow is the big day. And I need your help. I have set up my online sponsor page at the British Heart Foundation site: <a href="http://www.bhf.org.uk/sponsor/danieltull">http://www.bhf.org.uk/sponsor/danieltull</a>. All donations go straight to the BHF, without me having to worry about collecting around and chasing people up. I do ask people to tick &#8220;gift aid&#8221; on the form, it won&#8217;t cost you any more money, but it will make your donation worth 28p more for each £1 you donate. Stupid government taxing charities&#8230;</p>
<p>I&#8217;m looking to raise £100 and I have £45 so far, although I know a lot of people said they would sponsor, but haven&#8217;t said an amount to put them down for. If you do sponsor me, leave a comment below so I know who you all are! </p>
<img src="http://feeds.feedburner.com/~r/DanielTull/~4/ZyuJbBCu5J4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.danieltull.co.uk/blog/2007/06/16/london-to-brighton-sponsor-request/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.danieltull.co.uk/blog/2007/06/16/london-to-brighton-sponsor-request/</feedburner:origLink></item>
	</channel>
</rss>
